Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mirror-url parameter to allow downloading Node.js from a custom URL #1211

Closed
wants to merge 26 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update mirrorURL versions
  • Loading branch information
aparnajyothi-y committed Jan 31, 2025
commit 91a5e5da0630ba488d31de7a4c0d6aeb24f536e3
131 changes: 121 additions & 10 deletions dist/setup/index.js
Original file line number Diff line number Diff line change
@@ -100154,6 +100154,14 @@ class BaseDistribution {
return response.result || [];
});
}
getMirrorUrVersions() {
return __awaiter(this, void 0, void 0, function* () {
const initialUrl = this.getDistributionMirrorUrl();
const dataUrl = `${initialUrl}/index.json`;
const response = yield this.httpClient.getJson(dataUrl);
return response.result || [];
});
}
getNodejsDistInfo(version) {
const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
version = semver_1.default.clean(version) || '';
@@ -100165,7 +100173,7 @@ class BaseDistribution {
? `${fileName}.zip`
: `${fileName}.7z`
: `${fileName}.tar.gz`;
const initialUrl = this.getDistributionUrl();
const initialUrl = this.getDistributionMirrorUrl();
const url = `${initialUrl}/v${version}/${urlFileName}`;
return {
downloadUrl: url,
@@ -100406,17 +100414,54 @@ 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(`Using mirror URL: ${mirrorUrl}`);
return mirrorUrl;
}
// 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';
}
}
@@ -100603,6 +100648,13 @@ class OfficialBuilds extends base_distribution_1.default {
getDistributionUrl() {
return `https://nodejs.org/dist`;
}
getDistributionMirrorUrl() {
const mirrorURL = this.nodeInfo.mirrorURL;
if (!mirrorURL) {
throw new Error('Mirror URL is undefined');
}
return mirrorURL;
}
getManifest() {
core.debug('Getting manifest from actions/node-versions@main');
return tc.getManifestFromRepo('actions', 'node-versions', this.nodeInfo.auth, 'main');
@@ -100670,17 +100722,9 @@ class OfficialBuilds extends base_distribution_1.default {
}
downloadFromMirrorURL() {
return __awaiter(this, void 0, void 0, function* () {
const nodeJsVersions = yield this.getNodeJsVersions();
core.info('versions from nodeJSVersions' + nodeJsVersions);
const nodeJsVersions = yield this.getMirrorUrVersions();
const versions = this.filterVersions(nodeJsVersions);
core.info('versions' + versions);
const evaluatedVersion = this.evaluateVersions(versions);
core.info('versionSpec' + this.nodeInfo.versionSpec);
if (this.nodeInfo.checkLatest) {
const evaluatedVersion = yield this.findVersionInDist(nodeJsVersions);
this.nodeInfo.versionSpec = evaluatedVersion;
core.info('versionSpec' + this.nodeInfo.versionSpec);
}
if (!evaluatedVersion) {
throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`);
}
@@ -100714,18 +100758,52 @@ 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 {
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;
}
// Return the default URL if no mirror URL is provided
return this.getDistributionUrl();
}
}
exports["default"] = RcBuild;

@@ -100737,11 +100815,35 @@ 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 {
constructor(nodeInfo) {
super(nodeInfo);
@@ -100750,6 +100852,15 @@ class CanaryBuild extends base_distribution_prerelease_1.default {
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;
}
return 'https://nodejs.org/download/v8-canary';
}
}
exports["default"] = CanaryBuild;

28 changes: 21 additions & 7 deletions src/distributions/base-distribution.ts
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ export default abstract class BaseDistribution {
}

protected abstract getDistributionUrl(): string;

protected abstract getDistributionMirrorUrl(): string;

public async setupNodeJs() {
let nodeJsVersions: INodeVersion[] | undefined;
@@ -105,6 +105,14 @@ export default abstract class BaseDistribution {
return response.result || [];
}

protected async getMirrorUrVersions(): Promise<INodeVersion[]> {
const initialUrl = this.getDistributionMirrorUrl();
const dataUrl = `${initialUrl}/index.json`;

const response = await this.httpClient.getJson<INodeVersion[]>(dataUrl);
return response.result || [];
}

protected getNodejsDistInfo(version: string) {
const osArch: string = this.translateArchToDistUrl(this.nodeInfo.arch);
version = semver.clean(version) || '';
@@ -118,7 +126,7 @@ export default abstract class BaseDistribution {
? `${fileName}.zip`
: `${fileName}.7z`
: `${fileName}.tar.gz`;
const initialUrl = this.getDistributionUrl();
const initialUrl = this.getDistributionMirrorUrl();
const url = `${initialUrl}/v${version}/${urlFileName}`;

return <INodeVersionInfo>{
@@ -143,7 +151,7 @@ export default abstract class BaseDistribution {
? `${fileName}.zip`
: `${fileName}.7z`
: `${fileName}.tar.gz`;

const url = `${mirrorURL}/v${version}/${urlFileName}`;

return <INodeVersionInfo>{
@@ -173,7 +181,9 @@ export default abstract class BaseDistribution {
info.downloadUrl
);
}
core.error(`Download failed from ${info.downloadUrl}. Please check the URl and try again.`);
core.error(
`Download failed from ${info.downloadUrl}. Please check the URl and try again.`
);

throw err;
}
@@ -195,7 +205,7 @@ export default abstract class BaseDistribution {
protected async acquireWindowsNodeFromFallbackLocation(
version: string,
arch: string = os.arch(),
downloadUrl : string
downloadUrl: string
): Promise<string> {
const initialUrl = this.getDistributionUrl();
core.info('url: ' + initialUrl);
@@ -214,8 +224,12 @@ export default abstract class BaseDistribution {
libUrl = `${initialUrl}/v${version}/win-${osArch}/node.lib`;

core.info(`Downloading only node binary from ${exeUrl}`);
if(downloadUrl != exeUrl ){core.error('unable to download node binary with the provided URL. Please check and try again');}


if (downloadUrl != exeUrl) {
core.error(
'unable to download node binary with the provided URL. Please check and try again'
);
}

const exePath = await tc.downloadTool(exeUrl);
await io.cp(exePath, path.join(tempDir, 'node.exe'));
3 changes: 1 addition & 2 deletions src/distributions/base-models.ts
Original file line number Diff line number Diff line change
@@ -4,15 +4,14 @@ export interface NodeInputs {
auth?: string;
checkLatest: boolean;
stable: boolean;
mirrorURL: string;
mirrorURL?: string;
}

export interface INodeVersionInfo {
downloadUrl: string;
resolvedVersion: string;
arch: string;
fileName: string;

}

export interface INodeVersion {
18 changes: 18 additions & 0 deletions src/distributions/nightly/nightly_builds.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
import BasePrereleaseNodejs from '../base-distribution-prerelease';
import {NodeInputs} from '../base-models';
import * as core from '@actions/core';

export default class NightlyNodejs extends BasePrereleaseNodejs {

protected distribution = 'nightly';

constructor(nodeInfo: NodeInputs) {
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(`Using mirror URL: ${mirrorUrl}`);
return mirrorUrl;
}

// 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';
}
}
Loading
Oops, something went wrong.
Loading
Oops, something went wrong.