removed test logic in ParseNodeVersionFile for lts and partial matching

This commit is contained in:
La'Kaleigh Harris 2021-10-05 16:54:02 +00:00 committed by GitHub
parent b1ed0c36e7
commit c178bbba23
4 changed files with 312 additions and 373 deletions

View file

@ -1,6 +1,7 @@
import * as core from '@actions/core';
import * as io from '@actions/io';
import * as tc from '@actions/tool-cache';
import * as im from '../src/installer';
import fs from 'fs';
import cp from 'child_process';
import osm = require('os');
@ -9,9 +10,6 @@ import * as main from '../src/main';
import * as auth from '../src/authutil';
let nodeTestManifest = require('./data/versions-manifest.json');
let nodeTestDist = require('./data/node-dist-index.json');
import * as nv from '../src/installer';
describe('setup-node', () => {
let inputs = {} as any;
@ -60,8 +58,8 @@ describe('setup-node', () => {
exSpy = jest.spyOn(tc, 'extractTar');
cacheSpy = jest.spyOn(tc, 'cacheDir');
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
getDistSpy = jest.spyOn(nv, 'getVersionsFromDist');
parseNodeVersionSpy = jest.spyOn(nv, 'parseNodeVersionFile');
getDistSpy = jest.spyOn(im, 'getVersionsFromDist');
parseNodeVersionSpy = jest.spyOn(im, 'parseNodeVersionFile');
// io
whichSpy = jest.spyOn(io, 'which');
@ -77,7 +75,7 @@ describe('setup-node', () => {
getManifestSpy.mockImplementation(
() => <tc.IToolRelease[]>nodeTestManifest
);
getDistSpy.mockImplementation(() => <nv.INodeVersion>nodeTestDist);
getDistSpy.mockImplementation(() => <im.INodeVersion>nodeTestDist);
// writes
cnSpy = jest.spyOn(process.stdout, 'write');
@ -122,7 +120,7 @@ describe('setup-node', () => {
});
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?.length).toBe(23);
});
@ -577,7 +575,7 @@ describe('setup-node', () => {
it('Reads node-version-file if provided', async () => {
// Arrange
const versionSpec = 'v12';
const versionFile = '.nvmrc';
const versionFile = '.immrc';
const expectedVersionSpec = '12';
inputs['node-version-file'] = versionFile;
@ -596,7 +594,8 @@ describe('setup-node', () => {
);
expect(parseNodeVersionSpy).toHaveBeenCalledWith(versionSpec);
expect(logSpy).toHaveBeenCalledWith(
`Resolved ${versionFile} as ${expectedVersionSpec}`);
`Resolved ${versionFile} as ${expectedVersionSpec}`
);
});
describe('LTS version', () => {
beforeEach(() => {
@ -605,7 +604,6 @@ describe('setup-node', () => {
inputs.stable = 'true';
});
it('find latest LTS version and resolve it from local cache (lts/erbium)', async () => {
// arrange
inputs['node-version'] = 'lts/erbium';
@ -825,10 +823,12 @@ describe('node-version-file', () => {
// @actions/core
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
getVersionsFromDist.mockImplementation(() => <nv.INodeVersion>nodeTestDist);
getVersionsFromDist.mockImplementation(
() => <im.INodeVersion>nodeTestDist
);
});
afterEach(() => {
@ -850,56 +850,11 @@ describe('node-version-file', () => {
const versionSpec = '12';
// Act
const result = await nv.parseNodeVersionFile(versionSpec);
// Assert
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);
const result = await im.parseNodeVersionFile(versionSpec);
// Assert
expect(result).toBe(versionSpec);
});
});
});
});

22
dist/setup/index.js vendored
View file

@ -65412,28 +65412,14 @@ function translateArchToDistUrl(arch) {
}
function parseNodeVersionFile(contents) {
return __awaiter(this, void 0, void 0, function* () {
contents = contents.trim();
if (/^v\d/.test(contents)) {
contents = contents.substring(1);
let nodeVersion = contents.trim();
if (/^v\d/.test(nodeVersion)) {
nodeVersion = nodeVersion.substring(1);
}
const nodeVersions = yield getVersionsFromDist();
let nodeVersion;
if (semver.valid(contents) || isPartialMatch(contents)) {
nodeVersion = contents;
}
else {
throw new Error(`Couldn't resolve node version: '${contents}'`);
}
return stripVPrefix(nodeVersion);
return nodeVersion;
});
}
exports.parseNodeVersionFile = parseNodeVersionFile;
function isPartialMatch(version) {
return /^\d+(\.\d+(\.\d+)?)?$/.test(version);
}
function stripVPrefix(version) {
return /^v\d/.test(version) ? version.substring(1) : version;
}
/***/ }),

View file

@ -474,6 +474,3 @@ export async function parseNodeVersionFile(contents: string): Promise<string> {
}
return nodeVersion;
}

View file

@ -46,7 +46,8 @@ 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';
let stable =
(core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
const checkLatest =
(core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
await installer.getNode(version, stable, checkLatest, auth, arch);