Skip to content

chore(server, noora, handbook): replace pnpm with aube#10584

Merged
pepicrft merged 7 commits intomainfrom
chore/replace-pnpm-with-aube
May 4, 2026
Merged

chore(server, noora, handbook): replace pnpm with aube#10584
pepicrft merged 7 commits intomainfrom
chore/replace-pnpm-with-aube

Conversation

@pepicrft
Copy link
Copy Markdown
Contributor

@pepicrft pepicrft commented May 2, 2026

Replaces pnpm with aube as the JavaScript package manager across the repository.

Changes

  • mise configs (server/, noora/, handbook/): swap pnpm for aube in mise.toml / .mise.toml and drop pnpm entries from mise.lock.
  • Mise tasks: update handbook/mise/tasks/*, server/mise/tasks/*, and mise/tasks/noora/* to invoke aube instead of pnpm.
  • GitHub Actions: update handbook.yml, noora.yml, release.yml, and server.yml to install/use aube, swap cache paths to ~/.local/share/aube and ~/.cache/aube, and drop the PNPM_HOME env var.
  • Dockerfiles: server/Dockerfile and noora/storybook/Dockerfile now install @endevco/aube via npm and use aube install / aube run build with an aube cache mount.
  • Mix aliases: server/mix.exs assets.setup / assets.build use aube install --filter noora and aube run build.
  • noora/package.json: drop packageManager: pnpm@10.32.0; rewrite build to call aube run build:js && aube run build:css.
  • Docs: AGENTS.md and server/AGENTS.md reflect the new package manager.

How to test locally

  • From server/: mise install && mise run install && mise run dev.
  • From noora/: mise install && aube install && aube run build && aube run test.
  • From handbook/: mise install && mise run install && mise run dev.

Switches the JavaScript package manager from pnpm to aube across
workflows, mise configs, Dockerfiles, mix aliases, and docs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dosubot dosubot Bot added size:M For issues that take a handful of hours to implement javascript Pull requests that update javascript code labels May 2, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blick review

1 finding across 2 reviews.

Findings outside this PR's diff

  • P2 Badge noora/mise.lock:1 - Missing aube entries in mise.lock

aube refuses to resolve workspace members that lack a `version` field,
so handbook builds and server esbuild jobs were failing on install.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jdx added a commit to endevco/aube that referenced this pull request May 2, 2026
`CI` is not propagated into `docker build` RUN steps, so a
Dockerfile running `aube install` falls into the gvs branch and
materializes `node_modules/.aube/<dep>` as symlinks pointing at
`~/.cache/aube/virtual-store/<dep>`. A downstream
`COPY --from=npm-deps /app/node_modules /app/node_modules` then
ships dangling symlinks; tools like esbuild fail with
`Could not resolve "<dep>"`.

Add `is_container()` (checks `/.dockerenv` and `/run/.containerenv`)
and gate the gvs default on both `!is_ci()` and `!is_container()`,
so per-project materialization wins inside Docker / Podman builds
without requiring users to set `CI=1` or
`--disable-global-virtual-store`.

Surfaced by tuist/tuist#10584's Docker build:
`mix esbuild docs --minify` could not resolve "typesense" after
`COPY --from=npm-deps`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jdx
Copy link
Copy Markdown

jdx commented May 2, 2026

add ENV CI=1 to the npm-deps stage of server/Dockerfile and noora/storybook/Dockerfile, or pass --disable-global-virtual-store to the aube install invocations there

you don't want to use the gvs in CI but aube isn't detecting that across the docker boundary since CI isn't set

jdx added a commit to endevco/aube that referenced this pull request May 2, 2026
## Summary
Real-world failure:
[tuist/tuist#10584](tuist/tuist#10584) tried to
swap pnpm for aube and CI hit `workspace package noora at noora has no
\`version\` field` from
[crates/aube/src/commands/install/mod.rs:1869](crates/aube/src/commands/install/mod.rs:1869).
pnpm accepts the same repo without complaint.

The unconditional check predates the resolver's current `workspace:*` /
`workspace:^` / `workspace:~` / bare-`*` fallback. The comment's
collision rationale ("two unversioned members under one dep_path")
doesn't hold either: `dep_path` keys on `(name, version)` and two
members have distinct names by construction.

Fix: fall back to `"0.0.0"` when `version` is absent. `workspace:*` /
`workspace:^` / `workspace:~` / bare-`*` siblings still link locally
(those branches in `resolve_workspace` accept any ws version
regardless). A specific range like `workspace:^2.0.0` against an
unversioned member correctly fails to satisfy, matching pnpm.

## Test plan
- [x] `cargo test` (full suite green)
- [x] `cargo clippy --all-targets -- -D warnings`
- [x] `cargo fmt --check`
- [x] `mise run test:bats test/workspace.bats` — 19 pass, including the
new regression #4
- [ ] CI green on push

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds the aube lockfile entries that mise generated on install and
refreshes the generator URL comment in the root lockfile.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@tuist
Copy link
Copy Markdown

tuist Bot commented May 3, 2026

🛠️ Tuist Run Report 🛠️

Builds 🔨

Scheme Status Duration Commit
TuistAcceptanceTests 18.3s 711ad63c0
TuistUnitTests 21.3s d5c65a778

pepicrft and others added 2 commits May 3, 2026 07:38
aube ignores `--ignore-workspace`, so the root pnpm-workspace.yaml made
`aube install` in /server install workspace-only packages and skip
server's own deps (breaking format and esbuild jobs). Drop the workspace
yaml entirely (handbook, noora, server are independent projects), give
each its own aube-lock.yaml, and update install scripts that used
`--filter noora` to cd-into-noora-then-install instead.

Other fixes bundled here:
- pass `--disable-global-virtual-store` to aube install in Dockerfiles
  so node_modules symlinks survive cross-stage COPY.
- add `mise use -g aube` and root mise.toml entry so the aube shim has
  a version when mise's npm: backend (used by Review) calls aube.
- add `aube.allowBuilds` to subproject package.json files (ports the
  workspace's onlyBuiltDependencies).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Match the version used elsewhere in the repo so the global install is
deterministic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@pepicrft pepicrft self-assigned this May 3, 2026
@pepicrft pepicrft requested a review from fortmarek May 3, 2026 05:44
pepicrft and others added 2 commits May 3, 2026 07:45
aube is already declared in the root mise.toml, so jdx/mise-action
installs it during setup and the explicit `mise use -g aube@1.6.2`
adds nothing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per @jdx, aube auto-disables the global virtual store when CI is set,
so we don't need the explicit `--disable-global-virtual-store` flag in
the Dockerfiles. Setting CI=1 in the npm-deps stages restores the same
behavior across the docker boundary that was missing.

Also adds the platform-specific aube checksums to noora/mise.lock and
the root mise.lock that were missing after `mise install` ran without
fanning out across all platforms.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label May 4, 2026
@pepicrft pepicrft merged commit e968625 into main May 4, 2026
44 checks passed
@pepicrft pepicrft deleted the chore/replace-pnpm-with-aube branch May 4, 2026 07:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

javascript Pull requests that update javascript code lgtm This PR has been approved by a maintainer size:M For issues that take a handful of hours to implement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants