github cloudposse/atmos v1.202.0-rc.1

latest releases: v1.202.0-rc.3, v1.202.0-rc.2
pre-release2 days ago
fix: Improve HCL syntax error messages and prevent masking @osterman (#1866) ## what
  • Fixed misleading "component not found" errors when Terraform components have invalid HCL syntax
  • Improved error messages to show the actual HCL parsing error, file path, line number, and actionable hints
  • Prevented detectComponentType() from masking HCL errors by trying other component types

why

When a Terraform component contained invalid HCL syntax, Atmos incorrectly reported "Could not find the component" instead of showing the actual HCL parsing error. This was confusing because the component existed in the stack manifest and appeared in the TUI menu. The root cause was that detectComponentType() tried Helmfile/Packer as fallbacks when Terraform processing failed, ultimately masking the real error with a generic "not found" message.

references

Closes #1864

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Improved Terraform HCL syntax error messages with file/line context, diagnostic details, and actionable validation hints.
  • Bug Fixes

    • Better error propagation: stop trying other component types when a non-invalid-component error occurs, ensuring accurate error reporting.
  • Tests

    • Added tests and fixtures to validate HCL syntax error detection, messaging, and formatted output.
  • Documentation

    • Blog post describing the improved HCL syntax error messaging and troubleshooting steps.
  • Chores

    • Renamed a public error identifier for clearer semantics.

✏️ Tip: You can customize this high-level summary in your review settings.

feat: Add automatic backend provisioning @osterman (#1808) ## Summary - Implement automatic Terraform backend provisioning system to eliminate manual bootstrapping - Add self-registering provisioner architecture with hook-based integration - Provide S3 backend implementation with opinionated security defaults (versioning, AES-256 encryption, public access blocking) - Support cross-account provisioning via AuthManager integration - Enable CLI command for manual provisioning: `atmos provision backend`

Details

  • Provisioner System: Extensible self-registering architecture that allows provisioners to declare when they should run via hook events
  • S3 Backend: Hardcoded secure defaults (no configuration options), perfect for dev/test workflows
  • Hook Integration: Automatic provisioning before terraform init when enabled
  • Production Migration: Clear path to move from automatic provisioning to Terraform-managed via import blocks
  • Documentation: 3 PRDs, CLI reference, configuration guide, and blog announcement

Test Plan

  • Verify provisioner system loads and registers correctly
  • Test S3 backend provisioning creates bucket with all security defaults
  • Verify idempotent operations (running provision multiple times is safe)
  • Test CLI command: atmos provision backend <component> --stack <stack>
  • Verify automatic provisioning runs before terraform init
  • Test error handling and exit codes
  • Validate documentation builds successfully

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

Summary by CodeRabbit

  • New Features

    • New "terraform backend" CLI with create/list/describe/update/delete and automatic backend provisioning (secure-by-default S3, cross-account support) plus a pre-Terraform-init hook to run provisioners.
  • Documentation

    • Multiple PRDs, website guides, and a blog post covering provisioning architecture, configs, examples, CLI usage, and migration guidance.
  • Bug Fixes

    • Help output printing now safely handles empty descriptions.
  • Tests

    • Extensive tests for provisioning flows, S3 create/delete, CLI commands, registry/hook execution, and deletion workflows.

✏️ Tip: You can customize this high-level summary in your review settings.

docs: Fix store configuration format in documentation @osterman (#1862) ## what
  • Updated store configuration examples to match actual implementation
  • Changed all backend/config keys to type/options
  • Fixed Azure Key Vault to use vault_url instead of vault_name
  • Removed unsupported AWS Secrets Manager section
  • Updated Redis configuration to use URL format
  • Added complete Artifactory section with all options

why

GitHub issue #1860 reported that the documentation showed an incorrect format for store configuration. The code expects type/options keys, not backend/config keys. This created confusion for users following the documentation.

references

Closes #1860

Summary by CodeRabbit

  • Documentation
    • Simplified store configuration schema for all backends (AWS SSM Parameter Store, Azure Key Vault, Google Secret Manager, Redis, Artifactory) using a unified type and options format.
    • Added support for additional optional configuration parameters including prefixes, delimiters, and credentials.
    • Enhanced configuration examples and clarified authentication methods across all store types.

✏️ Tip: You can customize this high-level summary in your review settings.

fix: Associate devcontainer blog posts with v1.201.0 release @osterman (#1863) ## what
  • Add release: v1.201.0 to the frontmatter of the devcontainer blog posts

why

These blog posts were released in v1.201.0, but subsequent corrections to them (fixing dates/tags in #1856) are currently unreleased. Without the release: field, these corrections cause the posts to appear in the "Unreleased" section of the changelog. By explicitly setting release: v1.201.0, we retroactively associate them with their original release, so the corrections don't show up as unreleased changes.

references

  • Devcontainer feature was released in v1.201.0
  • Date/tag corrections made in #1856

Summary by CodeRabbit

  • Documentation
    • Updated metadata on blog posts related to development container support.

✏️ Tip: You can customize this high-level summary in your review settings.

docs: Enhance YAML reference with null syntax and type tags @osterman (#1861) ## what
  • Added comprehensive section on YAML explicit type tags (!!str, !!int, !!float, !!bool) as an alternative to quoting
  • Expanded null values documentation with detailed explanation of ~ tilde shorthand
  • Added prominent warning explaining the semantic difference between null and "" empty string
  • Updated quick reference table to include null and type tag entries
  • Added practical use case for overriding inherited values to null

why

The YAML reference guide was missing documentation for explicit type tags and didn't sufficiently emphasize the difference between null and empty string, which is important in Terraform configuration where they have different behaviors.

references

Related to YAML syntax documentation completeness

Summary by CodeRabbit

  • Documentation
    • Added guidance on YAML explicit type tags (!!str, !!int, !!float, !!bool) with examples and best practices for when to use them versus quoting
    • Expanded null values section with comprehensive guidance distinguishing null, tilde (~), and empty strings, including Terraform-specific implications
    • Enhanced Quick Reference table with entries for null handling and explicit typing

✏️ Tip: You can customize this high-level summary in your review settings.

feat: Make workflow --file flag optional with auto-discovery @osterman (#1800) ## what
  • Make workflow --file flag optional with auto-discovery and interactive selection
  • Centralize workflow error formatting to main.go (eliminates "deep error printing" pattern)
  • Refactor workflow command to cmd/workflow/ package structure following command registry pattern
  • Add descriptive "Workflow Error" title to workflow-specific errors (not generic "Error")
  • Use static error definitions (ErrNoWorkflowFilesToSelect, ErrNonTTYWorkflowSelection) instead of dynamic errors
  • Improve command hints with markdown code fences and shell-safe single quotes
  • Convert if-else chains to switch statements for better code style
  • Regenerate workflow test snapshots to match new error output format

why

  • Auto-discovery: When no workflow file is specified, automatically search across all workflow configuration files and prompt user to select if multiple matches found - makes workflows easier to use
  • Centralized error handling: Follows the same architectural principle as eliminating "deep exits" (os.Exit calls) - now eliminating "deep error printing" (CheckErrorAndPrint calls throughout codebase)
  • Better UX: Descriptive error titles ("Workflow Error" vs "Error"), properly formatted command hints, shell-safe quoting for values with spaces
  • Code quality: Static errors for better error handling, cleaner code structure with switch statements

references

  • Follows architectural pattern from "avoiding deep exits" - centralizing error handling in main.go
  • Part of workflow command improvements to make Atmos workflows more user-friendly

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

Summary by CodeRabbit

  • New Features

    • Workflow file auto-discovery: Run workflows without specifying --file when the name is unique across files
    • Interactive workflow selection when multiple files contain the same workflow name
    • Enhanced shell completion for workflow flags (stack, identity) and workflow names
  • Documentation

    • Added workflow file auto-discovery documentation with usage examples and guidance
  • Improvements

    • Refined error messages with actionable hints and improved formatting for better user guidance

✏️ Tip: You can customize this high-level summary in your review settings.

🚀 Enhancements

Display CLI config aliases in separate ALIASES help section @osterman (#1867) ## what
  • CLI aliases defined in atmos.yaml now appear in a dedicated "ALIASES" section in --help output
  • Separates user-defined command shortcuts from regular commands for improved help clarity
  • Maintains distinction between built-in command aliases and CLI config aliases

why

Users reported that aliases added via CLI config (atmos.yaml) appeared mixed with regular commands in the "AVAILABLE COMMANDS" section, making help output less clear. Creating a dedicated "ALIASES" section improves UX by clearly distinguishing shortcuts from actual commands.

implementation

  • Mark config aliases with "configAlias" annotation in processCommandAliases()
  • Add isConfigAlias() helper to identify config alias commands
  • Filter config aliases from printAvailableCommands() and calculateMaxCommandWidth()
  • Add printConfigAliases() function to render aliases in dedicated section
  • Comprehensive unit tests for new functionality

Summary by CodeRabbit

  • New Features

    • Help output now shows configuration aliases in a dedicated "ALIASES" section for clearer discovery.
    • Alias commands are marked as config aliases and run as direct subprocesses, preserving their original exit status.
    • Help snapshots now include a telemetry notice banner with opt-out info.
  • Bug Fixes

    • Improved alias execution to reliably surface underlying command exit codes.
  • Tests

    • Added tests and updated snapshots to validate alias handling and help rendering.

✏️ Tip: You can customize this high-level summary in your review settings.

Don't miss a new atmos release

NewReleases is sending notifications on new releases.