gitbutlerapp/gitbutler · error · anyhow::Error
Listing ci checks for forge {forge:?} is not implemented yet
Error message
Listing ci checks for forge {forge:?} is not implemented yet. What it means
but-forge's CI-check listing is implemented for GitHub, GitLab and Bitbucket; the match on ForgeName ends in a catch-all arm that errors for any other forge, stating the operation is not implemented yet. Currently that means Azure DevOps remotes cannot list CI checks through this API.
Source
Thrown at crates/but-forge/src/ci.rs:193
let runtime = tokio::runtime::Runtime::new()
.map_err(|err| anyhow::anyhow!("Failed to create tokio runtime: {err}"))?;
runtime.block_on(bb.list_checks_for_ref(&workspace, &repo_slug, &reference))
})
.join()
.map_err(|e| anyhow::anyhow!("Failed to join thread: {e:?}"))??;
Ok(statuses.map(|statuses| {
statuses
.into_iter()
.map(|status| {
let mut ci_check = CiCheck::from(status);
ci_check.reference = reference_for_checks.to_string();
ci_check
})
.collect()
}))
}
_ => Err(anyhow::anyhow!(
"Listing ci checks for forge {forge:?} is not implemented yet."
)),
}
}
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "export-schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct CiCheck {
pub id: i64,
pub name: String,
pub output: CiOutput,
pub started_at: Option<chrono::DateTime<chrono::Utc>>,
pub status: CiStatus,
pub head_sha: String,
pub url: String,
pub html_url: String,
pub details_url: String,View on GitHub (pinned to caf1f223d3)
Solutions
- Accept the error and hide/skip CI status for remotes on unsupported forges
- Query CI status for those remotes through the forge's own API/CLI instead
- Contribute or upvote an implementation for the missing forge in the ci.rs match
Defensive patterns
Strategy: fallback
Validate before calling
// Rust: gate on the supported forge set before calling
const CI_SUPPORTED_FORGES: &[ForgeName] =
&[ForgeName::GitHub, ForgeName::GitLab, ForgeName::Bitbucket];
if !CI_SUPPORTED_FORGES.contains(&forge) {
// skip CI listing for this remote; render 'CI status not supported'
} Type guard
fn supports_ci_checks(forge: ForgeName) -> bool {
matches!(forge, ForgeName::GitHub | ForgeName::GitLab | ForgeName::Bitbucket)
} Try / catch
match list_ci_checks(&forge, owner, repo, reference) {
Err(err) if err.to_string().contains("is not implemented yet") => {
// treat CI as unsupported for this forge and hide the panel
}
result => result,
} Prevention
- Check the forge name against the supported set before invoking CI features
- Design UIs so CI status is an optional panel, not a required result
- Track upstream forge-support parity before promising Azure DevOps CI in your tooling
When it happens
Trigger: Calling the CI-checks entry point in crates/but-forge/src/ci.rs for a repository whose remote resolves to a ForgeName outside {GitHub, GitLab, Bitbucket} - concretely an Azure DevOps remote.
Common situations: Teams self-hosting on Azure DevOps expecting feature parity with GitHub/GitLab; automation that enumerates all remotes and queries CI for each, hitting the unsupported arm.
Related errors
- Fetching repo info for forge {:?} is not implemented yet.
- Azure is unsupported at the minute. Sorry 😞.
- PR template exists but must be valid UTF-8 text or markdown
- Could not restore all review targets after the push failed:
- Branch `{}` is pushed, but its remote ancestry does not matc
AI-assisted analysis of gitbutlerapp/gitbutler@caf1f223d3 (2026-08-20).
Data as JSON: /api/errors/90fd890dbb72a88c.
Report an issue: GitHub.