mirror of
				https://github.com/actions/setup-go.git
				synced 2025-10-30 15:00:33 +00:00 
			
		
		
		
	Compare commits
	
		
			24 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bfdd3570ce | ||
|   | 44e221478f | ||
|   | 424fc82d43 | ||
|   | 82388ea9d4 | ||
|   | fdeec47002 | ||
|   | 3e9d5483e6 | ||
|   | 02f7ea9f09 | ||
|   | 5805cf725b | ||
|   | 35030c1fd2 | ||
|   | 59d644db2a | ||
|   | 76929df236 | ||
|   | b06835a88c | ||
|   | b8a24202e2 | ||
|   | e234d99c78 | ||
|   | 0ea1f64ec9 | ||
|   | 331ce1d993 | ||
|   | 1087a81afd | ||
|   | ecd878f81d | ||
|   | eca066937b | ||
|   | e816064dae | ||
|   | bba6fe1d58 | ||
|   | 3b4dc6cbed | ||
|   | afe68ffd57 | ||
|   | 6eb700292f | 
							
								
								
									
										38
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| --- | ||||
| name: Bug report | ||||
| about: Create a bug report | ||||
| title: '' | ||||
| labels: bug, needs triage | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| <!--- Please direct any generic questions related to actions to our support community forum at https://github.community/c/code-to-cloud/github-actions/41 ---> | ||||
| <!--- Before opening up a new bug report, please make sure to check for similar existing issues --> | ||||
|  | ||||
| **Description:** | ||||
| A clear and concise description of what the bug is. | ||||
|  | ||||
| **Action version:** | ||||
| Specify the action version | ||||
|  | ||||
| **Platform:** | ||||
| - [ ] Ubuntu | ||||
| - [ ] macOS | ||||
| - [ ] Windows | ||||
|  | ||||
| **Runner type:** | ||||
| - [ ] Hosted | ||||
| - [ ] Self-hosted | ||||
|  | ||||
| **Tools version:** | ||||
| <!--- Please specify go version --> | ||||
|  | ||||
| **Repro steps:**   | ||||
| A description with steps to reproduce the issue. If your have a public example or repo to share, please provide the link. | ||||
|  | ||||
| **Expected behavior:** | ||||
| A description of what you expected to happen. | ||||
|  | ||||
| **Actual behavior:** | ||||
| A description of what is actually happening. | ||||
							
								
								
									
										1
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| blank_issues_enabled: false | ||||
							
								
								
									
										18
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| --- | ||||
| name: Feature request | ||||
| about: Suggest an idea for this project | ||||
| title: '' | ||||
| labels: feature request, needs triage | ||||
| assignees: '' | ||||
| --- | ||||
| <!--- Please direct any generic questions related to actions to our support community forum at https://github.community/c/code-to-cloud/github-actions/41 ---> | ||||
| <!--- Before opening up a new feature request, please make sure to check for similar existing issues and pull requests --> | ||||
|  | ||||
| **Description:** | ||||
| Describe your proposal. | ||||
|  | ||||
| **Justification:** | ||||
| Justification or a use case for your proposal. | ||||
|  | ||||
| **Are you willing to submit a PR?** | ||||
| <!--- We accept contributions! --> | ||||
							
								
								
									
										9
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| **Description:** | ||||
| Describe your changes. | ||||
|  | ||||
| **Related issue:** | ||||
| Add link to the related issue. | ||||
|  | ||||
| **Check list:** | ||||
| - [ ] Mark if documentation changes are required. | ||||
| - [ ] Mark if tests were added or updated to cover the changes. | ||||
							
								
								
									
										51
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| # `dist/index.js` is a special file in Actions. | ||||
| # When you reference an action with `uses:` in a workflow, | ||||
| # `index.js` is the code that will run. | ||||
| # For our project, we generate this file through a build process from other source files. | ||||
| # We need to make sure the checked-in `index.js` actually matches what we expect it to be. | ||||
| name: Check dist/ | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   pull_request: | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   workflow_dispatch: | ||||
|  | ||||
| jobs: | ||||
|   check-dist: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Set Node.js 12.x | ||||
|         uses: actions/setup-node@v2 | ||||
|         with: | ||||
|           node-version: 12.x | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: npm ci | ||||
|  | ||||
|       - name: Rebuild the dist/ directory | ||||
|         run: npm run build | ||||
|  | ||||
|       - name: Compare the expected and actual dist/ directories | ||||
|         run: | | ||||
|           if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then | ||||
|             echo "Detected uncommitted changes after build.  See status below:" | ||||
|             git diff | ||||
|             exit 1 | ||||
|           fi | ||||
|         id: diff | ||||
|  | ||||
|       # If index.js was different than expected, upload the expected version as an artifact | ||||
|       - uses: actions/upload-artifact@v2 | ||||
|         if: ${{ failure() && steps.diff.conclusion == 'failure' }} | ||||
|         with: | ||||
|           name: dist | ||||
|           path: dist/ | ||||
							
								
								
									
										10
									
								
								.github/workflows/licensed.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/licensed.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,12 @@ | ||||
