Data Model¶
All collections are defined via Go migrations in pb_migrations/ — always add a new numbered migration file, never edit an existing one.
| Collection | Key Fields |
|---|---|
repositories |
name, git_url, branch, status, last_commit_sha, platform, sops_age_key* (auto-generated), sops_age_public_key |
repository_keys |
repository, auth_type (none/ssh_key/basic), ssh_private_key, git_password |
stacks |
name, repository, compose_path, auto_sync, status, worker, current_version, render_overrides (JSON, per-service image/ports/networks not committed to git) |
stack_env_vars |
stack, key, value*, secret, secret_provider (internal/vault/infisical) |
global_env_vars |
key, value*, secret, secret_provider — reusable across stacks/jobs via binding tables |
job_env_vars |
job, key, value*, secret, secret_provider |
stack_global_env_vars / job_global_env_vars |
Binding tables linking global_env_vars rows to stacks/jobs |
stack_services |
stack, service_name, container_name, status |
stack_revisions |
stack, version — numbered snapshots of rendered compose YAML |
stack_pending_reconciles |
stack, trigger, commit_sha — queue for offline worker reconnect |
sync_logs |
stack, trigger, status, output, duration_ms |
workers |
hostname, fingerprint, status (ACTIVE/REVOKED), health_history |
scheduled_jobs |
repository, job_file, enabled, status |
job_runs |
job, worker, status, output, expires_at (30-day TTL) |
integrations |
slug, enabled, config (JSON) — also stores Vault/Infisical backend config (address/token, site_url/client_id/client_secret, etc.) |
(* = AES-GCM encrypted at rest via SECRET_KEY)