mirror of
				https://gitea.com/actions/checkout.git
				synced 2025-11-04 07:47:05 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					28c7f3d2b5 | ||
| 
						 | 
					fb6f360df2 | 
@@ -1,5 +1,10 @@
 | 
				
			|||||||
# Changelog
 | 
					# Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## v2.3.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [Fix default branch resolution for .wiki and when using SSH](https://github.com/actions/checkout/pull/284)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v2.3.0
 | 
					## v2.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [Fallback to the default branch](https://github.com/actions/checkout/pull/278)
 | 
					- [Fallback to the default branch](https://github.com/actions/checkout/pull/278)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -714,6 +714,7 @@ async function setup(testName: string): Promise<void> {
 | 
				
			|||||||
    ),
 | 
					    ),
 | 
				
			||||||
    env: {},
 | 
					    env: {},
 | 
				
			||||||
    fetch: jest.fn(),
 | 
					    fetch: jest.fn(),
 | 
				
			||||||
 | 
					    getDefaultBranch: jest.fn(),
 | 
				
			||||||
    getWorkingDirectory: jest.fn(() => workspace),
 | 
					    getWorkingDirectory: jest.fn(() => workspace),
 | 
				
			||||||
    init: jest.fn(),
 | 
					    init: jest.fn(),
 | 
				
			||||||
    isDetached: jest.fn(),
 | 
					    isDetached: jest.fn(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -408,6 +408,7 @@ async function setup(testName: string): Promise<void> {
 | 
				
			|||||||
    config: jest.fn(),
 | 
					    config: jest.fn(),
 | 
				
			||||||
    configExists: jest.fn(),
 | 
					    configExists: jest.fn(),
 | 
				
			||||||
    fetch: jest.fn(),
 | 
					    fetch: jest.fn(),
 | 
				
			||||||
 | 
					    getDefaultBranch: jest.fn(),
 | 
				
			||||||
    getWorkingDirectory: jest.fn(() => repositoryPath),
 | 
					    getWorkingDirectory: jest.fn(() => repositoryPath),
 | 
				
			||||||
    init: jest.fn(),
 | 
					    init: jest.fn(),
 | 
				
			||||||
    isDetached: 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() {
 | 
					    getWorkingDirectory() {
 | 
				
			||||||
        return this.workingDirectory;
 | 
					        return this.workingDirectory;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -6114,12 +6141,6 @@ 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);
 | 
				
			||||||
@@ -6172,6 +6193,17 @@ function getSource(settings) {
 | 
				
			|||||||
            core.startGroup('Setting up auth');
 | 
					            core.startGroup('Setting up auth');
 | 
				
			||||||
            yield authHelper.configureAuth();
 | 
					            yield authHelper.configureAuth();
 | 
				
			||||||
            core.endGroup();
 | 
					            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
 | 
					            // LFS install
 | 
				
			||||||
            if (settings.lfs) {
 | 
					            if (settings.lfs) {
 | 
				
			||||||
                yield git.lfsInstall();
 | 
					                yield git.lfsInstall();
 | 
				
			||||||
@@ -9531,6 +9563,11 @@ const v4_1 = __importDefault(__webpack_require__(826));
 | 
				
			|||||||
const IS_WINDOWS = process.platform === 'win32';
 | 
					const IS_WINDOWS = process.platform === 'win32';
 | 
				
			||||||
function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) {
 | 
					function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) {
 | 
				
			||||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
					    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
 | 
					        // Download the archive
 | 
				
			||||||
        let archiveData = yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
 | 
					        let archiveData = yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
            core.info('Downloading the archive');
 | 
					            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* () {
 | 
					        return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
            core.info('Retrieving the default branch name');
 | 
					            core.info('Retrieving the default branch name');
 | 
				
			||||||
            const octokit = new github.GitHub(authToken);
 | 
					            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 });
 | 
					                const response = yield octokit.repos.get({ owner, repo });
 | 
				
			||||||
            if (response.status != 200) {
 | 
					                result = response.data.default_branch;
 | 
				
			||||||
                throw new Error(`Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`);
 | 
					                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
 | 
					            // Print the default branch
 | 
				
			||||||
            let result = response.data.default_branch;
 | 
					 | 
				
			||||||
            core.info(`Default branch '${result}'`);
 | 
					            core.info(`Default branch '${result}'`);
 | 
				
			||||||
            assert.ok(result, 'default_branch cannot be empty');
 | 
					 | 
				
			||||||
            // Prefix with 'refs/heads'
 | 
					            // Prefix with 'refs/heads'
 | 
				
			||||||
            if (!result.startsWith('refs/')) {
 | 
					            if (!result.startsWith('refs/')) {
 | 
				
			||||||
                result = `refs/heads/${result}`;
 | 
					                result = `refs/heads/${result}`;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@ export interface IGitCommandManager {
 | 
				
			|||||||
  ): Promise<void>
 | 
					  ): Promise<void>
 | 
				
			||||||
  configExists(configKey: string, globalConfig?: boolean): Promise<boolean>
 | 
					  configExists(configKey: string, globalConfig?: boolean): Promise<boolean>
 | 
				
			||||||
  fetch(refSpec: string[], fetchDepth?: number): Promise<void>
 | 
					  fetch(refSpec: string[], fetchDepth?: number): Promise<void>
 | 
				
			||||||
 | 
					  getDefaultBranch(repositoryUrl: string): Promise<string>
 | 
				
			||||||
  getWorkingDirectory(): string
 | 
					  getWorkingDirectory(): string
 | 
				
			||||||
  init(): Promise<void>
 | 
					  init(): Promise<void>
 | 
				
			||||||
  isDetached(): Promise<boolean>
 | 
					  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 {
 | 
					  getWorkingDirectory(): string {
 | 
				
			||||||
    return this.workingDirectory
 | 
					    return this.workingDirectory
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,17 +19,6 @@ 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)
 | 
				
			||||||
@@ -114,6 +103,21 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
 | 
				
			|||||||
    await authHelper.configureAuth()
 | 
					    await authHelper.configureAuth()
 | 
				
			||||||
    core.endGroup()
 | 
					    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
 | 
					    // LFS install
 | 
				
			||||||
    if (settings.lfs) {
 | 
					    if (settings.lfs) {
 | 
				
			||||||
      await git.lfsInstall()
 | 
					      await git.lfsInstall()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,12 @@ export async function downloadRepository(
 | 
				
			|||||||
  commit: string,
 | 
					  commit: string,
 | 
				
			||||||
  repositoryPath: string
 | 
					  repositoryPath: string
 | 
				
			||||||
): Promise<void> {
 | 
					): Promise<void> {
 | 
				
			||||||
 | 
					  // Determine the default branch
 | 
				
			||||||
 | 
					  if (!ref && !commit) {
 | 
				
			||||||
 | 
					    core.info('Determining the default branch')
 | 
				
			||||||
 | 
					    ref = await getDefaultBranch(authToken, owner, repo)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Download the archive
 | 
					  // Download the archive
 | 
				
			||||||
  let archiveData = await retryHelper.execute(async () => {
 | 
					  let archiveData = await retryHelper.execute(async () => {
 | 
				
			||||||
    core.info('Downloading the archive')
 | 
					    core.info('Downloading the archive')
 | 
				
			||||||
@@ -78,17 +84,25 @@ export async function getDefaultBranch(
 | 
				
			|||||||
  return await retryHelper.execute(async () => {
 | 
					  return await retryHelper.execute(async () => {
 | 
				
			||||||
    core.info('Retrieving the default branch name')
 | 
					    core.info('Retrieving the default branch name')
 | 
				
			||||||
    const octokit = new github.GitHub(authToken)
 | 
					    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})
 | 
					      const response = await octokit.repos.get({owner, repo})
 | 
				
			||||||
    if (response.status != 200) {
 | 
					      result = response.data.default_branch
 | 
				
			||||||
      throw new Error(
 | 
					      assert.ok(result, 'default_branch cannot be empty')
 | 
				
			||||||
        `Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}`
 | 
					    } catch (err) {
 | 
				
			||||||
      )
 | 
					      // Handle .wiki repo
 | 
				
			||||||
 | 
					      if (err['status'] === 404 && repo.toUpperCase().endsWith('.WIKI')) {
 | 
				
			||||||
 | 
					        result = 'master'
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // Otherwise error
 | 
				
			||||||
 | 
					      else {
 | 
				
			||||||
 | 
					        throw err
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Print the default branch
 | 
					    // Print the default branch
 | 
				
			||||||
    let result = response.data.default_branch
 | 
					 | 
				
			||||||
    core.info(`Default branch '${result}'`)
 | 
					    core.info(`Default branch '${result}'`)
 | 
				
			||||||
    assert.ok(result, 'default_branch cannot be empty')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Prefix with 'refs/heads'
 | 
					    // Prefix with 'refs/heads'
 | 
				
			||||||
    if (!result.startsWith('refs/')) {
 | 
					    if (!result.startsWith('refs/')) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user