mirror of
https://github.com/actions/setup-go.git
synced 2025-05-04 14:14:34 +00:00
Remove stable input and fix SemVer notation (#195)
This commit is contained in:
@ -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<IGoVersionInfo | null> {
|
||||
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<IGoVersion | undefined> {
|
||||
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}`
|
||||
@ -284,20 +271,30 @@ export async function getVersionsDist(
|
||||
// Convert the go version syntax into semver for semver matching
|
||||
// 1.13.1 => 1.13.1
|
||||
// 1.13 => 1.13.0
|
||||
// 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
|
||||
// 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
|
||||
// 1.10beta1 => 1.10.0-beta.1, 1.10rc1 => 1.10.0-rc.1
|
||||
// 1.8.5beta1 => 1.8.5-beta.1, 1.8.5rc1 => 1.8.5-rc.1
|
||||
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(parts[0])?.version;
|
||||
if (!semVersion) {
|
||||
throw new Error(
|
||||
`The version: ${version} can't be changed to SemVer notation`
|
||||
);
|
||||
}
|
||||
|
||||
return `${verPart}${prereleasePart}`;
|
||||
if (!parts[1]) {
|
||||
return semVersion;
|
||||
}
|
||||
|
||||
const fullVersion = semver.valid(`${semVersion}-${parts[1]}`);
|
||||
|
||||
if (!fullVersion) {
|
||||
throw new Error(
|
||||
`The version: ${version} can't be changed to SemVer notation`
|
||||
);
|
||||
}
|
||||
return fullVersion;
|
||||
}
|
||||
|
13
src/main.ts
13
src/main.ts
@ -14,23 +14,14 @@ export async function run() {
|
||||
//
|
||||
let versionSpec = core.getInput('go-version');
|
||||
|
||||
// stable will be true unless false is the exact input
|
||||
// since getting unstable versions should be explicit
|
||||
let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
||||
|
||||
core.info(`Setup go ${stable ? 'stable' : ''} version spec ${versionSpec}`);
|
||||
core.info(`Setup go version spec ${versionSpec}`);
|
||||
|
||||
if (versionSpec) {
|
||||
let token = core.getInput('token');
|
||||
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'));
|
||||
|
@ -1,4 +1,4 @@
|
||||
let os = require('os');
|
||||
const os = require('os');
|
||||
|
||||
export function getPlatform(): string {
|
||||
// darwin and linux match already
|
||||
|
Reference in New Issue
Block a user