mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 18:18:37 +08:00 
			
		
		
		
	Merge e978c3f43b into ac59398561
				
					
				
			This commit is contained in:
		
						commit
						75215f8857
					
				|  | @ -297,6 +297,41 @@ describe('git-auth-helper tests', () => { | |||
|     ) | ||||
|   }) | ||||
| 
 | ||||
|   const configureAuth_setsSshCommandWithCustomCommand = | ||||
|     'sets SSH command preseving custom command' | ||||
|   it(configureAuth_setsSshCommandWithCustomCommand, async () => { | ||||
|     // Arrange
 | ||||
|     await setup(configureAuth_setsSshCommandWithCustomCommand) | ||||
|     await fs.promises.writeFile(globalGitConfigPath, 'core.sshCommand fakeSsh') | ||||
|     expect(await git.configExists('core.sshCommand', true)).toBeTruthy() // sanity check
 | ||||
|     expect(await git.configGet('core.sshCommand', true)).toBe('fakeSsh') // sanity check
 | ||||
| 
 | ||||
|     const authHelper = gitAuthHelper.createAuthHelper(git, settings) | ||||
| 
 | ||||
|     // Act
 | ||||
|     await authHelper.configureAuth() | ||||
|     expect(git.configGet).toHaveBeenCalledWith('core.sshCommand', true) | ||||
| 
 | ||||
|     // Assert git env var
 | ||||
|     const actualKeyPath = await getActualSshKeyPath() | ||||
|     const actualKnownHostsPath = await getActualSshKnownHostsPath() | ||||
|     const expectedSshCommand = `"fakeSsh" -i "$RUNNER_TEMP/${path.basename( | ||||
|       actualKeyPath | ||||
|     )}" -o StrictHostKeyChecking=yes -o CheckHostIP=no -o "UserKnownHostsFile=$RUNNER_TEMP/${path.basename( | ||||
|       actualKnownHostsPath | ||||
|     )}"` | ||||
|     expect(git.setEnvironmentVariable).toHaveBeenCalledWith( | ||||
|       'GIT_SSH_COMMAND', | ||||
|       expectedSshCommand | ||||
|     ) | ||||
| 
 | ||||
|     // Asserty git config
 | ||||
|     expect(git.config).toHaveBeenCalledWith( | ||||
|       'core.sshCommand', | ||||
|       expectedSshCommand | ||||
|     ) | ||||
|   }) | ||||
| 
 | ||||
