feat(ampup): add token resolution, rate limiter, and --jobs CLI flag#4
Draft
feat(ampup): add token resolution, rate limiter, and --jobs CLI flag#4
Conversation
Add GitHub token resolution with fallback chain: explicit token → `gh auth token` → unauthenticated. Add `--jobs` / `-j` CLI flag to `install` and `update` commands for controlling concurrent downloads (default: 4).
Add GitHubRateLimiter that parses X-RateLimit-Remaining, X-RateLimit-Reset, and Retry-After headers. On 429 or rate-limit 403, sets a global pause shared across all concurrent downloads and retries once. Preemptively pauses when remaining hits 0. Integrates into GitHubClient via send_with_rate_limit, which wraps all HTTP methods with rate-limit awareness.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
gh auth token→ unauthenticated--jobs/-jCLI flag toinstallandupdatecommands for controlling concurrent downloads (default: 4)GitHubRateLimiterthat parsesX-RateLimit-Remaining,X-RateLimit-Reset, andRetry-Afterheaders per GitHub REST API docsGitHubClientHTTP methods viasend_with_rate_limitGitHubClientcloneable for futureDownloadManagertask spawningChanges
Token resolution (
token.rs— new)resolve_github_token(): explicit →gh auth token→None--github-tokenvalues visible inps aux, prefer env var orghRate limiter (
rate_limiter.rs— new)GitHubRateLimiterwithtokio::sync::Mutex-protected statewait_if_paused(): blocking gate, drops lock before sleepingupdate_from_response()→update_state(): testable state machineRetry-Afterdefault: 60s per GitHub docs when header absentextend_pause(): only extends pauses, never shortensGitHub client (
github.rs— modified)send_with_rate_limit(): wraps all HTTP requests with rate-limit awareness and one retry on 429RateLimitederror variant with actionable user message#[derive(Clone)]onGitHubClient(cheap —reqwest::ClientandArc<GitHubRateLimiter>are both Arc-backed)CLI (
main.rs— modified)--jobs/-jflag oninstallandupdatecommandsTest plan