mirror of
https://github.com/actions/setup-go.git
synced 2026-08-24 19:13:48 +00:00
Basic validation / Basic validation (push) Failing after 0s
Check dist/ / Check dist/ (push) Failing after 0s
CodeQL analysis / CodeQL analysis (push) Failing after 0s
Licensed / Licensed (push) Failing after 0s
Validate 'setup-go' / Setup local-cache version (1.22.8, ubuntu-latest) (push) Successful in 27s
Validate 'setup-go' / aliases-arch (x64, ubuntu-latest, oldstable) (push) Successful in 28s
Validate 'setup-go' / check-latest (1.20, ubuntu-latest) (push) Successful in 30s
Validate 'setup-go' / aliases-arch (x64, ubuntu-latest, stable) (push) Successful in 45s
Validate 'setup-go' / oldstable (ubuntu-latest) (push) Successful in 45s
Validate 'setup-go' / stable (ubuntu-latest) (push) Successful in 47s
Validate 'setup-go' / Setup local-cache version (1.21.13, ubuntu-latest) (push) Successful in 49s
Validate 'setup-go' / aliases-arch (x32, ubuntu-latest, oldstable) (push) Successful in 51s
Validate 'setup-go' / Setup local-cache version (1.23.2, ubuntu-latest) (push) Successful in 51s
Validate 'setup-go' / aliases-arch (x32, ubuntu-latest, stable) (push) Successful in 54s
Validate 'setup-go' / check-latest (1.21, ubuntu-latest) (push) Successful in 53s
Validate 'setup-go' / check-latest (1.22, ubuntu-latest) (push) Successful in 31s
Validate 'setup-go' / check-latest (1.23, ubuntu-latest) (push) Successful in 31s
Validate 'setup-go' / architecture (x64, 1.20.14, ubuntu-latest) (push) Successful in 36s
Validate 'setup-go' / go-version-file (ubuntu-latest) (push) Successful in 30s
Validate Microsoft build of Go / Microsoft build of Go 1.25 on ubuntu-latest (push) Failing after 1m4s
Validate Microsoft build of Go / Microsoft build of Go arch x64 on ubuntu-latest (push) Failing after 1m4s
Validate 'setup-go' / go-version-file-with-gowork (ubuntu-latest) (push) Successful in 28s
Validate Microsoft build of Go / Microsoft build of Go via env var on ubuntu-latest (push) Successful in 1m15s
Validate 'setup-go' / go-version-file-with-go-version (ubuntu-latest) (push) Successful in 29s
Validate Microsoft build of Go / Microsoft build of Go with caching on ubuntu-latest (push) Successful in 1m26s
Validate 'setup-go' / setup-versions-from-dist (1.11.12, ubuntu-latest) (push) Successful in 35s
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, ubuntu-latest) (push) Successful in 36s
Validate 'setup-go' / architecture (x64, 1.21, ubuntu-latest) (push) Successful in 36s
Validate 'setup-go' / architecture (x64, 1.23, ubuntu-latest) (push) Successful in 33s
Validate 'setup-go' / go-version-file-with-tool-versions (ubuntu-latest) (push) Successful in 31s
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, ubuntu-latest) (push) Successful in 31s
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, ubuntu-latest) (push) Successful in 34s
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, ubuntu-latest) (push) Successful in 35s
Validate Microsoft build of Go / Microsoft build of Go 1.24 on ubuntu-latest (push) Successful in 1m36s
Validate 'setup-go' / architecture (x64, 1.22, ubuntu-latest) (push) Successful in 36s
Validate 'setup-go' / stable (windows-latest) (push) Has been cancelled
Validate 'setup-go' / oldstable (macos-latest) (push) Has been cancelled
Validate 'setup-go' / oldstable (macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / oldstable (windows-latest) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x32, windows-latest, oldstable) (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go 1.24 on macos-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go arch x64 on macos-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go 1.24 on windows-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go 1.25 on macos-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go 1.25 on windows-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go via env var on macos-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go via env var on windows-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go arch arm64 on macos-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go with caching on macos-latest (push) Has been cancelled
Validate Microsoft build of Go / Microsoft build of Go with caching on windows-latest (push) Has been cancelled
Validate 'setup-go' / stable (macos-latest) (push) Has been cancelled
Validate 'setup-go' / stable (macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x32, windows-latest, stable) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x64, macos-latest, oldstable) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x64, macos-latest, stable) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x64, macos-latest-large, oldstable) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x64, macos-latest-large, stable) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x64, windows-latest, oldstable) (push) Has been cancelled
Validate 'setup-go' / aliases-arch (x64, windows-latest, stable) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.20.14, windows-latest) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.21.13, macos-latest) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.21.13, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.21.13, windows-latest) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.22.8, macos-latest) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.22.8, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.22.8, windows-latest) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.23.2, macos-latest) (push) Has been cancelled
Validate 'setup-go' / Setup local-cache version (1.23.2, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.20, macos-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.20, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.20, windows-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.21, macos-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.21, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.21, windows-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.22, macos-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.22, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.22, windows-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.23, macos-latest) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.23, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / check-latest (1.23, windows-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file (macos-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file (macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-tool-versions (macos-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-tool-versions (macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-tool-versions (windows-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, macos-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, windows-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, macos-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (arm64, 1.23, macos-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-dist (1.11.12, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-dist (1.11.12, windows-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (arm64, 1.22, macos-latest) (push) Has been cancelled
Validate Windows installation / Validate if hostedtoolcache works as expected (false, 1.20.1) (push) Has been cancelled
Validate Windows installation / Validate if symlink is not created for default go (false) (push) Has been cancelled
Validate Windows installation / Validate if symlink is not created for default go (true) (push) Has been cancelled
Validate 'setup-go' / go-version-file (windows-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-gowork (macos-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-gowork (macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-gowork (windows-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-go-version (macos-latest) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-go-version (macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / go-version-file-with-go-version (windows-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, windows-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, macos-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, macos-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, windows-latest) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, windows-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (arm64, 1.20.14, macos-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (arm64, 1.21, macos-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.20.14, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.20.14, windows-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.21, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.21, windows-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.22, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.22, windows-latest) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.23, macos-latest-large) (push) Has been cancelled
Validate 'setup-go' / architecture (x64, 1.23, windows-latest) (push) Has been cancelled
Validate Windows installation / Validate if symlink is created (false, 1.20.1) (push) Has been cancelled
Validate Windows installation / Validate if symlink is created (true, 1.20.1) (push) Has been cancelled
Validate Windows installation / Find default go version (push) Has been cancelled
* Migrate to ESM and upgrade dependencies * Remove unused tsconfig.eslint.json * bump version to 7.0.0 in package.json and package-lock.json * Add ESM migration note to README for V7 * Remove unnecessary devDependencies: ts-node, @types/jest * npm audit fix * Update README with ESM migration details Clarified migration details to ESM for action compatibility. * Downgrade @types/node to ^24, clean up tsconfig and README.
197 lines
5.8 KiB
TypeScript
197 lines
5.8 KiB
TypeScript
import * as core from '@actions/core';
|
|
import * as io from '@actions/io';
|
|
import * as installer from './installer.js';
|
|
import * as semver from 'semver';
|
|
import path from 'path';
|
|
import {fileURLToPath} from 'url';
|
|
import {restoreCache} from './cache-restore.js';
|
|
import {isCacheFeatureAvailable} from './cache-utils.js';
|
|
import cp from 'child_process';
|
|
import fs from 'fs';
|
|
import os from 'os';
|
|
import {Architecture} from './types.js';
|
|
|
|
export async function run() {
|
|
try {
|
|
//
|
|
// versionSpec is optional. If supplied, install / use from the tool cache
|
|
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
|
|
//
|
|
const versionSpec = resolveVersionInput();
|
|
setGoToolchain();
|
|
|
|
const cache = core.getBooleanInput('cache');
|
|
core.info(`Setup go version spec ${versionSpec}`);
|
|
|
|
let arch = core.getInput('architecture') as Architecture;
|
|
|
|
if (!arch) {
|
|
arch = os.arch() as Architecture;
|
|
}
|
|
|
|
if (versionSpec) {
|
|
const token = core.getInput('token');
|
|
const auth = !token ? undefined : `token ${token}`;
|
|
|
|
const checkLatest = core.getBooleanInput('check-latest');
|
|
|
|
const goDownloadBaseUrl =
|
|
core.getInput('go-download-base-url') ||
|
|
process.env['GO_DOWNLOAD_BASE_URL'] ||
|
|
undefined;
|
|
|
|
if (goDownloadBaseUrl) {
|
|
core.info(`Using custom Go download base URL: ${goDownloadBaseUrl}`);
|
|
}
|
|
|
|
const installDir = await installer.getGo(
|
|
versionSpec,
|
|
checkLatest,
|
|
auth,
|
|
arch,
|
|
goDownloadBaseUrl
|
|
);
|
|
|
|
const installDirVersion = path.basename(path.dirname(installDir));
|
|
|
|
core.addPath(path.join(installDir, 'bin'));
|
|
core.info('Added go to the path');
|
|
|
|
const version = installer.makeSemver(installDirVersion);
|
|
// Go versions less than 1.9 require GOROOT to be set
|
|
if (semver.lt(version, '1.9.0')) {
|
|
core.info('Setting GOROOT for Go version < 1.9');
|
|
core.exportVariable('GOROOT', installDir);
|
|
}
|
|
|
|
core.info(`Successfully set up Go version ${versionSpec}`);
|
|
} else {
|
|
core.info(
|
|
'[warning]go-version input was not specified. The action will try to use pre-installed version.'
|
|
);
|
|
}
|
|
|
|
const added = await addBinToPath();
|
|
core.debug(`add bin ${added}`);
|
|
|
|
const goPath = await io.which('go');
|
|
const goVersion = (cp.execSync(`${goPath} version`) || '').toString();
|
|
|
|
if (cache && isCacheFeatureAvailable()) {
|
|
const packageManager = 'default';
|
|
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
|
try {
|
|
await restoreCache(
|
|
parseGoVersion(goVersion),
|
|
packageManager,
|
|
cacheDependencyPath
|
|
);
|
|
} catch (error) {
|
|
core.warning(`Restore cache failed: ${(error as Error).message}`);
|
|
}
|
|
}
|
|
|
|
// add problem matchers
|
|
const matchersPath = path.join(
|
|
path.dirname(fileURLToPath(import.meta.url)),
|
|
'../..',
|
|
'matchers.json'
|
|
);
|
|
core.info(`##[add-matcher]${matchersPath}`);
|
|
|
|
// output the version actually being used
|
|
core.info(goVersion);
|
|
|
|
core.setOutput('go-version', parseGoVersion(goVersion));
|
|
|
|
core.startGroup('go env');
|
|
const goEnv = (cp.execSync(`${goPath} env`) || '').toString();
|
|
core.info(goEnv);
|
|
core.endGroup();
|
|
} catch (error) {
|
|
core.setFailed((error as Error).message);
|
|
}
|
|
}
|
|
|
|
export async function addBinToPath(): Promise<boolean> {
|
|
let added = false;
|
|
const g = await io.which('go');
|
|
core.debug(`which go :${g}:`);
|
|
if (!g) {
|
|
core.debug('go not in the path');
|
|
return added;
|
|
}
|
|
|
|
const buf = cp.execSync('go env GOPATH');
|
|
if (buf.length > 1) {
|
|
const gp = buf.toString().trim();
|
|
core.debug(`go env GOPATH :${gp}:`);
|
|
if (!fs.existsSync(gp)) {
|
|
// some of the hosted images have go install but not profile dir
|
|
core.debug(`creating ${gp}`);
|
|
await io.mkdirP(gp);
|
|
}
|
|
|
|
const bp = path.join(gp, 'bin');
|
|
if (!fs.existsSync(bp)) {
|
|
core.debug(`creating ${bp}`);
|
|
await io.mkdirP(bp);
|
|
}
|
|
|
|
core.addPath(bp);
|
|
added = true;
|
|
}
|
|
return added;
|
|
}
|
|
|
|
export function parseGoVersion(versionString: string): string {
|
|
// get the installed version as an Action output
|
|
// based on go/src/cmd/go/internal/version/version.go:
|
|
// fmt.Printf("go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH)
|
|
// expecting go<version> for runtime.Version()
|
|
return versionString.split(' ')[2].slice('go'.length);
|
|
}
|
|
|
|
function resolveVersionInput(): string {
|
|
let version = core.getInput('go-version');
|
|
const versionFilePath = core.getInput('go-version-file');
|
|
|
|
if (version && versionFilePath) {
|
|
core.warning(
|
|
'Both go-version and go-version-file inputs are specified, only go-version will be used'
|
|
);
|
|
}
|
|
|
|
if (version) {
|
|
return version;
|
|
}
|
|
|
|
if (versionFilePath) {
|
|
if (!fs.existsSync(versionFilePath)) {
|
|
throw new Error(
|
|
`The specified go version file at: ${versionFilePath} does not exist`
|
|
);
|
|
}
|
|
version = installer.parseGoVersionFile(versionFilePath);
|
|
}
|
|
|
|
return version;
|
|
}
|
|
|
|
function setGoToolchain() {
|
|
// docs: https://go.dev/doc/toolchain
|
|
// "local indicates the bundled Go toolchain (the one that shipped with the go command being run)"
|
|
// this is so any 'go' command is run with the selected Go version
|
|
// and doesn't trigger a toolchain download and run commands with that
|
|
// see e.g. issue #424
|
|
// and a similar discussion: https://github.com/docker-library/golang/issues/472.
|
|
// Set the value in process env so any `go` commands run as child-process
|
|
// don't cause toolchain downloads
|
|
process.env[installer.GOTOOLCHAIN_ENV_VAR] = installer.GOTOOLCHAIN_LOCAL_VAL;
|
|
// and in the runner env so e.g. a user running `go mod tidy` won't cause it
|
|
core.exportVariable(
|
|
installer.GOTOOLCHAIN_ENV_VAR,
|
|
installer.GOTOOLCHAIN_LOCAL_VAL
|
|
);
|
|
}
|