| name: Licensed | ||||
|  | ||||
| on: | ||||
|   push: {branches: main} | ||||
|   pull_request: {branches: main} | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - main | ||||
|  | ||||
| jobs: | ||||
|   test: | ||||
| @@ -14,7 +18,7 @@ jobs: | ||||
|       - name: Install licensed | ||||
|         run: | | ||||
|           cd $RUNNER_TEMP | ||||
|           curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/2.12.2/licensed-2.12.2-linux-x64.tar.gz | ||||
|           curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/3.3.1/licensed-3.3.1-linux-x64.tar.gz | ||||
|           sudo tar -xzf licensed.tar.gz | ||||
|           sudo mv licensed /usr/local/bin/licensed | ||||
|       - run: licensed status | ||||
							
								
								
									
										27
									
								
								.github/workflows/release-new-action-version.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								.github/workflows/release-new-action-version.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| name: Release new action version | ||||
| on: | ||||
|   release: | ||||
|     types: [released] | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       TAG_NAME: | ||||
|         description: 'Tag name that the major tag will point to' | ||||
|         required: true | ||||
|  | ||||
| env: | ||||
|   TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} | ||||
| permissions: | ||||
|   contents: write | ||||
|  | ||||
| jobs: | ||||
|   update_tag: | ||||
|     name: Update the major tag to include the ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} changes | ||||
|     environment: | ||||
|       name: releaseNewActionVersion | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Update the ${{ env.TAG_NAME }} tag | ||||
|         uses: actions/publish-action@v0.1.0 | ||||
|         with: | ||||
|           source-tag: ${{ env.TAG_NAME }} | ||||
|           slack-webhook: ${{ secrets.SLACK_WEBHOOK }} | ||||
							
								
								
									
										19
									
								
								.github/workflows/versions.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/versions.yml
									
									
									
									
										vendored
									
									
								
							| @@ -33,6 +33,23 @@ jobs: | ||||
|         run: __tests__/verify-go.sh ${{ matrix.go }} | ||||
|         shell: bash | ||||
|  | ||||
|   check-latest: | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         os: [ubuntu-latest, windows-latest, macos-latest] | ||||
|         go-version: [1.16, 1.17] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - name: Setup Go and check latest | ||||
|         uses: ./ | ||||
|         with: | ||||
|           go-version: ${{ matrix.go-version }} | ||||
|           check-latest: true | ||||
|       - name: Verify Go | ||||
|         run: go version | ||||
|  | ||||
|   setup-versions-from-manifest: | ||||
|     name: Setup ${{ matrix.go }} ${{ matrix.os }} | ||||
|     runs-on: ${{ matrix.os }} | ||||
| @@ -65,10 +82,12 @@ jobs: | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: setup-go ${{ matrix.go }} | ||||
|         uses: ./ | ||||
|         with: | ||||
|           go-version: ${{ matrix.go }} | ||||
|  | ||||
|       - name: verify go | ||||
|         run: __tests__/verify-go.sh ${{ matrix.go }} | ||||
|         shell: bash | ||||
|   | ||||
							
								
								
									
										7
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| @@ -20,12 +20,13 @@ jobs: | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Setup node 12 | ||||
|       uses: actions/setup-node@v1 | ||||
|         uses: actions/setup-node@v2 | ||||
|         with: | ||||
|           node-version: 12 | ||||
|           cache: npm | ||||
|  | ||||
|     - name: npm install | ||||
|       run: npm install | ||||
|       - name: npm ci | ||||
|         run: npm ci | ||||
|  | ||||
|       - name: Lint | ||||
|         run: npm run format-check | ||||
|   | ||||
							
								
								
									
										2
									
								
								.licenses/npm/@actions/core.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/@actions/core.dep.yml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: "@actions/core" | ||||
