mirror of https://github.com/actions/setup-go.git
Apply PR suggestions
This commit is contained in:
parent
5552b45f54
commit
317adaa2cb
|
@ -41,6 +41,7 @@ describe('setup-go', () => {
|
||||||
let mkdirpSpy: jest.SpyInstance;
|
let mkdirpSpy: jest.SpyInstance;
|
||||||
let execSpy: jest.SpyInstance;
|
let execSpy: jest.SpyInstance;
|
||||||
let getManifestSpy: jest.SpyInstance;
|
let getManifestSpy: jest.SpyInstance;
|
||||||
|
let getAllVersionsSpy: jest.SpyInstance;
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
process.env['GITHUB_ENV'] = ''; // Stub out Environment file functionality so we can verify it writes to standard out (toolkit is backwards compatible)
|
process.env['GITHUB_ENV'] = ''; // Stub out Environment file functionality so we can verify it writes to standard out (toolkit is backwards compatible)
|
||||||
|
@ -83,6 +84,7 @@ describe('setup-go', () => {
|
||||||
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
cacheSpy = jest.spyOn(tc, 'cacheDir');
|
||||||
getSpy = jest.spyOn(im, 'getVersionsDist');
|
getSpy = jest.spyOn(im, 'getVersionsDist');
|
||||||
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
|
||||||
|
getAllVersionsSpy = jest.spyOn(im, 'getAllReleases');
|
||||||
|
|
||||||
// io
|
// io
|
||||||
whichSpy = jest.spyOn(io, 'which');
|
whichSpy = jest.spyOn(io, 'which');
|
||||||
|
@ -779,6 +781,7 @@ describe('setup-go', () => {
|
||||||
getManifestSpy.mockImplementation(() => {
|
getManifestSpy.mockImplementation(() => {
|
||||||
throw new Error('Unable to download manifest');
|
throw new Error('Unable to download manifest');
|
||||||
});
|
});
|
||||||
|
getAllVersionsSpy.mockImplementationOnce(() => undefined);
|
||||||
|
|
||||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
dlSpy.mockImplementation(async () => '/some/temp/path');
|
||||||
let toolPath = path.normalize('/cache/go/1.13.7/x64');
|
let toolPath = path.normalize('/cache/go/1.13.7/x64');
|
||||||
|
|
|
@ -63213,7 +63213,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.parseGoVersionFile = exports.makeSemver = exports.getVersionsDist = exports.findMatch = exports.getInfoFromManifest = exports.extractGoArchive = exports.resolveVersionFromManifest = exports.getGo = void 0;
|
exports.parseGoVersionFile = exports.makeSemver = exports.getVersionsDist = exports.findMatch = exports.getInfoFromManifest = exports.getAllReleases = exports.extractGoArchive = exports.resolveVersionFromManifest = exports.getGo = void 0;
|
||||||
const tc = __importStar(__nccwpck_require__(7784));
|
const tc = __importStar(__nccwpck_require__(7784));
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
const path = __importStar(__nccwpck_require__(1017));
|
const path = __importStar(__nccwpck_require__(1017));
|
||||||
|
@ -63222,12 +63222,12 @@ const httpm = __importStar(__nccwpck_require__(6255));
|
||||||
const sys = __importStar(__nccwpck_require__(4300));
|
const sys = __importStar(__nccwpck_require__(4300));
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
||||||
const os_1 = __importDefault(__nccwpck_require__(2037));
|
const os_1 = __importDefault(__nccwpck_require__(2037));
|
||||||
function getGo(versionSpec, checkLatest, auth, arch = os_1.default.arch()) {
|
function getGo(versionSpec, checkLatest, auth, arch = os_1.default.arch(), releases) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let osPlat = os_1.default.platform();
|
let osPlat = os_1.default.platform();
|
||||||
if (checkLatest) {
|
if (checkLatest) {
|
||||||
core.info('Attempting to resolve the latest version from the manifest...');
|
core.info('Attempting to resolve the latest version from the manifest...');
|
||||||
const resolvedVersion = yield resolveVersionFromManifest(versionSpec, true, auth, arch);
|
const resolvedVersion = yield resolveVersionFromManifest(versionSpec, true, auth, arch, releases);
|
||||||
if (resolvedVersion) {
|
if (resolvedVersion) {
|
||||||
versionSpec = resolvedVersion;
|
versionSpec = resolvedVersion;
|
||||||
core.info(`Resolved as '${versionSpec}'`);
|
core.info(`Resolved as '${versionSpec}'`);
|
||||||
|
@ -63290,10 +63290,10 @@ function getGo(versionSpec, checkLatest, auth, arch = os_1.default.arch()) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.getGo = getGo;
|
exports.getGo = getGo;
|
||||||
function resolveVersionFromManifest(versionSpec, stable, auth, arch) {
|
function resolveVersionFromManifest(versionSpec, stable, auth, arch, releases) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
const info = yield getInfoFromManifest(versionSpec, stable, auth, arch);
|
const info = yield getInfoFromManifest(versionSpec, stable, auth, arch, releases);
|
||||||
return info === null || info === void 0 ? void 0 : info.resolvedVersion;
|
return info === null || info === void 0 ? void 0 : info.resolvedVersion;
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
|
@ -63337,18 +63337,18 @@ function extractGoArchive(archivePath) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.extractGoArchive = extractGoArchive;
|
exports.extractGoArchive = extractGoArchive;
|
||||||
function getInfoFromManifest(versionSpec, stable, auth, arch = os_1.default.arch()) {
|
function getAllReleases(auth) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
return yield tc.getManifestFromRepo('actions', 'go-versions', auth, 'main');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.getAllReleases = getAllReleases;
|
||||||
|
function getInfoFromManifest(versionSpec, stable, auth, arch = os_1.default.arch(), releases) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let info = null;
|
let info = null;
|
||||||
const releases = yield tc.getManifestFromRepo('actions', 'go-versions', auth, 'main');
|
releases = releases ? releases : yield getAllReleases(auth);
|
||||||
core.info(`matching ${versionSpec}...`);
|
core.info(`matching ${versionSpec}...`);
|
||||||
let rel;
|
let rel = yield tc.findFromManifest(versionSpec, stable, releases, arch);
|
||||||
if (versionSpec === 'stable') {
|
|
||||||
rel = releases[0];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rel = yield tc.findFromManifest(versionSpec, stable, releases, arch);
|
|
||||||
}
|
|
||||||
if (rel && rel.files.length > 0) {
|
if (rel && rel.files.length > 0) {
|
||||||
info = {};
|
info = {};
|
||||||
info.type = 'manifest';
|
info.type = 'manifest';
|
||||||
|
@ -63511,6 +63511,7 @@ const cache_utils_1 = __nccwpck_require__(1678);
|
||||||
const child_process_1 = __importDefault(__nccwpck_require__(2081));
|
const child_process_1 = __importDefault(__nccwpck_require__(2081));
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
||||||
const os_1 = __importDefault(__nccwpck_require__(2037));
|
const os_1 = __importDefault(__nccwpck_require__(2037));
|
||||||
|
const utils_1 = __nccwpck_require__(1314);
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
|
@ -63528,11 +63529,13 @@ function run() {
|
||||||
if (versionSpec) {
|
if (versionSpec) {
|
||||||
let token = core.getInput('token');
|
let token = core.getInput('token');
|
||||||
let auth = !token ? undefined : `token ${token}`;
|
let auth = !token ? undefined : `token ${token}`;
|
||||||
|
const releases = yield installer.getAllReleases(auth);
|
||||||
const checkLatest = core.getBooleanInput('check-latest');
|
const checkLatest = core.getBooleanInput('check-latest');
|
||||||
if (versionSpec === 'stable' || versionSpec === 'oldstable') {
|
if (versionSpec === utils_1.StableReleaseAlias.Stable ||
|
||||||
versionSpec = yield resolveStableVersionInput(versionSpec, auth, arch);
|
versionSpec === utils_1.StableReleaseAlias.OldStable) {
|
||||||
|
versionSpec = yield resolveStableVersionInput(versionSpec, auth, arch, releases);
|
||||||
}
|
}
|
||||||
const installDir = yield installer.getGo(versionSpec, checkLatest, auth, arch);
|
const installDir = yield installer.getGo(versionSpec, checkLatest, auth, arch, releases);
|
||||||
core.addPath(path_1.default.join(installDir, 'bin'));
|
core.addPath(path_1.default.join(installDir, 'bin'));
|
||||||
core.info('Added go to the path');
|
core.info('Added go to the path');
|
||||||
const version = installer.makeSemver(versionSpec);
|
const version = installer.makeSemver(versionSpec);
|
||||||
|
@ -63624,19 +63627,22 @@ function resolveVersionInput() {
|
||||||
}
|
}
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
function resolveStableVersionInput(versionSpec, auth, arch = os_1.default.arch()) {
|
function resolveStableVersionInput(versionSpec, auth, arch = os_1.default.arch(), releases) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let resolvedVersion = yield installer.resolveVersionFromManifest('stable', true, auth, arch);
|
if (versionSpec === utils_1.StableReleaseAlias.Stable) {
|
||||||
core.info(`Stable version resolved as ${resolvedVersion}`);
|
core.info(`Stable version resolved as ${releases[0].version}`);
|
||||||
if (versionSpec === 'oldstable') {
|
return releases[0].version;
|
||||||
if (resolvedVersion) {
|
}
|
||||||
// example: if version is 1.19.4, semver expression will be: <1.19.0
|
else {
|
||||||
const semverExpression = `<${semver.major(resolvedVersion)}.${semver.minor(resolvedVersion)}.0`;
|
const versions = releases.map(release => `${semver.major(release.version)}.${semver.minor(release.version)}`);
|
||||||
resolvedVersion = yield installer.resolveVersionFromManifest(semverExpression, true, auth, arch);
|
const uniqueVersions = Array.from(new Set(versions));
|
||||||
core.info(`Oldstable version resolved as ${resolvedVersion}`);
|
core.info(`Oldstable version resolved as ${uniqueVersions[1]}`);
|
||||||
}
|
const oldstableVersion = yield installer.getInfoFromManifest(versionSpec, true, auth, arch, releases);
|
||||||
|
if (!oldstableVersion) {
|
||||||
|
return versionSpec;
|
||||||
|
}
|
||||||
|
return oldstableVersion.resolvedVersion;
|
||||||
}
|
}
|
||||||
return resolvedVersion ? resolvedVersion : versionSpec;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63703,6 +63709,22 @@ function getArch(arch) {
|
||||||
exports.getArch = getArch;
|
exports.getArch = getArch;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1314:
|
||||||
|
/***/ ((__unused_webpack_module, exports) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
exports.StableReleaseAlias = void 0;
|
||||||
|
var StableReleaseAlias;
|
||||||
|
(function (StableReleaseAlias) {
|
||||||
|
StableReleaseAlias["Stable"] = "stable";
|
||||||
|
StableReleaseAlias["OldStable"] = "oldstable";
|
||||||
|
})(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {}));
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 2877:
|
/***/ 2877:
|
||||||
|
|
|
@ -8,7 +8,6 @@ import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
|
||||||
type InstallationType = 'dist' | 'manifest';
|
type InstallationType = 'dist' | 'manifest';
|
||||||
export type StableAliasType = 'stable' | 'oldstable';
|
|
||||||
|
|
||||||
export interface IGoVersionFile {
|
export interface IGoVersionFile {
|
||||||
filename: string;
|
filename: string;
|
||||||
|
@ -34,7 +33,8 @@ export async function getGo(
|
||||||
versionSpec: string,
|
versionSpec: string,
|
||||||
checkLatest: boolean,
|
checkLatest: boolean,
|
||||||
auth: string | undefined,
|
auth: string | undefined,
|
||||||
arch = os.arch()
|
arch = os.arch(),
|
||||||
|
releases: tc.IToolRelease[] | undefined
|
||||||
) {
|
) {
|
||||||
let osPlat: string = os.platform();
|
let osPlat: string = os.platform();
|
||||||
|
|
||||||
|
@ -44,7 +44,8 @@ export async function getGo(
|
||||||
versionSpec,
|
versionSpec,
|
||||||
true,
|
true,
|
||||||
auth,
|
auth,
|
||||||
arch
|
arch,
|
||||||
|
releases
|
||||||
);
|
);
|
||||||
if (resolvedVersion) {
|
if (resolvedVersion) {
|
||||||
versionSpec = resolvedVersion;
|
versionSpec = resolvedVersion;
|
||||||
|
@ -119,10 +120,17 @@ export async function resolveVersionFromManifest(
|
||||||
versionSpec: string,
|
versionSpec: string,
|
||||||
stable: boolean,
|
stable: boolean,
|
||||||
auth: string | undefined,
|
auth: string | undefined,
|
||||||
arch: string
|
arch: string,
|
||||||
|
releases: tc.IToolRelease[] | undefined
|
||||||
): Promise<string | undefined> {
|
): Promise<string | undefined> {
|
||||||
try {
|
try {
|
||||||
const info = await getInfoFromManifest(versionSpec, stable, auth, arch);
|
const info = await getInfoFromManifest(
|
||||||
|
versionSpec,
|
||||||
|
stable,
|
||||||
|
auth,
|
||||||
|
arch,
|
||||||
|
releases
|
||||||
|
);
|
||||||
return info?.resolvedVersion;
|
return info?.resolvedVersion;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
core.info('Unable to resolve a version from the manifest...');
|
core.info('Unable to resolve a version from the manifest...');
|
||||||
|
@ -175,28 +183,23 @@ export async function extractGoArchive(archivePath: string): Promise<string> {
|
||||||
return extPath;
|
return extPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getAllReleases(auth: string | undefined) {
|
||||||
|
return await tc.getManifestFromRepo('actions', 'go-versions', auth, 'main');
|
||||||
|
}
|
||||||
|
|
||||||
export async function getInfoFromManifest(
|
export async function getInfoFromManifest(
|
||||||
versionSpec: string | StableAliasType,
|
versionSpec: string,
|
||||||
stable: boolean,
|
stable: boolean,
|
||||||
auth: string | undefined,
|
auth: string | undefined,
|
||||||
arch = os.arch()
|
arch = os.arch(),
|
||||||
|
releases?: tc.IToolRelease[] | undefined
|
||||||
): Promise<IGoVersionInfo | null> {
|
): Promise<IGoVersionInfo | null> {
|
||||||
let info: IGoVersionInfo | null = null;
|
let info: IGoVersionInfo | null = null;
|
||||||
const releases = await tc.getManifestFromRepo(
|
releases = releases ? releases : await getAllReleases(auth);
|
||||||
'actions',
|
|
||||||
'go-versions',
|
|
||||||
auth,
|
|
||||||
'main'
|
|
||||||
);
|
|
||||||
core.info(`matching ${versionSpec}...`);
|
core.info(`matching ${versionSpec}...`);
|
||||||
|
|
||||||
let rel: tc.IToolRelease | undefined;
|
let rel = await tc.findFromManifest(versionSpec, stable, releases, arch);
|
||||||
|
|
||||||
if (versionSpec === 'stable') {
|
|
||||||
rel = releases[0];
|
|
||||||
} else {
|
|
||||||
rel = await tc.findFromManifest(versionSpec, stable, releases, arch);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rel && rel.files.length > 0) {
|
if (rel && rel.files.length > 0) {
|
||||||
info = <IGoVersionInfo>{};
|
info = <IGoVersionInfo>{};
|
||||||
|
|
67
src/main.ts
67
src/main.ts
|
@ -8,6 +8,8 @@ import {isCacheFeatureAvailable} from './cache-utils';
|
||||||
import cp from 'child_process';
|
import cp from 'child_process';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
import {IToolRelease} from '@actions/tool-cache';
|
||||||
|
import {StableReleaseAlias} from './utils';
|
||||||
|
|
||||||
export async function run() {
|
export async function run() {
|
||||||
try {
|
try {
|
||||||
|
@ -30,17 +32,28 @@ export async function run() {
|
||||||
let token = core.getInput('token');
|
let token = core.getInput('token');
|
||||||
let auth = !token ? undefined : `token ${token}`;
|
let auth = !token ? undefined : `token ${token}`;
|
||||||
|
|
||||||
|
const releases = await installer.getAllReleases(auth);
|
||||||
|
|
||||||
const checkLatest = core.getBooleanInput('check-latest');
|
const checkLatest = core.getBooleanInput('check-latest');
|
||||||
|
|
||||||
if (versionSpec === 'stable' || versionSpec === 'oldstable') {
|
if (
|
||||||
versionSpec = await resolveStableVersionInput(versionSpec, auth, arch);
|
versionSpec === StableReleaseAlias.Stable ||
|
||||||
|
versionSpec === StableReleaseAlias.OldStable
|
||||||
|
) {
|
||||||
|
versionSpec = await resolveStableVersionInput(
|
||||||
|
versionSpec,
|
||||||
|
auth,
|
||||||
|
arch,
|
||||||
|
releases
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const installDir = await installer.getGo(
|
const installDir = await installer.getGo(
|
||||||
versionSpec,
|
versionSpec,
|
||||||
checkLatest,
|
checkLatest,
|
||||||
auth,
|
auth,
|
||||||
arch
|
arch,
|
||||||
|
releases
|
||||||
);
|
);
|
||||||
|
|
||||||
core.addPath(path.join(installDir, 'bin'));
|
core.addPath(path.join(installDir, 'bin'));
|
||||||
|
@ -150,36 +163,36 @@ function resolveVersionInput(): string {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function resolveStableVersionInput(
|
async function resolveStableVersionInput(
|
||||||
versionSpec: installer.StableAliasType,
|
versionSpec: string,
|
||||||
auth: string | undefined,
|
auth: string | undefined,
|
||||||
arch = os.arch()
|
arch = os.arch(),
|
||||||
|
releases: IToolRelease[]
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let resolvedVersion = await installer.resolveVersionFromManifest(
|
if (versionSpec === StableReleaseAlias.Stable) {
|
||||||
'stable',
|
core.info(`Stable version resolved as ${releases[0].version}`);
|
||||||
true,
|
|
||||||
auth,
|
|
||||||
arch
|
|
||||||
);
|
|
||||||
|
|
||||||
core.info(`Stable version resolved as ${resolvedVersion}`);
|
return releases[0].version;
|
||||||
|
} else {
|
||||||
|
const versions = releases.map(
|
||||||
|
release =>
|
||||||
|
`${semver.major(release.version)}.${semver.minor(release.version)}`
|
||||||
|
);
|
||||||
|
const uniqueVersions = Array.from(new Set(versions));
|
||||||
|
|
||||||
if (versionSpec === 'oldstable') {
|
core.info(`Oldstable version resolved as ${uniqueVersions[1]}`);
|
||||||
if (resolvedVersion) {
|
|
||||||
// example: if version is 1.19.4, semver expression will be: <1.19.0
|
|
||||||
const semverExpression = `<${semver.major(
|
|
||||||
resolvedVersion
|
|
||||||
)}.${semver.minor(resolvedVersion)}.0`;
|
|
||||||
|
|
||||||
resolvedVersion = await installer.resolveVersionFromManifest(
|
const oldstableVersion = await installer.getInfoFromManifest(
|
||||||
semverExpression,
|
versionSpec,
|
||||||
true,
|
true,
|
||||||
auth,
|
auth,
|
||||||
arch
|
arch,
|
||||||
);
|
releases
|
||||||
|
);
|
||||||
|
|
||||||
core.info(`Oldstable version resolved as ${resolvedVersion}`);
|
if (!oldstableVersion) {
|
||||||
|
return versionSpec;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return resolvedVersion ? resolvedVersion : versionSpec;
|
return oldstableVersion.resolvedVersion;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
export enum StableReleaseAlias {
|
||||||
|
Stable = 'stable',
|
||||||
|
OldStable = 'oldstable'
|
||||||
|
}
|
Loading…
Reference in New Issue