mirror of
https://github.com/jdx/mise-action.git
synced 2026-05-18 15:31:54 +00:00
Switches the project's package-manager surface from a mix of npm / pnpm / bun (different commands in different files) to a single tool: [aube](https://aube.en.dev), en.dev's pnpm-compat package manager (native Rust, fast, drops cleanly into pnpm / npm-compatible workflows). ## What changed - **Workflows** (`.github/workflows/*.yml`): every `npm ci` → `aube ci`; every `npm run X` → `aube run X`. The `actions/setup-node@…` step still pins Node, then a new `jdx/mise-action@v4` step with `install_args: aube` installs aube. The `cache: npm` directive on `setup-node` is dropped (aube uses its own store under `~/.cache/aube`; reusing the npm cache wouldn't help). - **`mise.toml`**: every task that ran `npm run X` or `bun run X` now runs `aube run X`. Added `aube = '1.3'` to the tool list so `mise install` provisions it locally. - **`CLAUDE.md`**: development command snippets updated to `aube install` / `aube run all` etc. ## What didn't change - **`package-lock.json`** stays as the canonical lockfile — aube reads it directly, no separate `aube-lock.yaml` is generated. Running `npm install` still works for any dev who hasn't switched to aube yet. - **`package.json` scripts** still use `npm run X` for nested invocations (e.g. `"all": "npm run format:write && …"`). The literal `npm` in those works for both npm callers and aube callers (aube exec'd shell finds `npm` in PATH; the inner invocation reads the same package.json scripts). Avoiding the rewrite to `aube run X` here keeps the scripts PM-agnostic. - **`dist/`** is byte-identical after `aube run all` — parity with npm-built dist verified locally before this commit. ## `.npmrc` Adds a single line: `node-linker=hoisted`. This is the pnpm/aube key that forces a flat, npm-style `node_modules` layout instead of the default symlink/virtual-store layout. Required because `rollup --configPlugin @rollup/plugin-typescript` needs to resolve the plugin from cwd's node_modules; the isolated layout puts rollup under `node_modules/.aube/...` where standard module resolution can't reach back to the project root for the plugin. npm reads `.npmrc` too but ignores `node-linker` (npm always installs flat), so the file is safe for both PMs. ## Why aube Single tool replacing three: less context-switching for contributors, fewer places to run `npm audit` / `bun upgrade` / `pnpm dedupe`, and aube's resolver is faster than npm's (the `aube install` cold-cache run takes ~3s vs `npm ci` at ~10s for this repo's deps).
63 lines
2.3 KiB
Markdown
63 lines
2.3 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This is a GitHub Action that installs and configures mise, a polyglot runtime manager. The action is written in TypeScript and published to the GitHub Actions marketplace.
|
|
|
|
## 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
|
|
aube install
|
|
|
|
# Build, format, lint, and package
|
|
aubr all
|
|
|
|
# Individual commands
|
|
aubr format:write # Format code with Prettier
|
|
aubr lint # Run ESLint and format check
|
|
aubr package # Bundle with rollup for distribution
|
|
|
|
# Testing
|
|
aubr all # Run full build pipeline
|
|
./scripts/test.sh # Integration test script
|
|
```
|
|
|
|
## Architecture
|
|
|
|
The action follows GitHub's standard TypeScript action structure:
|
|
|
|
1. **Entry Point**: `src/index.ts` - Main action logic that:
|
|
- Downloads and installs mise binary
|
|
- Manages caching through GitHub Actions cache
|
|
- Configures environment variables (MISE_*, GITHUB_TOKEN)
|
|
- Runs mise commands (install, reshim, etc.)
|
|
- Exports mise environment variables to GITHUB_ENV
|
|
|
|
2. **Distribution**: `dist/index.js` - Compiled and bundled output (must be committed)
|
|
|
|
3. **Action Definition**: `action.yml` - Defines inputs, outputs, and metadata
|
|
|
|
## Key Implementation Details
|
|
|
|
- **Cache Management**: Uses content-addressable caching based on mise config files (.mise.toml, .tool-versions, etc.)
|
|
- **Binary Download**: Supports downloading from GitHub releases or mise.jdx.dev
|
|
- **Platform Support**: Handles Linux (glibc/musl), macOS, and Windows
|
|
- **Environment Setup**: Automatically adds mise bin and shims directories to PATH
|
|
- **GitHub API**: Uses GITHUB_TOKEN to avoid rate limits when installing GitHub-hosted tools
|
|
|
|
## Important Notes
|
|
|
|
- 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
|