mirror of
				https://kkgithub.com/actions/checkout
				synced 2025-10-31 22:31:56 +08:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
			releases/v
			...
			v4.1.1
		
	
	| 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 | ||||
|         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 | ||||
|       - name: Sparse checkout | ||||
|         uses: ./ | ||||
|  | ||||
| @ -1,5 +1,8 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## v4.1.0 | ||||
| - [Add support for partial checkout filters](https://github.com/actions/checkout/pull/1396) | ||||
|  | ||||
| ## v4.0.0 | ||||
| - [Support fetching without the --progress option](https://github.com/actions/checkout/pull/1067) | ||||
| - [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) | ||||
|  | ||||
| # Checkout V3 | ||||
| # Checkout V4 | ||||
|  | ||||
| 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. | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| - Updated to the node16 runtime by default | ||||
|   - 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. | ||||
| Please refer to the [release page](https://github.com/actions/checkout/releases/latest) for the latest release notes. | ||||
|  | ||||
| # Usage | ||||
|  | ||||
| <!-- start usage --> | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     # Repository name with owner. For example, actions/checkout | ||||
|     # 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 | ||||
|     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 | ||||
|     # new lines | ||||
|     # new lines. | ||||
|     # Default: null | ||||
|     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 | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     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 | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     sparse-checkout: | | ||||
|       .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 | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     sparse-checkout: | | ||||
|       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 | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     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 | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     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^ | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     fetch-depth: 2 | ||||
| - 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 | ||||
| - name: Checkout | ||||
|   uses: actions/checkout@v3 | ||||
|   uses: actions/checkout@v4 | ||||
|   with: | ||||
|     path: main | ||||
|  | ||||
| - name: Checkout tools repo | ||||
|   uses: actions/checkout@v3 | ||||
|   uses: actions/checkout@v4 | ||||
|   with: | ||||
|     repository: my-org/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 | ||||
| - name: Checkout | ||||
|   uses: actions/checkout@v3 | ||||
|   uses: actions/checkout@v4 | ||||
|  | ||||
| - name: Checkout tools repo | ||||
|   uses: actions/checkout@v3 | ||||
|   uses: actions/checkout@v4 | ||||
|   with: | ||||
|     repository: my-org/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 | ||||
| - name: Checkout | ||||
|   uses: actions/checkout@v3 | ||||
|   uses: actions/checkout@v4 | ||||
|   with: | ||||
|     path: main | ||||
|  | ||||
| - name: Checkout private tools | ||||
|   uses: actions/checkout@v3 | ||||
|   uses: actions/checkout@v4 | ||||
|   with: | ||||
|     repository: my-org/my-private-tools | ||||
|     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 | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/checkout@v3 | ||||
| - uses: actions/checkout@v4 | ||||
|   with: | ||||
|     ref: ${{ github.event.pull_request.head.sha }} | ||||
| ``` | ||||
| @ -257,7 +260,7 @@ jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|       - uses: actions/checkout@v4 | ||||
| ``` | ||||
|  | ||||
| ## Push a commit using the built-in token | ||||
| @ -268,7 +271,7 @@ jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|       - uses: actions/checkout@v4 | ||||
|       - run: | | ||||
|           date > generated.txt | ||||
|           git config user.name github-actions | ||||
|  | ||||
| @ -802,6 +802,7 @@ async function setup(testName: string): Promise<void> { | ||||
|     authToken: 'some auth token', | ||||
|     clean: true, | ||||
|     commit: '', | ||||
|     filter: undefined, | ||||
|     sparseCheckout: [], | ||||
|     sparseCheckoutConeMode: true, | ||||
|     fetchDepth: 1, | ||||
|  | ||||
| @ -79,6 +79,7 @@ describe('input-helper tests', () => { | ||||
|     expect(settings.clean).toBe(true) | ||||
|     expect(settings.commit).toBeTruthy() | ||||
|     expect(settings.commit).toBe('1234567890123456789012345678901234567890') | ||||
|     expect(settings.filter).toBe(undefined) | ||||
|     expect(settings.sparseCheckout).toBe(undefined) | ||||
|     expect(settings.sparseCheckoutConeMode).toBe(true) | ||||
|     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: | ||||
|     description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' | ||||
|     default: true | ||||
|   filter: | ||||
|     description: > | ||||
|       Partially clone against a given filter. | ||||
|       Overrides sparse-checkout if set. | ||||
|     default: null | ||||
|   sparse-checkout: | ||||
|     description: > | ||||
|       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 | ||||
|   sparse-checkout-cone-mode: | ||||
|     description: > | ||||
|  | ||||
							
								
								
									
										12
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -1244,8 +1244,12 @@ function getSource(settings) { | ||||
|             // Fetch | ||||
|             core.startGroup('Fetching the repository'); | ||||
|             const fetchOptions = {}; | ||||
|             if (settings.sparseCheckout) | ||||
|             if (settings.filter) { | ||||
|                 fetchOptions.filter = settings.filter; | ||||
|             } | ||||
|             else if (settings.sparseCheckout) { | ||||
|                 fetchOptions.filter = 'blob:none'; | ||||
|             } | ||||
|             if (settings.fetchDepth <= 0) { | ||||
|                 // Fetch all branches and tags | ||||
|                 let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit); | ||||
| @ -1723,6 +1727,12 @@ function getInputs() { | ||||
|         // Clean | ||||
|         result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'; | ||||
|         core.debug(`clean = ${result.clean}`); | ||||
|         // Filter | ||||
|         const filter = core.getInput('filter'); | ||||
|         if (filter) { | ||||
|             result.filter = filter; | ||||
|         } | ||||
|         core.debug(`filter = ${result.filter}`); | ||||
|         // Sparse checkout | ||||
|         const sparseCheckout = core.getMultilineInput('sparse-checkout'); | ||||
|         if (sparseCheckout.length) { | ||||
|  | ||||
							
								
								
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -1,12 +1,12 @@ | ||||
| { | ||||
|   "name": "checkout", | ||||
|   "version": "4.0.0", | ||||
|   "version": "4.1.0", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "checkout", | ||||
|       "version": "4.0.0", | ||||
|       "version": "4.1.0", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@actions/core": "^1.10.0", | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "checkout", | ||||
|   "version": "4.0.0", | ||||
|   "version": "4.1.0", | ||||
|   "description": "checkout action", | ||||
|   "main": "lib/main.js", | ||||
|   "scripts": { | ||||
|  | ||||
| @ -159,7 +159,13 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||
|       fetchTags?: 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) { | ||||
|       // Fetch all branches and tags | ||||
|       let refSpec = refHelper.getRefSpecForAllHistory( | ||||
|  | ||||
| @ -29,6 +29,11 @@ export interface IGitSourceSettings { | ||||
|    */ | ||||
|   clean: boolean | ||||
|  | ||||
|   /** | ||||
|    * The filter determining which objects to include | ||||
|    */ | ||||
|   filter: string | undefined | ||||
|  | ||||
|   /** | ||||
|    * 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' | ||||
|   core.debug(`clean = ${result.clean}`) | ||||
|  | ||||
|   // Filter | ||||
|   const filter = core.getInput('filter') | ||||
|   if (filter) { | ||||
|     result.filter = filter | ||||
|   } | ||||
|  | ||||
|   core.debug(`filter = ${result.filter}`) | ||||
|  | ||||
|   // Sparse checkout | ||||
|   const sparseCheckout = core.getMultilineInput('sparse-checkout') | ||||
|   if (sparseCheckout.length) { | ||||
|  | ||||
| @ -120,7 +120,7 @@ function updateUsage( | ||||
| } | ||||
|  | ||||
| updateUsage( | ||||
|   'actions/checkout@v3', | ||||
|   'actions/checkout@v4', | ||||
|   path.join(__dirname, '..', '..', 'action.yml'), | ||||
|   path.join(__dirname, '..', '..', 'README.md') | ||||
| ) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	