diff --git a/.github/workflows/versions.yml b/.github/workflows/versions.yml index e724d3b..67502d2 100644 --- a/.github/workflows/versions.yml +++ b/.github/workflows/versions.yml @@ -25,10 +25,44 @@ jobs: with: go-version: stable architecture: x64 + check-latest: true - name: Verify Go run: go version oldstable: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + steps: + - uses: actions/checkout@v3 + - name: Setup Go and check latest + uses: ./ + with: + go-version: oldstable + architecture: x64 + check-latest: true + - name: Verify Go + run: go version + + stable-no-check-latest: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + steps: + - uses: actions/checkout@v3 + - name: Setup Go and check latest + uses: ./ + with: + go-version: stable + architecture: x64 + - name: Verify Go + run: go version + + oldstable-no-check-latest: runs-on: ${{ matrix.os }} strategy: fail-fast: false diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts index 01ad99f..7b87d7d 100644 --- a/__tests__/setup-go.test.ts +++ b/__tests__/setup-go.test.ts @@ -84,7 +84,7 @@ describe('setup-go', () => { cacheSpy = jest.spyOn(tc, 'cacheDir'); getSpy = jest.spyOn(im, 'getVersionsDist'); getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo'); - getAllVersionsSpy = jest.spyOn(im, 'getAllReleases'); + getAllVersionsSpy = jest.spyOn(im, 'getAllManifestReleases'); // io whichSpy = jest.spyOn(io, 'which'); diff --git a/dist/setup/index.js b/dist/setup/index.js index aad1d4d..d91e474 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -63213,7 +63213,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.parseGoVersionFile = exports.makeSemver = exports.getVersionsDist = exports.findMatch = exports.getInfoFromManifest = exports.getAllReleases = exports.extractGoArchive = exports.resolveVersionFromManifest = exports.getGo = void 0; +exports.parseGoVersionFile = exports.makeSemver = exports.getVersionsDist = exports.findMatch = exports.getInfoFromManifest = exports.getAllToolCacheReleases = exports.getAllManifestReleases = exports.extractGoArchive = exports.resolveVersionFromManifest = exports.getGo = void 0; const tc = __importStar(__nccwpck_require__(7784)); const core = __importStar(__nccwpck_require__(2186)); const path = __importStar(__nccwpck_require__(1017)); @@ -63337,16 +63337,22 @@ function extractGoArchive(archivePath) { }); } exports.extractGoArchive = extractGoArchive; -function getAllReleases(auth) { +function getAllManifestReleases(auth) { return __awaiter(this, void 0, void 0, function* () { - return yield tc.getManifestFromRepo('actions', 'go-versions', auth, 'main'); + return tc.getManifestFromRepo('actions', 'go-versions', auth, 'main'); }); } -exports.getAllReleases = getAllReleases; +exports.getAllManifestReleases = getAllManifestReleases; +function getAllToolCacheReleases(arch = os_1.default.arch()) { + return __awaiter(this, void 0, void 0, function* () { + return tc.findAllVersions('go', arch); + }); +} +exports.getAllToolCacheReleases = getAllToolCacheReleases; function getInfoFromManifest(versionSpec, stable, auth, arch = os_1.default.arch(), releases) { return __awaiter(this, void 0, void 0, function* () { let info = null; - releases = releases ? releases : yield getAllReleases(auth); + releases = releases ? releases : yield getAllManifestReleases(auth); core.info(`matching ${versionSpec}...`); let rel = yield tc.findFromManifest(versionSpec, stable, releases, arch); if (rel && rel.files.length > 0) { @@ -63529,11 +63535,11 @@ function run() { if (versionSpec) { let token = core.getInput('token'); let auth = !token ? undefined : `token ${token}`; - const releases = yield installer.getAllReleases(auth); + const releases = yield installer.getAllManifestReleases(auth); const checkLatest = core.getBooleanInput('check-latest'); if (versionSpec === utils_1.StableReleaseAlias.Stable || versionSpec === utils_1.StableReleaseAlias.OldStable) { - versionSpec = yield resolveStableVersionInput(versionSpec, auth, arch, releases); + versionSpec = yield resolveStableVersionInput(versionSpec, auth, arch, releases, checkLatest); } const installDir = yield installer.getGo(versionSpec, checkLatest, auth, arch, releases); core.addPath(path_1.default.join(installDir, 'bin')); @@ -63627,21 +63633,35 @@ function resolveVersionInput() { } return version; } -function resolveStableVersionInput(versionSpec, auth, arch = os_1.default.arch(), releases) { +function resolveStableVersionInput(versionSpec, auth, arch = os_1.default.arch(), manifestReleases, checkLatest = false) { return __awaiter(this, void 0, void 0, function* () { - if (versionSpec === utils_1.StableReleaseAlias.Stable) { - core.info(`Stable version resolved as ${releases[0].version}`); - return releases[0].version; + let releases; + if (checkLatest) { + releases = manifestReleases.map(release => release.version); } else { - const versions = releases.map(release => `${semver.major(release.version)}.${semver.minor(release.version)}`); + releases = yield installer.getAllToolCacheReleases(arch); + } + if (versionSpec === utils_1.StableReleaseAlias.Stable) { + core.info(`Stable version resolved as ${releases[0]}`); + return releases[0]; + } + else { + const versions = releases.map(release => `${semver.major(release)}.${semver.minor(release)}`); const uniqueVersions = Array.from(new Set(versions)); - core.info(`Oldstable version resolved as ${uniqueVersions[1]}`); - const oldstableVersion = yield installer.getInfoFromManifest(uniqueVersions[1], true, auth, arch, releases); + let oldstableVersion; + if (checkLatest) { + oldstableVersion = yield installer.getInfoFromManifest(uniqueVersions[1], true, auth, arch, manifestReleases); + oldstableVersion = oldstableVersion === null || oldstableVersion === void 0 ? void 0 : oldstableVersion.resolvedVersion; + } + else { + oldstableVersion = uniqueVersions[1]; + } + core.info(`Oldstable version resolved as ${oldstableVersion}`); if (!oldstableVersion) { return versionSpec; } - return oldstableVersion.resolvedVersion; + return oldstableVersion; } }); } diff --git a/src/installer.ts b/src/installer.ts index 36b20c4..d4ce093 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -5,7 +5,7 @@ import * as semver from 'semver'; import * as httpm from '@actions/http-client'; import * as sys from './system'; import fs from 'fs'; -import os from 'os'; +import os, {arch} from 'os'; type InstallationType = 'dist' | 'manifest'; @@ -183,8 +183,12 @@ export async function extractGoArchive(archivePath: string): Promise { return extPath; } -export async function getAllReleases(auth: string | undefined) { - return await tc.getManifestFromRepo('actions', 'go-versions', auth, 'main'); +export async function getAllManifestReleases(auth: string | undefined) { + return tc.getManifestFromRepo('actions', 'go-versions', auth, 'main'); +} + +export async function getAllToolCacheReleases(arch = os.arch()) { + return tc.findAllVersions('go', arch); } export async function getInfoFromManifest( @@ -195,7 +199,7 @@ export async function getInfoFromManifest( releases?: tc.IToolRelease[] | undefined ): Promise { let info: IGoVersionInfo | null = null; - releases = releases ? releases : await getAllReleases(auth); + releases = releases ? releases : await getAllManifestReleases(auth); core.info(`matching ${versionSpec}...`); diff --git a/src/main.ts b/src/main.ts index 3899765..f3182bb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -32,7 +32,7 @@ export async function run() { let token = core.getInput('token'); let auth = !token ? undefined : `token ${token}`; - const releases = await installer.getAllReleases(auth); + const releases = await installer.getAllManifestReleases(auth); const checkLatest = core.getBooleanInput('check-latest'); @@ -44,7 +44,8 @@ export async function run() { versionSpec, auth, arch, - releases + releases, + checkLatest ); } @@ -166,33 +167,47 @@ async function resolveStableVersionInput( versionSpec: string, auth: string | undefined, arch = os.arch(), - releases: IToolRelease[] + manifestReleases: IToolRelease[], + checkLatest = false ): Promise { - if (versionSpec === StableReleaseAlias.Stable) { - core.info(`Stable version resolved as ${releases[0].version}`); + let releases; + if (checkLatest) { + releases = manifestReleases.map(release => release.version); + } else { + releases = await installer.getAllToolCacheReleases(arch); + } - return releases[0].version; + if (versionSpec === StableReleaseAlias.Stable) { + core.info(`Stable version resolved as ${releases[0]}`); + + return releases[0]; } else { const versions = releases.map( - release => - `${semver.major(release.version)}.${semver.minor(release.version)}` + release => `${semver.major(release)}.${semver.minor(release)}` ); const uniqueVersions = Array.from(new Set(versions)); - core.info(`Oldstable version resolved as ${uniqueVersions[1]}`); + let oldstableVersion; - const oldstableVersion = await installer.getInfoFromManifest( - uniqueVersions[1], - true, - auth, - arch, - releases - ); + if (checkLatest) { + oldstableVersion = await installer.getInfoFromManifest( + uniqueVersions[1], + true, + auth, + arch, + manifestReleases + ); + oldstableVersion = oldstableVersion?.resolvedVersion; + } else { + oldstableVersion = uniqueVersions[1]; + } + + core.info(`Oldstable version resolved as ${oldstableVersion}`); if (!oldstableVersion) { return versionSpec; } - return oldstableVersion.resolvedVersion; + return oldstableVersion; } }