Documentation
¶
Overview ¶
Package config loads and validates the HCL policy file (.tfstackplan.hcl), resolving classification presets+rules into a single ordered rule list while preserving source declaration order.
Index ¶
- Constants
- func Discover(dir string) (string, bool)
- type APIAuthConfig
- type APIAuthPrincipal
- type ApprovalConfig
- type CacheConfig
- type ClassBinding
- type Classification
- type Config
- type DiffConfig
- type DiffOverride
- type ExecutorConfig
- type GitHubAppConfig
- type GroupConfig
- type HeaderLink
- type LinksConfig
- type ObjectsConfig
- type PhaseWeight
- type ProgressConfig
- type PubSubConfig
- type ServeConfig
- type ServerConfig
- type UIConfig
- type UIOAuthConfig
- type UITierConfig
Constants ¶
const ( ScopeReport = "report" // CI runner: execution lifecycle events, logs, gates, claims ScopeRead = "read" // read-only: execution state/events, claims listing ScopeAdmin = "admin" // operator surgery: claim release (and future admin verbs) )
API scopes grantable to an api_auth principal. Each /api/* route on the server accepts a subset of these (any-of). Validated at config load so a typo'd scope fails at startup, not as runtime 403s.
const DefaultFilename = ".tfstackplan.hcl"
DefaultFilename is auto-discovered in the working directory.
Variables ¶
This section is empty.
Functions ¶
func Discover ¶
Discover returns the path to the nearest DefaultFilename at or above dir, searching up to (and including) the repo root. The repo root is the first ancestor containing a `.git` entry; the search never ascends past it, so a stray config above the repo is not picked up. Without a `.git` ancestor the search runs to the filesystem root.
Walking up is what lets a command run from a subdir (e.g. `run apply --dir stacks/<tier>`) auto-discover a repo-root `.tfstackplan.hcl` without an explicit `--config`.
Types ¶
type APIAuthConfig ¶ added in v0.21.0
type APIAuthConfig struct {
Audience string // expected OIDC audience (default: public_base_url)
ExtraAudiences []string // additional accepted audiences (e.g. the gcloud ADC client id, for user tokens)
Principals []APIAuthPrincipal
}
APIAuthConfig configures Google OIDC bearer auth for /api/*: which token audiences are accepted and the identity → scope allowlist. It is the only /api/* auth — the legacy shared-secret HS256 path was removed once every caller migrated to OIDC.
type APIAuthPrincipal ¶ added in v0.21.0
APIAuthPrincipal maps one verified caller identity (an email — service account or user) to the API scopes it holds.
type ApprovalConfig ¶ added in v0.6.0
type ApprovalConfig struct {
Backend string // the block label, e.g. "gcp-pam"
Location string
Duration string
RequesterPool []string
}
ApprovalConfig is the `approval "<backend>" {}` sub-block. Entitlement ids per class come from the top-level `class` blocks, not here.
type CacheConfig ¶ added in v0.18.0
CacheConfig holds the resolved caching fallback settings.
type ClassBinding ¶ added in v0.6.0
type ClassBinding struct {
Name string
Backend string
Entitlement string
EntitlementScope string
Required bool
}
ClassBinding is a `class "<name>" {}` block: binds a classification class to an approval backend + entitlement, and whether it gates (required).
type Classification ¶
Classification holds the resolved, ordered rules and the fallback class.
type Config ¶
type Config struct {
Classification *Classification // nil when no classification block present
Diff DiffConfig
Links *LinksConfig // nil when no links block present
Server *ServerConfig // nil when no server block
Serve *ServeConfig // nil when no serve block (added in a later task)
UI *UIConfig // nil when no ui block (the central UI face)
Classes []ClassBinding // class "<name>" {} bindings
Progress *ProgressConfig // nil when no progress block (falls back to built-in fracs)
Cache *CacheConfig // nil when no cache block present
}
Config is the parsed policy file.
type DiffConfig ¶
type DiffConfig struct {
Detect bool
MaxAttributeLines int // 0 = no cap
Overrides []DiffOverride
}
DiffConfig holds diff defaults and per-attribute overrides.
func (DiffConfig) Resolve ¶
func (d DiffConfig) Resolve(resourceType, attr string) string
Resolve returns the differ kind ("" = auto) for a resource type + attribute.
type DiffOverride ¶
DiffOverride forces a differ for a (resource type, attribute) pair.
type ExecutorConfig ¶ added in v0.22.0
type ExecutorConfig struct {
Backend string // the block label, e.g. "cloudbuild"
Project string
Region string
Triggers map[string]string // run kind ("plan"/"apply") → trigger name
}
ExecutorConfig is the `executor "<backend>" {}` sub-block: the CI backend serve drives when it triggers runs itself (webhook → build). Only "cloudbuild" is implemented; the trigger definitions stay terraform-managed, serve runs them by name.
type GitHubAppConfig ¶ added in v0.6.0
GitHubAppConfig is the `github_app {}` sub-block.
type GroupConfig ¶ added in v0.6.0
GroupConfig configures the live-DAG grouping. Depth groups by the first Depth path segments (default 2 when the block is absent); Pattern (a regexp) overrides it — the first capture group (or whole match) of the stack path is the group key.
type HeaderLink ¶ added in v0.3.0
HeaderLink is one templated report-header link.
type LinksConfig ¶ added in v0.3.0
type LinksConfig struct {
Resource string
Stack string
Header []HeaderLink
}
LinksConfig holds URL templates for header / stack / resource links.
type ObjectsConfig ¶ added in v0.6.0
ObjectsConfig configures the log-offload object store (currently GCS).
type PhaseWeight ¶ added in v0.16.0
PhaseWeight is one phase's slice of the bar. Weight defaults per phase (see defaultPhaseWeight) when omitted; relative within an operation's set.
type ProgressConfig ¶ added in v0.16.0
type ProgressConfig struct {
Plan []PhaseWeight
Apply []PhaseWeight
}
ProgressConfig declares, per operation, the ordered weighted lifecycle phases the run will emit. Serve uses it to render a single full-progress bar across exactly those phases (ticking phases sub-fill their band by completed/total). Absent => serve falls back to its built-in fractions.
func (*ProgressConfig) For ¶ added in v0.16.0
func (pc *ProgressConfig) For(kind string) []PhaseWeight
For returns the ordered weighted phases for kind ("plan"/"apply"), or nil.
type PubSubConfig ¶ added in v0.6.0
type PubSubConfig struct {
Audience string // expected OIDC audience (default: <public_base_url>/pubsub/push)
ServiceAccount string // the push subscription's OIDC service-account email
}
PubSubConfig configures the Pub/Sub push ingestion endpoint.
type ServeConfig ¶ added in v0.6.0
type ServeConfig struct {
DBPath string
PublicBaseURL string
GitHubWebhookSecretEnv string // env var name holding the GitHub webhook HMAC secret
// UIBaseURL is the central UI service's external base URL. Check-run
// details and approval links point there ("" leaves them unset — the
// check-run body still carries everything). The UI's tier names must
// match the serve environments for its /t/<tier>/e/<id> routes.
UIBaseURL string
GitHubApp *GitHubAppConfig
Approval *ApprovalConfig
Group *GroupConfig
LogsDir string
Objects *ObjectsConfig
PubSub *PubSubConfig
APIAuth *APIAuthConfig
Executor *ExecutorConfig
}
ServeConfig is the `serve {}` block: the control-plane server runtime config.
type ServerConfig ¶ added in v0.6.0
ServerConfig is the `server {}` block: where the control-plane server lives and which environment this repo's CI reports to. Used by `run` (CI) and `serve`.
type UIConfig ¶ added in v0.25.0
type UIConfig struct {
PublicBaseURL string // external base URL (OAuth redirect URI = <base>/auth/callback)
SessionSecretEnv string // env var name holding the session-cookie encryption secret
// GitHubWebhookSecretEnv names the env var holding the GitHub App's
// webhook secret. The UI is the App's single webhook ingress: it verifies
// GitHub's HMAC here and relays deliveries to the tiers under its own
// Google OIDC identity — the App secret exists nowhere else.
GitHubWebhookSecretEnv string
Tiers []UITierConfig
OAuth *UIOAuthConfig
}
UIConfig is the top-level `ui {}` block: the central UI service — a stateless aggregator over the tier serves with its own Google login.
type UIOAuthConfig ¶ added in v0.25.0
type UIOAuthConfig struct {
ClientID string
ClientSecretEnv string
AllowedDomain string // required Workspace domain (the id_token `hd` claim)
// QuotaProject is sent as x-goog-user-project on user-token GCP API calls
// (PAM approve/deny): user credentials attribute quota to the OAuth
// client's project, which must have the called API enabled. Empty sends
// no header.
QuotaProject string
}
UIOAuthConfig is the `oauth {}` sub-block: the Google OAuth client the UI logs users in with (authorization-code flow, Workspace-internal client). The client secret rides an env var (name here, value in the deployment's secret store) like every other secret in this config.
type UITierConfig ¶ added in v0.25.0
UITierConfig is one `tier "<name>" {}` block: a tier serve the central UI aggregates. The UI backend authenticates to it with Google OIDC ID tokens minted for Audience (default: the tier URL — the audience the tier's api_auth block accepts by convention).