mirror of
https://github.com/actions/toolkit.git
synced 2026-08-07 00:00:18 +02:00
* feat(cache): surface cache read-denied as a distinct restore warning Mirror the existing cache write-denied handling on the restore path. When the receiver refuses a download URL because the run's token has no readable cache scopes, it returns a twirp PermissionDenied (HTTP 403). The twirp client wraps that 403 in a generic Error, so the stable 'cache read denied:' prefix is embedded in the message rather than at the start. - Add CACHE_READ_DENIED_PREFIX and CacheReadDeniedError - Dispatch on the prefix in the restoreCacheV2 catch block (V2 only), log a policy-specific warning, and report a cache miss so the run continues - Add a test mirroring the write-denied coverage * chore(cache): trim comments, bump to 6.2.0, add RELEASES entry * refactor(cache): dispatch read-denied by error name to mirror write path Re-throw CacheReadDeniedError from an inner try/catch around GetCacheEntryDownloadURL and dispatch on typedError.name in the outer catch, matching how saveCacheV2 handles CacheWriteDeniedError. * feat(cache): handle read-denied on the v1 restore path Extend the read-denied handling to Cache Service v1 so GHES (which forces v1 via _apis/artifactcache) is covered when read-scope enforcement ships there. - Surface the receiver's error body message from getCacheEntry instead of a generic status-code error, so the cache read denied: prefix reaches callers - Re-throw CacheReadDeniedError from restoreCacheV1 and dispatch on it in the outer catch, mirroring restoreCacheV2 and the write-denied v1 handling - Add a v1 read-denied test * refactor(cache): only surface receiver body for read-denied on v1 * test(cache): assert getCacheEntry only surfaces body for read-denied * test(cache): cover non-read-denied getCacheEntry passthrough on v1 * refactor(cache): share read-denied prefix via constants to avoid drift * feat(cache): skip restore/save per ACTIONS_CACHE_MODE * test(cache): expand ACTIONS_CACHE_MODE skip coverage across v1/v2 and unknown modes * fix copilot pr feedback Co-authored-by: Copilot Autofix powered by AI <[email protected]> * docs(cache): remove internal reference from cache-mode comment * test(cache): merge redundant cache-mode skip tests and simplify read-denied handling Address PR review feedback: - Merge the duplicate restore/save skip test.each blocks into single blocks parametrized over ACTIONS_CACHE_SERVICE_V2. - Drop the redundant CacheReadDeniedError catch arms; the typed error is not an HttpClientError so it already falls through to a non-fatal warning. - Clarify why read-denied classification happens both in getCacheEntry and cache.ts (dependency-free internal module cannot import the typed error). * refactor(cache): drop redundant CacheWriteDeniedError catch arms Mirror the read-denied simplification on the save path. CacheWriteDeniedError is not an HttpClientError and its name does not match the ReserveCacheError arm, so it falls through to the same non-fatal warning. Logging behavior is unchanged (warns, never fails the run) and the exported type is still thrown internally for consumers and tests. Also refresh stale doc wording. * test(cache): collapse redundant restore getCacheEntry-failure tests The two restoreCache tests exercised the identical warning + cache-miss path now that read-denied is no longer reclassified in the catch, so merge them into one. The read-denied prefix detection that actually branches on the message is covered by getCacheEntry tests in cacheHttpClient.test.ts. --------- Co-authored-by: Copilot Autofix powered by AI <[email protected]>
67 lines
1.6 KiB
JSON
67 lines
1.6 KiB
JSON
{
|
|
"name": "@actions/cache",
|
|
"version": "6.2.0",
|
|
"description": "Actions cache lib",
|
|
"keywords": [
|
|
"github",
|
|
"actions",
|
|
"cache"
|
|
],
|
|
"homepage": "https://github.com/actions/toolkit/tree/main/packages/cache",
|
|
"license": "MIT",
|
|
"type": "module",
|
|
"main": "lib/cache.js",
|
|
"types": "lib/cache.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"types": "./lib/cache.d.ts",
|
|
"import": "./lib/cache.js"
|
|
}
|
|
},
|
|
"directories": {
|
|
"lib": "lib",
|
|
"test": "__tests__"
|
|
},
|
|
"files": [
|
|
"lib",
|
|
"!.DS_Store"
|
|
],
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/actions/toolkit.git",
|
|
"directory": "packages/cache"
|
|
},
|
|
"scripts": {
|
|
"audit-moderate": "npm install && npm audit --json --audit-level=moderate > audit.json",
|
|
"test": "echo \"Error: run tests from root\" && exit 1",
|
|
"tsc": "tsc && cp src/internal/shared/package-version.cjs lib/internal/shared/"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/actions/toolkit/issues"
|
|
},
|
|
"dependencies": {
|
|
"@actions/core": "^3.0.1",
|
|
"@actions/exec": "^3.0.0",
|
|
"@actions/glob": "^0.6.1",
|
|
"@actions/http-client": "^4.0.1",
|
|
"@actions/io": "^3.0.2",
|
|
"@azure/core-rest-pipeline": "^1.23.0",
|
|
"@azure/storage-blob": "^12.31.0",
|
|
"@protobuf-ts/runtime-rpc": "^2.11.1",
|
|
"semver": "^7.7.4"
|
|
},
|
|
"devDependencies": {
|
|
"@protobuf-ts/plugin": "^2.11.1",
|
|
"@types/node": "^25.6.0",
|
|
"@types/semver": "^7.7.1",
|
|
"typescript": "^5.9.3"
|
|
},
|
|
"overrides": {
|
|
"uri-js": "npm:uri-js-replace@^1.0.1",
|
|
"node-fetch": "^3.3.2"
|
|
}
|
|
}
|