Compare commits

...

7 Commits

Author SHA1 Message Date
Luca Comellini
1309c73b3e
Merge b68021e812 into 883490dfd0 2023-08-30 09:38:34 +02:00
Marko Zivic
883490dfd0
Merge pull request #417 from artemgavrilov/main
Improve documentation regarding dependencies caching
2023-08-30 09:35:35 +02:00
Artem Gavrilov
d45ebba0ce
Rephrase sentence
Co-authored-by: Ivan <98037481+IvanZosimov@users.noreply.github.com>
2023-08-29 15:43:02 +02:00
Artem Gavrilov
317c6617fa
Replace wildcards term with globs. 2023-08-28 12:47:43 +02:00
Artem Gavrilov
f90673ad64
Merge pull request #1 from artemgavrilov/caching-docs-improvement
Improve documentation regarding dependencies caching
2023-08-25 12:37:15 +02:00
Artem Gavrilov
8018234347
Improve documentation regarding dependencies cachin 2023-08-25 12:31:19 +02:00
Luca Comellini
b68021e812
Add JSON output of go env and some env as strings
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
2023-03-27 19:15:44 -07:00
6 changed files with 121 additions and 14 deletions

25
.github/workflows/outputs.yml vendored Normal file
View File

@ -0,0 +1,25 @@
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 GOCACHE=${{ steps.setup-go.outputs.go-cache }}
echo Go environment variables json:
jq . <<< '${{ steps.setup-go.outputs.go-env }}'

View File

@ -159,7 +159,7 @@ The `cache` input is optional, and caching is turned on by default.
The action defaults to search for the dependency file - go.sum in the repository root, and uses its hash as a part of The action defaults to search for the dependency file - go.sum in the repository root, and uses its hash as a part of
the cache key. Use `cache-dependency-path` input for cases when multiple dependency files are used, or they are located the cache key. Use `cache-dependency-path` input for cases when multiple dependency files are used, or they are located
in different subdirectories. in different subdirectories. The input supports glob patterns.
If some problem that prevents success caching happens then the action issues the warning in the log and continues the execution of the pipeline. If some problem that prevents success caching happens then the action issues the warning in the log and continues the execution of the pipeline.
@ -172,7 +172,11 @@ steps:
with: with:
go-version: '1.17' go-version: '1.17'
check-latest: true check-latest: true
cache-dependency-path: subdir/go.sum cache-dependency-path: |
subdir/go.sum
tools/go.sum
# cache-dependency-path: "**/*.sum"
- run: go run hello.go - run: go run hello.go
``` ```

View File

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

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:

32
dist/setup/index.js vendored
View File

@ -61770,7 +61770,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));
@ -61818,11 +61818,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 && cache_utils_1.isCacheFeatureAvailable()) { if (cache && 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 cache_restore_1.restoreCache(parseGoVersion(goVersion), packageManager, cacheDependencyPath); yield 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}`);
@ -61831,11 +61839,13 @@ 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-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'); core.startGroup('go env');
const goEnv = (child_process_1.default.execSync(`${goPath} env`) || '').toString();
core.info(goEnv); core.info(goEnv);
core.endGroup(); core.endGroup();
} }
@ -61883,6 +61893,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');

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,14 @@ 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-root', goEnvJson['GOROOT']);
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 = (cp.execSync(`${goPath} env`) || '').toString();
core.info(goEnv); core.info(goEnv);
core.endGroup(); core.endGroup();
} catch (error) { } catch (error) {
@ -135,6 +146,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');