Skip to content

Releases: cloudposse/github-action-setup-atmos

v3.6.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 18 Sep 11:57
9e8d1e2
ci: use free hosted runner for install tests Erik Osterman (Cloud Posse) (@osterman) (#121) ## Summary

Move the public repository’s remaining RunsOn install job to ubuntu-latest. Standard GitHub-hosted runners are free for public repositories.

The hosted runner exposed pre-existing default-branch drift that the old RunsOn dependency cache had masked: package.json no longer matched yarn.lock, ESLint 10 was incompatible with the repository’s legacy ESLint configuration/plugins, and the checked-in dist/ bundle was stale. This PR reconciles both lockfiles, restores the compatible ESLint 8.57.1 line, and commits the reproducible Node 24 action bundle.

Validation

  • yarn --frozen-lockfile --prefer-offline
  • yarn lint:check
  • yarn format:check
  • yarn test:coverage: 63 tests pass; 96.61% line and 96.92% statement coverage
  • yarn clean && yarn build && yarn build:wrapper
  • generated dist/ verification passes
  • actionlint passes
  • no RunsOn routing labels remain in test-install.yaml

Expected savings: approximately $25–50/month.

v3.5.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 12 Aug 21:07
60878d4
chore(deps): update dependency eslint to v10 @[renovate[bot]](https://github.com/apps/renovate) (#89) > ℹ️ **Note** > > This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
eslint (source) 8.57.1 → 10.8.1 age confidence

Release Notes

eslint/eslint (eslint)

v10.8.1

Compare Source

Bug Fixes

  • 18eb0a7 fix: prevent ASI hazard in no-unused-labels autofix (#​21173) (dongkyu lee)
  • 151ba3f fix: false positives in getter-return and accessor-pairs (#​21163) (Grit)
  • 6898df9 fix: ignore meta-property names in id-denylist (#​21166) (Pixel)
  • 4d7db66 fix: ignore meta-property names in id-match (#​21167) (Pixel)
  • 677214e fix: handle ASI hazards in no-unused-vars removeVar suggestion (#​20935) (kuldeep kumar)

Documentation

  • 7d0cbf8 docs: Update README (GitHub Actions Bot)
  • 0a05812 docs: add missing backticks to no-duplicate-imports.js (#​21183) (Lee Daeun)
  • 678c90b docs: Update README (GitHub Actions Bot)
  • 8a10424 docs: Update README (GitHub Actions Bot)
  • 69bb948 docs: Update README (GitHub Actions Bot)

Chores

v10.8.0

Compare Source

Features

Bug Fixes

  • 6b8d2f7 fix: escape reserved characters in rule id in html formatter (#​21129) (Francesco Trotta)
  • 9091071 fix: prevent no-unreachable-loop crash when all loop types are ignored (#​21116) (Pixel)
  • e23fafe fix: prefer-object-spread add semicolon when adding parenthesis (#​21081) (synthex-byte)
  • 20b5ad0 fix: quadratic-time regex in prefer-template (#​21096) (Milos Djermanovic)
  • 8b6f6c0 fix: apply ignore configs to computed methods in class-methods-use-this (#​21094) (Pixel)
  • b2c608c fix: NewExpression with parenthesized callee in `preserve-caught-erro...
Read more

v3.4.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 12 Aug 20:22
af6b379
chore(deps): update dependency eslint-plugin-sort-destructure-keys to v1.6.0 @[renovate[bot]](https://github.com/apps/renovate) (#83) This PR contains the following updates:
Package Change Age Confidence
eslint-plugin-sort-destructure-keys 1.5.0 → 1.6.0 age confidence

Release Notes

mthadley/eslint-plugin-sort-destructure-keys (eslint-plugin-sort-destructure-keys)

v1.6.0

Compare Source


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

chore(deps): update dependency @actions/github to v6.0.1 @[renovate[bot]](https://github.com/apps/renovate) (#109) This PR contains the following updates:
Package Change Age Confidence
@actions/github (source) 6.0.0 → 6.0.1 age confidence

Release Notes

actions/toolkit (@​actions/github)

v6.0.1


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

v3.3.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 12 Aug 19:40
chore(deps): update dependency eslint to v8.57.1 @[renovate[bot]](https://github.com/apps/renovate) (#113) This PR contains the following updates:
Package Change Age Confidence
eslint (source) 8.57.0 → 8.57.1 age confidence

Release Notes

eslint/eslint (eslint)

v8.57.1

Compare Source

Bug Fixes

  • a19072f fix: add logic to handle fixTypes in the lintText() method (#​18900) (Francesco Trotta)
  • 04c7188 fix: Don't lint same file multiple times (#​18899) (Francesco Trotta)
  • 87ec3c4 fix: do not throw when defining a global named __defineSetter__ (#​18898) (Francesco Trotta)
  • 60a1267 fix: Provide helpful error message for nullish configs (#​18889) (Milos Djermanovic)
  • a0dea8e fix: allow name in global ignores, fix --no-ignore for non-global (#​18875) (Milos Djermanovic)
  • 3836bb4 fix: do not crash on error in fs.walk filter (#​18886) (Milos Djermanovic)
  • 2dec349 fix: skip processor code blocks that match only universal patterns (#​18880) (Milos Djermanovic)

Documentation

Build Related

  • 35d366a build: Support updates to previous major versions (#​18870) (Milos Djermanovic)

Chores


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

v3.2.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 11 Jul 02:22
89c34b2
fix: install-wrapper silent no-op regression Erik Osterman (Cloud Posse) (@osterman) (#115) ## what * Add a real, unmocked integration test (`wrapper-cache-integration.test.ts`) that runs the installer's actual `tc.cacheDir()` copy and then spawns the resulting `atmos` wrapper as a real child process. * Add a focused test (`wrapper-entrypoint.test.ts`) that runs the compiled `dist/wrapper/index.js` directly, isolated from the installer/tool-cache entirely. * Add a mocked-level regression guard in `setup-atmos.test.ts` for the `install-wrapper: true` fresh-install cache path. * Add an assertion to the `integration` CI job in `main.yml` so it fails if the wrapper's `stdout` output comes back empty.

why

  • Users reported that atmos terraform deploy/apply steps with install-wrapper: true complete instantly with exit code 0 and zero output — a silent no-op.
  • These new tests reproduce that exact symptom today (empty stdout, exit code 0), pinpointing the cause: dist/wrapper/index.js's if (require.main === module) entry guard evaluates to false once bundled by @vercel/ncc, so runWrapper() is never invoked in production.
  • Existing tests never caught this because wrapper.test.ts imports and calls runWrapper() directly, bypassing the guard, and the CI integration job printed wrapper output without ever asserting it was non-empty.
  • This PR is reproduction-only (per request); the actual entry-guard fix is a follow-up.

references

  • Reported in the community Slack thread about github-action-setup-atmos@v3.

v3.1.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 03 Jul 20:56
Fix setup-atmos Windows installs Erik Osterman (Cloud Posse) (@osterman) (#111) ## what * Fix release asset parsing for Windows `.exe` assets and install runnable `atmos.exe`/wrapper shims across OSes. * Add checksum validation input defaulting to `warn`, 80% coverage enforcement, expanded Jest tests, and OS/mode CI matrix. * Rebuild committed `dist/` artifacts.

why

  • Windows runners need atmos immediately after setup for wrapper and no-wrapper modes.
  • Checksum validation catches corrupted downloads while preserving current behavior when checksums are missing.

references

  • Validation: npm run format:check, npm run lint:check, npm run test:coverage -- --runInBand, npm run clean && npm run build && npm run build:wrapper.

v3.0.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 12 Mar 22:59
49625d9
Update Node version from 20 to 24 in action.yml Igor Rodionov (@goruha) (#108) ## what * Upgrade Node 24

why

  • Node 20 is deprecated

References

v2.1.0

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 23 Feb 17:58
822766b
chore: update README.yaml to correct example usage of atmos-version Jason Washburn (@jasonwashburn) (#104) ## what README example of how to specify version of atmos to use, `version` vs `atmos-version`.

why

Documentation is incorrect.

references

Was previously "fixed" in another PR by manually editing README.md, however that fix seems to have been overwritten by an automation. The README mentions using a makefile task to generate the README, but that reference also appears to be outdated in favor or some upstream atmos tooling somewhere?

v2.0.2

Choose a tag to compare

@cloudposse-releaser cloudposse-releaser released this 21 Nov 19:06
fix: Replace io.mv with copy+delete to fix EXDEV errors in DinD environments PePe Amengual (@jamengual) (#106) ## Summary

This PR fixes the EXDEV (cross-device link not permitted) error that occurs when using this action in Docker-in-Docker (DinD) and other containerized environments.

Fixes #98

Problem

In DinD environments (like ARC runners), the GitHub Actions temp directory (/__w/_temp/) and the installation target directory exist on different Docker filesystem layers. When the action attempts to use io.mv() (which calls fs.renameSync()), it fails with:

Error: EXDEV: cross-device link not permitted, rename '/__w/_temp/88be01d7-...' -> '/__w/_actions/cloudposse/github-action-setup-atmos/atmos/atmos'

This is a fundamental limitation of the rename system call - it cannot move files across different filesystems or device boundaries.

Solution

This PR implements two fixes:

1. Replace io.mv() with copy+delete pattern

File: src/installer.ts:218-223

  • Before: await io.mv(downloadPath, toolPath) - fails across device boundaries
  • After: await io.cp(downloadPath, toolPath) + await io.rmRF(downloadPath) - works across all filesystems

This is the standard workaround for cross-device file operations and is used throughout the GitHub Actions ecosystem.

2. Add detection for pre-installed atmos

Files: src/installer.ts:45-75, src/installer.ts:243-268

Added checkExistingAtmosInstallation() function that:

  • Checks if atmos is already available in PATH
  • Retrieves the installed version
  • Uses the existing installation if it satisfies the requested version spec
  • Falls back to downloading if version doesn't match or not found

This benefits users who:

  • Pre-install atmos in custom runner images
  • Use the action in environments with atmos already available
  • Want to reduce unnecessary downloads and installation time

Benefits

  • ✅ Works reliably in DinD environments (ARC runners, containerized CI/CD)
  • ✅ Reduces unnecessary downloads when atmos is pre-installed
  • ✅ Maintains full backward compatibility
  • ✅ Proper error handling with debug logging
  • ✅ No breaking changes to the action interface

Testing Recommendations

  1. DinD Environment: Test in ARC DinD mode runner
  2. Pre-installed atmos: Test with atmos already in PATH
  3. Version matching: Test with version specs (latest, specific versions, semver ranges)
  4. Fallback behavior: Test when existing version doesn't satisfy requirement
  5. Standard runner: Verify it still works in standard GitHub-hosted runners

Technical Details

The io.mv() function from @actions/io uses the underlying ioUtil.rename() method, which relies on the OS-level rename syscall. This syscall has the limitation that it cannot move files across different filesystem mount points or devices.

In Docker-in-Docker:

  • Temp directory: /__w/_temp/ (on one overlay filesystem)
  • Installation directory: /__w/_actions/... (on a different overlay filesystem)
  • Result: EXDEV error when attempting rename

The copy+delete pattern avoids this limitation by performing two separate operations, each within their respective filesystems.

Related Issues

  • Fixes #98
  • Related discussion in cloudposse/github-action-atmos-terraform-plan about DinD compatibility

🤖 Automatic Updates

Replace Makefile with atmos.yaml Erik Osterman (Cloud Posse) (@osterman) (#105) ## what - Remove `Makefile` - Add `atmos.yaml`

why

  • Replace build-harness with atmos for readme genration

References

  • DEV-3229 Migrate from build-harness to atmos
Replace Makefile with atmos.yaml Erik Osterman (Cloud Posse) (@osterman) (#102) ## what - Remove `Makefile` - Add `atmos.yaml`

why

  • Replace build-harness with atmos for readme genration

References

  • DEV-3229 Migrate from build-harness to atmos

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 24 Apr 21:55
Latest points to most recent stable release Ben (@Benbentwo) (#100) ## what * Initial Tests * Disables fetching pre-releases (Release candidates) when pointing to latest

why

  • Latest should point at the latest stable release
docs: update version -> atmos-version Weston Platter (@westonplatter) (#99) ## what * have example match `input` specification
Update README Igor Rodionov (@goruha) (#76) ## what * Update `cloudposse/github-action-setup-atmos@v1` to `cloudposse/github-action-setup-atmos@v2` in README

why

  • To use the latest version in example

🤖 Automatic Updates

Update .github/settings.yml Erik Osterman (Cloud Posse) (@osterman) (#96) ## what - Update `.github/settings.yml` - Drop `.github/auto-release.yml` files

why

  • Re-apply .github/settings.yml from org level
  • Use organization level auto-release settings

references

  • DEV-1242 Add protected tags with Repository Rulesets on GitHub
Update release workflow to allow pull-requests: write Erik Osterman (Cloud Posse) (@osterman) (#92) ## what - Update workflow (`.github/workflows/release.yaml`) to have permission to comment on PR

why

  • Add comment to PR when it is released
Use GitHub Action Workflows from `cloudposse/.github` Repo Erik Osterman (Cloud Posse) (@osterman) (#90) ## what - Update workflows (`.github/workflows/settings.yaml`) to use shared workflows from `.github` repo

why

  • Reduce nested levels of reusable workflows
Use GitHub Action Workflows from `cloudposse/.github` Repo Erik Osterman (Cloud Posse) (@osterman) (#84) ## what - Update workflows (`.github/workflows/settings.yaml`)

why

  • Support new readme generation workflow.
  • Generate banners
Update README.md and docs Cloud Posse Bot (CI/CD) (@cloudpossebot) (#72) ## what This is an auto-generated PR that updates the README.md and docs

why

To have most recent changes of README.md and doc from origin templates