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

  1. Confirm the installation has access to that exact owner/name (404 means no access)
  2. 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.