Compare commits
	
		
			5 Commits
		
	
	
		
			v4.1.3
			...
			425626d259
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					425626d259 | ||
| 
						 | 
					64dbc8124d | ||
| 
						 | 
					06abf5564e | ||
| 
						 | 
					db715dc5a4 | ||
| 
						 | 
					8926c30a30 | 
@@ -8,7 +8,7 @@ Only a single commit is fetched by default, for the ref/SHA that triggered the w
 | 
			
		||||
 | 
			
		||||
The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set `persist-credentials: false` to opt-out.
 | 
			
		||||
 | 
			
		||||
When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.
 | 
			
		||||
When Git 2.28 or higher is not in your PATH, falls back to the REST API to download the files.
 | 
			
		||||
 | 
			
		||||
# What's new
 | 
			
		||||
 | 
			
		||||
@@ -62,11 +62,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
 | 
			
		||||
    # Default: true
 | 
			
		||||
    ssh-strict: ''
 | 
			
		||||
 | 
			
		||||
    # The user to use when connecting to the remote SSH host. By default 'git' is
 | 
			
		||||
    # used.
 | 
			
		||||
    # Default: git
 | 
			
		||||
    ssh-user: ''
 | 
			
		||||
 | 
			
		||||
    # Whether to configure the token or SSH key with the local git config
 | 
			
		||||
    # Default: true
 | 
			
		||||
    persist-credentials: ''
 | 
			
		||||
 
 | 
			
		||||
