Compare commits

...

52 Commits

Author SHA1 Message Date
9b0c1fce7a Merge pull request #956 from actions/pdotl-version-bump
Update cache to use @actions/core@^1.10.0
2022-10-13 16:42:28 +05:30
18103f63fe Fix licensed status error 2022-10-13 11:03:20 +00:00
3e383cd9c3 Update RELEASES 2022-10-13 10:36:33 +00:00
43428ea056 toolkit versioon update and version bump for cache 2022-10-13 10:34:22 +00:00
1c73980b09 3.0.11 2022-10-13 09:02:55 +00:00
a3f5edc237 Merge pull request #950 from rentziass/rentziass/update-actions-core
Update @actions/core to 1.10.0
2022-10-06 19:47:17 +05:30
831ee695a5 Update licenses 2022-10-06 10:44:39 +01:00
b9c8bfe442 Update @actions/core to 1.10.0 2022-10-05 17:50:52 +01:00
0f20846208 Merge pull request #946 from actions/Phantsure-patch-2
Call out cache not saved on hit
2022-10-04 15:14:09 +05:30
862fc14188 Update README.md 2022-10-04 15:10:37 +05:30
f77a0d297b Merge pull request #945 from actions/vsvipul/new-release
Create new release 3.0.10
2022-10-04 12:49:26 +05:30
50a4a3a126 Create new release 3.0.10 2022-10-04 06:47:17 +00:00
56461b9eb0 Merge pull request #931 from ELHoussineT/patch-1
docs: Indicate that `restore-keys` uses prefix in README
2022-10-03 14:33:36 +05:30
f85d12c3b2 Merge branch 'main' into patch-1 2022-10-03 10:16:35 +02:00
98044e486f Update README.md 2022-10-03 10:15:54 +02:00
edc49897ec Merge pull request #942 from actions/vsvipul/fix-sort
Remove sort logic from inputs
2022-10-03 13:29:55 +05:30
68d96986b5 Remove sort logic from inputs 2022-10-03 06:39:10 +00:00
ac8075791e Actions/cache release 3.0.9 (#930)
* Release

* Update RELEASES.md

Co-authored-by: Lovepreet Singh <pdotl@github.com>
2022-09-30 10:47:16 +05:30
0ff0597934 Update examples.md (#920) 2022-09-29 10:27:49 +05:30
12681847c6 Update README.md (#936) 2022-09-23 17:15:41 +05:30
3238536a48 Update README.md 2022-09-22 10:50:41 +02:00
1a78ace131 Updated the GHES warning message (#925)
* changed the error message

* format

* review comment
2022-09-20 10:47:27 +05:30
1bc650b06c Merge pull request #922 from actions/vsvipul/add-anurag
Add anuragc617 to assignees
2022-09-14 15:00:13 +05:30
92e01f4797 Add anuragc617 to assignees 2022-09-14 09:27:02 +00:00
b195c997a4 Merge pull request #912 from actions/pdotl/readme-update-1
Update README to include zstd workaround for windows.
2022-08-30 14:38:09 +05:30
9f98a2f01c Merge branch 'main' into pdotl/readme-update-1 2022-08-30 14:02:27 +05:30
471fb0c87e Move workarounds to a different file 2022-08-30 08:24:10 +00:00
a213d1e898 Merge pull request #913 from actions/vsvipul-patch-2
Add a note about path expansion on Windows.
2022-08-29 17:21:30 +05:30
0c180092a2 Add a note about path expansion on Windows. 2022-08-29 17:16:27 +05:30
c38f55d874 Merge branch 'main' into pdotl/readme-update-1 2022-08-29 11:10:51 +05:30
2865f2c28c Merge pull request #911 from actions/vsvipul-patch-1
Remove .md files skip condition from test workflow
2022-08-29 11:09:50 +05:30
f52a12d355 Merge remote-tracking branch 'refs/remotes/origin/pdotl/readme-update-1' into pdotl/readme-update-1 2022-08-26 09:01:04 +00:00
a057257949 Add cross-os caching to the zstd workaround section. 2022-08-26 09:00:35 +00:00
d1124f7857 Merge branch 'main' into pdotl/readme-update-1 2022-08-25 18:54:53 +05:30
7b5e3aaf23 Move remaining section of Cache segment restore timeout 2022-08-25 13:18:15 +00:00
eb8b610ee6 Add zstd workaround to README. Add yaml formatting to code blocks. Move Cache segment restore to Known Practices section. 2022-08-25 13:14:23 +00:00
27c0af5532 Remove .md files skip condition from test workflow 2022-08-25 16:52:00 +05:30
7e7820edca Move Cache segment restore timeout to Known practices and workarounds 2022-08-25 05:52:10 +00:00
6c9470d12d Merge pull request #910 from actions/vsvipul/add-reviewers
Add pallavx and pdotl to reviewers
2022-08-25 10:04:28 +05:30
a59a2347a7 Add pallavx and pdotl to reviewers 2022-08-25 03:55:46 +00:00
d785f8b8a2 Merge pull request #908 from actions/vsvipul/fix-dep
Update @actions/core to 1.9.1
2022-08-24 17:10:07 +05:30
81423d07fe Update licenses 2022-08-24 11:32:31 +00:00
c1dbd4593f Update @actions/core to 1.9.1 2022-08-24 11:26:37 +00:00
5f975d03e6 Merge pull request #896 from actions/bishal-pdMSFT-patch-1
Add readme section for good practices
2022-08-23 16:33:03 +05:30
8a9a57869f Update README.md 2022-08-23 15:20:27 +05:30
fb1d96e3ff Update README.md 2022-08-23 13:19:05 +05:30
2048ecfa86 Merge pull request #903 from actions/vsvipul/sort-inputs
Sort inputs and remove whitespaces after exclamation
2022-08-22 21:19:36 +05:30
8954b07458 Removed unnecessary backslash in regex 2022-08-22 13:05:20 +00:00
0ae6818675 Formatted files with prettier 2022-08-22 12:57:35 +00:00
f316f94f31 Generate build and fix format 2022-08-22 12:45:18 +00:00
204fa1ab69 Sort inputs and remove whitespaces after exclamation at the beginning of lines 2022-08-22 12:42:01 +00:00
23d218be27 Add section for good practices 2022-08-14 14:35:33 +05:30
16 changed files with 4010 additions and 3842 deletions

View File

@ -6,6 +6,9 @@ addAssignees: false
# A list of reviewers to be added to pull requests (GitHub user name)
reviewers:
- anuragc617
- pallavx
- pdotl
- phantsure
- kotewar
- aparna-ravindra

View File

@ -11,5 +11,5 @@ jobs:
- name: 'Auto-assign issue'
uses: pozil/auto-assign-issue@v1.4.0
with:
assignees: phantsure,kotewar,tiwarishub,aparna-ravindra,vsvipul,bishal-pdmsft
assignees: anuragc617,pallavx,pdotl,phantsure,kotewar,tiwarishub,aparna-ravindra,vsvipul,bishal-pdmsft
numOfAssignee: 1

View File

@ -5,14 +5,10 @@ on:
branches:
- main
- releases/**
paths-ignore:
- '**.md'
push:
branches:
- main
- releases/**
paths-ignore:
- '**.md'
jobs:
# Build and unit test

View File

@ -1,6 +1,6 @@
---
name: "@actions/cache"
version: 3.0.4
version: 3.0.5
type: npm
summary:
homepage:

View File

@ -1,6 +1,6 @@
---
name: "@actions/core"
version: 1.7.0
version: 1.10.0
type: npm
summary: Actions core lib
homepage: https://github.com/actions/toolkit/tree/main/packages/core

View File

@ -1,9 +1,9 @@
---
name: "@actions/http-client"
version: 1.0.11
version: 2.0.1
type: npm
summary: Actions Http Client
homepage: https://github.com/actions/http-client#readme
homepage: https://github.com/actions/toolkit/tree/main/packages/http-client
license: mit
licenses:
- sources: LICENSE

View File

@ -6,7 +6,7 @@ This action allows caching dependencies and build outputs to improve workflow ex
## 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).
See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows).
## What's New
### v3
@ -34,7 +34,7 @@ If you are using this inside a container, a POSIX-compliant `tar` needs to be in
* `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 stale cache if no cache hit occurred for key. Note
* `restore-keys` - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. Note
`cache-hit` returns false in this case.
#### Environment Variables
@ -80,7 +80,7 @@ jobs:
run: /primes.sh -d prime-numbers
```
> Note: You must use the `cache` action in your workflow before you need to use the files that might be restored from the cache. If the provided `key` doesn't match an existing cache, a new cache is automatically created if the job completes successfully.
> Note: You must use the `cache` action in your workflow before you need to use the files that might be restored from the cache. If the provided `key` matches an existing cache, a new cache is not created and if the provided `key` doesn't match an existing cache, a new cache is automatically created provided the job completes successfully.
## Implementation Examples
@ -223,11 +223,17 @@ jobs:
if: steps.cache-primes.outputs.cache-hit != 'true'
run: ./generate-primes -d prime-numbers
```
## Cache segment restore timeout
A cache gets downloaded in multiple segments of fixed sizes (`1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner). Sometimes, a segment download gets stuck which causes the workflow job to be stuck forever and fail. Version `v3.0.8` of `actions/cache` introduces a segment download timeout. The segment download timeout will allow the segment download to get aborted and hence allow the job to proceed with a cache miss.
## Known practices and workarounds
Following are some of the known practices/workarounds which community has used to fulfill specific requirements. You may choose to use them if suits your use case. Note these are not necessarily the only or the recommended solution.
Default value of this timeout is 60 minutes and can be customized by specifying an [environment variable](https://docs.github.com/en/actions/learn-github-actions/environment-variables) named `SEGMENT_DOWNLOAD_TIMEOUT_MINS` with timeout value in minutes.
- [Cache segment restore timeout](./workarounds.md#cache-segment-restore-timeout)
- [Update a cache](./workarounds.md#update-a-cache)
- [Use cache across feature branches](./workarounds.md#use-cache-across-feature-branches)
- [Improving cache restore performance on Windows/Using cross-os caching](./workarounds.md#improving-cache-restore-performance-on-windows-using-cross-os-caching)
#### Windows environment variables
Please note that Windows environment variables (like `%LocalAppData%`) will NOT be expanded by this action. Instead, prefer using `~` in your paths which will expand to HOME directory. For example, instead of `%LocalAppData%`, use `~\AppData\Local`. For a list of supported default environment variables, see [this](https://docs.github.com/en/actions/learn-github-actions/environment-variables) page.
## 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.

View File

@ -28,4 +28,15 @@
### 3.0.8
- Fix zstd not working for windows on gnu tar in issues [#888](https://github.com/actions/cache/issues/888) and [#891](https://github.com/actions/cache/issues/891).
- Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MIN`. Default is 60 minutes.
- Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MIN`. Default is 60 minutes.
### 3.0.9
- Enhanced the warning message for cache unavailablity in case of GHES.
### 3.0.10
- Fix a bug with sorting inputs.
- Update definition for restore-keys in README.md
### 3.0.11
- Update toolkit version to 3.0.5 to include `@actions/core@^1.10.0`
- Update `@actions/cache` to use updated `saveState` and `setOutput` functions from `@actions/core@^1.10.0`

View File

@ -215,6 +215,22 @@ test("getInputAsArray handles empty lines correctly", () => {
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
});
test("getInputAsArray removes spaces after ! at the beginning", () => {
testUtils.setInput(
"foo",
"! bar\n! baz\n! qux\n!quux\ncorge\ngrault! garply\n!\r\t waldo"
);
expect(actionUtils.getInputAsArray("foo")).toEqual([
"!bar",
"!baz",
"!qux",
"!quux",
"corge",
"grault! garply",
"!waldo"
]);
});
test("getInputAsInt returns undefined if input not set", () => {
expect(actionUtils.getInputAsInt("undefined")).toBeUndefined();
});
@ -244,8 +260,8 @@ test("isCacheFeatureAvailable for ac enabled", () => {
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 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.
Otherwise please upgrade to GHES version >= 3.5 and If you are also using Github Connect, please unretire the actions/cache namespace before upgrade (see https://docs.github.com/en/enterprise-server@3.5/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect#automatic-retirement-of-namespaces-for-actions-accessed-on-githubcom)`;
const infoMock = jest.spyOn(core, "info");
try {

3821
dist/restore/index.js vendored

File diff suppressed because it is too large Load Diff

3821
dist/save/index.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -332,7 +332,7 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s
- name: restore lerna
uses: actions/cache@v3
with:
path: **/node_modules
path: '**/node_modules'
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
```

89
package-lock.json generated
View File

@ -1,16 +1,16 @@
{
"name": "cache",
"version": "3.0.8",
"version": "3.0.11",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "cache",
"version": "3.0.8",
"version": "3.0.11",
"license": "MIT",
"dependencies": {
"@actions/cache": "^3.0.4",
"@actions/core": "^1.7.0",
"@actions/cache": "^3.0.5",
"@actions/core": "^1.10.0",
"@actions/exec": "^1.1.1",
"@actions/io": "^1.1.2"
},
@ -36,11 +36,11 @@
}
},
"node_modules/@actions/cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.4.tgz",
"integrity": "sha512-9RwVL8/ISJoYWFNH1wR/C26E+M3HDkGPWmbFJMMCKwTkjbNZJreMT4XaR/EB1bheIvN4PREQxEQQVJ18IPnf/Q==",
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.5.tgz",
"integrity": "sha512-0WpPmwnRPkn5k5ASmjoX8bY8NrZEPTwN+64nGYJmR/bHjEVgC8svdf5K956wi67tNJBGJky2+UfvNbUOtHmMHg==",
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/core": "^1.10.0",
"@actions/exec": "^1.0.1",
"@actions/glob": "^0.1.0",
"@actions/http-client": "^2.0.1",
@ -51,20 +51,21 @@
"uuid": "^3.3.3"
}
},
"node_modules/@actions/cache/node_modules/@actions/http-client": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"node_modules/@actions/core": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz",
"integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
"dependencies": {
"tunnel": "^0.0.6"
"@actions/http-client": "^2.0.1",
"uuid": "^8.3.2"
}
},
"node_modules/@actions/core": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.7.0.tgz",
"integrity": "sha512-7fPSS7yKOhTpgLMbw7lBLc1QJWvJBBAgyTX2PEhagWcKK8t0H8AKCoPMfnrHqIm5cRYH4QFPqD1/ruhuUE7YcQ==",
"dependencies": {
"@actions/http-client": "^1.0.11"
"node_modules/@actions/core/node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/@actions/exec": {
@ -85,11 +86,11 @@
}
},
"node_modules/@actions/http-client": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"dependencies": {
"tunnel": "0.0.6"
"tunnel": "^0.0.6"
}
},
"node_modules/@actions/io": {
@ -9533,11 +9534,11 @@
},
"dependencies": {
"@actions/cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.4.tgz",
"integrity": "sha512-9RwVL8/ISJoYWFNH1wR/C26E+M3HDkGPWmbFJMMCKwTkjbNZJreMT4XaR/EB1bheIvN4PREQxEQQVJ18IPnf/Q==",
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.5.tgz",
"integrity": "sha512-0WpPmwnRPkn5k5ASmjoX8bY8NrZEPTwN+64nGYJmR/bHjEVgC8svdf5K956wi67tNJBGJky2+UfvNbUOtHmMHg==",
"requires": {
"@actions/core": "^1.2.6",
"@actions/core": "^1.10.0",
"@actions/exec": "^1.0.1",
"@actions/glob": "^0.1.0",
"@actions/http-client": "^2.0.1",
@ -9546,24 +9547,22 @@
"@azure/storage-blob": "^12.8.0",
"semver": "^6.1.0",
"uuid": "^3.3.3"
},
"dependencies": {
"@actions/http-client": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"requires": {
"tunnel": "^0.0.6"
}
}
}
},
"@actions/core": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.7.0.tgz",
"integrity": "sha512-7fPSS7yKOhTpgLMbw7lBLc1QJWvJBBAgyTX2PEhagWcKK8t0H8AKCoPMfnrHqIm5cRYH4QFPqD1/ruhuUE7YcQ==",
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz",
"integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
"requires": {
"@actions/http-client": "^1.0.11"
"@actions/http-client": "^2.0.1",
"uuid": "^8.3.2"
},
"dependencies": {
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
"@actions/exec": {
@ -9584,11 +9583,11 @@
}
},
"@actions/http-client": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"requires": {
"tunnel": "0.0.6"
"tunnel": "^0.0.6"
}
},
"@actions/io": {

View File

@ -1,6 +1,6 @@
{
"name": "cache",
"version": "3.0.8",
"version": "3.0.11",
"private": true,
"description": "Cache dependencies and build outputs",
"main": "dist/restore/index.js",
@ -23,8 +23,8 @@
"author": "GitHub",
"license": "MIT",
"dependencies": {
"@actions/cache": "^3.0.4",
"@actions/core": "^1.7.0",
"@actions/cache": "^3.0.5",
"@actions/core": "^1.10.0",
"@actions/exec": "^1.1.1",
"@actions/io": "^1.1.2"
},
@ -48,4 +48,4 @@
"ts-jest": "^28.0.2",
"typescript": "^4.6.4"
}
}
}

View File

@ -61,7 +61,7 @@ export function getInputAsArray(
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.map(s => s.replace(/^!\s+/, "!").trim())
.filter(x => x !== "");
}
@ -80,7 +80,8 @@ 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."
`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.
Otherwise please upgrade to GHES version >= 3.5 and If you are also using Github Connect, please unretire the actions/cache namespace before upgrade (see https://docs.github.com/en/enterprise-server@3.5/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect#automatic-retirement-of-namespaces-for-actions-accessed-on-githubcom)`
);
} else {
logWarning(

38
workarounds.md Normal file
View File

@ -0,0 +1,38 @@
#### Cache segment restore timeout
A cache gets downloaded in multiple segments of fixed sizes (`1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner). Sometimes, a segment download gets stuck which causes the workflow job to be stuck forever and fail. Version `v3.0.8` of `actions/cache` introduces a segment download timeout. The segment download timeout will allow the segment download to get aborted and hence allow the job to proceed with a cache miss.
Default value of this timeout is 60 minutes and can be customized by specifying an [environment variable](https://docs.github.com/en/actions/learn-github-actions/environment-variables) named `SEGMENT_DOWNLOAD_TIMEOUT_MINS` with timeout value in minutes.
#### Update a cache
A cache today is immutable and cannot be updated. But some use cases require the cache to be saved even though there was a "hit" during restore. To do so, use a `key` which is unique for every run and use `restore-keys` to restore the nearest cache. For example:
```yaml
- name: update cache on every commit
uses: actions/cache@v3
with:
path: prime-numbers
key: primes-${{ runner.os }}-${{ github.run_id }} # Can use time based key as well
restore-keys: |
primes-${{ runner.os }}
```
Please note that this will create a new cache on every run and hence will consume the cache [quota](#cache-limits).
#### Use cache across feature branches
Reusing cache across feature branches is not allowed today to provide cache [isolation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#restrictions-for-accessing-a-cache). However if both feature branches are from the default branch, a good way to achieve this is to ensure that the default branch has a cache. This cache will then be consumable by both feature branches.
#### Improving cache restore performance on Windows/Using cross-os caching
Currently, cache restore is slow on Windows due to tar being inherently slow and the compression algorithm `gzip` in use. `zstd` is the default algorithm in use on linux and macos. It was disabled on Windows due to issues with bsd tar(libarchive), the tar implementation in use on Windows.
To improve cache restore performance, we can re-enable `zstd` as the compression algorithm using the following workaround. Add the following step to your workflow before the cache step:
```yaml
- if: ${{ runner.os == 'Windows' }}
name: Use GNU tar
shell: cmd
run: |
echo "Adding GNU tar to PATH"
echo C:\Program Files\Git\usr\bin>>"%GITHUB_PATH%"
```
The `cache` action will use GNU tar instead of bsd tar on Windows. This should work on all Github Hosted runners as it is. For self-hosted runners, please ensure you have GNU tar and `zstd` installed.
The above workaround is also needed if you wish to use cross-os caching since difference of compression algorithms will result in different cache versions for the same cache key. So the above workaround will ensure `zstd` is used for caching on all platforms thus resulting in the same cache version for the same cache key.