mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 07:30:32 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			v4.1.4
			...
			jww3-minve
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 425626d259 | ||
|   | 64dbc8124d | ||
|   | 06abf5564e | ||
|   | db715dc5a4 | ||
|   | 8926c30a30 | 
							
								
								
									
										20
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | |||||||
| --- |  | ||||||
| version: 2 |  | ||||||
|  |  | ||||||
| updates: |  | ||||||
| - package-ecosystem: "npm" |  | ||||||
|   directory: "/" |  | ||||||
|   schedule: |  | ||||||
|     interval: "weekly" |  | ||||||
|   groups: |  | ||||||
|     minor-npm-dependencies: |  | ||||||
|       # NPM: Only group minor and patch updates (we want to carefully review major updates) |  | ||||||
|       update-types: [minor, patch] |  | ||||||
| - package-ecosystem: "github-actions" |  | ||||||
|   directory: "/" |  | ||||||
|   schedule: |  | ||||||
|     interval: "weekly" |  | ||||||
|   groups: |  | ||||||
|     minor-actions-dependencies: |  | ||||||
|       # GitHub Actions: Only group minor and patch updates (we want to carefully review major updates) |  | ||||||
|       update-types: [minor, patch] |  | ||||||
							
								
								
									
										2
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -37,7 +37,7 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       # Clone this repo |       # Clone this repo | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v4.1.1 |         uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       # Basic checkout |       # Basic checkout | ||||||
|       - name: Checkout basic |       - name: Checkout basic | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/update-test-ubuntu-git.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/update-test-ubuntu-git.yml
									
									
									
									
										vendored
									
									
								
							| @@ -31,7 +31,7 @@ jobs: | |||||||
