mirror of
				https://github.com/actions/setup-go.git
				synced 2025-10-31 07:30:31 +00:00 
			
		
		
		
	Compare commits
	
		
			12 Commits
		
	
	
		
			node24
			...
			dependabot
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | f562c34c07 | ||
|   | 4f4e8ddad6 | ||
|   | fe7e4d1e4f | ||
|   | 8fda8c0fce | ||
|   | 38fcca804c | ||
|   | 9129211aa5 | ||
|   | 5ca846005c | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | e778cb72d5 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 4469467582 | ||
|   | e093d1e9bb | ||
|   | 1d76b952eb | ||
|   | e75c3e80bc | 
							
								
								
									
										2
									
								
								.github/workflows/basic-validation.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/basic-validation.yml
									
									
									
									
										vendored
									
									
								
							| @@ -15,4 +15,4 @@ jobs: | ||||
|     name: Basic validation | ||||
|     uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main | ||||
|     with: | ||||
|       node-version: '20' | ||||
|       node-version: '24.x' | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							| @@ -16,4 +16,4 @@ jobs: | ||||
|     name: Check dist/ | ||||
|     uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main | ||||
|     with: | ||||
|       node-version: '20' | ||||
|       node-version: '24.x' | ||||
|   | ||||
| @@ -14,7 +14,7 @@ jobs: | ||||
|  | ||||
|     steps: | ||||
|       - name: Checking out | ||||
|         uses: actions/checkout@v4 | ||||
|         uses: actions/checkout@v5 | ||||
|       - name: Publish | ||||
|         id: publish | ||||
|         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: | ||||
|         os: [ubuntu-latest, windows-latest, macos-latest, macos-13] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go Stable | ||||
|         uses: ./ | ||||
|         with: | ||||
| @@ -35,7 +35,7 @@ jobs: | ||||
|       matrix: | ||||
|         os: [ubuntu-latest, windows-latest, macos-latest, macos-13] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go oldStable | ||||
|         uses: ./ | ||||
|         with: | ||||
| @@ -57,7 +57,7 @@ jobs: | ||||
|           - os: macos-13 | ||||
|             architecture: x32 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go ${{ matrix.version }} ${{ matrix.architecture }} | ||||
|         uses: ./ | ||||
|         with: | ||||
| @@ -82,7 +82,7 @@ jobs: | ||||
|             go: 1.23.2 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
|         uses: actions/checkout@v5 | ||||
|  | ||||
|       - name: setup-go ${{ matrix.go }} | ||||
|         uses: ./ | ||||
| @@ -101,7 +101,7 @@ jobs: | ||||
|         os: [ubuntu-latest, windows-latest, macos-latest, macos-13] | ||||
|         go-version: ['1.20', '1.21', '1.22', '1.23'] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go and check latest | ||||
|         uses: ./ | ||||
|         with: | ||||
| @@ -117,7 +117,7 @@ jobs: | ||||
|       matrix: | ||||
|         os: [ubuntu-latest, windows-latest, macos-latest, macos-13] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go and check latest | ||||
|         uses: ./ | ||||
|         with: | ||||
| @@ -133,7 +133,7 @@ jobs: | ||||
|       matrix: | ||||
|         os: [ubuntu-latest, windows-latest, macos-latest, macos-13] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go and check latest | ||||
|         uses: ./ | ||||
|         with: | ||||
| @@ -151,7 +151,7 @@ jobs: | ||||
|         go: [1.20.14, 1.21.10, 1.22.8, 1.23.2] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
|         uses: actions/checkout@v5 | ||||
|  | ||||
|       - name: setup-go ${{ matrix.go }} | ||||
|         uses: ./ | ||||
| @@ -171,7 +171,7 @@ jobs: | ||||
|         go: [1.11.12] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
|         uses: actions/checkout@v5 | ||||
|  | ||||
|       - name: setup-go ${{ matrix.go }} | ||||
|         uses: ./ | ||||
| @@ -199,7 +199,7 @@ jobs: | ||||
|           - os: macos-13 | ||||
|             architecture: x64 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup Go and check latest | ||||
|         uses: ./ | ||||
|         with: | ||||
|   | ||||
							
								
								
									
										6
									
								
								.github/workflows/windows-validation.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/windows-validation.yml
									
									
									
									
										vendored
									
									
								
							| @@ -19,7 +19,7 @@ jobs: | ||||
