mirror of
https://github.com/actions/setup-node.git
synced 2025-04-22 09:21:00 +00:00
fixing bugs
This commit is contained in:
parent
d7c7dfa509
commit
a4ae07903c
5 changed files with 110 additions and 32 deletions
|
@ -1,4 +1,4 @@
|
|||
import os = require('os');
|
||||
import os from 'os';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as core from '@actions/core';
|
||||
|
|
|
@ -6,7 +6,7 @@ import * as im from '../src/installer';
|
|||
import * as cache from '@actions/cache';
|
||||
import fs from 'fs';
|
||||
import cp from 'child_process';
|
||||
import osm = require('os');
|
||||
import osm from 'os';
|
||||
import path from 'path';
|
||||
import each from 'jest-each';
|
||||
import * as main from '../src/main';
|
||||
|
@ -138,7 +138,8 @@ describe('setup-node', () => {
|
|||
});
|
||||
|
||||
it('can mock dist versions', async () => {
|
||||
let versions: im.INodeVersion[] = await im.getVersionsFromDist();
|
||||
const versionSpec = '1.2.3';
|
||||
let versions: im.INodeVersion[] = await im.getVersionsFromDist(versionSpec);
|
||||
expect(versions).toBeDefined();
|
||||
expect(versions?.length).toBe(23);
|
||||
});
|
||||
|
|
65
dist/setup/index.js
vendored
65
dist/setup/index.js
vendored
|
@ -73410,16 +73410,21 @@ function resolveVersionFromManifest(versionSpec, stable, auth, osArch = translat
|
|||
}
|
||||
});
|
||||
}
|
||||
// TODO - should we just export this from @actions/tool-cache? Lifted directly from there
|
||||
function evaluateVersions(versions, versionSpec) {
|
||||
function evaluateNightlyVersions(versions, versionSpec) {
|
||||
let version = '';
|
||||
core.debug(`evaluating ${versions.length} versions`);
|
||||
core.debug(`version 1 is ${versions[0]}`);
|
||||
core.debug(`version spec is ${versionSpec}`);
|
||||
versionSpec =
|
||||
versionSpec.includes('nightly') && !semver.valid(versionSpec.split('-')[0])
|
||||
? versionSpec.split('-')[0]
|
||||
: versionSpec;
|
||||
let range;
|
||||
const [raw, prerelease] = versionSpec.split('-');
|
||||
const isValidVersion = semver.valid(raw);
|
||||
const rawVersion = isValidVersion ? raw : semver.coerce(raw);
|
||||
if (rawVersion) {
|
||||
if (prerelease !== 'nightly') {
|
||||
range = `${rawVersion}+${prerelease.replace('nightly', 'nightly.')}`;
|
||||
}
|
||||
else {
|
||||
range = semver.validRange(`^${rawVersion}`);
|
||||
}
|
||||
}
|
||||
if (range) {
|
||||
versions = versions.sort((a, b) => {
|
||||
if (semver.gt(a, b)) {
|
||||
return 1;
|
||||
|
@ -73428,7 +73433,37 @@ function evaluateVersions(versions, versionSpec) {
|
|||
});
|
||||
for (let i = versions.length - 1; i >= 0; i--) {
|
||||
const potential = versions[i];
|
||||
const satisfied = semver.satisfies(potential.replace('-nightly', '+nightly.'), versionSpec.replace('-nightly', '+nightly'));
|
||||
const satisfied = semver.satisfies(potential.replace('-nightly', '+nightly.'), range);
|
||||
if (satisfied) {
|
||||
version = potential;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (version) {
|
||||
core.debug(`matched: ${version}`);
|
||||
}
|
||||
else {
|
||||
core.debug('match not found');
|
||||
}
|
||||
return version;
|
||||
}
|
||||
// TODO - should we just export this from @actions/tool-cache? Lifted directly from there
|
||||
function evaluateVersions(versions, versionSpec) {
|
||||
let version = '';
|
||||
core.debug(`evaluating ${versions.length} versions`);
|
||||
if (versionSpec.includes('nightly')) {
|
||||
return evaluateNightlyVersions(versions, versionSpec);
|
||||
}
|
||||
versions = versions.sort((a, b) => {
|
||||
if (semver.gt(a, b)) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
});
|
||||
for (let i = versions.length - 1; i >= 0; i--) {
|
||||
const potential = versions[i];
|
||||
const satisfied = semver.satisfies(potential, versionSpec);
|
||||
if (satisfied) {
|
||||
version = potential;
|
||||
break;
|
||||
|
@ -73447,7 +73482,7 @@ function getNodejsDistUrl(version) {
|
|||
if (!prerelease || !prerelease.length) {
|
||||
return 'https://nodejs.org/dist';
|
||||
}
|
||||
else if (prerelease[0] === 'nightly') {
|
||||
else if (version.includes('nightly')) {
|
||||
return 'https://nodejs.org/download/nightly';
|
||||
}
|
||||
else {
|
||||
|
@ -73642,7 +73677,7 @@ function run() {
|
|||
// Version is optional. If supplied, install / use from the tool cache
|
||||
// If not supplied then task is still used to setup proxy, auth, etc...
|
||||
//
|
||||
let version = resolveVersionInput();
|
||||
const version = resolveVersionInput();
|
||||
let arch = core.getInput('architecture');
|
||||
const cache = core.getInput('cache');
|
||||
// if architecture supplied but node-version is not
|
||||
|
@ -73654,9 +73689,9 @@ function run() {
|
|||
arch = os.arch();
|
||||
}
|
||||
if (version) {
|
||||
let token = core.getInput('token');
|
||||
let auth = !token || cache_utils_1.isGhes() ? undefined : `token ${token}`;
|
||||
let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
||||
const token = core.getInput('token');
|
||||
const auth = !token || cache_utils_1.isGhes() ? undefined : `token ${token}`;
|
||||
const stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
||||
const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
|
||||
yield installer.getNode(version, stable, checkLatest, auth, arch);
|
||||
}
|
||||
|
|
|
@ -347,16 +347,24 @@ async function resolveVersionFromManifest(
|
|||
}
|
||||
}
|
||||
|
||||
// TODO - should we just export this from @actions/tool-cache? Lifted directly from there
|
||||
function evaluateVersions(versions: string[], versionSpec: string): string {
|
||||
function evaluateNightlyVersions(
|
||||
versions: string[],
|
||||
versionSpec: string
|
||||
): string {
|
||||
let version = '';
|
||||
core.debug(`evaluating ${versions.length} versions`);
|
||||
core.debug(`version 1 is ${versions[0]}`);
|
||||
core.debug(`version spec is ${versionSpec}`);
|
||||
versionSpec =
|
||||
versionSpec.includes('nightly') && !semver.valid(versionSpec.split('-')[0])
|
||||
? versionSpec.split('-')[0]
|
||||
: versionSpec;
|
||||
let range: string | null | undefined;
|
||||
const [raw, prerelease] = versionSpec.split('-');
|
||||
const isValidVersion = semver.valid(raw);
|
||||
const rawVersion = isValidVersion ? raw : semver.coerce(raw);
|
||||
if (rawVersion) {
|
||||
if (prerelease !== 'nightly') {
|
||||
range = `${rawVersion}+${prerelease.replace('nightly', 'nightly.')}`;
|
||||
} else {
|
||||
range = semver.validRange(`^${rawVersion}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (range) {
|
||||
versions = versions.sort((a, b) => {
|
||||
if (semver.gt(a, b)) {
|
||||
return 1;
|
||||
|
@ -367,13 +375,47 @@ function evaluateVersions(versions: string[], versionSpec: string): string {
|
|||
const potential: string = versions[i];
|
||||
const satisfied: boolean = semver.satisfies(
|
||||
potential.replace('-nightly', '+nightly.'),
|
||||
versionSpec.replace('-nightly', '+nightly')
|
||||
range
|
||||
);
|
||||
if (satisfied) {
|
||||
version = potential;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (version) {
|
||||
core.debug(`matched: ${version}`);
|
||||
} else {
|
||||
core.debug('match not found');
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
// TODO - should we just export this from @actions/tool-cache? Lifted directly from there
|
||||
function evaluateVersions(versions: string[], versionSpec: string): string {
|
||||
let version = '';
|
||||
core.debug(`evaluating ${versions.length} versions`);
|
||||
|
||||
if(versionSpec.includes('nightly')) {
|
||||
return evaluateNightlyVersions(versions, versionSpec);
|
||||
}
|
||||
|
||||
versions = versions.sort((a, b) => {
|
||||
if (semver.gt(a, b)) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
});
|
||||
for (let i = versions.length - 1; i >= 0; i--) {
|
||||
const potential: string = versions[i];
|
||||
const satisfied: boolean = semver.satisfies(potential, versionSpec);
|
||||
if (satisfied) {
|
||||
version = potential;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (version) {
|
||||
core.debug(`matched: ${version}`);
|
||||
|
@ -384,11 +426,11 @@ function evaluateVersions(versions: string[], versionSpec: string): string {
|
|||
return version;
|
||||
}
|
||||
|
||||
function getNodejsDistUrl(version: string | semver.SemVer) {
|
||||
function getNodejsDistUrl(version: string) {
|
||||
const prerelease = semver.prerelease(version);
|
||||
if (!prerelease || !prerelease.length) {
|
||||
return 'https://nodejs.org/dist';
|
||||
} else if (prerelease[0] === 'nightly') {
|
||||
} else if (version.includes('nightly')) {
|
||||
return 'https://nodejs.org/download/nightly';
|
||||
} else {
|
||||
return 'https://nodejs.org/download/rc';
|
||||
|
@ -439,7 +481,7 @@ async function queryDistForMatch(
|
|||
});
|
||||
|
||||
// get the latest version that matches the version spec
|
||||
let version: string = evaluateVersions(versions, versionSpec);
|
||||
let version = evaluateVersions(versions, versionSpec);
|
||||
return version;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ export async function run() {
|
|||
// Version is optional. If supplied, install / use from the tool cache
|
||||
// If not supplied then task is still used to setup proxy, auth, etc...
|
||||
//
|
||||
let version = resolveVersionInput();
|
||||
const version = resolveVersionInput();
|
||||
|
||||
let arch = core.getInput('architecture');
|
||||
const cache = core.getInput('cache');
|
||||
|
@ -32,9 +32,9 @@ export async function run() {
|
|||
}
|
||||
|
||||
if (version) {
|
||||
let token = core.getInput('token');
|
||||
let auth = !token || isGhes() ? undefined : `token ${token}`;
|
||||
let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
||||
const token = core.getInput('token');
|
||||
const auth = !token || isGhes() ? undefined : `token ${token}`;
|
||||
const stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
||||
const checkLatest =
|
||||
(core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
|
||||
await installer.getNode(version, stable, checkLatest, auth, arch);
|
||||
|
|
Loading…
Add table
Reference in a new issue