feat(terraform): declarative defaults for lock/concurrency CLI flags @osterman (#2992)
## what- Adds a
flags:block that sets defaults for terraform CLI execution flags —lock_timeout,lock,parallelism,refresh,compact_warnings— settable globally inatmos.yaml, at the stack level (root-levelterraform:block), and per component, with field-level merge across all three layers. - Atmos only injects a flag into subcommands that actually support it (e.g.
terraform importgets onlylock/lock_timeout;apply <planfile>never gets-refresh, since Terraform rejects it there;terraform testgets none). - An explicit CLI-typed flag (e.g.
atmos terraform plan vpc -s dev -- -lock-timeout=30s) always wins over any declared default. - Adds
ATMOS_COMPONENTS_TERRAFORM_FLAGS_*env var overrides for the global default, regenerates the atmos.yaml JSON schema, hand-extends the stack-config JSON schema, and documents the new block on the Terraform configuration page plusplan/apply/destroy/refresh/importcommand docs. - Includes a changelog post and roadmap entry.
why
- Terraform/OpenTofu's own
-lock-timeoutdefault is0s(fail immediately on state-lock contention), which caused avoidable failures whenever concurrent pipelines touched the same component's state around the same time. There was previously no declarative way to set a longer retry window — only a raw CLI pass-through flag that had to be retyped on every single invocation. - Declaring a default once (fleet-wide, per stack, or per component) removes that repeated manual step and the class of flaky-looking pipeline failures it caused.
references
Summary by CodeRabbit
-
New Features
- Added declarative Terraform/OpenTofu CLI flag defaults for locking, timeouts, parallelism, refresh, and compact warnings.
- Configure flags globally, per stack, or per component with layered precedence.
- Added environment-variable support for Terraform flag overrides.
- Explicit command-line flags take precedence over configured defaults.
-
Bug Fixes
- Invalid or misspelled Terraform flag names and values now produce clear errors.
- Flag settings are preserved and merged across inheritance and overrides.
-
Documentation
- Added configuration guidance, environment-variable references, examples, and command-specific support details.
feat(ci): startup banner for CI/Pro status and legacy-action detection @osterman (#3004)
## what- Print a short status banner at startup whenever Atmos detects it's running inside a CI provider: the Atmos version/platform, whether Native CI mode (
ci.enabled) is on or off, and whether Atmos Pro is configured. - Detect legacy
cloudposse/github-action-atmos-*marketplace actions (viaGITHUB_ACTION_REPOSITORY) and emit a warning nudging migration to Native CI. - New
pkg/ci/startuppackage holds the decision logic (kept out ofcmd//internal/execper repo convention);pkg/ci/providers/githubgained the legacy-action env-var check.
why
- Misconfiguration (forgetting
ci.enabled: true, or running without a Pro workspace configured) was previously silent until something failed downstream — this surfaces it immediately in CI logs. - Users still on the older marketplace actions have no signal that Native CI exists or that they should migrate.
references
- N/A
Summary by CodeRabbit
-
New Features
- Added automatic CI startup status messages showing the current Atmos version.
- Displays whether Native CI and Atmos Pro capabilities are enabled.
- Warns when running through a legacy GitHub Action integration and recommends migrating to Native CI.
- Startup information appears automatically for applicable CI commands.
- Status output remains hidden for help, completion, and non-CI commands.
-
Documentation
- Added documentation describing the CI startup status banner and migration guidance.