Enable make readme target to use atmos docs generate @osterman (#1988)
## what- Switched
make readmefrom a disabled stub to using theatmos docs generate readmecommand - README.md is now regenerated from README.yaml and remote template when running
make readme
why
The atmos docs generate readme command is fully implemented and working. Enabling the makefile target allows developers to regenerate the README.md following the documented workflow (edit README.yaml → run make readme).
references
Implements the intended workflow where make readme generates README.md from data sources and templates, consistent with the modern docs generation infrastructure in Atmos.
Summary by CodeRabbit
-
Documentation
- Expanded README introduction with a fuller description of Atmos and cloud/tooling use cases.
- Moved/added Developer Tools guidance into the development docs (duplicated content present) and removed it from the README.
- Updated copyright year to 2026.
-
Chores
- Readme generation now runs as part of the build process.
✏️ Tip: You can customize this high-level summary in your review settings.
fix: Conditionally set GOFLAGS for git worktrees @osterman (#1986)
## whatAutomatically detect git worktrees and set GOFLAGS="-buildvcs=false" to prevent build failures. In worktrees, the .git directory is in a different location (.git/worktrees/<name>), causing the VCS build metadata to fail unless explicitly disabled.
why
Developers using git worktrees were experiencing build failures or unexpected behavior. This change makes the build process worktree-aware without affecting non-worktree repositories.
references
Related to git worktree development workflow improvements.
Summary by CodeRabbit
Release Notes
- Chores
- Improved build system configuration for enhanced compatibility with development environments.
✏️ Tip: You can customize this high-level summary in your review settings.
feat: Packer directory-based template support and improvements @aknysh (#1982)
## what- Directory-based Packer templates: Atmos now defaults the template to
.(current directory) when not specified, allowing Packer to load all*.pkr.hclfiles from the component directory automatically. This aligns with HashiCorp's recommended multi-file configuration patterns. - Configuration validation: Added
checkPackerConfig()validation to bothExecutePackerandExecutePackerOutputfunctions, ensuring Packer base path is configured before execution. - Cleanup file leak fix: Implemented proper defer pattern for variable file cleanup to prevent file leaks on early errors.
- Abstract and locked component protection: Added checks to prevent
packer buildon abstract (metadata.type: abstract) and locked (metadata.locked: true) components while allowing read-only commands likevalidateandinspect. - Error message consistency: Standardized error message quoting style across Packer files (using single quotes consistently).
- New
ErrMissingPackerBasePatherror: Added dedicated error type for missing Packer configuration. - Comprehensive troubleshooting documentation: Added new troubleshooting guide covering common Packer issues and solutions.
- Improved godoc comments: Added comprehensive documentation to
PackerFlagsstruct and its fields. - Test coverage improvements:
- Added
TestExecutePacker_Fmtfor the fmt command - Added
TestExecutePacker_ComponentMetadatafor abstract/locked component handling - Added
TestCheckPackerConfigfor configuration validation - Added
captureStdouttest helper to reduce code duplication - Added test for missing Packer base path in
ExecutePackerOutput
- Added
why
- Fixes GitHub issue #1937: Users following HashiCorp's best practice of organizing Packer configurations across multiple files (variables.pkr.hcl, main.pkr.hcl, etc.) encountered "Unsupported attribute" errors because Atmos only loaded a single template file.
- Improved reliability: The cleanup fix and configuration validation prevent resource leaks and provide better error messages.
- Consistency with Terraform: The abstract/locked component protection matches the behavior already implemented for Terraform components.
- Better developer experience: The troubleshooting documentation and improved error messages help users resolve issues faster.
references
- Closes #1937
- Blog post: Packer Directory-Based Templates for Multi-File Configurations
- Documentation:
Summary of Changes
New Features
- Directory-based template loading (default to
.when no template specified) - Multi-file Packer component support
Bug Fixes
- Variable file cleanup on early errors (defer pattern)
- Configuration validation before execution
Improvements
- Abstract/locked component protection for
packer build - Standardized error messages
- Comprehensive troubleshooting documentation
- Test coverage expansion
- Code documentation (godoc comments)
Test Plan
- All existing Packer tests pass
- New tests for directory mode, fmt command, metadata handling
- Configuration validation tests
- Linter passes with 0 issues
Summary by CodeRabbit
Release Notes
-
New Features
- Packer now defaults to directory mode, automatically loading all
*.pkr.hclfiles from the component directory without requiring explicit template configuration. - Template parameter is now optional; use
--templateflag orsettings.packer.templateto override.
- Packer now defaults to directory mode, automatically loading all
-
Documentation
- Added comprehensive Packer troubleshooting guide.
- Enhanced documentation with directory mode usage examples and best practices.
- Added blog article explaining directory-based template support.
-
Tests
- Added extensive integration and unit test coverage for Packer commands.
✏️ Tip: You can customize this high-level summary in your review settings.
🚀 Enhancements
Fix double-hyphen (--) parsing in CLI commands @aknysh (#1990)
## what- Fixed issue where args after
--(POSIX end-of-options marker) were incorrectly parsed by Cobra/pflag - The stack flag value was being corrupted when commands included
--followed by terraform flags like-consolidate-warnings=false - Added named constant
endOfOptionsMarkerto replace repeated"--"string literal (linting fix)
why
- Commands like
atmos terraform plan vpc --stack nonprod -- -consolidate-warnings=falsewere failing with corrupted stack values - The stack value would become
olidate-warnings=falseinstead ofnonprodbecause pflag was incorrectly parsing the-consolidate-warnings=falseargument after-- - Per POSIX convention, everything after
--should be passed through to the subprocess without being parsed by the CLI
references
- Closes #1967
Summary by CodeRabbit
-
Bug Fixes
- Corrected command-line parsing so the "--" end-of-options marker properly isolates subsequent flags/args and prevents corruption of preceding values.
-
Tests
- Added comprehensive tests and scenario fixtures covering various "--" usages to verify parsing, precedence, and edge cases; updated CLI error/help snapshots to reflect added workflows.
-
Chores
- Bumped several Go module dependencies to newer patch/minor releases.
✏️ Tip: You can customize this high-level summary in your review settings.
Fix component menu to filter abstract and disabled components @osterman (#1977)
## what- Interactive component selection menu now filters out abstract components (metadata.type: abstract)
- Disabled components (metadata.enabled: false) are hidden from interactive prompts and tab completion
- Stack-scoped filtering: only components in the specified stack appear when --stack is provided
- Added helper functions isComponentDeployable() and filterDeployableComponents() to centralize filtering logic
- Updated PromptForComponent() signature to accept stack parameter for stack-aware filtering
why
Previously, users would see all components from all stacks in the interactive menu, including abstract base components that serve as templates. This was confusing because abstract components cannot be deployed. The fix ensures only deployable, valid components appear in interactive prompts and shell completion, improving user experience and preventing errors.
references
Fixes component selection menu to correctly filter out non-deployable components.
Summary by CodeRabbit
-
New Features
- Interactive component prompts and tab completion now filter by the specified stack and show only deployable components (excludes abstract/disabled)
-
Improvements
- Prompt flow now asks for and validates the stack earlier, enabling stack-scoped component filtering and faster validation when a stack is supplied
-
Documentation
- Added a blog post documenting component selection filtering behavior
-
Tests
- Expanded tests covering deployability filtering, prompting, completions, and related utilities
✏️ Tip: You can customize this high-level summary in your review settings.
refactor: Remove error returns from ui.* functions @osterman (#1980)
## what- Changed ui.Success, ui.Error, ui.Warning, ui.Info, ui.Write, ui.Markdown, and related functions to not return errors
- Eliminated 210+ instances of the "dog sled" pattern (
_ = ui.*) across the codebase - Functions now log write errors internally via log.Debug() instead of returning them
why
Errors from stderr writes are not meaningful for callers to handle. The io/Write API may fail for reasons beyond the caller's control (terminal buffering, redirect failures, etc.), but there's nothing actionable the caller can do. This matches the log.* pattern which already doesn't return errors.
references
Removes unnecessary error handling noise while maintaining the same output behavior.
Summary by CodeRabbit
-
Refactor
- UI messaging made more resilient: status, warnings, and formatted output now log write failures internally instead of propagating errors, ensuring consistent user-facing messages.
-
Chores
- Updated example build image version and underlying formatter/dependency updates.
✏️ Tip: You can customize this high-level summary in your review settings.