| version: 1.2.6 | ||||
| version: 1.6.0 | ||||
| type: npm | ||||
| summary: Actions core lib | ||||
| homepage: https://github.com/actions/toolkit/tree/main/packages/core | ||||
|   | ||||
							
								
								
									
										32
									
								
								.licenses/npm/@actions/http-client-1.0.11.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.licenses/npm/@actions/http-client-1.0.11.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| --- | ||||
| name: "@actions/http-client" | ||||
| version: 1.0.11 | ||||
| type: npm | ||||
| summary: Actions Http Client | ||||
| homepage: https://github.com/actions/http-client#readme | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|   text: | | ||||
|     Actions Http Client for Node.js | ||||
| 
 | ||||
|     Copyright (c) GitHub, Inc. | ||||
| 
 | ||||
|     All rights reserved. | ||||
| 
 | ||||
|     MIT License | ||||
| 
 | ||||
|     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 to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|     and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | ||||
|     subject to the following conditions: | ||||
| 
 | ||||
|     The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | ||||
| 
 | ||||
|     THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT | ||||
|     LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||||
|     NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||
|     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||||
|     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| notices: [] | ||||
							
								
								
									
										1
									
								
								CODEOWNERS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								CODEOWNERS
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| * @actions/spark | ||||
							
								
								
									
										61
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								README.md
									
									
									
									
									
								
							| @@ -16,51 +16,71 @@ This action sets up a go environment for use in actions by: | ||||
