mirror of
				https://github.com/actions/cache.git
				synced 2025-10-31 15:26:24 +07:00 
			
		
		
		
	Compare commits
	
		
			52 Commits
		
	
	
		
			testEnable
			...
			vsvipul/te
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 907bb7fbe4 | |||
| 45f362d0ca | |||
| ca0688b4ab | |||
| ef8498dcba | |||
| 8f1e2e0286 | |||
| 48af2dc4a9 | |||
| f63a711791 | |||
| 770a27cf65 | |||
| c2131abcd8 | |||
| 575160481d | |||
| 136d96b4ae | |||
| 7d4f40b464 | |||
| 2d8d0d1c9b | |||
| 7799d864d9 | |||
| 4b0cf6cc46 | |||
| 60c606a2b4 | |||
| b6e9a919a7 | |||
| c842503583 | |||
| 2b7da2a62c | |||
| deae296ab3 | |||
| c7c46bcb6d | |||
| 6535c5fb5f | |||
| 3fdafa472e | |||
| 341e6d75d9 | |||
| 3fe001f5ca | |||
| ab4bea262c | |||
| 7772fcab79 | |||
| 6c2ab9416b | |||
| 2c7b30f330 | |||
| 73cb7e0405 | |||
| 757c5a8ca4 | |||
| 4e817c1f42 | |||
| 72d1e4fdff | |||
| 8e70c71aee | |||
| 4d3516739c | |||
| 9c2f1a93d4 | |||
| 5df1ae880d | |||
| 45bb0b1552 | |||
| b32c91dfec | |||
| 7f8b9fe1f0 | |||
| 0ac93353cd | |||
| 051d7bc106 | |||
| 934cc8fa30 | |||
| 35dd74a1a0 | |||
| 869d93f182 | |||
| a848fb313f | |||
| de7c17c6a9 | |||
| 447f0fd1d3 | |||
| 47e8bd685f | |||
| 795a8f09a9 | |||
| 4762de4681 | |||
| 12ed05f49a | 
| @ -9,15 +9,14 @@ | ||||
|     "plugin:import/errors", | ||||
|     "plugin:import/warnings", | ||||
|     "plugin:import/typescript", | ||||
|     "plugin:prettier/recommended", | ||||
|     "prettier/@typescript-eslint" | ||||
|     "plugin:prettier/recommended" | ||||
|   ], | ||||
|   "plugins": ["@typescript-eslint", "simple-import-sort", "jest"], | ||||
|   "rules": { | ||||
|     "import/first": "error", | ||||
|     "import/newline-after-import": "error", | ||||
|     "import/no-duplicates": "error", | ||||
|     "simple-import-sort/sort": "error", | ||||
|     "simple-import-sort/imports": "error", | ||||
|     "sort-imports": "off" | ||||
|   } | ||||
| } | ||||
|  | ||||
							
								
								
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @ -1 +1,2 @@ | ||||
| .licenses/** -diff linguist-generated=true | ||||
| .licenses/** -diff linguist-generated=true | ||||
| * text=auto eol=lf | ||||
							
								
								
									
										16
									
								
								.github/auto_assign.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.github/auto_assign.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| # Set to true to add reviewers to pull requests | ||||
| addReviewers: true | ||||
|  | ||||
| # Set to true to add assignees to pull requests | ||||
| addAssignees: false | ||||
|  | ||||
| # A list of reviewers to be added to pull requests (GitHub user name) | ||||
| reviewers: | ||||
|   - phantsure | ||||
|   - aparna-ravindra | ||||
|   - tiwarishub | ||||
|   - vsvipul | ||||
|  | ||||
| # A number of reviewers added to the pull request | ||||
| # Set 0 to add all the reviewers (default: 0) | ||||
| numberOfReviewers: 1 | ||||
							
								
								
									
										10
									
								
								.github/workflows/auto-assign.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/auto-assign.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| name: 'Auto Assign' | ||||
| on: | ||||
|   pull_request: | ||||
|     types: [opened, ready_for_review] | ||||
|  | ||||
| jobs: | ||||
|   add-reviews: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: kentaro-m/auto-assign-action@v1.2.1 | ||||
							
								
								
									
										13
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							| @ -22,16 +22,13 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Set Node.js 12.x | ||||
|         uses: actions/setup-node@v1 | ||||
|       - uses: actions/checkout@v3 | ||||
|       - name: Setup Node.js 16.x | ||||
|         uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           node-version: 12.x | ||||
|  | ||||
|           node-version: 16.x | ||||
|       - name: Install dependencies | ||||
|         run: npm ci | ||||
|  | ||||
|       - name: Rebuild the dist/ directory | ||||
|         run: npm run build | ||||
|  | ||||
| @ -45,7 +42,7 @@ jobs: | ||||
|         id: diff | ||||
|  | ||||
|       # If index.js was different than expected, upload the expected version as an artifact | ||||
|       - uses: actions/upload-artifact@v2 | ||||
|       - uses: actions/upload-artifact@v3 | ||||
|         if: ${{ failure() && steps.diff.conclusion == 'failure' }} | ||||
|         with: | ||||
|           name: dist | ||||
|  | ||||
							
								
								
									
										4
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @ -14,7 +14,7 @@ jobs: | ||||
|  | ||||
|     steps: | ||||
|     - name: Checkout repository | ||||
|       uses: actions/checkout@v2 | ||||
|       uses: actions/checkout@v3 | ||||
|       with: | ||||
|         # We must fetch at least the immediate parents so that if this is | ||||
|         # a pull request then we can checkout the head. | ||||
| @ -24,7 +24,7 @@ jobs: | ||||
|     # the head of the pull request instead of the merge commit. | ||||
|     - run: git checkout HEAD^2 | ||||
|       if: ${{ github.event_name == 'pull_request' }} | ||||
|        | ||||
|  | ||||
|     # Initializes the CodeQL tools for scanning. | ||||
|     - name: Initialize CodeQL | ||||
|       uses: github/codeql-action/init@v1 | ||||
|  | ||||
							
								
								
									
										2
									
								
								.github/workflows/licensed.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/licensed.yml
									
									
									
									
										vendored
									
									
								
							| @ -13,7 +13,7 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     name: Check licenses | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/checkout@v3 | ||||
|       - run: npm ci | ||||
|       - name: Install licensed | ||||
|         run: | | ||||
|  | ||||
							
								
								
									
										18
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| @ -24,17 +24,17 @@ jobs: | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v2 | ||||
|     - name: Setup Node.js | ||||
|       uses: actions/setup-node@v1 | ||||
|       uses: actions/checkout@v3 | ||||
|     - name: Setup Node.js 16.x | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         node-version: '12.x' | ||||
|         node-version: 16.x | ||||
|     - name: Determine npm cache directory | ||||
|       id: npm-cache | ||||
|       run: | | ||||
|         echo "::set-output name=dir::$(npm config get cache)" | ||||
|     - name: Restore npm cache | ||||
|       uses: actions/cache@v2 | ||||
|       uses: actions/cache@v3 | ||||
|       with: | ||||
|         path: ${{ steps.npm-cache.outputs.dir }} | ||||
|         key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | ||||
| @ -57,7 +57,7 @@ jobs: | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v2 | ||||
|       uses: actions/checkout@v3 | ||||
|     - name: Generate files in working directory | ||||
|       shell: bash | ||||
|       run: __tests__/create-cache-files.sh ${{ runner.os }} test-cache | ||||
| @ -80,7 +80,7 @@ jobs: | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v2 | ||||
|       uses: actions/checkout@v3 | ||||
|     - name: Restore cache | ||||
|       uses: ./ | ||||
|       with: | ||||
| @ -110,7 +110,7 @@ jobs: | ||||
|       https_proxy: http://squid-proxy:3128 | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v2 | ||||
|       uses: actions/checkout@v3 | ||||
|     - name: Generate files | ||||
|       run: __tests__/create-cache-files.sh proxy test-cache | ||||
|     - name: Save cache | ||||
| @ -133,7 +133,7 @@ jobs: | ||||
|       https_proxy: http://squid-proxy:3128 | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v2 | ||||
|       uses: actions/checkout@v3 | ||||
|     - name: Restore cache | ||||
|       uses: ./ | ||||
|       with: | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@actions/cache.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@actions/cache.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@actions/cache" | ||||
| version: 1.0.8 | ||||
| version: 2.0.2 | ||||
| type: npm | ||||
| summary: Actions cache lib | ||||
| homepage: https://github.com/actions/toolkit/tree/main/packages/cache | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE.md | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@actions/exec.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@actions/exec.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@actions/exec" | ||||
| version: 1.1.0 | ||||
| version: 1.1.1 | ||||
| type: npm | ||||
| summary: Actions exec lib | ||||
| homepage: https://github.com/actions/toolkit/tree/main/packages/exec | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE.md | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@actions/io.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@actions/io.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@actions/io" | ||||
| version: 1.1.1 | ||||
| version: 1.1.2 | ||||
| type: npm | ||||
| summary: Actions io lib | ||||
| homepage: https://github.com/actions/toolkit/tree/main/packages/io | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE.md | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@azure/core-asynciterator-polyfill" | ||||
| version: 1.0.0 | ||||
| version: 1.0.2 | ||||
| type: npm | ||||
| summary: Polyfill for IE/Node 8 for Symbol.asyncIterator | ||||
| homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/core-asynciterator-polyfill | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|  | ||||
							
								
								
									
										2
									
								
								.licenses/npm/@azure/core-http.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/@azure/core-http.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: "@azure/core-http" | ||||
| version: 2.2.2 | ||||
| version: 2.2.4 | ||||
| type: npm | ||||
| summary: Isomorphic client Runtime for Typescript/node.js/browser javascript client | ||||
|   libraries generated using AutoRest | ||||
|  | ||||
							
								
								
									
										7
									
								
								.licenses/npm/@azure/core-lro.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								.licenses/npm/@azure/core-lro.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,10 +1,9 @@ | ||||
| --- | ||||
| name: "@azure/core-lro" | ||||
| version: 2.2.1 | ||||
| version: 2.2.4 | ||||
| type: npm | ||||
| summary: Isomorphic client library for supporting long-running operations in node.js | ||||
|   and browser. | ||||
| homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-lro/README.md | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|  | ||||
							
								
								
									
										2
									
								
								.licenses/npm/@azure/core-paging.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/@azure/core-paging.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: "@azure/core-paging" | ||||
| version: 1.2.0 | ||||
| version: 1.2.1 | ||||
| type: npm | ||||
| summary: Core types for paging async iterable iterators | ||||
| homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-paging/README.md | ||||
|  | ||||
							
								
								
									
										7
									
								
								.licenses/npm/@azure/ms-rest-js.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								.licenses/npm/@azure/ms-rest-js.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,10 +1,9 @@ | ||||
| --- | ||||
| name: "@azure/ms-rest-js" | ||||
| version: 2.6.0 | ||||
| version: 2.6.1 | ||||
| type: npm | ||||
| summary: Isomorphic client Runtime for Typescript/node.js/browser javascript client | ||||
|   libraries generated using AutoRest | ||||
| homepage: https://github.com/Azure/ms-rest-js | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@azure/storage-blob.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@azure/storage-blob.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@azure/storage-blob" | ||||
| version: 12.8.0 | ||||
| version: 12.9.0 | ||||
| type: npm | ||||
| summary: Microsoft Azure Storage SDK for JavaScript - Blob | ||||
| homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/storage/storage-blob/ | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@opentelemetry/api.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@opentelemetry/api.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: "@opentelemetry/api" | ||||
| version: 1.0.3 | ||||
| version: 1.0.4 | ||||
| type: npm | ||||
| summary: Public API for OpenTelemetry | ||||
| homepage: https://github.com/open-telemetry/opentelemetry-js-api#readme | ||||
| @ -218,10 +218,6 @@ licenses: | ||||
|     [discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions | ||||
|     [license-url]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/LICENSE | ||||
|     [license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat | ||||
|     [dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js-api.svg | ||||
|     [dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js-api | ||||
|     [devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js-api.svg?type=dev | ||||
|     [devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js-api?type=dev | ||||
|     [npm-url]: https://www.npmjs.com/package/@opentelemetry/api | ||||
|     [npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg | ||||
|     [docs-tracing]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/docs/tracing.md | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@types/node-fetch.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@types/node-fetch.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@types/node-fetch" | ||||
| version: 2.5.12 | ||||
| version: 2.6.1 | ||||
| type: npm | ||||
| summary: TypeScript definitions for node-fetch | ||||
| homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node-fetch | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|  | ||||
							
								
								
									
										6
									
								
								.licenses/npm/@types/node.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/@types/node.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,9 +1,9 @@ | ||||
| --- | ||||
| name: "@types/node" | ||||
| version: 12.20.37 | ||||
| version: 16.11.26 | ||||
| type: npm | ||||
| summary: TypeScript definitions for Node.js | ||||
| homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node | ||||
| summary:  | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|  | ||||
							
								
								
									
										2
									
								
								.licenses/npm/node-fetch.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/node-fetch.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: node-fetch | ||||
| version: 2.6.6 | ||||
| version: 2.6.7 | ||||
| type: npm | ||||
| summary: A light-weight module that brings window.fetch to node.js | ||||
| homepage: https://github.com/bitinn/node-fetch | ||||
|  | ||||
							
								
								
									
										45
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								README.md
									
									
									
									
									
								
							| @ -1,20 +1,27 @@ | ||||
| # cache | ||||
|  | ||||
| Test for autoassign. | ||||
| This action allows caching dependencies and build outputs to improve workflow execution time. | ||||
|  | ||||
| <a href="https://github.com/actions/cache/actions?query=workflow%3ATests"><img alt="GitHub Actions status" src="https://github.com/actions/cache/workflows/Tests/badge.svg?branch=main&event=push"></a> | ||||
| [](https://github.com/actions/cache/actions/workflows/workflow.yml) | ||||
|  | ||||
| ## Documentation | ||||
|  | ||||
| See ["Caching dependencies to speed up workflows"](https://help.github.com/github/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows). | ||||
|  | ||||
| ## What's New | ||||
| ### v3 | ||||
| * Added support for caching from GHES 3.5. | ||||
| * Fixed download issue for files > 2GB during restore. | ||||
| * Updated the minimum runner version support from node 12 -> node 16. | ||||
|  | ||||
| * Added support for multiple paths, [glob patterns](https://github.com/actions/toolkit/tree/main/packages/glob), and single file caches.  | ||||
| ### v2 | ||||
| * Increased the cache size limit to 10 GB. | ||||
| * Added support for multiple paths, [glob patterns](https://github.com/actions/toolkit/tree/main/packages/glob), and single file caches. | ||||
|  | ||||
| ```yaml | ||||
| - name: Cache multiple paths | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/cache | ||||
| @ -34,9 +41,11 @@ Refer [here](https://github.com/actions/cache/blob/v1/README.md) for previous ve | ||||
| ### Pre-requisites | ||||
| Create a workflow `.yml` file in your repositories `.github/workflows` directory. An [example workflow](#example-workflow) is available below. For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file). | ||||
|  | ||||
| If you are using this inside a container, a POSIX-compliant `tar` needs to be included and accessible in the execution path. | ||||
|  | ||||
| ### Inputs | ||||
|  | ||||
| * `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns.  | ||||
| * `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns. | ||||
| * `key` - An explicit key for restoring and saving the cache | ||||
| * `restore-keys` - An ordered list of keys to use for restoring the cache if no cache hit occurred for key | ||||
|  | ||||
| @ -47,7 +56,7 @@ Create a workflow `.yml` file in your repositories `.github/workflows` directory | ||||
| > See [Skipping steps based on cache-hit](#Skipping-steps-based-on-cache-hit) for info on using this output | ||||
|  | ||||
| ### Cache scopes | ||||
| The cache is scoped to the key and branch. The default branch cache is available to other branches.  | ||||
| The cache is scoped to the key and branch. The default branch cache is available to other branches. | ||||
|  | ||||
| See [Matching a cache key](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key) for more info. | ||||
|  | ||||
| @ -63,11 +72,11 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v2 | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Cache Primes | ||||
|       id: cache-primes | ||||
|       uses: actions/cache@v2 | ||||
|       uses: actions/cache@v3 | ||||
|       with: | ||||
|         path: prime-numbers | ||||
|         key: ${{ runner.os }}-primes | ||||
| @ -86,11 +95,13 @@ Every programming language and framework has its own way of caching. | ||||
|  | ||||
| See [Examples](examples.md) for a list of `actions/cache` implementations for use with: | ||||
|  | ||||
| - [C# - Nuget](./examples.md#c---nuget) | ||||
| - [C# - NuGet](./examples.md#c---nuget) | ||||
| - [D - DUB](./examples.md#d---dub) | ||||
| - [Deno](./examples.md#deno) | ||||
| - [Elixir - Mix](./examples.md#elixir---mix) | ||||
| - [Go - Modules](./examples.md#go---modules) | ||||
| - [Haskell - Cabal](./examples.md#haskell---cabal) | ||||
| - [Haskell - Stack](./examples.md#haskell---stack) | ||||
| - [Java - Gradle](./examples.md#java---gradle) | ||||
| - [Java - Maven](./examples.md#java---maven) | ||||
| - [Node - npm](./examples.md#node---npm) | ||||
| @ -115,11 +126,11 @@ A cache key can include any of the contexts, functions, literals, and operators | ||||
| For example, using the [`hashFiles`](https://help.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#hashfiles) function allows you to create a new cache when dependencies change. | ||||
|  | ||||
| ```yaml | ||||
|   - uses: actions/cache@v2 | ||||
|   - uses: actions/cache@v3 | ||||
|     with: | ||||
|       path: |  | ||||
|       path: | | ||||
|         path/to/dependencies | ||||
|         some/other/dependencies  | ||||
|         some/other/dependencies | ||||
|       key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} | ||||
| ``` | ||||
|  | ||||
| @ -133,7 +144,7 @@ Additionally, you can use arbitrary command output in a cache key, such as a dat | ||||
|       echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")" | ||||
|     shell: bash | ||||
|  | ||||
|   - uses: actions/cache@v2 | ||||
|   - uses: actions/cache@v3 | ||||
|     with: | ||||
|       path: path/to/dependencies | ||||
|       key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} | ||||
| @ -152,9 +163,9 @@ Using the `cache-hit` output, subsequent steps (such as install or build) can be | ||||
| Example: | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v2 | ||||
|   - uses: actions/checkout@v3 | ||||
|  | ||||
|   - uses: actions/cache@v2 | ||||
|   - uses: actions/cache@v3 | ||||
|     id: cache | ||||
|     with: | ||||
|       path: path/to/dependencies | ||||
| @ -167,12 +178,6 @@ steps: | ||||
|  | ||||
| > Note: The `id` defined in `actions/cache` must match the `id` in the `if` statement (i.e. `steps.[ID].outputs.cache-hit`) | ||||
|  | ||||
| ## Known limitation | ||||
|  | ||||
| - `action/cache` is currently not supported on GitHub Enterprise Server. <https://github.com/github/roadmap/issues/273> is tracking this. | ||||
|  | ||||
| Since GitHub Enterprise Server uses self-hosted runners, dependencies are typically cached on the runner by whatever dependency management tool is being used (npm, maven, etc.).  This eliminates the need for explicit caching in some scenarios. | ||||
|  | ||||
| ## Contributing | ||||
| We would love for you to contribute to `actions/cache`, pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information. | ||||
|  | ||||
|  | ||||
							
								
								
									
										8
									
								
								RELEASES.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								RELEASES.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| # Releases | ||||
|  | ||||
| ### 3.0.0 | ||||
| - Updated minimum runner version support from node 12 -> node 16 | ||||
|  | ||||
| ### 3.0.1 | ||||
| - Added support for caching from GHES 3.5. | ||||
| - Fixed download issue for files > 2GB during restore. | ||||
| @ -1,3 +1,4 @@ | ||||
| import * as cache from "@actions/cache"; | ||||
| import * as core from "@actions/core"; | ||||
|  | ||||
| import { Events, Outputs, RefKey, State } from "../src/constants"; | ||||
| @ -5,6 +6,7 @@ import * as actionUtils from "../src/utils/actionUtils"; | ||||
| import * as testUtils from "../src/utils/testUtils"; | ||||
|  | ||||
| jest.mock("@actions/core"); | ||||
| jest.mock("@actions/cache"); | ||||
|  | ||||
| beforeAll(() => { | ||||
|     jest.spyOn(core, "getInput").mockImplementation((name, options) => { | ||||
| @ -26,7 +28,7 @@ test("isGhes returns true if server url is not github.com", () => { | ||||
|     } | ||||
| }); | ||||
|  | ||||
| test("isGhes returns true when server url is github.com", () => { | ||||
| test("isGhes returns false when server url is github.com", () => { | ||||
|     try { | ||||
|         process.env["GITHUB_SERVER_URL"] = "http://github.com"; | ||||
|         expect(actionUtils.isGhes()).toBe(false); | ||||
| @ -232,3 +234,41 @@ test("getInputAsInt throws if required and value missing", () => { | ||||
|         actionUtils.getInputAsInt("undefined", { required: true }) | ||||
|     ).toThrowError(); | ||||
| }); | ||||
|  | ||||
| test("isCacheFeatureAvailable for ac enabled", () => { | ||||
|     jest.spyOn(cache, "isFeatureAvailable").mockImplementation(() => true); | ||||
|  | ||||
|     expect(actionUtils.isCacheFeatureAvailable()).toBe(true); | ||||
| }); | ||||
|  | ||||
| test("isCacheFeatureAvailable for ac disabled on GHES", () => { | ||||
|     jest.spyOn(cache, "isFeatureAvailable").mockImplementation(() => false); | ||||
|  | ||||
|     const message = | ||||
|         "Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not."; | ||||
|     const infoMock = jest.spyOn(core, "info"); | ||||
|  | ||||
|     try { | ||||
|         process.env["GITHUB_SERVER_URL"] = "http://example.com"; | ||||
|         expect(actionUtils.isCacheFeatureAvailable()).toBe(false); | ||||
|         expect(infoMock).toHaveBeenCalledWith(`[warning]${message}`); | ||||
|     } finally { | ||||
|         delete process.env["GITHUB_SERVER_URL"]; | ||||
|     } | ||||
| }); | ||||
|  | ||||
| test("isCacheFeatureAvailable for ac disabled on dotcom", () => { | ||||
|     jest.spyOn(cache, "isFeatureAvailable").mockImplementation(() => false); | ||||
|  | ||||
|     const message = | ||||
|         "An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions."; | ||||
|     const infoMock = jest.spyOn(core, "info"); | ||||
|  | ||||
|     try { | ||||
|         process.env["GITHUB_SERVER_URL"] = "http://github.com"; | ||||
|         expect(actionUtils.isCacheFeatureAvailable()).toBe(false); | ||||
|         expect(infoMock).toHaveBeenCalledWith(`[warning]${message}`); | ||||
|     } finally { | ||||
|         delete process.env["GITHUB_SERVER_URL"]; | ||||
|     } | ||||
| }); | ||||
|  | ||||
| @ -34,6 +34,9 @@ beforeEach(() => { | ||||
|     process.env[RefKey] = "refs/heads/feature-branch"; | ||||
|  | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => false); | ||||
|     jest.spyOn(actionUtils, "isCacheFeatureAvailable").mockImplementation( | ||||
|         () => true | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| afterEach(() => { | ||||
| @ -55,10 +58,12 @@ test("restore with invalid event outputs warning", async () => { | ||||
|     expect(failedMock).toHaveBeenCalledTimes(0); | ||||
| }); | ||||
|  | ||||
| test("restore on GHES should no-op", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true); | ||||
| test("restore without AC available should no-op", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => false); | ||||
|     jest.spyOn(actionUtils, "isCacheFeatureAvailable").mockImplementation( | ||||
|         () => false | ||||
|     ); | ||||
|  | ||||
|     const logWarningMock = jest.spyOn(actionUtils, "logWarning"); | ||||
|     const restoreCacheMock = jest.spyOn(cache, "restoreCache"); | ||||
|     const setCacheHitOutputMock = jest.spyOn(actionUtils, "setCacheHitOutput"); | ||||
|  | ||||
| @ -67,9 +72,54 @@ test("restore on GHES should no-op", async () => { | ||||
|     expect(restoreCacheMock).toHaveBeenCalledTimes(0); | ||||
|     expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); | ||||
|     expect(setCacheHitOutputMock).toHaveBeenCalledWith(false); | ||||
|     expect(logWarningMock).toHaveBeenCalledWith( | ||||
|         "Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details" | ||||
| }); | ||||
|  | ||||
| test("restore on GHES without AC available should no-op", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true); | ||||
|     jest.spyOn(actionUtils, "isCacheFeatureAvailable").mockImplementation( | ||||
|         () => false | ||||
|     ); | ||||
|  | ||||
|     const restoreCacheMock = jest.spyOn(cache, "restoreCache"); | ||||
|     const setCacheHitOutputMock = jest.spyOn(actionUtils, "setCacheHitOutput"); | ||||
|  | ||||
|     await run(); | ||||
|  | ||||
|     expect(restoreCacheMock).toHaveBeenCalledTimes(0); | ||||
|     expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); | ||||
|     expect(setCacheHitOutputMock).toHaveBeenCalledWith(false); | ||||
| }); | ||||
|  | ||||
| test("restore on GHES with AC available ", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true); | ||||
|     const path = "node_modules"; | ||||
|     const key = "node-test"; | ||||
|     testUtils.setInputs({ | ||||
|         path: path, | ||||
|         key | ||||
|     }); | ||||
|  | ||||
|     const infoMock = jest.spyOn(core, "info"); | ||||
|     const failedMock = jest.spyOn(core, "setFailed"); | ||||
|     const stateMock = jest.spyOn(core, "saveState"); | ||||
|     const setCacheHitOutputMock = jest.spyOn(actionUtils, "setCacheHitOutput"); | ||||
|     const restoreCacheMock = jest | ||||
|         .spyOn(cache, "restoreCache") | ||||
|         .mockImplementationOnce(() => { | ||||
|             return Promise.resolve(key); | ||||
|         }); | ||||
|  | ||||
|     await run(); | ||||
|  | ||||
|     expect(restoreCacheMock).toHaveBeenCalledTimes(1); | ||||
|     expect(restoreCacheMock).toHaveBeenCalledWith([path], key, []); | ||||
|  | ||||
|     expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); | ||||
|     expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); | ||||
|     expect(setCacheHitOutputMock).toHaveBeenCalledWith(true); | ||||
|  | ||||
|     expect(infoMock).toHaveBeenCalledWith(`Cache restored from key: ${key}`); | ||||
|     expect(failedMock).toHaveBeenCalledTimes(0); | ||||
| }); | ||||
|  | ||||
| test("restore with no path should fail", async () => { | ||||
|  | ||||
| @ -54,6 +54,9 @@ beforeEach(() => { | ||||
|     process.env[RefKey] = "refs/heads/feature-branch"; | ||||
|  | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => false); | ||||
|     jest.spyOn(actionUtils, "isCacheFeatureAvailable").mockImplementation( | ||||
|         () => true | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| afterEach(() => { | ||||
| @ -101,18 +104,67 @@ test("save with no primary key in state outputs warning", async () => { | ||||
|     expect(failedMock).toHaveBeenCalledTimes(0); | ||||
| }); | ||||
|  | ||||
| test("save on GHES should no-op", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true); | ||||
| test("save without AC available should no-op", async () => { | ||||
|     jest.spyOn(actionUtils, "isCacheFeatureAvailable").mockImplementation( | ||||
|         () => false | ||||
|     ); | ||||
|  | ||||
|     const logWarningMock = jest.spyOn(actionUtils, "logWarning"); | ||||
|     const saveCacheMock = jest.spyOn(cache, "saveCache"); | ||||
|  | ||||
|     await run(); | ||||
|  | ||||
|     expect(saveCacheMock).toHaveBeenCalledTimes(0); | ||||
|     expect(logWarningMock).toHaveBeenCalledWith( | ||||
|         "Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details" | ||||
| }); | ||||
|  | ||||
| test("save on ghes without AC available should no-op", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true); | ||||
|     jest.spyOn(actionUtils, "isCacheFeatureAvailable").mockImplementation( | ||||
|         () => false | ||||
|     ); | ||||
|  | ||||
|     const saveCacheMock = jest.spyOn(cache, "saveCache"); | ||||
|  | ||||
|     await run(); | ||||
|  | ||||
|     expect(saveCacheMock).toHaveBeenCalledTimes(0); | ||||
| }); | ||||
|  | ||||
| test("save on GHES with AC available", async () => { | ||||
|     jest.spyOn(actionUtils, "isGhes").mockImplementation(() => true); | ||||
|     const failedMock = jest.spyOn(core, "setFailed"); | ||||
|  | ||||
|     const primaryKey = "Linux-node-bb828da54c148048dd17899ba9fda624811cfb43"; | ||||
|     const savedCacheKey = "Linux-node-"; | ||||
|  | ||||
|     jest.spyOn(core, "getState") | ||||
|         // Cache Entry State | ||||
|         .mockImplementationOnce(() => { | ||||
|             return savedCacheKey; | ||||
|         }) | ||||
|         // Cache Key State | ||||
|         .mockImplementationOnce(() => { | ||||
|             return primaryKey; | ||||
|         }); | ||||
|  | ||||
|     const inputPath = "node_modules"; | ||||
|     testUtils.setInput(Inputs.Path, inputPath); | ||||
|     testUtils.setInput(Inputs.UploadChunkSize, "4000000"); | ||||
|  | ||||
|     const cacheId = 4; | ||||
|     const saveCacheMock = jest | ||||
|         .spyOn(cache, "saveCache") | ||||
|         .mockImplementationOnce(() => { | ||||
|             return Promise.resolve(cacheId); | ||||
|         }); | ||||
|  | ||||
|     await run(); | ||||
|  | ||||
|     expect(saveCacheMock).toHaveBeenCalledTimes(1); | ||||
|     expect(saveCacheMock).toHaveBeenCalledWith([inputPath], primaryKey, { | ||||
|         uploadChunkSize: 4000000 | ||||
|     }); | ||||
|  | ||||
|     expect(failedMock).toHaveBeenCalledTimes(0); | ||||
| }); | ||||
|  | ||||
| test("save with exact match returns early", async () => { | ||||
|  | ||||
| @ -18,7 +18,7 @@ outputs: | ||||
|   cache-hit: | ||||
|     description: 'A boolean value to indicate an exact match was found for the primary key' | ||||
| runs: | ||||
|   using: 'node12' | ||||
|   using: 'node16' | ||||
|   main: 'dist/restore/index.js' | ||||
|   post: 'dist/save/index.js' | ||||
|   post-if: 'success()' | ||||
|  | ||||
							
								
								
									
										5044
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5044
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5044
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5044
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										145
									
								
								examples.md
									
									
									
									
									
								
							
							
						
						
									
										145
									
								
								examples.md
									
									
									
									
									
								
							| @ -4,17 +4,22 @@ | ||||
| - [D - DUB](#d---dub) | ||||
|   - [POSIX](#posix) | ||||
|   - [Windows](#windows) | ||||
| - [Elixir - Mix](#elixir---mix) | ||||
| - [Go - Modules](#go---modules) | ||||
| - [Deno](#deno) | ||||
|   - [Linux](#linux) | ||||
|   - [macOS](#macos) | ||||
|   - [Windows](#windows-1) | ||||
| - [Elixir - Mix](#elixir---mix) | ||||
| - [Go - Modules](#go---modules) | ||||
|   - [Linux](#linux-1) | ||||
|   - [macOS](#macos-1) | ||||
|   - [Windows](#windows-2) | ||||
| - [Haskell - Cabal](#haskell---cabal) | ||||
| - [Haskell - Stack](#haskell---stack) | ||||
| - [Java - Gradle](#java---gradle) | ||||
| - [Java - Maven](#java---maven) | ||||
| - [Node - npm](#node---npm) | ||||
|   - [macOS and Ubuntu](#macos-and-ubuntu) | ||||
|   - [Windows](#windows-2) | ||||
|   - [Windows](#windows-3) | ||||
|   - [Using multiple systems and `npm config`](#using-multiple-systems-and-npm-config) | ||||
| - [Node - Lerna](#node---lerna) | ||||
| - [Node - Yarn](#node---yarn) | ||||
| @ -28,8 +33,6 @@ | ||||
|   - [Using pip to get cache location](#using-pip-to-get-cache-location) | ||||
| - [Python - pipenv](#python---pipenv) | ||||
| - [R - renv](#r---renv) | ||||
|   - [Simple example](#simple-example-1) | ||||
|   - [Multiple OS's in a workflow](#multiple-oss-in-a-workflow-1) | ||||
| - [Ruby - Bundler](#ruby---bundler) | ||||
| - [Rust - Cargo](#rust---cargo) | ||||
| - [Scala - SBT](#scala---sbt) | ||||
| @ -42,7 +45,7 @@ | ||||
| Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies): | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~/.nuget/packages | ||||
|     key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} | ||||
| @ -51,10 +54,10 @@ Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/packa | ||||
| ``` | ||||
|  | ||||
| Depending on the environment, huge packages might be pre-installed in the global cache folder. | ||||
| With `actions/cache@v2` you can now exclude unwanted packages with [exclude pattern](https://github.com/actions/toolkit/tree/main/packages/glob#exclude-patterns) | ||||
| With `actions/cache@v3` you can now exclude unwanted packages with [exclude pattern](https://github.com/actions/toolkit/tree/main/packages/glob#exclude-patterns) | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.nuget/packages | ||||
| @ -66,11 +69,12 @@ With `actions/cache@v2` you can now exclude unwanted packages with [exclude patt | ||||
|  | ||||
| Or you could move the cache folder like below. | ||||
| >Note: This workflow does not work for projects that require files to be placed in user profile package folder | ||||
|  | ||||
| ```yaml | ||||
| env: | ||||
|   NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages | ||||
| steps: | ||||
|   - uses: actions/cache@v2 | ||||
|   - uses: actions/cache@v3 | ||||
|     with: | ||||
|       path: ${{ github.workspace }}/.nuget/packages | ||||
|       key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} | ||||
| @ -83,7 +87,7 @@ steps: | ||||
| ### POSIX | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~/.dub | ||||
|     key: ${{ runner.os }}-dub-${{ hashFiles('**/dub.json') }} | ||||
| @ -94,7 +98,7 @@ steps: | ||||
| ### Windows | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~\AppData\Local\dub | ||||
|     key: ${{ runner.os }}-dub-${{ hashFiles('**/dub.json') }} | ||||
| @ -102,10 +106,46 @@ steps: | ||||
|       ${{ runner.os }}-dub- | ||||
| ``` | ||||
|  | ||||
| ## Deno | ||||
|  | ||||
| ### Linux | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.deno | ||||
|       ~/.cache/deno | ||||
|     key: ${{ runner.os }}-deno-${{ hashFiles('**/deps.ts') }} | ||||
| ``` | ||||
|  | ||||
| ### macOS | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.deno | ||||
|       ~/Library/Caches/deno | ||||
|     key: ${{ runner.os }}-deno-${{ hashFiles('**/deps.ts') }} | ||||
| ``` | ||||
|  | ||||
| ### Windows | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~\.deno | ||||
|       %LocalAppData%\deno | ||||
|     key: ${{ runner.os }}-deno-${{ hashFiles('**/deps.ts') }} | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ## Elixir - Mix | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       deps | ||||
| @ -120,7 +160,7 @@ steps: | ||||
| ### Linux | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.cache/go-build | ||||
| @ -133,7 +173,7 @@ steps: | ||||
| ### macOS | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/Library/Caches/go-build | ||||
| @ -146,11 +186,11 @@ steps: | ||||
| ### Windows | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       %LocalAppData%\go-build | ||||
|       ~/go/pkg/mod | ||||
|       ~\AppData\Local\go-build | ||||
|       ~\go\pkg\mod | ||||
|     key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | ||||
|     restore-keys: | | ||||
|       ${{ runner.os }}-go- | ||||
| @ -162,7 +202,7 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba | ||||
|  | ||||
| ```yaml | ||||
| - name: Cache ~/.cabal/packages, ~/.cabal/store and dist-newstyle | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.cabal/packages | ||||
| @ -172,12 +212,31 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba | ||||
|     restore-keys: ${{ runner.os }}-${{ matrix.ghc }}- | ||||
| ``` | ||||
|  | ||||
| ## Haskell - Stack | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v3 | ||||
|   name: Cache ~/.stack | ||||
|   with: | ||||
|     path: ~/.stack | ||||
|     key: ${{ runner.os }}-stack-global-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }} | ||||
|     restore-keys: | | ||||
|       ${{ runner.os }}-stack-global- | ||||
| - uses: actions/cache@v3 | ||||
|   name: Cache .stack-work | ||||
|   with: | ||||
|     path: .stack-work | ||||
|     key: ${{ runner.os }}-stack-work-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | ||||
|     restore-keys: | | ||||
|       ${{ runner.os }}-stack-work- | ||||
| ``` | ||||
|  | ||||
| ## Java - Gradle | ||||
|  | ||||
| >Note: Ensure no Gradle daemons are running anymore when your workflow completes. Creating the cache package might fail due to locks being held by Gradle. Refer to the [Gradle Daemon documentation](https://docs.gradle.org/current/userguide/gradle_daemon.html) on how to disable or stop the Gradle Daemons. | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.gradle/caches | ||||
| @ -191,7 +250,7 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba | ||||
|  | ||||
| ```yaml | ||||
| - name: Cache local Maven repository | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~/.m2/repository | ||||
|     key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | ||||
| @ -210,7 +269,7 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s | ||||
| ### macOS and Ubuntu | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~/.npm | ||||
|     key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | ||||
| @ -225,7 +284,7 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s | ||||
|   id: npm-cache | ||||
|   run: | | ||||
|     echo "::set-output name=dir::$(npm config get cache)" | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ${{ steps.npm-cache.outputs.dir }} | ||||
|     key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | ||||
| @ -240,7 +299,7 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s | ||||
|   id: npm-cache-dir | ||||
|   run: | | ||||
|     echo "::set-output name=dir::$(npm config get cache)" | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true' | ||||
|   with: | ||||
|     path: ${{ steps.npm-cache-dir.outputs.dir }} | ||||
| @ -253,11 +312,9 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s | ||||
|  | ||||
| ```yaml | ||||
| - name: restore lerna | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       node_modules | ||||
|       */*/node_modules | ||||
|     path: **/node_modules | ||||
|     key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} | ||||
| ``` | ||||
|  | ||||
| @ -269,7 +326,7 @@ The yarn cache directory will depend on your operating system and version of `ya | ||||
|   id: yarn-cache-dir-path | ||||
|   run: echo "::set-output name=dir::$(yarn cache dir)" | ||||
|  | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) | ||||
|   with: | ||||
|     path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | ||||
| @ -287,7 +344,7 @@ The yarn 2 cache directory will depend on your config. See https://yarnpkg.com/c | ||||
|   id: yarn-cache-dir-path | ||||
|   run: echo "::set-output name=dir::$(yarn config get cacheFolder)" | ||||
|  | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) | ||||
|   with: | ||||
|     path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | ||||
| @ -302,7 +359,7 @@ Esy allows you to export built dependencies and import pre-built dependencies. | ||||
| ```yaml | ||||
|     - name: Restore Cache | ||||
|       id: restore-cache | ||||
|       uses: actions/cache@v2 | ||||
|       uses: actions/cache@v3 | ||||
|       with: | ||||
|         path: _export | ||||
|         key:  ${{ runner.os }}-esy-${{ hashFiles('esy.lock/index.json') }} | ||||
| @ -331,7 +388,7 @@ Esy allows you to export built dependencies and import pre-built dependencies. | ||||
|   id: composer-cache | ||||
|   run: | | ||||
|     echo "::set-output name=dir::$(composer config cache-files-dir)" | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ${{ steps.composer-cache.outputs.dir }} | ||||
|     key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | ||||
| @ -352,7 +409,7 @@ Locations: | ||||
| ### Simple example | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~/.cache/pip | ||||
|     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | ||||
| @ -365,7 +422,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu. | ||||
| ### Multiple OS's in a workflow | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   if: startsWith(runner.os, 'Linux') | ||||
|   with: | ||||
|     path: ~/.cache/pip | ||||
| @ -373,7 +430,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu. | ||||
|     restore-keys: | | ||||
|       ${{ runner.os }}-pip- | ||||
|  | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   if: startsWith(runner.os, 'macOS') | ||||
|   with: | ||||
|     path: ~/Library/Caches/pip | ||||
| @ -381,7 +438,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu. | ||||
|     restore-keys: | | ||||
|       ${{ runner.os }}-pip- | ||||
|  | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   if: startsWith(runner.os, 'Windows') | ||||
|   with: | ||||
|     path: ~\AppData\Local\pip\Cache | ||||
| @ -407,7 +464,7 @@ jobs: | ||||
|         - os: windows-latest | ||||
|           path: ~\AppData\Local\pip\Cache | ||||
|     steps: | ||||
|     - uses: actions/cache@v2 | ||||
|     - uses: actions/cache@v3 | ||||
|       with: | ||||
|         path: ${{ matrix.path }} | ||||
|         key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | ||||
| @ -425,7 +482,7 @@ jobs: | ||||
|     echo "::set-output name=dir::$(pip cache dir)" | ||||
|  | ||||
| - name: pip cache | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ${{ steps.pip-cache.outputs.dir }} | ||||
|     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | ||||
| @ -443,7 +500,7 @@ jobs: | ||||
|  | ||||
|   ⋮ | ||||
|  | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ~/.local/share/virtualenvs | ||||
|     key: ${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }} | ||||
| @ -470,7 +527,7 @@ For renv, the cache directory will vary by OS. The `RENV_PATHS_ROOT` environment | ||||
|     cat("##[set-output name=r-version;]", R.Version()$version.string, sep = "") | ||||
|   shell: Rscript {0} | ||||
| - name: Restore Renv package cache | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: ${{ env.RENV_PATHS_ROOT }} | ||||
|     key: ${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-${{ inputs.cache-version }}-${{ hashFiles('renv.lock') }} | ||||
| @ -496,7 +553,7 @@ whenever possible: | ||||
| ## Rust - Cargo | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.cargo/bin/ | ||||
| @ -511,7 +568,7 @@ whenever possible: | ||||
|  | ||||
| ```yaml | ||||
| - name: Cache SBT | ||||
|   uses: actions/cache@v2 | ||||
|   uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: | | ||||
|       ~/.ivy2/cache | ||||
| @ -522,7 +579,7 @@ whenever possible: | ||||
| ## Swift, Objective-C - Carthage | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: Carthage | ||||
|     key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }} | ||||
| @ -533,7 +590,7 @@ whenever possible: | ||||
| ## Swift, Objective-C - CocoaPods | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: Pods | ||||
|     key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} | ||||
| @ -544,7 +601,7 @@ whenever possible: | ||||
| ## Swift - Swift Package Manager | ||||
|  | ||||
| ```yaml | ||||
| - uses: actions/cache@v2 | ||||
| - uses: actions/cache@v3 | ||||
|   with: | ||||
|     path: .build | ||||
|     key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }} | ||||
|  | ||||
| @ -17,7 +17,7 @@ const processStdoutWrite = process.stdout.write.bind(process.stdout); | ||||
| process.stdout.write = (str, encoding, cb) => { | ||||
|     // Core library will directly call process.stdout.write for commands | ||||
|     // We don't want :: commands to be executed by the runner during tests | ||||
|     if (!str.match(/^::/)) { | ||||
|     if (!String(str).match(/^::/)) { | ||||
|         return processStdoutWrite(str, encoding, cb); | ||||
|     } | ||||
| }; | ||||
|  | ||||
							
								
								
									
										6722
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6722
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										36
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								package.json
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "cache", | ||||
|   "version": "2.1.7", | ||||
|   "version": "3.0.2", | ||||
|   "private": true, | ||||
|   "description": "Cache dependencies and build outputs", | ||||
|   "main": "dist/restore/index.js", | ||||
| @ -23,29 +23,29 @@ | ||||
|   "author": "GitHub", | ||||
|   "license": "MIT", | ||||
|   "dependencies": { | ||||
|     "@actions/cache": "^1.0.8", | ||||
|     "@actions/cache": "^2.0.2", | ||||
|     "@actions/core": "^1.2.6", | ||||
|     "@actions/exec": "^1.0.1", | ||||
|     "@actions/io": "^1.1.0" | ||||
|     "@actions/exec": "^1.1.1", | ||||
|     "@actions/io": "^1.1.2" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^24.0.13", | ||||
|     "@types/jest": "^27.4.1", | ||||
|     "@types/nock": "^11.1.0", | ||||
|     "@types/node": "^12.20.7", | ||||
|     "@typescript-eslint/eslint-plugin": "^2.7.0", | ||||
|     "@typescript-eslint/parser": "^2.7.0", | ||||
|     "@types/node": "^16.11.26", | ||||
|     "@typescript-eslint/eslint-plugin": "^5.16.0", | ||||
|     "@typescript-eslint/parser": "^5.16.0", | ||||
|     "@zeit/ncc": "^0.20.5", | ||||
|     "eslint": "^6.6.0", | ||||
|     "eslint-config-prettier": "^6.15.0", | ||||
|     "eslint-plugin-import": "^2.22.1", | ||||
|     "eslint-plugin-jest": "^23.20.0", | ||||
|     "eslint-plugin-prettier": "^3.3.1", | ||||
|     "eslint-plugin-simple-import-sort": "^5.0.2", | ||||
|     "jest": "^24.8.0", | ||||
|     "jest-circus": "^24.7.1", | ||||
|     "eslint": "^8.11.0", | ||||
|     "eslint-config-prettier": "^8.5.0", | ||||
|     "eslint-plugin-import": "^2.25.4", | ||||
|     "eslint-plugin-jest": "^26.1.3", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "eslint-plugin-simple-import-sort": "^7.0.0", | ||||
|     "jest": "^27.5.1", | ||||
|     "jest-circus": "^27.5.1", | ||||
|     "nock": "^11.7.0", | ||||
|     "prettier": "^1.19.1", | ||||
|     "ts-jest": "^26.5.4", | ||||
|     "prettier": "^2.6.1", | ||||
|     "ts-jest": "^27.1.4", | ||||
|     "typescript": "^3.9.9" | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -6,10 +6,7 @@ import * as utils from "./utils/actionUtils"; | ||||
|  | ||||
| async function run(): Promise<void> { | ||||
|     try { | ||||
|         if (utils.isGhes()) { | ||||
|             utils.logWarning( | ||||
|                 "Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details" | ||||
|             ); | ||||
|         if (!utils.isCacheFeatureAvailable()) { | ||||
|             utils.setCacheHitOutput(false); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
| @ -11,10 +11,7 @@ process.on("uncaughtException", e => utils.logWarning(e.message)); | ||||
|  | ||||
| async function run(): Promise<void> { | ||||
|     try { | ||||
|         if (utils.isGhes()) { | ||||
|             utils.logWarning( | ||||
|                 "Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details" | ||||
|             ); | ||||
|         if (!utils.isCacheFeatureAvailable()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| import * as cache from "@actions/cache"; | ||||
| import * as core from "@actions/core"; | ||||
|  | ||||
| import { Outputs, RefKey, State } from "../constants"; | ||||
| @ -74,3 +75,20 @@ export function getInputAsInt( | ||||
|     } | ||||
|     return value; | ||||
| } | ||||
|  | ||||
| export function isCacheFeatureAvailable(): boolean { | ||||
|     if (!cache.isFeatureAvailable()) { | ||||
|         if (isGhes()) { | ||||
|             logWarning( | ||||
|                 "Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not." | ||||
|             ); | ||||
|         } else { | ||||
|             logWarning( | ||||
|                 "An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions." | ||||
|             ); | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     return true; | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	