diff --git a/.github/workflows/launcher.yml b/.github/workflows/launcher.yml index f5157c69a..db8c5fac6 100644 --- a/.github/workflows/launcher.yml +++ b/.github/workflows/launcher.yml @@ -59,6 +59,7 @@ jobs: - name: Smoke test env: HORIZON_LAUNCHER_NO_SELF_UPDATE: '1' + HORIZON_GITHUB_TOKEN: ${{ github.token }} run: | set -euo pipefail export HORIZON_LAUNCHER_HOME="${RUNNER_TEMP//\\//}/horizon-launcher-smoke" diff --git a/launcher/src/backend.rs b/launcher/src/backend.rs index 4cb0a453f..2932a4685 100644 --- a/launcher/src/backend.rs +++ b/launcher/src/backend.rs @@ -59,7 +59,14 @@ fn agent() -> ureq::Agent { } fn get(url: &str) -> Result { - agent().get(url).call().map_err(|e| match e { + let mut request = agent().get(url); + // CI runners share addresses and hit GitHub's anonymous rate limit; they pass their own token. + if let Some(token) = std::env::var("HORIZON_GITHUB_TOKEN").ok().filter(|t| !t.is_empty()) { + if url.starts_with("https://api.github.com/") { + request = request.set("Authorization", &format!("Bearer {token}")); + } + } + request.call().map_err(|e| match e { ureq::Error::Status(403, _) => "GitHub's rate limit was reached. Try again in a few minutes.".into(), ureq::Error::Status(code, _) => format!("{url} answered {code}"), ureq::Error::Transport(t) => format!("No connection: {t}"),