Compare commits

..

1 Commits

Author SHA1 Message Date
Luca Comellini
18710d65d4 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
2025-03-12 12:46:13 -07:00
8 changed files with 118 additions and 51 deletions

24
.github/workflows/outputs.yml vendored Normal file
View 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@v4
- 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 }}'

View File

@@ -1,6 +1,6 @@
--- ---
name: undici name: undici
version: 5.28.5 version: 5.28.4
type: npm type: npm
summary: An HTTP/1.1 client, written from scratch for Node.js summary: An HTTP/1.1 client, written from scratch for Node.js
homepage: https://undici.nodejs.org homepage: https://undici.nodejs.org

View File

@@ -143,6 +143,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';

View File

@@ -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:

View File

@@ -65451,14 +65451,6 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(9830)
const { File: UndiciFile } = __nccwpck_require__(8511) const { File: UndiciFile } = __nccwpck_require__(8511)
const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685)
let random
try {
const crypto = __nccwpck_require__(6005)
random = (max) => crypto.randomInt(0, max)
} catch {
random = (max) => Math.floor(Math.random(max))
}
let ReadableStream = globalThis.ReadableStream let ReadableStream = globalThis.ReadableStream
/** @type {globalThis['File']} */ /** @type {globalThis['File']} */
@@ -65544,7 +65536,7 @@ function extractBody (object, keepalive = false) {
// Set source to a copy of the bytes held by object. // Set source to a copy of the bytes held by object.
source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength))
} else if (util.isFormDataLike(object)) { } else if (util.isFormDataLike(object)) {
const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}`
const prefix = `--${boundary}\r\nContent-Disposition: form-data` const prefix = `--${boundary}\r\nContent-Disposition: form-data`
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
@@ -86899,14 +86891,6 @@ module.exports = require("net");
/***/ }), /***/ }),
/***/ 6005:
/***/ ((module) => {
"use strict";
module.exports = require("node:crypto");
/***/ }),
/***/ 5673: /***/ 5673:
/***/ ((module) => { /***/ ((module) => {

49
dist/setup/index.js vendored
View File

@@ -71739,14 +71739,6 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(9830)
const { File: UndiciFile } = __nccwpck_require__(8511) const { File: UndiciFile } = __nccwpck_require__(8511)
const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685)
let random
try {
const crypto = __nccwpck_require__(6005)
random = (max) => crypto.randomInt(0, max)
} catch {
random = (max) => Math.floor(Math.random(max))
}
let ReadableStream = globalThis.ReadableStream let ReadableStream = globalThis.ReadableStream
/** @type {globalThis['File']} */ /** @type {globalThis['File']} */
@@ -71832,7 +71824,7 @@ function extractBody (object, keepalive = false) {
// Set source to a copy of the bytes held by object. // Set source to a copy of the bytes held by object.
source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength))
} else if (util.isFormDataLike(object)) { } else if (util.isFormDataLike(object)) {
const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}`
const prefix = `--${boundary}\r\nContent-Disposition: form-data` const prefix = `--${boundary}\r\nContent-Disposition: form-data`
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
@@ -93573,7 +93565,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));
@@ -93621,11 +93613,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}`);
@@ -93634,11 +93634,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();
} }
@@ -93686,6 +93687,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');
@@ -93900,14 +93911,6 @@ module.exports = require("net");
/***/ }), /***/ }),
/***/ 6005:
/***/ ((module) => {
"use strict";
module.exports = require("node:crypto");
/***/ }),
/***/ 5673: /***/ 5673:
/***/ ((module) => { /***/ ((module) => {

7
package-lock.json generated
View File

@@ -5793,10 +5793,9 @@
} }
}, },
"node_modules/undici": { "node_modules/undici": {
"version": "5.28.5", "version": "5.28.4",
"resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz",
"integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==",
"license": "MIT",
"dependencies": { "dependencies": {
"@fastify/busboy": "^2.0.0" "@fastify/busboy": "^2.0.0"
}, },

View File

@@ -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');