astrid-runtime/astrid · error
no GitHub releases found for {org}/{repo}
Error message
no GitHub releases found for {org}/{repo} What it means
Raised by `fetch_github_latest_version` when the GitHub releases API responds with 404 NOT_FOUND for `https://api.github.com/repos/{org}/{repo}/releases/latest`. GitHub returns 404 here when the repository does not exist, is private/unauthenticated, or exists but has no published releases. `astrid capsule update` surfaces this as a failed update check for that capsule.
Source
Thrown at crates/astrid-cli/src/commands/capsule/install_update.rs:46
Failed { reason: String },
Skipped { reason: String },
}
/// Fetch the latest release version from GitHub for a given org/repo.
async fn fetch_github_latest_version(
client: &reqwest::Client,
org: &str,
repo: &str,
) -> anyhow::Result<semver::Version> {
let api_url = format!("https://api.github.com/repos/{org}/{repo}/releases/latest");
let response = client
.get(&api_url)
.send()
.await
.context("failed to reach GitHub API")?;
if response.status() == reqwest::StatusCode::NOT_FOUND {
bail!("no GitHub releases found for {org}/{repo}");
}
if response.status() == reqwest::StatusCode::TOO_MANY_REQUESTS
|| response.status() == reqwest::StatusCode::FORBIDDEN
{
bail!("GitHub API rate limit exceeded - try again later");
}
if !response.status().is_success() {
bail!("GitHub API returned {}", response.status());
}
let json: serde_json::Value = response
.json()
.await
.context("failed to parse GitHub API response")?;
let tag_name = json
.get("tag_name")
.and_then(serde_json::Value::as_str)
.filter(|s| !s.is_empty())View on GitHub (pinned to affd8760f4)
Solutions
- Verify the repo exists and has at least one published release at https://github.com/{org}/{repo}/releases; if the author only pushes tags, ask them to publish a Release.
- If the repo was renamed, reinstall the capsule with the new `org/repo` source so meta.json records the correct location.
- If the repo is private, ensure credentials/GITHUB_TOKEN are available to your environment or use an accessible mirror.
- If the capsule is abandoned, keep the currently installed version or reinstall from a local `.capsule` file instead of updating.
Example fix
// meta.json source pointing at a removed repo "source": "github.com/old-org/my-capsule" // update fails: no GitHub releases found for old-org/my-capsule // after — reinstall from the relocated repo astrid capsule install github.com/new-org/my-capsule
Defensive patterns
Strategy: fallback
Try / catch
match check_remote_version(&client, &source, &version) {
UpdateCheck::Failed { reason } if reason.contains("no GitHub releases found") => {
eprintln!("Skipping update: {reason}");
},
other => handle(other),
} Prevention
- Before updating, confirm the source repo still exists and has published releases.
- Pin capsule versions for critical environments so a vanished upstream repo does not block workflows.
- Keep local `.capsule` copies of capsules you depend on as an install fallback.
- Watch org/repo renames and update recorded sources promptly.
When it happens
Trigger: Calling `astrid capsule update` (workspace mode) for a capsule whose recorded source points to a GitHub org/repo where the `/releases/latest` endpoint returns 404 — repo deleted or renamed, repo made private, or repo has zero published releases (only draft/prerelease-only tags).
Common situations: Capsule author renamed or deleted the GitHub repo after you installed; repo went private; author tags the repo but never publishes a GitHub Release; typo in source URL recorded in meta.json.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- GitHub API rate limit exceeded - try again later
- GitHub API returned {}
- GitHub API returned {} fetching release {resolved_ref} of {o
- GitHub API error querying release tag {candidate} for {org}/
- GitHub API returned {} for {org}/{repo} latest release
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/843ed8a03a3336c0.
Report an issue: GitHub.