From 82441b3f8251ee6ff9d9a76fb590e86ee891411f Mon Sep 17 00:00:00 2001 From: La'Kaleigh Harris <35268101+Xlient@users.noreply.github.com> Date: Fri, 1 Oct 2021 19:16:00 +0000 Subject: [PATCH] Refactored code and removed redundant logic --- src/installer.ts | 48 ++++++++++++++++++++++++++++- src/main.ts | 5 ++-- src/node-version-file.ts | 65 ---------------------------------------- src/node-version.ts | 21 ------------- 4 files changed, 50 insertions(+), 89 deletions(-) delete mode 100644 src/node-version-file.ts delete mode 100644 src/node-version.ts diff --git a/src/installer.ts b/src/installer.ts index 7f32e907..2f1a8ffb 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -2,11 +2,18 @@ import os = require('os'); import * as assert from 'assert'; import * as core from '@actions/core'; import * as io from '@actions/io'; +import * as hc from '@actions/http-client'; import * as tc from '@actions/tool-cache'; import * as path from 'path'; import * as semver from 'semver'; import fs = require('fs'); -import {INodeVersion, getVersionsFromDist} from './node-version'; + + + +interface INodeVersion { + version: string; + files: string[]; +} interface INodeVersionInfo { downloadUrl: string; @@ -376,6 +383,16 @@ async function queryDistForMatch( return version; } +async function getVersionsFromDist(): Promise { + let dataUrl = 'https://nodejs.org/dist/index.json'; + let httpClient = new hc.HttpClient('setup-node', [], { + allowRetries: true, + maxRetries: 3 + }); + let response = await httpClient.getJson(dataUrl); + return response.result || []; +} + // For non LTS versions of Node, the files we need (for Windows) are sometimes located // in a different folder than they normally are for other versions. // Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z @@ -445,3 +462,32 @@ function translateArchToDistUrl(arch: string): string { return arch; } } + +export async function parseNodeVersionFile(contents: string): Promise { + contents = contents.trim(); + + if (/^v\d/.test(contents)) { + contents = contents.substring(1); + } + + const nodeVersions = await getVersionsFromDist(); + + let nodeVersion: string; + + if (semver.valid(contents) || isPartialMatch(contents)) { + nodeVersion = contents; + } else { + throw new Error(`Couldn't resolve node version: '${contents}'`); + } + + return stripVPrefix(nodeVersion); +} + +function isPartialMatch(version: string): boolean { + return /^\d+(\.\d+(\.\d+)?)?$/.test(version); +} + +function stripVPrefix(version: string): string { + return /^v\d/.test(version) ? version.substring(1) : version; +} + diff --git a/src/main.ts b/src/main.ts index 76d7f5e0..9d05c6ec 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,7 +5,6 @@ import fs = require('fs'); import * as path from 'path'; import {restoreCache} from './cache-restore'; import {URL} from 'url'; -import {parseNodeVersionFile} from './node-version-file'; import os = require('os'); export async function run() { @@ -24,12 +23,13 @@ export async function run() { if (!!versionFile) { const versionFilePath = path.join(__dirname, '..', versionFile); - version = await parseNodeVersionFile( + version = await installer.parseNodeVersionFile( fs.readFileSync(versionFilePath, 'utf8') ); core.info(`Resolved ${versionFile} as ${version}`); } } + let arch = core.getInput('architecture'); const cache = core.getInput('cache'); @@ -87,3 +87,4 @@ function isGhes(): boolean { ); return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; } + diff --git a/src/node-version-file.ts b/src/node-version-file.ts deleted file mode 100644 index d2d3568b..00000000 --- a/src/node-version-file.ts +++ /dev/null @@ -1,65 +0,0 @@ -import * as semvar from 'semver'; -import {INodeVersion, getVersionsFromDist} from './node-version'; - -export async function parseNodeVersionFile(contents: string): Promise { - contents = contents.trim(); - - if (/^v\d/.test(contents)) { - contents = contents.substring(1); - } - - const nodeVersions = await getVersionsFromDist(); - - let nodeVersion: string; - - if (contents.startsWith('lts/')) { - nodeVersion = findLatestLts(nodeVersions, contents).version; - } else if (semvar.valid(contents) || isPartialMatch(contents)) { - nodeVersion = contents; - } else { - throw new Error(`Couldn't resolve node version: '${contents}'`); - } - - return stripVPrefix(nodeVersion); -} - -function findLatestLts( - nodeVersions: INodeVersion[], - codename: string -): INodeVersion { - let nodeVersion: INodeVersion | undefined; - - if (codename === 'lts/*') { - nodeVersion = nodeVersions.reduce((latest, nodeVersion) => { - if (!nodeVersion.lts) { - return latest; - } - - return semvar.gt(nodeVersion.version, latest.version) - ? nodeVersion - : latest; - }); - } else { - codename = codename.replace('lts/', '').toLowerCase(); - - nodeVersion = nodeVersions.find( - nodeVersion => `${nodeVersion.lts}`.toLowerCase() === codename - ); - } - - if (!nodeVersion) { - throw new Error( - `Couldn't find matching release for codename: '${codename}'` - ); - } - - return nodeVersion; -} - -function isPartialMatch(version: string): boolean { - return /^\d+(\.\d+(\.\d+)?)?$/.test(version); -} - -function stripVPrefix(version: string): string { - return /^v\d/.test(version) ? version.substring(1) : version; -} diff --git a/src/node-version.ts b/src/node-version.ts deleted file mode 100644 index eb49b049..00000000 --- a/src/node-version.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as hc from '@actions/http-client'; - -// -// Node versions interface -// see https://nodejs.org/dist/index.json -// -export interface INodeVersion { - version: string; - files: string[]; - lts: boolean | string; -} - -export async function getVersionsFromDist(): Promise { - let dataUrl = 'https://nodejs.org/dist/index.json'; - let httpClient = new hc.HttpClient('setup-node', [], { - allowRetries: true, - maxRetries: 3 - }); - let response = await httpClient.getJson(dataUrl); - return response.result || []; -}