mirror of
https://github.com/actions/setup-go.git
synced 2025-09-28 04:22:25 +08:00
Compare commits
5 Commits
node24-fix
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
|
0c27a2bf1d | ||
|
c0137caad7 | ||
|
4469467582 | ||
|
e093d1e9bb | ||
|
1d76b952eb |
@@ -14,7 +14,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checking out
|
- name: Checking out
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Publish
|
- name: Publish
|
||||||
id: publish
|
id: publish
|
||||||
uses: actions/publish-immutable-action@v0.0.4
|
uses: actions/publish-immutable-action@v0.0.4
|
||||||
|
20
.github/workflows/versions.yml
vendored
20
.github/workflows/versions.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go Stable
|
- name: Setup Go Stable
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go oldStable
|
- name: Setup Go oldStable
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
- os: macos-13
|
- os: macos-13
|
||||||
architecture: x32
|
architecture: x32
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go ${{ matrix.version }} ${{ matrix.architecture }}
|
- name: Setup Go ${{ matrix.version }} ${{ matrix.architecture }}
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -82,7 +82,7 @@ jobs:
|
|||||||
go: 1.23.2
|
go: 1.23.2
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-go ${{ matrix.go }}
|
- name: setup-go ${{ matrix.go }}
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -101,7 +101,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
||||||
go-version: ['1.20', '1.21', '1.22', '1.23']
|
go-version: ['1.20', '1.21', '1.22', '1.23']
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go and check latest
|
- name: Setup Go and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -117,7 +117,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go and check latest
|
- name: Setup Go and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -133,7 +133,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go and check latest
|
- name: Setup Go and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -151,7 +151,7 @@ jobs:
|
|||||||
go: [1.20.14, 1.21.10, 1.22.8, 1.23.2]
|
go: [1.20.14, 1.21.10, 1.22.8, 1.23.2]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-go ${{ matrix.go }}
|
- name: setup-go ${{ matrix.go }}
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -171,7 +171,7 @@ jobs:
|
|||||||
go: [1.11.12]
|
go: [1.11.12]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-go ${{ matrix.go }}
|
- name: setup-go ${{ matrix.go }}
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -199,7 +199,7 @@ jobs:
|
|||||||
- os: macos-13
|
- os: macos-13
|
||||||
architecture: x64
|
architecture: x64
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Go and check latest
|
- name: Setup Go and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
6
.github/workflows/windows-validation.yml
vendored
6
.github/workflows/windows-validation.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
cache: [false, true]
|
cache: [false, true]
|
||||||
go: [1.20.1]
|
go: [1.20.1]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: 'Setup ${{ matrix.cache }}, cache: ${{ matrix.go }}'
|
- name: 'Setup ${{ matrix.cache }}, cache: ${{ matrix.go }}'
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -88,7 +88,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
cache: [false, true]
|
cache: [false, true]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: 'Setup default go, cache: ${{ matrix.cache }}'
|
- name: 'Setup default go, cache: ${{ matrix.cache }}'
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -121,7 +121,7 @@ jobs:
|
|||||||
cache: [false]
|
cache: [false]
|
||||||
go: [1.20.1]
|
go: [1.20.1]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: 'Setup ${{ matrix.go }}, cache: ${{ matrix.cache }}'
|
- name: 'Setup ${{ matrix.go }}, cache: ${{ matrix.cache }}'
|
||||||
uses: ./
|
uses: ./
|
||||||
|
39
README.md
39
README.md
@@ -8,6 +8,14 @@ This action sets up a go environment for use in actions by:
|
|||||||
- Optionally downloading and caching a version of Go by version and adding to `PATH`.
|
- Optionally downloading and caching a version of Go by version and adding to `PATH`.
|
||||||
- Registering problem matchers for error output.
|
- Registering problem matchers for error output.
|
||||||
|
|
||||||
|
# Breaking changes in V6
|
||||||
|
|
||||||
|
- Improve toolchain handling to ensure more reliable and consistent toolchain selection and management.
|
||||||
|
- Upgraded from node20 to node24.
|
||||||
|
> Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. [See Release Notes](https://github.com/actions/runner/releases/tag/v2.327.1)
|
||||||
|
|
||||||
|
For more details, see the full release notes on the [releases page](https://github.com/actions/setup-go/releases/tag/v6.0.0)
|
||||||
|
|
||||||
# V5
|
# V5
|
||||||
|
|
||||||
The V5 edition of the action offers:
|
The V5 edition of the action offers:
|
||||||
@@ -16,27 +24,6 @@ The V5 edition of the action offers:
|
|||||||
|
|
||||||
See full release notes on the [releases page](https://github.com/actions/setup-go/releases).
|
See full release notes on the [releases page](https://github.com/actions/setup-go/releases).
|
||||||
|
|
||||||
# V4
|
|
||||||
|
|
||||||
The V4 edition of the action offers:
|
|
||||||
|
|
||||||
- Enabled caching by default
|
|
||||||
|
|
||||||
The action will try to enable caching unless the `cache` input is explicitly set to false.
|
|
||||||
|
|
||||||
Please see "[Caching dependency files and build outputs](https://github.com/actions/setup-go#caching-dependency-files-and-build-outputs)" for more information.
|
|
||||||
|
|
||||||
# V3
|
|
||||||
|
|
||||||
The V3 edition of the action offers:
|
|
||||||
|
|
||||||
- Adds `GOBIN` to the `PATH`
|
|
||||||
- Proxy support
|
|
||||||
- Check latest version
|
|
||||||
- Caching packages dependencies
|
|
||||||
- stable and oldstable aliases
|
|
||||||
- Bug Fixes (including issues around version matching and semver)
|
|
||||||
|
|
||||||
The action will first check the local cache for a version match. If a version is not found locally, it will pull it from
|
The action will first check the local cache for a version match. If a version is not found locally, it will pull it from
|
||||||
the `main` branch of the [go-versions](https://github.com/actions/go-versions/blob/main/versions-manifest.json)
|
the `main` branch of the [go-versions](https://github.com/actions/go-versions/blob/main/versions-manifest.json)
|
||||||
repository. On miss or failure, it will fall back to downloading directly
|
repository. On miss or failure, it will fall back to downloading directly
|
||||||
@@ -191,9 +178,15 @@ steps:
|
|||||||
|
|
||||||
## Getting go version from the go.mod file
|
## Getting go version from the go.mod file
|
||||||
|
|
||||||
The `go-version-file` input accepts a path to a `go.mod` file or a `go.work` file that contains the version of Go to be used by a project.
|
The `go-version-file` input accepts a path to a `go.mod` file or a `go.work`
|
||||||
|
file that contains the version of Go to be used by a project. The version taken
|
||||||
|
from thils file will be:
|
||||||
|
|
||||||
|
- The version from the `toolchain` directive, if there is one, otherwise
|
||||||
|
- The version from the `go` directive
|
||||||
|
|
||||||
|
The version can specify a patch version or omit it altogether (e.g., `go 1.22.0` or `go 1.22`).
|
||||||
|
|
||||||
The `go` directive in `go.mod` can specify a patch version or omit it altogether (e.g., `go 1.22.0` or `go 1.22`).
|
|
||||||
If a patch version is specified, that specific patch version will be used.
|
If a patch version is specified, that specific patch version will be used.
|
||||||
If no patch version is specified, it will search for the latest available patch version in the cache,
|
If no patch version is specified, it will search for the latest available patch version in the cache,
|
||||||
[versions-manifest.json](https://github.com/actions/go-versions/blob/main/versions-manifest.json), and the
|
[versions-manifest.json](https://github.com/actions/go-versions/blob/main/versions-manifest.json), and the
|
||||||
|
@@ -129,6 +129,9 @@ describe('setup-go', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
// clear out env var set during 'run'
|
||||||
|
delete process.env[im.GOTOOLCHAIN_ENV_VAR];
|
||||||
|
|
||||||
//jest.resetAllMocks();
|
//jest.resetAllMocks();
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
//jest.restoreAllMocks();
|
//jest.restoreAllMocks();
|
||||||
@@ -285,7 +288,7 @@ describe('setup-go', () => {
|
|||||||
expect(logSpy).toHaveBeenCalledWith(`Setup go version spec 1.13.0`);
|
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';
|
inputs['go-version'] = '1.13.0';
|
||||||
inSpy.mockImplementation(name => inputs[name]);
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
|
||||||
@@ -298,7 +301,7 @@ describe('setup-go', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
await main.run();
|
await main.run();
|
||||||
expect(vars).toStrictEqual({});
|
expect(vars).not.toHaveProperty('GOROOT');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('exports GOROOT for Go versions <1.9', async () => {
|
it('exports GOROOT for Go versions <1.9', async () => {
|
||||||
@@ -314,9 +317,7 @@ describe('setup-go', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
await main.run();
|
await main.run();
|
||||||
expect(vars).toStrictEqual({
|
expect(vars).toHaveProperty('GOROOT', toolPath);
|
||||||
GOROOT: toolPath
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('finds a version of go already in the cache', async () => {
|
it('finds a version of go already in the cache', async () => {
|
||||||
@@ -989,4 +990,104 @@ use .
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('go-version-file-toolchain', () => {
|
||||||
|
const goVersions = ['1.22.0', '1.21rc2', '1.18'];
|
||||||
|
const placeholderVersion = '1.19';
|
||||||
|
const buildGoMod = (
|
||||||
|
goVersion: string,
|
||||||
|
toolchainVersion: string
|
||||||
|
) => `module example.com/mymodule
|
||||||
|
|
||||||
|
go ${goVersion}
|
||||||
|
|
||||||
|
toolchain go${toolchainVersion}
|
||||||
|
|
||||||
|
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 buildGoWork = (
|
||||||
|
goVersion: string,
|
||||||
|
toolchainVersion: string
|
||||||
|
) => `go 1.19
|
||||||
|
|
||||||
|
toolchain go${toolchainVersion}
|
||||||
|
|
||||||
|
use .
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
|
goVersions.forEach(version => {
|
||||||
|
[
|
||||||
|
{
|
||||||
|
goVersionfile: 'go.mod',
|
||||||
|
fileContents: Buffer.from(buildGoMod(placeholderVersion, version)),
|
||||||
|
expected_version: version,
|
||||||
|
desc: 'from toolchain directive'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
goVersionfile: 'go.work',
|
||||||
|
fileContents: Buffer.from(buildGoMod(placeholderVersion, version)),
|
||||||
|
expected_version: version,
|
||||||
|
desc: 'from toolchain directive'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
goVersionfile: 'go.mod',
|
||||||
|
fileContents: Buffer.from(buildGoMod(placeholderVersion, version)),
|
||||||
|
gotoolchain_env: 'local',
|
||||||
|
expected_version: placeholderVersion,
|
||||||
|
desc: 'from go directive when GOTOOLCHAIN is local'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
goVersionfile: 'go.work',
|
||||||
|
fileContents: Buffer.from(buildGoMod(placeholderVersion, version)),
|
||||||
|
gotoolchain_env: 'local',
|
||||||
|
expected_version: placeholderVersion,
|
||||||
|
desc: 'from go directive when GOTOOLCHAIN is local'
|
||||||
|
}
|
||||||
|
].forEach(test => {
|
||||||
|
it(`reads version (${version}) in ${test.goVersionfile} ${test.desc}`, async () => {
|
||||||
|
inputs['go-version-file'] = test.goVersionfile;
|
||||||
|
if (test.gotoolchain_env !== undefined) {
|
||||||
|
process.env[im.GOTOOLCHAIN_ENV_VAR] = test.gotoolchain_env;
|
||||||
|
}
|
||||||
|
existsSpy.mockImplementation(() => true);
|
||||||
|
readFileSpy.mockImplementation(() => Buffer.from(test.fileContents));
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(logSpy).toHaveBeenCalledWith(
|
||||||
|
`Setup go version spec ${test.expected_version}`
|
||||||
|
);
|
||||||
|
expect(logSpy).toHaveBeenCalledWith(
|
||||||
|
`Attempting to download ${test.expected_version}...`
|
||||||
|
);
|
||||||
|
expect(logSpy).toHaveBeenCalledWith(
|
||||||
|
`matching ${test.expected_version}...`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
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');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
31
dist/setup/index.js
vendored
31
dist/setup/index.js
vendored
@@ -94312,6 +94312,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.GOTOOLCHAIN_LOCAL_VAL = exports.GOTOOLCHAIN_ENV_VAR = void 0;
|
||||||
exports.getGo = getGo;
|
exports.getGo = getGo;
|
||||||
exports.extractGoArchive = extractGoArchive;
|
exports.extractGoArchive = extractGoArchive;
|
||||||
exports.getManifest = getManifest;
|
exports.getManifest = getManifest;
|
||||||
@@ -94330,6 +94331,8 @@ const sys = __importStar(__nccwpck_require__(5632));
|
|||||||
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
||||||
const os_1 = __importDefault(__nccwpck_require__(2037));
|
const os_1 = __importDefault(__nccwpck_require__(2037));
|
||||||
const utils_1 = __nccwpck_require__(1314);
|
const utils_1 = __nccwpck_require__(1314);
|
||||||
|
exports.GOTOOLCHAIN_ENV_VAR = 'GOTOOLCHAIN';
|
||||||
|
exports.GOTOOLCHAIN_LOCAL_VAL = 'local';
|
||||||
const MANIFEST_REPO_OWNER = 'actions';
|
const MANIFEST_REPO_OWNER = 'actions';
|
||||||
const MANIFEST_REPO_NAME = 'go-versions';
|
const MANIFEST_REPO_NAME = 'go-versions';
|
||||||
const MANIFEST_REPO_BRANCH = 'main';
|
const MANIFEST_REPO_BRANCH = 'main';
|
||||||
@@ -94663,8 +94666,18 @@ 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);
|
// for backwards compatibility: use version from go directive if
|
||||||
return match ? match[1] : '';
|
// 'GOTOOLCHAIN' has been explicitly set
|
||||||
|
if (process.env[exports.GOTOOLCHAIN_ENV_VAR] !== exports.GOTOOLCHAIN_LOCAL_VAL) {
|
||||||
|
// toolchain directive: https://go.dev/ref/mod#go-mod-file-toolchain
|
||||||
|
const matchToolchain = contents.match(/^toolchain go(1\.\d+(?:\.\d+|rc\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();
|
||||||
}
|
}
|
||||||
@@ -94782,6 +94795,7 @@ function run() {
|
|||||||
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
|
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
|
||||||
//
|
//
|
||||||
const versionSpec = resolveVersionInput();
|
const versionSpec = resolveVersionInput();
|
||||||
|
setGoToolchain();
|
||||||
const cache = core.getBooleanInput('cache');
|
const cache = core.getBooleanInput('cache');
|
||||||
core.info(`Setup go version spec ${versionSpec}`);
|
core.info(`Setup go version spec ${versionSpec}`);
|
||||||
let arch = core.getInput('architecture');
|
let arch = core.getInput('architecture');
|
||||||
@@ -94890,6 +94904,19 @@ function resolveVersionInput() {
|
|||||||
}
|
}
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
function setGoToolchain() {
|
||||||
|
// 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.
|
||||||
|
// Set the value in process env so any `go` commands run as child-process
|
||||||
|
// don't cause toolchain downloads
|
||||||
|
process.env[installer.GOTOOLCHAIN_ENV_VAR] = installer.GOTOOLCHAIN_LOCAL_VAL;
|
||||||
|
// and in the runner env so e.g. a user running `go mod tidy` won't cause it
|
||||||
|
core.exportVariable(installer.GOTOOLCHAIN_ENV_VAR, installer.GOTOOLCHAIN_LOCAL_VAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
33
package-lock.json
generated
33
package-lock.json
generated
@@ -16,17 +16,17 @@
|
|||||||
"@actions/http-client": "^2.2.1",
|
"@actions/http-client": "^2.2.1",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.0.2",
|
||||||
"@actions/tool-cache": "^2.0.2",
|
"@actions/tool-cache": "^2.0.2",
|
||||||
"semver": "^7.6.3"
|
"semver": "^7.7.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^24.1.0",
|
"@types/node": "^24.1.0",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.7.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
||||||
"@typescript-eslint/parser": "^8.35.1",
|
"@typescript-eslint/parser": "^8.35.1",
|
||||||
"@vercel/ncc": "^0.38.1",
|
"@vercel/ncc": "^0.38.1",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-jest": "^29.0.1",
|
"eslint-plugin-jest": "^29.0.1",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
@@ -1636,10 +1636,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/semver": {
|
"node_modules/@types/semver": {
|
||||||
"version": "7.5.8",
|
"version": "7.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
|
||||||
"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
|
"integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/stack-utils": {
|
"node_modules/@types/stack-utils": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
@@ -2984,12 +2985,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-config-prettier": {
|
"node_modules/eslint-config-prettier": {
|
||||||
"version": "10.0.1",
|
"version": "10.1.8",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
|
||||||
"integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==",
|
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"eslint-config-prettier": "build/bin/cli.js"
|
"eslint-config-prettier": "bin/cli.js"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://opencollective.com/eslint-config-prettier"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": ">=7.0.0"
|
"eslint": ">=7.0.0"
|
||||||
@@ -5551,9 +5556,9 @@
|
|||||||
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
|
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.7.1",
|
"version": "7.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||||
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
|
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
|
@@ -35,17 +35,17 @@
|
|||||||
"@actions/http-client": "^2.2.1",
|
"@actions/http-client": "^2.2.1",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.0.2",
|
||||||
"@actions/tool-cache": "^2.0.2",
|
"@actions/tool-cache": "^2.0.2",
|
||||||
"semver": "^7.6.3"
|
"semver": "^7.7.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^24.1.0",
|
"@types/node": "^24.1.0",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.7.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
||||||
"@typescript-eslint/parser": "^8.35.1",
|
"@typescript-eslint/parser": "^8.35.1",
|
||||||
"@vercel/ncc": "^0.38.1",
|
"@vercel/ncc": "^0.38.1",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-jest": "^29.0.1",
|
"eslint-plugin-jest": "^29.0.1",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
|
@@ -9,6 +9,8 @@ import os from 'os';
|
|||||||
import {StableReleaseAlias, isSelfHosted} from './utils';
|
import {StableReleaseAlias, isSelfHosted} from './utils';
|
||||||
import {Architecture} from './types';
|
import {Architecture} from './types';
|
||||||
|
|
||||||
|
export const GOTOOLCHAIN_ENV_VAR = 'GOTOOLCHAIN';
|
||||||
|
export const GOTOOLCHAIN_LOCAL_VAL = 'local';
|
||||||
const MANIFEST_REPO_OWNER = 'actions';
|
const MANIFEST_REPO_OWNER = 'actions';
|
||||||
const MANIFEST_REPO_NAME = 'go-versions';
|
const MANIFEST_REPO_NAME = 'go-versions';
|
||||||
const MANIFEST_REPO_BRANCH = 'main';
|
const MANIFEST_REPO_BRANCH = 'main';
|
||||||
@@ -496,8 +498,21 @@ 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);
|
// for backwards compatibility: use version from go directive if
|
||||||
return match ? match[1] : '';
|
// 'GOTOOLCHAIN' has been explicitly set
|
||||||
|
if (process.env[GOTOOLCHAIN_ENV_VAR] !== GOTOOLCHAIN_LOCAL_VAL) {
|
||||||
|
// toolchain directive: https://go.dev/ref/mod#go-mod-file-toolchain
|
||||||
|
const matchToolchain = contents.match(
|
||||||
|
/^toolchain go(1\.\d+(?:\.\d+|rc\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();
|
||||||
|
18
src/main.ts
18
src/main.ts
@@ -17,6 +17,7 @@ export async function run() {
|
|||||||
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
|
// If not supplied then problem matchers will still be setup. Useful for self-hosted.
|
||||||
//
|
//
|
||||||
const versionSpec = resolveVersionInput();
|
const versionSpec = resolveVersionInput();
|
||||||
|
setGoToolchain();
|
||||||
|
|
||||||
const cache = core.getBooleanInput('cache');
|
const cache = core.getBooleanInput('cache');
|
||||||
core.info(`Setup go version spec ${versionSpec}`);
|
core.info(`Setup go version spec ${versionSpec}`);
|
||||||
@@ -161,3 +162,20 @@ function resolveVersionInput(): string {
|
|||||||
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setGoToolchain() {
|
||||||
|
// 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.
|
||||||
|
// Set the value in process env so any `go` commands run as child-process
|
||||||
|
// don't cause toolchain downloads
|
||||||
|
process.env[installer.GOTOOLCHAIN_ENV_VAR] = installer.GOTOOLCHAIN_LOCAL_VAL;
|
||||||
|
// and in the runner env so e.g. a user running `go mod tidy` won't cause it
|
||||||
|
core.exportVariable(
|
||||||
|
installer.GOTOOLCHAIN_ENV_VAR,
|
||||||
|
installer.GOTOOLCHAIN_LOCAL_VAL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user