mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 13:58:09 +08:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | b4ffde65f4 | ||
|  | 8530928916 | ||
|  | 7cdaf2fbc0 | ||
|  | 8ade135a41 | ||
|  | c533a0a4cf | ||
|  | 72f2cec99f | 
							
								
								
									
										10
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -72,6 +72,16 @@ jobs: | |||||||
|         shell: bash |         shell: bash | ||||||
|         run: __test__/verify-side-by-side.sh |         run: __test__/verify-side-by-side.sh | ||||||
|  |  | ||||||
|  |       # Filter | ||||||
|  |       - name: Fetch filter | ||||||
|  |         uses: ./ | ||||||
|  |         with: | ||||||
|  |           filter: 'blob:none' | ||||||
|  |           path: fetch-filter | ||||||
|  |  | ||||||
|  |       - name: Verify fetch filter | ||||||
|  |         run: __test__/verify-fetch-filter.sh | ||||||
|  |  | ||||||
|       # Sparse checkout |       # Sparse checkout | ||||||
|       - name: Sparse checkout |       - name: Sparse checkout | ||||||
|         uses: ./ |         uses: ./ | ||||||
|   | |||||||
| @@ -1,5 +1,8 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## v4.1.0 | ||||||
|  | - [Add support for partial checkout filters](https://github.com/actions/checkout/pull/1396) | ||||||
|  |  | ||||||
| ## v4.0.0 | ## v4.0.0 | ||||||
| - [Support fetching without the --progress option](https://github.com/actions/checkout/pull/1067) | - [Support fetching without the --progress option](https://github.com/actions/checkout/pull/1067) | ||||||
| - [Update to node20](https://github.com/actions/checkout/pull/1436) | - [Update to node20](https://github.com/actions/checkout/pull/1436) | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| * @actions/actions-runtime | * @actions/actions-launch | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,10 +1,10 @@ | |||||||
| [](https://github.com/actions/checkout/actions/workflows/test.yml) | [](https://github.com/actions/checkout/actions/workflows/test.yml) | ||||||
|  |  | ||||||
| # Checkout V3 | # Checkout V4 | ||||||
|  |  | ||||||
| This action checks-out your repository under `$GITHUB_WORKSPACE`, so your workflow can access it. | This action checks-out your repository under `$GITHUB_WORKSPACE`, so your workflow can access it. | ||||||
|  |  | ||||||
| Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set `fetch-depth: 0` to fetch all history for all branches and tags. Refer [here](https://help.github.com/en/articles/events-that-trigger-workflows) to learn which commit `$GITHUB_SHA` points to for different events. | Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set `fetch-depth: 0` to fetch all history for all branches and tags. Refer [here](https://docs.github.com/actions/using-workflows/events-that-trigger-workflows) to learn which commit `$GITHUB_SHA` points to for different events. | ||||||
|  |  | ||||||
| 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. | ||||||
|  |  | ||||||
| @@ -12,14 +12,13 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
|  |  | ||||||
| # What's new | # What's new | ||||||
|  |  | ||||||
| - Updated to the node16 runtime by default | Please refer to the [release page](https://github.com/actions/checkout/releases/latest) for the latest release notes. | ||||||
|   - This requires a minimum [Actions Runner](https://github.com/actions/runner/releases/tag/v2.285.0) version of v2.285.0 to run, which is by default available in GHES 3.4 or later. |  | ||||||
|  |  | ||||||
| # Usage | # Usage | ||||||
|  |  | ||||||
| <!-- start usage --> | <!-- start usage --> | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     # Repository name with owner. For example, actions/checkout |     # Repository name with owner. For example, actions/checkout | ||||||
|     # Default: ${{ github.repository }} |     # Default: ${{ github.repository }} | ||||||
| @@ -74,8 +73,12 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
|     # Default: true |     # Default: true | ||||||
|     clean: '' |     clean: '' | ||||||
|  |  | ||||||
|  |     # Partially clone against a given filter. Overrides sparse-checkout if set. | ||||||
|  |     # Default: null | ||||||
|  |     filter: '' | ||||||
|  |  | ||||||
|     # Do a sparse checkout on given patterns. Each pattern should be separated with |     # Do a sparse checkout on given patterns. Each pattern should be separated with | ||||||
|     # new lines |     # new lines. | ||||||
|     # Default: null |     # Default: null | ||||||
|     sparse-checkout: '' |     sparse-checkout: '' | ||||||
|  |  | ||||||
| @@ -139,7 +142,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Fetch only the root files | ## Fetch only the root files | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     sparse-checkout: . |     sparse-checkout: . | ||||||
| ``` | ``` | ||||||
| @@ -147,7 +150,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Fetch only the root files and `.github` and `src` folder | ## Fetch only the root files and `.github` and `src` folder | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     sparse-checkout: | |     sparse-checkout: | | ||||||
|       .github |       .github | ||||||
| @@ -157,7 +160,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Fetch only a single file | ## Fetch only a single file | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     sparse-checkout: | |     sparse-checkout: | | ||||||
|       README.md |       README.md | ||||||
| @@ -167,7 +170,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Fetch all history for all tags and branches | ## Fetch all history for all tags and branches | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     fetch-depth: 0 |     fetch-depth: 0 | ||||||
| ``` | ``` | ||||||
| @@ -175,7 +178,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Checkout a different branch | ## Checkout a different branch | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     ref: my-branch |     ref: my-branch | ||||||
| ``` | ``` | ||||||
| @@ -183,7 +186,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Checkout HEAD^ | ## Checkout HEAD^ | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     fetch-depth: 2 |     fetch-depth: 2 | ||||||
| - run: git checkout HEAD^ | - run: git checkout HEAD^ | ||||||
| @@ -193,12 +196,12 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - name: Checkout | - name: Checkout | ||||||
|   uses: actions/checkout@v3 |   uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     path: main |     path: main | ||||||
|  |  | ||||||
| - name: Checkout tools repo | - name: Checkout tools repo | ||||||
|   uses: actions/checkout@v3 |   uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     repository: my-org/my-tools |     repository: my-org/my-tools | ||||||
|     path: my-tools |     path: my-tools | ||||||
| @@ -209,10 +212,10 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - name: Checkout | - name: Checkout | ||||||
|   uses: actions/checkout@v3 |   uses: actions/checkout@v4 | ||||||
|  |  | ||||||
| - name: Checkout tools repo | - name: Checkout tools repo | ||||||
|   uses: actions/checkout@v3 |   uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     repository: my-org/my-tools |     repository: my-org/my-tools | ||||||
|     path: my-tools |     path: my-tools | ||||||
| @@ -223,12 +226,12 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - name: Checkout | - name: Checkout | ||||||
|   uses: actions/checkout@v3 |   uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     path: main |     path: main | ||||||
|  |  | ||||||
| - name: Checkout private tools | - name: Checkout private tools | ||||||
|   uses: actions/checkout@v3 |   uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     repository: my-org/my-private-tools |     repository: my-org/my-private-tools | ||||||
|     token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT |     token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT | ||||||
| @@ -241,7 +244,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||||||
| ## Checkout pull request HEAD commit instead of merge commit | ## Checkout pull request HEAD commit instead of merge commit | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v4 | ||||||
|   with: |   with: | ||||||
|     ref: ${{ github.event.pull_request.head.sha }} |     ref: ${{ github.event.pull_request.head.sha }} | ||||||
| ``` | ``` | ||||||
| @@ -257,7 +260,7 @@ jobs: | |||||||
|   build: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v3 |       - uses: actions/checkout@v4 | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ## Push a commit using the built-in token | ## Push a commit using the built-in token | ||||||
| @@ -268,7 +271,7 @@ jobs: | |||||||
|   build: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v3 |       - uses: actions/checkout@v4 | ||||||
|       - run: | |       - run: | | ||||||
|           date > generated.txt |           date > generated.txt | ||||||
|           git config user.name github-actions |           git config user.name github-actions | ||||||
|   | |||||||
| @@ -802,6 +802,7 @@ async function setup(testName: string): Promise<void> { | |||||||
|     authToken: 'some auth token', |     authToken: 'some auth token', | ||||||
|     clean: true, |     clean: true, | ||||||
|     commit: '', |     commit: '', | ||||||
|  |     filter: undefined, | ||||||
|     sparseCheckout: [], |     sparseCheckout: [], | ||||||
|     sparseCheckoutConeMode: true, |     sparseCheckoutConeMode: true, | ||||||
|     fetchDepth: 1, |     fetchDepth: 1, | ||||||
|   | |||||||
| @@ -79,6 +79,7 @@ describe('input-helper tests', () => { | |||||||
|     expect(settings.clean).toBe(true) |     expect(settings.clean).toBe(true) | ||||||
|     expect(settings.commit).toBeTruthy() |     expect(settings.commit).toBeTruthy() | ||||||
|     expect(settings.commit).toBe('1234567890123456789012345678901234567890') |     expect(settings.commit).toBe('1234567890123456789012345678901234567890') | ||||||
|  |     expect(settings.filter).toBe(undefined) | ||||||
|     expect(settings.sparseCheckout).toBe(undefined) |     expect(settings.sparseCheckout).toBe(undefined) | ||||||
|     expect(settings.sparseCheckoutConeMode).toBe(true) |     expect(settings.sparseCheckoutConeMode).toBe(true) | ||||||
|     expect(settings.fetchDepth).toBe(1) |     expect(settings.fetchDepth).toBe(1) | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								__test__/verify-fetch-filter.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								__test__/verify-fetch-filter.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | # Verify .git folder | ||||||
|  | if [ ! -d "./fetch-filter/.git" ]; then | ||||||
|  |   echo "Expected ./fetch-filter/.git folder to exist" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Verify .git/config contains partialclonefilter | ||||||
|  |  | ||||||
|  | CLONE_FILTER=$(git -C fetch-filter config --local --get remote.origin.partialclonefilter) | ||||||
|  |  | ||||||
|  | if [ "$CLONE_FILTER" != "blob:none" ]; then | ||||||
|  |   echo "Expected ./fetch-filter/.git/config to have 'remote.origin.partialclonefilter' set to 'blob:none'" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
| @@ -53,10 +53,15 @@ inputs: | |||||||
|   clean: |   clean: | ||||||
|     description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' |     description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' | ||||||
|     default: true |     default: true | ||||||
|  |   filter: | ||||||
|  |     description: > | ||||||
|  |       Partially clone against a given filter. | ||||||
|  |       Overrides sparse-checkout if set. | ||||||
|  |     default: null | ||||||
|   sparse-checkout: |   sparse-checkout: | ||||||
|     description: > |     description: > | ||||||
|       Do a sparse checkout on given patterns. |       Do a sparse checkout on given patterns. | ||||||
|       Each pattern should be separated with new lines |       Each pattern should be separated with new lines. | ||||||
|     default: null |     default: null | ||||||
|   sparse-checkout-cone-mode: |   sparse-checkout-cone-mode: | ||||||
|     description: > |     description: > | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -1244,8 +1244,12 @@ function getSource(settings) { | |||||||
|             // Fetch |             // Fetch | ||||||
|             core.startGroup('Fetching the repository'); |             core.startGroup('Fetching the repository'); | ||||||
|             const fetchOptions = {}; |             const fetchOptions = {}; | ||||||
|             if (settings.sparseCheckout) |             if (settings.filter) { | ||||||
|  |                 fetchOptions.filter = settings.filter; | ||||||
|  |             } | ||||||
|  |             else if (settings.sparseCheckout) { | ||||||
|                 fetchOptions.filter = 'blob:none'; |                 fetchOptions.filter = 'blob:none'; | ||||||
|  |             } | ||||||
|             if (settings.fetchDepth <= 0) { |             if (settings.fetchDepth <= 0) { | ||||||
|                 // Fetch all branches and tags |                 // Fetch all branches and tags | ||||||
|                 let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit); |                 let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit); | ||||||
| @@ -1723,6 +1727,12 @@ function getInputs() { | |||||||
|         // Clean |         // Clean | ||||||
|         result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'; |         result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'; | ||||||
|         core.debug(`clean = ${result.clean}`); |         core.debug(`clean = ${result.clean}`); | ||||||
|  |         // Filter | ||||||
|  |         const filter = core.getInput('filter'); | ||||||
|  |         if (filter) { | ||||||
|  |             result.filter = filter; | ||||||
|  |         } | ||||||
|  |         core.debug(`filter = ${result.filter}`); | ||||||
|         // Sparse checkout |         // Sparse checkout | ||||||
|         const sparseCheckout = core.getMultilineInput('sparse-checkout'); |         const sparseCheckout = core.getMultilineInput('sparse-checkout'); | ||||||
|         if (sparseCheckout.length) { |         if (sparseCheckout.length) { | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,12 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "4.0.0", |   "version": "4.1.0", | ||||||
|   "lockfileVersion": 2, |   "lockfileVersion": 2, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "packages": { |   "packages": { | ||||||
|     "": { |     "": { | ||||||
|       "name": "checkout", |       "name": "checkout", | ||||||
|       "version": "4.0.0", |       "version": "4.1.0", | ||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/core": "^1.10.0", |         "@actions/core": "^1.10.0", | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "4.0.0", |   "version": "4.1.0", | ||||||
|   "description": "checkout action", |   "description": "checkout action", | ||||||
|   "main": "lib/main.js", |   "main": "lib/main.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|   | |||||||
| @@ -159,7 +159,13 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | |||||||
|       fetchTags?: boolean |       fetchTags?: boolean | ||||||
|       showProgress?: boolean |       showProgress?: boolean | ||||||
|     } = {} |     } = {} | ||||||
|     if (settings.sparseCheckout) fetchOptions.filter = 'blob:none' |  | ||||||
|  |     if (settings.filter) { | ||||||
|  |       fetchOptions.filter = settings.filter | ||||||
|  |     } else if (settings.sparseCheckout) { | ||||||
|  |       fetchOptions.filter = 'blob:none' | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (settings.fetchDepth <= 0) { |     if (settings.fetchDepth <= 0) { | ||||||
|       // Fetch all branches and tags |       // Fetch all branches and tags | ||||||
|       let refSpec = refHelper.getRefSpecForAllHistory( |       let refSpec = refHelper.getRefSpecForAllHistory( | ||||||
|   | |||||||
| @@ -29,6 +29,11 @@ export interface IGitSourceSettings { | |||||||
|    */ |    */ | ||||||
|   clean: boolean |   clean: boolean | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * The filter determining which objects to include | ||||||
|  |    */ | ||||||
|  |   filter: string | undefined | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * The array of folders to make the sparse checkout |    * The array of folders to make the sparse checkout | ||||||
|    */ |    */ | ||||||
|   | |||||||
| @@ -82,6 +82,14 @@ export async function getInputs(): Promise<IGitSourceSettings> { | |||||||
|   result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE' |   result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE' | ||||||
|   core.debug(`clean = ${result.clean}`) |   core.debug(`clean = ${result.clean}`) | ||||||
|  |  | ||||||
|  |   // Filter | ||||||
|  |   const filter = core.getInput('filter') | ||||||
|  |   if (filter) { | ||||||
|  |     result.filter = filter | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   core.debug(`filter = ${result.filter}`) | ||||||
|  |  | ||||||
|   // Sparse checkout |   // Sparse checkout | ||||||
|   const sparseCheckout = core.getMultilineInput('sparse-checkout') |   const sparseCheckout = core.getMultilineInput('sparse-checkout') | ||||||
|   if (sparseCheckout.length) { |   if (sparseCheckout.length) { | ||||||
|   | |||||||
| @@ -120,7 +120,7 @@ function updateUsage( | |||||||
| } | } | ||||||
|  |  | ||||||
| updateUsage( | updateUsage( | ||||||
|   'actions/checkout@v3', |   'actions/checkout@v4', | ||||||
|   path.join(__dirname, '..', '..', 'action.yml'), |   path.join(__dirname, '..', '..', 'action.yml'), | ||||||
|   path.join(__dirname, '..', '..', 'README.md') |   path.join(__dirname, '..', '..', 'README.md') | ||||||
| ) | ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user