mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-04 14:48:39 +08:00 
			
		
		
		
	determine default branch (#278)
This commit is contained in:
		
							parent
							
								
									453ee27fca
								
							
						
					
					
						commit
						00a3be8934
					
				| 
						 | 
					@ -42,7 +42,7 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # The branch, tag or SHA to checkout. When checking out the repository that
 | 
					    # The branch, tag or SHA to checkout. When checking out the repository that
 | 
				
			||||||
    # triggered a workflow, this defaults to the reference or SHA for that event.
 | 
					    # triggered a workflow, this defaults to the reference or SHA for that event.
 | 
				
			||||||
    # Otherwise, defaults to `master`.
 | 
					    # Otherwise, uses the default branch.
 | 
				
			||||||
    ref: ''
 | 
					    ref: ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Personal access token (PAT) used to fetch the repository. The PAT is configured
 | 
					    # Personal access token (PAT) used to fetch the repository. The PAT is configured
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -110,13 +110,6 @@ describe('input-helper tests', () => {
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('sets correct default ref/sha for other repo', () => {
 | 
					 | 
				
			||||||
    inputs.repository = 'some-owner/some-other-repo'
 | 
					 | 
				
			||||||
    const settings: IGitSourceSettings = inputHelper.getInputs()
 | 
					 | 
				
			||||||
    expect(settings.ref).toBe('refs/heads/master')
 | 
					 | 
				
			||||||
    expect(settings.commit).toBeFalsy()
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  it('sets ref to empty when explicit sha', () => {
 | 
					  it('sets ref to empty when explicit sha', () => {
 | 
				
			||||||
    inputs.ref = '1111111111222222222233333333334444444444'
 | 
					    inputs.ref = '1111111111222222222233333333334444444444'
 | 
				
			||||||
    const settings: IGitSourceSettings = inputHelper.getInputs()
 | 
					    const settings: IGitSourceSettings = inputHelper.getInputs()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ inputs:
 | 
				
			||||||
    description: >
 | 
					    description: >
 | 
				
			||||||
      The branch, tag or SHA to checkout. When checking out the repository that
 | 
					      The branch, tag or SHA to checkout. When checking out the repository that
 | 
				
			||||||
      triggered a workflow, this defaults to the reference or SHA for that
 | 
					      triggered a workflow, this defaults to the reference or SHA for that
 | 
				
			||||||
      event.  Otherwise, defaults to `master`.
 | 
					      event.  Otherwise, uses the default branch.
 | 
				
			||||||
  token:
 | 
					  token:
 | 
				
			||||||
    description: >
 | 
					    description: >
 | 
				
			||||||
      Personal access token (PAT) used to fetch the repository. The PAT is configured
 | 
					      Personal access token (PAT) used to fetch the repository. The PAT is configured
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										36
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -6114,6 +6114,12 @@ function getSource(settings) {
 | 
				
			||||||
        // Repository URL
 | 
					        // Repository URL
 | 
				
			||||||
        core.info(`Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}`);
 | 
					        core.info(`Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}`);
 | 
				
			||||||
        const repositoryUrl = urlHelper.getFetchUrl(settings);
 | 
					        const repositoryUrl = urlHelper.getFetchUrl(settings);
 | 
				
			||||||
 | 
					        // Determine the default branch
 | 
				
			||||||
 | 
					        if (!settings.ref && !settings.commit) {
 | 
				
			||||||
 | 
					            core.startGroup('Determining the default branch');
 | 
				
			||||||
 | 
					            settings.ref = yield githubApiHelper.getDefaultBranch(settings.authToken, settings.repositoryOwner, settings.repositoryName);
 | 
				
			||||||
 | 
					            core.endGroup();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        // Remove conflicting file path
 | 
					        // Remove conflicting file path
 | 
				
			||||||
        if (fsHelper.fileExistsSync(settings.repositoryPath)) {
 | 
					        if (fsHelper.fileExistsSync(settings.repositoryPath)) {
 | 
				
			||||||
            yield io.rmRF(settings.repositoryPath);
 | 
					            yield io.rmRF(settings.repositoryPath);
 | 
				
			||||||
| 
						 | 
					@ -9569,6 +9575,31 @@ function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath)
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.downloadRepository = downloadRepository;
 | 
					exports.downloadRepository = downloadRepository;
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Looks up the default branch name
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getDefaultBranch(authToken, owner, repo) {
 | 
				
			||||||
 | 
					    return __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
 | 
					        return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
 | 
					            core.info('Retrieving the default branch name');
 | 
				
			||||||
 | 
					            const octokit = new github.GitHub(authToken);
 | 
				
			||||||
 | 
					            const response = yield octokit.repos.get({ owner, repo });
 | 
				
			||||||
 | 
					            if (response.status != 200) {
 | 
				
			||||||
 | 
					                throw new Error(`Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // Print the default branch
 | 
				
			||||||
 | 
					            let result = response.data.default_branch;
 | 
				
			||||||
 | 
					            core.info(`Default branch '${result}'`);
 | 
				
			||||||
 | 
					            assert.ok(result, 'default_branch cannot be empty');
 | 
				
			||||||
 | 
					            // Prefix with 'refs/heads'
 | 
				
			||||||
 | 
					            if (!result.startsWith('refs/')) {
 | 
				
			||||||
 | 
					                result = `refs/heads/${result}`;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return result;
 | 
				
			||||||
 | 
					        }));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					exports.getDefaultBranch = getDefaultBranch;
 | 
				
			||||||
function downloadArchive(authToken, owner, repo, ref, commit) {
 | 
					function downloadArchive(authToken, owner, repo, ref, commit) {
 | 
				
			||||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
					    return __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
        const octokit = new github.GitHub(authToken);
 | 
					        const octokit = new github.GitHub(authToken);
 | 
				
			||||||
| 
						 | 
					@ -14471,9 +14502,6 @@ function getInputs() {
 | 
				
			||||||
                result.ref = `refs/heads/${result.ref}`;
 | 
					                result.ref = `refs/heads/${result.ref}`;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!result.ref && !result.commit) {
 | 
					 | 
				
			||||||
            result.ref = 'refs/heads/master';
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // SHA?
 | 
					    // SHA?
 | 
				
			||||||
    else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) {
 | 
					    else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) {
 | 
				
			||||||
| 
						 | 
					@ -14508,7 +14536,7 @@ function getInputs() {
 | 
				
			||||||
    core.debug(`submodules = ${result.submodules}`);
 | 
					    core.debug(`submodules = ${result.submodules}`);
 | 
				
			||||||
    core.debug(`recursive submodules = ${result.nestedSubmodules}`);
 | 
					    core.debug(`recursive submodules = ${result.nestedSubmodules}`);
 | 
				
			||||||
    // Auth token
 | 
					    // Auth token
 | 
				
			||||||
    result.authToken = core.getInput('token');
 | 
					    result.authToken = core.getInput('token', { required: true });
 | 
				
			||||||
    // SSH
 | 
					    // SSH
 | 
				
			||||||
    result.sshKey = core.getInput('ssh-key');
 | 
					    result.sshKey = core.getInput('ssh-key');
 | 
				
			||||||
    result.sshKnownHosts = core.getInput('ssh-known-hosts');
 | 
					    result.sshKnownHosts = core.getInput('ssh-known-hosts');
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,17 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
  const repositoryUrl = urlHelper.getFetchUrl(settings)
 | 
					  const repositoryUrl = urlHelper.getFetchUrl(settings)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Determine the default branch
 | 
				
			||||||
 | 
					  if (!settings.ref && !settings.commit) {
 | 
				
			||||||
 | 
					    core.startGroup('Determining the default branch')
 | 
				
			||||||
 | 
					    settings.ref = await githubApiHelper.getDefaultBranch(
 | 
				
			||||||
 | 
					      settings.authToken,
 | 
				
			||||||
 | 
					      settings.repositoryOwner,
 | 
				
			||||||
 | 
					      settings.repositoryName
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    core.endGroup()
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Remove conflicting file path
 | 
					  // Remove conflicting file path
 | 
				
			||||||
  if (fsHelper.fileExistsSync(settings.repositoryPath)) {
 | 
					  if (fsHelper.fileExistsSync(settings.repositoryPath)) {
 | 
				
			||||||
    await io.rmRF(settings.repositoryPath)
 | 
					    await io.rmRF(settings.repositoryPath)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,6 +67,38 @@ export async function downloadRepository(
 | 
				
			||||||
  io.rmRF(extractPath)
 | 
					  io.rmRF(extractPath)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Looks up the default branch name
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export async function getDefaultBranch(
 | 
				
			||||||
 | 
					  authToken: string,
 | 
				
			||||||
 | 
					  owner: string,
 | 
				
			||||||
 | 
					  repo: string
 | 
				
			||||||
 | 
					): Promise<string> {
 | 
				
			||||||
 | 
					  return await retryHelper.execute(async () => {
 | 
				
			||||||
 | 
					    core.info('Retrieving the default branch name')
 | 
				
			||||||
 | 
					    const octokit = new github.GitHub(authToken)
 | 
				
			||||||
 | 
					    const response = await octokit.repos.get({owner, repo})
 | 
				
			||||||
 | 
					    if (response.status != 200) {
 | 
				
			||||||
 | 
					      throw new Error(
 | 
				
			||||||
 | 
					        `Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Print the default branch
 | 
				
			||||||
 | 
					    let result = response.data.default_branch
 | 
				
			||||||
 | 
					    core.info(`Default branch '${result}'`)
 | 
				
			||||||
 | 
					    assert.ok(result, 'default_branch cannot be empty')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Prefix with 'refs/heads'
 | 
				
			||||||
 | 
					    if (!result.startsWith('refs/')) {
 | 
				
			||||||
 | 
					      result = `refs/heads/${result}`
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return result
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function downloadArchive(
 | 
					async function downloadArchive(
 | 
				
			||||||
  authToken: string,
 | 
					  authToken: string,
 | 
				
			||||||
  owner: string,
 | 
					  owner: string,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,10 +68,6 @@ export function getInputs(): IGitSourceSettings {
 | 
				
			||||||
        result.ref = `refs/heads/${result.ref}`
 | 
					        result.ref = `refs/heads/${result.ref}`
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!result.ref && !result.commit) {
 | 
					 | 
				
			||||||
      result.ref = 'refs/heads/master'
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // SHA?
 | 
					  // SHA?
 | 
				
			||||||
  else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) {
 | 
					  else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) {
 | 
				
			||||||
| 
						 | 
					@ -110,7 +106,7 @@ export function getInputs(): IGitSourceSettings {
 | 
				
			||||||
  core.debug(`recursive submodules = ${result.nestedSubmodules}`)
 | 
					  core.debug(`recursive submodules = ${result.nestedSubmodules}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Auth token
 | 
					  // Auth token
 | 
				
			||||||
  result.authToken = core.getInput('token')
 | 
					  result.authToken = core.getInput('token', {required: true})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // SSH
 | 
					  // SSH
 | 
				
			||||||
  result.sshKey = core.getInput('ssh-key')
 | 
					  result.sshKey = core.getInput('ssh-key')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user