@@ -796,8 +796,7 @@ async function setup(testName: string): Promise<void> {
 | 
			
		||||
    ),
 | 
			
		||||
    tryDisableAutomaticGarbageCollection: jest.fn(),
 | 
			
		||||
    tryGetFetchUrl: jest.fn(),
 | 
			
		||||
    tryReset: jest.fn(),
 | 
			
		||||
    version: jest.fn()
 | 
			
		||||
    tryReset: jest.fn()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  settings = {
 | 
			
		||||
@@ -821,7 +820,6 @@ async function setup(testName: string): Promise<void> {
 | 
			
		||||
    sshKey: sshPath ? 'some ssh private key' : '',
 | 
			
		||||
    sshKnownHosts: '',
 | 
			
		||||
    sshStrict: true,
 | 
			
		||||
    sshUser: '',
 | 
			
		||||
    workflowOrganizationId: 123456,
 | 
			
		||||
    setSafeDirectory: true,
 | 
			
		||||
    githubServerUrl: githubServerUrl
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ describe('git-auth-helper tests', () => {
 | 
			
		||||
      console.log(args, options.listeners.stdout)
 | 
			
		||||
 | 
			
		||||
      if (args.includes('version')) {
 | 
			
		||||
        options.listeners.stdout(Buffer.from('2.18'))
 | 
			
		||||
        options.listeners.stdout(Buffer.from('2.28'))
 | 
			
		||||
        return 0
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -57,7 +57,7 @@ describe('git-auth-helper tests', () => {
 | 
			
		||||
      console.log(args, options.listeners.stdout)
 | 
			
		||||
 | 
			
		||||
      if (args.includes('version')) {
 | 
			
		||||
        options.listeners.stdout(Buffer.from('2.18'))
 | 
			
		||||
        options.listeners.stdout(Buffer.from('2.28'))
 | 
			
		||||
        return 0
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -97,7 +97,7 @@ describe('Test fetchDepth and fetchTags options', () => {
 | 
			
		||||
      console.log(args, options.listeners.stdout)
 | 
			
		||||
 | 
			
		||||
      if (args.includes('version')) {
 | 
			
		||||
        options.listeners.stdout(Buffer.from('2.18'))
 | 
			
		||||
        options.listeners.stdout(Buffer.from('2.28'))
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return 0
 | 
			
		||||
 
 | 
			
		||||
@@ -501,7 +501,6 @@ async function setup(testName: string): Promise<void> {
 | 
			
		||||
    }),
 | 
			
		||||
    tryReset: jest.fn(async () => {
 | 
			
		||||
      return true
 | 
			
		||||
    }),
 | 
			
		||||
    version: jest.fn()
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import {GitVersion} from '../src/git-version'
 | 
			
		||||
import {MinimumGitSparseCheckoutVersion} from '../src/git-command-manager'
 | 
			
		||||
import {GitVersion} from '../lib/git-version'
 | 
			
		||||
 | 
			
		||||
describe('git-version tests', () => {
 | 
			
		||||
  it('basics', async () => {
 | 
			
		||||
@@ -43,44 +42,4 @@ describe('git-version tests', () => {
 | 
			
		||||
    expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
 | 
			
		||||
    expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('sparse checkout', async () => {
 | 
			
		||||
    const minSparseVer = MinimumGitSparseCheckoutVersion
 | 
			
		||||
    expect(new GitVersion('1.0').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('1.99').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.0').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.24').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.24.0').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.24.9').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.25').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.25.0').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.25.1').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.25.9').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.26').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.26.0').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.26.1').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.26.9').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.27').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.27.0').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.27.1').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    expect(new GitVersion('2.27.9').checkMinimum(minSparseVer)).toBeFalsy()
 | 
			
		||||
    //                             /---------------------------------------
 | 
			
		||||
    //         ^^^ before         /         after vvv
 | 
			
		||||
    // --------------------------/
 | 
			
		||||
    expect(new GitVersion('2.28').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.28.0').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.28.1').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.28.9').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.29').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.29.0').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.29.1').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.29.9').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('2.99').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('3.0').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('3.99').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('4.0').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('4.99').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('5.0').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
    expect(new GitVersion('5.99').checkMinimum(minSparseVer)).toBeTruthy()
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -45,10 +45,6 @@ inputs:
 | 
			
		||||
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
 | 
			
		||||
      configure additional hosts.
 | 
			
		||||
    default: true
 | 
			
		||||
  ssh-user:
 | 
			
		||||
    description: >
 | 
			
		||||
      The user to use when connecting to the remote SSH host. By default 'git' is used.
 | 
			
		||||
    default: git
 | 
			
		||||
  persist-credentials:
 | 
			
		||||
    description: 'Whether to configure the token or SSH key with the local git config'
 | 
			
		||||
    default: true
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							@@ -467,7 +467,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
 | 
			
		||||
exports.createCommandManager = exports.MinimumGitSparseCheckoutVersion = exports.MinimumGitVersion = void 0;
 | 
			
		||||
exports.createCommandManager = exports.MinimumGitVersion = void 0;
 | 
			
		||||
const core = __importStar(__nccwpck_require__(2186));
 | 
			
		||||
const exec = __importStar(__nccwpck_require__(1514));
 | 
			
		||||
const fs = __importStar(__nccwpck_require__(7147));
 | 
			
		||||
@@ -481,8 +481,7 @@ const git_version_1 = __nccwpck_require__(3142);
 | 
			
		||||
// Auth header not supported before 2.9
 | 
			
		||||
// Wire protocol v2 not supported before 2.18
 | 
			
		||||
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
 | 
			
		||||
exports.MinimumGitVersion = new git_version_1.GitVersion('2.18');
 | 
			
		||||
exports.MinimumGitSparseCheckoutVersion = new git_version_1.GitVersion('2.28');
 | 
			
		||||
exports.MinimumGitVersion = new git_version_1.GitVersion('2.28');
 | 
			
		||||
function createCommandManager(workingDirectory, lfs, doSparseCheckout) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout);
 | 
			
		||||
@@ -500,7 +499,6 @@ class GitCommandManager {
 | 
			
		||||
        this.lfs = false;
 | 
			
		||||
        this.doSparseCheckout = false;
 | 
			
		||||
        this.workingDirectory = '';
 | 
			
		||||
        this.gitVersion = new git_version_1.GitVersion();
 | 
			
		||||
    }
 | 
			
		||||
    branchDelete(remote, branch) {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
@@ -526,13 +524,7 @@ class GitCommandManager {
 | 
			
		||||
    branchList(remote) {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            const result = [];
 | 
			
		||||
            // Note, this implementation uses "rev-parse --symbolic-full-name" because the output from
 | 
			
		||||
            // "branch --list" is more difficult when in a detached HEAD state.
 | 
			
		||||
            // TODO(https://github.com/actions/checkout/issues/786): this implementation uses
 | 
			
		||||
            // "rev-parse --symbolic-full-name" because there is a bug
 | 
			
		||||
            // in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names. When
 | 
			
		||||
            // 2.18 is no longer supported, we can switch back to --symbolic.
 | 
			
		||||
            const args = ['rev-parse', '--symbolic-full-name'];
 | 
			
		||||
            const args = ['rev-parse', '--symbolic'];
 | 
			
		||||
            if (remote) {
 | 
			
		||||
                args.push('--remotes=origin');
 | 
			
		||||
            }
 | 
			
		||||
@@ -853,11 +845,6 @@ class GitCommandManager {
 | 
			
		||||
            return output.exitCode === 0;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    version() {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            return this.gitVersion;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    static createCommandManager(workingDirectory, lfs, doSparseCheckout) {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            const result = new GitCommandManager();
 | 
			
		||||
@@ -909,21 +896,21 @@ class GitCommandManager {
 | 
			
		||||
            this.gitPath = yield io.which('git', true);
 | 
			
		||||
            // Git version
 | 
			
		||||
            core.debug('Getting git version');
 | 
			
		||||
            this.gitVersion = new git_version_1.GitVersion();
 | 
			
		||||
            let gitVersion = new git_version_1.GitVersion();
 | 
			
		||||
            let gitOutput = yield this.execGit(['version']);
 | 
			
		||||
            let stdout = gitOutput.stdout.trim();
 | 
			
		||||
            if (!stdout.includes('\n')) {
 | 
			
		||||
                const match = stdout.match(/\d+\.\d+(\.\d+)?/);
 | 
			
		||||
                if (match) {
 | 
			
		||||
                    this.gitVersion = new git_version_1.GitVersion(match[0]);
 | 
			
		||||
                    gitVersion = new git_version_1.GitVersion(match[0]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (!this.gitVersion.isValid()) {
 | 
			
		||||
            if (!gitVersion.isValid()) {
 | 
			
		||||
                throw new Error('Unable to determine git version');
 | 
			
		||||
            }
 | 
			
		||||
            // Minimum git version
 | 
			
		||||
            if (!this.gitVersion.checkMinimum(exports.MinimumGitVersion)) {
 | 
			
		||||
                throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
 | 
			
		||||
            if (!gitVersion.checkMinimum(exports.MinimumGitVersion)) {
 | 
			
		||||
                throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`);
 | 
			
		||||
            }
 | 
			
		||||
            if (this.lfs) {
 | 
			
		||||
                // Git-lfs version
 | 
			
		||||
@@ -950,13 +937,8 @@ class GitCommandManager {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            this.doSparseCheckout = doSparseCheckout;
 | 
			
		||||
            if (this.doSparseCheckout) {
 | 
			
		||||
                if (!this.gitVersion.checkMinimum(exports.MinimumGitSparseCheckoutVersion)) {
 | 
			
		||||
                    throw new Error(`Minimum Git version required for sparse checkout is ${exports.MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Set the user agent
 | 
			
		||||
            const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
 | 
			
		||||
            const gitHttpUserAgent = `git/${gitVersion} (github-actions-checkout)`;
 | 
			
		||||
            core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
 | 
			
		||||
            this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
 | 
			
		||||
        });
 | 
			
		||||
@@ -1161,7 +1143,6 @@ const path = __importStar(__nccwpck_require__(1017));
 | 
			
		||||
const refHelper = __importStar(__nccwpck_require__(8601));
 | 
			
		||||
const stateHelper = __importStar(__nccwpck_require__(8647));
 | 
			
		||||
const urlHelper = __importStar(__nccwpck_require__(9437));
 | 
			
		||||
const git_command_manager_1 = __nccwpck_require__(738);
 | 
			
		||||
function getSource(settings) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Repository URL
 | 
			
		||||
@@ -1295,12 +1276,8 @@ function getSource(settings) {
 | 
			
		||||
            }
 | 
			
		||||
            // Sparse checkout
 | 
			
		||||
            if (!settings.sparseCheckout) {
 | 
			
		||||
                let gitVersion = yield git.version();
 | 
			
		||||
                // no need to disable sparse-checkout if the installed git runtime doesn't even support it.
 | 
			
		||||
                if (gitVersion.checkMinimum(git_command_manager_1.MinimumGitSparseCheckoutVersion)) {
 | 
			
		||||
                yield git.disableSparseCheckout();
 | 
			
		||||
            }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                core.startGroup('Setting up sparse checkout');
 | 
			
		||||
                if (settings.sparseCheckoutConeMode) {
 | 
			
		||||
@@ -1798,7 +1775,6 @@ function getInputs() {
 | 
			
		||||
        result.sshKnownHosts = core.getInput('ssh-known-hosts');
 | 
			
		||||
        result.sshStrict =
 | 
			
		||||
            (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE';
 | 
			
		||||
        result.sshUser = core.getInput('ssh-user');
 | 
			
		||||
        // Persist credentials
 | 
			
		||||
        result.persistCredentials =
 | 
			
		||||
            (core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE';
 | 
			
		||||
@@ -2401,8 +2377,7 @@ function getFetchUrl(settings) {
 | 
			
		||||
    const encodedOwner = encodeURIComponent(settings.repositoryOwner);
 | 
			
		||||
    const encodedName = encodeURIComponent(settings.repositoryName);
 | 
			
		||||
    if (settings.sshKey) {
 | 
			
		||||
        const user = settings.sshUser.length > 0 ? settings.sshUser : 'git';
 | 
			
		||||
        return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`;
 | 
			
		||||
        return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`;
 | 
			
		||||
    }
 | 
			
		||||
    // "origin" is SCHEME://HOSTNAME[:PORT]
 | 
			
		||||
    return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "checkout",
 | 
			
		||||
  "version": "4.1.3",
 | 
			
		||||
  "version": "5.0.0",
 | 
			
		||||
  "lockfileVersion": 2,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "checkout",
 | 
			
		||||
      "version": "4.1.3",
 | 
			
		||||
      "version": "5.0.0",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@actions/core": "^1.10.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "checkout",
 | 
			
		||||
  "version": "4.1.3",
 | 
			
		||||
  "version": "5.0.0",
 | 
			
		||||
  "description": "checkout action",
 | 
			
		||||
  "main": "lib/main.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,8 +12,7 @@ import {GitVersion} from './git-version'
 | 
			
		||||
// Auth header not supported before 2.9
 | 
			
		||||
// Wire protocol v2 not supported before 2.18
 | 
			
		||||
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
 | 
			
		||||
export const MinimumGitVersion = new GitVersion('2.18')
 | 
			
		||||
export const MinimumGitSparseCheckoutVersion = new GitVersion('2.28')
 | 
			
		||||
export const MinimumGitVersion = new GitVersion('2.28')
 | 
			
		||||
 | 
			
		||||
export interface IGitCommandManager {
 | 
			
		||||
  branchDelete(remote: boolean, branch: string): Promise<void>
 | 
			
		||||
@@ -62,7 +61,6 @@ export interface IGitCommandManager {
 | 
			
		||||
  tryDisableAutomaticGarbageCollection(): Promise<boolean>
 | 
			
		||||
  tryGetFetchUrl(): Promise<string>
 | 
			
		||||
  tryReset(): Promise<boolean>
 | 
			
		||||
  version(): Promise<GitVersion>
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function createCommandManager(
 | 
			
		||||
@@ -86,7 +84,6 @@ class GitCommandManager {
 | 
			
		||||
  private lfs = false
 | 
			
		||||
  private doSparseCheckout = false
 | 
			
		||||
  private workingDirectory = ''
 | 
			
		||||
  private gitVersion: GitVersion = new GitVersion()
 | 
			
		||||
 | 
			
		||||
  // Private constructor; use createCommandManager()
 | 
			
		||||
  private constructor() {}
 | 
			
		||||
@@ -114,16 +111,7 @@ class GitCommandManager {
 | 
			
		||||
 | 
			
		||||
  async branchList(remote: boolean): Promise<string[]> {
 | 
			
		||||
    const result: string[] = []
 | 
			
		||||
 | 
			
		||||
    // Note, this implementation uses "rev-parse --symbolic-full-name" because the output from
 | 
			
		||||
    // "branch --list" is more difficult when in a detached HEAD state.
 | 
			
		||||
 | 
			
		||||
    // TODO(https://github.com/actions/checkout/issues/786): this implementation uses
 | 
			
		||||
    // "rev-parse --symbolic-full-name" because there is a bug
 | 
			
		||||
    // in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names. When
 | 
			
		||||
    // 2.18 is no longer supported, we can switch back to --symbolic.
 | 
			
		||||
 | 
			
		||||
    const args = ['rev-parse', '--symbolic-full-name']
 | 
			
		||||
    const args = ['rev-parse', '--symbolic']
 | 
			
		||||
    if (remote) {
 | 
			
		||||
      args.push('--remotes=origin')
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -484,10 +472,6 @@ class GitCommandManager {
 | 
			
		||||
    return output.exitCode === 0
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async version(): Promise<GitVersion> {
 | 
			
		||||
    return this.gitVersion
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static async createCommandManager(
 | 
			
		||||
    workingDirectory: string,
 | 
			
		||||
    lfs: boolean,
 | 
			
		||||
@@ -564,23 +548,23 @@ class GitCommandManager {
 | 
			
		||||
 | 
			
		||||
    // Git version
 | 
			
		||||
    core.debug('Getting git version')
 | 
			
		||||
    this.gitVersion = new GitVersion()
 | 
			
		||||
    let gitVersion = new GitVersion()
 | 
			
		||||
    let gitOutput = await this.execGit(['version'])
 | 
			
		||||
    let stdout = gitOutput.stdout.trim()
 | 
			
		||||
    if (!stdout.includes('\n')) {
 | 
			
		||||
      const match = stdout.match(/\d+\.\d+(\.\d+)?/)
 | 
			
		||||
      if (match) {
 | 
			
		||||
        this.gitVersion = new GitVersion(match[0])
 | 
			
		||||
        gitVersion = new GitVersion(match[0])
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (!this.gitVersion.isValid()) {
 | 
			
		||||
    if (!gitVersion.isValid()) {
 | 
			
		||||
      throw new Error('Unable to determine git version')
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Minimum git version
 | 
			
		||||
    if (!this.gitVersion.checkMinimum(MinimumGitVersion)) {
 | 
			
		||||
    if (!gitVersion.checkMinimum(MinimumGitVersion)) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`
 | 
			
		||||
        `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -613,15 +597,9 @@ class GitCommandManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.doSparseCheckout = doSparseCheckout
 | 
			
		||||
    if (this.doSparseCheckout) {
 | 
			
		||||
      if (!this.gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) {
 | 
			
		||||
        throw new Error(
 | 
			
		||||
          `Minimum Git version required for sparse checkout is ${MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`
 | 
			
		||||
        )
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Set the user agent
 | 
			
		||||
    const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`
 | 
			
		||||
    const gitHttpUserAgent = `git/${gitVersion} (github-actions-checkout)`
 | 
			
		||||
    core.debug(`Set git useragent to: ${gitHttpUserAgent}`)
 | 
			
		||||
    this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,10 +9,7 @@ import * as path from 'path'
 | 
			
		||||
import * as refHelper from './ref-helper'
 | 
			
		||||
import * as stateHelper from './state-helper'
 | 
			
		||||
import * as urlHelper from './url-helper'
 | 
			
		||||
import {
 | 
			
		||||
  MinimumGitSparseCheckoutVersion,
 | 
			
		||||
  IGitCommandManager
 | 
			
		||||
} from './git-command-manager'
 | 
			
		||||
import {IGitCommandManager} from './git-command-manager'
 | 
			
		||||
import {IGitSourceSettings} from './git-source-settings'
 | 
			
		||||
 | 
			
		||||
export async function getSource(settings: IGitSourceSettings): Promise<void> {
 | 
			
		||||
@@ -212,11 +209,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
 | 
			
		||||
 | 
			
		||||
    // Sparse checkout
 | 
			
		||||
    if (!settings.sparseCheckout) {
 | 
			
		||||
      let gitVersion = await git.version()
 | 
			
		||||
      // no need to disable sparse-checkout if the installed git runtime doesn't even support it.
 | 
			
		||||
      if (gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) {
 | 
			
		||||
      await git.disableSparseCheckout()
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      core.startGroup('Setting up sparse checkout')
 | 
			
		||||
      if (settings.sparseCheckoutConeMode) {
 | 
			
		||||
 
 | 
			
		||||
@@ -94,11 +94,6 @@ export interface IGitSourceSettings {
 | 
			
		||||
   */
 | 
			
		||||
  sshStrict: boolean
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * The SSH user to login as
 | 
			
		||||
   */
 | 
			
		||||
  sshUser: string
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Indicates whether to persist the credentials on disk to enable scripting authenticated git commands
 | 
			
		||||
   */
 | 
			
		||||
 
 | 
			
		||||
@@ -143,7 +143,6 @@ export async function getInputs(): Promise<IGitSourceSettings> {
 | 
			
		||||
  result.sshKnownHosts = core.getInput('ssh-known-hosts')
 | 
			
		||||
  result.sshStrict =
 | 
			
		||||
    (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE'
 | 
			
		||||
  result.sshUser = core.getInput('ssh-user')
 | 
			
		||||
 | 
			
		||||
  // Persist credentials
 | 
			
		||||
  result.persistCredentials =
 | 
			
		||||
 
 | 
			
		||||
@@ -12,8 +12,7 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
 | 
			
		||||
  const encodedOwner = encodeURIComponent(settings.repositoryOwner)
 | 
			
		||||
  const encodedName = encodeURIComponent(settings.repositoryName)
 | 
			
		||||
  if (settings.sshKey) {
 | 
			
		||||
    const user = settings.sshUser.length > 0 ? settings.sshUser : 'git'
 | 
			
		||||
    return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`
 | 
			
		||||
    return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // "origin" is SCHEME://HOSTNAME[:PORT]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user