mirror of
https://code.forgejo.org/actions/setup-go.git
synced 2024-12-25 12:05:49 +00:00
Add JSON output of go env
and some env as strings
Additional outputs are: - GOPATH as `go-path` string - GOMOD as `go-mod` string - GOCACHE as `go-cache` string - GOMODCACHE as `go-mod-cache` string - `go env` as `go-env` JSON
This commit is contained in:
parent
0a12ed9d6a
commit
993eb07692
5 changed files with 112 additions and 12 deletions
24
.github/workflows/outputs.yml
vendored
Normal file
24
.github/workflows/outputs.yml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
name: Test outputs
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
setup-go-env:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- id: setup-go
|
||||||
|
uses: ./
|
||||||
|
- run: |
|
||||||
|
echo GOPATH=${{ steps.setup-go.outputs.go-path }}
|
||||||
|
echo GOMOD=${{ steps.setup-go.outputs.go-mod }}
|
||||||
|
echo GOMODCACHE=${{ steps.setup-go.outputs.go-mod-cache }}
|
||||||
|
echo GOVERSION=${{ steps.setup-go.outputs.go-version }}
|
||||||
|
echo GOCACHE=${{ steps.setup-go.outputs.go-cache }}
|
||||||
|
|
||||||
|
echo Go environment variables json:
|
||||||
|
jq . <<< '${{ steps.setup-go.outputs.go-env }}'
|
|
@ -138,6 +138,29 @@ describe('setup-go', () => {
|
||||||
expect(main.parseGoVersion(goVersionOutput)).toBe('1.16.6');
|
expect(main.parseGoVersion(goVersionOutput)).toBe('1.16.6');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can read go env variables', async () => {
|
||||||
|
const goRoot = '/opt/hostedtoolcache/go/1.18.10/x64';
|
||||||
|
const goPath = '/home/runner/go';
|
||||||
|
const goModCache = '/home/runner/go/pkg/mod';
|
||||||
|
const goCache = '/home/runner/.cache/go-build';
|
||||||
|
const goVersion = 'go1.18.10';
|
||||||
|
|
||||||
|
const env = `
|
||||||
|
GOROOT="${goRoot}"
|
||||||
|
GOPATH="${goPath}"
|
||||||
|
GOMODCACHE="${goModCache}"
|
||||||
|
GOCACHE="${goCache}"
|
||||||
|
GOVERSION="${goVersion}"
|
||||||
|
`;
|
||||||
|
const json = JSON.parse(main.convertEnvStringToJson(env));
|
||||||
|
expect(json).toBeDefined();
|
||||||
|
expect(json['GOROOT']).toBe(goRoot);
|
||||||
|
expect(json['GOPATH']).toBe(goPath);
|
||||||
|
expect(json['GOMODCACHE']).toBe(goModCache);
|
||||||
|
expect(json['GOCACHE']).toBe(goCache);
|
||||||
|
expect(json['GOVERSION']).toBe(goVersion);
|
||||||
|
});
|
||||||
|
|
||||||
it('can find 1.9.7 from manifest on osx', async () => {
|
it('can find 1.9.7 from manifest on osx', async () => {
|
||||||
os.platform = 'darwin';
|
os.platform = 'darwin';
|
||||||
os.arch = 'x64';
|
os.arch = 'x64';
|
||||||
|
|
12
action.yml
12
action.yml
|
@ -22,6 +22,18 @@ inputs:
|
||||||
outputs:
|
outputs:
|
||||||
go-version:
|
go-version:
|
||||||
description: 'The installed Go version. Useful when given a version range as input.'
|
description: 'The installed Go version. Useful when given a version range as input.'
|
||||||
|
go-cache:
|
||||||
|
description: 'The GOCACHE environment variable'
|
||||||
|
go-path:
|
||||||
|
description: 'The GOPATH environment variable'
|
||||||
|
go-root:
|
||||||
|
description: 'The GOROOT environment variable'
|
||||||
|
go-mod:
|
||||||
|
description: 'The GOMOD environment variable'
|
||||||
|
go-mod-cache:
|
||||||
|
description: 'The GOMODCACHE environment variable'
|
||||||
|
go-env:
|
||||||
|
description: 'The Go environment variables in JSON format'
|
||||||
cache-hit:
|
cache-hit:
|
||||||
description: 'A boolean value to indicate if a cache was hit'
|
description: 'A boolean value to indicate if a cache was hit'
|
||||||
runs:
|
runs:
|
||||||
|
|
31
dist/setup/index.js
vendored
31
dist/setup/index.js
vendored
|
@ -88634,7 +88634,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.parseGoVersion = exports.addBinToPath = exports.run = void 0;
|
exports.convertEnvStringToJson = exports.parseGoVersion = exports.addBinToPath = exports.run = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
const io = __importStar(__nccwpck_require__(7436));
|
const io = __importStar(__nccwpck_require__(7436));
|
||||||
const installer = __importStar(__nccwpck_require__(2574));
|
const installer = __importStar(__nccwpck_require__(2574));
|
||||||
|
@ -88682,11 +88682,19 @@ function run() {
|
||||||
core.debug(`add bin ${added}`);
|
core.debug(`add bin ${added}`);
|
||||||
const goPath = yield io.which('go');
|
const goPath = yield io.which('go');
|
||||||
const goVersion = (child_process_1.default.execSync(`${goPath} version`) || '').toString();
|
const goVersion = (child_process_1.default.execSync(`${goPath} version`) || '').toString();
|
||||||
|
const goEnv = (child_process_1.default.execSync(`${goPath} env`) || '').toString();
|
||||||
|
const goEnvJson = JSON.parse(convertEnvStringToJson(goEnv));
|
||||||
|
const parsedGoVersion = parseGoVersion(goVersion);
|
||||||
|
// Go versions less that 1.16 do not have the GOVERSION environment variable
|
||||||
|
if (semver.lt(parsedGoVersion, '1.16.0')) {
|
||||||
|
goEnvJson['GOVERSION'] = 'go' + parsedGoVersion;
|
||||||
|
}
|
||||||
|
core.info(goVersion);
|
||||||
if (cache && (0, cache_utils_1.isCacheFeatureAvailable)()) {
|
if (cache && (0, cache_utils_1.isCacheFeatureAvailable)()) {
|
||||||
const packageManager = 'default';
|
const packageManager = 'default';
|
||||||
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
||||||
try {
|
try {
|
||||||
yield (0, cache_restore_1.restoreCache)(parseGoVersion(goVersion), packageManager, cacheDependencyPath);
|
yield (0, cache_restore_1.restoreCache)(parsedGoVersion, packageManager, cacheDependencyPath);
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
core.warning(`Restore cache failed: ${error.message}`);
|
core.warning(`Restore cache failed: ${error.message}`);
|
||||||
|
@ -88695,11 +88703,12 @@ function run() {
|
||||||
// add problem matchers
|
// add problem matchers
|
||||||
const matchersPath = path_1.default.join(__dirname, '../..', 'matchers.json');
|
const matchersPath = path_1.default.join(__dirname, '../..', 'matchers.json');
|
||||||
core.info(`##[add-matcher]${matchersPath}`);
|
core.info(`##[add-matcher]${matchersPath}`);
|
||||||
// output the version actually being used
|
core.setOutput('go-version', parsedGoVersion);
|
||||||
core.info(goVersion);
|
core.setOutput('go-path', goEnvJson['GOPATH']);
|
||||||
core.setOutput('go-version', parseGoVersion(goVersion));
|
core.setOutput('go-cache', goEnvJson['GOCACHE']);
|
||||||
|
core.setOutput('go-mod-cache', goEnvJson['GOMODCACHE']);
|
||||||
|
core.setOutput('go-env', goEnvJson);
|
||||||
core.startGroup('go env');
|
core.startGroup('go env');
|
||||||
const goEnv = (child_process_1.default.execSync(`${goPath} env`) || '').toString();
|
|
||||||
core.info(goEnv);
|
core.info(goEnv);
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
}
|
}
|
||||||
|
@ -88747,6 +88756,16 @@ function parseGoVersion(versionString) {
|
||||||
return versionString.split(' ')[2].slice('go'.length);
|
return versionString.split(' ')[2].slice('go'.length);
|
||||||
}
|
}
|
||||||
exports.parseGoVersion = parseGoVersion;
|
exports.parseGoVersion = parseGoVersion;
|
||||||
|
function convertEnvStringToJson(envString) {
|
||||||
|
const envArray = envString.split('\n');
|
||||||
|
const envObject = {};
|
||||||
|
envArray.forEach(envVar => {
|
||||||
|
const [key, value] = envVar.split(/=(?=")/);
|
||||||
|
envObject[key] = value === null || value === void 0 ? void 0 : value.replace(/"/g, '');
|
||||||
|
});
|
||||||
|
return JSON.stringify(envObject);
|
||||||
|
}
|
||||||
|
exports.convertEnvStringToJson = convertEnvStringToJson;
|
||||||
function resolveVersionInput() {
|
function resolveVersionInput() {
|
||||||
let version = core.getInput('go-version');
|
let version = core.getInput('go-version');
|
||||||
const versionFilePath = core.getInput('go-version-file');
|
const versionFilePath = core.getInput('go-version-file');
|
||||||
|
|
34
src/main.ts
34
src/main.ts
|
@ -63,13 +63,23 @@ export async function run() {
|
||||||
|
|
||||||
const goPath = await io.which('go');
|
const goPath = await io.which('go');
|
||||||
const goVersion = (cp.execSync(`${goPath} version`) || '').toString();
|
const goVersion = (cp.execSync(`${goPath} version`) || '').toString();
|
||||||
|
const goEnv = (cp.execSync(`${goPath} env`) || '').toString();
|
||||||
|
const goEnvJson = JSON.parse(convertEnvStringToJson(goEnv));
|
||||||
|
const parsedGoVersion = parseGoVersion(goVersion);
|
||||||
|
|
||||||
|
// Go versions less that 1.16 do not have the GOVERSION environment variable
|
||||||
|
if (semver.lt(parsedGoVersion, '1.16.0')) {
|
||||||
|
goEnvJson['GOVERSION'] = 'go' + parsedGoVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info(goVersion);
|
||||||
|
|
||||||
if (cache && isCacheFeatureAvailable()) {
|
if (cache && isCacheFeatureAvailable()) {
|
||||||
const packageManager = 'default';
|
const packageManager = 'default';
|
||||||
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
||||||
try {
|
try {
|
||||||
await restoreCache(
|
await restoreCache(
|
||||||
parseGoVersion(goVersion),
|
parsedGoVersion,
|
||||||
packageManager,
|
packageManager,
|
||||||
cacheDependencyPath
|
cacheDependencyPath
|
||||||
);
|
);
|
||||||
|
@ -82,13 +92,13 @@ export async function run() {
|
||||||
const matchersPath = path.join(__dirname, '../..', 'matchers.json');
|
const matchersPath = path.join(__dirname, '../..', 'matchers.json');
|
||||||
core.info(`##[add-matcher]${matchersPath}`);
|
core.info(`##[add-matcher]${matchersPath}`);
|
||||||
|
|
||||||
// output the version actually being used
|
core.setOutput('go-version', parsedGoVersion);
|
||||||
core.info(goVersion);
|
core.setOutput('go-path', goEnvJson['GOPATH']);
|
||||||
|
core.setOutput('go-cache', goEnvJson['GOCACHE']);
|
||||||
core.setOutput('go-version', parseGoVersion(goVersion));
|
core.setOutput('go-mod-cache', goEnvJson['GOMODCACHE']);
|
||||||
|
core.setOutput('go-env', goEnvJson);
|
||||||
|
|
||||||
core.startGroup('go env');
|
core.startGroup('go env');
|
||||||
const goEnv = (cp.execSync(`${goPath} env`) || '').toString();
|
|
||||||
core.info(goEnv);
|
core.info(goEnv);
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -135,6 +145,18 @@ export function parseGoVersion(versionString: string): string {
|
||||||
return versionString.split(' ')[2].slice('go'.length);
|
return versionString.split(' ')[2].slice('go'.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function convertEnvStringToJson(envString: string): string {
|
||||||
|
const envArray = envString.split('\n');
|
||||||
|
const envObject: {[key: string]: string} = {};
|
||||||
|
|
||||||
|
envArray.forEach(envVar => {
|
||||||
|
const [key, value] = envVar.split(/=(?=")/);
|
||||||
|
envObject[key] = value?.replace(/"/g, '');
|
||||||
|
});
|
||||||
|
|
||||||
|
return JSON.stringify(envObject);
|
||||||
|
}
|
||||||
|
|
||||||
function resolveVersionInput(): string {
|
function resolveVersionInput(): string {
|
||||||
let version = core.getInput('go-version');
|
let version = core.getInput('go-version');
|
||||||
const versionFilePath = core.getInput('go-version-file');
|
const versionFilePath = core.getInput('go-version-file');
|
||||||
|
|
Loading…
Reference in a new issue