Repository navigation
Releases: cloudposse/github-action-setup-atmos
Release list
v3.6.0
ci: use free hosted runner for install tests Erik Osterman (Cloud Posse) (@osterman) (#121)
## SummaryMove 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-offlineyarn lint:checkyarn format:checkyarn test:coverage: 63 tests pass; 96.61% line and 96.92% statement coverageyarn 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
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 |
Release Notes
eslint/eslint (eslint)
v10.8.1
Bug Fixes
18eb0a7fix: prevent ASI hazard inno-unused-labelsautofix (#21173) (dongkyu lee)151ba3ffix: false positives ingetter-returnandaccessor-pairs(#21163) (Grit)6898df9fix: ignore meta-property names inid-denylist(#21166) (Pixel)4d7db66fix: ignore meta-property names inid-match(#21167) (Pixel)677214efix: handle ASI hazards in no-unused-vars removeVar suggestion (#20935) (kuldeep kumar)
Documentation
7d0cbf8docs: Update README (GitHub Actions Bot)0a05812docs: add missing backticks tono-duplicate-imports.js(#21183) (Lee Daeun)678c90bdocs: Update README (GitHub Actions Bot)8a10424docs: Update README (GitHub Actions Bot)69bb948docs: Update README (GitHub Actions Bot)
Chores
0a14800chore: update github/codeql-action action to v4.37.4 (#21196) (renovate[bot])05adcb1test: fix failing ecosystem test foreslint-plugin-unicorn(#21191) (Lazizbek Ergashev)5611035test: add error locations info tono-void(#21185) (Lee Daeun)ee47333ci: bump github/codeql-action from 4 to 4.37.3 (#21176) (dependabot[bot])f131c03chore: improve ecosystem test failure reporting (#20937) (crimsonjay0)1f6eddechore: update ecosystem plugins (#21182) (ESLint Bot)d3266fbchore: unpinwebpackdependency (#21172) (Francesco Trotta)65a6519chore: add allowScripts field to package.json (#21092) (GiHoon Noh)22e5256ci: addtriage:nolabel to Dependabot PRs (#21141) (lumir)55c9038ci: bump actions/labeler from 6 to 7 (#21159) (dependabot[bot])7280e78chore: update dependency prettier to v3.9.6 (#21162) (renovate[bot])eddbad6test: fix failing ecosystem test foreslint-plugin-unicorn(#21156) (Francesco Trotta)60a178dchore: update ecosystem plugins (#21150) (ESLint Bot)f9f61dctest: add error locations tono-unreachable(#21151) (JIYEON)d086293test: add error locations tono-undef(#21147) (JIYEON)cc01b67test: add error locations tono-useless-catch(#21144) (devoil)688e75echore: add missing backticks in JSDoc (#21143) (Bo Hyun Kim)7c1e175test: add error locations torequire-await(#21145) (Grit)588a26dtest: add error locations tono-extra-label(#21139) (dongkyu lee)059aa89test: add error locations tono-useless-concat(#21140) (dongkyu lee)5a452a8test: add error locations tono-const-assign(#21138) (dongkyu lee)
v10.8.0
Features
Bug Fixes
6b8d2f7fix: escape reserved characters in rule id inhtmlformatter (#21129) (Francesco Trotta)9091071fix: preventno-unreachable-loopcrash when all loop types are ignored (#21116) (Pixel)e23fafefix: prefer-object-spread add semicolon when adding parenthesis (#21081) (synthex-byte)20b5ad0fix: quadratic-time regex inprefer-template(#21096) (Milos Djermanovic)8b6f6c0fix: apply ignore configs to computed methods in class-methods-use-this (#21094) (Pixel)b2c608cfix: NewExpression with parenthesized callee in `preserve-caught-erro...
v3.4.0
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 |
Release Notes
mthadley/eslint-plugin-sort-destructure-keys (eslint-plugin-sort-destructure-keys)
v1.6.0
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 |
Release Notes
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
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 |
Release Notes
eslint/eslint (eslint)
v8.57.1
Bug Fixes
a19072ffix: add logic to handle fixTypes in the lintText() method (#18900) (Francesco Trotta)04c7188fix: Don't lint same file multiple times (#18899) (Francesco Trotta)87ec3c4fix: do not throw when defining a global named__defineSetter__(#18898) (Francesco Trotta)60a1267fix: Provide helpful error message for nullish configs (#18889) (Milos Djermanovic)a0dea8efix: allownamein global ignores, fix--no-ignorefor non-global (#18875) (Milos Djermanovic)3836bb4fix: do not crash on error infs.walkfilter (#18886) (Milos Djermanovic)2dec349fix: skip processor code blocks that match only universal patterns (#18880) (Milos Djermanovic)
Documentation
6a5add4docs: v8.x Add EOL banner (#18744) (Amaresh S M)b034575docs: v8.x add version support page to the dropdown (#18731) (Amaresh S M)760ef7ddocs: v8.x add version support page in the side navbar (#18740) (Amaresh S M)428b7eadocs: Add Powered by Algolia label to the search (#18658) (Amaresh S M)c68c07fdocs: version selectors synchronization (#18265) (Milos Djermanovic)
Build Related
Chores
140ec45chore: upgrade @eslint/js@8.57.1 (#18913) (Milos Djermanovic)bcdfc04chore: package.json update for @eslint/js release (Jenkins)3f6ce8dchore: pin vite-plugin-commonjs@0.10.1 (#18910) (Milos Djermanovic)9f07549chore: ignore/docs/v8.xin link checker (#18660) (Milos Djermanovic)
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
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/applysteps withinstall-wrapper: truecomplete 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'sif (require.main === module)entry guard evaluates tofalseonce bundled by@vercel/ncc, sorunWrapper()is never invoked in production. - Existing tests never caught this because
wrapper.test.tsimports and callsrunWrapper()directly, bypassing the guard, and the CIintegrationjob 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
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
atmosimmediately 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
Update Node version from 20 to 24 in action.yml Igor Rodionov (@goruha) (#108)
## what * Upgrade Node 24why
- Node 20 is deprecated
References
v2.1.0
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
fix: Replace io.mv with copy+delete to fix EXDEV errors in DinD environments PePe Amengual (@jamengual) (#106)
## SummaryThis 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
- DinD Environment: Test in ARC DinD mode runner
- Pre-installed atmos: Test with atmos already in PATH
- Version matching: Test with version specs (latest, specific versions, semver ranges)
- Fallback behavior: Test when existing version doesn't satisfy requirement
- 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:
EXDEVerror 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-harnesswithatmosfor 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-harnesswithatmosfor readme genration
References
- DEV-3229 Migrate from build-harness to atmos
v2.0.1
Latest points to most recent stable release Ben (@Benbentwo) (#100)
## what * Initial Tests * Disables fetching pre-releases (Release candidates) when pointing to latestwhy
- Latest should point at the latest stable release
docs: update version -> atmos-version Weston Platter (@westonplatter) (#99)
## what * have example match `input` specificationUpdate README Igor Rodionov (@goruha) (#76)
## what * Update `cloudposse/github-action-setup-atmos@v1` to `cloudposse/github-action-setup-atmos@v2` in READMEwhy
- 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` fileswhy
- Re-apply
.github/settings.ymlfrom 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 PRwhy
- 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` repowhy
- 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 docswhy
To have most recent changes of README.md and doc from origin templates