JuliusBrussee/caveman · error
githubapp: get repo %s/%s: HTTP %d: %s
Error message
githubapp: get repo %s/%s: HTTP %d: %s
What it means
Fires in GetRepo() when GET /repos/{owner}/{name} with the installation token returns non-200 — the installation cannot see the repo (not installed on it, private, or wrong owner/name). Used by select-repo to prove the repo belongs to the installation before activation.
Source
Thrown at shared/platform/githubapp/githubapp.go:261
// Repo is the minimal repo metadata the connect flow stores.
type Repo struct {
ID int64 `json:"id"`
NodeID string `json:"node_id"`
FullName string `json:"full_name"`
DefaultBranch string `json:"default_branch"`
}
// GetRepo verifies that the installation token can see owner/name and returns the
// repo's stable node id + default branch. Used by select-repo to confirm the repo
// truly belongs to the installation before the binding goes 'active'.
func (a *App) GetRepo(ctx context.Context, token, owner, name string) (Repo, error) {
status, raw, err := a.do(ctx, "Bearer "+token, http.MethodGet,
"/repos/"+url.PathEscape(owner)+"/"+url.PathEscape(name), nil)
if err != nil {
return Repo{}, err
}
if status != http.StatusOK {
return Repo{}, fmt.Errorf("githubapp: get repo %s/%s: HTTP %d: %s", owner, name, status, snippet(raw))
}
var r Repo
if err := json.Unmarshal(raw, &r); err != nil {
return Repo{}, fmt.Errorf("githubapp: decode repo: %w", err)
}
return r, nil
}
// GetRepoInstallation asks GitHub which installation of this App owns access to
// a repository. This avoids treating public repository visibility as proof that
// a caller-supplied installation id is authorized for that repository.
func (a *App) GetRepoInstallation(ctx context.Context, owner, name string) (Installation, error) {
var out Installation
jwt, err := a.AppJWT()
if err != nil {
return out, err
}
status, raw, err := a.do(ctx, "Bearer "+jwt, http.MethodGet,View on GitHub (pinned to 766dce6b13)
Solutions
- Confirm the installation has access to that exact owner/name (404 means no access)
- Correct the owner/name spelling and retry on transient 5xx
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at shared/platform/githubapp/githubapp.go:261 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18).
Data as JSON: /api/errors/a5ba6c36b0b892d5.
Report an issue: GitHub.