|       # Use `docker/login-action` to log in to GHCR.io.  |       # Use `docker/login-action` to log in to GHCR.io.  | ||||||
|       # Once published, the packages are scoped to the account defined here. |       # Once published, the packages are scoped to the account defined here. | ||||||
|       - name: Log in to the ghcr.io container registry |       - name: Log in to the ghcr.io container registry | ||||||
|         uses: docker/login-action@v3.1.0 |         uses: docker/login-action@v3.0.0 | ||||||
|         with: |         with: | ||||||
|           registry: ${{ env.REGISTRY }} |           registry: ${{ env.REGISTRY }} | ||||||
|           username: ${{ github.actor }} |           username: ${{ github.actor }} | ||||||
| @@ -48,7 +48,7 @@ jobs: | |||||||
|  |  | ||||||
|       # Use `docker/build-push-action` to build (and optionally publish) the image.  |       # Use `docker/build-push-action` to build (and optionally publish) the image.  | ||||||
|       - name: Build Docker Image (with optional Push) |       - name: Build Docker Image (with optional Push) | ||||||
|         uses: docker/build-push-action@v5.3.0 |         uses: docker/build-push-action@v5.1.0 | ||||||
|         with: |         with: | ||||||
|           context: . |           context: . | ||||||
|           file: images/test-ubuntu-git.Dockerfile |           file: images/test-ubuntu-git.Dockerfile | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,16 +1,5 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
| ## v4.1.4 |  | ||||||
| - Disable `extensions.worktreeConfig` when disabling `sparse-checkout` by @jww3 in https://github.com/actions/checkout/pull/1692 |  | ||||||
| - Add dependabot config by @cory-miller in https://github.com/actions/checkout/pull/1688 |  | ||||||
| - Bump the minor-actions-dependencies group with 2 updates by @dependabot in https://github.com/actions/checkout/pull/1693 |  | ||||||
| - Bump word-wrap from 1.2.3 to 1.2.5 by @dependabot in https://github.com/actions/checkout/pull/1643 |  | ||||||
|  |  | ||||||
| ## v4.1.3 |  | ||||||
| - Check git version before attempting to disable `sparse-checkout` by @jww3 in https://github.com/actions/checkout/pull/1656 |  | ||||||
| - Add SSH user parameter by @cory-miller in https://github.com/actions/checkout/pull/1685 |  | ||||||
| - Update `actions/checkout` version in `update-main-version.yml` by @jww3 in https://github.com/actions/checkout/pull/1650 |  | ||||||
|  |  | ||||||
| ## v4.1.2 | ## v4.1.2 | ||||||
| - Fix: Disable sparse checkout whenever `sparse-checkout` option is not present @dscho in https://github.com/actions/checkout/pull/1598 | - Fix: Disable sparse checkout whenever `sparse-checkout` option is not present @dscho in https://github.com/actions/checkout/pull/1598 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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. | 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 | # What's new | ||||||
|  |  | ||||||
| @@ -62,11 +62,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/ | |||||||
|     # Default: true |     # Default: true | ||||||
|     ssh-strict: '' |     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 |     # Whether to configure the token or SSH key with the local git config | ||||||
|     # Default: true |     # Default: true | ||||||
|     persist-credentials: '' |     persist-credentials: '' | ||||||
|   | |||||||
| @@ -796,8 +796,7 @@ async function setup(testName: string): Promise<void> { | |||||||
|     ), |     ), | ||||||
|     tryDisableAutomaticGarbageCollection: jest.fn(), |     tryDisableAutomaticGarbageCollection: jest.fn(), | ||||||
|     tryGetFetchUrl: jest.fn(), |     tryGetFetchUrl: jest.fn(), | ||||||
|     tryReset: jest.fn(), |     tryReset: jest.fn() | ||||||
|     version: jest.fn() |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   settings = { |   settings = { | ||||||
| @@ -821,7 +820,6 @@ async function setup(testName: string): Promise<void> { | |||||||
|     sshKey: sshPath ? 'some ssh private key' : '', |     sshKey: sshPath ? 'some ssh private key' : '', | ||||||
|     sshKnownHosts: '', |     sshKnownHosts: '', | ||||||
|     sshStrict: true, |     sshStrict: true, | ||||||
|     sshUser: '', |  | ||||||
|     workflowOrganizationId: 123456, |     workflowOrganizationId: 123456, | ||||||
|     setSafeDirectory: true, |     setSafeDirectory: true, | ||||||
|     githubServerUrl: githubServerUrl |     githubServerUrl: githubServerUrl | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ describe('git-auth-helper tests', () => { | |||||||
|       console.log(args, options.listeners.stdout) |       console.log(args, options.listeners.stdout) | ||||||
|  |  | ||||||
|       if (args.includes('version')) { |       if (args.includes('version')) { | ||||||
|         options.listeners.stdout(Buffer.from('2.18')) |         options.listeners.stdout(Buffer.from('2.28')) | ||||||
|         return 0 |         return 0 | ||||||
|       } |       } | ||||||
|  |  | ||||||
| @@ -57,7 +57,7 @@ describe('git-auth-helper tests', () => { | |||||||
|       console.log(args, options.listeners.stdout) |       console.log(args, options.listeners.stdout) | ||||||
|  |  | ||||||
|       if (args.includes('version')) { |       if (args.includes('version')) { | ||||||
|         options.listeners.stdout(Buffer.from('2.18')) |         options.listeners.stdout(Buffer.from('2.28')) | ||||||
|         return 0 |         return 0 | ||||||
|       } |       } | ||||||
|  |  | ||||||
| @@ -97,7 +97,7 @@ describe('Test fetchDepth and fetchTags options', () => { | |||||||
|       console.log(args, options.listeners.stdout) |       console.log(args, options.listeners.stdout) | ||||||
|  |  | ||||||
|       if (args.includes('version')) { |       if (args.includes('version')) { | ||||||
|         options.listeners.stdout(Buffer.from('2.18')) |         options.listeners.stdout(Buffer.from('2.28')) | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       return 0 |       return 0 | ||||||
|   | |||||||
| @@ -501,7 +501,6 @@ async function setup(testName: string): Promise<void> { | |||||||
|     }), |     }), | ||||||
|     tryReset: jest.fn(async () => { |     tryReset: jest.fn(async () => { | ||||||
|       return true |       return true | ||||||
|     }), |     }) | ||||||
|     version: jest.fn() |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,4 @@ | |||||||
| import {GitVersion} from '../src/git-version' | import {GitVersion} from '../lib/git-version' | ||||||
| import {MinimumGitSparseCheckoutVersion} from '../src/git-command-manager' |  | ||||||
|  |  | ||||||
| describe('git-version tests', () => { | describe('git-version tests', () => { | ||||||
|   it('basics', async () => { |   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'))).toBeFalsy() | ||||||
|     expect(version.checkMinimum(new GitVersion('5.1.2'))).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() |  | ||||||
|   }) |  | ||||||
| }) | }) | ||||||
|   | |||||||
| @@ -18,20 +18,6 @@ else | |||||||
|     exit 1 |     exit 1 | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   # Verify that sparse-checkout is disabled. |  | ||||||
|   SPARSE_CHECKOUT_ENABLED=$(git -C ./basic config --local --get-all core.sparseCheckout) |  | ||||||
|   if [ "$SPARSE_CHECKOUT_ENABLED" != "" ]; then |  | ||||||
|     echo "Expected sparse-checkout to be disabled (discovered: $SPARSE_CHECKOUT_ENABLED)" |  | ||||||
|     exit 1 |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Verify git configuration shows worktreeConfig is effectively disabled |  | ||||||
|   WORKTREE_CONFIG_ENABLED=$(git -C ./basic config --local --get-all extensions.worktreeConfig) |  | ||||||
|   if [[ "$WORKTREE_CONFIG_ENABLED" != "" ]]; then |  | ||||||
|     echo "Expected extensions.worktreeConfig (boolean) to be disabled in git config.  This could be an artifact of sparse checkout functionality." |  | ||||||
|     exit 1 |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   # Verify auth token |   # Verify auth token | ||||||
|   cd basic |   cd basic | ||||||
|   git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main |   git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main | ||||||
|   | |||||||
| @@ -45,10 +45,6 @@ inputs: | |||||||
|       and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to |       and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to | ||||||
|       configure additional hosts. |       configure additional hosts. | ||||||
|     default: true |     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: |   persist-credentials: | ||||||
|     description: 'Whether to configure the token or SSH key with the local git config' |     description: 'Whether to configure the token or SSH key with the local git config' | ||||||
|     default: true |     default: true | ||||||
|   | |||||||
							
								
								
									
										47
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -467,7 +467,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | 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 core = __importStar(__nccwpck_require__(2186)); | ||||||
| const exec = __importStar(__nccwpck_require__(1514)); | const exec = __importStar(__nccwpck_require__(1514)); | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| @@ -481,8 +481,7 @@ const git_version_1 = __nccwpck_require__(3142); | |||||||
| // Auth header not supported before 2.9 | // Auth header not supported before 2.9 | ||||||
| // Wire protocol v2 not supported before 2.18 | // Wire protocol v2 not supported before 2.18 | ||||||
| // sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386) | // 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.MinimumGitVersion = new git_version_1.GitVersion('2.28'); | ||||||
| exports.MinimumGitSparseCheckoutVersion = new git_version_1.GitVersion('2.28'); |  | ||||||
| function createCommandManager(workingDirectory, lfs, doSparseCheckout) { | function createCommandManager(workingDirectory, lfs, doSparseCheckout) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout); |         return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout); | ||||||
| @@ -500,7 +499,6 @@ class GitCommandManager { | |||||||
|         this.lfs = false; |         this.lfs = false; | ||||||
|         this.doSparseCheckout = false; |         this.doSparseCheckout = false; | ||||||
|         this.workingDirectory = ''; |         this.workingDirectory = ''; | ||||||
|         this.gitVersion = new git_version_1.GitVersion(); |  | ||||||
|     } |     } | ||||||
|     branchDelete(remote, branch) { |     branchDelete(remote, branch) { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
| @@ -526,13 +524,7 @@ class GitCommandManager { | |||||||
|     branchList(remote) { |     branchList(remote) { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             const result = []; |             const result = []; | ||||||
|             // Note, this implementation uses "rev-parse --symbolic-full-name" because the output from |             const args = ['rev-parse', '--symbolic']; | ||||||
|             // "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']; |  | ||||||
|             if (remote) { |             if (remote) { | ||||||
|                 args.push('--remotes=origin'); |                 args.push('--remotes=origin'); | ||||||
|             } |             } | ||||||
| @@ -582,8 +574,6 @@ class GitCommandManager { | |||||||
|     disableSparseCheckout() { |     disableSparseCheckout() { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             yield this.execGit(['sparse-checkout', 'disable']); |             yield this.execGit(['sparse-checkout', 'disable']); | ||||||
|             // Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment). |  | ||||||
|             yield this.tryConfigUnset('extensions.worktreeConfig', false); |  | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|     sparseCheckout(sparseCheckout) { |     sparseCheckout(sparseCheckout) { | ||||||
| @@ -855,11 +845,6 @@ class GitCommandManager { | |||||||
|             return output.exitCode === 0; |             return output.exitCode === 0; | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|     version() { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.gitVersion; |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     static createCommandManager(workingDirectory, lfs, doSparseCheckout) { |     static createCommandManager(workingDirectory, lfs, doSparseCheckout) { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             const result = new GitCommandManager(); |             const result = new GitCommandManager(); | ||||||
| @@ -911,21 +896,21 @@ class GitCommandManager { | |||||||
|             this.gitPath = yield io.which('git', true); |             this.gitPath = yield io.which('git', true); | ||||||
|             // Git version |             // Git version | ||||||
|             core.debug('Getting 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 gitOutput = yield this.execGit(['version']); | ||||||
|             let stdout = gitOutput.stdout.trim(); |             let stdout = gitOutput.stdout.trim(); | ||||||
|             if (!stdout.includes('\n')) { |             if (!stdout.includes('\n')) { | ||||||
|                 const match = stdout.match(/\d+\.\d+(\.\d+)?/); |                 const match = stdout.match(/\d+\.\d+(\.\d+)?/); | ||||||
|                 if (match) { |                 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'); |                 throw new Error('Unable to determine git version'); | ||||||
|             } |             } | ||||||
|             // Minimum git version |             // Minimum git version | ||||||
|             if (!this.gitVersion.checkMinimum(exports.MinimumGitVersion)) { |             if (!gitVersion.checkMinimum(exports.MinimumGitVersion)) { | ||||||
|                 throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`); |                 throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`); | ||||||
|             } |             } | ||||||
|             if (this.lfs) { |             if (this.lfs) { | ||||||
|                 // Git-lfs version |                 // Git-lfs version | ||||||
| @@ -952,13 +937,8 @@ class GitCommandManager { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             this.doSparseCheckout = doSparseCheckout; |             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 |             // 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}`); |             core.debug(`Set git useragent to: ${gitHttpUserAgent}`); | ||||||
|             this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent; |             this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent; | ||||||
|         }); |         }); | ||||||
| @@ -1163,7 +1143,6 @@ const path = __importStar(__nccwpck_require__(1017)); | |||||||
| const refHelper = __importStar(__nccwpck_require__(8601)); | const refHelper = __importStar(__nccwpck_require__(8601)); | ||||||
| const stateHelper = __importStar(__nccwpck_require__(8647)); | const stateHelper = __importStar(__nccwpck_require__(8647)); | ||||||
| const urlHelper = __importStar(__nccwpck_require__(9437)); | const urlHelper = __importStar(__nccwpck_require__(9437)); | ||||||
| const git_command_manager_1 = __nccwpck_require__(738); |  | ||||||
| function getSource(settings) { | function getSource(settings) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         // Repository URL |         // Repository URL | ||||||
| @@ -1297,12 +1276,8 @@ function getSource(settings) { | |||||||
|             } |             } | ||||||
|             // Sparse checkout |             // Sparse checkout | ||||||
|             if (!settings.sparseCheckout) { |             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(); |                 yield git.disableSparseCheckout(); | ||||||
|             } |             } | ||||||
|             } |  | ||||||
|             else { |             else { | ||||||
|                 core.startGroup('Setting up sparse checkout'); |                 core.startGroup('Setting up sparse checkout'); | ||||||
|                 if (settings.sparseCheckoutConeMode) { |                 if (settings.sparseCheckoutConeMode) { | ||||||
| @@ -1800,7 +1775,6 @@ function getInputs() { | |||||||
|         result.sshKnownHosts = core.getInput('ssh-known-hosts'); |         result.sshKnownHosts = core.getInput('ssh-known-hosts'); | ||||||
|         result.sshStrict = |         result.sshStrict = | ||||||
|             (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE'; |             (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE'; | ||||||
|         result.sshUser = core.getInput('ssh-user'); |  | ||||||
|         // Persist credentials |         // Persist credentials | ||||||
|         result.persistCredentials = |         result.persistCredentials = | ||||||
|             (core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE'; |             (core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE'; | ||||||
| @@ -2403,8 +2377,7 @@ function getFetchUrl(settings) { | |||||||
|     const encodedOwner = encodeURIComponent(settings.repositoryOwner); |     const encodedOwner = encodeURIComponent(settings.repositoryOwner); | ||||||
|     const encodedName = encodeURIComponent(settings.repositoryName); |     const encodedName = encodeURIComponent(settings.repositoryName); | ||||||
|     if (settings.sshKey) { |     if (settings.sshKey) { | ||||||
|         const user = settings.sshUser.length > 0 ? settings.sshUser : 'git'; |         return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`; | ||||||
|         return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`; |  | ||||||
|     } |     } | ||||||
|     // "origin" is SCHEME://HOSTNAME[:PORT] |     // "origin" is SCHEME://HOSTNAME[:PORT] | ||||||
|     return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; |     return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,12 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "4.1.4", |   "version": "5.0.0", | ||||||
|   "lockfileVersion": 2, |   "lockfileVersion": 2, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "packages": { |   "packages": { | ||||||
|     "": { |     "": { | ||||||
|       "name": "checkout", |       "name": "checkout", | ||||||
|       "version": "4.1.4", |       "version": "5.0.0", | ||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/core": "^1.10.0", |         "@actions/core": "^1.10.0", | ||||||
| @@ -9129,9 +9129,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/word-wrap": { |     "node_modules/word-wrap": { | ||||||
|       "version": "1.2.5", |       "version": "1.2.3", | ||||||
|       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", |       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", | ||||||
|       "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", |       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "engines": { |       "engines": { | ||||||
|         "node": ">=0.10.0" |         "node": ">=0.10.0" | ||||||
| @@ -16055,9 +16055,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "word-wrap": { |     "word-wrap": { | ||||||
|       "version": "1.2.5", |       "version": "1.2.3", | ||||||
|       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", |       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", | ||||||
|       "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", |       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "wrap-ansi": { |     "wrap-ansi": { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "4.1.4", |   "version": "5.0.0", | ||||||
|   "description": "checkout action", |   "description": "checkout action", | ||||||
|   "main": "lib/main.js", |   "main": "lib/main.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|   | |||||||
| @@ -12,8 +12,7 @@ import {GitVersion} from './git-version' | |||||||
| // Auth header not supported before 2.9 | // Auth header not supported before 2.9 | ||||||
| // Wire protocol v2 not supported before 2.18 | // Wire protocol v2 not supported before 2.18 | ||||||
| // sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386) | // 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 MinimumGitVersion = new GitVersion('2.28') | ||||||
| export const MinimumGitSparseCheckoutVersion = new GitVersion('2.28') |  | ||||||
|  |  | ||||||
| export interface IGitCommandManager { | export interface IGitCommandManager { | ||||||
|   branchDelete(remote: boolean, branch: string): Promise<void> |   branchDelete(remote: boolean, branch: string): Promise<void> | ||||||
| @@ -62,7 +61,6 @@ export interface IGitCommandManager { | |||||||
|   tryDisableAutomaticGarbageCollection(): Promise<boolean> |   tryDisableAutomaticGarbageCollection(): Promise<boolean> | ||||||
|   tryGetFetchUrl(): Promise<string> |   tryGetFetchUrl(): Promise<string> | ||||||
|   tryReset(): Promise<boolean> |   tryReset(): Promise<boolean> | ||||||
|   version(): Promise<GitVersion> |  | ||||||
| } | } | ||||||
|  |  | ||||||
| export async function createCommandManager( | export async function createCommandManager( | ||||||
| @@ -86,7 +84,6 @@ class GitCommandManager { | |||||||
|   private lfs = false |   private lfs = false | ||||||
|   private doSparseCheckout = false |   private doSparseCheckout = false | ||||||
|   private workingDirectory = '' |   private workingDirectory = '' | ||||||
|   private gitVersion: GitVersion = new GitVersion() |  | ||||||
|  |  | ||||||
|   // Private constructor; use createCommandManager() |   // Private constructor; use createCommandManager() | ||||||
|   private constructor() {} |   private constructor() {} | ||||||
| @@ -114,16 +111,7 @@ class GitCommandManager { | |||||||
|  |  | ||||||
|   async branchList(remote: boolean): Promise<string[]> { |   async branchList(remote: boolean): Promise<string[]> { | ||||||
|     const result: string[] = [] |     const result: string[] = [] | ||||||
|  |     const args = ['rev-parse', '--symbolic'] | ||||||
|     // 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'] |  | ||||||
|     if (remote) { |     if (remote) { | ||||||
|       args.push('--remotes=origin') |       args.push('--remotes=origin') | ||||||
|     } else { |     } else { | ||||||
| @@ -178,8 +166,6 @@ class GitCommandManager { | |||||||
|  |  | ||||||
|   async disableSparseCheckout(): Promise<void> { |   async disableSparseCheckout(): Promise<void> { | ||||||
|     await this.execGit(['sparse-checkout', 'disable']) |     await this.execGit(['sparse-checkout', 'disable']) | ||||||
|     // Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment). |  | ||||||
|     await this.tryConfigUnset('extensions.worktreeConfig', false) |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async sparseCheckout(sparseCheckout: string[]): Promise<void> { |   async sparseCheckout(sparseCheckout: string[]): Promise<void> { | ||||||
| @@ -486,10 +472,6 @@ class GitCommandManager { | |||||||
|     return output.exitCode === 0 |     return output.exitCode === 0 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async version(): Promise<GitVersion> { |  | ||||||
|     return this.gitVersion |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   static async createCommandManager( |   static async createCommandManager( | ||||||
|     workingDirectory: string, |     workingDirectory: string, | ||||||
|     lfs: boolean, |     lfs: boolean, | ||||||
| @@ -566,23 +548,23 @@ class GitCommandManager { | |||||||
|  |  | ||||||
|     // Git version |     // Git version | ||||||
|     core.debug('Getting git version') |     core.debug('Getting git version') | ||||||
|     this.gitVersion = new GitVersion() |     let gitVersion = new GitVersion() | ||||||
|     let gitOutput = await this.execGit(['version']) |     let gitOutput = await this.execGit(['version']) | ||||||
|     let stdout = gitOutput.stdout.trim() |     let stdout = gitOutput.stdout.trim() | ||||||
|     if (!stdout.includes('\n')) { |     if (!stdout.includes('\n')) { | ||||||
|       const match = stdout.match(/\d+\.\d+(\.\d+)?/) |       const match = stdout.match(/\d+\.\d+(\.\d+)?/) | ||||||
|       if (match) { |       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') |       throw new Error('Unable to determine git version') | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Minimum git version |     // Minimum git version | ||||||
|     if (!this.gitVersion.checkMinimum(MinimumGitVersion)) { |     if (!gitVersion.checkMinimum(MinimumGitVersion)) { | ||||||
|       throw new Error( |       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}` | ||||||
|       ) |       ) | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -615,15 +597,9 @@ class GitCommandManager { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     this.doSparseCheckout = doSparseCheckout |     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 |     // 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}`) |     core.debug(`Set git useragent to: ${gitHttpUserAgent}`) | ||||||
|     this.gitEnv['GIT_HTTP_USER_AGENT'] = 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 refHelper from './ref-helper' | ||||||
| import * as stateHelper from './state-helper' | import * as stateHelper from './state-helper' | ||||||
| import * as urlHelper from './url-helper' | import * as urlHelper from './url-helper' | ||||||
| import { | import {IGitCommandManager} from './git-command-manager' | ||||||
|   MinimumGitSparseCheckoutVersion, |  | ||||||
|   IGitCommandManager |  | ||||||
| } from './git-command-manager' |  | ||||||
| import {IGitSourceSettings} from './git-source-settings' | import {IGitSourceSettings} from './git-source-settings' | ||||||
|  |  | ||||||
| export async function getSource(settings: IGitSourceSettings): Promise<void> { | export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||||
| @@ -212,11 +209,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | |||||||
|  |  | ||||||
|     // Sparse checkout |     // Sparse checkout | ||||||
|     if (!settings.sparseCheckout) { |     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() |       await git.disableSparseCheckout() | ||||||
|       } |  | ||||||
|     } else { |     } else { | ||||||
|       core.startGroup('Setting up sparse checkout') |       core.startGroup('Setting up sparse checkout') | ||||||
|       if (settings.sparseCheckoutConeMode) { |       if (settings.sparseCheckoutConeMode) { | ||||||
|   | |||||||
| @@ -94,11 +94,6 @@ export interface IGitSourceSettings { | |||||||
|    */ |    */ | ||||||
|   sshStrict: boolean |   sshStrict: boolean | ||||||
|  |  | ||||||
|   /** |  | ||||||
|    * The SSH user to login as |  | ||||||
|    */ |  | ||||||
|   sshUser: string |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * Indicates whether to persist the credentials on disk to enable scripting authenticated git commands |    * 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.sshKnownHosts = core.getInput('ssh-known-hosts') | ||||||
|   result.sshStrict = |   result.sshStrict = | ||||||
|     (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE' |     (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE' | ||||||
|   result.sshUser = core.getInput('ssh-user') |  | ||||||
|  |  | ||||||
|   // Persist credentials |   // Persist credentials | ||||||
|   result.persistCredentials = |   result.persistCredentials = | ||||||
|   | |||||||
| @@ -12,8 +12,7 @@ export function getFetchUrl(settings: IGitSourceSettings): string { | |||||||
|   const encodedOwner = encodeURIComponent(settings.repositoryOwner) |   const encodedOwner = encodeURIComponent(settings.repositoryOwner) | ||||||
|   const encodedName = encodeURIComponent(settings.repositoryName) |   const encodedName = encodeURIComponent(settings.repositoryName) | ||||||
|   if (settings.sshKey) { |   if (settings.sshKey) { | ||||||
|     const user = settings.sshUser.length > 0 ? settings.sshUser : 'git' |     return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git` | ||||||
|     return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git` |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // "origin" is SCHEME://HOSTNAME[:PORT] |   // "origin" is SCHEME://HOSTNAME[:PORT] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user