mirror of
https://github.com/actions/setup-node.git
synced 2025-04-24 04:20:49 +00:00
change evaluateVersions
This commit is contained in:
parent
0d35e2c938
commit
9eba46a481
6 changed files with 53 additions and 115 deletions
71
dist/setup/index.js
vendored
71
dist/setup/index.js
vendored
|
@ -73229,7 +73229,8 @@ class BaseDistribution {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let toolPath = this.findVersionInHoostedToolCacheDirectory();
|
let toolPath = this.findVersionInHoostedToolCacheDirectory();
|
||||||
if (!toolPath) {
|
if (!toolPath) {
|
||||||
const versions = yield this.getNodejsVersions();
|
const nodeVersions = yield this.getNodejsVersions();
|
||||||
|
const versions = this.filterVersions(nodeVersions);
|
||||||
const evaluatedVersion = this.evaluateVersions(versions);
|
const evaluatedVersion = this.evaluateVersions(versions);
|
||||||
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
||||||
toolPath = yield this.downloadNodejs(toolName);
|
toolPath = yield this.downloadNodejs(toolName);
|
||||||
|
@ -73474,17 +73475,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
|
const tc = __importStar(__nccwpck_require__(7784));
|
||||||
const semver_1 = __importDefault(__nccwpck_require__(5911));
|
const semver_1 = __importDefault(__nccwpck_require__(5911));
|
||||||
const base_distribution_1 = __importDefault(__nccwpck_require__(8653));
|
const base_distribution_1 = __importDefault(__nccwpck_require__(8653));
|
||||||
class NightlyNodejs extends base_distribution_1.default {
|
class NightlyNodejs extends base_distribution_1.default {
|
||||||
constructor(nodeInfo) {
|
constructor(nodeInfo) {
|
||||||
super(nodeInfo);
|
super(nodeInfo);
|
||||||
}
|
}
|
||||||
evaluateVersions(nodeVersions) {
|
findVersionInHoostedToolCacheDirectory() {
|
||||||
|
const localVersionPaths = tc.findAllVersions('node', this.nodeInfo.arch);
|
||||||
|
const localVersion = this.evaluateVersions(localVersionPaths);
|
||||||
|
const toolPath = tc.find('node', localVersion, this.nodeInfo.arch);
|
||||||
|
return toolPath;
|
||||||
|
}
|
||||||
|
evaluateVersions(versions) {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
core.debug(`evaluating ${versions.length} versions`);
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
const { includePrerelease, range } = this.createRangePreRelease(this.nodeInfo.versionSpec, '-nightly');
|
const { includePrerelease, range } = this.createRangePreRelease(this.nodeInfo.versionSpec, 'nightly');
|
||||||
for (let i = 0; i < versions.length; i++) {
|
for (let i = 0; i < versions.length; i++) {
|
||||||
const potential = versions[i];
|
const potential = versions[i];
|
||||||
const satisfied = semver_1.default.satisfies(potential.replace('nightly', 'nightly.'), range, {
|
const satisfied = semver_1.default.satisfies(potential.replace('nightly', 'nightly.'), range, {
|
||||||
|
@ -73519,11 +73526,11 @@ class NightlyNodejs extends base_distribution_1.default {
|
||||||
const [raw, prerelease] = this.splitVersionSpec(versionSpec);
|
const [raw, prerelease] = this.splitVersionSpec(versionSpec);
|
||||||
const isValidVersion = semver_1.default.valid(raw);
|
const isValidVersion = semver_1.default.valid(raw);
|
||||||
const rawVersion = (isValidVersion ? raw : semver_1.default.coerce(raw));
|
const rawVersion = (isValidVersion ? raw : semver_1.default.coerce(raw));
|
||||||
if (`-${prerelease}` !== distribution) {
|
if (prerelease !== distribution) {
|
||||||
range = `${rawVersion}${`-${prerelease}`.replace(distribution, `${distribution}.`)}`;
|
range = `${rawVersion}-${prerelease.replace(distribution, `${distribution}.`)}`;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
range = `${semver_1.default.validRange(`^${rawVersion}${distribution}`)}-0`;
|
range = `${semver_1.default.validRange(`^${rawVersion}-${distribution}`)}-0`;
|
||||||
}
|
}
|
||||||
return { range, includePrerelease: !isValidVersion };
|
return { range, includePrerelease: !isValidVersion };
|
||||||
}
|
}
|
||||||
|
@ -73571,41 +73578,6 @@ class OfficialBuilds extends base_distribution_1.default {
|
||||||
constructor(nodeInfo) {
|
constructor(nodeInfo) {
|
||||||
super(nodeInfo);
|
super(nodeInfo);
|
||||||
}
|
}
|
||||||
queryDistForMatch(versionSpec, arch = os_1.default.arch(), nodeVersions) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
let osPlat = os_1.default.platform();
|
|
||||||
let osArch = this.translateArchToDistUrl(arch);
|
|
||||||
// node offers a json list of versions
|
|
||||||
let dataFileName;
|
|
||||||
switch (osPlat) {
|
|
||||||
case 'linux':
|
|
||||||
dataFileName = `linux-${osArch}`;
|
|
||||||
break;
|
|
||||||
case 'darwin':
|
|
||||||
dataFileName = `osx-${osArch}-tar`;
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
dataFileName = `win-${osArch}-exe`;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error(`Unexpected OS '${osPlat}'`);
|
|
||||||
}
|
|
||||||
if (this.isLatestSyntax(versionSpec)) {
|
|
||||||
core.info(`getting latest node version...`);
|
|
||||||
return nodeVersions[0].version;
|
|
||||||
}
|
|
||||||
const versions = [];
|
|
||||||
nodeVersions.forEach((nodeVersion) => {
|
|
||||||
// ensure this version supports your os and platform
|
|
||||||
if (nodeVersion.files.indexOf(dataFileName) >= 0) {
|
|
||||||
versions.push(nodeVersion.version);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// get the latest version that matches the version spec
|
|
||||||
const version = this.evaluateVersions(nodeVersions);
|
|
||||||
return version;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
getNodeJsInfo() {
|
getNodeJsInfo() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let manifest = [];
|
let manifest = [];
|
||||||
|
@ -73618,7 +73590,8 @@ class OfficialBuilds extends base_distribution_1.default {
|
||||||
}
|
}
|
||||||
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
||||||
nodeVersions = yield this.getNodejsVersions();
|
nodeVersions = yield this.getNodejsVersions();
|
||||||
this.nodeInfo.versionSpec = yield this.queryDistForMatch(this.nodeInfo.versionSpec, this.nodeInfo.arch, nodeVersions);
|
const versions = this.filterVersions(nodeVersions);
|
||||||
|
this.nodeInfo.versionSpec = this.evaluateVersions(versions);
|
||||||
core.info(`getting latest node version...`);
|
core.info(`getting latest node version...`);
|
||||||
}
|
}
|
||||||
let toolPath = this.findVersionInHoostedToolCacheDirectory();
|
let toolPath = this.findVersionInHoostedToolCacheDirectory();
|
||||||
|
@ -73645,7 +73618,8 @@ class OfficialBuilds extends base_distribution_1.default {
|
||||||
core.debug(err.stack);
|
core.debug(err.stack);
|
||||||
core.info('Falling back to download directly from Node');
|
core.info('Falling back to download directly from Node');
|
||||||
}
|
}
|
||||||
const versions = yield this.getNodejsVersions();
|
const nodeVersions = yield this.getNodejsVersions();
|
||||||
|
const versions = this.filterVersions(nodeVersions);
|
||||||
const evaluatedVersion = this.evaluateVersions(versions);
|
const evaluatedVersion = this.evaluateVersions(versions);
|
||||||
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
||||||
toolPath = yield this.downloadNodejs(toolName);
|
toolPath = yield this.downloadNodejs(toolName);
|
||||||
|
@ -73656,9 +73630,8 @@ class OfficialBuilds extends base_distribution_1.default {
|
||||||
core.addPath(toolPath);
|
core.addPath(toolPath);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
evaluateVersions(nodeVersions) {
|
evaluateVersions(versions) {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
||||||
core.info(`getting latest node version...`);
|
core.info(`getting latest node version...`);
|
||||||
return versions[0];
|
return versions[0];
|
||||||
|
@ -73790,9 +73763,8 @@ class RcBuild extends base_distribution_1.default {
|
||||||
return response.result || [];
|
return response.result || [];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
evaluateVersions(nodeVersions) {
|
evaluateVersions(versions) {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
core.debug(`evaluating ${versions.length} versions`);
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
for (let i = 0; i < versions.length; i++) {
|
for (let i = 0; i < versions.length; i++) {
|
||||||
const potential = versions[i];
|
const potential = versions[i];
|
||||||
|
@ -73854,9 +73826,8 @@ class CanaryBuild extends base_distribution_1.default {
|
||||||
getDistributionUrl() {
|
getDistributionUrl() {
|
||||||
return 'https://nodejs.org/download/v8-canary';
|
return 'https://nodejs.org/download/v8-canary';
|
||||||
}
|
}
|
||||||
evaluateVersions(nodeVersions) {
|
evaluateVersions(versions) {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
core.debug(`evaluating ${versions.length} versions`);
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
const { includePrerelease, range } = this.createRangePreRelease(this.nodeInfo.versionSpec, 'v8-canary');
|
const { includePrerelease, range } = this.createRangePreRelease(this.nodeInfo.versionSpec, 'v8-canary');
|
||||||
for (let i = 0; i < versions.length; i++) {
|
for (let i = 0; i < versions.length; i++) {
|
||||||
|
|
|
@ -25,12 +25,13 @@ export default abstract class BaseDistribution {
|
||||||
|
|
||||||
protected abstract getDistributionUrl(): string;
|
protected abstract getDistributionUrl(): string;
|
||||||
protected abstract getNodejsVersions(): Promise<INodeVersion[]>;
|
protected abstract getNodejsVersions(): Promise<INodeVersion[]>;
|
||||||
protected abstract evaluateVersions(nodeVersions: INodeVersion[]): string;
|
protected abstract evaluateVersions(nodeVersions: string[]): string;
|
||||||
|
|
||||||
public async getNodeJsInfo() {
|
public async getNodeJsInfo() {
|
||||||
let toolPath = this.findVersionInHoostedToolCacheDirectory();
|
let toolPath = this.findVersionInHoostedToolCacheDirectory();
|
||||||
if (!toolPath) {
|
if (!toolPath) {
|
||||||
const versions = await this.getNodejsVersions();
|
const nodeVersions = await this.getNodejsVersions();
|
||||||
|
const versions = this.filterVersions(nodeVersions);
|
||||||
const evaluatedVersion = this.evaluateVersions(versions);
|
const evaluatedVersion = this.evaluateVersions(versions);
|
||||||
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
||||||
toolPath = await this.downloadNodejs(toolName);
|
toolPath = await this.downloadNodejs(toolName);
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
import * as tc from '@actions/tool-cache';
|
||||||
|
|
||||||
import semver from 'semver';
|
import semver from 'semver';
|
||||||
|
|
||||||
|
@ -10,15 +11,22 @@ export default class NightlyNodejs extends BaseDistribution {
|
||||||
super(nodeInfo);
|
super(nodeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected evaluateVersions(nodeVersions: INodeVersion[]): string {
|
protected findVersionInHoostedToolCacheDirectory(): string {
|
||||||
|
const localVersionPaths = tc.findAllVersions('node', this.nodeInfo.arch);
|
||||||
|
const localVersion = this.evaluateVersions(localVersionPaths);
|
||||||
|
const toolPath = tc.find('node', localVersion, this.nodeInfo.arch);
|
||||||
|
|
||||||
|
return toolPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected evaluateVersions(versions: string[]): string {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
|
|
||||||
core.debug(`evaluating ${versions.length} versions`);
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
|
|
||||||
const {includePrerelease, range} = this.createRangePreRelease(
|
const {includePrerelease, range} = this.createRangePreRelease(
|
||||||
this.nodeInfo.versionSpec,
|
this.nodeInfo.versionSpec,
|
||||||
'-nightly'
|
'nightly'
|
||||||
);
|
);
|
||||||
|
|
||||||
for (let i = 0; i < versions.length; i++) {
|
for (let i = 0; i < versions.length; i++) {
|
||||||
|
@ -57,25 +65,28 @@ export default class NightlyNodejs extends BaseDistribution {
|
||||||
return response.result || [];
|
return response.result || [];
|
||||||
}
|
}
|
||||||
|
|
||||||
createRangePreRelease(versionSpec: string, distribution: string = '') {
|
protected createRangePreRelease(
|
||||||
let range: string | undefined;
|
versionSpec: string,
|
||||||
|
distribution: string = ''
|
||||||
|
) {
|
||||||
|
let range: string;
|
||||||
const [raw, prerelease] = this.splitVersionSpec(versionSpec);
|
const [raw, prerelease] = this.splitVersionSpec(versionSpec);
|
||||||
const isValidVersion = semver.valid(raw);
|
const isValidVersion = semver.valid(raw);
|
||||||
const rawVersion = (isValidVersion ? raw : semver.coerce(raw))!;
|
const rawVersion = (isValidVersion ? raw : semver.coerce(raw))!;
|
||||||
|
|
||||||
if (`-${prerelease}` !== distribution) {
|
if (prerelease !== distribution) {
|
||||||
range = `${rawVersion}${`-${prerelease}`.replace(
|
range = `${rawVersion}-${prerelease.replace(
|
||||||
distribution,
|
distribution,
|
||||||
`${distribution}.`
|
`${distribution}.`
|
||||||
)}`;
|
)}`;
|
||||||
} else {
|
} else {
|
||||||
range = `${semver.validRange(`^${rawVersion}${distribution}`)}-0`;
|
range = `${semver.validRange(`^${rawVersion}-${distribution}`)}-0`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {range, includePrerelease: !isValidVersion};
|
return {range, includePrerelease: !isValidVersion};
|
||||||
}
|
}
|
||||||
|
|
||||||
splitVersionSpec(versionSpec: string) {
|
protected splitVersionSpec(versionSpec: string) {
|
||||||
return versionSpec.split(/-(.*)/s);
|
return versionSpec.split(/-(.*)/s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,48 +17,6 @@ export default class OfficialBuilds extends BaseDistribution {
|
||||||
super(nodeInfo);
|
super(nodeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async queryDistForMatch(
|
|
||||||
versionSpec: string,
|
|
||||||
arch: string = os.arch(),
|
|
||||||
nodeVersions: INodeVersion[]
|
|
||||||
): Promise<string> {
|
|
||||||
let osPlat: string = os.platform();
|
|
||||||
let osArch: string = this.translateArchToDistUrl(arch);
|
|
||||||
|
|
||||||
// node offers a json list of versions
|
|
||||||
let dataFileName: string;
|
|
||||||
switch (osPlat) {
|
|
||||||
case 'linux':
|
|
||||||
dataFileName = `linux-${osArch}`;
|
|
||||||
break;
|
|
||||||
case 'darwin':
|
|
||||||
dataFileName = `osx-${osArch}-tar`;
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
dataFileName = `win-${osArch}-exe`;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error(`Unexpected OS '${osPlat}'`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isLatestSyntax(versionSpec)) {
|
|
||||||
core.info(`getting latest node version...`);
|
|
||||||
return nodeVersions[0].version;
|
|
||||||
}
|
|
||||||
|
|
||||||
const versions: string[] = [];
|
|
||||||
nodeVersions.forEach((nodeVersion: INodeVersion) => {
|
|
||||||
// ensure this version supports your os and platform
|
|
||||||
if (nodeVersion.files.indexOf(dataFileName) >= 0) {
|
|
||||||
versions.push(nodeVersion.version);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// get the latest version that matches the version spec
|
|
||||||
const version = this.evaluateVersions(nodeVersions);
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async getNodeJsInfo() {
|
public async getNodeJsInfo() {
|
||||||
let manifest: tc.IToolRelease[] = [];
|
let manifest: tc.IToolRelease[] = [];
|
||||||
let nodeVersions: INodeVersion[] = [];
|
let nodeVersions: INodeVersion[] = [];
|
||||||
|
@ -77,11 +35,9 @@ export default class OfficialBuilds extends BaseDistribution {
|
||||||
|
|
||||||
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
||||||
nodeVersions = await this.getNodejsVersions();
|
nodeVersions = await this.getNodejsVersions();
|
||||||
this.nodeInfo.versionSpec = await this.queryDistForMatch(
|
const versions = this.filterVersions(nodeVersions);
|
||||||
this.nodeInfo.versionSpec,
|
this.nodeInfo.versionSpec = this.evaluateVersions(versions);
|
||||||
this.nodeInfo.arch,
|
|
||||||
nodeVersions
|
|
||||||
);
|
|
||||||
core.info(`getting latest node version...`);
|
core.info(`getting latest node version...`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +82,8 @@ export default class OfficialBuilds extends BaseDistribution {
|
||||||
core.info('Falling back to download directly from Node');
|
core.info('Falling back to download directly from Node');
|
||||||
}
|
}
|
||||||
|
|
||||||
const versions = await this.getNodejsVersions();
|
const nodeVersions = await this.getNodejsVersions();
|
||||||
|
const versions = this.filterVersions(nodeVersions);
|
||||||
const evaluatedVersion = this.evaluateVersions(versions);
|
const evaluatedVersion = this.evaluateVersions(versions);
|
||||||
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
const toolName = this.getNodejsDistInfo(evaluatedVersion, this.osPlat);
|
||||||
toolPath = await this.downloadNodejs(toolName);
|
toolPath = await this.downloadNodejs(toolName);
|
||||||
|
@ -139,9 +96,8 @@ export default class OfficialBuilds extends BaseDistribution {
|
||||||
core.addPath(toolPath);
|
core.addPath(toolPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected evaluateVersions(nodeVersions: INodeVersion[]): string {
|
protected evaluateVersions(versions: string[]): string {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
|
|
||||||
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
|
||||||
core.info(`getting latest node version...`);
|
core.info(`getting latest node version...`);
|
||||||
|
|
|
@ -18,9 +18,9 @@ export default class RcBuild extends BaseDistribution {
|
||||||
return response.result || [];
|
return response.result || [];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected evaluateVersions(nodeVersions: INodeVersion[]): string {
|
protected evaluateVersions(versions: string[]): string {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
core.debug(`evaluating ${versions.length} versions`);
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
|
|
||||||
for (let i = 0; i < versions.length; i++) {
|
for (let i = 0; i < versions.length; i++) {
|
||||||
|
|
|
@ -14,9 +14,8 @@ export default class CanaryBuild extends BaseDistribution {
|
||||||
return 'https://nodejs.org/download/v8-canary';
|
return 'https://nodejs.org/download/v8-canary';
|
||||||
}
|
}
|
||||||
|
|
||||||
protected evaluateVersions(nodeVersions: INodeVersion[]): string {
|
protected evaluateVersions(versions: string[]): string {
|
||||||
let version = '';
|
let version = '';
|
||||||
const versions = this.filterVersions(nodeVersions);
|
|
||||||
|
|
||||||
core.debug(`evaluating ${versions.length} versions`);
|
core.debug(`evaluating ${versions.length} versions`);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue