mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-04 13:29:15 +08:00 
			
		
		
		
	Fix: Checkout fail in self-hosted runners when faulty submodule are checked-in (#1196)
* Fix Self hosted runner issue wrt bad submodules - solution cleanup working space. * Fix format with npm run format output * Add mock implementation for new function submoduleStatus * Add 2 test cases for submodule status. * Codeql-Action Analyse revert v1 to v2 --------- Co-authored-by: Bassem Dghaidi <568794+Link-@users.noreply.github.com> Co-authored-by: sminnie <minnie@sankhe.com>
This commit is contained in:
		@@ -281,6 +281,65 @@ describe('git-directory-helper tests', () => {
 | 
			
		||||
    expect(git.branchDelete).toHaveBeenCalledWith(false, 'local-branch-2')
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const cleanWhenSubmoduleStatusIsFalse =
 | 
			
		||||
    'cleans when submodule status is false'
 | 
			
		||||
 | 
			
		||||
  it(cleanWhenSubmoduleStatusIsFalse, async () => {
 | 
			
		||||
    // Arrange
 | 
			
		||||
    await setup(cleanWhenSubmoduleStatusIsFalse)
 | 
			
		||||
    await fs.promises.writeFile(path.join(repositoryPath, 'my-file'), '')
 | 
			
		||||
 | 
			
		||||
    //mock bad submodule
 | 
			
		||||
 | 
			
		||||
    const submoduleStatus = git.submoduleStatus as jest.Mock<any, any>
 | 
			
		||||
    submoduleStatus.mockImplementation(async (remote: boolean) => {
 | 
			
		||||
      return false
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    // Act
 | 
			
		||||
    await gitDirectoryHelper.prepareExistingDirectory(
 | 
			
		||||
      git,
 | 
			
		||||
      repositoryPath,
 | 
			
		||||
      repositoryUrl,
 | 
			
		||||
      clean,
 | 
			
		||||
      ref
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Assert
 | 
			
		||||
    const files = await fs.promises.readdir(repositoryPath)
 | 
			
		||||
    expect(files).toHaveLength(0)
 | 
			
		||||
    expect(git.tryClean).toHaveBeenCalled()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const doesNotCleanWhenSubmoduleStatusIsTrue =
 | 
			
		||||
    'does not clean when submodule status is true'
 | 
			
		||||
 | 
			
		||||
  it(doesNotCleanWhenSubmoduleStatusIsTrue, async () => {
 | 
			
		||||
    // Arrange
 | 
			
		||||
    await setup(doesNotCleanWhenSubmoduleStatusIsTrue)
 | 
			
		||||
    await fs.promises.writeFile(path.join(repositoryPath, 'my-file'), '')
 | 
			
		||||
 | 
			
		||||
    const submoduleStatus = git.submoduleStatus as jest.Mock<any, any>
 | 
			
		||||
    submoduleStatus.mockImplementation(async (remote: boolean) => {
 | 
			
		||||
      return true
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    // Act
 | 
			
		||||
    await gitDirectoryHelper.prepareExistingDirectory(
 | 
			
		||||
      git,
 | 
			
		||||
      repositoryPath,
 | 
			
		||||
      repositoryUrl,
 | 
			
		||||
      clean,
 | 
			
		||||
      ref
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Assert
 | 
			
		||||
 | 
			
		||||
    const files = await fs.promises.readdir(repositoryPath)
 | 
			
		||||
    expect(files.sort()).toEqual(['.git', 'my-file'])
 | 
			
		||||
    expect(git.tryClean).toHaveBeenCalled()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const removesLockFiles = 'removes lock files'
 | 
			
		||||
  it(removesLockFiles, async () => {
 | 
			
		||||
    // Arrange
 | 
			
		||||
@@ -423,6 +482,9 @@ async function setup(testName: string): Promise<void> {
 | 
			
		||||
    submoduleForeach: jest.fn(),
 | 
			
		||||
    submoduleSync: jest.fn(),
 | 
			
		||||
    submoduleUpdate: jest.fn(),
 | 
			
		||||
    submoduleStatus: jest.fn(async () => {
 | 
			
		||||
      return true
 | 
			
		||||
    }),
 | 
			
		||||
    tagExists: jest.fn(),
 | 
			
		||||
    tryClean: jest.fn(async () => {
 | 
			
		||||
      return true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user