| The V2 offers: | ||||
| - Adds GOBIN to the PATH | ||||
| - Proxy Support | ||||
| - stable input  | ||||
| - `stable` input  | ||||
| - Check latest version | ||||
| - Bug Fixes (including issues around version matching and semver) | ||||
|  | ||||
| It will first check the local cache for a version match. If version is not found locally, It will pull it from `main` branch of [go-versions](https://github.com/actions/go-versions/blob/main/versions-manifest.json) repository and on miss or failure, it will fall back to the previous behavior of download directly from [go dist](https://storage.googleapis.com/golang). | ||||
| 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 from [go dist](https://storage.googleapis.com/golang). To change the default behavior, please use the [check-latest input](#check-latest-version). | ||||
|  | ||||
| Matching by semver spec: | ||||
| Matching by [semver spec](https://github.com/npm/node-semver): | ||||
| ```yaml | ||||
| steps: | ||||
| - uses: actions/checkout@v2 | ||||
| - uses: actions/setup-go@v2 | ||||
|   - uses: actions/checkout@v2 | ||||
|   - uses: actions/setup-go@v2 | ||||
|     with: | ||||
|       go-version: '^1.13.1' # The Go version to download (if necessary) and use. | ||||
| - run: go version | ||||
|   - run: go version | ||||
| ``` | ||||
|  | ||||
| Matching an unstable pre-release: | ||||
| ```yaml | ||||
| steps: | ||||
| - uses: actions/checkout@v2 | ||||
| - uses: actions/setup-go@v2 | ||||
|   - uses: actions/checkout@v2 | ||||
|   - uses: actions/setup-go@v2 | ||||
|     with: | ||||
|       stable: 'false' | ||||
|       go-version: '1.14.0-rc1' # The Go version to download (if necessary) and use. | ||||
| - run: go version | ||||
|   - run: go version | ||||
| ``` | ||||
|  | ||||
| # Usage | ||||
|  | ||||
| See [action.yml](action.yml) | ||||
|  | ||||
| Basic: | ||||
| ## Basic: | ||||
| ```yaml | ||||
| steps: | ||||
| - uses: actions/checkout@master | ||||
| - uses: actions/setup-go@v1 | ||||
|   - uses: actions/checkout@v2 | ||||
|   - uses: actions/setup-go@v2 | ||||
|     with: | ||||
|     go-version: '1.9.3' # The Go version to download (if necessary) and use. | ||||
| - run: go run hello.go | ||||
|       go-version: '1.16.1' # The Go version to download (if necessary) and use. | ||||
|   - run: go run hello.go | ||||
| ``` | ||||
|  | ||||
| Matrix Testing: | ||||
|  | ||||
| ## Check latest version:   | ||||
|  | ||||
| The `check-latest` flag defaults to `false`. Use the default or set `check-latest` to `false` if you prefer stability and if you want to ensure a specific Go version is always used. | ||||
|  | ||||
| If `check-latest` is set to `true`, the action first checks if the cached version is the latest one. If the locally cached version is not the most up-to-date, a Go version will then be downloaded. Set `check-latest` to `true` if you want the most up-to-date Go version to always be used. | ||||
|  | ||||
| > Setting `check-latest` to `true` has performance implications as downloading Go versions is slower than using cached versions. | ||||
|  | ||||
| ```yaml | ||||
| steps: | ||||
|   - uses: actions/checkout@v2 | ||||
|   - uses: actions/setup-go@v2 | ||||
|     with: | ||||
|       go-version: '1.14' | ||||
|       check-latest: true | ||||
|   - run: go run hello.go | ||||
| ``` | ||||
|  | ||||
| ## Matrix Testing: | ||||
| ```yaml | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-16.04 | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       matrix: | ||||
|         go: [ '1.14', '1.13' ] | ||||
| @@ -68,12 +88,19 @@ jobs: | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - name: Setup go | ||||
|         uses: actions/setup-go@v1 | ||||
|         uses: actions/setup-go@v2 | ||||
|         with: | ||||
|           go-version: ${{ matrix.go }} | ||||
|       - run: go run hello.go | ||||
| ``` | ||||
|  | ||||
| ### Supported version syntax | ||||
| The `go-version` input supports the following syntax: | ||||
|  | ||||
| Specific versions: `1.15`, `1.16.1`, `1.17.0-rc2`, `1.16.0-beta1`   | ||||
| SemVer's version range syntax: `^1.13.1`   | ||||
| For more information about semantic versioning please refer [semver](https://github.com/npm/node-semver) documentation | ||||
|  | ||||
| # License | ||||
|  | ||||
| The scripts and documentation in this project are released under the [MIT License](LICENSE) | ||||
|   | ||||
| @@ -1,4 +1,29 @@ | ||||
| [ | ||||
|     { | ||||
|       "version": "1.17.6", | ||||
|       "stable": true, | ||||
|       "release_url": "https://github.com/actions/go-versions/releases/tag/1.17.6-1668090892", | ||||
|       "files": [ | ||||
|         { | ||||
|           "filename": "go-1.17.6-darwin-x64.tar.gz", | ||||
|           "arch": "x64", | ||||
|           "platform": "darwin", | ||||
|           "download_url": "https://github.com/actions/go-versions/releases/download/1.17.6-1668090892/go-1.17.6-darwin-x64.tar.gz" | ||||
|         }, | ||||
|         { | ||||
|           "filename": "go-1.17.6-linux-x64.tar.gz", | ||||
|           "arch": "x64", | ||||
|           "platform": "linux", | ||||
|           "download_url": "https://github.com/actions/go-versions/releases/download/1.17.6-1668090892/go-1.17.6-linux-x64.tar.gz" | ||||
|         }, | ||||
|         { | ||||
|           "filename": "go-1.17.6-win32-x64.zip", | ||||
|           "arch": "x64", | ||||
|           "platform": "win32", | ||||
|           "download_url": "https://github.com/actions/go-versions/releases/download/1.17.6-1668090892/go-1.17.6-win32-x64.zip" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "version": "1.12.17", | ||||
|       "stable": true, | ||||
|   | ||||
| @@ -19,6 +19,7 @@ describe('setup-go', () => { | ||||
|   let os = {} as any; | ||||
|  | ||||
|   let inSpy: jest.SpyInstance; | ||||
|   let getBooleanInputSpy: jest.SpyInstance; | ||||
|   let findSpy: jest.SpyInstance; | ||||
|   let cnSpy: jest.SpyInstance; | ||||
|   let logSpy: jest.SpyInstance; | ||||
| @@ -35,16 +36,19 @@ describe('setup-go', () => { | ||||
|   let execSpy: jest.SpyInstance; | ||||
|   let getManifestSpy: jest.SpyInstance; | ||||
|  | ||||
|   beforeAll(() => { | ||||
|     process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out | ||||
|     console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions | ||||
|   }); | ||||
|   beforeAll(async () => { | ||||
|     process.env['GITHUB_ENV'] = ''; // Stub out Environment file functionality so we can verify it writes to standard out (toolkit is backwards compatible) | ||||
|   }, 100000); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     process.env['GITHUB_PATH'] = ''; // Stub out ENV file functionality so we can verify it writes to standard out | ||||
|  | ||||
|     // @actions/core | ||||
|     inputs = {}; | ||||
|     inSpy = jest.spyOn(core, 'getInput'); | ||||
|     inSpy.mockImplementation(name => inputs[name]); | ||||
|     getBooleanInputSpy = jest.spyOn(core, 'getBooleanInput'); | ||||
|     getBooleanInputSpy.mockImplementation(name => inputs[name]); | ||||
|  | ||||
|     // node | ||||
|     os = {}; | ||||
| @@ -81,7 +85,7 @@ describe('setup-go', () => { | ||||
|     }); | ||||
|     logSpy.mockImplementation(line => { | ||||
|       // uncomment to debug | ||||
|       // process.stderr.write('log:' + line + '\n'); | ||||
|       process.stderr.write('log:' + line + '\n'); | ||||
|     }); | ||||
|     dbgSpy.mockImplementation(msg => { | ||||
|       // uncomment to see debug output | ||||
| @@ -96,7 +100,7 @@ describe('setup-go', () => { | ||||
|   }); | ||||
|  | ||||
|   afterAll(async () => { | ||||
|     console.log('::stoptoken::'); // Re-enable executing of runner commands when running tests in actions | ||||
|     jest.restoreAllMocks(); | ||||
|   }, 100000); | ||||
|  | ||||
|   it('can find 1.9.7 from manifest on osx', async () => { | ||||
| @@ -299,7 +303,6 @@ describe('setup-go', () => { | ||||
|     os.platform = 'linux'; | ||||
|     os.arch = 'x64'; | ||||
|  | ||||
|     // a version which is in the manifest | ||||
|     let versionSpec = '1.12.16'; | ||||
|  | ||||
|     inputs['go-version'] = versionSpec; | ||||
| @@ -337,7 +340,6 @@ describe('setup-go', () => { | ||||
|     os.platform = 'linux'; | ||||
|     os.arch = 'x64'; | ||||
|  | ||||
|     // a version which is in the manifest | ||||
|     let versionSpec = '1.12'; | ||||
|  | ||||
|     inputs['go-version'] = versionSpec; | ||||
| @@ -375,7 +377,6 @@ describe('setup-go', () => { | ||||
|     os.platform = 'linux'; | ||||
|     os.arch = 'x64'; | ||||
|  | ||||
|     // a version which is not in the manifest but is in node dist | ||||
|     let versionSpec = '1.12.14'; | ||||
|  | ||||
|     inputs['go-version'] = versionSpec; | ||||
| @@ -497,6 +498,16 @@ describe('setup-go', () => { | ||||
|     expect(annotation.message).toBe('undefined: fmt.Printl'); | ||||
|   }); | ||||
|  | ||||
|   it('matches on unix path down the tree', async () => { | ||||
|     let line = 'foo/main.go:13:2: undefined: fmt.Printl'; | ||||
|     let annotation = testMatch(line); | ||||
|     expect(annotation).toBeDefined(); | ||||
|     expect(annotation.line).toBe(13); | ||||
|     expect(annotation.column).toBe(2); | ||||
|     expect(annotation.file).toBe('foo/main.go'); | ||||
|     expect(annotation.message).toBe('undefined: fmt.Printl'); | ||||
|   }); | ||||
|  | ||||
|   it('matches on rooted unix path', async () => { | ||||
|     let line = '/assert.go:4:1: missing return at end of function'; | ||||
|     let annotation = testMatch(line); | ||||
| @@ -563,4 +574,166 @@ describe('setup-go', () => { | ||||
|   it('does not convert exact versions', async () => { | ||||
|     expect(im.makeSemver('1.13.1')).toBe('1.13.1'); | ||||
|   }); | ||||
|  | ||||
|   describe('check-latest flag', () => { | ||||
|     it("use local version and don't check manifest if check-latest is not specified", async () => { | ||||
|       os.platform = 'linux'; | ||||
|       os.arch = 'x64'; | ||||
|  | ||||
|       inputs['go-version'] = '1.16'; | ||||
|       inputs['check-latest'] = false; | ||||
|  | ||||
|       const toolPath = path.normalize('/cache/go/1.16.1/x64'); | ||||
|       findSpy.mockReturnValue(toolPath); | ||||
|       await main.run(); | ||||
|  | ||||
|       expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`); | ||||
|       expect(logSpy).not.toHaveBeenCalledWith( | ||||
|         'Attempting to resolve the latest version from the manifest...' | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('check latest version and resolve it from local cache', async () => { | ||||
|       os.platform = 'linux'; | ||||
|       os.arch = 'x64'; | ||||
|  | ||||
|       inputs['go-version'] = '1.16'; | ||||
|       inputs['check-latest'] = true; | ||||
|  | ||||
|       const toolPath = path.normalize('/cache/go/1.16.1/x64'); | ||||
|       findSpy.mockReturnValue(toolPath); | ||||
|       dlSpy.mockImplementation(async () => '/some/temp/path'); | ||||
|       exSpy.mockImplementation(async () => '/some/other/temp/path'); | ||||
|       cacheSpy.mockImplementation(async () => toolPath); | ||||
|  | ||||
|       await main.run(); | ||||
|  | ||||
|       expect(logSpy).toHaveBeenCalledWith('Setup go stable version spec 1.16'); | ||||
|       expect(logSpy).toHaveBeenCalledWith(`Found in cache @ ${toolPath}`); | ||||
|     }); | ||||
|  | ||||
|     it('check latest version and install it from manifest', async () => { | ||||
|       os.platform = 'linux'; | ||||
|       os.arch = 'x64'; | ||||
|  | ||||
|       const versionSpec = '1.17'; | ||||
|       const patchVersion = '1.17.6'; | ||||
|       inputs['go-version'] = versionSpec; | ||||
|       inputs['stable'] = 'true'; | ||||
|       inputs['check-latest'] = true; | ||||
|  | ||||
|       findSpy.mockImplementation(() => ''); | ||||
|       dlSpy.mockImplementation(async () => '/some/temp/path'); | ||||
|       const toolPath = path.normalize('/cache/go/1.17.5/x64'); | ||||
|       exSpy.mockImplementation(async () => '/some/other/temp/path'); | ||||
|       cacheSpy.mockImplementation(async () => toolPath); | ||||
|       const expectedUrl = | ||||
|         'https://github.com/actions/go-versions/releases/download/1.17.6-1668090892/go-1.17.6-darwin-x64.tar.gz'; | ||||
|  | ||||
|       await main.run(); | ||||
|  | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Setup go stable version spec ${versionSpec}` | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         'Attempting to resolve the latest version from the manifest...' | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith(`Resolved as '${patchVersion}'`); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Attempting to download ${patchVersion}...` | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith('Extracting Go...'); | ||||
|       expect(logSpy).toHaveBeenCalledWith('Adding to the cache ...'); | ||||
|       expect(logSpy).toHaveBeenCalledWith('Added go to the path'); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Successfully setup go version ${versionSpec}` | ||||
|       ); | ||||
|     }); | ||||
|  | ||||
|     it('fallback to dist if version is not found in manifest', async () => { | ||||
|       os.platform = 'linux'; | ||||
|       os.arch = 'x64'; | ||||
|  | ||||
|       let versionSpec = '1.13'; | ||||
|  | ||||
|       inputs['go-version'] = versionSpec; | ||||
|       inputs['check-latest'] = true; | ||||
|       inputs['always-auth'] = false; | ||||
|       inputs['token'] = 'faketoken'; | ||||
|  | ||||
|       // ... but not in the local cache | ||||
|       findSpy.mockImplementation(() => ''); | ||||
|  | ||||
|       dlSpy.mockImplementation(async () => '/some/temp/path'); | ||||
|       let toolPath = path.normalize('/cache/go/1.13.7/x64'); | ||||
|       exSpy.mockImplementation(async () => '/some/other/temp/path'); | ||||
|       cacheSpy.mockImplementation(async () => toolPath); | ||||
|  | ||||
|       await main.run(); | ||||
|  | ||||
|       let expPath = path.join(toolPath, 'bin'); | ||||
|  | ||||
|       expect(dlSpy).toHaveBeenCalled(); | ||||
|       expect(exSpy).toHaveBeenCalled(); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         'Attempting to resolve the latest version from the manifest...' | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Failed to resolve version ${versionSpec} from manifest` | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Attempting to download ${versionSpec}...` | ||||
|       ); | ||||
|       expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`); | ||||
|     }); | ||||
|  | ||||
|     it('fallback to dist if manifest is not available', async () => { | ||||
|       os.platform = 'linux'; | ||||
|       os.arch = 'x64'; | ||||
|  | ||||
|       let versionSpec = '1.13'; | ||||
|  | ||||
|       process.env['GITHUB_PATH'] = ''; | ||||
|  | ||||
|       inputs['go-version'] = versionSpec; | ||||
|       inputs['check-latest'] = true; | ||||
|       inputs['always-auth'] = false; | ||||
|       inputs['token'] = 'faketoken'; | ||||
|  | ||||
|       // ... but not in the local cache | ||||
|       findSpy.mockImplementation(() => ''); | ||||
|       getManifestSpy.mockImplementation(() => { | ||||
|         throw new Error('Unable to download manifest'); | ||||
|       }); | ||||
|  | ||||
|       dlSpy.mockImplementation(async () => '/some/temp/path'); | ||||
|       let toolPath = path.normalize('/cache/go/1.13.7/x64'); | ||||
|       exSpy.mockImplementation(async () => '/some/other/temp/path'); | ||||
|       cacheSpy.mockImplementation(async () => toolPath); | ||||
|  | ||||
|       await main.run(); | ||||
|  | ||||
|       let expPath = path.join(toolPath, 'bin'); | ||||
|  | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Failed to resolve version ${versionSpec} from manifest` | ||||
|       ); | ||||
|       expect(dlSpy).toHaveBeenCalled(); | ||||
|       expect(exSpy).toHaveBeenCalled(); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         'Attempting to resolve the latest version from the manifest...' | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         'Unable to resolve a version from the manifest...' | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Failed to resolve version ${versionSpec} from manifest` | ||||
|       ); | ||||
|       expect(logSpy).toHaveBeenCalledWith( | ||||
|         `Attempting to download ${versionSpec}...` | ||||
|       ); | ||||
|  | ||||
|       expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -4,6 +4,9 @@ author: 'GitHub' | ||||
| inputs:  | ||||
|   go-version: | ||||
|     description: 'The Go version to download (if necessary) and use. Supports semver spec and ranges.' | ||||
|   check-latest: | ||||
|     description: 'Set this option to true if you want the action to always check for the latest available version that satisfies the version spec' | ||||
|     default: false | ||||
|   stable: | ||||
|     description: 'Whether to download only stable versions' | ||||
|     default: 'true' | ||||
|   | ||||
							
								
								
									
										951
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										951
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -4,7 +4,7 @@ | ||||
|             "owner": "go", | ||||
|             "pattern": [ | ||||
|                 { | ||||
|                     "regexp": "^\\s*(\\.{0,2}[\\/\\\\].+\\.go):(?:(\\d+):(\\d+):)? (.*)", | ||||
|                     "regexp": "^\\s*(.+\\.go):(?:(\\d+):(\\d+):)? (.*)", | ||||
|                     "file": 1, | ||||
|                     "line": 2, | ||||
|                     "column": 3, | ||||
|   | ||||
							
								
								
									
										7201
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7201
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							| @@ -23,22 +23,22 @@ | ||||
|   "author": "GitHub", | ||||
|   "license": "MIT", | ||||
|   "dependencies": { | ||||
|     "@actions/core": "^1.2.6", | ||||
|     "@actions/core": "^1.6.0", | ||||
|     "@actions/http-client": "^1.0.6", | ||||
|     "@actions/io": "^1.0.2", | ||||
|     "@actions/tool-cache": "^1.5.5", | ||||
|     "semver": "^6.1.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^24.0.13", | ||||
|     "@types/jest": "^27.0.2", | ||||
|     "@types/node": "^12.0.4", | ||||
|     "@types/semver": "^6.0.0", | ||||
|     "@zeit/ncc": "^0.21.0", | ||||
|     "jest": "^25.2.1", | ||||
|     "jest-circus": "^24.7.1", | ||||
|     "jest": "^27.2.5", | ||||
|     "jest-circus": "^27.2.5", | ||||
|     "nock": "^10.0.6", | ||||
|     "prettier": "^1.17.1", | ||||
|     "ts-jest": "^24.0.2", | ||||
|     "ts-jest": "^27.0.5", | ||||
|     "typescript": "^3.8.3" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -31,11 +31,27 @@ export interface IGoVersionInfo { | ||||
| export async function getGo( | ||||
|   versionSpec: string, | ||||
|   stable: boolean, | ||||
|   checkLatest: boolean, | ||||
|   auth: string | undefined | ||||
| ) { | ||||
|   let osPlat: string = os.platform(); | ||||
|   let osArch: string = os.arch(); | ||||
|  | ||||
|   if (checkLatest) { | ||||
|     core.info('Attempting to resolve the latest version from the manifest...'); | ||||
|     const resolvedVersion = await resolveVersionFromManifest( | ||||
|       versionSpec, | ||||
|       stable, | ||||
|       auth | ||||
|     ); | ||||
|     if (resolvedVersion) { | ||||
|       versionSpec = resolvedVersion; | ||||
|       core.info(`Resolved as '${versionSpec}'`); | ||||
|     } else { | ||||
|       core.info(`Failed to resolve version ${versionSpec} from manifest`); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // check cache | ||||
|   let toolPath: string; | ||||
|   toolPath = tc.find('go', versionSpec); | ||||
| @@ -97,6 +113,20 @@ export async function getGo( | ||||
|   return downloadPath; | ||||
| } | ||||
|  | ||||
| async function resolveVersionFromManifest( | ||||
|   versionSpec: string, | ||||
|   stable: boolean, | ||||
|   auth: string | undefined | ||||
| ): Promise<string | undefined> { | ||||
|   try { | ||||
|     const info = await getInfoFromManifest(versionSpec, stable, auth); | ||||
|     return info?.resolvedVersion; | ||||
|   } catch (err) { | ||||
|     core.info('Unable to resolve a version from the manifest...'); | ||||
|     core.debug(err.message); | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function installGoVersion( | ||||
|   info: IGoVersionInfo, | ||||
|   auth: string | undefined | ||||
| @@ -122,10 +152,10 @@ async function installGoVersion( | ||||
| } | ||||
|  | ||||
| export async function extractGoArchive(archivePath: string): Promise<string> { | ||||
|   const arch = os.arch(); | ||||
|   const platform = os.platform(); | ||||
|   let extPath: string; | ||||
|  | ||||
|   if (arch === 'win32') { | ||||
|   if (platform === 'win32') { | ||||
|     extPath = await tc.extractZip(archivePath); | ||||
|   } else { | ||||
|     extPath = await tc.extractTar(archivePath); | ||||
|   | ||||
| @@ -24,7 +24,13 @@ export async function run() { | ||||
|       let token = core.getInput('token'); | ||||
|       let auth = !token || isGhes() ? undefined : `token ${token}`; | ||||
|  | ||||
|       const installDir = await installer.getGo(versionSpec, stable, auth); | ||||
|       const checkLatest = core.getBooleanInput('check-latest'); | ||||
|       const installDir = await installer.getGo( | ||||
|         versionSpec, | ||||
|         stable, | ||||
|         checkLatest, | ||||
|         auth | ||||
|       ); | ||||
|  | ||||
|       core.exportVariable('GOROOT', installDir); | ||||
|       core.addPath(path.join(installDir, 'bin')); | ||||
|   | ||||
| @@ -4,9 +4,6 @@ | ||||
|     // "incremental": true,                   /* Enable incremental compilation */ | ||||
|     "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ | ||||
|     "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ | ||||
|     "lib": [ | ||||
|       "es6" | ||||
|     ], | ||||
|     // "allowJs": true,                       /* Allow javascript files to be compiled. */ | ||||
|     // "checkJs": true,                       /* Report errors in .js files. */ | ||||
|     // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ | ||||
| @@ -48,7 +45,8 @@ | ||||
|     // "typeRoots": [],                       /* List of folders to include type definitions from. */ | ||||
|     // "types": [],                           /* Type declaration files to be included in compilation. */ | ||||
|     // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ | ||||
|     "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ | ||||
|     "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ | ||||
|     "sourceMap": true, | ||||
|     // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */ | ||||
|     // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */ | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user