Skip to content

Replace Makefiles with just - #255

Merged
JoeyBF merged 6 commits into
SpectralSequences:masterfrom
JoeyBF:claude/makefiles-to-just-872xjz
Jul 2, 2026
Merged

Replace Makefiles with just#255
JoeyBF merged 6 commits into
SpectralSequences:masterfrom
JoeyBF:claude/makefiles-to-just-872xjz

Conversation

@JoeyBF

@JoeyBF JoeyBF commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

Converts the three Makefiles (ext, web_ext/sseq_gui, web_ext/steenrod_calculator) to just justfiles and updates every caller. Behavior is preserved — the recipes run the same underlying cargo/wasm-bindgen/wasm-opt/pytest commands.

Changes

  • New justfiles replacing the Makefiles in ext/, web_ext/sseq_gui/, and web_ext/steenrod_calculator/.
  • ext/justfile: the Make pattern-rules over examples/benchmarks/* become
    • parametrized recipes just bench NAME, just bench-concurrent NAME, just fix-bench NAME (replacing make examples/benchmarks/X), with the -nassau feature auto-selected by name suffix;
    • loop recipes benchmarks, benchmarks-nassau, benchmarks-concurrent, fix-benchmarks, fix-benchmarks-nassau.
      The benchmark's first line is expanded unquoted into an inner bash -c, reproducing the Makefile's quote-removal of the literal "" tokens.
  • web_ext/sseq_gui/justfile: WASM_UNWIND is now a justfile variable overridable via just WASM_UNWIND=1 wasm, driving if/else flag vars; test-wasm-unwind re-invokes the lib build with the override.
  • CI (.github/workflows/ext.yaml): each make -C <dir> <tgt> becomes just --working-directory <dir> --justfile <dir>/justfile <tgt>, and an extractions/setup-just@v2 step is added to every job that runs recipes.
  • Nix: pkgs.just added to the root flake.nix devTools (both subflakes inherit it via super.defaultPackages.devTools); makejust in the ext/sseq_gui app run scripts.
  • READMEs updated to document the just commands.

Notes

  • Fixes a latent bug in the old fix-benchmarks Make target (it referenced a bare BENCHMARKS instead of $(BENCHMARKS), so it did nothing); the just version works.
  • Developer-facing command change: per-file benchmarks are now just bench resolve-S_2 (and just bench-concurrent / just fix-bench) instead of make examples/benchmarks/resolve-S_2. READMEs reflect this.

Verification

Validated locally with just installed: all three justfiles parse; just bench resolve-S_2 passes (confirming the empty-string arg handling); just fix-bench round-trips without modifying the file; the WASM_UNWIND conditional evaluates to empty flags by default and the unwind flags when set; ext.yaml is valid YAML.

🤖 Generated with Claude Code


Generated by Claude Code

Summary by CodeRabbit

  • New Features
    • Migrated build, test, lint, docs, and Selenium/wasm workflows to use unified just commands.
    • Added new just automation for WebAssembly builds (including optional unwind verification) and benchmark running/blessing.
  • Documentation
    • Updated development READMEs and command snippets to replace make with just.
  • Chores
    • Removed old Makefiles and aligned CI and local tooling with the new just recipes.
    • Added just to available dev tools in the development shell.

Convert the three Makefiles (ext, web_ext/sseq_gui,
web_ext/steenrod_calculator) to justfiles and update every caller.

- ext/justfile: benchmark pattern rules become parametrized recipes
  (bench/bench-concurrent/fix-bench NAME) plus loop recipes over
  examples/benchmarks/*. The benchmark first line is expanded unquoted
  into an inner `bash -c`, reproducing the Makefile's quote-removal of
  the literal "" tokens. Also fixes the long-standing fix-benchmarks bug
  (bare BENCHMARKS instead of $(BENCHMARKS)).
- web_ext/sseq_gui/justfile: WASM_UNWIND becomes a justfile variable
  (override via `just WASM_UNWIND=1 wasm`) driving if/else flag vars;
  test-wasm-unwind re-invokes the lib build with the override.
- CI (.github/workflows/ext.yaml): swap `make -C <dir> <tgt>` for
  `just --working-directory <dir> --justfile <dir>/justfile <tgt>` and
  add an extractions/setup-just step to every job that runs recipes.
- Nix: add pkgs.just to the root flake's devTools (subflakes inherit it)
  and swap make->just in the ext/sseq_gui app run scripts.
- READMEs: update documented commands.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSAx1G1eMeCYPwNH7WNMVo
@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@JoeyBF, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 50 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 70b38543-c199-4943-84c7-b56d972b850e

📥 Commits

Reviewing files that changed from the base of the PR and between ceb4c67 and cf1e646.

📒 Files selected for processing (3)
  • .github/workflows/ext.yaml
  • ext/README.md
  • ext/justfile
📝 Walkthrough

Walkthrough

This PR replaces make-based build tooling with just-based commands across ext, web_ext/sseq_gui, and web_ext/steenrod_calculator. It adds new justfiles, removes the old Makefiles, updates CI and flake scripts, and revises README instructions to match.

Changes

Make to Just Migration

Layer / File(s) Summary
Ext justfile and benchmark recipes
ext/justfile
Defines ext build, test, lint, docs, miri, benchmark, concurrent benchmark, and benchmark blessing recipes.
Ext docs and flake wiring
ext/README.md, ext/flake.nix
Rewrites ext documentation and flake commands to use just targets.
sseq_gui justfile and wasm flow
web_ext/sseq_gui/justfile
Defines WASM setup, build, packaging, unwind verification, JS tests, serving, linting, and selenium recipes.
sseq_gui README and flake wiring
web_ext/sseq_gui/README.md, web_ext/sseq_gui/flake.nix
Updates setup, build, lint, unwind, and selenium instructions to use just.
Steenrod calculator justfile
web_ext/steenrod_calculator/justfile
Defines WASM setup, linting, release build, wasm-bindgen packaging, and asset copy steps.
CI workflow migration to just
.github/workflows/ext.yaml
Installs just in workflow jobs and replaces make invocations with just across test, miri, lint, webserver, webserver-deploy, selenium, calculator, and docs jobs.
Root devTools update
flake.nix
Adds just to the root development tools list.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

Poem

I’m a rabbit with a justfile grin,
Hopping where the clean builds begin. 🐇
No more make, just tidy lore,
Little commands, and one path more.
Thump, thump, thump—I’ve done my part,
Smooth new recipes warm my heart.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: replacing Makefiles with just-based workflows.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ext.yaml:
- Around line 23-25: Update the GitHub Actions workflow to use the newer
setup-just action and Just release. In this workflow, replace every use of
extractions/setup-just@v2 with v4, and change the just-version value in the
setup-just step from 1.34 to 1.54.0 so the action and installed tool stay
current.

In `@web_ext/sseq_gui/justfile`:
- Around line 52-78: The test-wasm-unwind recipe is validating the wrong
artifact by inspecting wasm-lib instead of the shipped wasm output. Update
test-wasm-unwind to check the bindgen/optimized wasm artifact referenced by
WASM_FILE, or invoke the wasm target so the full pipeline is exercised; use the
existing symbols test-wasm-unwind, WASM_LIB, WASM_FILE, and wasm to locate the
change.

In `@web_ext/steenrod_calculator/justfile`:
- Around line 6-10: The WASM output path construction in the justfile has a
redundant slash because WASM_OUT already includes a trailing separator. Update
the WASM_FILE definition so it uses WASM_OUT directly without adding another
"/", and adjust the related command usages that reference WASM_OUT (such as the
wasm-bindgen out-dir and copy destination) to build paths consistently with the
existing trailing slash.
- Around line 20-22: The setup-wasm recipe installs an unpinned
wasm-bindgen-cli, which can drift out of sync with the wasm-bindgen dependency
version used by the project. Update the setup-wasm target in the justfile to
install a specific 0.2.x wasm-bindgen-cli release that matches the crate
constraint, so the build remains reproducible even without a lockfile.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8d891dee-a51b-4379-bad8-1d2c8357a030

📥 Commits

Reviewing files that changed from the base of the PR and between 7ffb62d and cd31532.

📒 Files selected for processing (12)
  • .github/workflows/ext.yaml
  • ext/Makefile
  • ext/README.md
  • ext/flake.nix
  • ext/justfile
  • flake.nix
  • web_ext/sseq_gui/Makefile
  • web_ext/sseq_gui/README.md
  • web_ext/sseq_gui/flake.nix
  • web_ext/sseq_gui/justfile
  • web_ext/steenrod_calculator/Makefile
  • web_ext/steenrod_calculator/justfile
💤 Files with no reviewable changes (3)
  • web_ext/steenrod_calculator/Makefile
  • ext/Makefile
  • web_ext/sseq_gui/Makefile

Comment thread .github/workflows/ext.yaml Outdated
Comment thread web_ext/sseq_gui/justfile
Comment thread web_ext/steenrod_calculator/justfile
Comment thread web_ext/steenrod_calculator/justfile
claude added 2 commits July 1, 2026 23:22
The migration added `set -euo pipefail` to the sseq_gui `test-wasm-unwind`
recipe, which changed the behavior of

    wasm-objdump -h $WASM_LIB | grep -qi '^ *Tag '

wasm-objdump prints the section headers (including `Tag`) to stdout but can
exit non-zero on a later section it cannot parse. Under the old Makefile's
plain `sh` (no pipefail) the pipe's exit came from `grep`, so a present `Tag`
section passed. With `pipefail`, wasm-objdump's non-zero exit propagated and
failed the check even though `Tag` was found. Drop `pipefail` for this recipe
(use `set -eu`) to restore the Makefile behavior.

Also bump the CI tooling as suggested in review: extractions/setup-just@v2 ->
@v4 and just-version 1.34 -> 1.54.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSAx1G1eMeCYPwNH7WNMVo
- test-wasm-unwind (sseq_gui): build the full WASM_UNWIND=1 `wasm` pipeline and
  inspect the shipped WASM_FILE (wasm-bindgen/wasm-opt output) instead of the raw
  WASM_LIB, so breakage in the bindgen/opt stage is caught too.
- WASM_FILE path: drop the doubled separator (WASM_OUT already names the dir), so
  it is `dist/<name>_wasm_bg.wasm` rather than `dist//<name>_wasm_bg.wasm`, in
  both the sseq_gui and steenrod_calculator justfiles.
- setup-wasm: pin wasm-bindgen-cli to the version the crate resolves to (derived
  via `cargo tree`) rather than installing an unpinned CLI that can drift out of
  sync with the schema-locked wasm-bindgen dependency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSAx1G1eMeCYPwNH7WNMVo
Comment thread .github/workflows/ext.yaml Outdated

- name: Run ext tests
run: make -C ext test
run: just --working-directory ext --justfile ext/justfile test

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is it necessary to pass both --working-directory and --justfile? Doing cd dir && just test would be shorter...

Comment thread ext/justfile
Comment on lines +18 to +23
lint:
cargo fmt --all -- --check
cargo clippy --workspace --no-default-features --profile test
cargo clippy --workspace --all-targets --profile test
cargo check --workspace --no-default-features --profile test
cargo check --workspace --all-targets --all-features --profile test

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

As a followup would be nice to add a variant of this that fixes the problems instead of doing --check.

Comment thread ext/justfile Outdated
fi

# Rewrite a single benchmark's expected output to the current program output.
fix-bench NAME:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I've seen this called bless-bench in many codebases.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

for "bless the current output as correct"

Comment thread ext/README.md Outdated
Comment on lines +140 to +142
just bench resolve-S_2
just bench-concurrent resolve-S_2
just fix-bench resolve-S_2

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nicer, isn't it?

@hoodmane hoodmane left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Generally looks good to me. Thanks!

Per maintainer review on the upstream PR:
- CI: replace `just --working-directory <dir> --justfile <dir>/justfile <rec>`
  with the shorter `cd <dir> && just <rec>` across ext.yaml.
- ext/justfile: add a `fix` recipe that applies what `lint` only checks
  (`cargo fmt --all` + `cargo clippy --fix`).
- ext/justfile: rename the benchmark-updating recipes fix-bench /
  fix-benchmarks / fix-benchmarks-nassau to bless-bench / bless-benchmarks /
  bless-benchmarks-nassau ("bless the current output as correct"); update
  ext/README.md accordingly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSAx1G1eMeCYPwNH7WNMVo

JoeyBF commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for the review, @hoodmane! Addressed the suggestions in b3fcf24:

  • CI: switched from just --working-directory <dir> --justfile <dir>/justfile <recipe> to the shorter cd <dir> && just <recipe>.
  • just fix: added a recipe that applies what lint only checks — cargo fmt --all + cargo clippy --fix.
  • bless-*: renamed the benchmark-updating recipes to bless-bench / bless-benchmarks / bless-benchmarks-nassau (README updated too).

Separately, the earlier webserver-deploy failure was a pipefail regression in test-wasm-unwind (fixed in 68a2043) — not a toolchain issue; the check now matches the old Makefile's behavior.


Generated by Claude Code

In sseq_gui, `wasm-bindgen` is a `wasm32`-only dependency
(`[target.'cfg(target_arch = "wasm32")'.dependencies]`), so a host-target
`cargo tree` prints nothing and the derived version came out empty — making
`cargo install wasm-bindgen-cli --version ''` fail and breaking the webserver /
webserver-deploy jobs. Use `--target all` so the wasm-only dependency is seen,
and guard against an empty result so any future breakage fails with a clear
message instead of a cryptic cargo error. Applied to both wasm justfiles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSAx1G1eMeCYPwNH7WNMVo

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ext/README.md (1)

92-101: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider documenting just fix alongside just lint.

The justfile now has a fix recipe (apply fmt + clippy autofixes) added per earlier review feedback, but the README's "Linting" section only mentions just lint. Worth a one-line addition for discoverability.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ext/README.md` around lines 92 - 101, The Linting section only documents the
just lint recipe, so add a brief mention of the new just fix recipe for
discoverability. Update the README near the linting instructions to reference
just fix alongside just lint, and note that it applies formatting plus clippy
autofixes so readers can choose the autofix workflow.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ext.yaml:
- Around line 23-25: The new extactions/setup-just@v4 workflow steps are still
referenced by moving tag rather than a fixed SHA, so tighten them for
supply-chain hardening. Update each setup-just usage in the workflow to pin the
action to a commit hash instead of the v4 tag, keeping the existing just-version
inputs unchanged. Make the change consistently across all repeated setup-just
steps in the workflow so the pinning is uniform.
- Around line 380-386: The `calculator` job has a mislabeled workflow step: the
`Lint sseq_gui wasm` name does not match the `just lint` command being run in
`web_ext/steenrod_calculator`. Update that step’s name in the workflow so it
clearly refers to the calculator wasm lint task, matching the surrounding step
naming in the `calculator` job and avoiding confusion with the `webserver` job.

In `@ext/justfile`:
- Around line 25-29: The justfile’s fix recipe only mirrors part of lint, so
update the fix target to cover the same clippy configurations as lint. In fix,
keep the rustfmt step and add clippy autofix runs that match the lint variants
in the same workspace/test profile, including the --no-default-features pass and
the --all-targets pass, so clippy issues caught by lint are actually auto-fixed
by just fix. Use the existing fix and lint recipe names in ext/justfile to align
the commands.

---

Outside diff comments:
In `@ext/README.md`:
- Around line 92-101: The Linting section only documents the just lint recipe,
so add a brief mention of the new just fix recipe for discoverability. Update
the README near the linting instructions to reference just fix alongside just
lint, and note that it applies formatting plus clippy autofixes so readers can
choose the autofix workflow.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 74b33247-c67f-4e8a-912a-5de3ccf79753

📥 Commits

Reviewing files that changed from the base of the PR and between cd31532 and ceb4c67.

📒 Files selected for processing (5)
  • .github/workflows/ext.yaml
  • ext/README.md
  • ext/justfile
  • web_ext/sseq_gui/justfile
  • web_ext/steenrod_calculator/justfile

Comment on lines +23 to +25
- uses: extractions/setup-just@v4
with:
just-version: "1.54.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Consider pinning extractions/setup-just to a commit SHA.

zizmor flags each of these extractions/setup-just@v4 uses as unpinned. This mirrors the repo's existing convention of pinning third-party actions by tag rather than SHA (e.g. actions/checkout@v4, dtolnay/rust-toolchain@v1), so it's not a regression introduced by this PR, but since these are new lines, tightening them to a hash would incrementally improve supply-chain hardening.

Also applies to: 71-73, 104-106, 155-158, 214-217, 279-281, 355-357, 413-415

🧰 Tools
🪛 zizmor (1.26.1)

[error] 23-23: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ext.yaml around lines 23 - 25, The new
extactions/setup-just@v4 workflow steps are still referenced by moving tag
rather than a fixed SHA, so tighten them for supply-chain hardening. Update each
setup-just usage in the workflow to pin the action to a commit hash instead of
the v4 tag, keeping the existing just-version inputs unchanged. Make the change
consistently across all repeated setup-just steps in the workflow so the pinning
is uniform.

Source: Linters/SAST tools

Comment thread .github/workflows/ext.yaml
Comment thread ext/justfile Outdated
- ext.yaml: rename the calculator job's mislabeled "Lint sseq_gui wasm" step to
  "Lint calculator wasm" (it runs the calculator lint, not sseq_gui).
- ext/justfile: make `fix` mirror all of `lint`'s clippy configurations
  (`--no-default-features --profile test` and `--all-targets --profile test`),
  so `just fix` autofixes everything `just lint` would flag.
- ext/README.md: mention `just fix` alongside `just lint` in the Linting section.

Skipped CodeRabbit's suggestion to SHA-pin `extractions/setup-just@v4`: the repo
consistently pins actions by tag (actions/checkout@v4, dtolnay/rust-toolchain@v1,
actions/cache@v4), so a lone SHA-pinned action would break that convention.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSAx1G1eMeCYPwNH7WNMVo
@JoeyBF
JoeyBF merged commit fd75bca into SpectralSequences:master Jul 2, 2026
19 of 20 checks passed
@JoeyBF
JoeyBF deleted the claude/makefiles-to-just-872xjz branch July 2, 2026 01:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants