GitHubs API-ratebegrænsning: fastgør til toolcachen, giv et token med
Nogle actions kalder api.github.com, mens de kører. setup-go, setup-node og setup-python beder den om en liste over tilgængelige versioner, hver gang den version, du har angivet, ikke allerede ligger på runneren. setup-java gør det samme, men kun for distributioner, hvis versionsliste ligger på GitHub, fx Microsoft Build of OpenJDK; Temurin hentes fra Adoptium. setup-dotnet installerer .NET fra Microsofts eget feed og er ikke berørt. Andre actions læser releases eller filer fra GitHub-repositories.
GitHub tillader 60 uautentificerede forespørgsler i timen pr. IP-adresse. Hostede runnere deler udgående IP-adresser, så andre jobs bruger af den samme kvote som dine. Når den er brugt op, fejler steppet:
Error: API rate limit exceeded for 80.158.x.x. (But here's the good news:
Authenticated requests get a higher rate limit. Check out the documentation
for more details.)To ændringer forhindrer det. Lav den første i alle workflows; lav den anden for de actions, der stadig skal ud til GitHub.
1. Fastgør en major.minor-version, så toolcachen svarer
Hostede runnere har bestemte versioner af Node.js, Go, Python, Java og .NET i deres toolcache: listen står på hvad runner-imaget indeholder. En setup-*-action, der finder versionen dér, bruger den direkte og laver intet kald til GitHub.
Den finder den kun, hvis du beder om et interval, som toolcachen kan opfylde. En fuld patch-version (1.27.2) rammer forbi, så snart runner-imaget går videre til 1.27.3, og så beder actionen api.github.com om sin versionsliste og henter fra GitHub:
# Misses the toolcache when the image has a newer patch, then calls api.github.com
- uses: actions/setup-go@v5
with:
go-version: '1.27.2'
# Resolves from the toolcache: no GitHub call
- uses: actions/setup-go@v5
with:
go-version: '1.27'Det samme gælder node-version: '24', python-version: '3.13' og de andre setup-*-inputs. Lad check-latest være usat (standardværdien er false): med check-latest: true beder actionen GitHub om den nyeste version ved hver kørsel, også når toolcachen har en.
En go.mod-, .nvmrc- eller .python-version-fil, der læses via go-version-file og lignende inputs, angiver som regel en præcis version og rammer derfor forbi toolcachen på samme måde. Angiv i stedet major.minor-versionen i workflowet.
2. Giv et GitHub.com-token til actions, der kalder GitHub
Autentificerede forespørgsler får 5.000 i timen, talt mod dit token i stedet for den delte IP-adresse. Opret et token på GitHub.com, og giv det til actionen:
- Opret på GitHub.com et fine-grained personal access token (et finmasket personligt adgangstoken) med adgangen Public repositories (read-only) og ingen andre rettigheder. Det skal kun læse offentlige data.
- Gem det i fremforge som en secret på repository- eller organisationsniveau, for eksempel
GH_DOTCOM_TOKEN. - Giv det til actionens
token-input:
- uses: actions/setup-node@v4
with:
node-version: '24'
token: ${{ secrets.GH_DOTCOM_TOKEN }}setup-go og setup-python tager det samme token-input. Det gør setup-java også, men dér betyder det kun noget for distributionerne ovenfor. setup-dotnet har intet token-input og har ikke brug for et. Andre actions, der kalder GitHub, accepterer som regel token eller github-token; se actionens dokumentation.
secrets.GITHUB_TOKEN virker ikke her
På fremforge er secrets.GITHUB_TOKEN (og github.token) jobbets Forgejo-token. Det autentificerer mod fremforge, ikke mod github.com, så det ændrer intet at give det til en action, der kalder api.github.com: forespørgslen tæller stadig som uautentificeret. Brug et token oprettet på GitHub.com som beskrevet ovenfor.
Hvad fremforge gør, og hvad det ikke gør
- Runner-imaget har de versioner af Node.js, Go, Python, Java og .NET, der står på siden om runner-imaget, i sin toolcache. Et workflow, der beder om en af dem som i trin 1, har aldrig brug for GitHub til den. En version uden for listen bliver hentet, og for
setup-go,setup-nodeogsetup-pythonbegynder det med et kald tilapi.github.com. - Selve actions (
uses: actions/setup-go@v5og lignende) hentes fra fremforges egne spejle, ikke fra GitHub, så det at slå en action op tæller aldrig mod GitHubs grænse. Se Marketplace-kompatibilitet. - fremforge tilføjer ikke udgående IP-adresser for at sprede GitHubs grænse pr. IP. De to ændringer ovenfor fjerner behovet, og de virker uanset IP-adressen.