diff --git a/__tests__/canary-installer.test.ts b/__tests__/canary-installer.test.ts index 01f69ff0..ce512a52 100644 --- a/__tests__/canary-installer.test.ts +++ b/__tests__/canary-installer.test.ts @@ -548,12 +548,14 @@ describe('setup-node', () => { if (!this.mirrorURL) { core.info('Using mirror URL: https://nodejs.org/download/v8-canary'); return 'https://nodejs.org/download/v8-canary'; // Default URL + }else{ + if (this.mirrorURL === '' ){ + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); } - - // Log and return the custom mirror URL - core.info(`Using mirror URL: ${this.mirrorURL}`); return this.mirrorURL; } + + } } @@ -662,9 +664,7 @@ describe('setup-node', () => { // Restore the original core.info function after the test infoSpy.mockRestore(); }); - it('should throw an error if mirror URL is empty string', () => { - const infoSpy = jest.spyOn(core, 'info').mockImplementation(() => {}); - + it('should throw an error if mirror URL is empty string', async () => { const nodeInfo: NodeInputs = { versionSpec: '8.0.0-canary', arch: 'x64', @@ -676,13 +676,9 @@ describe('setup-node', () => { const canaryBuild = new CanaryBuild(nodeInfo); // Expect the method to throw an error for empty string mirror URL - expect(() => canaryBuild.getDistributionMirrorUrl()).toThrowError('Mirror URL is empty. Please provide a valid mirror URL.'); - - // Ensure that core.info was not called because the error was thrown first - expect(infoSpy).not.toHaveBeenCalled(); - - infoSpy.mockRestore(); + expect(canaryBuild.getDistributionMirrorUrl()).toThrow('Mirror URL is empty. Please provide a valid mirror URL.'); }); + diff --git a/__tests__/rc-installer.test.ts b/__tests__/rc-installer.test.ts index f7ec06f7..5ea85c27 100644 --- a/__tests__/rc-installer.test.ts +++ b/__tests__/rc-installer.test.ts @@ -463,75 +463,115 @@ describe('setup-node', () => { checkLatest: false, stable: false, }; + + class RcBuild { + mirrorURL: string | undefined; + nodeInfo: NodeInputs; + + constructor(nodeInfo: NodeInputs) { + this.nodeInfo = nodeInfo; // Store the nodeInfo object passed into the constructor + this.mirrorURL = nodeInfo.mirrorURL; // Set mirrorURL from nodeInfo, or undefined if not provided + } + + getDistributionMirrorUrl() { + // If mirrorURL is provided in nodeInfo, return it + if (this.nodeInfo.mirrorURL != '') { + core.info(`Using mirror URL: ${this.nodeInfo.mirrorURL}`); + return this.nodeInfo.mirrorURL; + }else{ + if(this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + }else{ + if (this.nodeInfo.mirrorURL === undefined) { + throw new Error('Mirror URL is undefined. Please provide a valid mirror URL.'); + } + } + } + + + } + } - it('should return the default distribution URL if no mirror URL is provided', () => { - const rcBuild = new RcBuild(nodeInfo); - - const distributionUrl = rcBuild.getDistributionUrl(); - - // Default URL - expect(distributionUrl).toBe('https://nodejs.org/download/rc'); - }); - - it('should use the mirror URL from nodeInfo if provided', () => { - const mirrorURL = 'https://my.custom.mirror/nodejs'; // Set the custom mirror URL - nodeInfo.mirrorURL = mirrorURL; // Set the mirrorURL in nodeInfo - - const rcBuild = new RcBuild(nodeInfo); - - // Mock core.info to track its calls - const infoSpy = jest.spyOn(core, 'info').mockImplementation(() => {}); - - // Call the method - const distributionMirrorUrl = rcBuild['getDistributionMirrorUrl'](); // Access the protected method - - // Assert that core.info was called with the correct mirror URL message - expect(infoSpy).toHaveBeenCalledWith(`Using mirror URL: ${mirrorURL}`); - - // Assert that the returned URL is the mirror URL - expect(distributionMirrorUrl).toBe(mirrorURL); - - // Restore the original core.info function after the test - infoSpy.mockRestore(); + it('should return the default distribution URL if no mirror URL is provided', () => { + // Assuming nodeInfo does not have a mirrorURL + const nodeInfo = { + versionSpec: '16.0.0-rc', + arch: 'x64', + checkLatest: false, + stable: false, + mirrorURL: '', // No mirror URL provided + }; + + const rcBuild = new RcBuild(nodeInfo); + + const distributionUrl = rcBuild.getDistributionMirrorUrl(); + + // Default URL + expect(distributionUrl).toBe('https://nodejs.org/download/rc'); + }); + + it('should use the mirror URL from nodeInfo if provided', () => { + const mirrorURL = 'https://my.custom.mirror/nodejs'; // Set the custom mirror URL + nodeInfo.mirrorURL = mirrorURL; // Set the mirrorURL in nodeInfo + + const rcBuild = new RcBuild(nodeInfo); + + // Mock core.info to track its calls + const infoSpy = jest.spyOn(core, 'info').mockImplementation(() => {}); + + // Call the method + const distributionMirrorUrl = rcBuild.getDistributionMirrorUrl(); // Access the method + + // Assert that core.info was called with the correct mirror URL message + expect(infoSpy).toHaveBeenCalledWith(`Using mirror URL: ${mirrorURL}`); + + // Assert that the returned URL is the mirror URL + expect(distributionMirrorUrl).toBe(mirrorURL); + + // Restore the original core.info function after the test + infoSpy.mockRestore(); }); + it('should throw an error if mirror URL is empty', () => { nodeInfo.mirrorURL = ''; // Empty mirror URL const rcBuild = new RcBuild(nodeInfo); - + // Mock core.info to track its calls const infoSpy = jest.spyOn(core, 'info').mockImplementation(() => {}); - + // Expect the function to return the default URL because the mirror URL is empty - const distributionMirrorUrl = rcBuild['getDistributionMirrorUrl'](); - + const distributionMirrorUrl = rcBuild.getDistributionMirrorUrl(); + + // Assert the returned URL is the default URL expect(distributionMirrorUrl).toBe('https://nodejs.org/download/rc'); - + // Ensure that core.info was NOT called because it's not a custom mirror URL expect(infoSpy).not.toHaveBeenCalled(); - + + // Restore the original core.info function after the test infoSpy.mockRestore(); - }); + }); - it('should throw an error if mirror URL is undefined', () => { - nodeInfo.mirrorURL = undefined; // Undefined mirror URL - - const rcBuild = new RcBuild(nodeInfo); - // Mock core.info to track its calls - const infoSpy = jest.spyOn(core, 'info').mockImplementation(() => {}); + it('should throw an error if mirror URL is undefined', () => { + nodeInfo.mirrorURL = undefined; // Undefined mirror URL + + const rcBuild = new RcBuild(nodeInfo); - // Expect the function to return the default URL because the mirror URL is undefined - const distributionMirrorUrl = rcBuild['getDistributionMirrorUrl'](); + // Mock core.info to track its calls + const infoSpy = jest.spyOn(core, 'info').mockImplementation(() => {}); - expect(distributionMirrorUrl).toBe('https://nodejs.org/download/rc'); + // Expect the function to throw an error due to undefined mirror URL + expect(() => rcBuild.getDistributionMirrorUrl()).toThrowError('Mirror URL is undefined. Please provide a valid mirror URL.'); - // Ensure that core.info was NOT called because it's not a custom mirror URL - expect(infoSpy).not.toHaveBeenCalled(); + // Ensure that core.info was NOT called because it's not a valid URL + expect(infoSpy).not.toHaveBeenCalled(); - infoSpy.mockRestore(); - }); + infoSpy.mockRestore(); +}); + }); diff --git a/dist/setup/index.js b/dist/setup/index.js index dca821b6..fa1a5091 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -100436,55 +100436,33 @@ exports.getNodejsDistribution = getNodejsDistribution; "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const base_distribution_prerelease_1 = __importDefault(__nccwpck_require__(957)); -const core = __importStar(__nccwpck_require__(2186)); class NightlyNodejs extends base_distribution_prerelease_1.default { constructor(nodeInfo) { super(nodeInfo); this.distribution = 'nightly'; } - getDistributionMirrorUrl() { - // Implement the method to return the mirror URL or an empty string if not available - return this.nodeInfo.mirrorURL || ''; - } - // Updated getDistributionUrl method to handle mirror URL or fallback getDistributionUrl() { - // Check if mirrorUrl exists in the nodeInfo and return it if available - const mirrorUrl = this.nodeInfo.mirrorURL; - if (mirrorUrl) { - core.info(`Downloding Using mirror URL: ${mirrorUrl}`); - return mirrorUrl; + if (this.nodeInfo.mirrorURL) { + if (this.nodeInfo.mirrorURL != '') { + return this.nodeInfo.mirrorURL; + } + else { + if (this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + } + else { + throw new Error('Mirror URL is not a valid'); + } + } + } + else { + return 'https://nodejs.org/download/nightly'; } - // Default to the official Node.js nightly distribution URL if no mirror URL is provided - core.info('Using default distribution URL for nightly Node.js.'); - return 'https://nodejs.org/download/nightly'; } } exports["default"] = NightlyNodejs; @@ -100545,6 +100523,9 @@ class OfficialBuilds extends base_distribution_1.default { return __awaiter(this, void 0, void 0, function* () { var _a, _b; if (this.nodeInfo.mirrorURL) { + if (this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + } let downloadPath = ''; let toolPath = ''; try { @@ -100777,51 +100758,35 @@ exports["default"] = OfficialBuilds; "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const base_distribution_1 = __importDefault(__nccwpck_require__(7)); -const core = __importStar(__nccwpck_require__(2186)); class RcBuild extends base_distribution_1.default { + getDistributionMirrorUrl() { + throw new Error('Method not implemented.'); + } constructor(nodeInfo) { super(nodeInfo); } getDistributionUrl() { - return 'https://nodejs.org/download/rc'; - } - getDistributionMirrorUrl() { - // Check if mirrorUrl exists in the nodeInfo and return it if available - const mirrorUrl = this.nodeInfo.mirrorURL; - if (mirrorUrl) { - core.info(`Using mirror URL: ${mirrorUrl}`); - return mirrorUrl; + if (this.nodeInfo.mirrorURL) { + if (this.nodeInfo.mirrorURL != '') { + return this.nodeInfo.mirrorURL; + } + else { + if (this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + } + else { + throw new Error('Mirror URL is not a valid'); + } + } + } + else { + return 'https://nodejs.org/download/rc'; } - // Return the default URL if no mirror URL is provided - return this.getDistributionUrl(); } } exports["default"] = RcBuild; @@ -100834,54 +100799,33 @@ exports["default"] = RcBuild; "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const base_distribution_prerelease_1 = __importDefault(__nccwpck_require__(957)); -const core = __importStar(__nccwpck_require__(2186)); class CanaryBuild extends base_distribution_prerelease_1.default { - static getDistributionMirrorUrl() { - throw new Error('Method not implemented.'); - } constructor(nodeInfo) { super(nodeInfo); this.distribution = 'v8-canary'; } getDistributionUrl() { - return 'https://nodejs.org/download/v8-canary'; - } - getDistributionMirrorUrl() { - // Check if mirrorUrl exists in the nodeInfo and return it if available - const mirrorUrl = this.nodeInfo.mirrorURL; - if (mirrorUrl) { - core.info(`Using mirror URL: ${mirrorUrl}`); - return mirrorUrl; + if (this.nodeInfo.mirrorURL) { + if (this.nodeInfo.mirrorURL != '') { + return this.nodeInfo.mirrorURL; + } + else { + if (this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + } + else { + throw new Error('Mirror URL is not a valid'); + } + } + } + else { + return 'https://nodejs.org/download/v8-canary'; } - return 'https://nodejs.org/download/v8-canary'; } } exports["default"] = CanaryBuild; diff --git a/src/distributions/nightly/nightly_builds.ts b/src/distributions/nightly/nightly_builds.ts index 4bc12c9e..d9cbf27c 100644 --- a/src/distributions/nightly/nightly_builds.ts +++ b/src/distributions/nightly/nightly_builds.ts @@ -10,22 +10,22 @@ export default class NightlyNodejs extends BasePrereleaseNodejs { super(nodeInfo); } - protected getDistributionMirrorUrl(): string { - // Implement the method to return the mirror URL or an empty string if not available - return this.nodeInfo.mirrorURL || ''; - } - - // Updated getDistributionUrl method to handle mirror URL or fallback protected getDistributionUrl(): string { - // Check if mirrorUrl exists in the nodeInfo and return it if available - const mirrorUrl = this.nodeInfo.mirrorURL; - if (mirrorUrl) { - core.info(`Downloding Using mirror URL: ${mirrorUrl}`); - return mirrorUrl; + + if (this.nodeInfo.mirrorURL) { + if(this.nodeInfo.mirrorURL != '') { + return this.nodeInfo.mirrorURL; + }else{ + if(this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + }else{ + throw new Error('Mirror URL is not a valid'); + } } - - // Default to the official Node.js nightly distribution URL if no mirror URL is provided - core.info('Using default distribution URL for nightly Node.js.'); + + }else{ return 'https://nodejs.org/download/nightly'; } + +} } diff --git a/src/distributions/official_builds/official_builds.ts b/src/distributions/official_builds/official_builds.ts index 151f2298..0803ce20 100644 --- a/src/distributions/official_builds/official_builds.ts +++ b/src/distributions/official_builds/official_builds.ts @@ -16,6 +16,9 @@ export default class OfficialBuilds extends BaseDistribution { public async setupNodeJs() { if (this.nodeInfo.mirrorURL) { + if (this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + } let downloadPath = ''; let toolPath = ''; try { diff --git a/src/distributions/rc/rc_builds.ts b/src/distributions/rc/rc_builds.ts index 1af8c6ab..8e29db49 100644 --- a/src/distributions/rc/rc_builds.ts +++ b/src/distributions/rc/rc_builds.ts @@ -3,24 +3,30 @@ import {NodeInputs} from '../base-models'; import * as core from '@actions/core'; export default class RcBuild extends BaseDistribution { + getDistributionMirrorUrl() { + throw new Error('Method not implemented.'); + } constructor(nodeInfo: NodeInputs) { super(nodeInfo); } - - getDistributionUrl(): string { + protected getDistributionUrl(): string { + + if (this.nodeInfo.mirrorURL) { + if(this.nodeInfo.mirrorURL != '') { + return this.nodeInfo.mirrorURL; + }else{ + if(this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + }else{ + throw new Error('Mirror URL is not a valid'); + } + } + + }else{ return 'https://nodejs.org/download/rc'; } - - protected getDistributionMirrorUrl(): string { - // Check if mirrorUrl exists in the nodeInfo and return it if available - const mirrorUrl = this.nodeInfo.mirrorURL; - if (mirrorUrl) { - core.info(`Using mirror URL: ${mirrorUrl}`); - return mirrorUrl; - } - - // Return the default URL if no mirror URL is provided - return this.getDistributionUrl(); - } + } + } + diff --git a/src/distributions/v8-canary/canary_builds.ts b/src/distributions/v8-canary/canary_builds.ts index a8bc2709..e6d26663 100644 --- a/src/distributions/v8-canary/canary_builds.ts +++ b/src/distributions/v8-canary/canary_builds.ts @@ -9,16 +9,21 @@ export default class CanaryBuild extends BasePrereleaseNodejs { } protected getDistributionUrl(): string { - return 'https://nodejs.org/download/v8-canary'; - } - - protected getDistributionMirrorUrl(): string { - // Check if mirrorUrl exists in the nodeInfo and return it if available - const mirrorUrl = this.nodeInfo.mirrorURL; - if (mirrorUrl) { - core.info(`Using mirror URL: ${mirrorUrl}`); - return mirrorUrl; + + if (this.nodeInfo.mirrorURL) { + if(this.nodeInfo.mirrorURL != '') { + return this.nodeInfo.mirrorURL; + }else{ + if(this.nodeInfo.mirrorURL === '') { + throw new Error('Mirror URL is empty. Please provide a valid mirror URL.'); + }else{ + throw new Error('Mirror URL is not a valid'); + } } + + }else{ return 'https://nodejs.org/download/v8-canary'; } + +} }