mirror of
https://github.com/actions/setup-node.git
synced 2025-08-15 07:15:05 +00:00
fix: remove test dir
This commit is contained in:
parent
7409fd9679
commit
2e94079021
@ -1,10 +0,0 @@
|
|||||||
Files located in data directory are used only for testing purposes.
|
|
||||||
|
|
||||||
|
|
||||||
## Here the list of files in the data directory
|
|
||||||
- `.nvmrc`, `.tools-versions` and `package.json` are used to test node-version-file logic
|
|
||||||
- `package-lock.json`, `pnpm-lock.yaml` and `yarn.lock` are used to test cache logic
|
|
||||||
- `versions-manifest.json` is used for unit testing to check downloading Node.js versions from the node-versions repository.
|
|
||||||
- `node-dist-index.json` is used for unit testing to check downloading Node.js versions from the official site. The file was constructed from https://nodejs.org/dist/index.json
|
|
||||||
- `node-rc-index.json` is used for unit testing to check downloading Node.js rc versions from the official site. The file was constructed from https://nodejs.org/download/rc/index.json
|
|
||||||
- `node-nightly-index.json` is used for unit testing to check downloading Node.js nightly builds from the official site. The file was constructed from https://nodejs.org/download/nightly/index.json
|
|
@ -1,213 +0,0 @@
|
|||||||
import os from 'os';
|
|
||||||
import fs from 'fs';
|
|
||||||
import * as path from 'path';
|
|
||||||
import * as core from '@actions/core';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
import * as auth from '../src/authutil';
|
|
||||||
import * as cacheUtils from '../src/cache-utils';
|
|
||||||
|
|
||||||
let rcFile: string;
|
|
||||||
|
|
||||||
describe('authutil tests', () => {
|
|
||||||
const _runnerDir = path.join(__dirname, 'runner');
|
|
||||||
|
|
||||||
let cnSpy: jest.SpyInstance;
|
|
||||||
let logSpy: jest.SpyInstance;
|
|
||||||
let dbgSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeAll(async () => {
|
|
||||||
const randPath = path.join(Math.random().toString(36).substring(7));
|
|
||||||
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
|
||||||
process.env['GITHUB_ENV'] = ''; // Stub out Environment file functionality so we can verify it writes to standard out (toolkit is backwards compatible)
|
|
||||||
const tempDir = path.join(_runnerDir, randPath, 'temp');
|
|
||||||
await io.rmRF(tempDir);
|
|
||||||
await io.mkdirP(tempDir);
|
|
||||||
process.env['GITHUB_REPOSITORY'] = 'OwnerName/repo';
|
|
||||||
process.env['RUNNER_TEMP'] = tempDir;
|
|
||||||
rcFile = path.join(tempDir, '.npmrc');
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
await io.rmRF(rcFile);
|
|
||||||
// if (fs.existsSync(rcFile)) {
|
|
||||||
// fs.unlinkSync(rcFile);
|
|
||||||
// }
|
|
||||||
process.env['INPUT_SCOPE'] = '';
|
|
||||||
|
|
||||||
// writes
|
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
|
||||||
logSpy = jest.spyOn(console, 'log');
|
|
||||||
dbgSpy = jest.spyOn(core, 'debug');
|
|
||||||
cnSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('write:' + line + '\n');
|
|
||||||
});
|
|
||||||
logSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + line + '\n');
|
|
||||||
});
|
|
||||||
dbgSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to see debug output
|
|
||||||
// process.stderr.write(msg + '\n');
|
|
||||||
});
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
function dbg(message: string) {
|
|
||||||
process.stderr.write('dbg::' + message + '::\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
if (_runnerDir) {
|
|
||||||
await io.rmRF(_runnerDir);
|
|
||||||
}
|
|
||||||
console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
function readRcFile(rcFile: string) {
|
|
||||||
const rc = {};
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
for (const line of contents.split(os.EOL)) {
|
|
||||||
const parts = line.split('=');
|
|
||||||
if (parts.length == 2) {
|
|
||||||
rc[parts[0].trim()] = parts[1].trim();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
it('Sets up npmrc for npmjs', async () => {
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'false');
|
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Appends trailing slash to registry', async () => {
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org', 'false');
|
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Configures scoped npm registries', async () => {
|
|
||||||
process.env['INPUT_SCOPE'] = 'myScope';
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org', 'false');
|
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['@myscope:registry']).toBe('https://registry.npmjs.org/');
|
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Automatically configures GPR scope', async () => {
|
|
||||||
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/');
|
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Sets up npmrc for always-auth true', async () => {
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
|
||||||
expect(rc['always-auth']).toBe('true');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('is already set the NODE_AUTH_TOKEN export it', async () => {
|
|
||||||
process.env.NODE_AUTH_TOKEN = 'foobar';
|
|
||||||
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/');
|
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
expect(process.env.NODE_AUTH_TOKEN).toEqual('foobar');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should overwrite non-scoped with non-scoped', async () => {
|
|
||||||
fs.writeFileSync(rcFile, 'registry=NNN');
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should overwrite only non-scoped', async () => {
|
|
||||||
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`@myscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should add non-scoped to scoped', async () => {
|
|
||||||
fs.writeFileSync(rcFile, '@myscope:registry=NNN');
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`@myscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should overwrite scoped with scoped', async () => {
|
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
|
||||||
fs.writeFileSync(rcFile, `@myscope:registry=NNN`);
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should overwrite only scoped', async () => {
|
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
|
||||||
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should add scoped to non-scoped', async () => {
|
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
|
||||||
fs.writeFileSync(rcFile, `registry=MMM`);
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should overwrite only one scoped', async () => {
|
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
|
||||||
fs.writeFileSync(
|
|
||||||
rcFile,
|
|
||||||
`@otherscope:registry=NNN${os.EOL}@myscope:registry=MMM`
|
|
||||||
);
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`@otherscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('configAuthentication should add scoped to another scoped', async () => {
|
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
|
||||||
fs.writeFileSync(rcFile, `@otherscope:registry=MMM`);
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
|
||||||
expect(contents).toBe(
|
|
||||||
`@otherscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,180 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import * as path from 'path';
|
|
||||||
import * as glob from '@actions/glob';
|
|
||||||
|
|
||||||
import * as utils from '../src/cache-utils';
|
|
||||||
import {restoreCache} from '../src/cache-restore';
|
|
||||||
|
|
||||||
describe('cache-restore', () => {
|
|
||||||
process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data');
|
|
||||||
if (!process.env.RUNNER_OS) {
|
|
||||||
process.env.RUNNER_OS = 'Linux';
|
|
||||||
}
|
|
||||||
const platform = process.env.RUNNER_OS;
|
|
||||||
const commonPath = '/some/random/path';
|
|
||||||
const npmCachePath = `${commonPath}/npm`;
|
|
||||||
const pnpmCachePath = `${commonPath}/pnpm`;
|
|
||||||
const yarn1CachePath = `${commonPath}/yarn1`;
|
|
||||||
const yarn2CachePath = `${commonPath}/yarn2`;
|
|
||||||
const yarnFileHash =
|
|
||||||
'b8a0bae5243251f7c07dd52d1f78ff78281dfefaded700a176261b6b54fa245b';
|
|
||||||
const npmFileHash =
|
|
||||||
'abf7c9b306a3149dcfba4673e2362755503bcceaab46f0e4e6fee0ade493e20c';
|
|
||||||
const pnpmFileHash =
|
|
||||||
'26309058093e84713f38869c50cf1cee9b08155ede874ec1b44ce3fca8c68c70';
|
|
||||||
const cachesObject = {
|
|
||||||
[npmCachePath]: npmFileHash,
|
|
||||||
[pnpmCachePath]: pnpmFileHash,
|
|
||||||
[yarn1CachePath]: yarnFileHash,
|
|
||||||
[yarn2CachePath]: yarnFileHash
|
|
||||||
};
|
|
||||||
|
|
||||||
function findCacheFolder(command: string) {
|
|
||||||
switch (command) {
|
|
||||||
case 'npm config get cache':
|
|
||||||
return npmCachePath;
|
|
||||||
case 'pnpm store path --silent':
|
|
||||||
return pnpmCachePath;
|
|
||||||
case 'yarn cache dir':
|
|
||||||
return yarn1CachePath;
|
|
||||||
case 'yarn config get cacheFolder':
|
|
||||||
return yarn2CachePath;
|
|
||||||
default:
|
|
||||||
return 'packge/not/found';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let saveStateSpy: jest.SpyInstance;
|
|
||||||
let infoSpy: jest.SpyInstance;
|
|
||||||
let debugSpy: jest.SpyInstance;
|
|
||||||
let setOutputSpy: jest.SpyInstance;
|
|
||||||
let getCommandOutputSpy: jest.SpyInstance;
|
|
||||||
let restoreCacheSpy: jest.SpyInstance;
|
|
||||||
let hashFilesSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
// core
|
|
||||||
infoSpy = jest.spyOn(core, 'info');
|
|
||||||
infoSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
debugSpy = jest.spyOn(core, 'debug');
|
|
||||||
debugSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
setOutputSpy = jest.spyOn(core, 'setOutput');
|
|
||||||
setOutputSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
saveStateSpy = jest.spyOn(core, 'saveState');
|
|
||||||
saveStateSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
// glob
|
|
||||||
hashFilesSpy = jest.spyOn(glob, 'hashFiles');
|
|
||||||
hashFilesSpy.mockImplementation((pattern: string) => {
|
|
||||||
if (pattern.includes('package-lock.json')) {
|
|
||||||
return npmFileHash;
|
|
||||||
} else if (pattern.includes('pnpm-lock.yaml')) {
|
|
||||||
return pnpmFileHash;
|
|
||||||
} else if (pattern.includes('yarn.lock')) {
|
|
||||||
return yarnFileHash;
|
|
||||||
} else {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// cache
|
|
||||||
restoreCacheSpy = jest.spyOn(cache, 'restoreCache');
|
|
||||||
restoreCacheSpy.mockImplementation(
|
|
||||||
(cachePaths: Array<string>, key: string) => {
|
|
||||||
if (!cachePaths || cachePaths.length === 0) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
const cachPath = cachePaths[0];
|
|
||||||
const fileHash = cachesObject[cachPath];
|
|
||||||
|
|
||||||
if (key.includes(fileHash)) {
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// cache-utils
|
|
||||||
getCommandOutputSpy = jest.spyOn(utils, 'getCommandOutput');
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Validate provided package manager', () => {
|
|
||||||
it.each([['npm7'], ['npm6'], ['pnpm6'], ['yarn1'], ['yarn2'], ['random']])(
|
|
||||||
'Throw an error because %s is not supported',
|
|
||||||
async packageManager => {
|
|
||||||
await expect(restoreCache(packageManager, '')).rejects.toThrow(
|
|
||||||
`Caching for '${packageManager}' is not supported`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Restore dependencies', () => {
|
|
||||||
it.each([
|
|
||||||
['yarn', '2.1.2', yarnFileHash],
|
|
||||||
['yarn', '1.2.3', yarnFileHash],
|
|
||||||
['npm', '', npmFileHash],
|
|
||||||
['pnpm', '', pnpmFileHash]
|
|
||||||
])(
|
|
||||||
'restored dependencies for %s',
|
|
||||||
async (packageManager, toolVersion, fileHash) => {
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) => {
|
|
||||||
if (command.includes('version')) {
|
|
||||||
return toolVersion;
|
|
||||||
} else {
|
|
||||||
return findCacheFolder(command);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
await restoreCache(packageManager, '');
|
|
||||||
expect(hashFilesSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
|
||||||
`Cache restored from key: node-cache-${platform}-${packageManager}-${fileHash}`
|
|
||||||
);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`${packageManager} cache is not found`
|
|
||||||
);
|
|
||||||
expect(setOutputSpy).toHaveBeenCalledWith('cache-hit', true);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Dependencies changed', () => {
|
|
||||||
it.each([
|
|
||||||
['yarn', '2.1.2', yarnFileHash],
|
|
||||||
['yarn', '1.2.3', yarnFileHash],
|
|
||||||
['npm', '', npmFileHash],
|
|
||||||
['pnpm', '', pnpmFileHash]
|
|
||||||
])(
|
|
||||||
'dependencies are changed %s',
|
|
||||||
async (packageManager, toolVersion, fileHash) => {
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) => {
|
|
||||||
if (command.includes('version')) {
|
|
||||||
return toolVersion;
|
|
||||||
} else {
|
|
||||||
return findCacheFolder(command);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
restoreCacheSpy.mockImplementationOnce(() => undefined);
|
|
||||||
await restoreCache(packageManager, '');
|
|
||||||
expect(hashFilesSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
|
||||||
`${packageManager} cache is not found`
|
|
||||||
);
|
|
||||||
expect(setOutputSpy).toHaveBeenCalledWith('cache-hit', false);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,392 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import * as glob from '@actions/glob';
|
|
||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
|
|
||||||
import * as utils from '../src/cache-utils';
|
|
||||||
import {run} from '../src/cache-save';
|
|
||||||
import {State} from '../src/constants';
|
|
||||||
|
|
||||||
describe('run', () => {
|
|
||||||
const yarnFileHash =
|
|
||||||
'b8a0bae5243251f7c07dd52d1f78ff78281dfefaded700a176261b6b54fa245b';
|
|
||||||
const npmFileHash =
|
|
||||||
'abf7c9b306a3149dcfba4673e2362755503bcceaab46f0e4e6fee0ade493e20c';
|
|
||||||
const pnpmFileHash =
|
|
||||||
'26309058093e84713f38869c50cf1cee9b08155ede874ec1b44ce3fca8c68c70';
|
|
||||||
const commonPath = '/some/random/path';
|
|
||||||
process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data');
|
|
||||||
|
|
||||||
const inputs = {} as any;
|
|
||||||
|
|
||||||
let getInputSpy: jest.SpyInstance;
|
|
||||||
let infoSpy: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let debugSpy: jest.SpyInstance;
|
|
||||||
let setFailedSpy: jest.SpyInstance;
|
|
||||||
let getStateSpy: jest.SpyInstance;
|
|
||||||
let saveCacheSpy: jest.SpyInstance;
|
|
||||||
let getCommandOutputSpy: jest.SpyInstance;
|
|
||||||
let hashFilesSpy: jest.SpyInstance;
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
getInputSpy = jest.spyOn(core, 'getInput');
|
|
||||||
getInputSpy.mockImplementation((name: string) => inputs[name]);
|
|
||||||
|
|
||||||
infoSpy = jest.spyOn(core, 'info');
|
|
||||||
infoSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
warningSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
setFailedSpy = jest.spyOn(core, 'setFailed');
|
|
||||||
setFailedSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
debugSpy = jest.spyOn(core, 'debug');
|
|
||||||
debugSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
getStateSpy = jest.spyOn(core, 'getState');
|
|
||||||
|
|
||||||
// cache
|
|
||||||
saveCacheSpy = jest.spyOn(cache, 'saveCache');
|
|
||||||
saveCacheSpy.mockImplementation(() => undefined);
|
|
||||||
|
|
||||||
// glob
|
|
||||||
hashFilesSpy = jest.spyOn(glob, 'hashFiles');
|
|
||||||
hashFilesSpy.mockImplementation((pattern: string) => {
|
|
||||||
if (pattern.includes('package-lock.json')) {
|
|
||||||
return npmFileHash;
|
|
||||||
} else if (pattern.includes('yarn.lock')) {
|
|
||||||
return yarnFileHash;
|
|
||||||
} else {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
existsSpy.mockImplementation(() => true);
|
|
||||||
|
|
||||||
// utils
|
|
||||||
getCommandOutputSpy = jest.spyOn(utils, 'getCommandOutput');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
existsSpy.mockRestore();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Package manager validation', () => {
|
|
||||||
it('Package manager is not provided, skip caching', async () => {
|
|
||||||
inputs['cache'] = '';
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
expect(infoSpy).not.toHaveBeenCalled();
|
|
||||||
expect(saveCacheSpy).not.toHaveBeenCalled();
|
|
||||||
expect(debugSpy).toHaveBeenLastCalledWith(
|
|
||||||
"Caching for '' is not supported"
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Package manager is not valid, skip caching', async () => {
|
|
||||||
inputs['cache'] = 'yarn3';
|
|
||||||
getStateSpy.mockImplementation(key =>
|
|
||||||
key === State.CachePackageManager ? inputs['cache'] : ''
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
expect(infoSpy).not.toHaveBeenCalled();
|
|
||||||
expect(saveCacheSpy).not.toHaveBeenCalled();
|
|
||||||
expect(debugSpy).toHaveBeenLastCalledWith(
|
|
||||||
"Caching for 'yarn3' is not supported"
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Validate unchanged cache is not saved', () => {
|
|
||||||
it('should not save cache for yarn1', async () => {
|
|
||||||
inputs['cache'] = 'yarn';
|
|
||||||
getStateSpy.mockImplementation(key =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CachePrimaryKey || key === State.CacheMatchedKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${yarnFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not save cache for yarn2', async () => {
|
|
||||||
inputs['cache'] = 'yarn';
|
|
||||||
getStateSpy.mockImplementation(key =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CachePrimaryKey || key === State.CacheMatchedKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${yarnFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not save cache for npm', async () => {
|
|
||||||
inputs['cache'] = 'npm';
|
|
||||||
getStateSpy.mockImplementation(key =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CachePrimaryKey || key === State.CacheMatchedKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
getCommandOutputSpy.mockImplementationOnce(() => `${commonPath}/npm`);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not save cache for pnpm', async () => {
|
|
||||||
inputs['cache'] = 'pnpm';
|
|
||||||
getStateSpy.mockImplementation(key =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CachePrimaryKey || key === State.CacheMatchedKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('action saves the cache', () => {
|
|
||||||
it('saves cache from yarn 1', async () => {
|
|
||||||
inputs['cache'] = 'yarn';
|
|
||||||
getStateSpy.mockImplementation((key: string) =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CacheMatchedKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePrimaryKey
|
|
||||||
? npmFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${yarnFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(saveCacheSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenLastCalledWith(
|
|
||||||
`Cache saved with the key: ${npmFileHash}`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('saves cache from yarn 2', async () => {
|
|
||||||
inputs['cache'] = 'yarn';
|
|
||||||
getStateSpy.mockImplementation((key: string) =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CacheMatchedKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePrimaryKey
|
|
||||||
? npmFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${yarnFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(saveCacheSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenLastCalledWith(
|
|
||||||
`Cache saved with the key: ${npmFileHash}`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('saves cache from npm', async () => {
|
|
||||||
inputs['cache'] = 'npm';
|
|
||||||
getStateSpy.mockImplementation((key: string) =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CacheMatchedKey
|
|
||||||
? npmFileHash
|
|
||||||
: key === State.CachePrimaryKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${npmFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(saveCacheSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenLastCalledWith(
|
|
||||||
`Cache saved with the key: ${yarnFileHash}`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('saves cache from pnpm', async () => {
|
|
||||||
inputs['cache'] = 'pnpm';
|
|
||||||
getStateSpy.mockImplementation((key: string) =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CacheMatchedKey
|
|
||||||
? pnpmFileHash
|
|
||||||
: key === State.CachePrimaryKey
|
|
||||||
? npmFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${pnpmFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(saveCacheSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenLastCalledWith(
|
|
||||||
`Cache saved with the key: ${npmFileHash}`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('save with -1 cacheId , should not fail workflow', async () => {
|
|
||||||
inputs['cache'] = 'npm';
|
|
||||||
getStateSpy.mockImplementation((key: string) =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CacheMatchedKey
|
|
||||||
? npmFileHash
|
|
||||||
: key === State.CachePrimaryKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
saveCacheSpy.mockImplementation(() => {
|
|
||||||
return -1;
|
|
||||||
});
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${npmFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(saveCacheSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).not.toHaveBeenLastCalledWith(
|
|
||||||
`Cache saved with the key: ${yarnFileHash}`
|
|
||||||
);
|
|
||||||
expect(setFailedSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('saves with error from toolkit, should fail workflow', async () => {
|
|
||||||
inputs['cache'] = 'npm';
|
|
||||||
getStateSpy.mockImplementation((key: string) =>
|
|
||||||
key === State.CachePackageManager
|
|
||||||
? inputs['cache']
|
|
||||||
: key === State.CacheMatchedKey
|
|
||||||
? npmFileHash
|
|
||||||
: key === State.CachePrimaryKey
|
|
||||||
? yarnFileHash
|
|
||||||
: key === State.CachePaths
|
|
||||||
? '["/foo/bar"]'
|
|
||||||
: 'not expected'
|
|
||||||
);
|
|
||||||
saveCacheSpy.mockImplementation(() => {
|
|
||||||
throw new cache.ValidationError('Validation failed');
|
|
||||||
});
|
|
||||||
|
|
||||||
await run();
|
|
||||||
|
|
||||||
expect(getInputSpy).not.toHaveBeenCalled();
|
|
||||||
expect(getStateSpy).toHaveBeenCalledTimes(4);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(debugSpy).toHaveBeenCalledTimes(0);
|
|
||||||
expect(infoSpy).not.toHaveBeenCalledWith(
|
|
||||||
`Cache hit occurred on the primary key ${npmFileHash}, not saving cache.`
|
|
||||||
);
|
|
||||||
expect(saveCacheSpy).toHaveBeenCalled();
|
|
||||||
expect(setFailedSpy).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,363 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import path from 'path';
|
|
||||||
import * as utils from '../src/cache-utils';
|
|
||||||
import {
|
|
||||||
PackageManagerInfo,
|
|
||||||
isCacheFeatureAvailable,
|
|
||||||
supportedPackageManagers,
|
|
||||||
getCommandOutput,
|
|
||||||
resetProjectDirectoriesMemoized
|
|
||||||
} from '../src/cache-utils';
|
|
||||||
import fs from 'fs';
|
|
||||||
import * as cacheUtils from '../src/cache-utils';
|
|
||||||
import * as glob from '@actions/glob';
|
|
||||||
import {Globber} from '@actions/glob';
|
|
||||||
import {MockGlobber} from './mock/glob-mock';
|
|
||||||
|
|
||||||
describe('cache-utils', () => {
|
|
||||||
const versionYarn1 = '1.2.3';
|
|
||||||
|
|
||||||
let debugSpy: jest.SpyInstance;
|
|
||||||
let getCommandOutputSpy: jest.SpyInstance;
|
|
||||||
let isFeatureAvailable: jest.SpyInstance;
|
|
||||||
let info: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let fsRealPathSyncSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
console.log('::stop-commands::stoptoken');
|
|
||||||
process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data');
|
|
||||||
debugSpy = jest.spyOn(core, 'debug');
|
|
||||||
debugSpy.mockImplementation(msg => {});
|
|
||||||
|
|
||||||
info = jest.spyOn(core, 'info');
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
|
|
||||||
isFeatureAvailable = jest.spyOn(cache, 'isFeatureAvailable');
|
|
||||||
|
|
||||||
getCommandOutputSpy = jest.spyOn(utils, 'getCommandOutput');
|
|
||||||
|
|
||||||
fsRealPathSyncSpy = jest.spyOn(fs, 'realpathSync');
|
|
||||||
fsRealPathSyncSpy.mockImplementation(dirName => {
|
|
||||||
return dirName;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
//jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
console.log('::stoptoken::');
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
describe('getPackageManagerInfo', () => {
|
|
||||||
it.each<[string, PackageManagerInfo | null]>([
|
|
||||||
['npm', utils.supportedPackageManagers.npm],
|
|
||||||
['pnpm', utils.supportedPackageManagers.pnpm],
|
|
||||||
['yarn', utils.supportedPackageManagers.yarn],
|
|
||||||
['yarn1', null],
|
|
||||||
['yarn2', null],
|
|
||||||
['npm7', null]
|
|
||||||
])('getPackageManagerInfo for %s is %o', async (packageManager, result) => {
|
|
||||||
getCommandOutputSpy.mockImplementationOnce(() => versionYarn1);
|
|
||||||
await expect(utils.getPackageManagerInfo(packageManager)).resolves.toBe(
|
|
||||||
result
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('isCacheFeatureAvailable for GHES is false', () => {
|
|
||||||
isFeatureAvailable.mockImplementation(() => false);
|
|
||||||
process.env['GITHUB_SERVER_URL'] = 'https://www.test.com';
|
|
||||||
|
|
||||||
expect(isCacheFeatureAvailable()).toBeFalsy();
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
'Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('isCacheFeatureAvailable for GHES has an interhal error', () => {
|
|
||||||
isFeatureAvailable.mockImplementation(() => false);
|
|
||||||
process.env['GITHUB_SERVER_URL'] = '';
|
|
||||||
isCacheFeatureAvailable();
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
'The runner was not able to contact the cache service. Caching will be skipped'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('isCacheFeatureAvailable for GHES is available', () => {
|
|
||||||
isFeatureAvailable.mockImplementation(() => true);
|
|
||||||
|
|
||||||
expect(isCacheFeatureAvailable()).toStrictEqual(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
process.env['GITHUB_SERVER_URL'] = '';
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getCacheDirectoriesPaths', () => {
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
let lstatSpy: jest.SpyInstance;
|
|
||||||
let globCreateSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
existsSpy.mockImplementation(() => true);
|
|
||||||
|
|
||||||
lstatSpy = jest.spyOn(fs, 'lstatSync');
|
|
||||||
lstatSpy.mockImplementation(arg => ({
|
|
||||||
isDirectory: () => true
|
|
||||||
}));
|
|
||||||
|
|
||||||
globCreateSpy = jest.spyOn(glob, 'create');
|
|
||||||
|
|
||||||
globCreateSpy.mockImplementation(
|
|
||||||
(pattern: string): Promise<Globber> =>
|
|
||||||
MockGlobber.create(['/foo', '/bar'])
|
|
||||||
);
|
|
||||||
|
|
||||||
resetProjectDirectoriesMemoized();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
existsSpy.mockRestore();
|
|
||||||
lstatSpy.mockRestore();
|
|
||||||
globCreateSpy.mockRestore();
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[supportedPackageManagers.npm, ''],
|
|
||||||
[supportedPackageManagers.npm, '/dir/file.lock'],
|
|
||||||
[supportedPackageManagers.npm, '/**/file.lock'],
|
|
||||||
[supportedPackageManagers.pnpm, ''],
|
|
||||||
[supportedPackageManagers.pnpm, '/dir/file.lock'],
|
|
||||||
[supportedPackageManagers.pnpm, '/**/file.lock']
|
|
||||||
])(
|
|
||||||
'getCacheDirectoriesPaths should return one dir for non yarn',
|
|
||||||
async (packageManagerInfo, cacheDependency) => {
|
|
||||||
getCommandOutputSpy.mockImplementation(() => 'foo');
|
|
||||||
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
packageManagerInfo,
|
|
||||||
cacheDependency
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual(['foo']);
|
|
||||||
// to do not call for a version
|
|
||||||
// call once for get cache folder
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(1);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it('getCacheDirectoriesPaths should return one dir for yarn without cacheDependency', async () => {
|
|
||||||
getCommandOutputSpy.mockImplementation(() => 'foo');
|
|
||||||
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
supportedPackageManagers.yarn,
|
|
||||||
''
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual(['foo']);
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[supportedPackageManagers.npm, ''],
|
|
||||||
[supportedPackageManagers.npm, '/dir/file.lock'],
|
|
||||||
[supportedPackageManagers.npm, '/**/file.lock'],
|
|
||||||
[supportedPackageManagers.pnpm, ''],
|
|
||||||
[supportedPackageManagers.pnpm, '/dir/file.lock'],
|
|
||||||
[supportedPackageManagers.pnpm, '/**/file.lock'],
|
|
||||||
[supportedPackageManagers.yarn, ''],
|
|
||||||
[supportedPackageManagers.yarn, '/dir/file.lock'],
|
|
||||||
[supportedPackageManagers.yarn, '/**/file.lock']
|
|
||||||
])(
|
|
||||||
'getCacheDirectoriesPaths should throw for getCommandOutput returning empty',
|
|
||||||
async (packageManagerInfo, cacheDependency) => {
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) =>
|
|
||||||
// return empty string to indicate getCacheFolderPath failed
|
|
||||||
// --version still works
|
|
||||||
command.includes('version') ? '1.' : ''
|
|
||||||
);
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
cacheUtils.getCacheDirectories(packageManagerInfo, cacheDependency)
|
|
||||||
).rejects.toThrow(); //'Could not get cache folder path for /dir');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[supportedPackageManagers.yarn, '/dir/file.lock'],
|
|
||||||
[supportedPackageManagers.yarn, '/**/file.lock']
|
|
||||||
])(
|
|
||||||
'getCacheDirectoriesPaths should nothrow in case of having not directories',
|
|
||||||
async (packageManagerInfo, cacheDependency) => {
|
|
||||||
lstatSpy.mockImplementation(arg => ({
|
|
||||||
isDirectory: () => false
|
|
||||||
}));
|
|
||||||
|
|
||||||
await cacheUtils.getCacheDirectories(
|
|
||||||
packageManagerInfo,
|
|
||||||
cacheDependency
|
|
||||||
);
|
|
||||||
expect(warningSpy).toHaveBeenCalledTimes(1);
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
`No existing directories found containing cache-dependency-path="${cacheDependency}"`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each(['1.1.1', '2.2.2'])(
|
|
||||||
'getCacheDirectoriesPaths yarn v%s should return one dir without cacheDependency',
|
|
||||||
async version => {
|
|
||||||
getCommandOutputSpy.mockImplementationOnce(() => version);
|
|
||||||
getCommandOutputSpy.mockImplementationOnce(() => `foo${version}`);
|
|
||||||
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
supportedPackageManagers.yarn,
|
|
||||||
''
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual([`foo${version}`]);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each(['1.1.1', '2.2.2'])(
|
|
||||||
'getCacheDirectoriesPaths yarn v%s should return 2 dirs with globbed cacheDependency',
|
|
||||||
async version => {
|
|
||||||
let dirNo = 1;
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) =>
|
|
||||||
command.includes('version') ? version : `file_${version}_${dirNo++}`
|
|
||||||
);
|
|
||||||
globCreateSpy.mockImplementation(
|
|
||||||
(pattern: string): Promise<Globber> =>
|
|
||||||
MockGlobber.create(['/tmp/dir1/file', '/tmp/dir2/file'])
|
|
||||||
);
|
|
||||||
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
supportedPackageManagers.yarn,
|
|
||||||
'/tmp/**/file'
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual([`file_${version}_1`, `file_${version}_2`]);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each(['1.1.1', '2.2.2'])(
|
|
||||||
'getCacheDirectoriesPaths yarn v%s should return 2 dirs with globbed cacheDependency expanding to duplicates',
|
|
||||||
async version => {
|
|
||||||
let dirNo = 1;
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) =>
|
|
||||||
command.includes('version') ? version : `file_${version}_${dirNo++}`
|
|
||||||
);
|
|
||||||
globCreateSpy.mockImplementation(
|
|
||||||
(pattern: string): Promise<Globber> =>
|
|
||||||
MockGlobber.create([
|
|
||||||
'/tmp/dir1/file',
|
|
||||||
'/tmp/dir2/file',
|
|
||||||
'/tmp/dir1/file'
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
supportedPackageManagers.yarn,
|
|
||||||
'/tmp/**/file'
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual([`file_${version}_1`, `file_${version}_2`]);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each(['1.1.1', '2.2.2'])(
|
|
||||||
'getCacheDirectoriesPaths yarn v%s should return 2 uniq dirs despite duplicate cache directories',
|
|
||||||
async version => {
|
|
||||||
let dirNo = 1;
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) =>
|
|
||||||
command.includes('version')
|
|
||||||
? version
|
|
||||||
: `file_${version}_${dirNo++ % 2}`
|
|
||||||
);
|
|
||||||
globCreateSpy.mockImplementation(
|
|
||||||
(pattern: string): Promise<Globber> =>
|
|
||||||
MockGlobber.create([
|
|
||||||
'/tmp/dir1/file',
|
|
||||||
'/tmp/dir2/file',
|
|
||||||
'/tmp/dir3/file'
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
supportedPackageManagers.yarn,
|
|
||||||
'/tmp/**/file'
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual([`file_${version}_1`, `file_${version}_0`]);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledTimes(6);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
|
||||||
'yarn --version',
|
|
||||||
'/tmp/dir1'
|
|
||||||
);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
|
||||||
'yarn --version',
|
|
||||||
'/tmp/dir2'
|
|
||||||
);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
|
||||||
'yarn --version',
|
|
||||||
'/tmp/dir3'
|
|
||||||
);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
|
||||||
version.startsWith('1.')
|
|
||||||
? 'yarn cache dir'
|
|
||||||
: 'yarn config get cacheFolder',
|
|
||||||
'/tmp/dir1'
|
|
||||||
);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
|
||||||
version.startsWith('1.')
|
|
||||||
? 'yarn cache dir'
|
|
||||||
: 'yarn config get cacheFolder',
|
|
||||||
'/tmp/dir2'
|
|
||||||
);
|
|
||||||
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
|
||||||
version.startsWith('1.')
|
|
||||||
? 'yarn cache dir'
|
|
||||||
: 'yarn config get cacheFolder',
|
|
||||||
'/tmp/dir3'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each(['1.1.1', '2.2.2'])(
|
|
||||||
'getCacheDirectoriesPaths yarn v%s should return 4 dirs with multiple globs',
|
|
||||||
async version => {
|
|
||||||
// simulate wrong indents
|
|
||||||
const cacheDependencyPath = `/tmp/dir1/file
|
|
||||||
/tmp/dir2/file
|
|
||||||
/tmp/**/file
|
|
||||||
`;
|
|
||||||
globCreateSpy.mockImplementation(
|
|
||||||
(pattern: string): Promise<Globber> =>
|
|
||||||
MockGlobber.create([
|
|
||||||
'/tmp/dir1/file',
|
|
||||||
'/tmp/dir2/file',
|
|
||||||
'/tmp/dir3/file',
|
|
||||||
'/tmp/dir4/file'
|
|
||||||
])
|
|
||||||
);
|
|
||||||
let dirNo = 1;
|
|
||||||
getCommandOutputSpy.mockImplementation((command: string) =>
|
|
||||||
command.includes('version') ? version : `file_${version}_${dirNo++}`
|
|
||||||
);
|
|
||||||
const dirs = await cacheUtils.getCacheDirectories(
|
|
||||||
supportedPackageManagers.yarn,
|
|
||||||
cacheDependencyPath
|
|
||||||
);
|
|
||||||
expect(dirs).toEqual([
|
|
||||||
`file_${version}_1`,
|
|
||||||
`file_${version}_2`,
|
|
||||||
`file_${version}_3`,
|
|
||||||
`file_${version}_4`
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,531 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
import * as tc from '@actions/tool-cache';
|
|
||||||
import * as httpm from '@actions/http-client';
|
|
||||||
import * as exec from '@actions/exec';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import fs from 'fs';
|
|
||||||
import cp from 'child_process';
|
|
||||||
import osm from 'os';
|
|
||||||
import path from 'path';
|
|
||||||
import * as main from '../src/main';
|
|
||||||
import * as auth from '../src/authutil';
|
|
||||||
import {INodeVersion} from '../src/distributions/base-models';
|
|
||||||
|
|
||||||
import nodeTestManifest from './data/versions-manifest.json';
|
|
||||||
import nodeTestDist from './data/node-dist-index.json';
|
|
||||||
import nodeTestDistNightly from './data/node-nightly-index.json';
|
|
||||||
import nodeTestDistRc from './data/node-rc-index.json';
|
|
||||||
import nodeV8CanaryTestDist from './data/v8-canary-dist-index.json';
|
|
||||||
|
|
||||||
describe('setup-node', () => {
|
|
||||||
let inputs = {} as any;
|
|
||||||
let os = {} as any;
|
|
||||||
|
|
||||||
let inSpy: jest.SpyInstance;
|
|
||||||
let findSpy: jest.SpyInstance;
|
|
||||||
let findAllVersionsSpy: jest.SpyInstance;
|
|
||||||
let cnSpy: jest.SpyInstance;
|
|
||||||
let logSpy: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let getManifestSpy: jest.SpyInstance;
|
|
||||||
let getDistSpy: jest.SpyInstance;
|
|
||||||
let platSpy: jest.SpyInstance;
|
|
||||||
let archSpy: jest.SpyInstance;
|
|
||||||
let dlSpy: jest.SpyInstance;
|
|
||||||
let exSpy: jest.SpyInstance;
|
|
||||||
let cacheSpy: jest.SpyInstance;
|
|
||||||
let dbgSpy: jest.SpyInstance;
|
|
||||||
let whichSpy: jest.SpyInstance;
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
let readFileSyncSpy: jest.SpyInstance;
|
|
||||||
let mkdirpSpy: jest.SpyInstance;
|
|
||||||
let execSpy: jest.SpyInstance;
|
|
||||||
let authSpy: jest.SpyInstance;
|
|
||||||
let parseNodeVersionSpy: jest.SpyInstance;
|
|
||||||
let isCacheActionAvailable: jest.SpyInstance;
|
|
||||||
let getExecOutputSpy: jest.SpyInstance;
|
|
||||||
let getJsonSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
// @actions/core
|
|
||||||
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
|
||||||
process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
process.env['GITHUB_OUTPUT'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
inputs = {};
|
|
||||||
inSpy = jest.spyOn(core, 'getInput');
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
// node
|
|
||||||
os = {};
|
|
||||||
platSpy = jest.spyOn(osm, 'platform');
|
|
||||||
platSpy.mockImplementation(() => os['platform']);
|
|
||||||
archSpy = jest.spyOn(osm, 'arch');
|
|
||||||
archSpy.mockImplementation(() => os['arch']);
|
|
||||||
execSpy = jest.spyOn(cp, 'execSync');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
findSpy = jest.spyOn(tc, 'find');
|
|
||||||
findAllVersionsSpy = jest.spyOn(tc, 'findAllVersions');
|
|
||||||
dlSpy = jest.spyOn(tc, 'downloadTool');
|
|
||||||
exSpy = jest.spyOn(tc, 'extractTar');
|
|
||||||
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
|
||||||
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
|
||||||
|
|
||||||
// http-client
|
|
||||||
getJsonSpy = jest.spyOn(httpm.HttpClient.prototype, 'getJson');
|
|
||||||
|
|
||||||
// io
|
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
|
||||||
existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
mkdirpSpy = jest.spyOn(io, 'mkdirP');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
isCacheActionAvailable = jest.spyOn(cache, 'isFeatureAvailable');
|
|
||||||
|
|
||||||
// disable authentication portion for installer tests
|
|
||||||
authSpy = jest.spyOn(auth, 'configAuthentication');
|
|
||||||
authSpy.mockImplementation(() => {});
|
|
||||||
|
|
||||||
// gets
|
|
||||||
getManifestSpy.mockImplementation(
|
|
||||||
() => <tc.IToolRelease[]>nodeTestManifest
|
|
||||||
);
|
|
||||||
|
|
||||||
getJsonSpy.mockImplementation(url => {
|
|
||||||
let res: any;
|
|
||||||
if (url.includes('/rc')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistRc;
|
|
||||||
} else if (url.includes('/nightly')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistNightly;
|
|
||||||
} else if (url.includes('/v8-canary')) {
|
|
||||||
res = <INodeVersion[]>nodeV8CanaryTestDist;
|
|
||||||
} else {
|
|
||||||
res = <INodeVersion[]>nodeTestDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {result: res};
|
|
||||||
});
|
|
||||||
|
|
||||||
// writes
|
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
|
||||||
logSpy = jest.spyOn(core, 'info');
|
|
||||||
dbgSpy = jest.spyOn(core, 'debug');
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
cnSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('write:' + line + '\n');
|
|
||||||
});
|
|
||||||
logSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + line + '\n');
|
|
||||||
});
|
|
||||||
dbgSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to see debug output
|
|
||||||
// process.stderr.write(msg + '\n');
|
|
||||||
});
|
|
||||||
warningSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + msg + '\n');
|
|
||||||
});
|
|
||||||
|
|
||||||
// @actions/exec
|
|
||||||
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
|
||||||
getExecOutputSpy.mockImplementation(() => 'v16.15.0');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
//jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Found in cache tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
it('finds version in cache with stable true', async () => {
|
|
||||||
inputs['node-version'] = '20-v8-canary';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
inputs.stable = 'true';
|
|
||||||
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/20.0.0-v8-canary20221103f7e2421e91/x64'
|
|
||||||
);
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(findSpy).toHaveBeenCalledWith(
|
|
||||||
'node',
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'x64'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache and adds it to the path', async () => {
|
|
||||||
inputs['node-version'] = '20-v8-canary';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/20.0.0-v8-canary20221103f7e2421e91/x64'
|
|
||||||
);
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('handles unhandled find error and reports error', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
const errMsg = 'unhandled error message';
|
|
||||||
inputs['node-version'] = '20.0.0-v8-canary20221103f7e2421e91';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith('::error::' + errMsg + osm.EOL);
|
|
||||||
});
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Manifest tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
it('falls back to a version from node dist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '11.15.0';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/11.11.0/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Not found in manifest. Falling back to download directly from Node'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not find a version that does not exist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionSpec = '23.0.0-v8-canary20221103f7e2421e91';
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to find Node version '${versionSpec}' for platform ${os.platform} and architecture ${os.arch}.${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reports a failed download', async () => {
|
|
||||||
const errMsg = 'unhandled download message';
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is in the manifest
|
|
||||||
const versionSpec = '19.0.0-v8-canary';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
dlSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('acquires specified architecture of node', async () => {
|
|
||||||
for (const {arch, version, osSpec} of [
|
|
||||||
{
|
|
||||||
arch: 'x86',
|
|
||||||
version: '20.0.0-v8-canary20221022e83bcb6c41',
|
|
||||||
osSpec: 'win32'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
arch: 'x86',
|
|
||||||
version: '20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
osSpec: 'win32'
|
|
||||||
}
|
|
||||||
]) {
|
|
||||||
os.platform = osSpec;
|
|
||||||
os.arch = arch;
|
|
||||||
const fileExtension = os.platform === 'win32' ? '7z' : 'tar.gz';
|
|
||||||
const platform = {
|
|
||||||
linux: 'linux',
|
|
||||||
darwin: 'darwin',
|
|
||||||
win32: 'win'
|
|
||||||
}[os.platform];
|
|
||||||
|
|
||||||
inputs['node-version'] = version;
|
|
||||||
inputs['architecture'] = arch;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
const expectedUrl = `https://nodejs.org/download/v8-canary/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize(`/cache/node/${version}/${arch}`);
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${version} - ${arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
describe('nightly versions', () => {
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'20.0.0-v8-canary',
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'https://nodejs.org/download/v8-canary/v20.0.0-v8-canary20221103f7e2421e91/node-v20.0.0-v8-canary20221103f7e2421e91-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'20-v8-canary',
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'https://nodejs.org/download/v8-canary/v20.0.0-v8-canary20221103f7e2421e91/node-v20.0.0-v8-canary20221103f7e2421e91-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'19.0.0-v8-canary',
|
|
||||||
'19.0.0-v8-canary202210187d6960f23f',
|
|
||||||
'https://nodejs.org/download/v8-canary/v19.0.0-v8-canary202210187d6960f23f/node-v19.0.0-v8-canary202210187d6960f23f-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'19-v8-canary',
|
|
||||||
'19.0.0-v8-canary202210187d6960f23f',
|
|
||||||
'https://nodejs.org/download/v8-canary/v19.0.0-v8-canary202210187d6960f23f/node-v19.0.0-v8-canary202210187d6960f23f-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'19.0.0-v8-canary202210187d6960f23f',
|
|
||||||
'19.0.0-v8-canary202210187d6960f23f',
|
|
||||||
'https://nodejs.org/download/v8-canary/v19.0.0-v8-canary202210187d6960f23f/node-v19.0.0-v8-canary202210187d6960f23f-linux-x64.tar.gz'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'finds the versions in the index.json and installs it',
|
|
||||||
async (input, expectedVersion, expectedUrl) => {
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${expectedVersion} - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91'
|
|
||||||
],
|
|
||||||
['20.0.0-v8-canary', '20.0.0-v8-canary20221103f7e2421e91'],
|
|
||||||
['20-v8-canary', '20.0.0-v8-canary20221103f7e2421e91']
|
|
||||||
])(
|
|
||||||
'finds the %s version in the hostedToolcache',
|
|
||||||
async (input, expectedVersion) => {
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
findSpy.mockReturnValue(toolPath);
|
|
||||||
findAllVersionsSpy.mockReturnValue([
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(findAllVersionsSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'20.0.0-v8-canary',
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'https://nodejs.org/download/v8-canary/v20.0.0-v8-canary20221103f7e2421e91/node-v20.0.0-v8-canary20221103f7e2421e91-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'20-v8-canary',
|
|
||||||
'20.0.0-v8-canary20221103f7e2421e91',
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'https://nodejs.org/download/v8-canary/v20.0.0-v8-canary20221103f7e2421e91/node-v20.0.0-v8-canary20221103f7e2421e91-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'19.0.0-v8-canary',
|
|
||||||
'19.0.0-v8-canary202210187d6960f23f',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'https://nodejs.org/download/v8-canary/v19.0.0-v8-canary202210187d6960f23f/node-v19.0.0-v8-canary202210187d6960f23f-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'19-v8-canary',
|
|
||||||
'19.0.0-v8-canary202210187d6960f23f',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'https://nodejs.org/download/v8-canary/v19.0.0-v8-canary202210187d6960f23f/node-v19.0.0-v8-canary202210187d6960f23f-linux-x64.tar.gz'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'get %s version from dist if check-latest is true',
|
|
||||||
async (input, expectedVersion, foundVersion, expectedUrl) => {
|
|
||||||
const foundToolPath = path.normalize(`/cache/node/${foundVersion}/x64`);
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
inputs['check-latest'] = 'true';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
|
|
||||||
findSpy.mockReturnValue(foundToolPath);
|
|
||||||
findAllVersionsSpy.mockReturnValue([
|
|
||||||
'20.0.0-v8-canary20221030fefe1c0879',
|
|
||||||
'19.0.0-v8-canary202210172ec229fc56',
|
|
||||||
'20.0.0-v8-canary2022102310ff1e5a8d'
|
|
||||||
]);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(findAllVersionsSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${expectedVersion} - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('setup-node v8 canary tests', () => {
|
|
||||||
it('v8 canary setup node flow with cached', async () => {
|
|
||||||
const versionSpec = 'v20-v8-canary';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionExpected = 'v20.0.0-v8-canary20221103f7e2421e91';
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [versionExpected]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize(`/cache/node/${versionExpected}/x64`);
|
|
||||||
findSpy.mockImplementation(version => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${toolPath}${path.sep}bin${osm.EOL}`
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(dlSpy).not.toHaveBeenCalled();
|
|
||||||
expect(exSpy).not.toHaveBeenCalled();
|
|
||||||
expect(cacheSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -1 +0,0 @@
|
|||||||
v14
|
|
@ -1 +0,0 @@
|
|||||||
nodejs 14.0.0
|
|
@ -1 +0,0 @@
|
|||||||
node 14.0.0
|
|
@ -1,770 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"version": "v14.1.0",
|
|
||||||
"date": "2020-04-29",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "8.1.307.31",
|
|
||||||
"uv": "1.37.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1g",
|
|
||||||
"modules": "83",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v14.0.0",
|
|
||||||
"date": "2020-04-21",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "8.1.307.30",
|
|
||||||
"uv": "1.37.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1f",
|
|
||||||
"modules": "83",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v13.14.0",
|
|
||||||
"date": "2020-04-28",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "7.9.317.25",
|
|
||||||
"uv": "1.37.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1g",
|
|
||||||
"modules": "79",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v13.13.0",
|
|
||||||
"date": "2020-04-14",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "7.9.317.25",
|
|
||||||
"uv": "1.35.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1f",
|
|
||||||
"modules": "79",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v12.16.3",
|
|
||||||
"date": "2020-04-28",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "7.8.279.23",
|
|
||||||
"uv": "1.34.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1g",
|
|
||||||
"modules": "72",
|
|
||||||
"lts": "Erbium",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v12.16.2",
|
|
||||||
"date": "2020-04-08",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "7.8.279.23",
|
|
||||||
"uv": "1.34.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1e",
|
|
||||||
"modules": "72",
|
|
||||||
"lts": "Erbium",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v12.1.0",
|
|
||||||
"date": "2019-04-29",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.9.0",
|
|
||||||
"v8": "7.4.288.21",
|
|
||||||
"uv": "1.28.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1b",
|
|
||||||
"modules": "72",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v11.15.0",
|
|
||||||
"date": "2019-04-30",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.7.0",
|
|
||||||
"v8": "7.0.276.38",
|
|
||||||
"uv": "1.27.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1b",
|
|
||||||
"modules": "67",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v10.20.1",
|
|
||||||
"date": "2020-04-10",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "6.8.275.32",
|
|
||||||
"uv": "1.34.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1e",
|
|
||||||
"modules": "64",
|
|
||||||
"lts": "Dubnium",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v10.20.0",
|
|
||||||
"date": "2020-03-24",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.14.4",
|
|
||||||
"v8": "6.8.275.32",
|
|
||||||
"uv": "1.34.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.1.1e",
|
|
||||||
"modules": "64",
|
|
||||||
"lts": "Dubnium",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v9.11.2",
|
|
||||||
"date": "2018-06-12",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "5.6.0",
|
|
||||||
"v8": "6.2.414.46",
|
|
||||||
"uv": "1.19.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2o",
|
|
||||||
"modules": "59",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v9.11.1",
|
|
||||||
"date": "2018-04-05",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "5.6.0",
|
|
||||||
"v8": "6.2.414.46",
|
|
||||||
"uv": "1.19.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2o",
|
|
||||||
"modules": "59",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v8.17.0",
|
|
||||||
"date": "2019-12-17",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.13.4",
|
|
||||||
"v8": "6.2.414.78",
|
|
||||||
"uv": "1.23.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2s",
|
|
||||||
"modules": "57",
|
|
||||||
"lts": "Carbon",
|
|
||||||
"security": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v8.16.2",
|
|
||||||
"date": "2019-10-08",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "6.4.1",
|
|
||||||
"v8": "6.2.414.78",
|
|
||||||
"uv": "1.23.2",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2s",
|
|
||||||
"modules": "57",
|
|
||||||
"lts": "Carbon",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v7.10.1",
|
|
||||||
"date": "2017-07-11",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "4.2.0",
|
|
||||||
"v8": "5.5.372.43",
|
|
||||||
"uv": "1.11.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2k",
|
|
||||||
"modules": "51",
|
|
||||||
"lts": false,
|
|
||||||
"security": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v7.10.0",
|
|
||||||
"date": "2017-05-02",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "4.2.0",
|
|
||||||
"v8": "5.5.372.43",
|
|
||||||
"uv": "1.11.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2k",
|
|
||||||
"modules": "51",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v6.17.1",
|
|
||||||
"date": "2019-04-03",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "3.10.10",
|
|
||||||
"v8": "5.1.281.111",
|
|
||||||
"uv": "1.16.1",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2r",
|
|
||||||
"modules": "48",
|
|
||||||
"lts": "Boron",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v6.17.0",
|
|
||||||
"date": "2019-02-28",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "3.10.10",
|
|
||||||
"v8": "5.1.281.111",
|
|
||||||
"uv": "1.16.1",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2r",
|
|
||||||
"modules": "48",
|
|
||||||
"lts": "Boron",
|
|
||||||
"security": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v5.12.0",
|
|
||||||
"date": "2016-06-23",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi"
|
|
||||||
],
|
|
||||||
"npm": "3.8.6",
|
|
||||||
"v8": "4.6.85.32",
|
|
||||||
"uv": "1.8.0",
|
|
||||||
"zlib": "1.2.8",
|
|
||||||
"openssl": "1.0.2h",
|
|
||||||
"modules": "47",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v4.9.1",
|
|
||||||
"date": "2018-03-29",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "2.15.11",
|
|
||||||
"v8": "4.5.103.53",
|
|
||||||
"uv": "1.9.1",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2o",
|
|
||||||
"modules": "46",
|
|
||||||
"lts": "Argon",
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v4.9.0",
|
|
||||||
"date": "2018-03-28",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv6l",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "2.15.11",
|
|
||||||
"v8": "4.5.103.53",
|
|
||||||
"uv": "1.9.1",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "1.0.2o",
|
|
||||||
"modules": "46",
|
|
||||||
"lts": "Argon",
|
|
||||||
"security": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v0.12.18",
|
|
||||||
"date": "2017-02-22",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"osx-x86-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi"
|
|
||||||
],
|
|
||||||
"npm": "2.15.11",
|
|
||||||
"v8": "3.28.71.20",
|
|
||||||
"uv": "1.6.1",
|
|
||||||
"zlib": "1.2.8",
|
|
||||||
"openssl": "1.0.1u",
|
|
||||||
"modules": "14",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v0.12.17",
|
|
||||||
"date": "2016-10-18",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-x64",
|
|
||||||
"linux-x86",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"osx-x86-tar",
|
|
||||||
"src",
|
|
||||||
"sunos-x64",
|
|
||||||
"sunos-x86",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi"
|
|
||||||
],
|
|
||||||
"npm": "2.15.1",
|
|
||||||
"v8": "3.28.71.19",
|
|
||||||
"uv": "1.6.1",
|
|
||||||
"zlib": "1.2.8",
|
|
||||||
"openssl": "1.0.1u",
|
|
||||||
"modules": "14",
|
|
||||||
"lts": false,
|
|
||||||
"security": true
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,35 +0,0 @@
|
|||||||
[
|
|
||||||
{"version":"v20.0.0-nightly2022101987cdf7d412","date":"2022-10-19","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"8.19.2","v8":"10.7.193.16","uv":"1.43.0","zlib":"1.2.11","openssl":"3.0.5+quic","modules":"111","lts":false,"security":false},
|
|
||||||
{"version":"v19.0.0-nightly202210182672219b78","date":"2022-10-18","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"8.19.2","v8":"10.7.193.13","uv":"1.43.0","zlib":"1.2.11","openssl":"3.0.5+quic","modules":"111","lts":false,"security":false},
|
|
||||||
|
|
||||||
|
|
||||||
{"version":"v19.0.0-nightly202204201fe5d56403","date":"2022-04-20","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip"],"npm":"8.7.0","v8":"10.1.124.8","uv":"1.43.0","zlib":"1.2.11","openssl":"3.0.2+quic","modules":"108","lts":false,"security":false},
|
|
||||||
{"version":"v18.0.0-nightly20220419bde889bd4e","date":"2022-04-19","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip"],"npm":"8.7.0","v8":"10.1.124.8","uv":"1.43.0","zlib":"1.2.11","openssl":"3.0.2+quic","modules":"108","lts":false,"security":false},
|
|
||||||
{"version":"v18.0.0-nightly202204180699150267","date":"2022-04-18","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip"],"npm":"8.7.0","v8":"10.1.124.8","uv":"1.43.0","zlib":"1.2.11","openssl":"3.0.2+quic","modules":"108","lts":false,"security":false},
|
|
||||||
|
|
||||||
{"version":"v18.0.0-nightly202110204cb3e06ed8","date":"2021-10-20","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"8.1.0","v8":"9.5.172.21","uv":"1.42.0","zlib":"1.2.11","openssl":"3.0.0+quic","modules":"102","lts":false,"security":false},
|
|
||||||
{"version":"v17.5.0-nightly20220209e43808936a","date":"2022-02-09","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"8.4.1","v8":"9.6.180.15","uv":"1.43.0","zlib":"1.2.11","openssl":"3.0.1+quic","modules":"102","lts":false,"security":false},
|
|
||||||
{"version":"v17.0.0-nightly202110193f11666dc7","date":"2021-10-19","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"8.1.0","v8":"9.5.172.21","uv":"1.42.0","zlib":"1.2.11","openssl":"3.0.0+quic","modules":"102","lts":false,"security":false},
|
|
||||||
{"version":"v17.0.0-nightly20211018c0a70203de","date":"2021-10-18","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"8.0.0","v8":"9.5.172.21","uv":"1.42.0","zlib":"1.2.11","openssl":"3.0.0+quic","modules":"102","lts":false,"security":false},
|
|
||||||
|
|
||||||
{"version":"v16.0.0-nightly20210420a0261d231c","date":"2021-04-20","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"7.10.0","v8":"9.0.257.17","uv":"1.41.0","zlib":"1.2.11","openssl":"1.1.1k+quic","modules":"93","lts":false,"security":false},
|
|
||||||
{"version":"v16.0.0-nightly20210417bc31dc0e0f","date":"2021-04-17","files":["aix-ppc64","headers","linux-arm64","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"7.10.0","v8":"9.0.257.17","uv":"1.41.0","zlib":"1.2.11","openssl":"1.1.1k+quic","modules":"93","lts":false,"security":false},
|
|
||||||
{"version":"v16.0.0-nightly20210416d3162da8dd","date":"2021-04-16","files":["aix-ppc64","headers","linux-arm64","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"7.9.0","v8":"9.0.257.17","uv":"1.41.0","zlib":"1.2.11","openssl":"1.1.1k+quic","modules":"93","lts":false,"security":false},
|
|
||||||
{"version":"v16.0.0-nightly20210415c3a5e15ebe","date":"2021-04-15","files":["aix-ppc64","headers","linux-arm64","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"7.9.0","v8":"9.0.257.17","uv":"1.41.0","zlib":"1.2.11","openssl":"1.1.1k+quic","modules":"93","lts":false,"security":false},
|
|
||||||
|
|
||||||
|
|
||||||
{"version":"v15.0.0-nightly2020102011f1ad939f","date":"2020-10-20","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"7.0.2","v8":"8.6.395.16","uv":"1.40.0","zlib":"1.2.11","openssl":"1.1.1g","modules":"88","lts":false,"security":false},
|
|
||||||
{"version":"v15.0.0-nightly20201019c55f661551","date":"2020-10-19","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"7.0.2","v8":"8.6.395.16","uv":"1.40.0","zlib":"1.2.11","openssl":"1.1.1g","modules":"88","lts":false,"security":false},
|
|
||||||
{"version":"v14.0.0-nightly20200421c3554307c6","date":"2020-04-21","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.14.4","v8":"8.1.307.30","uv":"1.37.0","zlib":"1.2.11","openssl":"1.1.1f","modules":"83","lts":false,"security":false},
|
|
||||||
{"version":"v14.0.0-nightly202004204af0598134","date":"2020-04-20","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.14.4","v8":"8.1.307.26","uv":"1.37.0","zlib":"1.2.11","openssl":"1.1.1f","modules":"83","lts":false,"security":false},
|
|
||||||
|
|
||||||
{"version":"v13.13.1-nightly20200415947ddec091","date":"2020-04-15","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.14.4","v8":"7.9.317.25","uv":"1.35.0","zlib":"1.2.11","openssl":"1.1.1f","modules":"79","lts":false,"security":false},
|
|
||||||
{"version":"v13.11.1-nightly2020032628e298f219","date":"2020-03-26","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.14.3","v8":"7.9.317.25","uv":"1.35.0","zlib":"1.2.11","openssl":"1.1.1e","modules":"79","lts":false,"security":false},
|
|
||||||
|
|
||||||
{"version":"v13.10.2-nightly202003056122620832","date":"2020-03-05","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.13.7","v8":"7.9.317.25","uv":"1.34.2","zlib":"1.2.11","openssl":"1.1.1d","modules":"79","lts":false,"security":false},
|
|
||||||
{"version":"v13.9.1-nightly202003041bca7b6c70","date":"2020-03-04","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.13.7","v8":"7.9.317.25","uv":"1.34.2","zlib":"1.2.11","openssl":"1.1.1d","modules":"79","lts":false,"security":false},
|
|
||||||
{"version":"v13.0.0-nightly201908175e3b4d6ed9","date":"2019-08-17","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.2","v8":"7.6.303.28","uv":"1.31.0","zlib":"1.2.11","openssl":"1.1.1c","modules":"77","lts":false,"security":true},
|
|
||||||
{"version":"v13.0.0-nightly2019081671b5ce5885","date":"2019-08-16","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.2","v8":"7.6.303.28","uv":"1.31.0","zlib":"1.2.11","openssl":"1.1.1c","modules":"77","lts":false,"security":true},
|
|
||||||
{"version":"v13.0.0-nightly2019072962a809fa54","date":"2019-07-29","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.0","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"74","lts":false,"security":false}
|
|
||||||
|
|
||||||
]
|
|
@ -1,28 +0,0 @@
|
|||||||
[
|
|
||||||
{"version":"v19.0.0-rc.2","date":"2022-10-14","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v19.0.0-rc.1","date":"2022-10-04","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v17.0.0-rc.1","date":"2021-10-05","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v17.0.0-rc.0","date":"2021-09-21","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v16.17.0-rc.1","date":"2022-08-06","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-arm64-tar","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v16.0.0-rc.2","date":"2021-04-07","files":["headers","linux-arm64","linux-ppc64le","linux-x64","osx-x64-pkg","osx-x64-tar","src"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v16.0.0-rc.1","date":"2021-03-30","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v16.0.0-rc.0","date":"2021-03-19","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.19.0-rc.0","date":"2022-01-25","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.18.0-rc.0","date":"2021-09-08","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.17.4-rc.0","date":"2021-07-20","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.17.1-rc.0","date":"2021-06-11","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.16.0-rc.0","date":"2021-02-22","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.15.5-rc.1","date":"2021-02-08","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.15.5-rc.0","date":"2021-01-27","files":["headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.15.2-rc.0","date":"2020-12-14","files":["headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v14.7.0-rc.1","date":"2020-07-29","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.11.0-rc.1","date":"2020-03-11","files":["headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.11.0-rc.0","date":"2020-03-10","files":["headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-x64","osx-x64-pkg","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.10.1-rc.0","date":"2020-03-04","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.4.0-rc.0","date":"2019-12-13","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.0.1-rc.0","date":"2019-10-23","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.0.0-rc.3","date":"2019-10-21","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.0.0-rc.2","date":"2019-10-15","files":["headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.0.0-rc.1","date":"2019-10-01","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false},
|
|
||||||
{"version":"v13.0.0-rc.0","date":"2019-09-25","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"v8":"","uv":"","zlib":null,"openssl":null,"modules":null,"lts":false,"security":false}
|
|
||||||
]
|
|
395
__tests__/data/package-lock.json
generated
395
__tests__/data/package-lock.json
generated
@ -1,395 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "test",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"accepts": {
|
|
||||||
"version": "1.3.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
|
||||||
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
|
|
||||||
"requires": {
|
|
||||||
"mime-types": "~2.1.24",
|
|
||||||
"negotiator": "0.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"array-flatten": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
|
||||||
},
|
|
||||||
"body-parser": {
|
|
||||||
"version": "1.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
|
|
||||||
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
|
|
||||||
"requires": {
|
|
||||||
"bytes": "3.1.0",
|
|
||||||
"content-type": "~1.0.4",
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "~1.1.2",
|
|
||||||
"http-errors": "1.7.2",
|
|
||||||
"iconv-lite": "0.4.24",
|
|
||||||
"on-finished": "~2.3.0",
|
|
||||||
"qs": "6.7.0",
|
|
||||||
"raw-body": "2.4.0",
|
|
||||||
"type-is": "~1.6.17"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bytes": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
|
|
||||||
},
|
|
||||||
"content-disposition": {
|
|
||||||
"version": "0.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
|
|
||||||
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
|
|
||||||
"requires": {
|
|
||||||
"safe-buffer": "5.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"content-type": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
|
|
||||||
},
|
|
||||||
"cookie": {
|
|
||||||
"version": "0.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
|
|
||||||
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
|
|
||||||
},
|
|
||||||
"cookie-signature": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"depd": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
|
||||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
|
||||||
},
|
|
||||||
"ee-first": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
|
||||||
},
|
|
||||||
"encodeurl": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
|
||||||
},
|
|
||||||
"escape-html": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
|
||||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
|
||||||
},
|
|
||||||
"etag": {
|
|
||||||
"version": "1.8.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
|
||||||
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
|
|
||||||
},
|
|
||||||
"express": {
|
|
||||||
"version": "4.17.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
|
|
||||||
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
|
|
||||||
"requires": {
|
|
||||||
"accepts": "~1.3.7",
|
|
||||||
"array-flatten": "1.1.1",
|
|
||||||
"body-parser": "1.19.0",
|
|
||||||
"content-disposition": "0.5.3",
|
|
||||||
"content-type": "~1.0.4",
|
|
||||||
"cookie": "0.4.0",
|
|
||||||
"cookie-signature": "1.0.6",
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "~1.1.2",
|
|
||||||
"encodeurl": "~1.0.2",
|
|
||||||
"escape-html": "~1.0.3",
|
|
||||||
"etag": "~1.8.1",
|
|
||||||
"finalhandler": "~1.1.2",
|
|
||||||
"fresh": "0.5.2",
|
|
||||||
"merge-descriptors": "1.0.1",
|
|
||||||
"methods": "~1.1.2",
|
|
||||||
"on-finished": "~2.3.0",
|
|
||||||
"parseurl": "~1.3.3",
|
|
||||||
"path-to-regexp": "0.1.7",
|
|
||||||
"proxy-addr": "~2.0.5",
|
|
||||||
"qs": "6.7.0",
|
|
||||||
"range-parser": "~1.2.1",
|
|
||||||
"safe-buffer": "5.1.2",
|
|
||||||
"send": "0.17.1",
|
|
||||||
"serve-static": "1.14.1",
|
|
||||||
"setprototypeof": "1.1.1",
|
|
||||||
"statuses": "~1.5.0",
|
|
||||||
"type-is": "~1.6.18",
|
|
||||||
"utils-merge": "1.0.1",
|
|
||||||
"vary": "~1.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"finalhandler": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"encodeurl": "~1.0.2",
|
|
||||||
"escape-html": "~1.0.3",
|
|
||||||
"on-finished": "~2.3.0",
|
|
||||||
"parseurl": "~1.3.3",
|
|
||||||
"statuses": "~1.5.0",
|
|
||||||
"unpipe": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"forwarded": {
|
|
||||||
"version": "0.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
|
|
||||||
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
|
|
||||||
},
|
|
||||||
"fresh": {
|
|
||||||
"version": "0.5.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
|
||||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
|
||||||
},
|
|
||||||
"http-errors": {
|
|
||||||
"version": "1.7.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
|
|
||||||
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
|
|
||||||
"requires": {
|
|
||||||
"depd": "~1.1.2",
|
|
||||||
"inherits": "2.0.3",
|
|
||||||
"setprototypeof": "1.1.1",
|
|
||||||
"statuses": ">= 1.5.0 < 2",
|
|
||||||
"toidentifier": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"iconv-lite": {
|
|
||||||
"version": "0.4.24",
|
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
|
||||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
|
||||||
"requires": {
|
|
||||||
"safer-buffer": ">= 2.1.2 < 3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
|
||||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
|
||||||
},
|
|
||||||
"ipaddr.js": {
|
|
||||||
"version": "1.9.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
|
||||||
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
|
|
||||||
},
|
|
||||||
"lru-cache": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
|
||||||
"requires": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"media-typer": {
|
|
||||||
"version": "0.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
|
||||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
|
||||||
},
|
|
||||||
"merge-descriptors": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
|
|
||||||
},
|
|
||||||
"methods": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
|
|
||||||
},
|
|
||||||
"mime": {
|
|
||||||
"version": "1.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
|
||||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
|
|
||||||
},
|
|
||||||
"mime-db": {
|
|
||||||
"version": "1.47.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
|
|
||||||
"integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="
|
|
||||||
},
|
|
||||||
"mime-types": {
|
|
||||||
"version": "2.1.30",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
|
|
||||||
"integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
|
|
||||||
"requires": {
|
|
||||||
"mime-db": "1.47.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
|
||||||
},
|
|
||||||
"negotiator": {
|
|
||||||
"version": "0.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
|
||||||
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
|
|
||||||
},
|
|
||||||
"on-finished": {
|
|
||||||
"version": "2.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
|
||||||
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
|
|
||||||
"requires": {
|
|
||||||
"ee-first": "1.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parseurl": {
|
|
||||||
"version": "1.3.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
|
||||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
|
|
||||||
},
|
|
||||||
"path-to-regexp": {
|
|
||||||
"version": "0.1.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
|
||||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
|
||||||
},
|
|
||||||
"proxy-addr": {
|
|
||||||
"version": "2.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
|
|
||||||
"integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
|
|
||||||
"requires": {
|
|
||||||
"forwarded": "~0.1.2",
|
|
||||||
"ipaddr.js": "1.9.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"qs": {
|
|
||||||
"version": "6.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
|
||||||
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
|
|
||||||
},
|
|
||||||
"range-parser": {
|
|
||||||
"version": "1.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
|
||||||
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
|
|
||||||
},
|
|
||||||
"raw-body": {
|
|
||||||
"version": "2.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
|
|
||||||
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
|
|
||||||
"requires": {
|
|
||||||
"bytes": "3.1.0",
|
|
||||||
"http-errors": "1.7.2",
|
|
||||||
"iconv-lite": "0.4.24",
|
|
||||||
"unpipe": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
|
||||||
},
|
|
||||||
"safer-buffer": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
|
||||||
},
|
|
||||||
"semver": {
|
|
||||||
"version": "7.3.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
|
|
||||||
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
|
|
||||||
"requires": {
|
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"send": {
|
|
||||||
"version": "0.17.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
|
||||||
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "~1.1.2",
|
|
||||||
"destroy": "~1.0.4",
|
|
||||||
"encodeurl": "~1.0.2",
|
|
||||||
"escape-html": "~1.0.3",
|
|
||||||
"etag": "~1.8.1",
|
|
||||||
"fresh": "0.5.2",
|
|
||||||
"http-errors": "~1.7.2",
|
|
||||||
"mime": "1.6.0",
|
|
||||||
"ms": "2.1.1",
|
|
||||||
"on-finished": "~2.3.0",
|
|
||||||
"range-parser": "~1.2.1",
|
|
||||||
"statuses": "~1.5.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"ms": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
|
||||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"serve-static": {
|
|
||||||
"version": "1.14.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
|
|
||||||
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
|
|
||||||
"requires": {
|
|
||||||
"encodeurl": "~1.0.2",
|
|
||||||
"escape-html": "~1.0.3",
|
|
||||||
"parseurl": "~1.3.3",
|
|
||||||
"send": "0.17.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"setprototypeof": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
|
|
||||||
},
|
|
||||||
"statuses": {
|
|
||||||
"version": "1.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
|
||||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
|
|
||||||
},
|
|
||||||
"toidentifier": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
|
|
||||||
},
|
|
||||||
"type-is": {
|
|
||||||
"version": "1.6.18",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
|
||||||
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
|
|
||||||
"requires": {
|
|
||||||
"media-typer": "0.3.0",
|
|
||||||
"mime-types": "~2.1.24"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"unpipe": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
|
||||||
},
|
|
||||||
"utils-merge": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
|
||||||
},
|
|
||||||
"vary": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
|
||||||
},
|
|
||||||
"yallist": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"volta": {
|
|
||||||
"extends": "./package-volta.json"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.0.0"
|
|
||||||
},
|
|
||||||
"volta": {
|
|
||||||
"node": "16.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
455
__tests__/data/pnpm-lock.yaml
generated
455
__tests__/data/pnpm-lock.yaml
generated
@ -1,455 +0,0 @@
|
|||||||
lockfileVersion: 5.3
|
|
||||||
|
|
||||||
specifiers:
|
|
||||||
express: ^4.17.1
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
express: 4.17.1
|
|
||||||
|
|
||||||
packages:
|
|
||||||
/accepts/1.3.7:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dependencies:
|
|
||||||
mime-types: 2.1.31
|
|
||||||
negotiator: 0.6.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/array-flatten/1.1.1:
|
|
||||||
resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/body-parser/1.19.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dependencies:
|
|
||||||
bytes: 3.1.0
|
|
||||||
content-type: 1.0.4
|
|
||||||
debug: 2.6.9
|
|
||||||
depd: 1.1.2
|
|
||||||
http-errors: 1.7.2
|
|
||||||
iconv-lite: 0.4.24
|
|
||||||
on-finished: 2.3.0
|
|
||||||
qs: 6.7.0
|
|
||||||
raw-body: 2.4.0
|
|
||||||
type-is: 1.6.18
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/bytes/3.1.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/content-disposition/0.5.3:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dependencies:
|
|
||||||
safe-buffer: 5.1.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/content-type/1.0.4:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/cookie-signature/1.0.6:
|
|
||||||
resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/cookie/0.4.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/debug/2.6.9:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
|
||||||
}
|
|
||||||
dependencies:
|
|
||||||
ms: 2.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/depd/1.1.2:
|
|
||||||
resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/destroy/1.0.4:
|
|
||||||
resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/ee-first/1.1.1:
|
|
||||||
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/encodeurl/1.0.2:
|
|
||||||
resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/escape-html/1.0.3:
|
|
||||||
resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/etag/1.8.1:
|
|
||||||
resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/express/4.17.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.10.0'}
|
|
||||||
dependencies:
|
|
||||||
accepts: 1.3.7
|
|
||||||
array-flatten: 1.1.1
|
|
||||||
body-parser: 1.19.0
|
|
||||||
content-disposition: 0.5.3
|
|
||||||
content-type: 1.0.4
|
|
||||||
cookie: 0.4.0
|
|
||||||
cookie-signature: 1.0.6
|
|
||||||
debug: 2.6.9
|
|
||||||
depd: 1.1.2
|
|
||||||
encodeurl: 1.0.2
|
|
||||||
escape-html: 1.0.3
|
|
||||||
etag: 1.8.1
|
|
||||||
finalhandler: 1.1.2
|
|
||||||
fresh: 0.5.2
|
|
||||||
merge-descriptors: 1.0.1
|
|
||||||
methods: 1.1.2
|
|
||||||
on-finished: 2.3.0
|
|
||||||
parseurl: 1.3.3
|
|
||||||
path-to-regexp: 0.1.7
|
|
||||||
proxy-addr: 2.0.7
|
|
||||||
qs: 6.7.0
|
|
||||||
range-parser: 1.2.1
|
|
||||||
safe-buffer: 5.1.2
|
|
||||||
send: 0.17.1
|
|
||||||
serve-static: 1.14.1
|
|
||||||
setprototypeof: 1.1.1
|
|
||||||
statuses: 1.5.0
|
|
||||||
type-is: 1.6.18
|
|
||||||
utils-merge: 1.0.1
|
|
||||||
vary: 1.1.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/finalhandler/1.1.2:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dependencies:
|
|
||||||
debug: 2.6.9
|
|
||||||
encodeurl: 1.0.2
|
|
||||||
escape-html: 1.0.3
|
|
||||||
on-finished: 2.3.0
|
|
||||||
parseurl: 1.3.3
|
|
||||||
statuses: 1.5.0
|
|
||||||
unpipe: 1.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/forwarded/0.2.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/fresh/0.5.2:
|
|
||||||
resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/http-errors/1.7.2:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dependencies:
|
|
||||||
depd: 1.1.2
|
|
||||||
inherits: 2.0.3
|
|
||||||
setprototypeof: 1.1.1
|
|
||||||
statuses: 1.5.0
|
|
||||||
toidentifier: 1.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/http-errors/1.7.3:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dependencies:
|
|
||||||
depd: 1.1.2
|
|
||||||
inherits: 2.0.4
|
|
||||||
setprototypeof: 1.1.1
|
|
||||||
statuses: 1.5.0
|
|
||||||
toidentifier: 1.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/iconv-lite/0.4.24:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
|
||||||
}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
dependencies:
|
|
||||||
safer-buffer: 2.1.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/inherits/2.0.3:
|
|
||||||
resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/inherits/2.0.4:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
|
||||||
}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/ipaddr.js/1.9.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.10'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/media-typer/0.3.0:
|
|
||||||
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/merge-descriptors/1.0.1:
|
|
||||||
resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/methods/1.1.2:
|
|
||||||
resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/mime-db/1.48.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/mime-types/2.1.31:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dependencies:
|
|
||||||
mime-db: 1.48.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/mime/1.6.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
|
||||||
}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
hasBin: true
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/ms/2.0.0:
|
|
||||||
resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/ms/2.1.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
|
||||||
}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/negotiator/0.6.2:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/on-finished/2.3.0:
|
|
||||||
resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dependencies:
|
|
||||||
ee-first: 1.1.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/parseurl/1.3.3:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/path-to-regexp/0.1.7:
|
|
||||||
resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/proxy-addr/2.0.7:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.10'}
|
|
||||||
dependencies:
|
|
||||||
forwarded: 0.2.0
|
|
||||||
ipaddr.js: 1.9.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/qs/6.7.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
|
|
||||||
}
|
|
||||||
engines: {node: '>=0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/range-parser/1.2.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/raw-body/2.4.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dependencies:
|
|
||||||
bytes: 3.1.0
|
|
||||||
http-errors: 1.7.2
|
|
||||||
iconv-lite: 0.4.24
|
|
||||||
unpipe: 1.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/safe-buffer/5.1.2:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
|
||||||
}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/safer-buffer/2.1.2:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
|
||||||
}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/send/0.17.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8.0'}
|
|
||||||
dependencies:
|
|
||||||
debug: 2.6.9
|
|
||||||
depd: 1.1.2
|
|
||||||
destroy: 1.0.4
|
|
||||||
encodeurl: 1.0.2
|
|
||||||
escape-html: 1.0.3
|
|
||||||
etag: 1.8.1
|
|
||||||
fresh: 0.5.2
|
|
||||||
http-errors: 1.7.3
|
|
||||||
mime: 1.6.0
|
|
||||||
ms: 2.1.1
|
|
||||||
on-finished: 2.3.0
|
|
||||||
range-parser: 1.2.1
|
|
||||||
statuses: 1.5.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/serve-static/1.14.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.8.0'}
|
|
||||||
dependencies:
|
|
||||||
encodeurl: 1.0.2
|
|
||||||
escape-html: 1.0.3
|
|
||||||
parseurl: 1.3.3
|
|
||||||
send: 0.17.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/setprototypeof/1.1.1:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
|
|
||||||
}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/statuses/1.5.0:
|
|
||||||
resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/toidentifier/1.0.0:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
|
||||||
}
|
|
||||||
engines: {node: '>=0.6'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/type-is/1.6.18:
|
|
||||||
resolution:
|
|
||||||
{
|
|
||||||
integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
|
|
||||||
}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
dependencies:
|
|
||||||
media-typer: 0.3.0
|
|
||||||
mime-types: 2.1.31
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/unpipe/1.0.0:
|
|
||||||
resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/utils-merge/1.0.1:
|
|
||||||
resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
|
|
||||||
engines: {node: '>= 0.4.0'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/vary/1.1.2:
|
|
||||||
resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
dev: false
|
|
@ -1,537 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221103f7e2421e91",
|
|
||||||
"date": "2022-11-03",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.138.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary202211026bf85d0fb4",
|
|
||||||
"date": "2022-11-02",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.130.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221101e50e45c9f8",
|
|
||||||
"date": "2022-11-01",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.129.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary202210311b1e675ad0",
|
|
||||||
"date": "2022-10-31",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.125.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221030fefe1c0879",
|
|
||||||
"date": "2022-10-30",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.125.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary202210293881e51ba2",
|
|
||||||
"date": "2022-10-29",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.122.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary202210286fe49d2a49",
|
|
||||||
"date": "2022-10-28",
|
|
||||||
"files": [
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.112.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221027c470b3108c",
|
|
||||||
"date": "2022-10-27",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.101.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221026c24f7d1e4a",
|
|
||||||
"date": "2022-10-26",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.88.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221025b063237e20",
|
|
||||||
"date": "2022-10-25",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.73.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary2022102454996f930f",
|
|
||||||
"date": "2022-10-24",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.61.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary2022102310ff1e5a8d",
|
|
||||||
"date": "2022-10-23",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.61.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221022e83bcb6c41",
|
|
||||||
"date": "2022-10-22",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip",
|
|
||||||
"win-x86-7z",
|
|
||||||
"win-x86-exe",
|
|
||||||
"win-x86-msi",
|
|
||||||
"win-x86-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.60.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221021f6d5f347fa",
|
|
||||||
"date": "2022-10-21",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.48.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221020f78c149307",
|
|
||||||
"date": "2022-10-20",
|
|
||||||
"files": [
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.38.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v20.0.0-v8-canary20221019d52c76f76e",
|
|
||||||
"date": "2022-10-19",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-pkg",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.27.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v19.0.0-v8-canary202210187d6960f23f",
|
|
||||||
"date": "2022-10-18",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.12.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "v19.0.0-v8-canary202210172ec229fc56",
|
|
||||||
"date": "2022-10-17",
|
|
||||||
"files": [
|
|
||||||
"aix-ppc64",
|
|
||||||
"headers",
|
|
||||||
"linux-arm64",
|
|
||||||
"linux-armv7l",
|
|
||||||
"linux-ppc64le",
|
|
||||||
"linux-s390x",
|
|
||||||
"linux-x64",
|
|
||||||
"osx-arm64-tar",
|
|
||||||
"osx-x64-tar",
|
|
||||||
"src",
|
|
||||||
"win-x64-7z",
|
|
||||||
"win-x64-exe",
|
|
||||||
"win-x64-msi",
|
|
||||||
"win-x64-zip"
|
|
||||||
],
|
|
||||||
"npm": "8.19.2",
|
|
||||||
"v8": "10.9.6.0",
|
|
||||||
"uv": "1.43.0",
|
|
||||||
"zlib": "1.2.11",
|
|
||||||
"openssl": "3.0.5+quic",
|
|
||||||
"modules": "112",
|
|
||||||
"lts": false,
|
|
||||||
"security": false
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,183 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"version": "14.0.0",
|
|
||||||
"stable": true,
|
|
||||||
"lts": "Fermium",
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/14.0.0-20200507.99",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-14.0.0-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/14.0.0-20200507.99/node-14.0.0-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-14.0.0-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/14.0.0-20200507.99/node-14.0.0-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-14.0.0-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/14.0.0-20200507.99/node-14.0.0-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "13.13.0",
|
|
||||||
"stable": true,
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/13.13.0-20200507.97",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-13.13.0-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/13.13.0-20200507.97/node-13.13.0-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-13.13.0-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/13.13.0-20200507.97/node-13.13.0-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-13.13.0-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/13.13.0-20200507.97/node-13.13.0-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "12.16.2",
|
|
||||||
"stable": true,
|
|
||||||
"lts": "Erbium",
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/12.16.2-20200507.95",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-12.16.2-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-12.16.2-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-12.16.2-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "12.0.0",
|
|
||||||
"stable": true,
|
|
||||||
"lts": "Erbium",
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/12.0.0-20200507.71",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-12.0.0-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/12.0.0-20200507.71/node-12.0.0-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-12.0.0-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/12.0.0-20200507.71/node-12.0.0-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-12.0.0-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/12.0.0-20200507.71/node-12.0.0-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "10.20.1",
|
|
||||||
"stable": true,
|
|
||||||
"lts": "Dubnium",
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/10.20.1-20200507.70",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-10.20.1-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/10.20.1-20200507.70/node-10.20.1-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-10.20.1-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/10.20.1-20200507.70/node-10.20.1-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-10.20.1-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/10.20.1-20200507.70/node-10.20.1-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "8.17.0",
|
|
||||||
"stable": true,
|
|
||||||
"lts": "Carbon",
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/8.17.0-20200507.37",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-8.17.0-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/8.17.0-20200507.37/node-8.17.0-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-8.17.0-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/8.17.0-20200507.37/node-8.17.0-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-8.17.0-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/8.17.0-20200507.37/node-8.17.0-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"version": "6.17.1",
|
|
||||||
"stable": true,
|
|
||||||
"lts": "Boron",
|
|
||||||
"release_url": "https://github.com/actions/node-versions/releases/tag/6.17.1-20200529.2",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"filename": "node-6.17.1-darwin-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "darwin",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/6.17.1-20200529.2/node-6.17.1-darwin-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-6.17.1-linux-x64.tar.gz",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "linux",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/6.17.1-20200529.2/node-6.17.1-linux-x64.tar.gz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "node-6.17.1-win32-x64.7z",
|
|
||||||
"arch": "x64",
|
|
||||||
"platform": "win32",
|
|
||||||
"download_url": "https://github.com/actions/node-versions/releases/download/6.17.1-20200529.2/node-6.17.1-win32-x64.7z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,368 +0,0 @@
|
|||||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
||||||
# yarn lockfile v1
|
|
||||||
|
|
||||||
|
|
||||||
accepts@~1.3.7:
|
|
||||||
version "1.3.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
|
|
||||||
integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
|
|
||||||
dependencies:
|
|
||||||
mime-types "~2.1.24"
|
|
||||||
negotiator "0.6.2"
|
|
||||||
|
|
||||||
array-flatten@1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
|
||||||
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
|
|
||||||
|
|
||||||
body-parser@1.19.0:
|
|
||||||
version "1.19.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
|
|
||||||
integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
|
|
||||||
dependencies:
|
|
||||||
bytes "3.1.0"
|
|
||||||
content-type "~1.0.4"
|
|
||||||
debug "2.6.9"
|
|
||||||
depd "~1.1.2"
|
|
||||||
http-errors "1.7.2"
|
|
||||||
iconv-lite "0.4.24"
|
|
||||||
on-finished "~2.3.0"
|
|
||||||
qs "6.7.0"
|
|
||||||
raw-body "2.4.0"
|
|
||||||
type-is "~1.6.17"
|
|
||||||
|
|
||||||
bytes@3.1.0:
|
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
|
|
||||||
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
|
|
||||||
|
|
||||||
content-disposition@0.5.3:
|
|
||||||
version "0.5.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
|
|
||||||
integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
|
|
||||||
dependencies:
|
|
||||||
safe-buffer "5.1.2"
|
|
||||||
|
|
||||||
content-type@~1.0.4:
|
|
||||||
version "1.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
|
|
||||||
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
|
|
||||||
|
|
||||||
cookie-signature@1.0.6:
|
|
||||||
version "1.0.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
|
|
||||||
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
|
|
||||||
|
|
||||||
cookie@0.4.0:
|
|
||||||
version "0.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
|
|
||||||
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
|
|
||||||
|
|
||||||
debug@2.6.9:
|
|
||||||
version "2.6.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
|
||||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
|
||||||
dependencies:
|
|
||||||
ms "2.0.0"
|
|
||||||
|
|
||||||
depd@~1.1.2:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
|
|
||||||
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
|
|
||||||
|
|
||||||
destroy@~1.0.4:
|
|
||||||
version "1.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
|
|
||||||
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
|
|
||||||
|
|
||||||
ee-first@1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
|
||||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
|
||||||
|
|
||||||
encodeurl@~1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
|
||||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
|
||||||
|
|
||||||
escape-html@~1.0.3:
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
|
||||||
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
|
|
||||||
|
|
||||||
etag@~1.8.1:
|
|
||||||
version "1.8.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
|
||||||
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
|
||||||
|
|
||||||
express@^4.17.1:
|
|
||||||
version "4.17.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
|
|
||||||
integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
|
|
||||||
dependencies:
|
|
||||||
accepts "~1.3.7"
|
|
||||||
array-flatten "1.1.1"
|
|
||||||
body-parser "1.19.0"
|
|
||||||
content-disposition "0.5.3"
|
|
||||||
content-type "~1.0.4"
|
|
||||||
cookie "0.4.0"
|
|
||||||
cookie-signature "1.0.6"
|
|
||||||
debug "2.6.9"
|
|
||||||
depd "~1.1.2"
|
|
||||||
encodeurl "~1.0.2"
|
|
||||||
escape-html "~1.0.3"
|
|
||||||
etag "~1.8.1"
|
|
||||||
finalhandler "~1.1.2"
|
|
||||||
fresh "0.5.2"
|
|
||||||
merge-descriptors "1.0.1"
|
|
||||||
methods "~1.1.2"
|
|
||||||
on-finished "~2.3.0"
|
|
||||||
parseurl "~1.3.3"
|
|
||||||
path-to-regexp "0.1.7"
|
|
||||||
proxy-addr "~2.0.5"
|
|
||||||
qs "6.7.0"
|
|
||||||
range-parser "~1.2.1"
|
|
||||||
safe-buffer "5.1.2"
|
|
||||||
send "0.17.1"
|
|
||||||
serve-static "1.14.1"
|
|
||||||
setprototypeof "1.1.1"
|
|
||||||
statuses "~1.5.0"
|
|
||||||
type-is "~1.6.18"
|
|
||||||
utils-merge "1.0.1"
|
|
||||||
vary "~1.1.2"
|
|
||||||
|
|
||||||
finalhandler@~1.1.2:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
|
|
||||||
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
|
|
||||||
dependencies:
|
|
||||||
debug "2.6.9"
|
|
||||||
encodeurl "~1.0.2"
|
|
||||||
escape-html "~1.0.3"
|
|
||||||
on-finished "~2.3.0"
|
|
||||||
parseurl "~1.3.3"
|
|
||||||
statuses "~1.5.0"
|
|
||||||
unpipe "~1.0.0"
|
|
||||||
|
|
||||||
forwarded@~0.1.2:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
|
|
||||||
integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
|
|
||||||
|
|
||||||
fresh@0.5.2:
|
|
||||||
version "0.5.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
|
||||||
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
|
|
||||||
|
|
||||||
http-errors@1.7.2:
|
|
||||||
version "1.7.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
|
|
||||||
integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
|
|
||||||
dependencies:
|
|
||||||
depd "~1.1.2"
|
|
||||||
inherits "2.0.3"
|
|
||||||
setprototypeof "1.1.1"
|
|
||||||
statuses ">= 1.5.0 < 2"
|
|
||||||
toidentifier "1.0.0"
|
|
||||||
|
|
||||||
http-errors@~1.7.2:
|
|
||||||
version "1.7.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
|
|
||||||
integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
|
|
||||||
dependencies:
|
|
||||||
depd "~1.1.2"
|
|
||||||
inherits "2.0.4"
|
|
||||||
setprototypeof "1.1.1"
|
|
||||||
statuses ">= 1.5.0 < 2"
|
|
||||||
toidentifier "1.0.0"
|
|
||||||
|
|
||||||
iconv-lite@0.4.24:
|
|
||||||
version "0.4.24"
|
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
|
||||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
|
||||||
dependencies:
|
|
||||||
safer-buffer ">= 2.1.2 < 3"
|
|
||||||
|
|
||||||
inherits@2.0.3:
|
|
||||||
version "2.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
|
||||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
|
||||||
|
|
||||||
inherits@2.0.4:
|
|
||||||
version "2.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
|
||||||
|
|
||||||
ipaddr.js@1.9.1:
|
|
||||||
version "1.9.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
|
||||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
|
||||||
|
|
||||||
media-typer@0.3.0:
|
|
||||||
version "0.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
|
||||||
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
|
|
||||||
|
|
||||||
merge-descriptors@1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
|
||||||
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
|
|
||||||
|
|
||||||
methods@~1.1.2:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
|
|
||||||
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
|
|
||||||
|
|
||||||
mime-db@1.47.0:
|
|
||||||
version "1.47.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
|
|
||||||
integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
|
|
||||||
|
|
||||||
mime-types@~2.1.24:
|
|
||||||
version "2.1.30"
|
|
||||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
|
|
||||||
integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
|
|
||||||
dependencies:
|
|
||||||
mime-db "1.47.0"
|
|
||||||
|
|
||||||
mime@1.6.0:
|
|
||||||
version "1.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
|
||||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
|
||||||
|
|
||||||
ms@2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
|
||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
|
||||||
|
|
||||||
ms@2.1.1:
|
|
||||||
version "2.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
|
||||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
|
||||||
|
|
||||||
negotiator@0.6.2:
|
|
||||||
version "0.6.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
|
|
||||||
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
|
|
||||||
|
|
||||||
on-finished@~2.3.0:
|
|
||||||
version "2.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
|
|
||||||
integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
|
|
||||||
dependencies:
|
|
||||||
ee-first "1.1.1"
|
|
||||||
|
|
||||||
parseurl@~1.3.3:
|
|
||||||
version "1.3.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
|
||||||
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
|
|
||||||
|
|
||||||
path-to-regexp@0.1.7:
|
|
||||||
version "0.1.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
|
||||||
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
|
|
||||||
|
|
||||||
proxy-addr@~2.0.5:
|
|
||||||
version "2.0.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
|
|
||||||
integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==
|
|
||||||
dependencies:
|
|
||||||
forwarded "~0.1.2"
|
|
||||||
ipaddr.js "1.9.1"
|
|
||||||
|
|
||||||
qs@6.7.0:
|
|
||||||
version "6.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
|
||||||
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
|
|
||||||
|
|
||||||
range-parser@~1.2.1:
|
|
||||||
version "1.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
|
|
||||||
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
|
|
||||||
|
|
||||||
raw-body@2.4.0:
|
|
||||||
version "2.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
|
|
||||||
integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
|
|
||||||
dependencies:
|
|
||||||
bytes "3.1.0"
|
|
||||||
http-errors "1.7.2"
|
|
||||||
iconv-lite "0.4.24"
|
|
||||||
unpipe "1.0.0"
|
|
||||||
|
|
||||||
safe-buffer@5.1.2:
|
|
||||||
version "5.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
|
||||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
|
||||||
|
|
||||||
"safer-buffer@>= 2.1.2 < 3":
|
|
||||||
version "2.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
|
||||||
|
|
||||||
send@0.17.1:
|
|
||||||
version "0.17.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
|
|
||||||
integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
|
|
||||||
dependencies:
|
|
||||||
debug "2.6.9"
|
|
||||||
depd "~1.1.2"
|
|
||||||
destroy "~1.0.4"
|
|
||||||
encodeurl "~1.0.2"
|
|
||||||
escape-html "~1.0.3"
|
|
||||||
etag "~1.8.1"
|
|
||||||
fresh "0.5.2"
|
|
||||||
http-errors "~1.7.2"
|
|
||||||
mime "1.6.0"
|
|
||||||
ms "2.1.1"
|
|
||||||
on-finished "~2.3.0"
|
|
||||||
range-parser "~1.2.1"
|
|
||||||
statuses "~1.5.0"
|
|
||||||
|
|
||||||
serve-static@1.14.1:
|
|
||||||
version "1.14.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
|
|
||||||
integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
|
|
||||||
dependencies:
|
|
||||||
encodeurl "~1.0.2"
|
|
||||||
escape-html "~1.0.3"
|
|
||||||
parseurl "~1.3.3"
|
|
||||||
send "0.17.1"
|
|
||||||
|
|
||||||
setprototypeof@1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
|
|
||||||
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
|
|
||||||
|
|
||||||
"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
|
|
||||||
version "1.5.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
|
||||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
|
||||||
|
|
||||||
toidentifier@1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
|
||||||
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
|
||||||
|
|
||||||
type-is@~1.6.17, type-is@~1.6.18:
|
|
||||||
version "1.6.18"
|
|
||||||
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
|
|
||||||
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
|
|
||||||
dependencies:
|
|
||||||
media-typer "0.3.0"
|
|
||||||
mime-types "~2.1.24"
|
|
||||||
|
|
||||||
unpipe@1.0.0, unpipe@~1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
|
||||||
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
|
|
||||||
|
|
||||||
utils-merge@1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
|
||||||
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
|
||||||
|
|
||||||
vary@~1.1.2:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
|
||||||
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
|
|
@ -1,283 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as exec from '@actions/exec';
|
|
||||||
import * as tc from '@actions/tool-cache';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
|
|
||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
import osm from 'os';
|
|
||||||
|
|
||||||
import each from 'jest-each';
|
|
||||||
|
|
||||||
import * as main from '../src/main';
|
|
||||||
import * as util from '../src/util';
|
|
||||||
import OfficialBuilds from '../src/distributions/official_builds/official_builds';
|
|
||||||
|
|
||||||
describe('main tests', () => {
|
|
||||||
let inputs = {} as any;
|
|
||||||
let os = {} as any;
|
|
||||||
|
|
||||||
let infoSpy: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let inSpy: jest.SpyInstance;
|
|
||||||
let setOutputSpy: jest.SpyInstance;
|
|
||||||
let startGroupSpy: jest.SpyInstance;
|
|
||||||
let endGroupSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
let whichSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
let getExecOutputSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
let getNodeVersionFromFileSpy: jest.SpyInstance;
|
|
||||||
let cnSpy: jest.SpyInstance;
|
|
||||||
let findSpy: jest.SpyInstance;
|
|
||||||
let isCacheActionAvailable: jest.SpyInstance;
|
|
||||||
|
|
||||||
let setupNodeJsSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
inputs = {};
|
|
||||||
|
|
||||||
// node
|
|
||||||
os = {};
|
|
||||||
console.log('::stop-commands::stoptoken');
|
|
||||||
process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data');
|
|
||||||
process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
process.env['GITHUB_OUTPUT'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
infoSpy = jest.spyOn(core, 'info');
|
|
||||||
infoSpy.mockImplementation(() => {});
|
|
||||||
setOutputSpy = jest.spyOn(core, 'setOutput');
|
|
||||||
setOutputSpy.mockImplementation(() => {});
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
warningSpy.mockImplementation(() => {});
|
|
||||||
startGroupSpy = jest.spyOn(core, 'startGroup');
|
|
||||||
startGroupSpy.mockImplementation(() => {});
|
|
||||||
endGroupSpy = jest.spyOn(core, 'endGroup');
|
|
||||||
endGroupSpy.mockImplementation(() => {});
|
|
||||||
inSpy = jest.spyOn(core, 'getInput');
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
|
||||||
|
|
||||||
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
|
||||||
|
|
||||||
findSpy = jest.spyOn(tc, 'find');
|
|
||||||
|
|
||||||
isCacheActionAvailable = jest.spyOn(cache, 'isFeatureAvailable');
|
|
||||||
|
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
|
||||||
cnSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
process.stderr.write('write:' + line + '\n');
|
|
||||||
});
|
|
||||||
|
|
||||||
setupNodeJsSpy = jest.spyOn(OfficialBuilds.prototype, 'setupNodeJs');
|
|
||||||
setupNodeJsSpy.mockImplementation(() => {});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
//jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
console.log('::stoptoken::');
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
describe('getNodeVersionFromFile', () => {
|
|
||||||
each`
|
|
||||||
contents | expected
|
|
||||||
${'12'} | ${'12'}
|
|
||||||
${'12.3'} | ${'12.3'}
|
|
||||||
${'12.3.4'} | ${'12.3.4'}
|
|
||||||
${'v12.3.4'} | ${'12.3.4'}
|
|
||||||
${'lts/erbium'} | ${'lts/erbium'}
|
|
||||||
${'lts/*'} | ${'lts/*'}
|
|
||||||
${'nodejs 12.3.4'} | ${'12.3.4'}
|
|
||||||
${'ruby 2.3.4\nnodejs 12.3.4\npython 3.4.5'} | ${'12.3.4'}
|
|
||||||
${''} | ${''}
|
|
||||||
${'unknown format'} | ${'unknown format'}
|
|
||||||
${' 14.1.0 '} | ${'14.1.0'}
|
|
||||||
${'{"volta": {"node": ">=14.0.0 <=17.0.0"}}'}| ${'>=14.0.0 <=17.0.0'}
|
|
||||||
${'{"volta": {"extends": "./package.json"}}'}| ${'18.0.0'}
|
|
||||||
${'{"engines": {"node": "17.0.0"}}'} | ${'17.0.0'}
|
|
||||||
${'{}'} | ${null}
|
|
||||||
`.it('parses "$contents"', ({contents, expected}) => {
|
|
||||||
const existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
existsSpy.mockImplementation(() => true);
|
|
||||||
|
|
||||||
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
|
||||||
readFileSpy.mockImplementation(filePath => {
|
|
||||||
if (
|
|
||||||
typeof filePath === 'string' &&
|
|
||||||
path.basename(filePath) === 'package.json'
|
|
||||||
) {
|
|
||||||
// Special case for volta.extends
|
|
||||||
return '{"volta": {"node": "18.0.0"}}';
|
|
||||||
}
|
|
||||||
|
|
||||||
return contents;
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(util.getNodeVersionFromFile('file')).toBe(expected);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('printEnvDetailsAndSetOutput', () => {
|
|
||||||
it.each([
|
|
||||||
[{node: '12.0.2', npm: '6.3.3', yarn: '1.22.11'}],
|
|
||||||
[{node: '16.0.2', npm: '7.3.3', yarn: '2.22.11'}],
|
|
||||||
[{node: '14.0.1', npm: '8.1.0', yarn: '3.2.1'}],
|
|
||||||
[{node: '17.0.2', npm: '6.3.3', yarn: ''}]
|
|
||||||
])('Tools versions %p', async obj => {
|
|
||||||
getExecOutputSpy.mockImplementation(async command => {
|
|
||||||
if (Reflect.has(obj, command) && !obj[command]) {
|
|
||||||
return {
|
|
||||||
stdout: '',
|
|
||||||
stderr: `${command} does not exist`,
|
|
||||||
exitCode: 1
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {stdout: obj[command], stderr: '', exitCode: 0};
|
|
||||||
});
|
|
||||||
|
|
||||||
whichSpy.mockImplementation(cmd => {
|
|
||||||
return `some/${cmd}/path`;
|
|
||||||
});
|
|
||||||
|
|
||||||
await util.printEnvDetailsAndSetOutput();
|
|
||||||
|
|
||||||
expect(setOutputSpy).toHaveBeenCalledWith('node-version', obj['node']);
|
|
||||||
Object.getOwnPropertyNames(obj).forEach(name => {
|
|
||||||
if (!obj[name]) {
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
|
||||||
`[warning]${name} does not exist`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(`${name}: ${obj[name]}`);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('node-version-file flag', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
delete inputs['node-version'];
|
|
||||||
inputs['node-version-file'] = '.nvmrc';
|
|
||||||
|
|
||||||
getNodeVersionFromFileSpy = jest.spyOn(util, 'getNodeVersionFromFile');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
getNodeVersionFromFileSpy.mockRestore();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not read node-version-file if node-version is provided', async () => {
|
|
||||||
// Arrange
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(inputs['node-version']).toBeDefined();
|
|
||||||
expect(inputs['node-version-file']).toBeDefined();
|
|
||||||
expect(getNodeVersionFromFileSpy).not.toHaveBeenCalled();
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
'Both node-version and node-version-file inputs are specified, only node-version will be used'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not read node-version-file if node-version-file is not provided', async () => {
|
|
||||||
// Arrange
|
|
||||||
delete inputs['node-version-file'];
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(getNodeVersionFromFileSpy).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reads node-version-file', async () => {
|
|
||||||
// Arrange
|
|
||||||
const expectedVersionSpec = '14';
|
|
||||||
getNodeVersionFromFileSpy.mockImplementation(() => expectedVersionSpec);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(getNodeVersionFromFileSpy).toHaveBeenCalled();
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
|
||||||
`Resolved ${inputs['node-version-file']} as ${expectedVersionSpec}`
|
|
||||||
);
|
|
||||||
}, 10000);
|
|
||||||
|
|
||||||
it('should throw an error if node-version-file is not accessible', async () => {
|
|
||||||
// Arrange
|
|
||||||
inputs['node-version-file'] = 'non-existing-file';
|
|
||||||
const versionFilePath = path.join(
|
|
||||||
__dirname,
|
|
||||||
'data',
|
|
||||||
inputs['node-version-file']
|
|
||||||
);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(getNodeVersionFromFileSpy).toHaveBeenCalled();
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::The specified node version file at: ${versionFilePath} does not exist${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('cache on GHES', () => {
|
|
||||||
it('Should throw an error, because cache is not supported', async () => {
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
inputs['cache'] = 'npm';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
|
|
||||||
// expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
process.env['GITHUB_SERVER_URL'] = 'https://www.test.com';
|
|
||||||
isCacheActionAvailable.mockImplementation(() => false);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
`Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Should throw an internal error', async () => {
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
inputs['cache'] = 'npm';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
|
|
||||||
// expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
process.env['GITHUB_SERVER_URL'] = '';
|
|
||||||
isCacheActionAvailable.mockImplementation(() => false);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
'The runner was not able to contact the cache service. Caching will be skipped'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,18 +0,0 @@
|
|||||||
import {MockGlobber} from './glob-mock';
|
|
||||||
|
|
||||||
describe('mocked globber tests', () => {
|
|
||||||
it('globber should return generator', async () => {
|
|
||||||
const globber = new MockGlobber(['aaa', 'bbb', 'ccc']);
|
|
||||||
const generator = globber.globGenerator();
|
|
||||||
const result: string[] = [];
|
|
||||||
for await (const itemPath of generator) {
|
|
||||||
result.push(itemPath);
|
|
||||||
}
|
|
||||||
expect(result).toEqual(['aaa', 'bbb', 'ccc']);
|
|
||||||
});
|
|
||||||
it('globber should return glob', async () => {
|
|
||||||
const globber = new MockGlobber(['aaa', 'bbb', 'ccc']);
|
|
||||||
const result: string[] = await globber.glob();
|
|
||||||
expect(result).toEqual(['aaa', 'bbb', 'ccc']);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,29 +0,0 @@
|
|||||||
import {Globber} from '@actions/glob';
|
|
||||||
|
|
||||||
export class MockGlobber implements Globber {
|
|
||||||
private readonly expected: string[];
|
|
||||||
constructor(expected: string[]) {
|
|
||||||
this.expected = expected;
|
|
||||||
}
|
|
||||||
getSearchPaths(): string[] {
|
|
||||||
return this.expected.slice();
|
|
||||||
}
|
|
||||||
|
|
||||||
async glob(): Promise<string[]> {
|
|
||||||
const result: string[] = [];
|
|
||||||
for await (const itemPath of this.globGenerator()) {
|
|
||||||
result.push(itemPath);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
async *globGenerator(): AsyncGenerator<string, void> {
|
|
||||||
for (const e of this.expected) {
|
|
||||||
yield e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static async create(expected: string[]): Promise<MockGlobber> {
|
|
||||||
return new MockGlobber(expected);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,608 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
import * as tc from '@actions/tool-cache';
|
|
||||||
import * as httpm from '@actions/http-client';
|
|
||||||
import * as exec from '@actions/exec';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import fs from 'fs';
|
|
||||||
import cp from 'child_process';
|
|
||||||
import osm from 'os';
|
|
||||||
import path from 'path';
|
|
||||||
import * as main from '../src/main';
|
|
||||||
import * as auth from '../src/authutil';
|
|
||||||
import {INodeVersion} from '../src/distributions/base-models';
|
|
||||||
|
|
||||||
import nodeTestManifest from './data/versions-manifest.json';
|
|
||||||
import nodeTestDist from './data/node-dist-index.json';
|
|
||||||
import nodeTestDistNightly from './data/node-nightly-index.json';
|
|
||||||
import nodeTestDistRc from './data/node-rc-index.json';
|
|
||||||
import nodeV8CanaryTestDist from './data/v8-canary-dist-index.json';
|
|
||||||
|
|
||||||
describe('setup-node', () => {
|
|
||||||
let inputs = {} as any;
|
|
||||||
let os = {} as any;
|
|
||||||
|
|
||||||
let inSpy: jest.SpyInstance;
|
|
||||||
let findSpy: jest.SpyInstance;
|
|
||||||
let findAllVersionsSpy: jest.SpyInstance;
|
|
||||||
let cnSpy: jest.SpyInstance;
|
|
||||||
let logSpy: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let getManifestSpy: jest.SpyInstance;
|
|
||||||
let getDistSpy: jest.SpyInstance;
|
|
||||||
let platSpy: jest.SpyInstance;
|
|
||||||
let archSpy: jest.SpyInstance;
|
|
||||||
let dlSpy: jest.SpyInstance;
|
|
||||||
let exSpy: jest.SpyInstance;
|
|
||||||
let cacheSpy: jest.SpyInstance;
|
|
||||||
let dbgSpy: jest.SpyInstance;
|
|
||||||
let whichSpy: jest.SpyInstance;
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
let mkdirpSpy: jest.SpyInstance;
|
|
||||||
let cpSpy: jest.SpyInstance;
|
|
||||||
let execSpy: jest.SpyInstance;
|
|
||||||
let authSpy: jest.SpyInstance;
|
|
||||||
let parseNodeVersionSpy: jest.SpyInstance;
|
|
||||||
let isCacheActionAvailable: jest.SpyInstance;
|
|
||||||
let getExecOutputSpy: jest.SpyInstance;
|
|
||||||
let getJsonSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
// @actions/core
|
|
||||||
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
|
||||||
process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
process.env['GITHUB_OUTPUT'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
process.env['RUNNER_TEMP'] = '/runner_temp';
|
|
||||||
inputs = {};
|
|
||||||
inSpy = jest.spyOn(core, 'getInput');
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
// node
|
|
||||||
os = {};
|
|
||||||
platSpy = jest.spyOn(osm, 'platform');
|
|
||||||
platSpy.mockImplementation(() => os['platform']);
|
|
||||||
archSpy = jest.spyOn(osm, 'arch');
|
|
||||||
archSpy.mockImplementation(() => os['arch']);
|
|
||||||
execSpy = jest.spyOn(cp, 'execSync');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
findSpy = jest.spyOn(tc, 'find');
|
|
||||||
findAllVersionsSpy = jest.spyOn(tc, 'findAllVersions');
|
|
||||||
dlSpy = jest.spyOn(tc, 'downloadTool');
|
|
||||||
exSpy = jest.spyOn(tc, 'extractTar');
|
|
||||||
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
|
||||||
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
|
||||||
|
|
||||||
// http-client
|
|
||||||
getJsonSpy = jest.spyOn(httpm.HttpClient.prototype, 'getJson');
|
|
||||||
|
|
||||||
// io
|
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
|
||||||
existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
mkdirpSpy = jest.spyOn(io, 'mkdirP');
|
|
||||||
cpSpy = jest.spyOn(io, 'cp');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
isCacheActionAvailable = jest.spyOn(cache, 'isFeatureAvailable');
|
|
||||||
|
|
||||||
// disable authentication portion for installer tests
|
|
||||||
authSpy = jest.spyOn(auth, 'configAuthentication');
|
|
||||||
authSpy.mockImplementation(() => {});
|
|
||||||
|
|
||||||
getJsonSpy.mockImplementation(url => {
|
|
||||||
let res: any;
|
|
||||||
if (url.includes('/rc')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistRc;
|
|
||||||
} else if (url.includes('/nightly')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistNightly;
|
|
||||||
} else if (url.includes('/v8-canary')) {
|
|
||||||
res = <INodeVersion[]>nodeV8CanaryTestDist;
|
|
||||||
} else {
|
|
||||||
res = <INodeVersion[]>nodeTestDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {result: res};
|
|
||||||
});
|
|
||||||
|
|
||||||
// writes
|
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
|
||||||
logSpy = jest.spyOn(core, 'info');
|
|
||||||
dbgSpy = jest.spyOn(core, 'debug');
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
cnSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('write:' + line + '\n');
|
|
||||||
});
|
|
||||||
logSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + line + '\n');
|
|
||||||
});
|
|
||||||
dbgSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to see debug output
|
|
||||||
// process.stderr.write(msg + '\n');
|
|
||||||
});
|
|
||||||
warningSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + msg + '\n');
|
|
||||||
});
|
|
||||||
|
|
||||||
// @actions/exec
|
|
||||||
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
|
||||||
getExecOutputSpy.mockImplementation(() => 'v16.15.0');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
//jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Found in cache tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
it('finds version in cache with stable true', async () => {
|
|
||||||
inputs['node-version'] = '16-nightly';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
inputs.stable = 'true';
|
|
||||||
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/16.0.0-nightly20210417bc31dc0e0f/x64'
|
|
||||||
);
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'12.0.1',
|
|
||||||
'16.0.0-nightly20210415c3a5e15ebe',
|
|
||||||
'16.0.0-nightly20210417bc31dc0e0f',
|
|
||||||
'16.1.3'
|
|
||||||
]);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(findSpy).toHaveBeenCalledWith(
|
|
||||||
'node',
|
|
||||||
'16.0.0-nightly20210417bc31dc0e0f',
|
|
||||||
'x64'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache with stable false', async () => {
|
|
||||||
inputs['node-version'] = '16.0.0-nightly20210415c3a5e15ebe';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
inputs.stable = 'false';
|
|
||||||
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/16.0.0-nightly20210415c3a5e15ebe/x64'
|
|
||||||
);
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'12.0.1',
|
|
||||||
'16.0.0-nightly20210415c3a5e15ebe',
|
|
||||||
'16.0.0-nightly20210417bc31dc0e0f',
|
|
||||||
'16.1.3'
|
|
||||||
]);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(findSpy).toHaveBeenCalledWith(
|
|
||||||
'node',
|
|
||||||
'16.0.0-nightly20210415c3a5e15ebe',
|
|
||||||
'x64'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache and adds it to the path', async () => {
|
|
||||||
inputs['node-version'] = '16-nightly';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/16.0.0-nightly20210417bc31dc0e0f/x64'
|
|
||||||
);
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'12.0.1',
|
|
||||||
'16.0.0-nightly20210415c3a5e15ebe',
|
|
||||||
'16.0.0-nightly20210417bc31dc0e0f',
|
|
||||||
'16.1.3'
|
|
||||||
]);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(findSpy).toHaveBeenCalledWith(
|
|
||||||
'node',
|
|
||||||
'16.0.0-nightly20210417bc31dc0e0f',
|
|
||||||
'x64'
|
|
||||||
);
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('handles unhandled find error and reports error', async () => {
|
|
||||||
const errMsg = 'unhandled error message';
|
|
||||||
inputs['node-version'] = '16.0.0-nightly20210417bc31dc0e0f';
|
|
||||||
|
|
||||||
findAllVersionsSpy.mockImplementation(() => [
|
|
||||||
'12.0.1',
|
|
||||||
'16.0.0-nightly20210415c3a5e15ebe',
|
|
||||||
'16.0.0-nightly20210417bc31dc0e0f',
|
|
||||||
'16.1.3'
|
|
||||||
]);
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith('::error::' + errMsg + osm.EOL);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('falls back to a version from node dist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '13.13.1-nightly20200415947ddec091';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/13.13.1-nightly20200415947ddec091/x64'
|
|
||||||
);
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('windows: falls back to exe version if not in manifest and not in node dist', async () => {
|
|
||||||
os.platform = 'win32';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '13.13.1-nightly20200415947ddec091';
|
|
||||||
|
|
||||||
const workingUrls = [
|
|
||||||
`https://nodejs.org/download/nightly/v${versionSpec}/win-x64/node.exe`,
|
|
||||||
`https://nodejs.org/download/nightly/v${versionSpec}/win-x64/node.lib`
|
|
||||||
];
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async url => {
|
|
||||||
if (workingUrls.includes(url)) {
|
|
||||||
return '/some/temp/path';
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new tc.HTTPError(404);
|
|
||||||
});
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/13.13.1-nightly20200415947ddec091/x64'
|
|
||||||
);
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
mkdirpSpy.mockImplementation(async () => {});
|
|
||||||
cpSpy.mockImplementation(async () => {});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
workingUrls.forEach(url => {
|
|
||||||
expect(dlSpy).toHaveBeenCalledWith(url);
|
|
||||||
});
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${toolPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('linux: does not fall back to exe version if not in manifest and not in node dist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '13.13.1-nightly20200415947ddec091';
|
|
||||||
|
|
||||||
const workingUrls = [
|
|
||||||
`https://nodejs.org/download/nightly/v${versionSpec}/win-x64/node.exe`,
|
|
||||||
`https://nodejs.org/download/nightly/v${versionSpec}/win-x64/node.lib`
|
|
||||||
];
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async url => {
|
|
||||||
if (workingUrls.includes(url)) {
|
|
||||||
return '/some/temp/path';
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new tc.HTTPError(404);
|
|
||||||
});
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
'/cache/node/13.13.1-nightly20200415947ddec091/x64'
|
|
||||||
);
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
mkdirpSpy.mockImplementation(async () => {});
|
|
||||||
cpSpy.mockImplementation(async () => {});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
workingUrls.forEach(url => {
|
|
||||||
expect(dlSpy).not.toHaveBeenCalledWith(url);
|
|
||||||
});
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unexpected HTTP response: 404${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not find a version that does not exist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionSpec = '10.13.1-nightly20200415947ddec091';
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to find Node version '${versionSpec}' for platform ${os.platform} and architecture ${os.arch}.${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reports a failed download', async () => {
|
|
||||||
const errMsg = 'unhandled download message';
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is in the manifest
|
|
||||||
const versionSpec = '18.0.0-nightly202204180699150267';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('acquires specified architecture of node', async () => {
|
|
||||||
for (const {arch, version, osSpec} of [
|
|
||||||
{
|
|
||||||
arch: 'x86',
|
|
||||||
version: '18.0.0-nightly202110204cb3e06ed8',
|
|
||||||
osSpec: 'win32'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
arch: 'x86',
|
|
||||||
version: '20.0.0-nightly2022101987cdf7d412',
|
|
||||||
osSpec: 'win32'
|
|
||||||
}
|
|
||||||
]) {
|
|
||||||
os.platform = osSpec;
|
|
||||||
os.arch = arch;
|
|
||||||
const fileExtension = os.platform === 'win32' ? '7z' : 'tar.gz';
|
|
||||||
const platform = {
|
|
||||||
linux: 'linux',
|
|
||||||
darwin: 'darwin',
|
|
||||||
win32: 'win'
|
|
||||||
}[os.platform];
|
|
||||||
|
|
||||||
inputs['node-version'] = version;
|
|
||||||
inputs['architecture'] = arch;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
const expectedUrl = `https://nodejs.org/download/nightly/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize(`/cache/node/${version}/${arch}`);
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${version} - ${arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
describe('nightly versions', () => {
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'17.5.0-nightly',
|
|
||||||
'17.5.0-nightly20220209e43808936a',
|
|
||||||
'https://nodejs.org/download/nightly/v17.5.0-nightly20220209e43808936a/node-v17.5.0-nightly20220209e43808936a-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'17-nightly',
|
|
||||||
'17.5.0-nightly20220209e43808936a',
|
|
||||||
'https://nodejs.org/download/nightly/v17.5.0-nightly20220209e43808936a/node-v17.5.0-nightly20220209e43808936a-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'18.0.0-nightly',
|
|
||||||
'18.0.0-nightly20220419bde889bd4e',
|
|
||||||
'https://nodejs.org/download/nightly/v18.0.0-nightly20220419bde889bd4e/node-v18.0.0-nightly20220419bde889bd4e-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'18-nightly',
|
|
||||||
'18.0.0-nightly20220419bde889bd4e',
|
|
||||||
'https://nodejs.org/download/nightly/v18.0.0-nightly20220419bde889bd4e/node-v18.0.0-nightly20220419bde889bd4e-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'20.0.0-nightly',
|
|
||||||
'20.0.0-nightly2022101987cdf7d412',
|
|
||||||
'https://nodejs.org/download/nightly/v20.0.0-nightly2022101987cdf7d412/node-v20.0.0-nightly2022101987cdf7d412-linux-x64.tar.gz'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'finds the versions in the index.json and installs it',
|
|
||||||
async (input, expectedVersion, expectedUrl) => {
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${expectedVersion} - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
['17.5.0-nightly', '17.5.0-nightly20220209e43808936a'],
|
|
||||||
['17-nightly', '17.5.0-nightly20220209e43808936a'],
|
|
||||||
['20.0.0-nightly', '20.0.0-nightly2022101987cdf7d412']
|
|
||||||
])(
|
|
||||||
'finds the %s version in the hostedToolcache',
|
|
||||||
async (input, expectedVersion) => {
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
findSpy.mockReturnValue(toolPath);
|
|
||||||
findAllVersionsSpy.mockReturnValue([
|
|
||||||
'17.5.0-nightly20220209e43808936a',
|
|
||||||
'17.5.0-nightly20220209e43808935a',
|
|
||||||
'20.0.0-nightly2022101987cdf7d412',
|
|
||||||
'20.0.0-nightly2022101987cdf7d411'
|
|
||||||
]);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(findAllVersionsSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'17.5.0-nightly',
|
|
||||||
'17.5.0-nightly20220209e43808936a',
|
|
||||||
'17.0.0-nightly202110193f11666dc7',
|
|
||||||
'https://nodejs.org/download/nightly/v17.5.0-nightly20220209e43808936a/node-v17.5.0-nightly20220209e43808936a-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'17-nightly',
|
|
||||||
'17.5.0-nightly20220209e43808936a',
|
|
||||||
'17.0.0-nightly202110193f11666dc7',
|
|
||||||
'https://nodejs.org/download/nightly/v17.5.0-nightly20220209e43808936a/node-v17.5.0-nightly20220209e43808936a-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'18.0.0-nightly',
|
|
||||||
'18.0.0-nightly20220419bde889bd4e',
|
|
||||||
'18.0.0-nightly202204180699150267',
|
|
||||||
'https://nodejs.org/download/nightly/v18.0.0-nightly20220419bde889bd4e/node-v18.0.0-nightly20220419bde889bd4e-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'18-nightly',
|
|
||||||
'18.0.0-nightly20220419bde889bd4e',
|
|
||||||
'18.0.0-nightly202204180699150267',
|
|
||||||
'https://nodejs.org/download/nightly/v18.0.0-nightly20220419bde889bd4e/node-v18.0.0-nightly20220419bde889bd4e-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'20.0.0-nightly',
|
|
||||||
'20.0.0-nightly2022101987cdf7d412',
|
|
||||||
'20.0.0-nightly2022101987cdf7d411',
|
|
||||||
'https://nodejs.org/download/nightly/v20.0.0-nightly2022101987cdf7d412/node-v20.0.0-nightly2022101987cdf7d412-linux-x64.tar.gz'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'get %s version from dist if check-latest is true',
|
|
||||||
async (input, expectedVersion, foundVersion, expectedUrl) => {
|
|
||||||
const foundToolPath = path.normalize(`/cache/node/${foundVersion}/x64`);
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
inputs['check-latest'] = 'true';
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
|
|
||||||
findSpy.mockReturnValue(foundToolPath);
|
|
||||||
findAllVersionsSpy.mockReturnValue([
|
|
||||||
'17.0.0-nightly202110193f11666dc7',
|
|
||||||
'18.0.0-nightly202204180699150267',
|
|
||||||
'20.0.0-nightly2022101987cdf7d411'
|
|
||||||
]);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(findAllVersionsSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${expectedVersion} - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,831 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
import * as tc from '@actions/tool-cache';
|
|
||||||
import * as httpm from '@actions/http-client';
|
|
||||||
import * as exec from '@actions/exec';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import fs from 'fs';
|
|
||||||
import cp from 'child_process';
|
|
||||||
import osm from 'os';
|
|
||||||
import path from 'path';
|
|
||||||
import * as main from '../src/main';
|
|
||||||
import * as auth from '../src/authutil';
|
|
||||||
import OfficialBuilds from '../src/distributions/official_builds/official_builds';
|
|
||||||
import {INodeVersion} from '../src/distributions/base-models';
|
|
||||||
|
|
||||||
import nodeTestManifest from './data/versions-manifest.json';
|
|
||||||
import nodeTestDist from './data/node-dist-index.json';
|
|
||||||
import nodeTestDistNightly from './data/node-nightly-index.json';
|
|
||||||
import nodeTestDistRc from './data/node-rc-index.json';
|
|
||||||
import nodeV8CanaryTestDist from './data/v8-canary-dist-index.json';
|
|
||||||
|
|
||||||
describe('setup-node', () => {
|
|
||||||
let build: OfficialBuilds;
|
|
||||||
let inputs = {} as any;
|
|
||||||
let os = {} as any;
|
|
||||||
|
|
||||||
let inSpy: jest.SpyInstance;
|
|
||||||
let findSpy: jest.SpyInstance;
|
|
||||||
let findAllVersionsSpy: jest.SpyInstance;
|
|
||||||
let cnSpy: jest.SpyInstance;
|
|
||||||
let logSpy: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let getManifestSpy: jest.SpyInstance;
|
|
||||||
let platSpy: jest.SpyInstance;
|
|
||||||
let archSpy: jest.SpyInstance;
|
|
||||||
let dlSpy: jest.SpyInstance;
|
|
||||||
let exSpy: jest.SpyInstance;
|
|
||||||
let cacheSpy: jest.SpyInstance;
|
|
||||||
let dbgSpy: jest.SpyInstance;
|
|
||||||
let whichSpy: jest.SpyInstance;
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
let readFileSyncSpy: jest.SpyInstance;
|
|
||||||
let mkdirpSpy: jest.SpyInstance;
|
|
||||||
let execSpy: jest.SpyInstance;
|
|
||||||
let authSpy: jest.SpyInstance;
|
|
||||||
let isCacheActionAvailable: jest.SpyInstance;
|
|
||||||
let getExecOutputSpy: jest.SpyInstance;
|
|
||||||
let getJsonSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
// @actions/core
|
|
||||||
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
|
||||||
process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
process.env['GITHUB_OUTPUT'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
inputs = {};
|
|
||||||
inSpy = jest.spyOn(core, 'getInput');
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
// node
|
|
||||||
os = {};
|
|
||||||
platSpy = jest.spyOn(osm, 'platform');
|
|
||||||
platSpy.mockImplementation(() => os['platform']);
|
|
||||||
archSpy = jest.spyOn(osm, 'arch');
|
|
||||||
archSpy.mockImplementation(() => os['arch']);
|
|
||||||
execSpy = jest.spyOn(cp, 'execSync');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
findSpy = jest.spyOn(tc, 'find');
|
|
||||||
findAllVersionsSpy = jest.spyOn(tc, 'findAllVersions');
|
|
||||||
dlSpy = jest.spyOn(tc, 'downloadTool');
|
|
||||||
exSpy = jest.spyOn(tc, 'extractTar');
|
|
||||||
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
|
||||||
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
|
||||||
|
|
||||||
// http-client
|
|
||||||
getJsonSpy = jest.spyOn(httpm.HttpClient.prototype, 'getJson');
|
|
||||||
|
|
||||||
// io
|
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
|
||||||
existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
mkdirpSpy = jest.spyOn(io, 'mkdirP');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
isCacheActionAvailable = jest.spyOn(cache, 'isFeatureAvailable');
|
|
||||||
|
|
||||||
// disable authentication portion for installer tests
|
|
||||||
authSpy = jest.spyOn(auth, 'configAuthentication');
|
|
||||||
authSpy.mockImplementation(() => {});
|
|
||||||
|
|
||||||
// gets
|
|
||||||
getManifestSpy.mockImplementation(
|
|
||||||
() => <tc.IToolRelease[]>nodeTestManifest
|
|
||||||
);
|
|
||||||
|
|
||||||
getJsonSpy.mockImplementation(url => {
|
|
||||||
let res: any;
|
|
||||||
if (url.includes('/rc')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistRc;
|
|
||||||
} else if (url.includes('/nightly')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistNightly;
|
|
||||||
} else {
|
|
||||||
res = <INodeVersion[]>nodeTestDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {result: res};
|
|
||||||
});
|
|
||||||
|
|
||||||
// writes
|
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
|
||||||
logSpy = jest.spyOn(core, 'info');
|
|
||||||
dbgSpy = jest.spyOn(core, 'debug');
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
cnSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
process.stderr.write('write:' + line + '\n');
|
|
||||||
});
|
|
||||||
logSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
process.stderr.write('log:' + line + '\n');
|
|
||||||
});
|
|
||||||
dbgSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to see debug output
|
|
||||||
// process.stderr.write(msg + '\n');
|
|
||||||
});
|
|
||||||
warningSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + msg + '\n');
|
|
||||||
});
|
|
||||||
|
|
||||||
// @actions/exec
|
|
||||||
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
|
||||||
getExecOutputSpy.mockImplementation(() => 'v16.15.0');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
//jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Manifest find tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
it.each([
|
|
||||||
['12.16.2', 'darwin', '12.16.2', 'Erbium'],
|
|
||||||
['12', 'linux', '12.16.2', 'Erbium'],
|
|
||||||
['10', 'win32', '10.20.1', 'Dubnium'],
|
|
||||||
['*', 'linux', '14.0.0', 'Fermium']
|
|
||||||
])(
|
|
||||||
'can find %s from manifest on %s',
|
|
||||||
async (versionSpec, platform, expectedVersion, expectedLts) => {
|
|
||||||
os.platform = platform;
|
|
||||||
os.arch = 'x64';
|
|
||||||
const versions: tc.IToolRelease[] | null = await tc.getManifestFromRepo(
|
|
||||||
'actions',
|
|
||||||
'node-versions',
|
|
||||||
'mocktoken'
|
|
||||||
);
|
|
||||||
expect(versions).toBeDefined();
|
|
||||||
const match = await tc.findFromManifest(versionSpec, true, versions);
|
|
||||||
expect(match).toBeDefined();
|
|
||||||
expect(match?.version).toBe(expectedVersion);
|
|
||||||
expect((match as any).lts).toBe(expectedLts);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Found in cache tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
it('finds version in cache with stable true', async () => {
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
inputs.stable = 'true';
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache with stable not supplied', async () => {
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache and adds it to the path', async () => {
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('handles unhandled find error and reports error', async () => {
|
|
||||||
const errMsg = 'unhandled error message';
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith('::error::' + errMsg + osm.EOL);
|
|
||||||
});
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Manifest tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
it('downloads a version from a manifest match', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is in the manifest
|
|
||||||
const versionSpec = '12.16.2';
|
|
||||||
const resolvedVersion = versionSpec;
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
const expectedUrl =
|
|
||||||
'https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-linux-x64.tar.gz';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.2/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
whichSpy.mockImplementation(cmd => {
|
|
||||||
return `some/${cmd}/path`;
|
|
||||||
});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(getExecOutputSpy).toHaveBeenCalledWith(
|
|
||||||
'node',
|
|
||||||
['--version'],
|
|
||||||
expect.anything()
|
|
||||||
);
|
|
||||||
expect(getExecOutputSpy).toHaveBeenCalledWith(
|
|
||||||
'npm',
|
|
||||||
['--version'],
|
|
||||||
expect.anything()
|
|
||||||
);
|
|
||||||
expect(getExecOutputSpy).toHaveBeenCalledWith(
|
|
||||||
'yarn',
|
|
||||||
['--version'],
|
|
||||||
expect.anything()
|
|
||||||
);
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${resolvedVersion} - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('falls back to a version from node dist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '11.15.0';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/11.15.0/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(getManifestSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Not found in manifest. Falling back to download directly from Node'
|
|
||||||
);
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not find a version that does not exist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionSpec = '9.99.9';
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Not found in manifest. Falling back to download directly from Node'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to find Node version '${versionSpec}' for platform ${os.platform} and architecture ${os.arch}.${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reports a failed download', async () => {
|
|
||||||
const errMsg = 'unhandled download message';
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is in the manifest
|
|
||||||
const versionSpec = '12.16.2';
|
|
||||||
const resolvedVersion = versionSpec;
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
dlSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reports when download failed but version exists', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '11.15.0';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementationOnce(async () => {
|
|
||||||
throw new tc.HTTPError(404);
|
|
||||||
});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(getManifestSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Not found in manifest. Falling back to download directly from Node'
|
|
||||||
);
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(warningSpy).toHaveBeenCalledWith(
|
|
||||||
`Node version ${versionSpec} for platform ${os.platform} and architecture ${os.arch} was found but failed to download. ` +
|
|
||||||
'This usually happens when downloadable binaries are not fully updated at https://nodejs.org/. ' +
|
|
||||||
'To resolve this issue you may either fall back to the older version or try again later.'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('acquires specified architecture of node', async () => {
|
|
||||||
for (const {arch, version, osSpec} of [
|
|
||||||
{arch: 'x86', version: '12.16.2', osSpec: 'win32'},
|
|
||||||
{arch: 'x86', version: '14.0.0', osSpec: 'win32'}
|
|
||||||
]) {
|
|
||||||
os.platform = osSpec;
|
|
||||||
os.arch = arch;
|
|
||||||
const fileExtension = os.platform === 'win32' ? '7z' : 'tar.gz';
|
|
||||||
const platform = {
|
|
||||||
linux: 'linux',
|
|
||||||
darwin: 'darwin',
|
|
||||||
win32: 'win'
|
|
||||||
}[os.platform];
|
|
||||||
|
|
||||||
inputs['node-version'] = version;
|
|
||||||
inputs['architecture'] = arch;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
const expectedUrl =
|
|
||||||
arch === 'x64'
|
|
||||||
? `https://github.com/actions/node-versions/releases/download/${version}/node-${version}-${platform}-${arch}.zip`
|
|
||||||
: `https://nodejs.org/dist/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize(`/cache/node/${version}/${arch}`);
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${version} - ${arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
describe('check-latest flag', () => {
|
|
||||||
it('use local version and dont check manifest if check-latest is not specified', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
inputs['check-latest'] = 'false';
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.1/x64');
|
|
||||||
findSpy.mockReturnValue(toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
expect(logSpy).not.toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve the latest version from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).not.toHaveBeenCalledWith('No manifest cached');
|
|
||||||
expect(dbgSpy).not.toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('check latest version and resolve it from local cache', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
inputs['check-latest'] = 'true';
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.2/x64');
|
|
||||||
findSpy.mockReturnValue(toolPath);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve the latest version from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith('No manifest cached');
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith("Resolved as '12.16.2'");
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('check latest version and install it from manifest', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
inputs['node-version'] = '12';
|
|
||||||
inputs['check-latest'] = 'true';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/12.16.2/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
const expectedUrl =
|
|
||||||
'https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-linux-x64.tar.gz';
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve the latest version from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith('No manifest cached');
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith("Resolved as '12.16.2'");
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring 12.16.2 - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fallback to dist if version if not found in manifest', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '11';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['check-latest'] = 'true';
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/11.11.0/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve the latest version from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith('No manifest cached');
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Failed to resolve version ${versionSpec} from manifest`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fallback to dist if manifest is not available', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
// a version which is not in the manifest but is in node dist
|
|
||||||
const versionSpec = '12';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['check-latest'] = 'true';
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
getManifestSpy.mockImplementation(() => {
|
|
||||||
throw new Error('Unable to download manifest');
|
|
||||||
});
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/12.11.0/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve the latest version from manifest...'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Unable to resolve version from manifest...'
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Failed to resolve version ${versionSpec} from manifest`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${versionSpec}...`
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('LTS version', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
inputs.stable = 'true';
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
['erbium', '12.16.2'],
|
|
||||||
['*', '14.0.0'],
|
|
||||||
['-1', '12.16.2']
|
|
||||||
])(
|
|
||||||
'find latest LTS version and resolve it from local cache (lts/%s)',
|
|
||||||
async (lts, expectedVersion) => {
|
|
||||||
// arrange
|
|
||||||
inputs['node-version'] = `lts/${lts}`;
|
|
||||||
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
findSpy.mockReturnValue(toolPath);
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve LTS alias from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).not.toHaveBeenCalledWith('No manifest cached');
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
`LTS alias '${lts}' for Node version 'lts/${lts}'`
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
`Found LTS release '${expectedVersion}' for Node version 'lts/${lts}'`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'erbium',
|
|
||||||
'12.16.2',
|
|
||||||
'https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'*',
|
|
||||||
'14.0.0',
|
|
||||||
'https://github.com/actions/node-versions/releases/download/14.0.0-20200507.99/node-14.0.0-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'-1',
|
|
||||||
'12.16.2',
|
|
||||||
'https://github.com/actions/node-versions/releases/download/12.16.2-20200507.95/node-12.16.2-linux-x64.tar.gz'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'find latest LTS version and install it from manifest (lts/%s)',
|
|
||||||
async (lts, expectedVersion, expectedUrl) => {
|
|
||||||
// arrange
|
|
||||||
inputs['node-version'] = `lts/${lts}`;
|
|
||||||
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
const expectedMajor = expectedVersion.split('.')[0];
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve LTS alias from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).not.toHaveBeenCalledWith('No manifest cached');
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
`LTS alias '${lts}' for Node version 'lts/${lts}'`
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
`Found LTS release '${expectedVersion}' for Node version 'lts/${lts}'`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Attempting to download ${expectedMajor}...`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${expectedVersion} - ${os.arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it('fail with unable to parse LTS alias (lts/)', async () => {
|
|
||||||
// arrange
|
|
||||||
inputs['node-version'] = 'lts/';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve LTS alias from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to parse LTS alias for Node version 'lts/'${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fail to find LTS version (lts/unknown)', async () => {
|
|
||||||
// arrange
|
|
||||||
inputs['node-version'] = 'lts/unknown';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve LTS alias from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
`LTS alias 'unknown' for Node version 'lts/unknown'`
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to find LTS release 'unknown' for Node version 'lts/unknown'.${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fail if manifest is not available', async () => {
|
|
||||||
// arrange
|
|
||||||
inputs['node-version'] = 'lts/erbium';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
getManifestSpy.mockImplementation(() => {
|
|
||||||
throw new Error('Unable to download manifest');
|
|
||||||
});
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
'Attempt to resolve LTS alias from manifest...'
|
|
||||||
);
|
|
||||||
expect(dbgSpy).toHaveBeenCalledWith(
|
|
||||||
'Getting manifest from actions/node-versions@main'
|
|
||||||
);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to download manifest${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('latest alias syntax', () => {
|
|
||||||
it.each(['latest', 'current', 'node'])(
|
|
||||||
'download the %s version if alias is provided',
|
|
||||||
async inputVersion => {
|
|
||||||
// Arrange
|
|
||||||
inputs['node-version'] = inputVersion;
|
|
||||||
|
|
||||||
os.platform = 'darwin';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
getManifestSpy.mockImplementation(() => {
|
|
||||||
throw new Error('Unable to download manifest');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Unable to download manifest');
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('getting latest node version...');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('latest alias syntax from cache', () => {
|
|
||||||
it.each(['latest', 'current', 'node'])(
|
|
||||||
'download the %s version if alias is provided',
|
|
||||||
async inputVersion => {
|
|
||||||
// Arrange
|
|
||||||
inputs['node-version'] = inputVersion;
|
|
||||||
const expectedVersion = nodeTestDist[0];
|
|
||||||
|
|
||||||
os.platform = 'darwin';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const toolPath = path.normalize(
|
|
||||||
`/cache/node/${expectedVersion.version}/x64`
|
|
||||||
);
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('getting latest node version...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,59 +0,0 @@
|
|||||||
#!/bin/sh -e
|
|
||||||
export YARN_ENABLE_IMMUTABLE_INSTALLS=false
|
|
||||||
rm package.json
|
|
||||||
rm package-lock.json
|
|
||||||
echo "create yarn2 project in the sub2"
|
|
||||||
mkdir sub2
|
|
||||||
cd sub2
|
|
||||||
cat <<EOT >package.json
|
|
||||||
{
|
|
||||||
"name": "subproject",
|
|
||||||
"dependencies": {
|
|
||||||
"random": "^3.0.6",
|
|
||||||
"uuid": "^9.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOT
|
|
||||||
yarn set version 2.4.3
|
|
||||||
yarn install
|
|
||||||
|
|
||||||
echo "create yarn3 project in the sub3"
|
|
||||||
cd ..
|
|
||||||
mkdir sub3
|
|
||||||
cd sub3
|
|
||||||
cat <<EOT >package.json
|
|
||||||
{
|
|
||||||
"name": "subproject",
|
|
||||||
"dependencies": {
|
|
||||||
"random": "^3.0.6",
|
|
||||||
"uuid": "^9.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOT
|
|
||||||
yarn set version 3.5.1
|
|
||||||
yarn install
|
|
||||||
if [ x$1 = 'xglobal' ];then
|
|
||||||
echo enableGlobalCache
|
|
||||||
echo 'enableGlobalCache: true' >> .yarnrc.yml
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
if [ x$1 != 'xkeepcache' -a x$2 != 'xkeepcache' ]; then
|
|
||||||
rm -rf sub2/.yarn/cache
|
|
||||||
rm -rf sub3/.yarn/cache
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x$1 = 'xyarn1' ];then
|
|
||||||
echo "create yarn1 project in the root"
|
|
||||||
cat <<EOT >package.json
|
|
||||||
{
|
|
||||||
"name": "subproject",
|
|
||||||
"dependencies": {
|
|
||||||
"random": "^3.0.6",
|
|
||||||
"uuid": "^9.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOT
|
|
||||||
yarn set version 1.22.19
|
|
||||||
yarn install
|
|
||||||
fi
|
|
@ -1,45 +0,0 @@
|
|||||||
import tscMatcher from '../.github/tsc.json';
|
|
||||||
|
|
||||||
describe('problem matcher tests', () => {
|
|
||||||
it('tsc: matches TypeScript "pretty" error message', () => {
|
|
||||||
const [
|
|
||||||
{
|
|
||||||
pattern: [{regexp}]
|
|
||||||
}
|
|
||||||
] = tscMatcher.problemMatcher;
|
|
||||||
const exampleErrorMessage =
|
|
||||||
"lib/index.js:23:42 - error TS2345: Argument of type 'A' is not assignable to parameter of type 'B'.";
|
|
||||||
|
|
||||||
const match = exampleErrorMessage.match(new RegExp(regexp));
|
|
||||||
expect(match).not.toBeNull();
|
|
||||||
expect(match![1]).toEqual('lib/index.js');
|
|
||||||
expect(match![2]).toEqual('23');
|
|
||||||
expect(match![3]).toEqual('42');
|
|
||||||
expect(match![4]).toEqual('error');
|
|
||||||
expect(match![5]).toEqual('2345');
|
|
||||||
expect(match![6]).toEqual(
|
|
||||||
"Argument of type 'A' is not assignable to parameter of type 'B'."
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('tsc: matches TypeScript error message from log file', () => {
|
|
||||||
const [
|
|
||||||
{
|
|
||||||
pattern: [{regexp}]
|
|
||||||
}
|
|
||||||
] = tscMatcher.problemMatcher;
|
|
||||||
const exampleErrorMessage =
|
|
||||||
"lib/index.js(23,42): error TS2345: Argument of type 'A' is not assignable to parameter of type 'B'.";
|
|
||||||
|
|
||||||
const match = exampleErrorMessage.match(new RegExp(regexp));
|
|
||||||
expect(match).not.toBeNull();
|
|
||||||
expect(match![1]).toEqual('lib/index.js');
|
|
||||||
expect(match![2]).toEqual('23');
|
|
||||||
expect(match![3]).toEqual('42');
|
|
||||||
expect(match![4]).toEqual('error');
|
|
||||||
expect(match![5]).toEqual('2345');
|
|
||||||
expect(match![6]).toEqual(
|
|
||||||
"Argument of type 'A' is not assignable to parameter of type 'B'."
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,402 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
import * as tc from '@actions/tool-cache';
|
|
||||||
import * as httpm from '@actions/http-client';
|
|
||||||
import * as exec from '@actions/exec';
|
|
||||||
import * as cache from '@actions/cache';
|
|
||||||
import fs from 'fs';
|
|
||||||
import cp from 'child_process';
|
|
||||||
import osm from 'os';
|
|
||||||
import path from 'path';
|
|
||||||
import * as main from '../src/main';
|
|
||||||
import * as auth from '../src/authutil';
|
|
||||||
import {INodeVersion} from '../src/distributions/base-models';
|
|
||||||
|
|
||||||
import nodeTestDist from './data/node-dist-index.json';
|
|
||||||
import nodeTestDistNightly from './data/node-nightly-index.json';
|
|
||||||
import nodeTestDistRc from './data/node-rc-index.json';
|
|
||||||
import nodeV8CanaryTestDist from './data/v8-canary-dist-index.json';
|
|
||||||
|
|
||||||
describe('setup-node', () => {
|
|
||||||
let inputs = {} as any;
|
|
||||||
let os = {} as any;
|
|
||||||
|
|
||||||
let inSpy: jest.SpyInstance;
|
|
||||||
let findSpy: jest.SpyInstance;
|
|
||||||
let findAllVersionsSpy: jest.SpyInstance;
|
|
||||||
let cnSpy: jest.SpyInstance;
|
|
||||||
let logSpy: jest.SpyInstance;
|
|
||||||
let warningSpy: jest.SpyInstance;
|
|
||||||
let platSpy: jest.SpyInstance;
|
|
||||||
let archSpy: jest.SpyInstance;
|
|
||||||
let dlSpy: jest.SpyInstance;
|
|
||||||
let exSpy: jest.SpyInstance;
|
|
||||||
let cacheSpy: jest.SpyInstance;
|
|
||||||
let dbgSpy: jest.SpyInstance;
|
|
||||||
let whichSpy: jest.SpyInstance;
|
|
||||||
let existsSpy: jest.SpyInstance;
|
|
||||||
let mkdirpSpy: jest.SpyInstance;
|
|
||||||
let execSpy: jest.SpyInstance;
|
|
||||||
let authSpy: jest.SpyInstance;
|
|
||||||
let isCacheActionAvailable: jest.SpyInstance;
|
|
||||||
let getExecOutputSpy: jest.SpyInstance;
|
|
||||||
let getJsonSpy: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
// @actions/core
|
|
||||||
console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions
|
|
||||||
process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
process.env['GITHUB_OUTPUT'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out
|
|
||||||
inputs = {};
|
|
||||||
inSpy = jest.spyOn(core, 'getInput');
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
// node
|
|
||||||
os = {};
|
|
||||||
platSpy = jest.spyOn(osm, 'platform');
|
|
||||||
platSpy.mockImplementation(() => os['platform']);
|
|
||||||
archSpy = jest.spyOn(osm, 'arch');
|
|
||||||
archSpy.mockImplementation(() => os['arch']);
|
|
||||||
execSpy = jest.spyOn(cp, 'execSync');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
findSpy = jest.spyOn(tc, 'find');
|
|
||||||
findAllVersionsSpy = jest.spyOn(tc, 'findAllVersions');
|
|
||||||
dlSpy = jest.spyOn(tc, 'downloadTool');
|
|
||||||
exSpy = jest.spyOn(tc, 'extractTar');
|
|
||||||
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
|
||||||
// getDistSpy = jest.spyOn(im, 'getVersionsFromDist');
|
|
||||||
|
|
||||||
// http-client
|
|
||||||
getJsonSpy = jest.spyOn(httpm.HttpClient.prototype, 'getJson');
|
|
||||||
|
|
||||||
// io
|
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
|
||||||
existsSpy = jest.spyOn(fs, 'existsSync');
|
|
||||||
mkdirpSpy = jest.spyOn(io, 'mkdirP');
|
|
||||||
|
|
||||||
// @actions/tool-cache
|
|
||||||
isCacheActionAvailable = jest.spyOn(cache, 'isFeatureAvailable');
|
|
||||||
isCacheActionAvailable.mockImplementation(() => false);
|
|
||||||
|
|
||||||
// disable authentication portion for installer tests
|
|
||||||
authSpy = jest.spyOn(auth, 'configAuthentication');
|
|
||||||
authSpy.mockImplementation(() => {});
|
|
||||||
|
|
||||||
getJsonSpy.mockImplementation(url => {
|
|
||||||
let res: any;
|
|
||||||
if (url.includes('/rc')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistRc;
|
|
||||||
} else if (url.includes('/nightly')) {
|
|
||||||
res = <INodeVersion[]>nodeTestDistNightly;
|
|
||||||
} else {
|
|
||||||
res = <INodeVersion[]>nodeTestDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {result: res};
|
|
||||||
});
|
|
||||||
|
|
||||||
// writes
|
|
||||||
cnSpy = jest.spyOn(process.stdout, 'write');
|
|
||||||
logSpy = jest.spyOn(core, 'info');
|
|
||||||
dbgSpy = jest.spyOn(core, 'debug');
|
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
|
||||||
cnSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('write:' + line + '\n');
|
|
||||||
});
|
|
||||||
logSpy.mockImplementation(line => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + line + '\n');
|
|
||||||
});
|
|
||||||
dbgSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to see debug output
|
|
||||||
// process.stderr.write(msg + '\n');
|
|
||||||
});
|
|
||||||
warningSpy.mockImplementation(msg => {
|
|
||||||
// uncomment to debug
|
|
||||||
// process.stderr.write('log:' + msg + '\n');
|
|
||||||
});
|
|
||||||
|
|
||||||
// @actions/exec
|
|
||||||
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
|
||||||
getExecOutputSpy.mockImplementation(() => 'v16.15.0-rc.1');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
//jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// Found in cache tests
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
it('finds version in cache with stable true', async () => {
|
|
||||||
inputs['node-version'] = '12.0.0-rc.1';
|
|
||||||
inputs.stable = 'true';
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.0.0-rc.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache with stable not supplied', async () => {
|
|
||||||
inputs['node-version'] = '12.0.0-rc.1';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.0.0-rc.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('finds version in cache and adds it to the path', async () => {
|
|
||||||
inputs['node-version'] = '12.0.0-rc.1';
|
|
||||||
|
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
|
||||||
|
|
||||||
const toolPath = path.normalize('/cache/node/12.0.0-rc.1/x64');
|
|
||||||
findSpy.mockImplementation(() => toolPath);
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('handles unhandled find error and reports error', async () => {
|
|
||||||
const errMsg = 'unhandled error message';
|
|
||||||
inputs['node-version'] = '12.0.0-rc.1';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith('::error::' + errMsg + osm.EOL);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('falls back to a version from node dist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionSpec = '13.0.0-rc.0';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize('/cache/node/13.0.0-rc.0/x64');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
const expPath = path.join(toolPath, 'bin');
|
|
||||||
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(exSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Done');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not find a version that does not exist', async () => {
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionSpec = '9.99.9-rc.1';
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to find Node version '${versionSpec}' for platform ${os.platform} and architecture ${os.arch}.${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reports a failed download', async () => {
|
|
||||||
const errMsg = 'unhandled download message';
|
|
||||||
os.platform = 'linux';
|
|
||||||
os.arch = 'x64';
|
|
||||||
|
|
||||||
const versionSpec = '14.7.0-rc.1';
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
dlSpy.mockImplementation(() => {
|
|
||||||
throw new Error(errMsg);
|
|
||||||
});
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(`::error::${errMsg}${osm.EOL}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('acquires specified architecture of node', async () => {
|
|
||||||
for (const {arch, version, osSpec} of [
|
|
||||||
{arch: 'x86', version: '13.4.0-rc.0', osSpec: 'win32'},
|
|
||||||
{arch: 'x86', version: '14.15.5-rc.0', osSpec: 'win32'}
|
|
||||||
]) {
|
|
||||||
os.platform = osSpec;
|
|
||||||
os.arch = arch;
|
|
||||||
const fileExtension = os.platform === 'win32' ? '7z' : 'tar.gz';
|
|
||||||
const platform = {
|
|
||||||
linux: 'linux',
|
|
||||||
darwin: 'darwin',
|
|
||||||
win32: 'win'
|
|
||||||
}[os.platform];
|
|
||||||
|
|
||||||
inputs['node-version'] = version;
|
|
||||||
inputs['architecture'] = arch;
|
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
|
||||||
|
|
||||||
const expectedUrl = `https://nodejs.org/download/rc/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
|
||||||
|
|
||||||
// ... but not in the local cache
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
const toolPath = path.normalize(`/cache/node/${version}/${arch}`);
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
await main.run();
|
|
||||||
expect(dlSpy).toHaveBeenCalled();
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(
|
|
||||||
`Acquiring ${version} - ${arch} from ${expectedUrl}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}, 100000);
|
|
||||||
|
|
||||||
describe('rc versions', () => {
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
'13.10.1-rc.0',
|
|
||||||
'13.10.1-rc.0',
|
|
||||||
'https://nodejs.org/download/rc/v13.10.1-rc.0/node-v13.10.1-rc.0-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'14.15.5-rc.1',
|
|
||||||
'14.15.5-rc.1',
|
|
||||||
'https://nodejs.org/download/rc/v14.15.5-rc.1/node-v14.15.5-rc.1-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'16.17.0-rc.1',
|
|
||||||
'16.17.0-rc.1',
|
|
||||||
'https://nodejs.org/download/rc/v16.17.0-rc.1/node-v16.17.0-rc.1-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'17.0.0-rc.1',
|
|
||||||
'17.0.0-rc.1',
|
|
||||||
'https://nodejs.org/download/rc/v17.0.0-rc.1/node-v17.0.0-rc.1-linux-x64.tar.gz'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'19.0.0-rc.2',
|
|
||||||
'19.0.0-rc.2',
|
|
||||||
'https://nodejs.org/download/rc/v19.0.0-rc.2/node-v19.0.0-rc.2-linux-x64.tar.gz'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'finds the versions in the index.json and installs it',
|
|
||||||
async (input, expectedVersion, expectedUrl) => {
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
cacheSpy.mockImplementation(async () => toolPath);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Extracting ...');
|
|
||||||
expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...');
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
['13.10.1-rc.0', '13.10.1-rc.0'],
|
|
||||||
['14.15.5-rc.1', '14.15.5-rc.1'],
|
|
||||||
['16.17.0-rc.1', '16.17.0-rc.1'],
|
|
||||||
['17.0.0-rc.1', '17.0.0-rc.1']
|
|
||||||
])(
|
|
||||||
'finds the %s version in the hostedToolcache',
|
|
||||||
async (input, expectedVersion) => {
|
|
||||||
const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
|
|
||||||
findSpy.mockImplementation((_, version) =>
|
|
||||||
path.normalize(`/cache/node/${version}/x64`)
|
|
||||||
);
|
|
||||||
findAllVersionsSpy.mockReturnValue([
|
|
||||||
'2.2.2-rc.2',
|
|
||||||
'1.1.1-rc.1',
|
|
||||||
'99.1.1',
|
|
||||||
expectedVersion,
|
|
||||||
'88.1.1',
|
|
||||||
'3.3.3-rc.3'
|
|
||||||
]);
|
|
||||||
|
|
||||||
inputs['node-version'] = input;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`);
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it('throws an error if version is not found', async () => {
|
|
||||||
const versionSpec = '19.0.0-rc.3';
|
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
|
||||||
findAllVersionsSpy.mockImplementation(() => []);
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
|
||||||
exSpy.mockImplementation(async () => '/some/other/temp/path');
|
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
|
||||||
os['arch'] = 'x64';
|
|
||||||
os['platform'] = 'linux';
|
|
||||||
// act
|
|
||||||
await main.run();
|
|
||||||
|
|
||||||
// assert
|
|
||||||
expect(cnSpy).toHaveBeenCalledWith(
|
|
||||||
`::error::Unable to find Node version '${versionSpec}' for platform ${os.platform} and architecture ${os.arch}.${osm.EOL}`
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ -n "$1" ]; then
|
|
||||||
architecture="$(node -e 'console.log(process.arch)')"
|
|
||||||
if [ -z "$(echo $architecture | grep --fixed-strings $1)" ]; then
|
|
||||||
echo "Unexpected architecture"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Skip testing architecture"
|
|
||||||
fi
|
|
@ -1,23 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
echo "Must supply node version argument"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
node_version="$(node --version)"
|
|
||||||
echo "Found node version '$node_version'"
|
|
||||||
if [ -z "$(echo $node_version | grep --fixed-strings v$1)" ]; then
|
|
||||||
echo "Unexpected version"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$2" ]; then
|
|
||||||
echo "Testing npm install"
|
|
||||||
mkdir -p test-npm-install
|
|
||||||
cd test-npm-install
|
|
||||||
npm init -y || exit 1
|
|
||||||
npm install @actions/core || exit 1
|
|
||||||
else
|
|
||||||
echo "Skip testing npm"
|
|
||||||
fi
|
|
Loading…
x
Reference in New Issue
Block a user