From d50f842f5443acd7f617637e9429d22f18a80b45 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Fri, 18 Feb 2022 15:20:03 +0300 Subject: [PATCH] make some refactoring --- dist/index.js | 40 ++++++++++++++++------------------------ src/installer.ts | 42 +++++++++++++----------------------------- src/main.ts | 7 +------ src/system.ts | 2 +- 4 files changed, 31 insertions(+), 60 deletions(-) diff --git a/dist/index.js b/dist/index.js index 59a4067..1601976 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2082,7 +2082,7 @@ function run() { let token = core.getInput('token'); let auth = !token || isGhes() ? undefined : `token ${token}`; const checkLatest = core.getBooleanInput('check-latest'); - const installDir = yield installer.getGo(versionSpec, stable, checkLatest, auth); + const installDir = yield installer.getGo(versionSpec, checkLatest, auth); core.exportVariable('GOROOT', installDir); core.addPath(path_1.default.join(installDir, 'bin')); core.info('Added go to the path'); @@ -5718,7 +5718,7 @@ module.exports = bytesToUuid; Object.defineProperty(exports, "__esModule", { value: true }); exports.getArch = exports.getPlatform = void 0; -let os = __webpack_require__(87); +const os = __webpack_require__(87); function getPlatform() { // darwin and linux match already // freebsd not supported yet but future proofed. @@ -5890,13 +5890,13 @@ const semver = __importStar(__webpack_require__(280)); const httpm = __importStar(__webpack_require__(539)); const sys = __importStar(__webpack_require__(737)); const os_1 = __importDefault(__webpack_require__(87)); -function getGo(versionSpec, stable, checkLatest, auth) { +function getGo(versionSpec, checkLatest, auth) { return __awaiter(this, void 0, void 0, function* () { let osPlat = os_1.default.platform(); let osArch = os_1.default.arch(); if (checkLatest) { core.info('Attempting to resolve the latest version from the manifest...'); - const resolvedVersion = yield resolveVersionFromManifest(versionSpec, stable, auth); + const resolvedVersion = yield resolveVersionFromManifest(versionSpec, true, auth); if (resolvedVersion) { versionSpec = resolvedVersion; core.info(`Resolved as '${versionSpec}'`); @@ -5920,7 +5920,7 @@ function getGo(versionSpec, stable, checkLatest, auth) { // Try download from internal distribution (popular versions only) // try { - info = yield getInfoFromManifest(versionSpec, stable, auth); + info = yield getInfoFromManifest(versionSpec, true, auth); if (info) { downloadPath = yield installGoVersion(info, auth); } @@ -5943,7 +5943,7 @@ function getGo(versionSpec, stable, checkLatest, auth) { // Download from storage.googleapis.com // if (!downloadPath) { - info = yield getInfoFromDist(versionSpec, stable); + info = yield getInfoFromDist(versionSpec); if (!info) { throw new Error(`Unable to find Go version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`); } @@ -6018,10 +6018,10 @@ function getInfoFromManifest(versionSpec, stable, auth) { }); } exports.getInfoFromManifest = getInfoFromManifest; -function getInfoFromDist(versionSpec, stable) { +function getInfoFromDist(versionSpec) { return __awaiter(this, void 0, void 0, function* () { let version; - version = yield findMatch(versionSpec, stable); + version = yield findMatch(versionSpec); if (!version) { return null; } @@ -6034,7 +6034,7 @@ function getInfoFromDist(versionSpec, stable) { }; }); } -function findMatch(versionSpec, stable) { +function findMatch(versionSpec) { return __awaiter(this, void 0, void 0, function* () { let archFilter = sys.getArch(); let platFilter = sys.getPlatform(); @@ -6049,15 +6049,8 @@ function findMatch(versionSpec, stable) { for (let i = 0; i < candidates.length; i++) { let candidate = candidates[i]; let version = makeSemver(candidate.version); - // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0 - // since a semver of 1.13 would match latest 1.13 - let parts = version.split('.'); - if (parts.length == 2) { - version = version + '.0'; - } core.debug(`check ${version} satisfies ${versionSpec}`); - if (semver.satisfies(version, versionSpec) && - (!stable || candidate.stable === stable)) { + if (semver.satisfies(version, versionSpec)) { goFile = candidate.files.find(file => { core.debug(`${file.arch}===${archFilter} && ${file.os}===${platFilter}`); return file.arch === archFilter && file.os === platFilter; @@ -6097,15 +6090,14 @@ exports.getVersionsDist = getVersionsDist; // 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1 function makeSemver(version) { version = version.replace('go', ''); - version = version.replace('beta', '-beta').replace('rc', '-rc'); + version = version.replace('beta', '-beta.').replace('rc', '-rc.'); let parts = version.split('-'); - let verPart = parts[0]; - let prereleasePart = parts.length > 1 ? `-${parts[1]}` : ''; - let verParts = verPart.split('.'); - if (verParts.length == 2) { - verPart += '.0'; + let semVersion = semver.coerce(version).version; + if (!parts[1]) { + return semVersion; } - return `${verPart}${prereleasePart}`; + semVersion = new semver.SemVer(`${semVersion}-${parts[1]}`).version; + return semVersion; } exports.makeSemver = makeSemver; //# sourceMappingURL=installer.js.map diff --git a/src/installer.ts b/src/installer.ts index ee45c64..6cc029c 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -30,7 +30,6 @@ export interface IGoVersionInfo { export async function getGo( versionSpec: string, - stable: boolean, checkLatest: boolean, auth: string | undefined ) { @@ -41,7 +40,7 @@ export async function getGo( core.info('Attempting to resolve the latest version from the manifest...'); const resolvedVersion = await resolveVersionFromManifest( versionSpec, - stable, + true, auth ); if (resolvedVersion) { @@ -68,7 +67,7 @@ export async function getGo( // Try download from internal distribution (popular versions only) // try { - info = await getInfoFromManifest(versionSpec, stable, auth); + info = await getInfoFromManifest(versionSpec, true, auth); if (info) { downloadPath = await installGoVersion(info, auth); } else { @@ -95,7 +94,7 @@ export async function getGo( // Download from storage.googleapis.com // if (!downloadPath) { - info = await getInfoFromDist(versionSpec, stable); + info = await getInfoFromDist(versionSpec); if (!info) { throw new Error( `Unable to find Go version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.` @@ -191,11 +190,10 @@ export async function getInfoFromManifest( } async function getInfoFromDist( - versionSpec: string, - stable: boolean + versionSpec: string ): Promise { let version: IGoVersion | undefined; - version = await findMatch(versionSpec, stable); + version = await findMatch(versionSpec); if (!version) { return null; } @@ -211,8 +209,7 @@ async function getInfoFromDist( } export async function findMatch( - versionSpec: string, - stable: boolean + versionSpec: string ): Promise { let archFilter = sys.getArch(); let platFilter = sys.getPlatform(); @@ -233,18 +230,8 @@ export async function findMatch( let candidate: IGoVersion = candidates[i]; let version = makeSemver(candidate.version); - // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0 - // since a semver of 1.13 would match latest 1.13 - let parts: string[] = version.split('.'); - if (parts.length == 2) { - version = version + '.0'; - } - core.debug(`check ${version} satisfies ${versionSpec}`); - if ( - semver.satisfies(version, versionSpec) && - (!stable || candidate.stable === stable) - ) { + if (semver.satisfies(version, versionSpec)) { goFile = candidate.files.find(file => { core.debug( `${file.arch}===${archFilter} && ${file.os}===${platFilter}` @@ -288,16 +275,13 @@ export async function getVersionsDist( // 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1 export function makeSemver(version: string): string { version = version.replace('go', ''); - version = version.replace('beta', '-beta').replace('rc', '-rc'); + version = version.replace('beta', '-beta.').replace('rc', '-rc.'); let parts = version.split('-'); - let verPart: string = parts[0]; - let prereleasePart = parts.length > 1 ? `-${parts[1]}` : ''; - - let verParts: string[] = verPart.split('.'); - if (verParts.length == 2) { - verPart += '.0'; + let semVersion = semver.coerce(version)!.version; + if (!parts[1]) { + return semVersion; } - - return `${verPart}${prereleasePart}`; + semVersion = new semver.SemVer(`${semVersion}-${parts[1]}`).version; + return semVersion; } diff --git a/src/main.ts b/src/main.ts index 5837dee..452308f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -25,12 +25,7 @@ export async function run() { let auth = !token || isGhes() ? undefined : `token ${token}`; const checkLatest = core.getBooleanInput('check-latest'); - const installDir = await installer.getGo( - versionSpec, - stable, - checkLatest, - auth - ); + const installDir = await installer.getGo(versionSpec, checkLatest, auth); core.exportVariable('GOROOT', installDir); core.addPath(path.join(installDir, 'bin')); diff --git a/src/system.ts b/src/system.ts index 8dfad42..6973f99 100644 --- a/src/system.ts +++ b/src/system.ts @@ -1,4 +1,4 @@ -let os = require('os'); +const os = require('os'); export function getPlatform(): string { // darwin and linux match already