Skip to content

Improve toolchain handling #460

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions __tests__/setup-go.test.ts
Original file line number Diff line number Diff line change
@@ -285,7 +285,7 @@ describe('setup-go', () => {
expect(logSpy).toHaveBeenCalledWith(`Setup go version spec 1.13.0`);
});

it('does not export any variables for Go versions >=1.9', async () => {
it('does not export GOROOT for Go versions >=1.9', async () => {
inputs['go-version'] = '1.13.0';
inSpy.mockImplementation(name => inputs[name]);

@@ -298,7 +298,7 @@ describe('setup-go', () => {
});

await main.run();
expect(vars).toStrictEqual({});
expect(vars).not.toHaveProperty('GOROOT');
});

it('exports GOROOT for Go versions <1.9', async () => {
@@ -314,9 +314,7 @@ describe('setup-go', () => {
});

await main.run();
expect(vars).toStrictEqual({
GOROOT: toolPath
});
expect(vars).toHaveProperty('GOROOT', toolPath);
});

it('finds a version of go already in the cache', async () => {
@@ -989,4 +987,18 @@ use .
}
);
});

it('exports GOTOOLCHAIN and sets it in current process env', async () => {
inputs['go-version'] = '1.21.0';
inSpy.mockImplementation(name => inputs[name]);

const vars: {[key: string]: string} = {};
exportVarSpy.mockImplementation((name: string, val: string) => {
vars[name] = val;
});

await main.run();
expect(vars).toStrictEqual({GOTOOLCHAIN: 'local'});
expect(process.env).toHaveProperty('GOTOOLCHAIN', 'local');
});
});
16 changes: 16 additions & 0 deletions dist/setup/index.js
Original file line number Diff line number Diff line change
@@ -93707,6 +93707,7 @@ const os_1 = __importDefault(__nccwpck_require__(2037));
function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
setToolchain();
//
// versionSpec is optional. If supplied, install / use from the tool cache
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
@@ -93820,6 +93821,21 @@ function resolveVersionInput() {
}
return version;
}
function setToolchain() {
// docs: https://go.dev/doc/toolchain
// "local indicates the bundled Go toolchain (the one that shipped with the go command being run)"
// this is so any 'go' command is run with the selected Go version
// and doesn't trigger a toolchain download and run commands with that
// see e.g. issue #424
// and a similar discussion: https://github.com/docker-library/golang/issues/472
const toolchain = 'local';
const toolchainVar = 'GOTOOLCHAIN';
// set the value in process env so any `go` commands run as child-process
// don't cause toolchain downloads
process.env[toolchainVar] = toolchain;
// and in the runner env so e.g. a user running `go mod tidy` won't cause it
core.exportVariable(toolchainVar, toolchain);
}


/***/ }),
18 changes: 18 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ import os from 'os';

export async function run() {
try {
setToolchain();
//
// versionSpec is optional. If supplied, install / use from the tool cache
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
@@ -160,3 +161,20 @@ function resolveVersionInput(): string {

return version;
}

function setToolchain() {
// docs: https://go.dev/doc/toolchain
// "local indicates the bundled Go toolchain (the one that shipped with the go command being run)"
// this is so any 'go' command is run with the selected Go version
// and doesn't trigger a toolchain download and run commands with that
// see e.g. issue #424
// and a similar discussion: https://github.com/docker-library/golang/issues/472
const toolchain = 'local';
const toolchainVar = 'GOTOOLCHAIN';

// set the value in process env so any `go` commands run as child-process
// don't cause toolchain downloads
process.env[toolchainVar] = toolchain;
// and in the runner env so e.g. a user running `go mod tidy` won't cause it
core.exportVariable(toolchainVar, toolchain);
}