diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 1760b31..26a63ea 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -17,17 +17,13 @@ jobs: - name: Checkout PR branch uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - with: - node-version: '24' - cache: 'npm' + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4 - name: Install dependencies - run: npm ci + run: aube ci - name: Build and package - run: npm run all + run: aubr all - name: autofix.ci uses: autofix-ci/action@c5b2d67aa2274e7b5a18224e8171550871fc7e4a # v1 diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index f09cba0..4c49be4 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -33,19 +33,15 @@ jobs: id: checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - name: Setup Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - with: - node-version: 24 - cache: npm + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4 - name: Install Dependencies id: install - run: npm ci + run: aube ci - name: Build dist/ Directory id: build - run: npm run bundle + run: aubr bundle - name: Compare Expected and Actual Directories id: diff diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c6a454..b94ceb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,24 +21,25 @@ jobs: id: checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - name: Setup Node.js - id: setup-node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - with: - node-version: 24 - cache: npm + # `mise.toml` pins both Node and aube; mise-action installs + # whatever's listed there. Reads `package-lock.json` + # directly — no separate `aube-lock.yaml` to maintain. + # `.npmrc` pins `node-linker=hoisted` so the layout is + # npm-flat (rollup's `--configPlugin` resolution + # requires this). + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4 - name: Install Dependencies - id: npm-ci - run: npm ci + id: aube-ci + run: aube ci - name: Check Format - id: npm-format-check - run: npm run format:check + id: aube-format-check + run: aubr format:check - name: Lint - id: npm-lint - run: npm run lint + id: aube-lint + run: aubr lint # - name: Test # id: npm-ci-test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6fb49fa..55f4d82 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,10 +17,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - run: | - npm install - - run: | - npm run all + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4 + - run: aube install + - run: aubr all test: # make sure the action works on a clean machine without building strategy: fail-fast: false diff --git a/.gitignore b/.gitignore index 47fb503..d72ca4a 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,10 @@ __tests__/runner/* .idea .vscode *.code-workspace + +# Generated by `aube install` to record build-script approvals. +# We've chosen not to commit our approval state — the build doesn't +# need any package's install scripts to run, and the file gets +# regenerated each install anyway. The harmless "ignored build +# scripts" warning in `aube install` output is the cost. +pnpm-workspace.yaml diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..cef654d --- /dev/null +++ b/.npmrc @@ -0,0 +1,11 @@ +# Forces a flat npm-style `node_modules/` layout instead of +# aube's default symlink/virtual-store. Required for +# deterministic `dist/index.js.map` source-map paths in CI: +# without flat layout, rollup embeds absolute paths into +# aube's per-user cache dir (`/home/runner/.cache/aube/...`), +# which differ across machines and break the `check-dist` +# workflow's byte-equality check. +# +# npm reads `.npmrc` too but ignores `node-linker` (npm +# always installs flat), so the file is safe for both PMs. +node-linker=hoisted diff --git a/CLAUDE.md b/CLAUDE.md index 8dab050..4694dce 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,21 +8,29 @@ This is a GitHub Action that installs and configures mise, a polyglot runtime ma ## Development Commands +This project uses [aube](https://aube.en.dev) as its package +manager (en.dev's pnpm-compat PM, native Rust). It reads +`package-lock.json` directly — no separate `aube-lock.yaml`. +`mise install` will install the pinned aube version +automatically; you can also use `npm` if you prefer (the +`.npmrc`'s `node-linker=hoisted` pin is aube-specific and +ignored by npm). + ```bash # Install dependencies -npm install +aube install # Build, format, lint, and package -npm run all +aubr all # Individual commands -npm run format:write # Format code with Prettier -npm run lint # Run ESLint and format check -npm run package # Bundle with ncc for distribution +aubr format:write # Format code with Prettier +aubr lint # Run ESLint and format check +aubr package # Bundle with rollup for distribution # Testing -npm run all # Run full build pipeline -./scripts/test.sh # Integration test script +aubr all # Run full build pipeline +./scripts/test.sh # Integration test script ``` ## Architecture @@ -50,6 +58,6 @@ The action follows GitHub's standard TypeScript action structure: ## Important Notes -- Always run `npm run all` before committing to ensure dist/ is updated +- Always run `aubr all` before committing to ensure dist/ is updated - The dist/ folder must be committed as GitHub Actions runs the compiled code - Test changes using the action itself (uses: ./) in test workflows diff --git a/mise.toml b/mise.toml index 576926a..47f468c 100644 --- a/mise.toml +++ b/mise.toml @@ -1,13 +1,14 @@ -tasks.pre-commit = ["npm run all", "git add dist"] +tasks.pre-commit = ["aubr all", "git add dist"] tasks.test.alias = ["t"] -tasks.test.run = ["npm run all"] -tasks.lint = "bun run lint" -tasks."lint:fix" = "bun run format:write" -tasks.version = "npm version" +tasks.test.run = ["aubr all"] +tasks.lint = "aubr lint" +tasks."lint:fix" = "aubr format:write" +tasks.version = "aube version" tasks.release-plz = "./scripts/release-plz.sh" [tools] node = '24' +aube = '1.4' git-cliff = 'latest' gh = 'latest' communique = 'latest' diff --git a/package.json b/package.json index 3081ac7..5c82286 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "format:check": "prettier --check **/*.ts", "format:write": "prettier --write **/*.ts", "lint": "eslint . && npm run format:check", - "package": "rimraf ./dist && rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript", + "package": "rimraf ./dist && rollup --config rollup.config.mjs", "package:watch": "npm run package -- --watch", "version": "./scripts/version.sh", "prepare": "husky" diff --git a/rollup.config.ts b/rollup.config.mjs similarity index 100% rename from rollup.config.ts rename to rollup.config.mjs