mirror of
https://github.com/actions/setup-go.git
synced 2026-03-16 18:15:19 +00:00
Some checks failed
Validate Microsoft build of Go / Microsoft build of Go 1.24 on macos-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go 1.24 on windows-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go 1.25 on macos-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go 1.25 on windows-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go via env var on macos-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go via env var on windows-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go arch arm64 on macos-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go arch x64 on macos-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go with caching on macos-latest (push) Waiting to run
Validate Microsoft build of Go / Microsoft build of Go with caching on windows-latest (push) Waiting to run
Validate 'setup-go' / stable (macos-latest) (push) Waiting to run
Validate 'setup-go' / stable (macos-latest-large) (push) Waiting to run
Validate 'setup-go' / stable (windows-latest) (push) Waiting to run
Validate 'setup-go' / oldstable (macos-latest) (push) Waiting to run
Validate 'setup-go' / oldstable (macos-latest-large) (push) Waiting to run
Validate 'setup-go' / oldstable (windows-latest) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x32, windows-latest, oldstable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x32, windows-latest, stable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x64, macos-latest, oldstable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x64, macos-latest, stable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x64, macos-latest-large, oldstable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x64, macos-latest-large, stable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x64, windows-latest, oldstable) (push) Waiting to run
Validate 'setup-go' / aliases-arch (x64, windows-latest, stable) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.20.14, windows-latest) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.21.13, macos-latest) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.21.13, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.21.13, windows-latest) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.22.8, macos-latest) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.22.8, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.22.8, windows-latest) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.23.2, macos-latest) (push) Waiting to run
Validate 'setup-go' / Setup local-cache version (1.23.2, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / check-latest (1.20, macos-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.20, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / check-latest (1.20, windows-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.21, macos-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.21, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / check-latest (1.21, windows-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.22, macos-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.22, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / check-latest (1.22, windows-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.23, macos-latest) (push) Waiting to run
Validate 'setup-go' / check-latest (1.23, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / check-latest (1.23, windows-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file (macos-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file (macos-latest-large) (push) Waiting to run
Validate 'setup-go' / go-version-file (windows-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-gowork (macos-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-gowork (macos-latest-large) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-gowork (windows-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-tool-versions (macos-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-tool-versions (macos-latest-large) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-tool-versions (windows-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-go-version (macos-latest) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-go-version (macos-latest-large) (push) Waiting to run
Validate 'setup-go' / go-version-file-with-go-version (windows-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, macos-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, windows-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, macos-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, windows-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, macos-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, windows-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, macos-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, windows-latest) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-dist (1.11.12, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / setup-versions-from-dist (1.11.12, windows-latest) (push) Waiting to run
Validate 'setup-go' / architecture (arm64, 1.20.14, macos-latest) (push) Waiting to run
Validate 'setup-go' / architecture (arm64, 1.21, macos-latest) (push) Waiting to run
Validate 'setup-go' / architecture (arm64, 1.22, macos-latest) (push) Waiting to run
Validate 'setup-go' / architecture (arm64, 1.23, macos-latest) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.20.14, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.20.14, windows-latest) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.21, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.21, windows-latest) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.22, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.22, windows-latest) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.23, macos-latest-large) (push) Waiting to run
Validate 'setup-go' / architecture (x64, 1.23, windows-latest) (push) Waiting to run
Validate Windows installation / Validate if symlink is created (false, 1.20.1) (push) Waiting to run
Validate Windows installation / Validate if symlink is created (true, 1.20.1) (push) Waiting to run
Validate Windows installation / Find default go version (push) Waiting to run
Validate Windows installation / Validate if symlink is not created for default go (false) (push) Blocked by required conditions
Validate Windows installation / Validate if symlink is not created for default go (true) (push) Blocked by required conditions
Validate Windows installation / Validate if hostedtoolcache works as expected (false, 1.20.1) (push) Waiting to run
Basic validation / Basic validation (push) Failing after 37s
Validate Microsoft build of Go / Microsoft build of Go 1.24 on ubuntu-latest (push) Failing after 39s
Validate Microsoft build of Go / Microsoft build of Go 1.25 on ubuntu-latest (push) Failing after 40s
Validate Microsoft build of Go / Microsoft build of Go via env var on ubuntu-latest (push) Failing after 40s
Validate Microsoft build of Go / Microsoft build of Go arch x64 on ubuntu-latest (push) Failing after 40s
Validate Microsoft build of Go / Microsoft build of Go with caching on ubuntu-latest (push) Failing after 40s
Validate 'setup-go' / stable (ubuntu-latest) (push) Failing after 41s
Validate 'setup-go' / oldstable (ubuntu-latest) (push) Failing after 41s
Validate 'setup-go' / aliases-arch (x32, ubuntu-latest, oldstable) (push) Failing after 41s
Validate 'setup-go' / aliases-arch (x32, ubuntu-latest, stable) (push) Failing after 41s
Validate 'setup-go' / aliases-arch (x64, ubuntu-latest, oldstable) (push) Failing after 41s
Validate 'setup-go' / aliases-arch (x64, ubuntu-latest, stable) (push) Failing after 41s
Validate 'setup-go' / Setup local-cache version (1.21.13, ubuntu-latest) (push) Failing after 42s
Validate 'setup-go' / Setup local-cache version (1.22.8, ubuntu-latest) (push) Failing after 42s
Validate 'setup-go' / Setup local-cache version (1.23.2, ubuntu-latest) (push) Failing after 42s
Validate 'setup-go' / check-latest (1.20, ubuntu-latest) (push) Failing after 42s
Validate 'setup-go' / check-latest (1.21, ubuntu-latest) (push) Failing after 43s
Validate 'setup-go' / check-latest (1.22, ubuntu-latest) (push) Failing after 44s
Validate 'setup-go' / check-latest (1.23, ubuntu-latest) (push) Failing after 44s
Validate 'setup-go' / go-version-file (ubuntu-latest) (push) Failing after 44s
Validate 'setup-go' / go-version-file-with-gowork (ubuntu-latest) (push) Failing after 45s
Validate 'setup-go' / go-version-file-with-tool-versions (ubuntu-latest) (push) Failing after 46s
Validate 'setup-go' / go-version-file-with-go-version (ubuntu-latest) (push) Failing after 46s
Validate 'setup-go' / setup-versions-from-manifest (1.20.14, ubuntu-latest) (push) Failing after 46s
Validate 'setup-go' / setup-versions-from-manifest (1.21.10, ubuntu-latest) (push) Failing after 47s
Validate 'setup-go' / setup-versions-from-manifest (1.22.8, ubuntu-latest) (push) Failing after 48s
Validate 'setup-go' / setup-versions-from-manifest (1.23.2, ubuntu-latest) (push) Failing after 48s
Validate 'setup-go' / setup-versions-from-dist (1.11.12, ubuntu-latest) (push) Failing after 49s
Validate 'setup-go' / architecture (x64, 1.20.14, ubuntu-latest) (push) Failing after 49s
Check dist/ / Check dist/ (push) Failing after 1m20s
Validate 'setup-go' / architecture (x64, 1.21, ubuntu-latest) (push) Failing after 49s
CodeQL analysis / CodeQL analysis (push) Failing after 1m20s
Licensed / Licensed (push) Failing after 1m19s
Validate 'setup-go' / architecture (x64, 1.22, ubuntu-latest) (push) Failing after 49s
Validate 'setup-go' / architecture (x64, 1.23, ubuntu-latest) (push) Failing after 49s
* feat: add go-download-base-url input for custom Go distributions
Add support for downloading Go from custom sources such as Microsoft Go
(aka.ms). Users can specify a custom download base URL via the
`go-download-base-url` input or the `GO_DOWNLOAD_BASE_URL` environment
variable (input takes precedence).
When a custom URL is provided, the action skips the GitHub-hosted
manifest and attempts to resolve versions from the custom URL's JSON
listing. If the listing is unavailable (as with aka.ms redirect links),
it falls back to constructing the download URL directly from the
version, platform, and architecture.
Usage:
- uses: actions/setup-go@v6
with:
go-version: '1.25'
go-download-base-url: 'https://aka.ms/golang/release/latest'
Changes:
- action.yml: add go-download-base-url optional input
- installer.ts: add getInfoFromDirectDownload() for URL construction
fallback, thread custom URL through getGo/getInfoFromDist/findMatch
- main.ts: read new input and GO_DOWNLOAD_BASE_URL env var
- setup-go.test.ts: add 12 unit tests for custom URL behavior
- microsoft-validation.yml: add E2E workflow testing Microsoft build of Go
across ubuntu/windows/macos with versions 1.24 and 1.25
- README.md: document new input with Microsoft build of Go examples
* run prettier
* fixup PR review
* revert cache-save
* fixup
* handle distinct cache
* skip json for known URL
* fix bug in JSON with custom URL
150 lines
6.2 KiB
Markdown
150 lines
6.2 KiB
Markdown
# setup-go
|
||
|
||
[](https://github.com/actions/setup-go/actions/workflows/basic-validation.yml)
|
||
[](https://github.com/actions/setup-go/actions/workflows/versions.yml)
|
||
|
||
This action sets up a Go environment for use in GitHub Actions by:
|
||
|
||
- Optionally downloading and caching a version of Go by version and adding it to the PATH
|
||
- Optionally caching Go modules and build outputs
|
||
- Registering problem matchers for error output
|
||
|
||
## Breaking changes in V6
|
||
|
||
The V6 edition of the action includes:
|
||
- **Upgraded Node.js runtime 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)
|
||
|
||
- **Go toolchain**
|
||
- Supports both `go` and `toolchain` directives in `go.mod`. If the `toolchain` directive is present, its version is used; otherwise, the action falls back to the `go` directive.
|
||
|
||
- **Cache key update**
|
||
- By default, the cache key for Go modules is based on `go.mod`. To use `go.sum`, configure the `cache-dependency-path` input.
|
||
|
||
See full release notes on the [releases page](https://github.com/actions/setup-go/releases).
|
||
|
||
## Usage
|
||
|
||
See [action.yml](action.yml).
|
||
|
||
<!-- start usage -->
|
||
```yaml
|
||
- uses: actions/setup-go@v6
|
||
with:
|
||
# Version or version range of Go to use
|
||
go-version: '1.23'
|
||
|
||
# Path to go.mod, go.work, .go-version, or .tool-versions file
|
||
# Note: if both go-version and go-version-file are provided, go-version takes precedence.
|
||
go-version-file: 'go.mod'
|
||
|
||
# Set this option if you want the action to check for the latest available version
|
||
# Default: false
|
||
check-latest: false
|
||
|
||
# GitHub token for authentication
|
||
token: ${{ github.token }}
|
||
|
||
# Used to specify whether caching is needed.
|
||
# Default: true
|
||
cache: true
|
||
|
||
# Path to dependency files for caching
|
||
cache-dependency-path: 'go.sum'
|
||
|
||
# Architecture to install (auto-detected if not specified)
|
||
architecture: 'x64'
|
||
|
||
# Custom base URL for Go downloads (e.g., for mirrors)
|
||
go-download-base-url: ''
|
||
```
|
||
<!-- end usage -->
|
||
|
||
**Basic:**
|
||
|
||
```yaml
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: actions/setup-go@v6
|
||
with:
|
||
go-version: '1.25' # The Go version to download (if necessary) and use.
|
||
- run: go run hello.go
|
||
```
|
||
|
||
**Version resolution behavior:**
|
||
|
||
The action resolves the requested version in the following order:
|
||
1. **Local cache** - Checks the local tool cache for a matching [semver](https://github.com/npm/node-semver#versions) version.
|
||
2. **go-versions repository** - If the requested version isn’t available in the tool cache, it pulls the version manifest from the `main` branch of the [go-versions repository](https://github.com/actions/go-versions/blob/main/versions-manifest.json).
|
||
3. **Direct download** - If that lookup misses or fails, it will fall back to downloading directly from the [official Go distribution site](https://go.dev/dl).
|
||
|
||
To change the default behavior, please use
|
||
the [check-latest input](docs/advanced-usage.md#check-latest-version).
|
||
|
||
> **Note**: The `setup-go` action uses executable binaries built by the Go team and does not build Go binaries from source code.
|
||
|
||
## Supported version syntax
|
||
|
||
The `go-version` input supports the following syntax:
|
||
|
||
- Specific versions: `1.25`, `1.24.11`, `1.24.0-rc.1`, `1.23.0-beta.1`
|
||
- SemVer version range syntax: `^1.25.1`, `~1.24.1`, `>=1.25.0-rc.1`, `<1.25.0`, `>=1.22.0 <1.24.0`
|
||
- Aliases: `stable`, `oldstable`
|
||
- Wildcards: `1.25.x`, `1.x`
|
||
|
||
For details on Semantic Versioning, see [the semver package documentation](https://github.com/npm/node-semver).
|
||
|
||
> **Note**: Due to the peculiarities of YAML parsing, it is recommended to wrap the version in single quotation marks:
|
||
>
|
||
> ```yaml
|
||
> go-version: '1.20'
|
||
> ```
|
||
>
|
||
> The recommendation is based on the YAML parser's behavior, which interprets non-wrapped values as numbers and, in the case of version `1.20`, trims it down to `1.2`, which may not be very obvious.
|
||
|
||
For more usage examples, please refer to the section: [Using go-version input](docs/advanced-usage.md#using-the-go-version-input) of the [Advanced usage](docs/advanced-usage.md) guide.
|
||
|
||
## Recommended permissions
|
||
|
||
When using the `setup-go` action in your GitHub Actions workflow, it is recommended to set the following permissions to ensure proper functionality:
|
||
|
||
```yaml
|
||
permissions:
|
||
contents: read # access to check out code and install dependencies
|
||
```
|
||
|
||
## Caching dependency files and build outputs
|
||
|
||
The action includes built-in caching and restoration for Go modules and build outputs. It uses
|
||
[toolkit/cache](https://github.com/actions/toolkit/tree/main/packages/cache) under the hood, but requires less configuration.
|
||
The `cache` input is optional, and caching is enabled by default. To disable caching, set `cache: false`.
|
||
|
||
By default, the action looks for `go.mod` in the repository root and uses its hash as part of the cache key. Use the `cache-dependency-path` input when you have multiple dependency files, or when they’re located in different subdirectories. This input supports glob patterns.
|
||
|
||
If caching cannot be performed for any reason, the action logs a warning and continues workflow execution.
|
||
|
||
For examples of using `cache-dependency-path`, see the [Caching](docs/advanced-usage.md#caching) section of the [Advanced usage](docs/advanced-usage.md) guide.
|
||
|
||
|
||
## Advanced usage
|
||
|
||
- [Using the go-version input](docs/advanced-usage.md#using-the-go-version-input)
|
||
- [Using the go-version-file input](docs/advanced-usage.md#using-the-go-version-file-input)
|
||
- [Check latest version](docs/advanced-usage.md#check-latest-version)
|
||
- [Caching](docs/advanced-usage.md#caching)
|
||
- [Outputs](docs/advanced-usage.md#outputs)
|
||
- [Custom download URL](docs/advanced-usage.md#custom-download-url)
|
||
- [Using `setup-go` on GHES](docs/advanced-usage.md#using-setup-go-on-ghes)
|
||
|
||
## License
|
||
|
||
The scripts and documentation in this project are released under the [MIT License](LICENSE).
|
||
|
||
## Contributions
|
||
|
||
Contributions are welcome! See our [Contributor's Guide](docs/contributors.md).
|
||
|
||
## Code of Conduct
|
||
|
||
:wave: Be nice. See [our code of conduct](CODE_OF_CONDUCT.md)
|