Hummingbird

Canonical source: docs/decisions/0005-ci-gated-production-deployment.md · source commit b0f6b3525ff5 · SHA-256 6ca5762577b86e0c94fe1d6831e702cc9e881b2c90f3e8e1b597174cd835fedc · build 20a3648695ffView raw MarkdownAll decisions

0005 — CI-Gated Production Deployment

Context

Hummingbird deploys to a single production domain (datum.quest, see ADR 0001). A failed test or build reaching production would be visible to the public immediately, with no staging environment to catch it first.

Decision

Production deployment occurs only from the protected/default branch (main), only after GitHub Actions CI (lint, test, build, dependency/security validation) passes. GitHub Actions invokes project scripts (scripts/build, scripts/deploy, etc.) rather than embedding the deployment system directly in workflow YAML. Deployment credentials (a scoped Cloudflare API Token) are limited to the permissions required to deploy Hummingbird and are never committed to the repository.

Rationale

Without a staging environment, CI is the only gate protecting the public site from broken changes. Keeping deployment logic in versioned scripts rather than YAML keeps it testable locally and reduces vendor lock-in to a specific CI provider's syntax.

Alternatives considered

Consequences