chore(just): adopt the psa-systems/common shared task runner #58

Merged
David merged 1 commit from feat/FJCLI-44-adopt-common into main 2026-07-02 15:28:09 +02:00
Owner

Adopts the psa-systems/common shared task runner, vendored as the common git submodule and imported from justfile. Tracks FJCLI-44; depends on the no-compose CLI support added to common in GOV-39 (merged, PR psa-systems/common#8).

What changed

  • Add common git submodule (.gitmodules), pinned to common main (d424d6a, includes GOV-39).
  • Replace the 224-line standalone justfile with import 'common/common.just' plus config variables and only the two genuinely forgejo-cli-specific recipes (watch, build-windows). Net -205/+70 lines. NO set allow-duplicate-recipes shadows: shared recipes are the single source of truth and forgejo-cli adapts them by setting variables, per the common blast-radius rule.
  • Variables set: app = "forgejo-cli", binary_name = "fj", pre_commit_mode = "docker" + dev_image (rust-builder-glibc), test_args = "" (full suite), release_layout = "workspace", release_manifest = "crates/fj/Cargo.toml" (release_crate defaults to app).
  • CLAUDE.md documents the submodule (git submodule update --init after clone) and the variable contract.

Behavior notes

  • pre-commit runs in docker mode (no compose.dev.yml): the four checks execute in the glibc builder image via docker run with per-user cargo cache volumes. test_args = "" runs lib + integration + doctests; --bins alone would skip fj-client's lib tests and the libgit2_features integration test.
  • Release now bumps only crates/fj/Cargo.toml (common's create-release-workspace), dropping the cosmetic FJ-20/FJ-21 all-crate lockstep. Behavior-safe: the sibling deps are versionless path deps, and the engine still syncs Cargo.lock for the bumped crate, so --locked builds are unaffected (this was the Path 1 decision).
  • .forgejo/workflows/check.yml is intentionally left standalone (keeps its --locked build/test guarantee, which the reusable common workflow does not provide).

Validation

just --list / just --evaluate resolve (shared recipes + local watch/build-windows, variable overrides win). just pre-commit ran green end-to-end in docker mode: cargo fmt --check, clippy --deny warnings, build --all-targets, and the full test suite all passed, including the libgit2_features integration test (libgit2_supports_https / libgit2_supports_ssh) and the fj_client / fj_core doctests.

Adopts the `psa-systems/common` shared task runner, vendored as the `common` git submodule and imported from `justfile`. Tracks FJCLI-44; depends on the no-compose CLI support added to common in GOV-39 (merged, PR psa-systems/common#8). ## What changed - Add `common` git submodule (`.gitmodules`), pinned to common `main` (`d424d6a`, includes GOV-39). - Replace the 224-line standalone `justfile` with `import 'common/common.just'` plus config variables and only the two genuinely forgejo-cli-specific recipes (`watch`, `build-windows`). Net -205/+70 lines. NO `set allow-duplicate-recipes` shadows: shared recipes are the single source of truth and forgejo-cli adapts them by setting variables, per the common blast-radius rule. - Variables set: `app = "forgejo-cli"`, `binary_name = "fj"`, `pre_commit_mode = "docker"` + `dev_image` (rust-builder-glibc), `test_args = ""` (full suite), `release_layout = "workspace"`, `release_manifest = "crates/fj/Cargo.toml"` (`release_crate` defaults to `app`). - `CLAUDE.md` documents the submodule (`git submodule update --init` after clone) and the variable contract. ## Behavior notes - `pre-commit` runs in `docker` mode (no `compose.dev.yml`): the four checks execute in the glibc builder image via `docker run` with per-user cargo cache volumes. `test_args = ""` runs lib + integration + doctests; `--bins` alone would skip `fj-client`'s lib tests and the `libgit2_features` integration test. - Release now bumps only `crates/fj/Cargo.toml` (common's `create-release-workspace`), dropping the cosmetic FJ-20/FJ-21 all-crate lockstep. Behavior-safe: the sibling deps are versionless path deps, and the engine still syncs `Cargo.lock` for the bumped crate, so `--locked` builds are unaffected (this was the Path 1 decision). - `.forgejo/workflows/check.yml` is intentionally left standalone (keeps its `--locked` build/test guarantee, which the reusable common workflow does not provide). ## Validation `just --list` / `just --evaluate` resolve (shared recipes + local `watch`/`build-windows`, variable overrides win). `just pre-commit` ran green end-to-end in docker mode: `cargo fmt --check`, clippy `--deny warnings`, `build --all-targets`, and the full test suite all passed, including the `libgit2_features` integration test (`libgit2_supports_https` / `libgit2_supports_ssh`) and the `fj_client` / `fj_core` doctests.
chore(just): adopt the psa-systems/common shared task runner
All checks were successful
Check / fmt + clippy + build + tests (pull_request) Successful in 1m54s
Create release / Create release from merged PR (pull_request) Has been skipped
1308280d3b
Replace the standalone justfile with `import 'common/common.just'` from the new `common` git submodule, keeping only config variables and the two genuinely forgejo-cli-specific recipes (watch, build-windows). No `set allow-duplicate-recipes` shadows: the shared hooks/checks/build/release recipes are the single source of truth, and forgejo-cli adapts them purely by setting variables, per the common blast-radius rule. The justfile drops from 224 to ~78 lines.

Because forgejo-cli has no compose.dev.yml (pure CLI), it sets pre_commit_mode = "docker" + dev_image so `just pre-commit` runs the checks in the rust-builder-glibc image via `docker run` (GOV-39 added this no-compose mode to common). test_args = "" runs the full suite (lib + integration + doctests) that `--bins` would skip; the libgit2_features integration test and fj-client lib doctests were verified running in a docker-mode pre-commit. release_layout = "workspace" + release_manifest point common's create-release engine at crates/fj/Cargo.toml; release_crate defaults to app ("forgejo-cli"), the binary crate's package.name. binary_name = "fj" makes build-docker-export report dist/fj. The .forgejo/workflows/check.yml is intentionally left standalone (keeps its --locked build/test guarantee). CLAUDE.md documents the submodule (git submodule update --init after clone) and the variable contract.

#FJCLI-44

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: David Randall <David@NiceGuyIT.biz>
David merged commit 7cdb8f25eb into main 2026-07-02 15:28:09 +02:00
David deleted branch feat/FJCLI-44-adopt-common 2026-07-02 15:28:10 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pandoras-box/forgejo-cli!58
No description provided.