mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 05:25:55 +08:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 28c7f3d2b5 | ||
|  | fb6f360df2 | 
| @@ -1,5 +1,10 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## v2.3.1 | ||||
|  | ||||
| - [Fix default branch resolution for .wiki and when using SSH](https://github.com/actions/checkout/pull/284) | ||||
|  | ||||
|  | ||||
| ## v2.3.0 | ||||
|  | ||||
| - [Fallback to the default branch](https://github.com/actions/checkout/pull/278) | ||||
|   | ||||
| @@ -714,6 +714,7 @@ async function setup(testName: string): Promise<void> { | ||||
|     ), | ||||
|     env: {}, | ||||
|     fetch: jest.fn(), | ||||
|     getDefaultBranch: jest.fn(), | ||||
|     getWorkingDirectory: jest.fn(() => workspace), | ||||
|     init: jest.fn(), | ||||
|     isDetached: jest.fn(), | ||||
|   | ||||
| @@ -408,6 +408,7 @@ async function setup(testName: string): Promise<void> { | ||||
|     config: jest.fn(), | ||||
|     configExists: jest.fn(), | ||||
|     fetch: jest.fn(), | ||||
|     getDefaultBranch: jest.fn(), | ||||
|     getWorkingDirectory: jest.fn(() => repositoryPath), | ||||
|     init: jest.fn(), | ||||
|     isDetached: jest.fn(), | ||||
|   | ||||
							
								
								
									
										68
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -5827,6 +5827,33 @@ class GitCommandManager { | ||||
|             })); | ||||
|         }); | ||||
|     } | ||||
|     getDefaultBranch(repositoryUrl) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             let output; | ||||
|             yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { | ||||
|                 output = yield this.execGit([ | ||||
|                     'ls-remote', | ||||
|                     '--quiet', | ||||
|                     '--exit-code', | ||||
|                     '--symref', | ||||
|                     repositoryUrl, | ||||
|                     'HEAD' | ||||
|                 ]); | ||||
|             })); | ||||
|             if (output) { | ||||
|                 // Satisfy compiler, will always be set | ||||
|                 for (let line of output.stdout.trim().split('\n')) { | ||||
|                     line = line.trim(); | ||||
|                     if (line.startsWith('ref:') || line.endsWith('HEAD')) { | ||||
|                         return line | ||||
|                             .substr('ref:'.length, line.length - 'ref:'.length - 'HEAD'.length) | ||||
|                             .trim(); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             throw new Error('Unexpected output when retrieving default branch'); | ||||
|         }); | ||||
|     } | ||||
|     getWorkingDirectory() { | ||||
|         return this.workingDirectory; | ||||
|     } | ||||
| @@ -6114,12 +6141,6 @@ 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); | ||||
| @@ -6172,6 +6193,17 @@ function getSource(settings) { | ||||
|             core.startGroup('Setting up auth'); | ||||
|             yield authHelper.configureAuth(); | ||||
|             core.endGroup(); | ||||
|             // Determine the default branch | ||||
|             if (!settings.ref && !settings.commit) { | ||||
|                 core.startGroup('Determining the default branch'); | ||||
|                 if (settings.sshKey) { | ||||
|                     settings.ref = yield git.getDefaultBranch(repositoryUrl); | ||||
|                 } | ||||
|                 else { | ||||
|                     settings.ref = yield githubApiHelper.getDefaultBranch(settings.authToken, settings.repositoryOwner, settings.repositoryName); | ||||
|                 } | ||||
|                 core.endGroup(); | ||||
|             } | ||||
|             // LFS install | ||||
|             if (settings.lfs) { | ||||
|                 yield git.lfsInstall(); | ||||
| @@ -9531,6 +9563,11 @@ const v4_1 = __importDefault(__webpack_require__(826)); | ||||
| const IS_WINDOWS = process.platform === 'win32'; | ||||
| function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         // Determine the default branch | ||||
|         if (!ref && !commit) { | ||||
|             core.info('Determining the default branch'); | ||||
|             ref = yield getDefaultBranch(authToken, owner, repo); | ||||
|         } | ||||
|         // Download the archive | ||||
|         let archiveData = yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { | ||||
|             core.info('Downloading the archive'); | ||||
| @@ -9583,14 +9620,25 @@ function getDefaultBranch(authToken, owner, repo) { | ||||
|         return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { | ||||
|             core.info('Retrieving the default branch name'); | ||||
|             const octokit = new github.GitHub(authToken); | ||||
|             let result; | ||||
|             try { | ||||
|                 // Get the default branch from the repo info | ||||
|                 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}`); | ||||
|                 result = response.data.default_branch; | ||||
|                 assert.ok(result, 'default_branch cannot be empty'); | ||||
|             } | ||||
|             catch (err) { | ||||
|                 // Handle .wiki repo | ||||
|                 if (err['status'] === 404 && repo.toUpperCase().endsWith('.WIKI')) { | ||||
|                     result = 'master'; | ||||
|                 } | ||||
|                 // Otherwise error | ||||
|                 else { | ||||
|                     throw err; | ||||
|                 } | ||||
|             } | ||||
|             // 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}`; | ||||
|   | ||||
| @@ -25,6 +25,7 @@ export interface IGitCommandManager { | ||||
|   ): Promise<void> | ||||
|   configExists(configKey: string, globalConfig?: boolean): Promise<boolean> | ||||
|   fetch(refSpec: string[], fetchDepth?: number): Promise<void> | ||||
|   getDefaultBranch(repositoryUrl: string): Promise<string> | ||||
|   getWorkingDirectory(): string | ||||
|   init(): Promise<void> | ||||
|   isDetached(): Promise<boolean> | ||||
| @@ -195,6 +196,34 @@ class GitCommandManager { | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   async getDefaultBranch(repositoryUrl: string): Promise<string> { | ||||
|     let output: GitOutput | undefined | ||||
|     await retryHelper.execute(async () => { | ||||
|       output = await this.execGit([ | ||||
|         'ls-remote', | ||||
|         '--quiet', | ||||
|         '--exit-code', | ||||
|         '--symref', | ||||
|         repositoryUrl, | ||||
|         'HEAD' | ||||
|       ]) | ||||
|     }) | ||||
|  | ||||
|     if (output) { | ||||
|       // Satisfy compiler, will always be set | ||||
|       for (let line of output.stdout.trim().split('\n')) { | ||||
|         line = line.trim() | ||||
|         if (line.startsWith('ref:') || line.endsWith('HEAD')) { | ||||
|           return line | ||||
|             .substr('ref:'.length, line.length - 'ref:'.length - 'HEAD'.length) | ||||
|             .trim() | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     throw new Error('Unexpected output when retrieving default branch') | ||||
|   } | ||||
|  | ||||
|   getWorkingDirectory(): string { | ||||
|     return this.workingDirectory | ||||
|   } | ||||
|   | ||||
| @@ -19,17 +19,6 @@ 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) | ||||
| @@ -114,6 +103,21 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||
|     await authHelper.configureAuth() | ||||
|     core.endGroup() | ||||
|  | ||||
|     // Determine the default branch | ||||
|     if (!settings.ref && !settings.commit) { | ||||
|       core.startGroup('Determining the default branch') | ||||
|       if (settings.sshKey) { | ||||
|         settings.ref = await git.getDefaultBranch(repositoryUrl) | ||||
|       } else { | ||||
|         settings.ref = await githubApiHelper.getDefaultBranch( | ||||
|           settings.authToken, | ||||
|           settings.repositoryOwner, | ||||
|           settings.repositoryName | ||||
|         ) | ||||
|       } | ||||
|       core.endGroup() | ||||
|     } | ||||
|  | ||||
|     // LFS install | ||||
|     if (settings.lfs) { | ||||
|       await git.lfsInstall() | ||||
|   | ||||
| @@ -19,6 +19,12 @@ export async function downloadRepository( | ||||
|   commit: string, | ||||
|   repositoryPath: string | ||||
| ): Promise<void> { | ||||
|   // Determine the default branch | ||||
|   if (!ref && !commit) { | ||||
|     core.info('Determining the default branch') | ||||
|     ref = await getDefaultBranch(authToken, owner, repo) | ||||
|   } | ||||
|  | ||||
|   // Download the archive | ||||
|   let archiveData = await retryHelper.execute(async () => { | ||||
|     core.info('Downloading the archive') | ||||
| @@ -78,17 +84,25 @@ export async function getDefaultBranch( | ||||
|   return await retryHelper.execute(async () => { | ||||
|     core.info('Retrieving the default branch name') | ||||
|     const octokit = new github.GitHub(authToken) | ||||
|     let result: string | ||||
|     try { | ||||
|       // Get the default branch from the repo info | ||||
|       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}` | ||||
|       ) | ||||
|       result = response.data.default_branch | ||||
|       assert.ok(result, 'default_branch cannot be empty') | ||||
|     } catch (err) { | ||||
|       // Handle .wiki repo | ||||
|       if (err['status'] === 404 && repo.toUpperCase().endsWith('.WIKI')) { | ||||
|         result = 'master' | ||||
|       } | ||||
|       // Otherwise error | ||||
|       else { | ||||
|         throw err | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     // 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/')) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user