mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-04 07:48:09 +08:00 
			
		
		
		
	.
This commit is contained in:
		@@ -5,6 +5,10 @@ import * as io from '@actions/io'
 | 
			
		||||
import * as path from 'path'
 | 
			
		||||
import {GitVersion} from './git-version'
 | 
			
		||||
 | 
			
		||||
// Auth header not supported before 2.9
 | 
			
		||||
// Wire protocol v2 not supported before 2.18
 | 
			
		||||
export const MinimumGitVersion = new GitVersion('2.18')
 | 
			
		||||
 | 
			
		||||
export interface IGitCommandManager {
 | 
			
		||||
  branchDelete(remote: boolean, branch: string): Promise<void>
 | 
			
		||||
  branchExists(remote: boolean, pattern: string): Promise<boolean>
 | 
			
		||||
@@ -338,13 +342,9 @@ class GitCommandManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Minimum git version
 | 
			
		||||
    // Note:
 | 
			
		||||
    // - Auth header not supported before 2.9
 | 
			
		||||
    // - Wire protocol v2 not supported before 2.18
 | 
			
		||||
    const minimumGitVersion = new GitVersion('2.18')
 | 
			
		||||
    if (!gitVersion.checkMinimum(minimumGitVersion)) {
 | 
			
		||||
    if (!gitVersion.checkMinimum(MinimumGitVersion)) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Minimum required git version is ${minimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`
 | 
			
		||||
        `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -79,6 +79,12 @@ export async function getSource(settings: ISourceSettings): Promise<void> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!git || `${1}` == '1') {
 | 
			
		||||
    core.info(
 | 
			
		||||
      `Git version ${gitCommandManager.MinimumGitVersion} was not found in the PATH.`
 | 
			
		||||
    )
 | 
			
		||||
    core.info(
 | 
			
		||||
      `Instead downloading the repository files using the GitHub REST API.`
 | 
			
		||||
    )
 | 
			
		||||
    await githubApiHelper.downloadRepository(
 | 
			
		||||
      settings.accessToken,
 | 
			
		||||
      settings.repositoryOwner,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,13 @@
 | 
			
		||||
import * as assert from 'assert'
 | 
			
		||||
import * as core from '@actions/core'
 | 
			
		||||
import * as exec from '@actions/exec'
 | 
			
		||||
import * as fs from 'fs'
 | 
			
		||||
import * as github from '@actions/github'
 | 
			
		||||
import * as io from '@actions/io'
 | 
			
		||||
import * as path from 'path'
 | 
			
		||||
import {ReposGetArchiveLinkParams} from '@octokit/rest'
 | 
			
		||||
import {defaultCoreCipherList} from 'constants'
 | 
			
		||||
import {ExecOptions} from '@actions/exec/lib/interfaces'
 | 
			
		||||
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32'
 | 
			
		||||
 | 
			
		||||
@@ -17,13 +25,21 @@ export async function downloadRepository(
 | 
			
		||||
    repo: repo,
 | 
			
		||||
    ref: ref
 | 
			
		||||
  }
 | 
			
		||||
  // todo: retry
 | 
			
		||||
  const response = await octokit.repos.getArchiveLink(params)
 | 
			
		||||
  if (response.status != 200) {
 | 
			
		||||
    throw new Error(
 | 
			
		||||
      `GitHub API call failed with response status '${response.status}': ${response.data}`
 | 
			
		||||
      `Unexpected response from GitHub API. Status: '${response.status}'; Data: '${response.data}'`
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
  console.log(`status=${response.status}`)
 | 
			
		||||
  console.log(`headers=${JSON.stringify(response.headers)}`)
 | 
			
		||||
  console.log(`data=${JSON.stringify(typeof response.data)}`)
 | 
			
		||||
  const runnerTemp = process.env['RUNNER_TEMP'] as string
 | 
			
		||||
  assert.ok(runnerTemp, 'RUNNER_TEMP not defined')
 | 
			
		||||
  const archiveFile = path.join(runnerTemp, 'checkout.tar.gz')
 | 
			
		||||
  await fs.promises.writeFile(archiveFile, response.data)
 | 
			
		||||
  await exec.exec(`tar -xzf "${archiveFile}"`, [], {
 | 
			
		||||
    cwd: repositoryPath
 | 
			
		||||
  } as ExecOptions)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user