Platforms
GitBucket
The GitHub provider pointed at a GitBucket /api/v3. What GitBucket does not serve fails with a sentence, not a 404.
- provider
- createProvider("github")
- auth header
- Authorization: token
- env vars
- GH_TOKEN, GITHUB_TOKEN
- anonymous reads
- depends on the instance
Address it
import { createProvider } from "@agntn/forges";
const gitbucket = createProvider("github", {
token: "…",
baseURL: "https://gitbucket.example.com/api/v3",
});
GitBucket implements the GitHub REST v3 API, so there is no separate provider and I am not writing one. The platform string is github, the host is the baseURL with /api/v3 spelled out. The token chain would ask gh for that host, which is almost never what you want, so pass the token.
What works
Repositories, issues, pull requests, comments, commits and users through the same endpoints the GitHub page lists, as far as your GitBucket version serves them.
What does not
- Review threads. GitBucket is REST v3 only, no GraphQL.
threads.*fails with an explicit unsupported endpoint error rather than a bare 404. - Code search. No
/search/codeendpoint,code.searchfails explicitly. - Owner templates. A host without the GitHub Enterprise header is repository scope only. The owner's
.githubrepository is not consulted. - GitHub Actions runs and check runs depend on the instance. Expect
NotFoundErrorwhere the endpoint is missing.
Gotchas
- Pagination follows whatever
Linkheader GitBucket emits. When there is none, a list is one page withhasNextPage: false. - The rate limit headers GitHub sends are usually absent, so a 403 is a
PermissionErrorunless the response carriesRetry-Afteror says rate limit in the body.
Where it lives
src/providers/github.ts, the same class. Anything GitBucket needs is a baseURL away.