Skip to content

Commit

Permalink
Add JSON output of go env and some env as strings
Browse files Browse the repository at this point in the history
Additional outputs are:
- GOPATH as `go-path` string
- GOROOT as `go-root` string
- GOMOD as `go-mod` string
- GOCACHE as `go-cache` string
- GOMODCACHE as `go-mod-cache` string
- `go env` as `go-env` JSON
  • Loading branch information
lucacome committed Mar 9, 2023
1 parent 7406d65 commit 7d76f7a
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 16 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/outputs.yml
Original file line number Diff line number Diff line change
@@ -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 GOROOT=${{ steps.setup-go.outputs.go-root }}
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 Go environment variables json:
jq . <<< '${{ steps.setup-go.outputs.go-env }}'
23 changes: 23 additions & 0 deletions __tests__/setup-go.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,29 @@ describe('setup-go', () => {
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 () => {
os.platform = 'darwin';
os.arch = 'x64';
Expand Down
10 changes: 10 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,16 @@ inputs:
outputs:
go-version:
description: 'The installed Go version. Useful when given a version range as input.'
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:
description: 'A boolean value to indicate if a cache was hit'
runs:
Expand Down
32 changes: 26 additions & 6 deletions dist/setup/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -63557,7 +63557,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
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 io = __importStar(__nccwpck_require__(7436));
const installer = __importStar(__nccwpck_require__(2574));
Expand Down Expand Up @@ -63602,19 +63602,29 @@ function run() {
}
const goPath = yield io.which('go');
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 && cache_utils_1.isCacheFeatureAvailable()) {
const packageManager = 'default';
const cacheDependencyPath = core.getInput('cache-dependency-path');
yield cache_restore_1.restoreCache(parseGoVersion(goVersion), packageManager, cacheDependencyPath);
yield cache_restore_1.restoreCache(parsedGoVersion, packageManager, cacheDependencyPath);
}
// add problem matchers
const matchersPath = path_1.default.join(__dirname, '../..', 'matchers.json');
core.info(`##[add-matcher]${matchersPath}`);
// output the version actually being used
core.info(goVersion);
core.setOutput('go-version', parseGoVersion(goVersion));
core.setOutput('go-version', parsedGoVersion);
core.setOutput('go-path', goEnvJson['GOPATH']);
core.setOutput('go-root', goEnvJson['GOROOT']);
core.setOutput('go-cache', goEnvJson['GOCACHE']);
core.setOutput('go-mod-cache', goEnvJson['GOMODCACHE']);
core.setOutput('go-env', goEnvJson);
core.startGroup('go env');
const goEnv = (child_process_1.default.execSync(`${goPath} env`) || '').toString();
core.info(goEnv);
core.endGroup();
}
Expand Down Expand Up @@ -63662,6 +63672,16 @@ function parseGoVersion(versionString) {
return versionString.split(' ')[2].slice('go'.length);
}
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() {
let version = core.getInput('go-version');
const versionFilePath = core.getInput('go-version-file');
Expand Down
39 changes: 29 additions & 10 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,28 +58,35 @@ export async function run() {

const goPath = await io.which('go');
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()) {
const packageManager = 'default';
const cacheDependencyPath = core.getInput('cache-dependency-path');
await restoreCache(
parseGoVersion(goVersion),
packageManager,
cacheDependencyPath
);
await restoreCache(parsedGoVersion, packageManager, cacheDependencyPath);
}

// add problem matchers
const matchersPath = path.join(__dirname, '../..', 'matchers.json');
core.info(`##[add-matcher]${matchersPath}`);

// output the version actually being used
core.info(goVersion);

core.setOutput('go-version', parseGoVersion(goVersion));
core.setOutput('go-version', parsedGoVersion);
core.setOutput('go-path', goEnvJson['GOPATH']);
core.setOutput('go-root', goEnvJson['GOROOT']);
core.setOutput('go-cache', goEnvJson['GOCACHE']);
core.setOutput('go-mod-cache', goEnvJson['GOMODCACHE']);
core.setOutput('go-env', goEnvJson);

core.startGroup('go env');
const goEnv = (cp.execSync(`${goPath} env`) || '').toString();
core.info(goEnv);
core.endGroup();
} catch (error) {
Expand Down Expand Up @@ -126,6 +133,18 @@ export function parseGoVersion(versionString: string): string {
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 {
let version = core.getInput('go-version');
const versionFilePath = core.getInput('go-version-file');
Expand Down

0 comments on commit 7d76f7a

Please sign in to comment.