From 27b43e1b0d324a64f8fcc14f931e45ae178f6b19 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Wed, 2 Nov 2022 12:21:18 +0100 Subject: [PATCH] Pass the token input through on GHES (#277) --- README.md | 15 +++++++++++++++ action.yml | 4 ++-- dist/setup/index.js | 2 +- src/main.ts | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9feb0db..883f726 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,21 @@ The `go-version` input supports the following syntax: For more information about semantic versioning, please refer to [semver](https://github.com/npm/node-semver) documentation. +## Using `setup-go` on GHES + +`setup-go` comes pre-installed on the appliance with GHES if Actions is enabled. When dynamically downloading Go distributions, `setup-go` downloads distributions from [`actions/go-versions`](https://github.com/actions/go-versions) on github.com (outside of the appliance). These calls to `actions/go-versions` are made via unauthenticated requests, which are limited to [60 requests per hour per IP](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting). If more requests are made within the time frame, then you will start to see rate-limit errors during downloading that looks like: `##[error]API rate limit exceeded for...`. After that error the action will try to download versions directly from https://storage.googleapis.com/golang, but it also can have rate limit so it's better to put token. + +To get a higher rate limit, you can [generate a personal access token on github.com](https://github.com/settings/tokens/new) and pass it as the `token` input for the action: + +```yaml +uses: actions/setup-go@v3 +with: + token: ${{ secrets.GH_DOTCOM_TOKEN }} + go-version: 1.18 +``` + +If the runner is not able to access github.com, any Go versions requested during a workflow run must come from the runner's tool cache. See "[Setting up the tool cache on self-hosted runners without internet access](https://docs.github.com/en/enterprise-server@3.2/admin/github-actions/managing-access-to-actions-from-githubcom/setting-up-the-tool-cache-on-self-hosted-runners-without-internet-access)" for more information. + # License The scripts and documentation in this project are released under the [MIT License](LICENSE) diff --git a/action.yml b/action.yml index 5310a11..674afab 100644 --- a/action.yml +++ b/action.yml @@ -10,8 +10,8 @@ inputs: 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 token: - description: Used to pull node distributions from go-versions. Since there's a default, this is typically not supplied by the user. - default: ${{ github.token }} + description: Used to pull node distributions from go-versions. Since there's a default, this is typically not supplied by the user. When running this action on github.com, the default value is sufficient. When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting. + default: ${{ github.server_url == 'https://github.com' && github.token || '' }} cache: description: Used to specify whether caching is needed. Set to true, if you'd like to enable caching. default: false diff --git a/dist/setup/index.js b/dist/setup/index.js index 9c80baa..f61c957 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -63519,7 +63519,7 @@ function run() { } if (versionSpec) { let token = core.getInput('token'); - let auth = !token || cache_utils_1.isGhes() ? undefined : `token ${token}`; + let auth = !token ? undefined : `token ${token}`; const checkLatest = core.getBooleanInput('check-latest'); const installDir = yield installer.getGo(versionSpec, checkLatest, auth, arch); core.addPath(path_1.default.join(installDir, 'bin')); diff --git a/src/main.ts b/src/main.ts index 36a7ce0..1ddf511 100644 --- a/src/main.ts +++ b/src/main.ts @@ -28,7 +28,7 @@ export async function run() { if (versionSpec) { let token = core.getInput('token'); - let auth = !token || isGhes() ? undefined : `token ${token}`; + let auth = !token ? undefined : `token ${token}`; const checkLatest = core.getBooleanInput('check-latest'); const installDir = await installer.getGo(