mirror of
https://github.com/actions/setup-go.git
synced 2024-11-28 15:50:55 -05:00
Prefer installing version from toolchain
directive
Prefer this over the version from the `go` directive. Per the docs[1] > The toolchain line declares a suggested toolchain to use with the module or workspace It seems reasonable to use this, since running this action in a directory containing a `go.mod` (or `go.work`) suggests the user is wishing to work _with the module or workspace_. See (TODO link issue)
This commit is contained in:
parent
763ffebcce
commit
145e58d96c
3 changed files with 67 additions and 4 deletions
|
@ -965,6 +965,56 @@ use .
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('go-version-file-toolchain', () => {
|
||||||
|
const goModContents = `module example.com/mymodule
|
||||||
|
|
||||||
|
go 1.14
|
||||||
|
|
||||||
|
toolchain go1.21.0
|
||||||
|
|
||||||
|
require (
|
||||||
|
example.com/othermodule v1.2.3
|
||||||
|
example.com/thismodule v1.2.3
|
||||||
|
example.com/thatmodule v1.2.3
|
||||||
|
)
|
||||||
|
|
||||||
|
replace example.com/thatmodule => ../thatmodule
|
||||||
|
exclude example.com/thismodule v1.3.0
|
||||||
|
`;
|
||||||
|
|
||||||
|
const goWorkContents = `go 1.19
|
||||||
|
|
||||||
|
toolchain go1.21.0
|
||||||
|
|
||||||
|
use .
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
|
it('reads version from toolchain directive in go.mod', async () => {
|
||||||
|
inputs['go-version-file'] = 'go.mod';
|
||||||
|
existsSpy.mockImplementation(() => true);
|
||||||
|
readFileSpy.mockImplementation(() => Buffer.from(goModContents));
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(logSpy).toHaveBeenCalledWith('Setup go version spec 1.21.0');
|
||||||
|
expect(logSpy).toHaveBeenCalledWith('Attempting to download 1.21.0...');
|
||||||
|
expect(logSpy).toHaveBeenCalledWith('matching 1.21.0...');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('reads version from toolchain directive in go.work', async () => {
|
||||||
|
inputs['go-version-file'] = 'go.work';
|
||||||
|
existsSpy.mockImplementation(() => true);
|
||||||
|
readFileSpy.mockImplementation(() => Buffer.from(goWorkContents));
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(logSpy).toHaveBeenCalledWith('Setup go version spec 1.21.0');
|
||||||
|
expect(logSpy).toHaveBeenCalledWith('Attempting to download 1.21.0...');
|
||||||
|
expect(logSpy).toHaveBeenCalledWith('matching 1.21.0...');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('exports GOTOOLCHAIN and sets it in current process env', async () => {
|
it('exports GOTOOLCHAIN and sets it in current process env', async () => {
|
||||||
inputs['go-version'] = '1.21.0';
|
inputs['go-version'] = '1.21.0';
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
|
10
dist/setup/index.js
vendored
10
dist/setup/index.js
vendored
|
@ -88545,8 +88545,14 @@ function parseGoVersionFile(versionFilePath) {
|
||||||
const contents = fs_1.default.readFileSync(versionFilePath).toString();
|
const contents = fs_1.default.readFileSync(versionFilePath).toString();
|
||||||
if (path.basename(versionFilePath) === 'go.mod' ||
|
if (path.basename(versionFilePath) === 'go.mod' ||
|
||||||
path.basename(versionFilePath) === 'go.work') {
|
path.basename(versionFilePath) === 'go.work') {
|
||||||
const match = contents.match(/^go (\d+(\.\d+)*)/m);
|
// toolchain directive: https://go.dev/ref/mod#go-mod-file-toolchain
|
||||||
return match ? match[1] : '';
|
const matchToolchain = contents.match(/^toolchain go(\d+(\.\d+)*)/m);
|
||||||
|
if (matchToolchain) {
|
||||||
|
return matchToolchain[1];
|
||||||
|
}
|
||||||
|
// go directive: https://go.dev/ref/mod#go-mod-file-go
|
||||||
|
const matchGo = contents.match(/^go (\d+(\.\d+)*)/m);
|
||||||
|
return matchGo ? matchGo[1] : '';
|
||||||
}
|
}
|
||||||
return contents.trim();
|
return contents.trim();
|
||||||
}
|
}
|
||||||
|
|
|
@ -424,8 +424,15 @@ export function parseGoVersionFile(versionFilePath: string): string {
|
||||||
path.basename(versionFilePath) === 'go.mod' ||
|
path.basename(versionFilePath) === 'go.mod' ||
|
||||||
path.basename(versionFilePath) === 'go.work'
|
path.basename(versionFilePath) === 'go.work'
|
||||||
) {
|
) {
|
||||||
const match = contents.match(/^go (\d+(\.\d+)*)/m);
|
// toolchain directive: https://go.dev/ref/mod#go-mod-file-toolchain
|
||||||
return match ? match[1] : '';
|
const matchToolchain = contents.match(/^toolchain go(\d+(\.\d+)*)/m);
|
||||||
|
if (matchToolchain) {
|
||||||
|
return matchToolchain[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// go directive: https://go.dev/ref/mod#go-mod-file-go
|
||||||
|
const matchGo = contents.match(/^go (\d+(\.\d+)*)/m);
|
||||||
|
return matchGo ? matchGo[1] : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
return contents.trim();
|
return contents.trim();
|
||||||
|
|
Loading…
Reference in a new issue