|         cache: [false, true] | ||||
|         go: [1.20.1] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|  | ||||
|       - name: 'Setup ${{ matrix.cache }}, cache: ${{ matrix.go }}' | ||||
|         uses: ./ | ||||
| @@ -88,7 +88,7 @@ jobs: | ||||
|       matrix: | ||||
|         cache: [false, true] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|  | ||||
|       - name: 'Setup default go, cache: ${{ matrix.cache }}' | ||||
|         uses: ./ | ||||
| @@ -121,7 +121,7 @@ jobs: | ||||
|         cache: [false] | ||||
|         go: [1.20.1] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|  | ||||
|       - name: 'Setup ${{ matrix.go }}, cache: ${{ matrix.cache }}' | ||||
|         uses: ./ | ||||
|   | ||||
							
								
								
									
										2
									
								
								.licenses/npm/@types/node.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/@types/node.dep.yml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: "@types/node" | ||||
| version: 20.11.28 | ||||
| version: 24.1.0 | ||||
| type: npm | ||||
| summary: TypeScript definitions for node | ||||
| homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node | ||||
|   | ||||
							
								
								
									
										2
									
								
								.licenses/npm/form-data-2.5.5.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/form-data-2.5.5.dep.yml
									
									
									
										generated
									
									
									
								
							| @@ -4,7 +4,7 @@ version: 2.5.5 | ||||
| type: npm | ||||
| summary: A library to create readable "multipart/form-data" streams. Can be used to | ||||
|   submit forms and file uploads to other web applications. | ||||
| homepage: | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: License | ||||
|   | ||||
							
								
								
									
										2
									
								
								.licenses/npm/form-data-4.0.4.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/form-data-4.0.4.dep.yml
									
									
									
										generated
									
									
									
								
							| @@ -4,7 +4,7 @@ version: 4.0.4 | ||||
| type: npm | ||||
| summary: A library to create readable "multipart/form-data" streams. Can be used to | ||||
|   submit forms and file uploads to other web applications. | ||||
| homepage: | ||||
| homepage:  | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: License | ||||
|   | ||||
							
								
								
									
										1
									
								
								.licenses/npm/function-bind.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								.licenses/npm/function-bind.dep.yml
									
									
									
										generated
									
									
									
								
							| @@ -29,4 +29,3 @@ licenses: | ||||
|     THE SOFTWARE. | ||||
| 
 | ||||
| notices: [] | ||||
| ... | ||||
|   | ||||
							
								
								
									
										6
									
								
								.licenses/npm/undici-types.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.licenses/npm/undici-types.dep.yml
									
									
									
										generated
									
									
									
								
							| @@ -1,15 +1,17 @@ | ||||
| --- | ||||
| name: undici-types | ||||
| version: 5.26.5 | ||||
| version: 7.8.0 | ||||
| type: npm | ||||
| summary: A stand-alone types package for Undici | ||||
| homepage: https://undici.nodejs.org | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: Auto-generated MIT license text | ||||
| - sources: LICENSE | ||||
|   text: | | ||||
|     MIT License | ||||
| 
 | ||||
|     Copyright (c) Matteo Collina and Undici contributors | ||||
| 
 | ||||
