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 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.
@ -172,7 +172,11 @@ steps:
with:
go-version: '1.17'
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
```

View File

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

View File

@ -22,6 +22,18 @@ inputs:
outputs:
go-version:
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:
description: 'A boolean value to indicate if a cache was hit'
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 };
};
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));
@ -61818,11 +61818,19 @@ function run() {
core.debug(`add bin ${added}`);
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');
try {
yield cache_restore_1.restoreCache(parseGoVersion(goVersion), packageManager, cacheDependencyPath);
yield cache_restore_1.restoreCache(parsedGoVersion, packageManager, cacheDependencyPath);
}
catch (error) {
core.warning(`Restore cache failed: ${error.message}`);
@ -61831,11 +61839,13 @@ function run() {
// 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();
}
@ -61883,6 +61893,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');

View File

@ -63,13 +63,23 @@ 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');
try {
await restoreCache(
parseGoVersion(goVersion),
parsedGoVersion,
packageManager,
cacheDependencyPath
);
@ -82,13 +92,14 @@ export async function run() {
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) {
@ -135,6 +146,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');