|   const configureAuth_writesExplicitKnownHosts = 'writes explicit known hosts' | ||||
|   it(configureAuth_writesExplicitKnownHosts, async () => { | ||||
|     if (!sshPath) { | ||||
|  | @ -739,15 +774,47 @@ async function setup(testName: string): Promise<void> { | |||
|     ), | ||||
|     configExists: jest.fn( | ||||
|       async (key: string, globalConfig?: boolean): Promise<boolean> => { | ||||
|         const configPath = globalConfig | ||||
|           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') | ||||
|           : localGitConfigPath | ||||
|         const content = await fs.promises.readFile(configPath) | ||||
|         const lines = content | ||||
|           .toString() | ||||
|           .split('\n') | ||||
|           .filter(x => x) | ||||
|         return lines.some(x => x.startsWith(key)) | ||||
|         try { | ||||
|           const configPath = globalConfig | ||||
|             ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') | ||||
|             : localGitConfigPath | ||||
|           const content = await fs.promises.readFile(configPath) | ||||
|           const lines = content | ||||
|             .toString() | ||||
|             .split('\n') | ||||
|             .filter(x => x) | ||||
|           return lines.some(x => x.startsWith(key)) | ||||
|         } catch (error) { | ||||
|           if ((error as any)?.code === 'ENOENT') { | ||||
|             return false | ||||
|           } | ||||
|           throw error | ||||
|         } | ||||
|       } | ||||
|     ), | ||||
|     configGet: jest.fn( | ||||
|       async (key: string, globalConfig?: boolean): Promise<string> => { | ||||
|         try { | ||||
|           const configPath = globalConfig | ||||
|             ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') | ||||
|             : localGitConfigPath | ||||
|           const content = await fs.promises.readFile(configPath) | ||||
|           const lines = content | ||||
|             .toString() | ||||
|             .split('\n') | ||||
|             .filter(x => x) | ||||
|             .filter(x => x.startsWith(key)) | ||||
|           if (lines.length) { | ||||
|             return lines[0].split(' ')[1] | ||||
|           } else { | ||||
|             return '' | ||||
|           } | ||||
|         } catch (error) { | ||||
|           if ((error as any)?.code === 'ENOENT') { | ||||
|             return '' | ||||
|           } | ||||
|           throw error | ||||
|         } | ||||
|       } | ||||
|     ), | ||||
|     env: {}, | ||||
|  |  | |||
|  | @ -407,6 +407,7 @@ async function setup(testName: string): Promise<void> { | |||
|     checkoutDetach: jest.fn(), | ||||
|     config: jest.fn(), | ||||
|     configExists: jest.fn(), | ||||
|     configGet: jest.fn(), | ||||
|     fetch: jest.fn(), | ||||
|     getDefaultBranch: jest.fn(), | ||||
|     getWorkingDirectory: jest.fn(() => repositoryPath), | ||||
|  |  | |||
							
								
								
									
										14
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							|  | @ -7253,7 +7253,9 @@ class GitAuthHelper { | |||
|             stateHelper.setSshKnownHostsPath(this.sshKnownHostsPath); | ||||
|             yield fs.promises.writeFile(this.sshKnownHostsPath, knownHosts); | ||||
|             // Configure GIT_SSH_COMMAND
 | ||||
|             const sshPath = yield io.which('ssh', true); | ||||
|             const sshPath = (yield this.git.configExists(SSH_COMMAND_KEY, true)) | ||||
|                 ? yield this.git.configGet(SSH_COMMAND_KEY, true) | ||||
|                 : yield io.which('ssh', true); | ||||
|             this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(this.sshKeyPath)}"`; | ||||
|             if (this.settings.sshStrict) { | ||||
|                 this.sshCommand += ' -o StrictHostKeyChecking=yes -o CheckHostIP=no'; | ||||
|  | @ -7533,6 +7535,16 @@ class GitCommandManager { | |||
|             return output.exitCode === 0; | ||||
|         }); | ||||
|     } | ||||
|     configGet(configKey, globalConfig) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             const output = yield this.execGit([ | ||||
|                 'config', | ||||
|                 globalConfig ? '--global' : '--local', | ||||
|                 configKey | ||||
|             ]); | ||||
|             return output.stdout.trim(); | ||||
|         }); | ||||
|     } | ||||
|     fetch(refSpec, fetchDepth) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             const args = ['-c', 'protocol.version=2', 'fetch']; | ||||
|  |  | |||
|  | @ -253,7 +253,9 @@ class GitAuthHelper { | |||
|     await fs.promises.writeFile(this.sshKnownHostsPath, knownHosts) | ||||
| 
 | ||||
|     // Configure GIT_SSH_COMMAND
 | ||||
|     const sshPath = await io.which('ssh', true) | ||||
|     const sshPath = (await this.git.configExists(SSH_COMMAND_KEY, true)) | ||||
|       ? await this.git.configGet(SSH_COMMAND_KEY, true) | ||||
|       : await io.which('ssh', true) | ||||
|     this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename( | ||||
|       this.sshKeyPath | ||||
|     )}"` | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ export interface IGitCommandManager { | |||
|   ): Promise<void> | ||||
|   configExists(configKey: string, globalConfig?: boolean): Promise<boolean> | ||||
|   fetch(refSpec: string[], fetchDepth?: number): Promise<void> | ||||
|   configGet(configKey: string, globalConfig?: boolean): Promise<string> | ||||
|   getDefaultBranch(repositoryUrl: string): Promise<string> | ||||
|   getWorkingDirectory(): string | ||||
|   init(): Promise<void> | ||||
|  | @ -201,6 +202,15 @@ class GitCommandManager { | |||
|     return output.exitCode === 0 | ||||
|   } | ||||
| 
 | ||||
|   async configGet(configKey: string, globalConfig?: boolean): Promise<string> { | ||||
|     const output = await this.execGit([ | ||||
|       'config', | ||||
|       globalConfig ? '--global' : '--local', | ||||
|       configKey | ||||
|     ]) | ||||
|     return output.stdout.trim() | ||||
|   } | ||||
| 
 | ||||
|   async fetch(refSpec: string[], fetchDepth?: number): Promise<void> { | ||||
|     const args = ['-c', 'protocol.version=2', 'fetch'] | ||||
|     if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Luca Niccoli
						Luca Niccoli