{"record":{"id":"2f134459250d04c1","repo":"gitbutlerapp/gitbutler","slug":"azure-is-unsupported-at-the-minute-sorry","errorCode":null,"errorMessage":"Azure is unsupported at the minute. Sorry 😞.","messagePattern":"Azure is unsupported at the minute\\. Sorry 😞\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/but/src/command/legacy/forge/review.rs","lineNumber":403,"sourceCode":"            but_forge_storage::Controller::from_path(but_path::app_data_dir()?),\n            forge_repo_info,\n            ctx.legacy_project.preferred_forge_user.clone(),\n        )\n    };\n\n    let forge_repo_info = forge_repo_info.ok_or_else(|| {\n        anyhow::anyhow!(\n            \"Unable to determine the forge for this project. Is target branch associated with a supported forge?\"\n        )\n    })?;\n\n    let account_validity =\n        but_forge::check_forge_account_is_valid(preferred_forge_user, &forge_repo_info, &storage)\n            .await?;\n\n    let forge_display_name = match forge_repo_info.forge {\n        but_forge::ForgeName::Azure => {\n            anyhow::bail!(\"Azure is unsupported at the minute. Sorry 😞.\");\n        }\n        but_forge::ForgeName::GitHub => \"GitHub\",\n        but_forge::ForgeName::GitLab => \"GitLab\",\n        but_forge::ForgeName::Bitbucket => \"Bitbucket\",\n    };\n\n    match account_validity {\n        but_forge::ForgeAccountValidity::Invalid => Err(anyhow::anyhow!(\n            \"Known account is not correctly authenticated.\\nRun '{}' to authenticate with {}.\",\n            \"but config forge auth\",\n            forge_display_name\n        )),\n        but_forge::ForgeAccountValidity::NoCredentials => Err(anyhow::anyhow!(\n            \"No authenticated forge users found.\\nRun '{}' to authenticate with {}.\",\n            \"but config forge auth\",\n            forge_display_name\n        )),\n        but_forge::ForgeAccountValidity::Valid => {","sourceCodeStart":385,"sourceCodeEnd":421,"githubUrl":"https://github.com/gitbutlerapp/gitbutler/blob/caf1f223d3cfb94488c9198ad34487c6006c648f/crates/but/src/command/legacy/forge/review.rs#L385-L421","documentation":"GitButler's forge layer recognizes GitHub, GitLab, Bitbucket and Azure DevOps remotes, but review (PR) management is only implemented for the first three. When the project's target branch resolves to an Azure remote, the review flow hits the explicit `ForgeName::Azure => bail!` arm in the forge display-name match and aborts before contacting any API.","triggerScenarios":"Any forge review command (creating/updating PRs for a stack) in a project whose target branch remote is on dev.azure.com; `but_forge` identifies the repo as Azure and the review flow reaches the display-name lookup in crates/but/src/command/legacy/forge/review.rs:403.","commonSituations":"Enterprise projects hosted on Azure DevOps; teams trying GitButler's stack/PR workflow against an Azure remote; repos migrated to Azure while the GitButler project config still points at it.","solutions":["Use a GitHub, GitLab, or Bitbucket-hosted remote for review workflows: point the target branch's remote at a supported forge.","Manage Azure DevOps PRs directly in the Azure UI/CLI until support is added.","Verify what was detected: check the target branch remote with `git remote -v`."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"# Guard review commands on the forge host\ncase \"$(git remote get-url origin)\" in\n  *dev.azure.com*) echo 'Azure DevOps: review commands unsupported'; exit 2 ;;\nesac","typeGuard":"fn forge_supports_reviews(forge: but_forge::ForgeName) -> bool {\n    !matches!(forge, but_forge::ForgeName::Azure)\n}","tryCatchPattern":null,"preventionTips":["Check `git remote -v` for dev.azure.com before running review commands.","Prefer GitHub/GitLab/Bitbucket remotes for stacks that need PR management.","Surface a clear 'unsupported forge' message in wrappers instead of letting the bail surprise users."],"tags":["forge","azure-devops","unsupported-feature","code-review","gitbutler"],"backgroundTag":"unsupported-provider","analyzedSha":"caf1f223d3cfb94488c9198ad34487c6006c648f","analyzedAt":"2026-08-20T07:55:40.983Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}