From 40509ec00131554bce93071a3c3ed77e5b93a4d5 Mon Sep 17 00:00:00 2001
From: Marco Ippolito <marcoippolito54@gmail.com>
Date: Thu, 27 Mar 2025 14:29:32 +0100
Subject: [PATCH] chore: change fallback message with mirrors

---
 __tests__/official-installer.test.ts          | 37 +++++++++++++++++++
 dist/setup/index.js                           |  8 ++--
 .../official_builds/official_builds.ts        | 10 ++++-
 3 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/__tests__/official-installer.test.ts b/__tests__/official-installer.test.ts
index 6b471c5d..f23183d3 100644
--- a/__tests__/official-installer.test.ts
+++ b/__tests__/official-installer.test.ts
@@ -282,6 +282,43 @@ describe('setup-node', () => {
     expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
   });
 
+  it('falls back to a version from node dist from mirror', async () => {
+    os.platform = 'linux';
+    os.arch = 'x64';
+
+    // a version which is not in the manifest but is in node dist
+    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';
+
+    // ... but not in the local cache
+    findSpy.mockImplementation(() => '');
+
+    dlSpy.mockImplementation(async () => '/some/temp/path');
+    const toolPath = path.normalize('/cache/node/11.15.0/x64');
+    exSpy.mockImplementation(async () => '/some/other/temp/path');
+    cacheSpy.mockImplementation(async () => toolPath);
+
+    await main.run();
+
+    const expPath = path.join(toolPath, 'bin');
+
+    expect(getManifestSpy).toHaveBeenCalled();
+    expect(logSpy).toHaveBeenCalledWith(
+      `Attempting to download ${versionSpec}...`
+    );
+    expect(logSpy).toHaveBeenCalledWith(
+      `Not found in manifest. Falling back to download directly from ${mirror}`
+    );
+    expect(dlSpy).toHaveBeenCalled();
+    expect(exSpy).toHaveBeenCalled();
+    expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
+  });
+
   it('falls back to a version from node dist', async () => {
     os.platform = 'linux';
     os.arch = 'x64';
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 0207df45..c43d61fe 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -97519,7 +97519,7 @@ class OfficialBuilds extends base_distribution_1.default {
     }
     setupNodeJs() {
         return __awaiter(this, void 0, void 0, function* () {
-            var _a;
+            var _a, _b, _c;
             let manifest;
             let nodeJsVersions;
             const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
@@ -97564,7 +97564,7 @@ class OfficialBuilds extends base_distribution_1.default {
                     }
                 }
                 else {
-                    core.info('Not found in manifest. Falling back to download directly from Node');
+                    core.info(`Not found in manifest. Falling back to download directly from ${(_a = this.nodeInfo.mirror) !== null && _a !== void 0 ? _a : 'Node'}`);
                 }
             }
             catch (err) {
@@ -97576,8 +97576,8 @@ class OfficialBuilds extends base_distribution_1.default {
                 else {
                     core.info(err.message);
                 }
-                core.debug((_a = err.stack) !== null && _a !== void 0 ? _a : 'empty stack');
-                core.info('Falling back to download directly from Node');
+                core.debug((_b = err.stack) !== null && _b !== void 0 ? _b : 'empty stack');
+                core.info(`Falling back to download directly from ${(_c = this.nodeInfo.mirror) !== null && _c !== void 0 ? _c : 'Node'}`);
             }
             if (!toolPath) {
                 toolPath = yield this.downloadDirectlyFromNode();
diff --git a/src/distributions/official_builds/official_builds.ts b/src/distributions/official_builds/official_builds.ts
index d78a4966..abd1ede1 100644
--- a/src/distributions/official_builds/official_builds.ts
+++ b/src/distributions/official_builds/official_builds.ts
@@ -96,7 +96,9 @@ export default class OfficialBuilds extends BaseDistribution {
         }
       } else {
         core.info(
-          'Not found in manifest. Falling back to download directly from Node'
+          `Not found in manifest. Falling back to download directly from ${
+            this.nodeInfo.mirror ?? 'Node'
+          }`
         );
       }
     } catch (err) {
@@ -112,7 +114,11 @@ export default class OfficialBuilds extends BaseDistribution {
         core.info((err as Error).message);
       }
       core.debug((err as Error).stack ?? 'empty stack');
-      core.info('Falling back to download directly from Node');
+      core.info(
+        `Falling back to download directly from ${
+          this.nodeInfo.mirror ?? 'Node'
+        }`
+      );
     }
 
     if (!toolPath) {