diff --git a/.github/workflows/versions.yml b/.github/workflows/versions.yml index 1291b08..95d1b6a 100644 --- a/.github/workflows/versions.yml +++ b/.github/workflows/versions.yml @@ -20,7 +20,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] steps: - uses: actions/checkout@v3 - - name: Setup Go and check latest + - name: Setup Go Stable uses: ./ with: go-version: stable @@ -35,12 +35,33 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] steps: - uses: actions/checkout@v3 - - name: Setup Go and check latest + - name: Setup Go oldStable uses: ./ with: go-version: oldstable - name: Verify Go run: go version + + aliases-arch: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + version: [stable, oldstable] + architecture: [x64, x32] + exclude: + - os: macos-latest + architecture: x32 + steps: + - uses: actions/checkout@v3 + - name: Setup Go ${{ matrix.version }} ${{ matrix.architecture }} + uses: ./ + with: + go-version: ${{ matrix.version }} + architecture: ${{ matrix.architecture }} + - name: Verify Go + run: go version local-cache: name: Setup local-cache version diff --git a/dist/setup/index.js b/dist/setup/index.js index 6e16a2e..7b0f1c4 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -63234,7 +63234,14 @@ function getGo(versionSpec, checkLatest, auth, arch = os_1.default.arch()) { if (versionSpec === utils_1.StableReleaseAlias.Stable || versionSpec === utils_1.StableReleaseAlias.OldStable) { manifest = yield getManifest(auth); - versionSpec = yield resolveStableVersionInput(versionSpec, arch, osPlat, manifest); + let stableVersion = yield resolveStableVersionInput(versionSpec, arch, osPlat, manifest); + if (!stableVersion) { + stableVersion = yield resolveStableVersionDist(versionSpec, arch); + if (!stableVersion) { + throw new Error(`Unable to find Go version '${versionSpec}' for platform ${osPlat} and architecture ${arch}.`); + } + } + versionSpec = stableVersion; } if (checkLatest) { core.info('Attempting to resolve the latest version from the manifest...'); @@ -63400,13 +63407,6 @@ function findMatch(versionSpec, arch = os_1.default.arch()) { if (!candidates) { throw new Error(`golang download url did not return results`); } - if (versionSpec === utils_1.StableReleaseAlias.Stable || - versionSpec === utils_1.StableReleaseAlias.OldStable) { - const fixedCandidates = candidates.map(item => { - return Object.assign(Object.assign({}, item), { version: makeSemver(item.version) }); - }); - versionSpec = yield resolveStableVersionInput(versionSpec, archFilter, platFilter, fixedCandidates); - } let goFile; for (let i = 0; i < candidates.length; i++) { let candidate = candidates[i]; @@ -63479,8 +63479,23 @@ function parseGoVersionFile(versionFilePath) { return contents.trim(); } exports.parseGoVersionFile = parseGoVersionFile; +function resolveStableVersionDist(versionSpec, arch) { + return __awaiter(this, void 0, void 0, function* () { + let archFilter = sys.getArch(arch); + let platFilter = sys.getPlatform(); + const dlUrl = 'https://golang.org/dl/?mode=json&include=all'; + let candidates = yield module.exports.getVersionsDist(dlUrl); + if (!candidates) { + throw new Error(`golang download url did not return results`); + } + const fixedCandidates = candidates.map(item => { + return Object.assign(Object.assign({}, item), { version: makeSemver(item.version) }); + }); + const stableVersion = yield resolveStableVersionInput(versionSpec, archFilter, platFilter, fixedCandidates); + return stableVersion; + }); +} function resolveStableVersionInput(versionSpec, arch, platform, manifest) { - var _a; return __awaiter(this, void 0, void 0, function* () { const releases = manifest .map(item => { @@ -63493,16 +63508,13 @@ function resolveStableVersionInput(versionSpec, arch, platform, manifest) { .filter(item => !!item && !semver.prerelease(item)); if (versionSpec === utils_1.StableReleaseAlias.Stable) { core.info(`stable version resolved as ${releases[0]}`); - return (_a = releases[0]) !== null && _a !== void 0 ? _a : versionSpec; + return releases[0]; } else { const versions = releases.map(release => `${semver.major(release)}.${semver.minor(release)}`); const uniqueVersions = Array.from(new Set(versions)); const oldstableVersion = releases.find(item => item.startsWith(uniqueVersions[1])); core.info(`oldstable version resolved as ${oldstableVersion}`); - if (!oldstableVersion) { - return versionSpec; - } return oldstableVersion; } }); diff --git a/src/installer.ts b/src/installer.ts index 9be22a9..3657447 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -44,12 +44,23 @@ export async function getGo( versionSpec === StableReleaseAlias.OldStable ) { manifest = await getManifest(auth); - versionSpec = await resolveStableVersionInput( + let stableVersion = await resolveStableVersionInput( versionSpec, arch, osPlat, manifest ); + + if (!stableVersion) { + stableVersion = await resolveStableVersionDist(versionSpec, arch); + if (!stableVersion) { + throw new Error( + `Unable to find Go version '${versionSpec}' for platform ${osPlat} and architecture ${arch}.` + ); + } + } + + versionSpec = stableVersion; } if (checkLatest) { @@ -267,24 +278,6 @@ export async function findMatch( throw new Error(`golang download url did not return results`); } - if ( - versionSpec === StableReleaseAlias.Stable || - versionSpec === StableReleaseAlias.OldStable - ) { - const fixedCandidates = candidates.map(item => { - return { - ...item, - version: makeSemver(item.version) - }; - }); - versionSpec = await resolveStableVersionInput( - versionSpec, - archFilter, - platFilter, - fixedCandidates - ); - } - let goFile: IGoVersionFile | undefined; for (let i = 0; i < candidates.length; i++) { let candidate: IGoVersion = candidates[i]; @@ -373,12 +366,40 @@ export function parseGoVersionFile(versionFilePath: string): string { return contents.trim(); } +async function resolveStableVersionDist(versionSpec: string, arch: string) { + let archFilter = sys.getArch(arch); + let platFilter = sys.getPlatform(); + const dlUrl: string = 'https://golang.org/dl/?mode=json&include=all'; + let candidates: IGoVersion[] | null = await module.exports.getVersionsDist( + dlUrl + ); + if (!candidates) { + throw new Error(`golang download url did not return results`); + } + + const fixedCandidates = candidates.map(item => { + return { + ...item, + version: makeSemver(item.version) + }; + }); + + const stableVersion = await resolveStableVersionInput( + versionSpec, + archFilter, + platFilter, + fixedCandidates + ); + + return stableVersion; +} + export async function resolveStableVersionInput( versionSpec: string, arch: string, platform: string, manifest: tc.IToolRelease[] | IGoVersion[] -): Promise { +) { const releases = manifest .map(item => { const index = item.files.findIndex( @@ -394,7 +415,7 @@ export async function resolveStableVersionInput( if (versionSpec === StableReleaseAlias.Stable) { core.info(`stable version resolved as ${releases[0]}`); - return releases[0] ?? versionSpec; + return releases[0]; } else { const versions = releases.map( release => `${semver.major(release)}.${semver.minor(release)}` @@ -407,10 +428,6 @@ export async function resolveStableVersionInput( core.info(`oldstable version resolved as ${oldstableVersion}`); - if (!oldstableVersion) { - return versionSpec; - } - return oldstableVersion; } }