|     Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|     of this software and associated documentation files (the "Software"), to deal | ||||
|     in the Software without restriction, including without limitation the rights | ||||
|   | ||||
							
								
								
									
										85
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								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`. | ||||
| - Registering problem matchers for error output. | ||||
|  | ||||
| # Breaking changes in V6 | ||||
|  | ||||
| - Improve toolchain handling to ensure more reliable and consistent toolchain selection and management. | ||||
| - Upgraded the action 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 | ||||
|  | ||||
| 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). | ||||
|  | ||||
| # 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 `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 | ||||
| @@ -50,8 +37,8 @@ Matching by [semver spec](https://github.com/npm/node-semver): | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '^1.13.1' # The Go version to download (if necessary) and use. | ||||
|   - run: go version | ||||
| @@ -59,8 +46,8 @@ steps: | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '>=1.17.0' | ||||
|   - run: go version | ||||
| @@ -78,8 +65,8 @@ Matching an unstable pre-release: | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '1.18.0-rc.1' # The Go version to download (if necessary) and use. | ||||
|   - run: go version | ||||
| @@ -87,8 +74,8 @@ steps: | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '1.16.0-beta.1' # The Go version to download (if necessary) and use. | ||||
|   - run: go version | ||||
| @@ -102,8 +89,8 @@ See [action.yml](action.yml) | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '1.16.1' # The Go version to download (if necessary) and use. | ||||
|   - run: go run hello.go | ||||
| @@ -123,8 +110,8 @@ want the most up-to-date Go version to always be used. | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '1.14' | ||||
|       check-latest: true | ||||
| @@ -144,8 +131,8 @@ set to `true` | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: 'stable' | ||||
|   - run: go run hello.go | ||||
| @@ -153,8 +140,8 @@ steps: | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: 'oldstable' | ||||
|   - run: go run hello.go | ||||
| @@ -176,8 +163,8 @@ If some problem that prevents success caching happens then the action issues the | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version: '1.17' | ||||
|       check-latest: true | ||||
| @@ -191,9 +178,15 @@ steps: | ||||
|  | ||||
| ## 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 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 | ||||
| @@ -204,8 +197,8 @@ If both the `go-version` and the `go-version-file` inputs are provided then the | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v4 | ||||
|   - uses: actions/setup-go@v5 | ||||
|   - uses: actions/checkout@v5 | ||||
|   - uses: actions/setup-go@v6 | ||||
|     with: | ||||
|       go-version-file: 'path/to/go.mod' | ||||
|   - run: go version | ||||
| @@ -222,9 +215,9 @@ jobs: | ||||
|         go: [ '1.14', '1.13' ] | ||||
|     name: Go ${{ matrix.go }} sample | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|       - name: Setup go | ||||
|         uses: actions/setup-go@v5 | ||||
|         uses: actions/setup-go@v6 | ||||
|         with: | ||||
|           go-version: ${{ matrix.go }} | ||||
|       - run: go run hello.go | ||||
| @@ -252,7 +245,7 @@ If that fails as well the action will try to download versions directly from htt | ||||
| If that fails as well you can get a higher rate limit with [generating a personal access token on github.com](https://github.com/settings/tokens/new) and passing it as the `token` input to the action: | ||||
|  | ||||
| ```yaml | ||||
| uses: actions/setup-go@v5 | ||||
| uses: actions/setup-go@v6 | ||||
| with: | ||||
|   token: ${{ secrets.GH_DOTCOM_TOKEN }} | ||||
|   go-version: '1.18' | ||||
|   | ||||
| @@ -129,6 +129,9 @@ describe('setup-go', () => { | ||||
|   }); | ||||
|  | ||||
|   afterEach(() => { | ||||
|     // clear out env var set during 'run' | ||||
|     delete process.env[im.GOTOOLCHAIN_ENV_VAR]; | ||||
|  | ||||
|     //jest.resetAllMocks(); | ||||
|     jest.clearAllMocks(); | ||||
|     //jest.restoreAllMocks(); | ||||
| @@ -285,7 +288,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 +301,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 +317,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 +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 }; | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||
| exports.GOTOOLCHAIN_LOCAL_VAL = exports.GOTOOLCHAIN_ENV_VAR = void 0; | ||||
| exports.getGo = getGo; | ||||
| exports.extractGoArchive = extractGoArchive; | ||||
| exports.getManifest = getManifest; | ||||
| @@ -94330,6 +94331,8 @@ const sys = __importStar(__nccwpck_require__(5632)); | ||||
| const fs_1 = __importDefault(__nccwpck_require__(7147)); | ||||
| const os_1 = __importDefault(__nccwpck_require__(2037)); | ||||
| const utils_1 = __nccwpck_require__(1314); | ||||
| exports.GOTOOLCHAIN_ENV_VAR = 'GOTOOLCHAIN'; | ||||
| exports.GOTOOLCHAIN_LOCAL_VAL = 'local'; | ||||
| const MANIFEST_REPO_OWNER = 'actions'; | ||||
| const MANIFEST_REPO_NAME = 'go-versions'; | ||||
| const MANIFEST_REPO_BRANCH = 'main'; | ||||
| @@ -94663,8 +94666,18 @@ function parseGoVersionFile(versionFilePath) { | ||||
|     const contents = fs_1.default.readFileSync(versionFilePath).toString(); | ||||
|     if (path.basename(versionFilePath) === 'go.mod' || | ||||
|         path.basename(versionFilePath) === 'go.work') { | ||||
|         const match = contents.match(/^go (\d+(\.\d+)*)/m); | ||||
|         return match ? match[1] : ''; | ||||
|         // for backwards compatibility: use version from go directive if
 | ||||
|         // '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(); | ||||
| } | ||||
| @@ -94782,6 +94795,7 @@ function run() { | ||||
|             // If not supplied then problem matchers will still be setup.  Useful for self-hosted.
 | ||||
|             //
 | ||||
|             const versionSpec = resolveVersionInput(); | ||||
|             setGoToolchain(); | ||||
|             const cache = core.getBooleanInput('cache'); | ||||
|             core.info(`Setup go version spec ${versionSpec}`); | ||||
|             let arch = core.getInput('architecture'); | ||||
| @@ -94890,6 +94904,19 @@ function resolveVersionInput() { | ||||
|     } | ||||
|     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); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /***/ }), | ||||
|   | ||||
							
								
								
									
										36
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										36
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,12 @@ | ||||
| { | ||||
|   "name": "setup-go", | ||||
|   "version": "5.0.0", | ||||
|   "version": "6.0.0", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "setup-go", | ||||
|       "version": "5.0.0", | ||||
|       "version": "6.0.0", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@actions/cache": "^4.0.3", | ||||
| @@ -20,13 +20,13 @@ | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "@types/jest": "^29.5.14", | ||||
|         "@types/node": "^20.11.28", | ||||
|         "@types/node": "^24.1.0", | ||||
|         "@types/semver": "^7.5.8", | ||||
|         "@typescript-eslint/eslint-plugin": "^8.31.1", | ||||
|         "@typescript-eslint/parser": "^8.35.1", | ||||
|         "@vercel/ncc": "^0.38.1", | ||||
|         "eslint": "^8.57.0", | ||||
|         "eslint-config-prettier": "^10.0.1", | ||||
|         "eslint-config-prettier": "^10.1.8", | ||||
|         "eslint-plugin-jest": "^29.0.1", | ||||
|         "eslint-plugin-node": "^11.1.0", | ||||
|         "jest": "^29.7.0", | ||||
| @@ -1602,11 +1602,12 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@types/node": { | ||||
|       "version": "20.11.28", | ||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", | ||||
|       "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==", | ||||
|       "version": "24.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", | ||||
|       "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "undici-types": "~5.26.4" | ||||
|         "undici-types": "~7.8.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@types/node-fetch": { | ||||
| @@ -2983,12 +2984,16 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/eslint-config-prettier": { | ||||
|       "version": "10.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz", | ||||
|       "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==", | ||||
|       "version": "10.1.8", | ||||
|       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", | ||||
|       "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "eslint-config-prettier": "build/bin/cli.js" | ||||
|         "eslint-config-prettier": "bin/cli.js" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://opencollective.com/eslint-config-prettier" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "eslint": ">=7.0.0" | ||||
| @@ -5976,9 +5981,10 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/undici-types": { | ||||
|       "version": "5.26.5", | ||||
|       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", | ||||
|       "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" | ||||
|       "version": "7.8.0", | ||||
|       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", | ||||
|       "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/update-browserslist-db": { | ||||
|       "version": "1.0.13", | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| { | ||||
|   "name": "setup-go", | ||||
|   "version": "5.0.0", | ||||
|   "version": "6.0.0", | ||||
|   "private": true, | ||||
|   "description": "setup go action", | ||||
|   "main": "lib/setup-go.js", | ||||
|    "engines": { | ||||
|   "engines": { | ||||
|     "node": ">=24.0.0" | ||||
|   }, | ||||
|   "scripts": { | ||||
| @@ -39,13 +39,13 @@ | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^29.5.14", | ||||
|     "@types/node": "^20.11.28", | ||||
|     "@types/node": "^24.1.0", | ||||
|     "@types/semver": "^7.5.8", | ||||
|     "@typescript-eslint/eslint-plugin": "^8.31.1", | ||||
|     "@typescript-eslint/parser": "^8.35.1", | ||||
|     "@vercel/ncc": "^0.38.1", | ||||
|     "eslint": "^8.57.0", | ||||
|     "eslint-config-prettier": "^10.0.1", | ||||
|     "eslint-config-prettier": "^10.1.8", | ||||
|     "eslint-plugin-jest": "^29.0.1", | ||||
|     "eslint-plugin-node": "^11.1.0", | ||||
|     "jest": "^29.7.0", | ||||
|   | ||||
| @@ -9,6 +9,8 @@ import os from 'os'; | ||||
| import {StableReleaseAlias, isSelfHosted} from './utils'; | ||||
| import {Architecture} from './types'; | ||||
|  | ||||
| export const GOTOOLCHAIN_ENV_VAR = 'GOTOOLCHAIN'; | ||||
| export const GOTOOLCHAIN_LOCAL_VAL = 'local'; | ||||
| const MANIFEST_REPO_OWNER = 'actions'; | ||||
| const MANIFEST_REPO_NAME = 'go-versions'; | ||||
| const MANIFEST_REPO_BRANCH = 'main'; | ||||
| @@ -496,8 +498,21 @@ export function parseGoVersionFile(versionFilePath: string): string { | ||||
|     path.basename(versionFilePath) === 'go.mod' || | ||||
|     path.basename(versionFilePath) === 'go.work' | ||||
|   ) { | ||||
|     const match = contents.match(/^go (\d+(\.\d+)*)/m); | ||||
|     return match ? match[1] : ''; | ||||
|     // for backwards compatibility: use version from go directive if | ||||
|     // '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(); | ||||
|   | ||||
							
								
								
									
										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. | ||||
|     // | ||||
|     const versionSpec = resolveVersionInput(); | ||||
|     setGoToolchain(); | ||||
|  | ||||
|     const cache = core.getBooleanInput('cache'); | ||||
|     core.info(`Setup go version spec ${versionSpec}`); | ||||
| @@ -161,3 +162,20 @@ function resolveVersionInput(): string { | ||||
|  | ||||
|   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