From dda4788290998366da86b6a4f497909644397bb2 Mon Sep 17 00:00:00 2001 From: aparnajyothi-y <147696841+aparnajyothi-y@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:14:57 +0530 Subject: [PATCH 1/6] Add example for restore-only cache in documentation (#1419) * Update versions.yml * Update versions.yml * doc update * update * update * doc update --- docs/advanced-usage.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index f2a8a2f3..d238f4a8 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -300,6 +300,35 @@ steps: - run: npm test ``` +**Restore-Only Cache** + +```yaml +## In some workflows, you may want to restore a cache without saving it. This can help reduce cache writes and storage usage in workflows that only need to read from cache +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + # Restore Node.js modules cache (restore-only) + - name: Restore Node modules cache + uses: actions/cache@v4 + id: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + # Setup Node.js + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24' + # Install dependencies + - run: npm install +``` + +> For more details related to cache scenarios, please refer [Node – npm](https://github.com/actions/cache/blob/main/examples.md#node---npm). + ## Multiple Operating Systems and Architectures ```yaml From 633bb92bc0aabcae06e8ea93b85aecddd374c402 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 14:33:59 -0600 Subject: [PATCH 2/6] Bump @actions/cache from 4.0.3 to 4.1.0 (#1384) * Bump @actions/cache from 4.0.3 to 4.1.0 Bumps [@actions/cache](https://github.com/actions/toolkit/tree/HEAD/packages/cache) from 4.0.3 to 4.1.0. - [Changelog](https://github.com/actions/toolkit/blob/main/packages/cache/RELEASES.md) - [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/cache) --- updated-dependencies: - dependency-name: "@actions/cache" dependency-version: 4.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * check failure fix --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: gowridurgad --- .licenses/npm/@actions/cache.dep.yml | Bin 1306 -> 1306 bytes .../npm/@protobuf-ts/plugin-framework.dep.yml | Bin 10970 -> 0 bytes .licenses/npm/@protobuf-ts/plugin.dep.yml | Bin 11026 -> 0 bytes .licenses/npm/@protobuf-ts/protoc.dep.yml | Bin 12042 -> 0 bytes .../npm/@protobuf-ts/runtime-rpc.dep.yml | Bin 11007 -> 11008 bytes .licenses/npm/@protobuf-ts/runtime.dep.yml | Bin 10996 -> 10997 bytes .licenses/npm/typescript.dep.yml | Bin 19832 -> 0 bytes dist/cache-save/index.js | 127 ++++++++++++++---- dist/setup/index.js | 127 ++++++++++++++---- package-lock.json | 86 ++---------- package.json | 2 +- 11 files changed, 215 insertions(+), 127 deletions(-) delete mode 100644 .licenses/npm/@protobuf-ts/plugin-framework.dep.yml delete mode 100644 .licenses/npm/@protobuf-ts/plugin.dep.yml delete mode 100644 .licenses/npm/@protobuf-ts/protoc.dep.yml delete mode 100644 .licenses/npm/typescript.dep.yml diff --git a/.licenses/npm/@actions/cache.dep.yml b/.licenses/npm/@actions/cache.dep.yml index f70b140d27a62e7e1bd9b1f2653af721d266e5d7..2cc92352816ea5bfcdf3f3c7d0f30489dc06cb3e 100644 GIT binary patch delta 14 VcmbQmHH&M48ndCE!A8xGEC3)d1YiIF delta 14 VcmbQmHH&M48nc0(@kY&$EC3)l1Y!UH diff --git a/.licenses/npm/@protobuf-ts/plugin-framework.dep.yml b/.licenses/npm/@protobuf-ts/plugin-framework.dep.yml deleted file mode 100644 index cbb1501e0b2c33c50cb7d7fd1c636d7f85c6e03b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10970 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 diff --git a/.licenses/npm/@protobuf-ts/protoc.dep.yml b/.licenses/npm/@protobuf-ts/protoc.dep.yml deleted file mode 100644 index dddaf18aa7b2c7478846064a608ecd13a6d4c485..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12042 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 diff --git a/.licenses/npm/@protobuf-ts/runtime-rpc.dep.yml b/.licenses/npm/@protobuf-ts/runtime-rpc.dep.yml index 3e52954e84eb3c14ea223ed1c419e63dab1afbfd..79644b5d703ed100287cc788187367d38b1b3dd8 100644 GIT binary patch delta 15 Wcmew#+7LFufW^>I&v2vh87%-XX$6V^ delta 14 VcmZn&`yV>NfZ0;dbfd``EdVP$1!VvL diff --git a/.licenses/npm/@protobuf-ts/runtime.dep.yml b/.licenses/npm/@protobuf-ts/runtime.dep.yml index 66dbe2b111192492ec413ea2bfa49b385a5001c1..7a210232df09120472c5d1251411bb2b902a0d66 100644 GIT binary patch delta 15 Wcmewo`ZaWd4vV3op5aFQqgntpX9eT{ delta 14 Vcmeww`XzLN4zs16=|+R2S^zNA1-}3Q diff --git a/.licenses/npm/typescript.dep.yml b/.licenses/npm/typescript.dep.yml deleted file mode 100644 index 01cccafdea3f3731926c2bb2aa1b219e990c6fcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19832 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%0DX$eh znBYhumt96d@`z(nNx?`bt{{by^a2+Rf2Bcn%?U>jG7>3gTwoy$#mGb-TpKQJJPXtT zE;55(W73tO_nBOSneUD`50AWfDX6YkJuNGTeC7zuPs8}u?jGZ@VyWSIv!oZ2CYO9+ zA)DQQj_nl=H|70?e+DMZ+2^kHEip2_!bht?TQNM|R4qP< zjVggqaB!fWp- zS}IG#c;KE()C=yyp~w5KK6nq>(<@UaET;MzE`Obnzyg_k}_=)r0a z7SuUu4D7Y;@aQLr>En{v5GQ2pnXUMNKym-m1D)P5?i~kRJ CgP&*s diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js index 00e47927..1105527b 100644 --- a/dist/cache-save/index.js +++ b/dist/cache-save/index.js @@ -39,7 +39,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.saveCache = exports.restoreCache = exports.isFeatureAvailable = exports.ReserveCacheError = exports.ValidationError = void 0; +exports.saveCache = exports.restoreCache = exports.isFeatureAvailable = exports.FinalizeCacheError = exports.ReserveCacheError = exports.ValidationError = void 0; const core = __importStar(__nccwpck_require__(7484)); const path = __importStar(__nccwpck_require__(6928)); const utils = __importStar(__nccwpck_require__(680)); @@ -47,7 +47,7 @@ const cacheHttpClient = __importStar(__nccwpck_require__(5552)); const cacheTwirpClient = __importStar(__nccwpck_require__(6819)); const config_1 = __nccwpck_require__(7606); const tar_1 = __nccwpck_require__(5321); -const constants_1 = __nccwpck_require__(8287); +const http_client_1 = __nccwpck_require__(4844); class ValidationError extends Error { constructor(message) { super(message); @@ -64,6 +64,14 @@ class ReserveCacheError extends Error { } } exports.ReserveCacheError = ReserveCacheError; +class FinalizeCacheError extends Error { + constructor(message) { + super(message); + this.name = 'FinalizeCacheError'; + Object.setPrototypeOf(this, FinalizeCacheError.prototype); + } +} +exports.FinalizeCacheError = FinalizeCacheError; function checkPaths(paths) { if (!paths || paths.length === 0) { throw new ValidationError(`Path Validation Error: At least one directory or file path is required`); @@ -84,7 +92,17 @@ function checkKey(key) { * @returns boolean return true if Actions cache service feature is available, otherwise false */ function isFeatureAvailable() { - return !!process.env['ACTIONS_CACHE_URL']; + const cacheServiceVersion = (0, config_1.getCacheServiceVersion)(); + // Check availability based on cache service version + switch (cacheServiceVersion) { + case 'v2': + // For v2, we need ACTIONS_RESULTS_URL + return !!process.env['ACTIONS_RESULTS_URL']; + case 'v1': + default: + // For v1, we only need ACTIONS_CACHE_URL + return !!process.env['ACTIONS_CACHE_URL']; + } } exports.isFeatureAvailable = isFeatureAvailable; /** @@ -169,8 +187,16 @@ function restoreCacheV1(paths, primaryKey, restoreKeys, options, enableCrossOsAr throw error; } else { - // Supress all non-validation cache related errors because caching should be optional - core.warning(`Failed to restore: ${error.message}`); + // warn on cache restore failure and continue build + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to restore: ${error.message}`); + } + else { + core.warning(`Failed to restore: ${error.message}`); + } } } finally { @@ -223,7 +249,13 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr core.debug(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`); return undefined; } - core.info(`Cache hit for: ${request.key}`); + const isRestoreKeyMatch = request.key !== response.matchedKey; + if (isRestoreKeyMatch) { + core.info(`Cache hit for restore-key: ${response.matchedKey}`); + } + else { + core.info(`Cache hit for: ${response.matchedKey}`); + } if (options === null || options === void 0 ? void 0 : options.lookupOnly) { core.info('Lookup only - skipping download'); return response.matchedKey; @@ -248,7 +280,15 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr } else { // Supress all non-validation cache related errors because caching should be optional - core.warning(`Failed to restore: ${error.message}`); + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to restore: ${error.message}`); + } + else { + core.warning(`Failed to restore: ${error.message}`); + } } } finally { @@ -351,7 +391,15 @@ function saveCacheV1(paths, key, options, enableCrossOsArchive = false) { core.info(`Failed to save: ${typedError.message}`); } else { - core.warning(`Failed to save: ${typedError.message}`); + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to save: ${typedError.message}`); + } + else { + core.warning(`Failed to save: ${typedError.message}`); + } } } finally { @@ -400,10 +448,6 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { } const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath); core.debug(`File Size: ${archiveFileSize}`); - // For GHES, this check will take place in ReserveCache API with enterprise file size limit - if (archiveFileSize > constants_1.CacheFileSizeLimit && !(0, config_1.isGhes)()) { - throw new Error(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 10GB limit, not saving cache.`); - } // Set the archive size in the options, will be used to display the upload progress options.archiveSizeBytes = archiveFileSize; core.debug('Reserving Cache'); @@ -416,7 +460,10 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { try { const response = yield twirpClient.CreateCacheEntry(request); if (!response.ok) { - throw new Error('Response was not ok'); + if (response.message) { + core.warning(`Cache reservation failed: ${response.message}`); + } + throw new Error(response.message || 'Response was not ok'); } signedUploadUrl = response.signedUploadUrl; } @@ -434,6 +481,9 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { const finalizeResponse = yield twirpClient.FinalizeCacheEntryUpload(finalizeRequest); core.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`); if (!finalizeResponse.ok) { + if (finalizeResponse.message) { + throw new FinalizeCacheError(finalizeResponse.message); + } throw new Error(`Unable to finalize cache with key ${key}, another job may be finalizing this cache.`); } cacheId = parseInt(finalizeResponse.entryId); @@ -446,8 +496,19 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { else if (typedError.name === ReserveCacheError.name) { core.info(`Failed to save: ${typedError.message}`); } + else if (typedError.name === FinalizeCacheError.name) { + core.warning(typedError.message); + } else { - core.warning(`Failed to save: ${typedError.message}`); + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to save: ${typedError.message}`); + } + else { + core.warning(`Failed to save: ${typedError.message}`); + } } } finally { @@ -549,11 +610,12 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType { constructor() { super("github.actions.results.api.v1.CreateCacheEntryResponse", [ { no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, - { no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + { no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { - const message = { ok: false, signedUploadUrl: "" }; + const message = { ok: false, signedUploadUrl: "", message: "" }; globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this }); if (value !== undefined) (0, runtime_3.reflectionMergePartial)(this, message, value); @@ -570,6 +632,9 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType { case /* string signed_upload_url */ 2: message.signedUploadUrl = reader.string(); break; + case /* string message */ 3: + message.message = reader.string(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -588,6 +653,9 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType { /* string signed_upload_url = 2; */ if (message.signedUploadUrl !== "") writer.tag(2, runtime_1.WireType.LengthDelimited).string(message.signedUploadUrl); + /* string message = 3; */ + if (message.message !== "") + writer.tag(3, runtime_1.WireType.LengthDelimited).string(message.message); let u = options.writeUnknownFields; if (u !== false) (u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -671,11 +739,12 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType { constructor() { super("github.actions.results.api.v1.FinalizeCacheEntryUploadResponse", [ { no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, - { no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ } + { no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ }, + { no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { - const message = { ok: false, entryId: "0" }; + const message = { ok: false, entryId: "0", message: "" }; globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this }); if (value !== undefined) (0, runtime_3.reflectionMergePartial)(this, message, value); @@ -692,6 +761,9 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType { case /* int64 entry_id */ 2: message.entryId = reader.int64().toString(); break; + case /* string message */ 3: + message.message = reader.string(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -710,6 +782,9 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType { /* int64 entry_id = 2; */ if (message.entryId !== "0") writer.tag(2, runtime_1.WireType.Varint).int64(message.entryId); + /* string message = 3; */ + if (message.message !== "") + writer.tag(3, runtime_1.WireType.LengthDelimited).string(message.message); let u = options.writeUnknownFields; if (u !== false) (u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -47828,6 +47903,10 @@ class RpcOutputStreamController { cmp: [], }; this._closed = false; + // --- RpcOutputStream async iterator API + // iterator state. + // is undefined when no iterator has been acquired yet. + this._itState = { q: [] }; } // --- RpcOutputStream callback API onNext(callback) { @@ -47927,10 +48006,6 @@ class RpcOutputStreamController { * messages are queued. */ [Symbol.asyncIterator]() { - // init the iterator state, enabling pushIt() - if (!this._itState) { - this._itState = { q: [] }; - } // if we are closed, we are definitely not receiving any more messages. // but we can't let the iterator get stuck. we want to either: // a) finish the new iterator immediately, because we are completed @@ -47963,8 +48038,6 @@ class RpcOutputStreamController { // this either resolves a pending promise, or enqueues the result. pushIt(result) { let state = this._itState; - if (!state) - return; // is the consumer waiting for us? if (state.p) { // yes, consumer is waiting for this promise. @@ -49876,6 +49949,7 @@ const reflection_equals_1 = __nccwpck_require__(4827); const binary_writer_1 = __nccwpck_require__(3957); const binary_reader_1 = __nccwpck_require__(2889); const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({})); +const messageTypeDescriptor = baseDescriptors[message_type_contract_1.MESSAGE_TYPE] = {}; /** * This standard message type provides reflection-based * operations to work with a message. @@ -49886,7 +49960,8 @@ class MessageType { this.typeName = name; this.fields = fields.map(reflection_info_1.normalizeFieldInfo); this.options = options !== null && options !== void 0 ? options : {}; - this.messagePrototype = Object.create(null, Object.assign(Object.assign({}, baseDescriptors), { [message_type_contract_1.MESSAGE_TYPE]: { value: this } })); + messageTypeDescriptor.value = this; + this.messagePrototype = Object.create(null, baseDescriptors); this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this); this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this); this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this); @@ -91387,7 +91462,7 @@ module.exports = parseParams /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.0.3","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","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"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","@protobuf-ts/plugin":"^2.9.4","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","typescript":"^5.2.2"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.1.0","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","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"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@protobuf-ts/runtime-rpc":"^2.11.1","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","@protobuf-ts/plugin":"^2.9.4","typescript":"^5.2.2"}}'); /***/ }), diff --git a/dist/setup/index.js b/dist/setup/index.js index 4aa29b26..69043ebd 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -39,7 +39,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.saveCache = exports.restoreCache = exports.isFeatureAvailable = exports.ReserveCacheError = exports.ValidationError = void 0; +exports.saveCache = exports.restoreCache = exports.isFeatureAvailable = exports.FinalizeCacheError = exports.ReserveCacheError = exports.ValidationError = void 0; const core = __importStar(__nccwpck_require__(37484)); const path = __importStar(__nccwpck_require__(16928)); const utils = __importStar(__nccwpck_require__(98299)); @@ -47,7 +47,7 @@ const cacheHttpClient = __importStar(__nccwpck_require__(73171)); const cacheTwirpClient = __importStar(__nccwpck_require__(96819)); const config_1 = __nccwpck_require__(17606); const tar_1 = __nccwpck_require__(95321); -const constants_1 = __nccwpck_require__(58287); +const http_client_1 = __nccwpck_require__(54844); class ValidationError extends Error { constructor(message) { super(message); @@ -64,6 +64,14 @@ class ReserveCacheError extends Error { } } exports.ReserveCacheError = ReserveCacheError; +class FinalizeCacheError extends Error { + constructor(message) { + super(message); + this.name = 'FinalizeCacheError'; + Object.setPrototypeOf(this, FinalizeCacheError.prototype); + } +} +exports.FinalizeCacheError = FinalizeCacheError; function checkPaths(paths) { if (!paths || paths.length === 0) { throw new ValidationError(`Path Validation Error: At least one directory or file path is required`); @@ -84,7 +92,17 @@ function checkKey(key) { * @returns boolean return true if Actions cache service feature is available, otherwise false */ function isFeatureAvailable() { - return !!process.env['ACTIONS_CACHE_URL']; + const cacheServiceVersion = (0, config_1.getCacheServiceVersion)(); + // Check availability based on cache service version + switch (cacheServiceVersion) { + case 'v2': + // For v2, we need ACTIONS_RESULTS_URL + return !!process.env['ACTIONS_RESULTS_URL']; + case 'v1': + default: + // For v1, we only need ACTIONS_CACHE_URL + return !!process.env['ACTIONS_CACHE_URL']; + } } exports.isFeatureAvailable = isFeatureAvailable; /** @@ -169,8 +187,16 @@ function restoreCacheV1(paths, primaryKey, restoreKeys, options, enableCrossOsAr throw error; } else { - // Supress all non-validation cache related errors because caching should be optional - core.warning(`Failed to restore: ${error.message}`); + // warn on cache restore failure and continue build + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to restore: ${error.message}`); + } + else { + core.warning(`Failed to restore: ${error.message}`); + } } } finally { @@ -223,7 +249,13 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr core.debug(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`); return undefined; } - core.info(`Cache hit for: ${request.key}`); + const isRestoreKeyMatch = request.key !== response.matchedKey; + if (isRestoreKeyMatch) { + core.info(`Cache hit for restore-key: ${response.matchedKey}`); + } + else { + core.info(`Cache hit for: ${response.matchedKey}`); + } if (options === null || options === void 0 ? void 0 : options.lookupOnly) { core.info('Lookup only - skipping download'); return response.matchedKey; @@ -248,7 +280,15 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr } else { // Supress all non-validation cache related errors because caching should be optional - core.warning(`Failed to restore: ${error.message}`); + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to restore: ${error.message}`); + } + else { + core.warning(`Failed to restore: ${error.message}`); + } } } finally { @@ -351,7 +391,15 @@ function saveCacheV1(paths, key, options, enableCrossOsArchive = false) { core.info(`Failed to save: ${typedError.message}`); } else { - core.warning(`Failed to save: ${typedError.message}`); + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to save: ${typedError.message}`); + } + else { + core.warning(`Failed to save: ${typedError.message}`); + } } } finally { @@ -400,10 +448,6 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { } const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath); core.debug(`File Size: ${archiveFileSize}`); - // For GHES, this check will take place in ReserveCache API with enterprise file size limit - if (archiveFileSize > constants_1.CacheFileSizeLimit && !(0, config_1.isGhes)()) { - throw new Error(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 10GB limit, not saving cache.`); - } // Set the archive size in the options, will be used to display the upload progress options.archiveSizeBytes = archiveFileSize; core.debug('Reserving Cache'); @@ -416,7 +460,10 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { try { const response = yield twirpClient.CreateCacheEntry(request); if (!response.ok) { - throw new Error('Response was not ok'); + if (response.message) { + core.warning(`Cache reservation failed: ${response.message}`); + } + throw new Error(response.message || 'Response was not ok'); } signedUploadUrl = response.signedUploadUrl; } @@ -434,6 +481,9 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { const finalizeResponse = yield twirpClient.FinalizeCacheEntryUpload(finalizeRequest); core.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`); if (!finalizeResponse.ok) { + if (finalizeResponse.message) { + throw new FinalizeCacheError(finalizeResponse.message); + } throw new Error(`Unable to finalize cache with key ${key}, another job may be finalizing this cache.`); } cacheId = parseInt(finalizeResponse.entryId); @@ -446,8 +496,19 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) { else if (typedError.name === ReserveCacheError.name) { core.info(`Failed to save: ${typedError.message}`); } + else if (typedError.name === FinalizeCacheError.name) { + core.warning(typedError.message); + } else { - core.warning(`Failed to save: ${typedError.message}`); + // Log server errors (5xx) as errors, all other errors as warnings + if (typedError instanceof http_client_1.HttpClientError && + typeof typedError.statusCode === 'number' && + typedError.statusCode >= 500) { + core.error(`Failed to save: ${typedError.message}`); + } + else { + core.warning(`Failed to save: ${typedError.message}`); + } } } finally { @@ -549,11 +610,12 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType { constructor() { super("github.actions.results.api.v1.CreateCacheEntryResponse", [ { no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, - { no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + { no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { - const message = { ok: false, signedUploadUrl: "" }; + const message = { ok: false, signedUploadUrl: "", message: "" }; globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this }); if (value !== undefined) (0, runtime_3.reflectionMergePartial)(this, message, value); @@ -570,6 +632,9 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType { case /* string signed_upload_url */ 2: message.signedUploadUrl = reader.string(); break; + case /* string message */ 3: + message.message = reader.string(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -588,6 +653,9 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType { /* string signed_upload_url = 2; */ if (message.signedUploadUrl !== "") writer.tag(2, runtime_1.WireType.LengthDelimited).string(message.signedUploadUrl); + /* string message = 3; */ + if (message.message !== "") + writer.tag(3, runtime_1.WireType.LengthDelimited).string(message.message); let u = options.writeUnknownFields; if (u !== false) (u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -671,11 +739,12 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType { constructor() { super("github.actions.results.api.v1.FinalizeCacheEntryUploadResponse", [ { no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, - { no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ } + { no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ }, + { no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { - const message = { ok: false, entryId: "0" }; + const message = { ok: false, entryId: "0", message: "" }; globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this }); if (value !== undefined) (0, runtime_3.reflectionMergePartial)(this, message, value); @@ -692,6 +761,9 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType { case /* int64 entry_id */ 2: message.entryId = reader.int64().toString(); break; + case /* string message */ 3: + message.message = reader.string(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -710,6 +782,9 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType { /* int64 entry_id = 2; */ if (message.entryId !== "0") writer.tag(2, runtime_1.WireType.Varint).int64(message.entryId); + /* string message = 3; */ + if (message.message !== "") + writer.tag(3, runtime_1.WireType.LengthDelimited).string(message.message); let u = options.writeUnknownFields; if (u !== false) (u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -54329,6 +54404,10 @@ class RpcOutputStreamController { cmp: [], }; this._closed = false; + // --- RpcOutputStream async iterator API + // iterator state. + // is undefined when no iterator has been acquired yet. + this._itState = { q: [] }; } // --- RpcOutputStream callback API onNext(callback) { @@ -54428,10 +54507,6 @@ class RpcOutputStreamController { * messages are queued. */ [Symbol.asyncIterator]() { - // init the iterator state, enabling pushIt() - if (!this._itState) { - this._itState = { q: [] }; - } // if we are closed, we are definitely not receiving any more messages. // but we can't let the iterator get stuck. we want to either: // a) finish the new iterator immediately, because we are completed @@ -54464,8 +54539,6 @@ class RpcOutputStreamController { // this either resolves a pending promise, or enqueues the result. pushIt(result) { let state = this._itState; - if (!state) - return; // is the consumer waiting for us? if (state.p) { // yes, consumer is waiting for this promise. @@ -56377,6 +56450,7 @@ const reflection_equals_1 = __nccwpck_require__(4827); const binary_writer_1 = __nccwpck_require__(23957); const binary_reader_1 = __nccwpck_require__(92889); const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({})); +const messageTypeDescriptor = baseDescriptors[message_type_contract_1.MESSAGE_TYPE] = {}; /** * This standard message type provides reflection-based * operations to work with a message. @@ -56387,7 +56461,8 @@ class MessageType { this.typeName = name; this.fields = fields.map(reflection_info_1.normalizeFieldInfo); this.options = options !== null && options !== void 0 ? options : {}; - this.messagePrototype = Object.create(null, Object.assign(Object.assign({}, baseDescriptors), { [message_type_contract_1.MESSAGE_TYPE]: { value: this } })); + messageTypeDescriptor.value = this; + this.messagePrototype = Object.create(null, baseDescriptors); this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this); this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this); this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this); @@ -102519,7 +102594,7 @@ exports["default"] = version; /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.0.3","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","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"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","@protobuf-ts/plugin":"^2.9.4","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","typescript":"^5.2.2"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.1.0","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","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"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@protobuf-ts/runtime-rpc":"^2.11.1","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","@protobuf-ts/plugin":"^2.9.4","typescript":"^5.2.2"}}'); /***/ }), diff --git a/package-lock.json b/package-lock.json index 297a9fdc..035158b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "6.0.0", "license": "MIT", "dependencies": { - "@actions/cache": "^4.0.3", + "@actions/cache": "^4.1.0", "@actions/core": "^1.11.1", "@actions/exec": "^1.1.1", "@actions/github": "^6.0.1", @@ -52,9 +52,9 @@ } }, "node_modules/@actions/cache": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-4.0.3.tgz", - "integrity": "sha512-SvrqFtYJ7I48A/uXNkoJrnukx5weQv1fGquhs3+4nkByZThBH109KTIqj5x/cGV7JGNvb8dLPVywUOqX1fjiXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-4.1.0.tgz", + "integrity": "sha512-z3Opg+P4Y7baq+g1dODXgdtsvPLSewr3ZKpp3U0HQR1A/vWCoJFS52XSezjdngo4SIOdR5oHtyK3a3Arar+X9A==", "license": "MIT", "dependencies": { "@actions/core": "^1.11.1", @@ -65,7 +65,7 @@ "@azure/abort-controller": "^1.1.0", "@azure/ms-rest-js": "^2.6.0", "@azure/storage-blob": "^12.13.0", - "@protobuf-ts/plugin": "^2.9.4", + "@protobuf-ts/runtime-rpc": "^2.11.1", "semver": "^6.3.1" } }, @@ -1590,81 +1590,19 @@ "node": ">=8.0.0" } }, - "node_modules/@protobuf-ts/plugin": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.9.5.tgz", - "integrity": "sha512-KCzNRTFye837XdfPjS85gGzxgPGVDR3W8Px2G3etXuouNog9W+Cr+U0IBTFADrRWXC2x+OSNjXxrdZEiw+H5Cw==", - "license": "Apache-2.0", - "dependencies": { - "@protobuf-ts/plugin-framework": "^2.9.5", - "@protobuf-ts/protoc": "^2.9.5", - "@protobuf-ts/runtime": "^2.9.5", - "@protobuf-ts/runtime-rpc": "^2.9.5", - "typescript": "^3.9" - }, - "bin": { - "protoc-gen-dump": "bin/protoc-gen-dump", - "protoc-gen-ts": "bin/protoc-gen-ts" - } - }, - "node_modules/@protobuf-ts/plugin-framework": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin-framework/-/plugin-framework-2.9.5.tgz", - "integrity": "sha512-DYNQ8Ga3xwPZMfaZGRCnDOcEdQZK9MorTXngVoFLnHWEE8zLhUjFVtdkChZtTih6rl8Z6akyA7hRgj/GrJF58Q==", - "license": "(Apache-2.0 AND BSD-3-Clause)", - "dependencies": { - "@protobuf-ts/runtime": "^2.9.5", - "typescript": "^3.9" - } - }, - "node_modules/@protobuf-ts/plugin-framework/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@protobuf-ts/plugin/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@protobuf-ts/protoc": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.9.5.tgz", - "integrity": "sha512-n6a7OHfr/Ubw483L6kNJB0wBCe/Ops0A652zB6J6nR2x1o+pjVFrMCeeQQsqxkYpQwQ8FCIETSxrMpfOBKTIvQ==", - "license": "Apache-2.0", - "bin": { - "protoc": "protoc.js" - } - }, "node_modules/@protobuf-ts/runtime": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.9.5.tgz", - "integrity": "sha512-SsumigRe3IqNTCQvVZUqDQExsKF72eyAMiWlYb5Jwj3eU4z8UH7JLlSfb/Wjidz4b/chTN6zh5AXBSKl0Asm3A==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.11.1.tgz", + "integrity": "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==", "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@protobuf-ts/runtime-rpc": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.5.tgz", - "integrity": "sha512-NWAb1TaV4CR+BknZr1WRVT5Ws2AupVwGgRNes4oPAFrgLNXQotDFl2E6pmsjPwME8sAgJVzeSr7bUqQVyoAK2A==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz", + "integrity": "sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==", "license": "Apache-2.0", "dependencies": { - "@protobuf-ts/runtime": "^2.9.5" + "@protobuf-ts/runtime": "^2.11.1" } }, "node_modules/@sinclair/typebox": { diff --git a/package.json b/package.json index ef1cfc19..74857446 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "author": "GitHub", "license": "MIT", "dependencies": { - "@actions/cache": "^4.0.3", + "@actions/cache": "^4.1.0", "@actions/core": "^1.11.1", "@actions/exec": "^1.1.1", "@actions/github": "^6.0.1", From b9b25d45f70a5d94d88496aa4896bf9ed8f49b67 Mon Sep 17 00:00:00 2001 From: Priya Gupta <147705955+priyagupta108@users.noreply.github.com> Date: Wed, 26 Nov 2025 23:07:55 +0530 Subject: [PATCH 3/6] Remove always-auth configuration handling from action (#1436) * Remove always-auth configuration handling from setup-node * docs: update README to note always-auth removal Update README to mention removal of always-auth input * Clarify removal of 'always-auth' input in README Updated the description of the 'always-auth' input removal for clarity. --- README.md | 8 ++-- __tests__/authutil.test.ts | 55 +++++++++++----------------- __tests__/canary-installer.test.ts | 4 -- __tests__/nightly-installer.test.ts | 6 --- __tests__/official-installer.test.ts | 9 ----- __tests__/rc-installer.test.ts | 3 -- action.yml | 3 -- dist/setup/index.js | 12 +++--- docs/advanced-usage.md | 3 -- src/authutil.ts | 13 ++----- src/main.ts | 3 +- 11 files changed, 34 insertions(+), 85 deletions(-) diff --git a/README.md b/README.md index 24aa81d1..e49c1172 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ This action provides the following functionality for GitHub Actions users: - Caching is now automatically enabled for npm projects when either the `devEngines.packageManager` field or the top-level `packageManager` field in `package.json` is set to `npm`. For other package managers, such as Yarn and pnpm, caching is disabled by default and must be configured manually using the `cache` input. +- The `always-auth` input has been removed, as it is deprecated and will no longer be supported in future npm releases. To ensure your workflows continue to run without warnings or errors, please remove any references to `always-auth` from your configuration. + ## Breaking changes in V5 - Enabled caching by default with package manager detection if no cache input is provided. @@ -92,10 +94,6 @@ See [action.yml](action.yml) # Default: '' scope: '' - # Set always-auth option in npmrc file. - # Default: '' - always-auth: '' - # Optional mirror to download binaries from. # Artifacts need to match the official Node.js # Example: @@ -271,4 +269,4 @@ Contributions are welcome! See [Contributor's Guide](docs/contributors.md) ## Code of Conduct -:wave: Be nice. See [our code of conduct](CODE_OF_CONDUCT.md) \ No newline at end of file +:wave: Be nice. See [our code of conduct](CODE_OF_CONDUCT.md) diff --git a/__tests__/authutil.test.ts b/__tests__/authutil.test.ts index 0676a850..d5f6c195 100644 --- a/__tests__/authutil.test.ts +++ b/__tests__/authutil.test.ts @@ -76,115 +76,102 @@ describe('authutil tests', () => { } it('Sets up npmrc for npmjs', async () => { - await auth.configAuthentication('https://registry.npmjs.org/', 'false'); + await auth.configAuthentication('https://registry.npmjs.org/'); expect(fs.statSync(rcFile)).toBeDefined(); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); const rc = readRcFile(rcFile); expect(rc['registry']).toBe('https://registry.npmjs.org/'); - expect(rc['always-auth']).toBe('false'); }); it('Appends trailing slash to registry', async () => { - await auth.configAuthentication('https://registry.npmjs.org', 'false'); + await auth.configAuthentication('https://registry.npmjs.org'); expect(fs.statSync(rcFile)).toBeDefined(); const rc = readRcFile(rcFile); expect(rc['registry']).toBe('https://registry.npmjs.org/'); - expect(rc['always-auth']).toBe('false'); }); it('Configures scoped npm registries', async () => { process.env['INPUT_SCOPE'] = 'myScope'; - await auth.configAuthentication('https://registry.npmjs.org', 'false'); + await auth.configAuthentication('https://registry.npmjs.org'); expect(fs.statSync(rcFile)).toBeDefined(); const rc = readRcFile(rcFile); expect(rc['@myscope:registry']).toBe('https://registry.npmjs.org/'); - expect(rc['always-auth']).toBe('false'); }); it('Automatically configures GPR scope', async () => { - await auth.configAuthentication('npm.pkg.github.com', 'false'); + await auth.configAuthentication('npm.pkg.github.com'); expect(fs.statSync(rcFile)).toBeDefined(); const rc = readRcFile(rcFile); expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/'); - expect(rc['always-auth']).toBe('false'); - }); - - it('Sets up npmrc for always-auth true', async () => { - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); - expect(fs.statSync(rcFile)).toBeDefined(); - const rc = readRcFile(rcFile); - expect(rc['registry']).toBe('https://registry.npmjs.org/'); - expect(rc['always-auth']).toBe('true'); }); it('is already set the NODE_AUTH_TOKEN export it', async () => { process.env.NODE_AUTH_TOKEN = 'foobar'; - await auth.configAuthentication('npm.pkg.github.com', 'false'); + await auth.configAuthentication('npm.pkg.github.com'); expect(fs.statSync(rcFile)).toBeDefined(); const rc = readRcFile(rcFile); expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/'); - expect(rc['always-auth']).toBe('false'); expect(process.env.NODE_AUTH_TOKEN).toEqual('foobar'); }); it('configAuthentication should overwrite non-scoped with non-scoped', async () => { fs.writeFileSync(rcFile, 'registry=NNN'); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/` ); }); it('configAuthentication should overwrite only non-scoped', async () => { fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `@myscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `@myscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/` ); }); it('configAuthentication should add non-scoped to scoped', async () => { fs.writeFileSync(rcFile, '@myscope:registry=NNN'); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `@myscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `@myscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/` ); }); it('configAuthentication should overwrite scoped with scoped', async () => { process.env['INPUT_SCOPE'] = 'myscope'; fs.writeFileSync(rcFile, `@myscope:registry=NNN`); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/` ); }); it('configAuthentication should overwrite only scoped', async () => { process.env['INPUT_SCOPE'] = 'myscope'; fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/` ); }); it('configAuthentication should add scoped to non-scoped', async () => { process.env['INPUT_SCOPE'] = 'myscope'; fs.writeFileSync(rcFile, `registry=MMM`); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/` ); }); @@ -194,20 +181,20 @@ describe('authutil tests', () => { rcFile, `@otherscope:registry=NNN${os.EOL}@myscope:registry=MMM` ); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `@otherscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `@otherscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/` ); }); it('configAuthentication should add scoped to another scoped', async () => { process.env['INPUT_SCOPE'] = 'myscope'; fs.writeFileSync(rcFile, `@otherscope:registry=MMM`); - await auth.configAuthentication('https://registry.npmjs.org/', 'true'); + await auth.configAuthentication('https://registry.npmjs.org/'); const contents = fs.readFileSync(rcFile, {encoding: 'utf8'}); expect(contents).toBe( - `@otherscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true` + `@otherscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/` ); }); }); diff --git a/__tests__/canary-installer.test.ts b/__tests__/canary-installer.test.ts index 4393d7ef..93daf17c 100644 --- a/__tests__/canary-installer.test.ts +++ b/__tests__/canary-installer.test.ts @@ -227,7 +227,6 @@ describe('setup-node', () => { const versionSpec = '11.15.0'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -283,7 +282,6 @@ describe('setup-node', () => { const versionSpec = '19.0.0-v8-canary'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; findSpy.mockImplementation(() => ''); @@ -324,7 +322,6 @@ describe('setup-node', () => { inputs['node-version'] = version; inputs['architecture'] = arch; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; const expectedUrl = `https://nodejs.org/download/v8-canary/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`; @@ -569,7 +566,6 @@ describe('setup-node', () => { const versionSpec = 'v20-v8-canary'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; os.platform = 'linux'; diff --git a/__tests__/nightly-installer.test.ts b/__tests__/nightly-installer.test.ts index eece2c34..b95a42d2 100644 --- a/__tests__/nightly-installer.test.ts +++ b/__tests__/nightly-installer.test.ts @@ -255,7 +255,6 @@ describe('setup-node', () => { const versionSpec = '13.13.1-nightly20200415947ddec091'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -291,7 +290,6 @@ describe('setup-node', () => { ]; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -333,7 +331,6 @@ describe('setup-node', () => { ]; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -389,7 +386,6 @@ describe('setup-node', () => { const versionSpec = '18.0.0-nightly202204180699150267'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; findSpy.mockImplementation(() => ''); @@ -427,7 +423,6 @@ describe('setup-node', () => { inputs['node-version'] = version; inputs['architecture'] = arch; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; const expectedUrl = `https://nodejs.org/download/nightly/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`; @@ -473,7 +468,6 @@ describe('setup-node', () => { inputs['node-version'] = version; inputs['architecture'] = arch; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; inputs['mirror'] = 'https://my-mirror.org'; inputs['mirror-token'] = 'my-mirror-token'; diff --git a/__tests__/official-installer.test.ts b/__tests__/official-installer.test.ts index f23183d3..fa46c35e 100644 --- a/__tests__/official-installer.test.ts +++ b/__tests__/official-installer.test.ts @@ -235,7 +235,6 @@ describe('setup-node', () => { const resolvedVersion = versionSpec; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; const expectedUrl = @@ -290,7 +289,6 @@ describe('setup-node', () => { const versionSpec = '11.15.0'; const mirror = 'https://my_mirror_url'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; inputs['mirror'] = mirror; inputs['mirror-token'] = 'faketoken'; @@ -327,7 +325,6 @@ describe('setup-node', () => { const versionSpec = '11.15.0'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -385,7 +382,6 @@ describe('setup-node', () => { const resolvedVersion = versionSpec; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; findSpy.mockImplementation(() => ''); @@ -405,7 +401,6 @@ describe('setup-node', () => { const versionSpec = '11.15.0'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -448,7 +443,6 @@ describe('setup-node', () => { inputs['node-version'] = version; inputs['architecture'] = arch; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; const expectedUrl = @@ -560,7 +554,6 @@ describe('setup-node', () => { inputs['node-version'] = versionSpec; inputs['check-latest'] = 'true'; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -602,7 +595,6 @@ describe('setup-node', () => { inputs['node-version'] = versionSpec; inputs['check-latest'] = 'true'; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -882,7 +874,6 @@ describe('setup-node', () => { inputs['node-version'] = version; inputs['architecture'] = arch; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; inputs['mirror'] = 'https://my_mirror_url'; inputs['mirror-token'] = 'faketoken'; diff --git a/__tests__/rc-installer.test.ts b/__tests__/rc-installer.test.ts index 736260a4..e159044b 100644 --- a/__tests__/rc-installer.test.ts +++ b/__tests__/rc-installer.test.ts @@ -194,7 +194,6 @@ describe('setup-node', () => { const versionSpec = '13.0.0-rc.0'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; // ... but not in the local cache @@ -239,7 +238,6 @@ describe('setup-node', () => { const versionSpec = '14.7.0-rc.1'; inputs['node-version'] = versionSpec; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; findSpy.mockImplementation(() => ''); @@ -268,7 +266,6 @@ describe('setup-node', () => { inputs['node-version'] = version; inputs['architecture'] = arch; - inputs['always-auth'] = false; inputs['token'] = 'faketoken'; const expectedUrl = `https://nodejs.org/download/rc/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`; diff --git a/action.yml b/action.yml index 73c766bc..da747954 100644 --- a/action.yml +++ b/action.yml @@ -2,9 +2,6 @@ name: 'Setup Node.js environment' description: 'Setup a Node.js environment by adding problem matchers and optionally downloading and adding it to the PATH.' author: 'GitHub' inputs: - always-auth: - description: 'Set always-auth in npmrc.' - default: 'false' node-version: description: 'Version Spec of the version to use. Examples: 12.x, 10.15.1, >=10.15.0.' node-version-file: diff --git a/dist/setup/index.js b/dist/setup/index.js index 69043ebd..48d93766 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -98589,15 +98589,15 @@ const os = __importStar(__nccwpck_require__(70857)); const path = __importStar(__nccwpck_require__(16928)); const core = __importStar(__nccwpck_require__(37484)); const github = __importStar(__nccwpck_require__(93228)); -function configAuthentication(registryUrl, alwaysAuth) { +function configAuthentication(registryUrl) { const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc'); if (!registryUrl.endsWith('/')) { registryUrl += '/'; } - writeRegistryToFile(registryUrl, npmrc, alwaysAuth); + writeRegistryToFile(registryUrl, npmrc); } exports.configAuthentication = configAuthentication; -function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) { +function writeRegistryToFile(registryUrl, fileLocation) { let scope = core.getInput('scope'); if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { scope = github.context.repo.owner; @@ -98622,8 +98622,7 @@ function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) { // Remove http: or https: from front of registry. const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}'; const registryString = `${scope}registry=${registryUrl}`; - const alwaysAuthString = `always-auth=${alwaysAuth}`; - newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`; + newContents += `${authString}${os.EOL}${registryString}`; fs.writeFileSync(fileLocation, newContents); core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation); // Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it @@ -99857,9 +99856,8 @@ function run() { } yield (0, util_1.printEnvDetailsAndSetOutput)(); const registryUrl = core.getInput('registry-url'); - const alwaysAuth = core.getInput('always-auth'); if (registryUrl) { - auth.configAuthentication(registryUrl, alwaysAuth); + auth.configAuthentication(registryUrl); } const cacheDependencyPath = core.getInput('cache-dependency-path'); if ((0, cache_utils_1.isCacheFeatureAvailable)()) { diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index d238f4a8..851e261b 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -446,9 +446,6 @@ To access private GitHub Packages within the same organization, go to "Manage Ac Please refer to the [Ensuring workflow access to your package - Configuring a package's access control and visibility](https://docs.github.com/en/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package) for more details. -### always-auth input -The always-auth input sets `always-auth=true` in .npmrc file. With this option set [npm](https://docs.npmjs.com/cli/v6/using-npm/config#always-auth)/yarn sends the authentication credentials when making a request to the registries. - ## Use private mirror It is possible to use a private mirror hosting Node.js binaries. This mirror must be a full mirror of the official Node.js distribution. diff --git a/src/authutil.ts b/src/authutil.ts index 2ce94939..e4b823bd 100644 --- a/src/authutil.ts +++ b/src/authutil.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import * as core from '@actions/core'; import * as github from '@actions/github'; -export function configAuthentication(registryUrl: string, alwaysAuth: string) { +export function configAuthentication(registryUrl: string) { const npmrc: string = path.resolve( process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc' @@ -13,14 +13,10 @@ export function configAuthentication(registryUrl: string, alwaysAuth: string) { registryUrl += '/'; } - writeRegistryToFile(registryUrl, npmrc, alwaysAuth); + writeRegistryToFile(registryUrl, npmrc); } -function writeRegistryToFile( - registryUrl: string, - fileLocation: string, - alwaysAuth: string -) { +function writeRegistryToFile(registryUrl: string, fileLocation: string) { let scope: string = core.getInput('scope'); if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { scope = github.context.repo.owner; @@ -47,8 +43,7 @@ function writeRegistryToFile( const authString: string = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}'; const registryString = `${scope}registry=${registryUrl}`; - const alwaysAuthString = `always-auth=${alwaysAuth}`; - newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`; + newContents += `${authString}${os.EOL}${registryString}`; fs.writeFileSync(fileLocation, newContents); core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation); // Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it diff --git a/src/main.ts b/src/main.ts index 07871150..4afbd293 100644 --- a/src/main.ts +++ b/src/main.ts @@ -62,9 +62,8 @@ export async function run() { await printEnvDetailsAndSetOutput(); const registryUrl: string = core.getInput('registry-url'); - const alwaysAuth: string = core.getInput('always-auth'); if (registryUrl) { - auth.configAuthentication(registryUrl, alwaysAuth); + auth.configAuthentication(registryUrl); } const cacheDependencyPath = core.getInput('cache-dependency-path'); From a4d2e2bbca97c78789c5b6f8b2092769fdd8005c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 21:03:23 -0600 Subject: [PATCH 4/6] Bump actions/checkout from 5 to 6 (#1439) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/e2e-cache.yml | 20 ++++++------- .github/workflows/proxy.yml | 4 +-- .../workflows/publish-immutable-actions.yml | 2 +- .github/workflows/versions.yml | 28 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.github/workflows/e2e-cache.yml b/.github/workflows/e2e-cache.yml index ddedf39b..73e48d8d 100644 --- a/.github/workflows/e2e-cache.yml +++ b/.github/workflows/e2e-cache.yml @@ -21,7 +21,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Clean global cache run: npm cache clean --force - name: Setup Node @@ -44,7 +44,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@v4 with: @@ -77,7 +77,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Yarn version run: yarn --version - name: Generate yarn file @@ -109,7 +109,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Update yarn run: yarn set version 3.6.4 - name: Yarn version @@ -143,7 +143,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: prepare sub-projects run: __tests__/prepare-yarn-subprojects.sh yarn1 @@ -170,7 +170,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: prepare sub-projects run: __tests__/prepare-yarn-subprojects.sh keepcache keepcache @@ -197,7 +197,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: prepare sub-projects run: __tests__/prepare-yarn-subprojects.sh global @@ -224,7 +224,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: prepare sub-projects run: /bin/bash __tests__/prepare-yarn-subprojects.sh keepcache @@ -253,7 +253,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Create package.json with packageManager field run: | echo '{ "name": "test-project", "version": "1.0.0", "packageManager": "npm@8.0.0" }' > package.json @@ -278,7 +278,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Create package.json with devEngines field run: | echo '{ diff --git a/.github/workflows/proxy.yml b/.github/workflows/proxy.yml index c5493b59..e1112314 100644 --- a/.github/workflows/proxy.yml +++ b/.github/workflows/proxy.yml @@ -25,7 +25,7 @@ jobs: env: https_proxy: http://squid-proxy:3128 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Clear tool cache run: rm -rf $RUNNER_TOOL_CACHE/* - name: Setup node 24 @@ -41,7 +41,7 @@ jobs: https_proxy: http://no-such-proxy:3128 no_proxy: api.github.com,github.com,nodejs.org,registry.npmjs.org,*.s3.amazonaws.com,s3.amazonaws.com steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Clear tool cache run: rm -rf $RUNNER_TOOL_CACHE/* - name: Setup node 24 diff --git a/.github/workflows/publish-immutable-actions.yml b/.github/workflows/publish-immutable-actions.yml index 52c7bc00..7f49c641 100644 --- a/.github/workflows/publish-immutable-actions.yml +++ b/.github/workflows/publish-immutable-actions.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Checking out - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Publish id: publish uses: actions/publish-immutable-action@v0.0.4 diff --git a/.github/workflows/versions.yml b/.github/workflows/versions.yml index 333e3a5b..275c042f 100644 --- a/.github/workflows/versions.yml +++ b/.github/workflows/versions.yml @@ -20,7 +20,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: @@ -37,7 +37,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest-large] node-version: [lts/dubnium, lts/erbium, lts/fermium, lts/*, lts/-1] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: @@ -64,7 +64,7 @@ jobs: '20.0.0-v8-canary20221101e50e45c9f8' ] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: @@ -84,7 +84,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20-nightly, 25-nightly, 24.0.0-nightly] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: @@ -104,7 +104,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20.0.0-rc.1, 22.14.0-rc.1, 24.0.0-rc.4] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: @@ -124,7 +124,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20.10.0, 22.0.0, 24.9.0] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: @@ -141,7 +141,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [20, 22, 24] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node and check latest uses: ./ with: @@ -160,7 +160,7 @@ jobs: node-version-file: [.nvmrc, .tool-versions, .tool-versions-node, package.json] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup node from node version file uses: ./ with: @@ -175,7 +175,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup node from node version file uses: ./ with: @@ -190,7 +190,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup node from node version file uses: ./ with: @@ -206,7 +206,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large] node-version: [17, 19] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node from dist uses: ./ with: @@ -222,7 +222,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest-large] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 # test old versions which didn't have npm and layout different - name: Setup node 0.12.18 from dist uses: ./ @@ -235,7 +235,7 @@ jobs: arch: runs-on: windows-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup node 20 x86 from dist uses: ./ with: @@ -259,7 +259,7 @@ jobs: echo "LATEST_NODE_VERSION=$latestNodeVersion" >> $GITHUB_OUTPUT id: version shell: bash - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Setup Node uses: ./ with: From 395ad3262231945c25e8478fd5baf05154b1d79f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 21:06:19 -0600 Subject: [PATCH 5/6] Bump js-yaml from 3.14.1 to 3.14.2 (#1435) Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.14.1 to 3.14.2. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 3.14.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 035158b5..143fcb71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -994,10 +994,11 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4315,10 +4316,11 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, From 65d868f8d4d85d7d4abb7de0875cde3fcc8798f5 Mon Sep 17 00:00:00 2001 From: mahabaleshwars <147705296+mahabaleshwars@users.noreply.github.com> Date: Thu, 18 Dec 2025 22:19:55 +0530 Subject: [PATCH 6/6] Update Documentation for Lockfile (#1454) * update documentation for lockfile * Update adavance usage in README.md * Documentation update * Update lockfile documenation * fix coplilot suggestion --- README.md | 3 ++- docs/advanced-usage.md | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e49c1172..b9c2fa3c 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ Since it will not be cached always, there is possibility of hitting rate limit w ### Checking in lockfiles -It's **always** recommended to commit the lockfile of your package manager for security and performance reasons. For more information consult the "Working with lockfiles" section of the [Advanced usage](docs/advanced-usage.md#working-with-lockfiles) guide. +It's **strongly recommended** to commit the lockfile of your package manager for security and performance reasons. For more information consult the "Working with lockfiles" section of the [Advanced usage](docs/advanced-usage.md#working-with-lockfiles) guide. ## Caching global packages data @@ -249,6 +249,7 @@ If the runner is not able to access github.com, any Nodejs versions requested du - [Publishing to npmjs and GPR with npm](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-npm) - [Publishing to npmjs and GPR with yarn](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-yarn) - [Using private packages](docs/advanced-usage.md#use-private-packages) + - [Using private mirror](docs/advanced-usage.md#use-private-mirror) ## Recommended permissions diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 851e261b..ee265a69 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -1,6 +1,6 @@ ## Working with lockfiles -All supported package managers recommend that you **always** commit the lockfile, although implementations vary doing so generally provides the following benefits: +Most supported package managers recommend that you **always** commit the lockfile, although implementations vary doing so generally provides the following benefits: - Enables faster installation for CI and production environments, due to being able to skip package resolution. - Describes a single representation of a dependency tree such that teammates, deployments, and continuous integration are guaranteed to install exactly the same dependencies. @@ -35,6 +35,25 @@ Ensure that `pnpm-lock.yaml` is always committed, when on CI pass `--frozen-lock - [Working with Git - Lockfiles](https://pnpm.io/git#lockfiles) - [Documentation of `--frozen-lockfile` option](https://pnpm.io/cli/install#--frozen-lockfile) +### Running without a lockfile + +If you choose not to use a lockfile, you must ensure that **caching is disabled**. The `cache` feature relies on the lockfile to generate a unique key for the cache entry. + +To run without a lockfile: +1. Do not set the `cache` input. +2. If your `package.json` contains a `packageManager` field set to npm (or devEngines.packageManager), automatic caching is enabled by default. Override this by setting `package-manager-cache: false`. + +```yaml +steps: +- uses: actions/checkout@v6 +- uses: actions/setup-node@v6 + with: + node-version: '24' + package-manager-cache: false # Explicitly disable caching if you don't have a lockfile +- run: npm install +- run: npm test +``` + ## Check latest version The `check-latest` flag defaults to `false`. When set to `false`, the action will first check the local cache for a semver match. If unable to find a specific version in the cache, the action will attempt to download a version of Node.js. It will pull LTS versions from [node-versions releases](https://github.com/actions/node-versions/releases) and on miss or failure will fall back to the previous behavior of downloading directly from [node dist](https://nodejs.org/dist/). Use the default or set `check-latest` to `false` if you prefer stability and if you want to ensure a specific version of Node.js is always used.