mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 05:25:55 +08:00 
			
		
		
		
	determine default branch (#278)
This commit is contained in:
		| @@ -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 | ||||
|     # triggered a workflow, this defaults to the reference or SHA for that event. | ||||
|     # Otherwise, defaults to `master`. | ||||
|     # Otherwise, uses the default branch. | ||||
|     ref: '' | ||||
|  | ||||
|     # 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', () => { | ||||
|     inputs.ref = '1111111111222222222233333333334444444444' | ||||
|     const settings: IGitSourceSettings = inputHelper.getInputs() | ||||
|   | ||||
| @@ -8,7 +8,7 @@ inputs: | ||||
|     description: > | ||||
|       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.  Otherwise, defaults to `master`. | ||||
|       event.  Otherwise, uses the default branch. | ||||
|   token: | ||||
|     description: > | ||||
|       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 | ||||
|         core.info(`Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}`); | ||||
|         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 | ||||
|         if (fsHelper.fileExistsSync(settings.repositoryPath)) { | ||||
|             yield io.rmRF(settings.repositoryPath); | ||||
| @@ -9569,6 +9575,31 @@ function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) | ||||
|     }); | ||||
| } | ||||
| 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) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         const octokit = new github.GitHub(authToken); | ||||
| @@ -14471,9 +14502,6 @@ function getInputs() { | ||||
|                 result.ref = `refs/heads/${result.ref}`; | ||||
|             } | ||||
|         } | ||||
|         if (!result.ref && !result.commit) { | ||||
|             result.ref = 'refs/heads/master'; | ||||
|         } | ||||
|     } | ||||
|     // SHA? | ||||
|     else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) { | ||||
| @@ -14508,7 +14536,7 @@ function getInputs() { | ||||
|     core.debug(`submodules = ${result.submodules}`); | ||||
|     core.debug(`recursive submodules = ${result.nestedSubmodules}`); | ||||
|     // Auth token | ||||
|     result.authToken = core.getInput('token'); | ||||
|     result.authToken = core.getInput('token', { required: true }); | ||||
|     // SSH | ||||
|     result.sshKey = core.getInput('ssh-key'); | ||||
|     result.sshKnownHosts = core.getInput('ssh-known-hosts'); | ||||
|   | ||||
| @@ -19,6 +19,17 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||
|   ) | ||||
|   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 | ||||
|   if (fsHelper.fileExistsSync(settings.repositoryPath)) { | ||||
|     await io.rmRF(settings.repositoryPath) | ||||
|   | ||||
| @@ -67,6 +67,38 @@ export async function downloadRepository( | ||||
|   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( | ||||
|   authToken: string, | ||||
|   owner: string, | ||||
|   | ||||
| @@ -68,10 +68,6 @@ export function getInputs(): IGitSourceSettings { | ||||
|         result.ref = `refs/heads/${result.ref}` | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (!result.ref && !result.commit) { | ||||
|       result.ref = 'refs/heads/master' | ||||
|     } | ||||
|   } | ||||
|   // SHA? | ||||
|   else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) { | ||||
| @@ -110,7 +106,7 @@ export function getInputs(): IGitSourceSettings { | ||||
|   core.debug(`recursive submodules = ${result.nestedSubmodules}`) | ||||
|  | ||||
|   // Auth token | ||||
|   result.authToken = core.getInput('token') | ||||
|   result.authToken = core.getInput('token', {required: true}) | ||||
|  | ||||
|   // SSH | ||||
|   result.sshKey = core.getInput('ssh-key') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user