JuliusBrussee/caveman · error
githubapp: app id is required
Error message
githubapp: app id is required
What it means
Configuration validation in githubapp.New(): cfg.AppID is empty after trimming. The App cannot authenticate to GitHub without its numeric App id, and New intentionally fails closed rather than returning a half-built App.
Source
Thrown at shared/platform/githubapp/githubapp.go:69
}
// App holds the parsed App identity and the SSRF-guarded HTTP client.
type App struct {
appID string
slug string
privateKey *rsa.PrivateKey
webhookSecret string
baseURL string
httpClient *http.Client
}
// New parses the private key, validates the base URL, and builds the App. It
// returns an error (not a half-built App) on any misconfiguration, so callers
// fail closed — an unconfigured deployment leaves the App nil and the connect
// endpoints answer a clean "disabled" rather than a fabricated success.
func New(cfg Config) (*App, error) {
if strings.TrimSpace(cfg.AppID) == "" {
return nil, fmt.Errorf("githubapp: app id is required")
}
if len(cfg.PrivateKeyPEM) == 0 {
return nil, fmt.Errorf("githubapp: private key PEM is required")
}
key, err := parseRSAPrivateKey(cfg.PrivateKeyPEM)
if err != nil {
return nil, err
}
base := strings.TrimRight(strings.TrimSpace(cfg.BaseURL), "/")
if base == "" {
base = defaultBaseURL
}
client := cfg.HTTPClient
if client == nil {
// Production path: SSRF-guarded client + pre-flight host check on a custom
// (GHE) base. When a caller injects a client (tests), it owns the host policy,
// so we skip the pre-flight — but production never injects one.
if base != defaultBaseURL {View on GitHub (pinned to 766dce6b13)
Solutions
- Provide the GitHub App id in the Config (from deployment config/secrets)
- Check that the config loader populated the field and that env var/config key names match
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at shared/platform/githubapp/githubapp.go:69 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/98c7cbca47ea444a.
Report an issue: GitHub.