diff --git a/tests/fixtures/scenarios/empty-dir/.gitignore b/tests/fixtures/scenarios/empty-dir/.gitignore index 72e8ffc0db..d6b7ef32c8 100644 --- a/tests/fixtures/scenarios/empty-dir/.gitignore +++ b/tests/fixtures/scenarios/empty-dir/.gitignore @@ -1 +1,2 @@ * +!.gitignore diff --git a/website/blog/2025-01-04-nested-backend-maps-support.mdx b/website/blog/2025-01-04-nested-backend-maps-support.mdx index 5205cbb6a1..e79102e993 100644 --- a/website/blog/2025-01-04-nested-backend-maps-support.mdx +++ b/website/blog/2025-01-04-nested-backend-maps-support.mdx @@ -1,9 +1,12 @@ --- slug: nested-backend-maps-support -title: "Fixed: Nested Maps in Terraform Backend Configurations" -authors: [atmos] -tags: [bugfix, terraform, backend] -date: 2025-01-04 +title: 'Fixed: Nested Maps in Terraform Backend Configurations' +authors: + - osterman +tags: + - bugfix +date: 2025-01-04T00:00:00.000Z +release: v1.198.0 --- Atmos now properly handles nested maps in Terraform backend configurations when using HCL format. This fixes an issue where complex backend settings like `assume_role` were silently dropped. diff --git a/website/blog/2025-10-13-introducing-atmos-auth.md b/website/blog/2025-10-13-introducing-atmos-auth.md index b42a02cef0..4e47b57c53 100644 --- a/website/blog/2025-10-13-introducing-atmos-auth.md +++ b/website/blog/2025-10-13-introducing-atmos-auth.md @@ -1,10 +1,13 @@ --- slug: introducing-atmos-auth -title: "Introducing Atmos Auth: Native Cloud Authentication for Platform Teams" -sidebar_label: "Introducing Atmos Auth" -authors: [Benbentwo] -tags: [feature, cloud-architecture] -date: 2025-10-13 +title: 'Introducing Atmos Auth: Native Cloud Authentication for Platform Teams' +sidebar_label: Introducing Atmos Auth +authors: + - Benbentwo +tags: + - feature +date: 2025-10-13T00:00:00.000Z +release: v1.196.0 --- We're introducing `atmos auth` - native cloud authentication built directly into Atmos. After years of solving the same authentication problems repeatedly across different tools and teams, we've built a solution that works whether you adopt the entire Atmos framework or just need better credential management. @@ -182,7 +185,7 @@ We're continuing to expand authentication capabilities: Authentication is critical infrastructure for platform teams. If you have feedback, feature requests, or want to contribute: - Open an issue on [GitHub](https://github.com/cloudposse/atmos/issues) -- Share your use cases in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) +- Share your use cases in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) - Contribute provider implementations or enhancements --- diff --git a/website/blog/2025-10-15-atmos-auth-shell.mdx b/website/blog/2025-10-15-atmos-auth-shell.mdx index 8035671de2..1268f4c1da 100644 --- a/website/blog/2025-10-15-atmos-auth-shell.mdx +++ b/website/blog/2025-10-15-atmos-auth-shell.mdx @@ -1,8 +1,14 @@ --- slug: introducing-atmos-auth-shell -title: "Introducing atmos auth shell: Isolated Shell Sessions for Secure Multi-Identity Workflows" -authors: [aknysh] -tags: [feature, atmos-auth, security, workflows] +title: >- + Introducing atmos auth shell: Isolated Shell Sessions for Secure + Multi-Identity Workflows +authors: + - aknysh +tags: + - feature + - security +release: v1.196.0 --- We're excited to introduce `atmos auth shell`, a new command that makes working with multiple cloud identities more secure. diff --git a/website/blog/2025-10-15-introducing-atmos-auth-list.md b/website/blog/2025-10-15-introducing-atmos-auth-list.md index 8651df874c..1a6a2aeaea 100644 --- a/website/blog/2025-10-15-introducing-atmos-auth-list.md +++ b/website/blog/2025-10-15-introducing-atmos-auth-list.md @@ -1,9 +1,12 @@ --- slug: introducing-atmos-auth-list -title: "Introducing atmos auth list: Visualize Your Authentication Configuration" -sidebar_label: "Introducing atmos auth list" -authors: [osterman] -tags: [atmos, authentication, providers, identities, cli] +title: 'Introducing atmos auth list: Visualize Your Authentication Configuration' +sidebar_label: Introducing atmos auth list +authors: + - osterman +tags: + - feature +release: v1.196.0 --- We're excited to announce a powerful new command for managing authentication in Atmos: `atmos auth list`. This command provides comprehensive visibility into your authentication configuration, making it easier than ever to understand and manage complex authentication chains across multiple cloud providers and identities. diff --git a/website/blog/2025-10-15-pager-default-correction.md b/website/blog/2025-10-15-pager-default-correction.md index 9c7db35e28..e838d9b14d 100644 --- a/website/blog/2025-10-15-pager-default-correction.md +++ b/website/blog/2025-10-15-pager-default-correction.md @@ -1,10 +1,14 @@ --- slug: pager-default-correction title: Pager Default Behavior Corrected -sidebar_label: "Pager Default Behavior" -authors: [osterman] -tags: [atmos, bugfix, breaking-change, dx] -date: 2025-10-15 +sidebar_label: Pager Default Behavior +authors: + - osterman +tags: + - bugfix + - breaking-change +date: 2025-10-15T00:00:00.000Z +release: v1.195.0 --- We've identified and corrected a regression in Atmos where the pager was incorrectly enabled by default, contrary to the intended behavior documented in a previous release. diff --git a/website/blog/2025-10-15-provenance-tracking.mdx b/website/blog/2025-10-15-provenance-tracking.mdx index 7781f8d441..65f195a4ed 100644 --- a/website/blog/2025-10-15-provenance-tracking.mdx +++ b/website/blog/2025-10-15-provenance-tracking.mdx @@ -1,9 +1,13 @@ --- slug: provenance-tracking -title: "Configuration Provenance Tracking: Know Where Every Value Comes From" -authors: [aknysh] -tags: [atmos, configuration, debugging, inheritance, dx] -date: 2025-10-15 +title: 'Configuration Provenance Tracking: Know Where Every Value Comes From' +authors: + - aknysh +tags: + - feature + - dx +date: 2025-10-15T00:00:00.000Z +release: v1.195.0 --- import Terminal from '@site/src/components/Terminal' @@ -187,4 +191,4 @@ The provenance system is built on an extensible interface that will enable: - **IDE integration** - Hover-to-see-provenance in editors - **Diff mode** - Show provenance changes between versions -We'd love to hear how you're using provenance tracking. Share your use cases in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) or open an issue if you find any bugs. +We'd love to hear how you're using provenance tracking. Share your use cases in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) or open an issue if you find any bugs. diff --git a/website/blog/2025-10-16-command-registry-pattern.md b/website/blog/2025-10-16-command-registry-pattern.md index 546c49736a..e2f52654db 100644 --- a/website/blog/2025-10-16-command-registry-pattern.md +++ b/website/blog/2025-10-16-command-registry-pattern.md @@ -1,10 +1,13 @@ --- slug: introducing-command-registry-pattern -title: "Introducing the Command Registry Pattern: Toward Pluggable Commands" -sidebar_label: "Command Registry Pattern" -authors: [osterman] -tags: [contributors, atmos-core, refactoring] -date: 2025-10-16 +title: 'Introducing the Command Registry Pattern: Toward Pluggable Commands' +sidebar_label: Command Registry Pattern +authors: + - osterman +tags: + - core +date: 2025-10-16T00:00:00.000Z +release: v1.195.0 --- We're excited to announce the first step in a major architectural evolution for Atmos: the **Command Registry Pattern**. This foundational change will eventually enable **pluggable commands**, allowing the community to extend Atmos with custom command packages without modifying the core codebase. @@ -130,7 +133,7 @@ The `about` command has been migrated as a proof-of-concept in this PR, demonstr ## Get Involved We're building this in the open and welcome contributions from the community: -- 💬 **Discuss** - Share your thoughts in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) +- 💬 **Discuss** - Share your thoughts in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) - 🐛 **Report Issues** - Found a bug? [Open an issue](https://github.com/cloudposse/atmos/issues) - 🚀 **Contribute** - Help migrate commands in future PRs diff --git a/website/blog/2025-10-17-auth-logout-feature.md b/website/blog/2025-10-17-auth-logout-feature.md index d3edb1d9c0..b8ab9d1671 100644 --- a/website/blog/2025-10-17-auth-logout-feature.md +++ b/website/blog/2025-10-17-auth-logout-feature.md @@ -1,9 +1,13 @@ --- slug: introducing-auth-logout -title: "Introducing atmos auth logout: Secure Credential Cleanup" -sidebar_label: "Introducing atmos auth logout" -authors: [osterman] -tags: [feature, authentication, security] +title: 'Introducing atmos auth logout: Secure Credential Cleanup' +sidebar_label: Introducing atmos auth logout +authors: + - osterman +tags: + - feature + - security +release: v1.196.0 --- We're excited to announce a new authentication command: **`atmos auth logout`**. This command provides secure, comprehensive cleanup of locally cached credentials, making it easy to switch between identities, end work sessions, and maintain proper security hygiene. @@ -398,7 +402,7 @@ atmos auth logout --help We'd love to hear how you're using `atmos auth logout`: -- 💬 **Discuss** - Share your thoughts in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) +- 💬 **Discuss** - Share your thoughts in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) - 🐛 **Report Issues** - Found a bug? [Open an issue](https://github.com/cloudposse/atmos/issues) - 🚀 **Contribute** - Submit PRs for improvements diff --git a/website/blog/2025-10-17-aws-sso-verification-code-display.md b/website/blog/2025-10-17-aws-sso-verification-code-display.md index 02065c2a1d..874eebd38d 100644 --- a/website/blog/2025-10-17-aws-sso-verification-code-display.md +++ b/website/blog/2025-10-17-aws-sso-verification-code-display.md @@ -1,10 +1,16 @@ --- slug: aws-sso-verification-code-display -title: "Enhanced AWS SSO Authentication: Better UX with Styled Dialogs and Graceful Cancellation" -sidebar_label: "Enhanced AWS SSO Authentication" -authors: [osterman] -tags: [enhancement, aws, authentication, dx] -date: 2025-10-17 +title: >- + Enhanced AWS SSO Authentication: Better UX with Styled Dialogs and Graceful + Cancellation +sidebar_label: Enhanced AWS SSO Authentication +authors: + - osterman +tags: + - enhancement + - dx +date: 2025-10-17T00:00:00.000Z +release: v1.196.0 --- We've significantly improved the AWS SSO authentication experience with styled verification code dialogs, animated status indicators, and proper Ctrl+C handling. diff --git a/website/blog/2025-10-17-interactive-identity-selection.md b/website/blog/2025-10-17-interactive-identity-selection.md index 059c7eb674..fcdc7a2f56 100644 --- a/website/blog/2025-10-17-interactive-identity-selection.md +++ b/website/blog/2025-10-17-interactive-identity-selection.md @@ -1,9 +1,12 @@ --- slug: interactive-identity-selection -title: "Interactive Identity Selection for Auth Login" -sidebar_label: "Interactive Identity Selection" -authors: [osterman] -tags: [enhancement, auth] +title: Interactive Identity Selection for Auth Login +sidebar_label: Interactive Identity Selection +authors: + - osterman +tags: + - enhancement +release: v1.196.0 --- Running `atmos auth login` without specifying an identity is now more user-friendly. When no `--identity` flag is provided, Atmos presents an interactive selector to choose from your configured identities. diff --git a/website/blog/2025-10-17-version-list-command.md b/website/blog/2025-10-17-version-list-command.md index e4556dbf0e..4e3e8a5b26 100644 --- a/website/blog/2025-10-17-version-list-command.md +++ b/website/blog/2025-10-17-version-list-command.md @@ -1,10 +1,13 @@ --- slug: version-list-show-commands -title: "Browse and Explore Atmos Releases from Your Terminal" -sidebar_label: "Browse Atmos Releases" -authors: [osterman] -tags: [feature, atmos-core] -date: 2025-10-17 +title: Browse and Explore Atmos Releases from Your Terminal +sidebar_label: Browse Atmos Releases +authors: + - osterman +tags: + - feature +date: 2025-10-17T00:00:00.000Z +release: v1.95.0 --- We're introducing two new commands for exploring Atmos releases: `atmos version list` and `atmos version show`. Browse release history with date filtering, inspect artifacts, and keep your infrastructure tooling up-to-date—all from your terminal with beautiful formatted output. @@ -263,7 +266,7 @@ atmos version show ## Get Involved We're building Atmos in the open and welcome your feedback: -- 💬 **Discuss** - Share thoughts in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) +- 💬 **Discuss** - Share thoughts in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) - 🐛 **Report Issues** - Found a bug? [Open an issue](https://github.com/cloudposse/atmos/issues) - 🚀 **Contribute** - Want to add features? Review our [contribution guide](https://atmos.tools/community/contributing). diff --git a/website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md b/website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md index 70b42184e0..4f0be97848 100644 --- a/website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md +++ b/website/blog/2025-10-18-auth-tutorials-geodesic-leapp.md @@ -1,10 +1,13 @@ --- slug: auth-tutorials-geodesic-leapp -title: "New Guides for Atmos Auth: Leapp Migration and Geodesic Integration" -sidebar_label: "Atmos Auth Guides" -authors: [Benbentwo] -tags: [feature, cloud-architecture] -date: 2025-10-18 +title: 'New Guides for Atmos Auth: Leapp Migration and Geodesic Integration' +sidebar_label: Atmos Auth Guides +authors: + - osterman +tags: + - documentation +date: 2025-10-18T00:00:00.000Z +release: v1.196.0 --- We've published two comprehensive guides to help you adopt and integrate `atmos auth` into your workflows: migrating from Leapp and configuring Geodesic for seamless authentication. @@ -76,7 +79,7 @@ Using `atmos auth` provides several advantages over external credential managers These guides are designed to be practical and actionable. If you encounter issues, find gaps in the documentation, or have suggestions for improvement: - Open an issue on [GitHub](https://github.com/cloudposse/atmos/issues) -- Share your experience in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) +- Share your experience in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) - Contribute improvements via pull request --- diff --git a/website/blog/2025-10-18-keyring-backends.mdx b/website/blog/2025-10-18-keyring-backends.mdx index 4987380c92..db7033b906 100644 --- a/website/blog/2025-10-18-keyring-backends.mdx +++ b/website/blog/2025-10-18-keyring-backends.mdx @@ -1,8 +1,13 @@ --- slug: flexible-keyring-backends -title: "Flexible Keyring Backends: System, File, and Memory Storage for Credentials" -authors: [aknysh] -tags: [atmos, authentication, security, testing, keyring] +title: 'Flexible Keyring Backends: System, File, and Memory Storage for Credentials' +authors: + - aknysh +tags: + - feature + - security +date: 2025-10-18T00:00:00.000Z +release: v1.196.0 --- Atmos Auth supports flexible keyring backends, giving you control over how authentication credentials are stored. Use your **system keyring** for native OS integration, **file-based keyrings** to share credentials across OS boundaries (like between your Mac and a Docker container), or **memory keyrings** for testing. @@ -263,7 +268,7 @@ atmos auth login --identity your-identity We'd love to hear your feedback! If you have questions or suggestions: -- [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) +- [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) - [GitHub Issues](https://github.com/cloudposse/atmos/issues) - [Cloud Posse Slack](https://cloudposse.com/slack/) diff --git a/website/blog/2025-10-19-chdir-flag.md b/website/blog/2025-10-19-chdir-flag.md index 2c4c632a1d..9bb27aac50 100644 --- a/website/blog/2025-10-19-chdir-flag.md +++ b/website/blog/2025-10-19-chdir-flag.md @@ -1,10 +1,14 @@ --- slug: introducing-chdir-flag -title: "Introducing --chdir: Simplify Your Multi-Repo Workflows" -sidebar_label: "Introducing --chdir Flag" -authors: [osterman] -tags: [atmos, cli, productivity, developer-experience] -date: 2025-10-19 +title: 'Introducing --chdir: Simplify Your Multi-Repo Workflows' +sidebar_label: Introducing --chdir Flag +authors: + - osterman +tags: + - feature + - dx +date: 2025-10-19T00:00:00.000Z +release: v1.195.0 --- We're excited to announce a new global flag that makes working with Atmos across multiple repositories and directories significantly easier: `--chdir` (or `-C` for short). diff --git a/website/blog/2025-10-20-auth-console-web-access.md b/website/blog/2025-10-20-auth-console-web-access.md index 753bdefa13..6fc26a28f2 100644 --- a/website/blog/2025-10-20-auth-console-web-access.md +++ b/website/blog/2025-10-20-auth-console-web-access.md @@ -1,9 +1,12 @@ --- slug: auth-console-web-access -title: "Cloud Console Access with atmos auth console" -sidebar_label: "Cloud Console Access" -authors: [osterman] -tags: [feature, auth, aws, cloud-architecture] +title: Cloud Console Access with atmos auth console +sidebar_label: Cloud Console Access +authors: + - osterman +tags: + - feature +release: v1.196.0 --- Atmos now includes `atmos auth console`, a convenience command for opening cloud provider web consoles. Similar to `aws-vault login`, this command uses your authenticated Atmos identities to generate temporary console sign-in URLs and open them in your browser. diff --git a/website/blog/2025-10-21-auth-context-implementation.md b/website/blog/2025-10-21-auth-context-implementation.md index 4d6b107309..42229db30f 100644 --- a/website/blog/2025-10-21-auth-context-implementation.md +++ b/website/blog/2025-10-21-auth-context-implementation.md @@ -1,8 +1,11 @@ --- slug: auth-context-implementation -title: "Auth Context: Centralizing Authentication State in Atmos" -authors: [atmos] -tags: [contributors, atmos-core, refactoring] +title: 'Auth Context: Centralizing Authentication State in Atmos' +authors: + - osterman +tags: + - core +release: v1.196.0 --- We've implemented a centralized authentication context system to enable **concurrent multi-provider identities** - allowing Atmos to manage AWS, GitHub, and other cloud provider credentials simultaneously in a single operation. diff --git a/website/blog/2025-10-21-azure-blob-terraform-state-support.md b/website/blog/2025-10-21-azure-blob-terraform-state-support.md index f93992b367..ffe3490368 100644 --- a/website/blog/2025-10-21-azure-blob-terraform-state-support.md +++ b/website/blog/2025-10-21-azure-blob-terraform-state-support.md @@ -1,10 +1,13 @@ --- slug: azure-blob-terraform-state-support -title: "Azure Blob Storage Support for !terraform.state Function" -sidebar_label: "Azure Blob Storage for !terraform.state" -authors: [jamengual] -tags: [feature, terraform] -date: 2025-10-21 +title: Azure Blob Storage Support for !terraform.state Function +sidebar_label: Azure Blob Storage for !terraform.state +authors: + - jamengual +tags: + - feature +date: 2025-10-21T00:00:00.000Z +release: v1.196.0 --- Atmos now supports Azure Blob Storage backends in the `!terraform.state` YAML function. Read Terraform outputs directly from Azure-backed state files without initializing Terraform—bringing the same blazing-fast performance to Azure that S3 users already enjoy. @@ -300,7 +303,7 @@ atmos describe component vpc -s plat-ue2-dev We're building Atmos in the open and welcome your feedback: -- 💬 **Discuss** - Share thoughts in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions). +- 💬 **Discuss** - Share thoughts in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions). - 🐛 **Report Issues** - Found a bug? [Open an issue](https://github.com/cloudposse/atmos/issues). - 🚀 **Contribute** - Want to add features? Review our [contribution guide](https://atmos.tools/community/contributing). diff --git a/website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx b/website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx index b4b8ad856d..06d712365e 100644 --- a/website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx +++ b/website/blog/2025-10-23-yaml-function-circular-dependency-detection.mdx @@ -1,8 +1,11 @@ --- slug: yaml-function-circular-dependency-detection -title: "Atmos Now Detects Circular Dependencies in YAML Functions" -authors: [atmos] -tags: [enhancement, bugfix] +title: Atmos Now Detects Circular Dependencies in YAML Functions +authors: + - osterman +tags: + - enhancement +release: v1.196.0 --- Atmos now detects circular dependencies in YAML function calls and provides a clear call stack showing exactly where the cycle occurs. diff --git a/website/blog/2025-10-24-macos-xdg-cli-conventions.md b/website/blog/2025-10-24-macos-xdg-cli-conventions.md index 4ebe94d857..f5e7fa6a26 100644 --- a/website/blog/2025-10-24-macos-xdg-cli-conventions.md +++ b/website/blog/2025-10-24-macos-xdg-cli-conventions.md @@ -1,9 +1,12 @@ --- slug: macos-xdg-cli-conventions -title: "Breaking Change: macOS Now Uses ~/.config for XDG Paths" -authors: [atmos] -tags: [breaking-change, enhancement] -date: 2025-10-24 +title: 'Breaking Change: macOS Now Uses ~/.config for XDG Paths' +authors: + - osterman +tags: + - breaking-change +date: 2025-10-24T00:00:00.000Z +release: v1.196.0 --- Atmos now follows CLI tool conventions on macOS, using `~/.config`, `~/.cache`, and `~/.local/share` instead of `~/Library/Application Support`. This ensures seamless integration with Geodesic and consistency with other DevOps tools. diff --git a/website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md b/website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md index 609fbbc7e0..9c9ee4b80a 100644 --- a/website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md +++ b/website/blog/2025-10-26-auth-and-utility-commands-no-longer-require-stacks.md @@ -1,9 +1,13 @@ --- slug: auth-and-utility-commands-no-longer-require-stacks title: Auth and Utility Commands No Longer Require Stack Configurations -authors: [atmos] -tags: [atmos, enhancement, dx, auth] -date: 2025-10-26 +authors: + - osterman +tags: + - enhancement + - dx +date: 2025-10-26T00:00:00.000Z +release: v1.196.0 --- Atmos auth, documentation, and workflow management commands now work independently of stack configurations, making it easier to use Atmos in CI/CD pipelines and alongside "native" Terraform workflows. diff --git a/website/blog/2025-10-26-zero-config-terminal-output.md b/website/blog/2025-10-26-zero-config-terminal-output.md index 4a01947af5..c5ecde5a42 100644 --- a/website/blog/2025-10-26-zero-config-terminal-output.md +++ b/website/blog/2025-10-26-zero-config-terminal-output.md @@ -1,13 +1,14 @@ --- -title: "Zero-Configuration Terminal Output: Write Once, Works Everywhere" -description: "Atmos now features intelligent terminal output that automatically adapts to any environment - from rich interactive terminals to plain CI logs - without any code changes or capability checking" +title: 'Zero-Configuration Terminal Output: Write Once, Works Everywhere' slug: zero-config-terminal-output -authors: [osterman] -tags: [feature, enhancement, contributors] +authors: + - osterman +tags: + - feature + - dx +release: v1.198.0 --- -# Zero-Configuration Terminal Output: Write Once, Works Everywhere - Atmos now features intelligent terminal output that adapts to any environment automatically. Developers can write code assuming a full-featured terminal, and Atmos handles the rest - capability detection, color adaptation, and secret masking happen transparently. No more capability checking, manual color detection, or masking code. Just write clean, simple output code and it works everywhere. diff --git a/website/blog/2025-10-28-pro-instances-api-query-params.md b/website/blog/2025-10-28-pro-instances-api-query-params.md index f74ad6d73d..9bbde0c821 100644 --- a/website/blog/2025-10-28-pro-instances-api-query-params.md +++ b/website/blog/2025-10-28-pro-instances-api-query-params.md @@ -1,9 +1,12 @@ --- slug: pro-instances-api-query-params -title: "Atmos Pro: Instances API Migration to Query Parameters" -authors: [atmos] -tags: [bugfix, enhancement] -date: 2025-10-28 +title: 'Atmos Pro: Instances API Migration to Query Parameters' +authors: + - osterman +tags: + - bugfix +date: 2025-10-28T00:00:00.000Z +release: v1.196.0 --- Updated the Atmos Pro integration to use query parameters for the instances API endpoint, fixing issues with stack and component names containing slashes and improving API compatibility. diff --git a/website/blog/2025-10-29-auth-ux-improvements.mdx b/website/blog/2025-10-29-auth-ux-improvements.mdx index b2d6216ff9..032363731c 100644 --- a/website/blog/2025-10-29-auth-ux-improvements.mdx +++ b/website/blog/2025-10-29-auth-ux-improvements.mdx @@ -1,9 +1,13 @@ --- slug: auth-ux-improvements title: Authentication Experience Improvements -authors: [atmos] -tags: [atmos, enhancement, dx, auth] -date: 2025-10-29 +authors: + - osterman +tags: + - enhancement + - dx +date: 2025-10-29T00:00:00.000Z +release: v1.196.0 --- We've made several quality-of-life improvements to Atmos authentication commands, making identity management smoother and more intuitive. diff --git a/website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx b/website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx index 4ed551e36e..25b8016be5 100644 --- a/website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx +++ b/website/blog/2025-10-29-authentication-for-workflows-and-custom-commands.mdx @@ -1,12 +1,11 @@ --- title: Authentication Support for Workflows and Custom Commands -description: Add per-step authentication for workflows and custom commands with the new identity field and --identity flag +authors: + - osterman slug: authentication-for-workflows-and-custom-commands tags: - feature - - workflows - - custom-commands - - authentication +release: v1.197.0 --- We're excited to announce two major improvements to Atmos authentication: **per-step authentication for workflows** and **authentication support for custom commands**. These features enable you to seamlessly use cloud credentials in your automation while maintaining security through file-based credential management. diff --git a/website/blog/2025-10-30-terraform-provider-development.mdx b/website/blog/2025-10-30-terraform-provider-development.mdx index 1520688697..cefea3f91f 100644 --- a/website/blog/2025-10-30-terraform-provider-development.mdx +++ b/website/blog/2025-10-30-terraform-provider-development.mdx @@ -1,9 +1,12 @@ --- slug: terraform-provider-development -title: "Testing Custom Terraform Providers with Atmos Components" -authors: [atmos] -tags: [feature, terraform, providers] -date: 2025-10-30 +title: Testing Custom Terraform Providers with Atmos Components +authors: + - osterman +tags: + - feature +date: 2025-10-30T00:00:00.000Z +release: v1.197.0 --- If you develop Terraform providers, you can now test them locally with Atmos-managed components using Terraform's development overrides feature. This enables rapid iteration without publishing development versions to a registry. diff --git a/website/blog/2025-10-31-component-aware-stack-completion.mdx b/website/blog/2025-10-31-component-aware-stack-completion.mdx index 45058962a7..8f0a0f9fad 100644 --- a/website/blog/2025-10-31-component-aware-stack-completion.mdx +++ b/website/blog/2025-10-31-component-aware-stack-completion.mdx @@ -1,9 +1,13 @@ --- slug: component-aware-stack-completion title: Component-Aware Stack Tab Completion -authors: [atmos] -tags: [atmos, enhancement, dx, shell-completion] -date: 2025-10-31 +authors: + - osterman +tags: + - enhancement + - dx +date: 2025-10-31T00:00:00.000Z +release: v1.198.0 --- Tab completion for the `--stack` flag is now context-aware, filtering suggestions based on the component you specify. diff --git a/website/blog/2025-10-31-shell-argument-quoting-fix.mdx b/website/blog/2025-10-31-shell-argument-quoting-fix.mdx index cde83a3ac5..248700934b 100644 --- a/website/blog/2025-10-31-shell-argument-quoting-fix.mdx +++ b/website/blog/2025-10-31-shell-argument-quoting-fix.mdx @@ -1,9 +1,13 @@ --- slug: shell-argument-quoting-fix -title: "Critical Fix: Proper Shell Argument Quoting in Custom Commands" -authors: [atmos] -tags: [atmos, bugfix, security, custom-commands] -date: 2025-10-31 +title: 'Critical Fix: Proper Shell Argument Quoting in Custom Commands' +authors: + - osterman +tags: + - bugfix + - security +date: 2025-10-31T00:00:00.000Z +release: v1.197.0 --- We've fixed a critical bug in how Atmos handles arguments passed to custom commands via `{{ .TrailingArgs }}`. This fix improves security and ensures whitespace and special characters are preserved correctly. diff --git a/website/blog/2025-11-02-describe-commands-identity-flag.mdx b/website/blog/2025-11-02-describe-commands-identity-flag.mdx index 368bb88d19..4d2a842b03 100644 --- a/website/blog/2025-11-02-describe-commands-identity-flag.mdx +++ b/website/blog/2025-11-02-describe-commands-identity-flag.mdx @@ -1,8 +1,11 @@ --- slug: describe-commands-identity-flag -title: "Identity Flag Support for Describe Commands" -authors: [atmos] -tags: [feature, auth, describe-commands] +title: Identity Flag Support for Describe Commands +authors: + - osterman +tags: + - feature +release: v1.197.0 --- The `atmos describe` family of commands now supports the `--identity` flag, enabling runtime authentication when processing YAML template functions that access remote resources. This ensures that `!terraform.state` and `!terraform.output` functions work seamlessly without relying on ambient credentials. diff --git a/website/blog/2025-11-07-azure-authentication-support.mdx b/website/blog/2025-11-07-azure-authentication-support.mdx index b3bd8819b1..4fc9d6dbc3 100644 --- a/website/blog/2025-11-07-azure-authentication-support.mdx +++ b/website/blog/2025-11-07-azure-authentication-support.mdx @@ -1,12 +1,11 @@ --- title: Native Azure Authentication Support -description: Authenticate to Azure using Atmos with device code flow, OIDC, and service principals - works identically to az login slug: azure-authentication-support -authors: [jamengual] +authors: + - jamengual tags: - feature - - azure - - authentication +release: v1.199.0 --- We're thrilled to announce native Azure authentication support in Atmos! You can now authenticate to Azure using `atmos auth login` with device code flow, OIDC, and service principals - working identically to `az login` with full Terraform provider compatibility. diff --git a/website/blog/2025-11-07-disable-identity-authentication.mdx b/website/blog/2025-11-07-disable-identity-authentication.mdx index 48ebad5358..61d82c1829 100644 --- a/website/blog/2025-11-07-disable-identity-authentication.mdx +++ b/website/blog/2025-11-07-disable-identity-authentication.mdx @@ -1,8 +1,11 @@ --- slug: disable-identity-authentication -title: "Disable Identity Authentication with --identity=false" -authors: [osterman] -tags: [feature] +title: Disable Identity Authentication with --identity=false +authors: + - osterman +tags: + - feature +release: v1.198.0 --- You can now disable Atmos identity authentication by setting `--identity=false`, allowing you to use cloud provider SDK credential resolution instead. diff --git a/website/blog/2025-11-08-git-root-discovery.md b/website/blog/2025-11-08-git-root-discovery.md index b2a22856fd..84763f4a9d 100644 --- a/website/blog/2025-11-08-git-root-discovery.md +++ b/website/blog/2025-11-08-git-root-discovery.md @@ -1,9 +1,13 @@ --- slug: git-root-discovery -title: "Run Atmos from Any Subdirectory" -authors: [osterman] -tags: [atmos, cli, productivity, developer-experience] -date: 2025-11-08 +title: Run Atmos from Any Subdirectory +authors: + - osterman +tags: + - feature + - dx +date: 2025-11-08T00:00:00.000Z +release: v1.198.0 --- Atmos now automatically discovers your repository root and runs from there, just like Git. No more `cd`-ing back to the root directory. diff --git a/website/blog/2025-11-08-helpful-errors.mdx b/website/blog/2025-11-08-helpful-errors.mdx index f5ecd371a1..27cfea2f25 100644 --- a/website/blog/2025-11-08-helpful-errors.mdx +++ b/website/blog/2025-11-08-helpful-errors.mdx @@ -1,9 +1,15 @@ --- slug: helpful-errors -title: "Better Error Messages: Helpful Hints, Rich Context, and Enterprise Error Tracking" -authors: [osterman] -tags: [enhancement, feature] -date: 2025-11-08 +title: >- + Better Error Messages: Helpful Hints, Rich Context, and Enterprise Error + Tracking +authors: + - osterman +tags: + - feature + - dx +date: 2025-11-08T00:00:00.000Z +release: v1.199.0 --- We've completely rebuilt Atmos error handling from the ground up to provide **helpful hints**, **rich context**, and **enterprise-grade error tracking**. When something goes wrong, you now get actionable guidance instead of cryptic messages, and enterprises can track and analyze errors across their entire infrastructure stack. diff --git a/website/blog/2025-11-08-terminal-themes.mdx b/website/blog/2025-11-08-terminal-themes.mdx index 212836faad..563fa362a3 100644 --- a/website/blog/2025-11-08-terminal-themes.mdx +++ b/website/blog/2025-11-08-terminal-themes.mdx @@ -1,8 +1,11 @@ --- slug: terminal-themes -title: "Customize Your Terminal with Atmos Themes" -authors: [osterman] -tags: [feature] +title: Customize Your Terminal with Atmos Themes +authors: + - osterman +tags: + - feature +release: v1.198.0 --- Atmos now includes 350+ terminal themes to customize your CLI experience. Choose from popular themes like Dracula, Solarized, or GitHub Dark, or browse the complete collection to find one that matches your style. diff --git a/website/blog/2025-11-08-theme-commands-environment-variables.mdx b/website/blog/2025-11-08-theme-commands-environment-variables.mdx index 3805209498..bc9407b55b 100644 --- a/website/blog/2025-11-08-theme-commands-environment-variables.mdx +++ b/website/blog/2025-11-08-theme-commands-environment-variables.mdx @@ -1,8 +1,11 @@ --- slug: theme-commands-environment-variables -title: "Theme Commands Migrated to StandardFlagParser" -authors: [osterman] -tags: [contributors, atmos-core, refactoring] +title: Theme Commands Migrated to StandardFlagParser +authors: + - osterman +tags: + - core +release: v1.199.0 --- The theme commands have been migrated to use the modern `StandardFlagParser` infrastructure, bringing them in line with other Atmos commands. diff --git a/website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx b/website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx index c3bfe9a094..0d38f96fcf 100644 --- a/website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx +++ b/website/blog/2025-11-09-aws-sso-identity-auto-provisioning.mdx @@ -1,8 +1,11 @@ --- title: Zero-Configuration AWS SSO Identity Management -description: Automatically provision AWS SSO permission sets as Atmos identities - authenticate once, use any role -authors: [osterman] -tags: [feature, aws, sso, authentication, zero-config] +authors: + - osterman +tags: + - feature + - dx +release: v1.200.0 --- Atmos now automatically provisions AWS SSO permission sets as identities when you authenticate. Log in once, and all your available roles are instantly ready to use—no manual configuration required. @@ -313,4 +316,4 @@ For detailed configuration options, see the [Authentication Documentation](/cli/ ## Feedback -We'd love to hear how auto-provisioning works for your use case. Share your experience in [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) or report issues in [GitHub Issues](https://github.com/cloudposse/atmos/issues). +We'd love to hear how auto-provisioning works for your use case. Share your experience in [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) or report issues in [GitHub Issues](https://github.com/cloudposse/atmos/issues). diff --git a/website/blog/2025-11-11-atmos-profiles.mdx b/website/blog/2025-11-11-atmos-profiles.mdx index d0278b1384..72fb747486 100644 --- a/website/blog/2025-11-11-atmos-profiles.mdx +++ b/website/blog/2025-11-11-atmos-profiles.mdx @@ -1,8 +1,11 @@ --- slug: atmos-profiles -title: "Atmos Profiles: One Configuration, Multiple Contexts" -authors: [osterman] -tags: [feature] +title: 'Atmos Profiles: One Configuration, Multiple Contexts' +authors: + - osterman +tags: + - feature +release: v1.199.0 --- Stop fighting with different Atmos configurations for development, CI/CD, and production. Profiles let you switch contexts with a single flag while keeping your core configuration consistent. diff --git a/website/blog/2025-11-14-comprehensive-version-management-docs.md b/website/blog/2025-11-14-comprehensive-version-management-docs.md index 4075853a03..bd424616c0 100644 --- a/website/blog/2025-11-14-comprehensive-version-management-docs.md +++ b/website/blog/2025-11-14-comprehensive-version-management-docs.md @@ -1,8 +1,11 @@ --- slug: comprehensive-version-management-documentation -title: "New Comprehensive Version Management Documentation" -authors: [osterman] -tags: [atmos, documentation, version-management, versioning, deployment-strategies] +title: New Comprehensive Version Management Documentation +authors: + - osterman +tags: + - documentation +release: v1.199.0 --- When you deploy infrastructure across multiple environments—dev, staging, production—you need a way to manage which version of each component runs where. Maybe your VPC module in dev is testing new CIDR ranges, while production stays on the stable version until you're confident the changes work. @@ -107,4 +110,4 @@ Ready to explore? Check out the new [Version Management documentation](/design-p ## Share Your Experience -Have you found another versioning strategy that works well for your organization? We'd love to hear about it! Share your approach in our [GitHub Discussions](https://github.com/cloudposse/atmos/discussions) or [open an issue](https://github.com/cloudposse/atmos/issues) to help us expand this documentation with real-world patterns from the community. +Have you found another versioning strategy that works well for your organization? We'd love to hear about it! Share your approach in our [GitHub Discussions](https://github.com/orgs/cloudposse/discussions) or [open an issue](https://github.com/cloudposse/atmos/issues) to help us expand this documentation with real-world patterns from the community. diff --git a/website/blog/2025-11-14-env-function-stack-manifest-support.mdx b/website/blog/2025-11-14-env-function-stack-manifest-support.mdx index 54161b2eec..b5b53a1ef5 100644 --- a/website/blog/2025-11-14-env-function-stack-manifest-support.mdx +++ b/website/blog/2025-11-14-env-function-stack-manifest-support.mdx @@ -1,9 +1,12 @@ --- slug: env-function-stack-manifest-support -title: "!env Function Now Reads from Stack Manifest env Sections" -authors: [osterman] -tags: [feature, yaml-functions, env, configuration] -date: 2025-11-14 +title: '!env Function Now Reads from Stack Manifest env Sections' +authors: + - osterman +tags: + - feature +date: 2025-11-14T00:00:00.000Z +release: v1.199.0 --- The `!env` YAML function now supports reading environment variables from `env` sections defined in your stack manifests and Atmos configuration. This makes it easy to set defaults for environment variables and reference values from your infrastructure configuration. @@ -102,4 +105,4 @@ This enhancement brings several benefits: Start using `env` sections in your stack manifests today to centralize your environment variable defaults and improve configuration management. No changes to existing `!env` usage required - this enhancement is fully backward compatible. -For questions or feedback, join the discussion in our [GitHub Discussions](https://github.com/cloudposse/atmos/discussions). +For questions or feedback, join the discussion in our [GitHub Discussions](https://github.com/orgs/cloudposse/discussions). diff --git a/website/blog/2025-11-14-safe-logout-preserves-keychain.mdx b/website/blog/2025-11-14-safe-logout-preserves-keychain.mdx index f0c02e9d86..46de787cbc 100644 --- a/website/blog/2025-11-14-safe-logout-preserves-keychain.mdx +++ b/website/blog/2025-11-14-safe-logout-preserves-keychain.mdx @@ -1,8 +1,12 @@ --- slug: safe-logout-preserves-keychain -title: "Safe Logout: Preserve Keychain Credentials by Default" -authors: [osterman] -tags: [atmos, authentication, ux, breaking-changes] +title: 'Safe Logout: Preserve Keychain Credentials by Default' +authors: + - osterman +tags: + - breaking-change + - dx +release: v1.199.0 --- `atmos auth logout` now preserves keychain credentials by default for faster re-authentication. Only session data is cleared. Use `--keychain` to permanently delete credentials. diff --git a/website/blog/2025-11-14-terraform-command-documentation.mdx b/website/blog/2025-11-14-terraform-command-documentation.mdx index c89be0ee0b..9375c44da7 100644 --- a/website/blog/2025-11-14-terraform-command-documentation.mdx +++ b/website/blog/2025-11-14-terraform-command-documentation.mdx @@ -1,8 +1,11 @@ --- slug: terraform-command-documentation -title: "Comprehensive Documentation for Terraform Commands" -authors: [osterman] -tags: [feature] +title: Comprehensive Documentation for Terraform Commands +authors: + - osterman +tags: + - documentation +release: v1.200.0 --- We've added comprehensive documentation for all 35 Terraform commands in Atmos, making it easier to understand how to orchestrate Terraform with stack-based configurations. Each command now has dedicated documentation with usage examples, arguments, flags, and integration details. diff --git a/website/blog/2025-11-14-theme-aware-help.mdx b/website/blog/2025-11-14-theme-aware-help.mdx index 936f716125..4a616bc9f9 100644 --- a/website/blog/2025-11-14-theme-aware-help.mdx +++ b/website/blog/2025-11-14-theme-aware-help.mdx @@ -1,8 +1,11 @@ --- slug: theme-aware-help -title: "Help Text Now Respects Your Terminal Theme" -authors: [osterman] -tags: [enhancement] +title: Help Text Now Respects Your Terminal Theme +authors: + - osterman +tags: + - enhancement +release: v1.200.0 --- Atmos help text now automatically adapts to your configured theme, providing a consistent and visually cohesive experience across all commands. Whether you're using a dark theme like Dracula or a light theme like GitHub, help output will match your terminal's color scheme. diff --git a/website/blog/2025-11-17-comprehensive-terraform-documentation.md b/website/blog/2025-11-17-comprehensive-terraform-documentation.md index c0bc66be79..6245b7afb0 100644 --- a/website/blog/2025-11-17-comprehensive-terraform-documentation.md +++ b/website/blog/2025-11-17-comprehensive-terraform-documentation.md @@ -1,11 +1,14 @@ --- slug: comprehensive-terraform-documentation title: Comprehensive Terraform Documentation and Enhanced Help System -authors: [osterman] -tags: [terraform, documentation, contributors] +authors: + - osterman +tags: + - documentation +release: v1.200.0 --- -We're excited to announce major improvements to Atmos documentation, making it easier than ever to understand and use Terraform commands with Atmos. This release focuses on comprehensive command documentation, automated screengrab generation, and an improved help system. +This release brings documentation improvements to Atmos, making it easier to understand and use Terraform commands. We've focused on comprehensive command documentation and automated screengrab generation. @@ -26,20 +29,6 @@ Key additions include: [View Terraform Documentation](/cli/commands/terraform/usage) -## Improved Help System - -The help system has been completely refactored for better maintainability and user experience: - -- **Reduced cognitive complexity** - Large functions split into smaller, testable units -- **Consistent formatting** - All help text now uses proper markdown rendering -- **Better color profiles** - Automatic detection with TrueColor, ANSI256, and ASCII fallbacks -- **Performance tracking** - Built-in instrumentation for monitoring command execution - -Example improvements: -- `renderFlags()` function reduced from 94 lines to focused 20-line implementation -- `configureWriter()` split into 5 specialized functions -- Added comprehensive unit tests for help rendering logic - ## Screengrab Generation Infrastructure We've built a complete system for generating accurate, up-to-date CLI help screengrabs: @@ -61,14 +50,6 @@ Numerous documentation improvements including: - Added security warnings for credential handling in planfiles - Improved Markdown formatting consistency -## Upgrade Notes - -This release maintains backward compatibility. To take advantage of the new features: - -1. Update to the latest Atmos version -2. Review the new [Terraform documentation](/cli/commands/terraform/usage) -3. Check your workflows against the updated command descriptions - ## Contributors This release includes contributions from the Atmos team and community. Thank you to everyone who provided feedback, reported issues, and contributed code! diff --git a/website/blog/2025-11-17-enhanced-color-output-and-code-quality.md b/website/blog/2025-11-17-enhanced-color-output-and-code-quality.md index 62dd257ff7..519a82409c 100644 --- a/website/blog/2025-11-17-enhanced-color-output-and-code-quality.md +++ b/website/blog/2025-11-17-enhanced-color-output-and-code-quality.md @@ -1,8 +1,12 @@ --- slug: enhanced-color-output-and-code-quality title: Enhanced Color Output Support and Code Quality Improvements -authors: [osterman] -tags: [cli, contributors] +authors: + - osterman +tags: + - enhancement + - core +release: v1.200.0 --- This release brings powerful enhancements to color output in CI/CD environments and significant code quality improvements that make Atmos more maintainable and performant. diff --git a/website/blog/tags.yml b/website/blog/tags.yml index 72193c844c..eed5b6886e 100644 --- a/website/blog/tags.yml +++ b/website/blog/tags.yml @@ -1,147 +1,45 @@ # Blog Post Tags Configuration -# This file documents official tags for Atmos blog posts. -# Tags help readers find relevant content based on their needs. +# This file defines the official tags for Atmos changelog posts. +# Each post should have 1-2 tags from this list. -# PRIMARY AUDIENCE TAGS (required) -# Use exactly one of these to indicate the primary audience: +# USER-FACING TAGS +# Use these for posts that directly affect Atmos users: feature: label: Feature - description: New user-facing features and capabilities + description: New capabilities and functionality enhancement: label: Enhancement - description: Improvements to existing user-facing features + description: Improvements to existing features bugfix: label: Bug Fix - description: Important bug fixes that affect users - -contributors: - label: Contributors - description: Internal changes for Atmos contributors and core developers (zero user impact) - -# SECONDARY TAGS - For Contributor Posts -# Use these with 'contributors' tag to describe the technical area: - -atmos-core: - label: Atmos Core - description: Changes to Atmos codebase internals and architecture - -refactoring: - label: Refactoring - description: Code restructuring and internal improvements - -testing: - label: Testing - description: Test infrastructure and coverage improvements - -ci-cd: - label: CI/CD - description: Continuous integration and deployment pipeline changes - -developer-experience: - label: Developer Experience - description: Developer tooling and workflow improvements - -# SECONDARY TAGS - For User Posts -# Use these with feature/enhancement/bugfix tags: - -atmos: - label: Atmos - description: General Atmos features and functionality - -terraform: - label: Terraform - description: Terraform-specific features and functionality - -helmfile: - label: Helmfile - description: Helmfile-specific features and functionality - -workflows: - label: Workflows - description: Workflow orchestration features - -validation: - label: Validation - description: Configuration validation and policy features - -performance: - label: Performance - description: Performance improvements and optimizations - -cloud-architecture: - label: Cloud Architecture - description: Cloud architecture patterns and best practices (user-facing) - -authentication: - label: Authentication - description: Authentication and identity management features - -auth: - label: Auth - description: Authentication-related features (short form) - -atmos-auth: - label: Atmos Auth - description: Atmos authentication system features - -security: - label: Security - description: Security features and improvements - -providers: - label: Providers - description: Cloud provider integrations - -identities: - label: Identities - description: Identity and credential management - -cli: - label: CLI - description: Command-line interface features - -configuration: - label: Configuration - description: Configuration management features - -debugging: - label: Debugging - description: Debugging and troubleshooting features - -inheritance: - label: Inheritance - description: Configuration inheritance features + description: Bug fixes dx: - label: Developer Experience + label: DX description: Developer experience improvements -aws: - label: AWS - description: AWS-specific features and integrations - -keyring: - label: Keyring - description: Keyring and credential storage features +breaking-change: + label: Breaking Change + description: Breaking changes requiring user action -productivity: - label: Productivity - description: Productivity and workflow efficiency features +security: + label: Security + description: Security-related changes -# GENERAL TAGS -# Use these for special announcements: +documentation: + label: Documentation + description: Documentation improvements -announcements: - label: Announcements - description: Major project announcements and milestones +deprecation: + label: Deprecation + description: Deprecated features scheduled for removal -breaking-changes: - label: Breaking Changes - description: Changes requiring user migration or configuration updates +# CONTRIBUTOR TAG +# Use for internal changes with zero user impact: -breaking-change: - label: Breaking Change - description: Breaking change requiring user migration (singular form) +core: + label: Core + description: Internal changes for Atmos contributors and core developers diff --git a/website/blog/welcome.md b/website/blog/welcome.md index 6f17a05f45..0ef93a5fe6 100644 --- a/website/blog/welcome.md +++ b/website/blog/welcome.md @@ -1,9 +1,12 @@ --- slug: welcome title: Welcome to the Atmos Changelog -authors: [aknysh] -tags: [atmos, announcements] -date: 2025-10-12 +authors: + - aknysh +tags: + - documentation +date: 2025-10-12T00:00:00.000Z +release: v1.195.0 --- We're excited to launch the Atmos Changelog—your go-to source for feature announcements, technical deep dives, and best practices for managing cloud infrastructure at scale. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 03d09a280c..ecd368a4cb 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -165,6 +165,9 @@ const config = { [ path.resolve(__dirname, 'plugins', 'fetch-latest-release'), {} ], + [ + path.resolve(__dirname, 'plugins', 'blog-release-data'), {} + ], [ path.resolve(__dirname, 'plugins', 'docusaurus-plugin-llms-txt'), { diff --git a/website/plugins/blog-release-data/index.js b/website/plugins/blog-release-data/index.js new file mode 100644 index 0000000000..3d598f33cf --- /dev/null +++ b/website/plugins/blog-release-data/index.js @@ -0,0 +1,62 @@ +/** + * Plugin to extract release data from blog posts and make it available globally. + * This allows components like the blog sidebar to group posts by release version. + */ +const fs = require('fs'); +const path = require('path'); +const matter = require('gray-matter'); + +module.exports = function blogReleaseDataPlugin(context, options) { + return { + name: 'blog-release-data', + + async loadContent() { + const blogDir = path.join(context.siteDir, 'blog'); + const releaseMap = {}; + + // Read all .mdx and .md files in the blog directory. + const files = fs.readdirSync(blogDir).filter( + (file) => file.endsWith('.mdx') || file.endsWith('.md') + ); + + for (const file of files) { + const filePath = path.join(blogDir, file); + const content = fs.readFileSync(filePath, 'utf-8'); + const { data: frontmatter } = matter(content); + + if (frontmatter.release) { + // The blog is configured with routeBasePath: 'changelog'. + // Handle multiple filename formats and permalink styles. + + // Try date-prefixed filename: YYYY-MM-DD-slug-name.mdx + const dateMatch = file.match(/^(\d{4})-(\d{2})-(\d{2})-(.+)\.(mdx?|md)$/); + if (dateMatch) { + const [, year, month, day, slugPart] = dateMatch; + const slug = frontmatter.slug || slugPart; + + // Store multiple permalink formats to handle both slug-only and date-based paths. + const slugPermalink = `/changelog/${slug}`; + const datePermalink = `/changelog/${year}/${month}/${day}/${slugPart}`; + + releaseMap[slugPermalink] = frontmatter.release; + releaseMap[`${slugPermalink}/`] = frontmatter.release; + releaseMap[datePermalink] = frontmatter.release; + releaseMap[`${datePermalink}/`] = frontmatter.release; + } else if (frontmatter.slug) { + // Non-date-prefixed file with explicit slug (e.g., welcome.md) + const slugPermalink = `/changelog/${frontmatter.slug}`; + releaseMap[slugPermalink] = frontmatter.release; + releaseMap[`${slugPermalink}/`] = frontmatter.release; + } + } + } + + return { releaseMap }; + }, + + async contentLoaded({ content, actions }) { + const { setGlobalData } = actions; + setGlobalData(content); + }, + }; +}; diff --git a/website/scripts/update-blog-releases.js b/website/scripts/update-blog-releases.js new file mode 100755 index 0000000000..7ec9880d75 --- /dev/null +++ b/website/scripts/update-blog-releases.js @@ -0,0 +1,100 @@ +#!/usr/bin/env node +/** + * Script to compute and add release versions to blog post frontmatter. + * + * For each blog post, this script: + * 1. Gets the commit SHA that introduced the file + * 2. Finds the earliest stable release tag containing that commit + * 3. Adds `release: vX.Y.Z` to the frontmatter + * + * Usage: node website/scripts/update-blog-releases.js + */ + +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const matter = require('gray-matter'); + +const blogDir = path.join(__dirname, '..', 'blog'); + +// Check if blog directory exists +if (!fs.existsSync(blogDir)) { + console.error(`Blog directory not found: ${blogDir}`); + process.exit(1); +} + +const files = fs.readdirSync(blogDir).filter(f => f.match(/\.(md|mdx)$/)); + +console.log(`Found ${files.length} blog posts to process...\n`); + +let updated = 0; +let skipped = 0; +let errors = 0; + +for (const file of files) { + const filePath = path.join(blogDir, file); + + try { + const content = fs.readFileSync(filePath, 'utf8'); + const { data: frontmatter, content: body } = matter(content); + + // Skip if release already set + if (frontmatter.release) { + console.log(`✓ ${file}: Already has release: ${frontmatter.release}`); + skipped++; + continue; + } + + // Get commit SHA that introduced this file (the first commit that added it) + let sha; + try { + sha = execSync(`git log --follow --diff-filter=A --format="%H" -- "${filePath}"`, { + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'pipe'] + }).trim().split('\n')[0]; + } catch (e) { + sha = null; + } + + if (!sha) { + console.log(`⚠ ${file}: No commit found, setting to "unreleased"`); + frontmatter.release = 'unreleased'; + } else { + // Find all tags containing this commit, sorted by version + let tags; + try { + tags = execSync(`git tag --contains ${sha} --sort=version:refname`, { + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'pipe'] + }).trim().split('\n').filter(Boolean); + } catch (e) { + tags = []; + } + + // Find the first stable release (matches vX.Y.Z exactly, no -rc, -test, etc.) + const stableRelease = tags.find(t => /^v\d+\.\d+\.\d+$/.test(t)); + + if (stableRelease) { + console.log(`✓ ${file}: ${stableRelease}`); + frontmatter.release = stableRelease; + } else { + console.log(`⚠ ${file}: No stable release contains commit ${sha.slice(0, 7)}, setting to "unreleased"`); + frontmatter.release = 'unreleased'; + } + } + + // Write back with updated frontmatter + const updated_content = matter.stringify(body, frontmatter); + fs.writeFileSync(filePath, updated_content); + updated++; + + } catch (err) { + console.error(`✗ ${file}: Error - ${err.message}`); + errors++; + } +} + +console.log(`\n--- Summary ---`); +console.log(`Updated: ${updated}`); +console.log(`Skipped (already had release): ${skipped}`); +console.log(`Errors: ${errors}`); diff --git a/website/src/components/ChangelogTimeline/FilterBar.tsx b/website/src/components/ChangelogTimeline/FilterBar.tsx index 9d2dc840c8..6f01bc3077 100644 --- a/website/src/components/ChangelogTimeline/FilterBar.tsx +++ b/website/src/components/ChangelogTimeline/FilterBar.tsx @@ -1,70 +1,84 @@ import React from 'react'; -import clsx from 'clsx'; import styles from './styles.module.css'; interface FilterBarProps { years: string[]; + selectedYears: string[]; + onYearsChange: (years: string[]) => void; tags: string[]; - selectedYear: string | null; - selectedTag: string | null; - onYearChange: (year: string | null) => void; - onTagChange: (tag: string | null) => void; + selectedTags: string[]; + onTagsChange: (tags: string[]) => void; } export default function FilterBar({ years, + selectedYears, + onYearsChange, tags, - selectedYear, - selectedTag, - onYearChange, - onTagChange, + selectedTags, + onTagsChange, }: FilterBarProps): JSX.Element { + const hasActiveFilters = selectedYears.length > 0 || selectedTags.length > 0; + + const toggleYear = (year: string) => { + if (selectedYears.includes(year)) { + onYearsChange(selectedYears.filter((y) => y !== year)); + } else { + onYearsChange([...selectedYears, year]); + } + }; + + const toggleTag = (tag: string) => { + if (selectedTags.includes(tag)) { + onTagsChange(selectedTags.filter((t) => t !== tag)); + } else { + onTagsChange([...selectedTags, tag]); + } + }; + return ( -
-
-
- +
+
+
+ Year +
{years.map((year) => ( ))}
- -
- - +
+
+ Tag +
+ {tags.map((tag) => ( + + ))}
+ {hasActiveFilters && ( + + )} +
); } diff --git a/website/src/components/ChangelogTimeline/TimelineEntry.tsx b/website/src/components/ChangelogTimeline/TimelineEntry.tsx index 88bc59726a..cf3129425d 100644 --- a/website/src/components/ChangelogTimeline/TimelineEntry.tsx +++ b/website/src/components/ChangelogTimeline/TimelineEntry.tsx @@ -14,6 +14,7 @@ export default function TimelineEntry({ item, position, }: TimelineEntryProps): JSX.Element { + // Docusaurus provides metadata and frontMatter as siblings on content. const { metadata } = item.content; const { title, permalink, date, tags = [], description } = metadata; diff --git a/website/src/components/ChangelogTimeline/TimelineRelease.tsx b/website/src/components/ChangelogTimeline/TimelineRelease.tsx new file mode 100644 index 0000000000..3deae4ec1e --- /dev/null +++ b/website/src/components/ChangelogTimeline/TimelineRelease.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import TimelineEntry from './TimelineEntry'; +import type { ReleaseGroup } from './utils'; +import styles from './styles.module.css'; + +interface TimelineReleaseProps { + releaseGroup: ReleaseGroup; + startIndex: number; +} + +export default function TimelineRelease({ + releaseGroup, + startIndex, +}: TimelineReleaseProps): JSX.Element { + const { release, items } = releaseGroup; + const isUnreleased = release === 'unreleased'; + const displayRelease = isUnreleased ? 'Unreleased' : release; + + return ( +
+
+ {isUnreleased ? ( + {displayRelease} + ) : ( + + {displayRelease} + + )} +
+
+ {items.map((item, index) => ( + + ))} +
+
+ ); +} diff --git a/website/src/components/ChangelogTimeline/index.tsx b/website/src/components/ChangelogTimeline/index.tsx index b3f20fca44..d062cd8bb5 100644 --- a/website/src/components/ChangelogTimeline/index.tsx +++ b/website/src/components/ChangelogTimeline/index.tsx @@ -1,11 +1,11 @@ import React, { useState, useMemo } from 'react'; import FilterBar from './FilterBar'; -import TimelineYear from './TimelineYear'; +import TimelineRelease from './TimelineRelease'; import { - groupBlogPostsByYearMonth, - extractYears, + groupBlogPostsByRelease, extractTags, - filterBlogPosts, + extractYears, + filterBlogPostsMulti, type BlogPostItem, } from './utils'; import styles from './styles.module.css'; @@ -17,43 +17,54 @@ interface ChangelogTimelineProps { export default function ChangelogTimeline({ items, }: ChangelogTimelineProps): JSX.Element { - const [selectedYear, setSelectedYear] = useState(null); - const [selectedTag, setSelectedTag] = useState(null); + const [selectedYears, setSelectedYears] = useState([]); + const [selectedTags, setSelectedTags] = useState([]); - // Extract available years and tags for the filter. + // Extract available years and tags for the filters. const years = useMemo(() => extractYears(items), [items]); const tags = useMemo(() => extractTags(items), [items]); - // Filter and group items. + // Filter by years and tags, then group by release version. const filteredItems = useMemo( - () => filterBlogPosts(items, selectedYear, selectedTag), - [items, selectedYear, selectedTag] + () => filterBlogPostsMulti(items, selectedYears, selectedTags), + [items, selectedYears, selectedTags] ); const groupedItems = useMemo( - () => groupBlogPostsByYearMonth(filteredItems), + () => groupBlogPostsByRelease(filteredItems), [filteredItems] ); const hasResults = groupedItems.length > 0; + // Calculate running index for alternating positions across releases. + let runningIndex = 0; + return (
{hasResults ? (
) : (
@@ -61,8 +72,8 @@ export default function ChangelogTimeline({ {isOpen &&
{children}
}
@@ -157,48 +132,26 @@ function BlogSidebarContent({items, yearGroupHeadingClassName, ListComponent}: { yearGroupHeadingClassName?: string; ListComponent: React.ComponentType<{items: BlogSidebarItem[]}>; }) { - const themeConfig = useThemeConfig(); - if (themeConfig.blog.sidebar.groupByYear) { - const itemsByYearMonth = groupBlogSidebarItemsByYearMonth(items); - - // Determine the most recent month (first in iteration order). - let firstMonthKey: string | null = null; - for (const [year, monthMap] of itemsByYearMonth.entries()) { - for (const month of monthMap.keys()) { - firstMonthKey = `${year}-${month}`; - break; - } - if (firstMonthKey) break; - } + const globalData = useGlobalData(); + const releaseData = globalData['blog-release-data']?.default as {releaseMap: Record} | undefined; + const releaseMap = releaseData?.releaseMap || {}; - return ( - <> - {Array.from(itemsByYearMonth.entries()).map(([year, monthMap]) => ( - - {Array.from(monthMap.entries()).map(([month, monthItems]) => { - const monthKey = `${year}-${month}`; - const isDefaultOpen = monthKey === firstMonthKey; + const groupedByRelease = groupBlogSidebarItemsByRelease(items, releaseMap); - return ( - - - - ); - })} - - ))} - - ); - } else { - return ; - } + return ( + <> + {groupedByRelease.map((group, index) => ( + + + + ))} + + ); } + export default memo(BlogSidebarContent); diff --git a/website/src/theme/BlogSidebar/Desktop/index.tsx b/website/src/theme/BlogSidebar/Desktop/index.tsx index a322c7e21f..906e1e78e5 100644 --- a/website/src/theme/BlogSidebar/Desktop/index.tsx +++ b/website/src/theme/BlogSidebar/Desktop/index.tsx @@ -2,7 +2,7 @@ * Custom BlogSidebar/Desktop that adds a collapsible sidebar. * Collapsed by default to give more screen real estate to content. */ -import React, { memo, useState } from 'react'; +import React from 'react'; import clsx from 'clsx'; import { translate } from '@docusaurus/Translate'; import { @@ -12,6 +12,7 @@ import { import BlogSidebarContent from '@theme/BlogSidebar/Content'; import type { Props as BlogSidebarContentProps } from '@theme/BlogSidebar/Content'; import type { Props } from '@theme/BlogSidebar/Desktop'; +import { useSidebarCollapsed } from '../context'; import styles from './styles.module.css'; @@ -29,13 +30,13 @@ const ListComponent: BlogSidebarContentProps['ListComponent'] = ({ items }) => { function BlogSidebarDesktop({ sidebar }: Props) { const items = useVisibleBlogSidebarItems(sidebar.items); - const [isCollapsed, setIsCollapsed] = useState(true); + const { isCollapsed, setIsCollapsed } = useSidebarCollapsed(); return (