v1.223.1-rc.2
Pre-release
Pre-release
feat(container): Buildx cache and driver config for build steps Erik Osterman (Cloud Posse) (@osterman) (#2771)
## what- Add
driverandcachefields to the nativetype: containerbuild step (action: build) driverselects/creates the Buildx builder instance (docker buildx create), supports a bare-string shorthand (driver: docker-container) or a full form withname,provider, and driver-specificopts(e.g. a mirrored BuildKit image)cache(from/to) imports/exports Buildx remote build cache on the plain (non-bake) build path, passed through as--cache-from/--cache-to- Builder creation is idempotent (a stable default name of
atmos, reused so create-if-missing and the builder's own cache persist across runs) and never mutates the ambient default builder — Atmos always selects it explicitly with--builder - Podman rejects
driverthe same way it already rejectsbake/buildx-only config - Adds the required blog post and roadmap milestone, and documents
driver/cacheplus three ways to avoid Docker Hub rate limits in thecontainerstep docs
why
- The native container build step had no equivalent to
docker/setup-buildx-action'sdriver-optsordocker/build-push-action'scache-from/cache-to, blocking migration of existing GitHub Actions Docker builds onto nativetype: containersteps - Remote cache import/export needs a Buildx builder capable of exporting cache (the
docker-containerdriver), and pointing that builder at a mirrored BuildKit image is the cleanest way to avoid Docker Hub rate limits without changing Dockerfiles or host-level daemon config
references
- Related docs:
/workflows/steps/type/container#driver,/workflows/steps/type/container#cache
Summary by CodeRabbit
-
New Features
- Added Buildx builder configuration (including named builder selection/creation) via
with.driver, supporting both shorthand and detailed driver options. - Added Buildx build cache import/export via
with.cachewithcache.fromandcache.to.
- Added Buildx builder configuration (including named builder selection/creation) via
-
Bug Fixes
- Podman runtime now fails earlier when a Docker Buildx driver is provided, with a clearer unsupported-driver error.
-
Documentation
- Updated container build step docs with
with.driver/with.cacheexamples and Docker Hub pull-rate mitigation guidance. - Added a blog post explaining Buildx cache and driver usage.
- Updated container build step docs with
docs: deprecate legacy component dependency guidance Erik Osterman (Cloud Posse) (@osterman) (#2773)
## what- Replace active
settings.depends_onexamples with canonicaldependencies.componentssyntax across docs, blogs, and public AI examples. - Move the Spacelift guide into Deprecated, add a native-CI warning, and redirect the former integration URL.
- Reduce the legacy
depends_onpage to migration guidance and remove active Spacelift promotion.
why
- Prevent new configurations from adopting deprecated dependency syntax or treating the legacy Spacelift integration as a recommended path.
references
Summary by CodeRabbit
-
Documentation
- Updated CLI, migration, and stack/dependency docs to use the
dependencies.componentsformat across examples, including component, stack, type, and file/folder dependency listings. - Replaced/condensed the legacy
settings.depends_ondocumentation with a dedicated migration guide and clarified common error handling. - Refreshed
!appendYAML documentation to append underdependencies.components.
- Updated CLI, migration, and stack/dependency docs to use the
-
Examples / Website
- Updated example stack manifests to declare inter-component dependencies via
dependencies.components. - Added a deprecated Spacelift reference and a documentation redirect to the deprecated page.
- Updated example stack manifests to declare inter-component dependencies via
Improve emulator workflows, Terraform execution, and CI reliability Erik Osterman (Cloud Posse) (@osterman) (#2755)
## Summary- Make emulator discovery and execution component-aware: scope inventory to configured stack components, restore interactive stack selection, add runtime filtering, and consistently resolve emulator identities, endpoints, and provider settings.
- Add Terraform component mocks across schema, execution, scheduler, and examples; improve component/stack provenance, affected discovery, graph state handling, workspace paths, and Terraform diagnostics.
- Improve secret initialization, container/composition/devcontainer/Helm workflow behavior, and the related CLI help, docs, snapshots, and screengrabs.
- Strengthen cross-platform testing and CI: preserve toolchain paths, make cache locking and cached executables Windows-safe, sanitize runner-specific snapshots, retry transient vendoring and bootstrap downloads, and keep all build artifacts produced through
atmos build. - Refresh examples, PRDs, skills, schemas, website documentation, and generated casts; also update the website websocket dependency for the reported security advisories.
CI reliability fixes
- Vendoring retries transient Git clone failures with bounded exponential backoff.
- The Atmos bootstrap download is retried while the build action continues to invoke
atmos build binaryfor the tested artifact. - Validation Markdown fixtures follow the repository EditorConfig indentation policy.
- Windows cache-test fixtures create
.exebinaries where the toolchain does, preventing a platform-only acceptance failure.
Validation
go test ./tests -run '^TestCachedTestTool(BinaryNameForOS|BinaryPath|BinaryExists)$' -count=1GOOS=windows GOARCH=amd64 go test -c -o build/precondition_cached_tools_windows.test.exe ./tests./build/atmos validate --affected --exclude 'tests/fixtures/**' --exclude '**/*.go' --format rich./build/atmos build binary --target=macos --version=test./build/atmos build version --target=macos
Generate atmos.yaml JSON Schema from code; add `atmos config schema` Erik Osterman (Cloud Posse) (@osterman) (#2761)
## what- Add a complete JSON Schema for
atmos.yamlthat is generated from the Go configuration structs (pkg/config/schema,go generate) — Go doc comments become schema descriptions, runtime-only fields are excluded, and YAML function (!include,!env, …), null, and scalar-string-list alternatives are injected so real configs validate. - Guard the schema so it can never go stale: a drift test regenerates in-process and byte-compares against the committed artifact; ratchet tests force classification of every new
AtmosConfigurationfield and every new YAML function constant; a corpus test validates allexamples/**anddemo/**configs plus this repository's ownatmos.yamland.atmos.d(which surfaced and fixed real gaps: map-formenv, booleanpager, function-valued polymorphic fields). - Add
atmos config schema [output-path], mirroringatmos stack schema, printing the embedded schema served atatmos://schema/atmos/config/1.0. - Seed a built-in
configentry in theschemasregistry soatmos validate schemavalidatesatmos.yaml,atmos.d/**, and project-local profiles out of the box (overridable viaschemas.config), addatmos config validateas a shorthand alias foratmos validate schema config, and stop the command from bailing out when no stacks directory exists — schema validation now works in config-only repositories. - Add
atmos stack validateas the symmetric alias foratmos validate stacks, and makepkg/filematchresolve literal (non-glob) patterns with a direct stat instead of walking the entire tree —atmos validate schemain this repository drops from ~6s to ~0.6s, so per-file results stream immediately. - Wire the schema into the AI/MCP server (new read-only
atmos_validate_schematool alongsideatmos_validate_stacks) and the experimental LSP server (line-positioned schema diagnostics foratmos.yamldocuments and fragments, with anyOf cascade noise filtered to the most specific violation);pkg/validatorgainsValidateYAMLContentfor unsaved editor buffers. - Publish floating (
.../atmos-config/1.0/...) and per-release pinned schema copies from the website workflows, and add command docs, a schemas reference section, MCP/LSP doc updates, a changelog post, and a roadmap milestone.
why
atmos.yamlhas grown a larger configuration surface than stack manifests but had no schema at all: typos and mistyped sections were silently ignored by the loader, and editors offered no completion or validation.- A hand-written schema (like the stack-manifest one) would rot as options ship; generating it from the exact structs Atmos decodes into makes drift impossible, with CI enforcing regeneration.
- Fixes a latent misdefault where
atmos validate schema atmosmatchedatmos.yaml/atmos.ymlbut validated them against the stack-manifest schema, and a gap whereatmos validate schemasilently skipped all validation in repositories without a stacks directory. - Editor integration works with one
yaml-language-servermodeline (or natively viaatmos lsp start), and pinned per-release URLs let teams upgrade the binary without silently absorbing schema changes — the same model the manifest schema adopted in #2749.
references
- closes #2351 — the request for a first-class
atmos.yamlJSON Schema - closes #2731 — supersedes the hand-written schema in that PR (thanks rennokki (@rennokki)!); generating the schema from the config structs means it can never drift from what the CLI actually accepts
- Builds on #2749 (consolidated atmos-manifest schema + per-release pins) and its floating/pinned publishing model
- Changelog:
website/blog/2026-07-16-atmos-yaml-schema.mdx; docs:/cli/commands/config/config-schema,/cli/configuration/schemas,/ai/mcp-server,/cli/commands/lsp/start
Summary by CodeRabbit
- New Features
- Added
atmos config schemato print or write the generatedatmos.yamlJSON Schema. - Added
atmos config validateandatmos stack validate, plus built-in schema validation foratmos.yaml/atmos.d//local profile fragments viaschemas.configoverride/disable. - Added
atmos_validate_schematool and LSP config-schema diagnostics with accurate line/column reporting. - Added native
atmos validate ci/atmos ci validateworkflow validation (including SARIF/annotations when enabled).
- Added
- Documentation
- Updated CLI, configuration, and blog docs for the new schema/validation commands, tooling, and editor integration.
- Chores
- Prod/preview deploys now generate schema artifacts and publish/pin versioned snapshots; schema drift is enforced by tests.
feat: implement atmos init and atmos scaffold commands Erik Osterman (Cloud Posse) (@osterman) (#1687)
## what - Implement `atmos init` command for bootstrapping new Atmos projects from built-in templates - Implement `atmos scaffold` command with three subcommands: - `atmos scaffold generate` - Generate code from scaffold templates - `atmos scaffold list` - List available scaffold templates from atmos.yaml - `atmos scaffold validate` - Validate scaffold.yaml configuration files - Refactor code organization to eliminate thin wrappers and improve maintainability: - Rename `pkg/init/` → `pkg/generator/` for clearer, more generic naming - Move `pkg/init/config/` → `pkg/project/config/` for project-level operations - Consolidate template processing into `pkg/generator/engine/` - Move business logic from `internal/exec/` directly into `cmd/` packages - Add comprehensive documentation (PRD, blog post, CLI reference) - Add test coverage for new packages (76.9% for templates, 91.7% for filesystem, 95.7% for merge)why
- User Experience: Users can now initialize Atmos projects in seconds instead of manually creating configuration files
- Developer Experience: Scaffolding accelerates development by generating boilerplate code from templates
- Code Quality: Refactoring eliminates confusing package names (
pkg/initvsinitcommand) and removes unnecessary indirection - Maintainability: Moving logic into
cmd/packages reduces layers and makes the codebase easier to navigate - Extensibility: Template-based approach allows users to create custom templates for their organization
references
- Related to initial POC work in
experiments/initbranch - Uses command registry pattern from #1643
- Follows established patterns from
atmos terraformandatmos describecommands
Summary by CodeRabbit
New Features
- Added
atmos initcommand to initialize Atmos projects from templates with interactive and non-interactive modes - Added
atmos scaffoldcommand suite withgenerate,list, andvalidatesubcommands for creating code and configuration from templates - Template support includes variable substitution, dry-run previews, and intelligent file merging for updates
Documentation
- Added comprehensive usage guides, examples, and Product Requirements Documents for template and scaffolding features
🚀 Enhancements
fix(toolchain): fail incomplete parallel installs Erik Osterman (Cloud Posse) (@osterman) (#2769)
## what- Treat missing terminal results in parallel toolchain installs as failures.
- Add regression coverage for a prematurely closed event channel.
why
- Prevents incomplete parallel installs from reporting a successful command.
references
- Closes #2767
Summary by CodeRabbit
- Bug Fixes
- Improved batch tool installation reporting when one or more installations do not return a final result.
- Failed installations are now counted accurately, and the reported error includes the number of failures.
- Tests
- Added coverage for incomplete batch installation results.
feat(cast): auto-install animated renderers Erik Osterman (Cloud Posse) (@osterman) (#2763)
## what- Auto-install pinned agg and FFmpeg renderers for animated cast outputs
- Resolve managed binaries to absolute paths while keeping static formats native
- Add renderer coverage and document automatic installation and MP4 palette constraints
why
- Remove the manual renderer setup requirement for GIF and MP4 cast rendering
references
- N/A
Summary by CodeRabbit
- New Features
- Animated GIF and MP4 rendering now automatically manages and installs the needed tools on first use.
- Bug Fixes
- Rendering now reports clearer failures and prevents overwriting existing animated outputs.
- Cached tool discovery on Windows is fixed (improves test/tooling reliability).
- Terminal-width fallback is more consistent in non-interactive environments by honoring
COLUMNS.
- Documentation
- Updated cast rendering and workflow docs to reflect managed installation and MP4-from-GIF behavior.