mirror of
https://github.com/actions/setup-node.git
synced 2025-04-24 12:22:12 +00:00
removed test logic in ParseNodeVersionFile for lts and partial matching
This commit is contained in:
parent
b1ed0c36e7
commit
c178bbba23
4 changed files with 312 additions and 373 deletions
|
@ -1,6 +1,7 @@
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import * as im from '../src/installer';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import cp from 'child_process';
|
import cp from 'child_process';
|
||||||
import osm = require('os');
|
import osm = require('os');
|
||||||
|
@ -9,9 +10,6 @@ import * as main from '../src/main';
|
||||||
import * as auth from '../src/authutil';
|
import * as auth from '../src/authutil';
|
||||||
let nodeTestManifest = require('./data/versions-manifest.json');
|
let nodeTestManifest = require('./data/versions-manifest.json');
|
||||||
let nodeTestDist = require('./data/node-dist-index.json');
|
let nodeTestDist = require('./data/node-dist-index.json');
|
||||||
import * as nv from '../src/installer';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
describe('setup-node', () => {
|
describe('setup-node', () => {
|
||||||
let inputs = {} as any;
|
let inputs = {} as any;
|
||||||
|
@ -60,8 +58,8 @@ describe('setup-node', () => {
|
||||||
exSpy = jest.spyOn(tc, 'extractTar');
|
exSpy = jest.spyOn(tc, 'extractTar');
|
||||||
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
||||||
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
||||||
getDistSpy = jest.spyOn(nv, 'getVersionsFromDist');
|
getDistSpy = jest.spyOn(im, 'getVersionsFromDist');
|
||||||
parseNodeVersionSpy = jest.spyOn(nv, 'parseNodeVersionFile');
|
parseNodeVersionSpy = jest.spyOn(im, 'parseNodeVersionFile');
|
||||||
|
|
||||||
// io
|
// io
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
whichSpy = jest.spyOn(io, 'which');
|
||||||
|
@ -77,7 +75,7 @@ describe('setup-node', () => {
|
||||||
getManifestSpy.mockImplementation(
|
getManifestSpy.mockImplementation(
|
||||||
() => <tc.IToolRelease[]>nodeTestManifest
|
() => <tc.IToolRelease[]>nodeTestManifest
|
||||||
);
|
);
|
||||||
getDistSpy.mockImplementation(() => <nv.INodeVersion>nodeTestDist);
|
getDistSpy.mockImplementation(() => <im.INodeVersion>nodeTestDist);
|
||||||
|
|
||||||
// writes
|
// writes
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
cnSpy = jest.spyOn(process.stdout, 'write');
|
||||||
|
@ -122,7 +120,7 @@ describe('setup-node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can mock dist versions', async () => {
|
it('can mock dist versions', async () => {
|
||||||
let versions: nv.INodeVersion[] = await nv.getVersionsFromDist();
|
let versions: im.INodeVersion[] = await im.getVersionsFromDist();
|
||||||
expect(versions).toBeDefined();
|
expect(versions).toBeDefined();
|
||||||
expect(versions?.length).toBe(23);
|
expect(versions?.length).toBe(23);
|
||||||
});
|
});
|
||||||
|
@ -577,7 +575,7 @@ describe('setup-node', () => {
|
||||||
it('Reads node-version-file if provided', async () => {
|
it('Reads node-version-file if provided', async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
const versionSpec = 'v12';
|
const versionSpec = 'v12';
|
||||||
const versionFile = '.nvmrc';
|
const versionFile = '.immrc';
|
||||||
const expectedVersionSpec = '12';
|
const expectedVersionSpec = '12';
|
||||||
|
|
||||||
inputs['node-version-file'] = versionFile;
|
inputs['node-version-file'] = versionFile;
|
||||||
|
@ -596,7 +594,8 @@ describe('setup-node', () => {
|
||||||
);
|
);
|
||||||
expect(parseNodeVersionSpy).toHaveBeenCalledWith(versionSpec);
|
expect(parseNodeVersionSpy).toHaveBeenCalledWith(versionSpec);
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
expect(logSpy).toHaveBeenCalledWith(
|
||||||
`Resolved ${versionFile} as ${expectedVersionSpec}`);
|
`Resolved ${versionFile} as ${expectedVersionSpec}`
|
||||||
|
);
|
||||||
});
|
});
|
||||||
describe('LTS version', () => {
|
describe('LTS version', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
@ -605,7 +604,6 @@ describe('setup-node', () => {
|
||||||
inputs.stable = 'true';
|
inputs.stable = 'true';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
it('find latest LTS version and resolve it from local cache (lts/erbium)', async () => {
|
it('find latest LTS version and resolve it from local cache (lts/erbium)', async () => {
|
||||||
// arrange
|
// arrange
|
||||||
inputs['node-version'] = 'lts/erbium';
|
inputs['node-version'] = 'lts/erbium';
|
||||||
|
@ -816,19 +814,21 @@ describe('setup-node', () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('node-version-file', () => {
|
describe('node-version-file', () => {
|
||||||
let getVersionsFromDist: jest.SpyInstance;
|
let getVersionsFromDist: jest.SpyInstance;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
// @actions/core
|
// @actions/core
|
||||||
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
||||||
|
|
||||||
getVersionsFromDist = jest.spyOn(nv, 'getVersionsFromDist');
|
getVersionsFromDist = jest.spyOn(im, 'getVersionsFromDist');
|
||||||
|
|
||||||
// gets
|
// gets
|
||||||
getVersionsFromDist.mockImplementation(() => <nv.INodeVersion>nodeTestDist);
|
getVersionsFromDist.mockImplementation(
|
||||||
|
() => <im.INodeVersion>nodeTestDist
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -850,56 +850,11 @@ describe('node-version-file', () => {
|
||||||
const versionSpec = '12';
|
const versionSpec = '12';
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = await nv.parseNodeVersionFile(versionSpec);
|
const result = await im.parseNodeVersionFile(versionSpec);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toBe(versionSpec);
|
expect(result).toBe(versionSpec);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('lts/*', async () => {
|
|
||||||
// Arrange
|
|
||||||
const versionSpec = 'lts/*';
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = await nv.parseNodeVersionFile(versionSpec);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toMatch(/^\d+\.\d+\.\d+$/);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('lts/erbium', async () => {
|
|
||||||
// Arrange
|
|
||||||
const versionSpec = 'lts/*';
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = await nv.parseNodeVersionFile(versionSpec);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toMatch(/\d\.\d\.\d/);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('partial syntax like 12', async () => {
|
|
||||||
// Arrange
|
|
||||||
const versionSpec = '12';
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = await nv.parseNodeVersionFile(versionSpec);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toBe(versionSpec);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('partial syntax like 12.16', async () => {
|
|
||||||
// Arrange
|
|
||||||
const versionSpec = '12.16';
|
|
||||||
|
|
||||||
// Act
|
|
||||||
const result = await nv.parseNodeVersionFile(versionSpec);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(result).toBe(versionSpec);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
|
||||||
|
|
22
dist/setup/index.js
vendored
22
dist/setup/index.js
vendored
|
@ -65412,28 +65412,14 @@ function translateArchToDistUrl(arch) {
|
||||||
}
|
}
|
||||||
function parseNodeVersionFile(contents) {
|
function parseNodeVersionFile(contents) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
contents = contents.trim();
|
let nodeVersion = contents.trim();
|
||||||
if (/^v\d/.test(contents)) {
|
if (/^v\d/.test(nodeVersion)) {
|
||||||
contents = contents.substring(1);
|
nodeVersion = nodeVersion.substring(1);
|
||||||
}
|
}
|
||||||
const nodeVersions = yield getVersionsFromDist();
|
return nodeVersion;
|
||||||
let nodeVersion;
|
|
||||||
if (semver.valid(contents) || isPartialMatch(contents)) {
|
|
||||||
nodeVersion = contents;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new Error(`Couldn't resolve node version: '${contents}'`);
|
|
||||||
}
|
|
||||||
return stripVPrefix(nodeVersion);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.parseNodeVersionFile = parseNodeVersionFile;
|
exports.parseNodeVersionFile = parseNodeVersionFile;
|
||||||
function isPartialMatch(version) {
|
|
||||||
return /^\d+(\.\d+(\.\d+)?)?$/.test(version);
|
|
||||||
}
|
|
||||||
function stripVPrefix(version) {
|
|
||||||
return /^v\d/.test(version) ? version.substring(1) : version;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
|
@ -474,6 +474,3 @@ export async function parseNodeVersionFile(contents: string): Promise<string> {
|
||||||
}
|
}
|
||||||
return nodeVersion;
|
return nodeVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,8 @@ export async function run() {
|
||||||
if (version) {
|
if (version) {
|
||||||
let token = core.getInput('token');
|
let token = core.getInput('token');
|
||||||
let auth = !token || isGhes() ? undefined : `token ${token}`;
|
let auth = !token || isGhes() ? undefined : `token ${token}`;
|
||||||
let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
let stable =
|
||||||
|
(core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
||||||
const checkLatest =
|
const checkLatest =
|
||||||
(core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
|
(core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
|
||||||
await installer.getNode(version, stable, checkLatest, auth, arch);
|
await installer.getNode(version, stable, checkLatest, auth, arch);
|
||||||
|
|
Loading…
Add table
Reference in a new issue