2020-02-09 05:21:39 +00:00
|
|
|
import * as core from '@actions/core';
|
2020-03-26 16:40:41 +00:00
|
|
|
import * as io from '@actions/io';
|
2020-02-09 05:21:39 +00:00
|
|
|
import * as tc from '@actions/tool-cache';
|
|
|
|
import * as installer from './installer';
|
2020-03-27 04:55:12 +00:00
|
|
|
import path from 'path';
|
|
|
|
import cp from 'child_process';
|
|
|
|
import fs from 'fs';
|
2020-02-09 05:21:39 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
//
|
|
|
|
let versionSpec = core.getInput('go-version');
|
2020-02-09 13:47:38 +00:00
|
|
|
|
2020-02-09 13:44:32 +00:00
|
|
|
// stable will be true unless false is the exact input
|
|
|
|
// since getting unstable versions should be explicit
|
2020-02-10 20:21:04 +00:00
|
|
|
let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
|
2020-02-09 05:21:39 +00:00
|
|
|
|
2020-02-10 03:39:44 +00:00
|
|
|
console.log(
|
|
|
|
`Setup go ${stable ? 'stable' : ''} version spec ${versionSpec}`
|
|
|
|
);
|
|
|
|
|
2020-02-09 05:21:39 +00:00
|
|
|
if (versionSpec) {
|
2020-02-09 05:29:21 +00:00
|
|
|
let installDir: string | undefined = tc.find('go', versionSpec);
|
2020-02-09 05:21:39 +00:00
|
|
|
|
2020-02-09 05:29:21 +00:00
|
|
|
if (!installDir) {
|
2020-02-10 03:39:44 +00:00
|
|
|
console.log(
|
|
|
|
`A version satisfying ${versionSpec} not found locally, attempting to download ...`
|
|
|
|
);
|
2020-02-09 05:29:21 +00:00
|
|
|
installDir = await installer.downloadGo(versionSpec, stable);
|
2020-02-10 03:42:10 +00:00
|
|
|
console.log('Installed');
|
2020-02-09 05:29:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (installDir) {
|
|
|
|
core.exportVariable('GOROOT', installDir);
|
|
|
|
core.addPath(path.join(installDir, 'bin'));
|
2020-02-10 03:42:10 +00:00
|
|
|
console.log('Added go to the path');
|
2020-03-26 16:02:52 +00:00
|
|
|
|
2020-03-26 17:46:15 +00:00
|
|
|
let added = addBinToPath();
|
|
|
|
core.debug(`add bin ${added}`);
|
2020-02-09 05:29:21 +00:00
|
|
|
} else {
|
|
|
|
throw new Error(
|
|
|
|
`Could not find a version that satisfied version spec: ${versionSpec}`
|
|
|
|
);
|
|
|
|
}
|
2020-02-09 05:21:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// add problem matchers
|
|
|
|
const matchersPath = path.join(__dirname, '..', 'matchers.json');
|
|
|
|
console.log(`##[add-matcher]${matchersPath}`);
|
2020-03-31 14:32:03 +00:00
|
|
|
|
|
|
|
// output the version actually being used
|
|
|
|
let goPath = await io.which('go');
|
2020-03-31 14:40:32 +00:00
|
|
|
let goVersion = (cp.execSync(`${goPath} version`) || '').toString();
|
2020-03-31 14:37:33 +00:00
|
|
|
console.log(goVersion);
|
2020-04-06 12:42:55 +00:00
|
|
|
|
|
|
|
core.startGroup('go env');
|
|
|
|
let goEnv = (cp.execSync(`${goPath} env`) || '').toString();
|
|
|
|
console.log(goEnv);
|
|
|
|
core.endGroup();
|
2020-02-09 05:21:39 +00:00
|
|
|
} catch (error) {
|
|
|
|
core.setFailed(error.message);
|
|
|
|
}
|
2020-02-09 05:29:21 +00:00
|
|
|
}
|
2020-03-26 16:02:52 +00:00
|
|
|
|
2020-03-27 04:55:12 +00:00
|
|
|
export async function addBinToPath(): Promise<boolean> {
|
2020-03-26 16:02:52 +00:00
|
|
|
let added = false;
|
2020-03-26 16:40:41 +00:00
|
|
|
let g = await io.which('go');
|
2020-03-27 04:55:12 +00:00
|
|
|
_debug(`which go :${g}:`);
|
2020-03-26 16:40:41 +00:00
|
|
|
if (!g) {
|
2020-03-27 04:55:12 +00:00
|
|
|
_debug('go not in the path');
|
2020-03-26 16:40:41 +00:00
|
|
|
return added;
|
|
|
|
}
|
2020-03-26 16:17:32 +00:00
|
|
|
|
2020-03-26 16:40:41 +00:00
|
|
|
let buf = cp.execSync('go env GOPATH');
|
2020-03-26 16:02:52 +00:00
|
|
|
if (buf) {
|
2020-03-26 16:40:41 +00:00
|
|
|
let gp = buf.toString().trim();
|
2020-03-27 04:55:12 +00:00
|
|
|
_debug(`go env GOPATH :${gp}:`);
|
2020-03-26 17:00:45 +00:00
|
|
|
if (!fs.existsSync(gp)) {
|
|
|
|
// some of the hosted images have go install but not profile dir
|
2020-03-27 04:55:12 +00:00
|
|
|
_debug(`creating ${gp}`);
|
2020-03-26 17:00:45 +00:00
|
|
|
io.mkdirP(gp);
|
|
|
|
}
|
2020-03-26 16:23:38 +00:00
|
|
|
|
2020-03-26 17:00:45 +00:00
|
|
|
let bp = path.join(gp, 'bin');
|
|
|
|
if (!fs.existsSync(bp)) {
|
2020-03-27 04:55:12 +00:00
|
|
|
_debug(`creating ${bp}`);
|
2020-03-26 17:00:45 +00:00
|
|
|
io.mkdirP(bp);
|
2020-03-26 16:54:21 +00:00
|
|
|
}
|
2020-03-26 17:00:45 +00:00
|
|
|
|
|
|
|
core.addPath(bp);
|
|
|
|
added = true;
|
2020-03-26 16:02:52 +00:00
|
|
|
}
|
|
|
|
return added;
|
|
|
|
}
|
2020-03-27 04:55:12 +00:00
|
|
|
|
|
|
|
export function _debug(message: string) {
|
|
|
|
core.debug(message);
|
|
|
|
}
|