Skip to content

feat!: configure through shipyard-cmake - #5

Open
schmonz wants to merge 1 commit into
mainfrom
shipyard-cmake-flagday
Open

schmonz wants to merge 1 commit into
mainfrom
shipyard-cmake-flagday

Conversation

@schmonz

@schmonz schmonz commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Part of the 14-repo shipyard-cmake flag day.

Do not merge until shipyard has landed bc3082a. Until then shipyard-cmake exists on no runner, so this PR's own CI is expected to fail at the first configure. That red is the merge-order hold, not a defect.

What changed

  • build/msc.sh replaced wholesale by shipyard's canonical template (conventions check 17 compares it byte for byte). Verified byte-identical. It was this repo's only registry reader.
  • Three call sites now use shipyard-cmake: both halves of release.yml:117's cmake --preset cross && cmake --build build/updater --target OpenSSHUpdater (the second is a command too, after the &&), and the (cmake --build build/updater) named by build/package-pkg.sh:17 when the updater is missing.
  • The install step's comment said shipyard self-registers in the user package registry. It installs a pkg and puts shipyard-cmake on PATH; the comment now says so.
  • CMakePresets.json is unchanged: a preset is data, and shipyard-cmake reads it like any other cmake. Its cmakeMinimumRequired of 3.25 is satisfied (shipyard ships CMake 4.4.3).

The one the gate cannot see

build/package-pkg.sh:17 names its recipe from inside (cmake --build build/updater). Check 18 deliberately treats a bare ( as not command position, so it was invisible to the gate. Found by sweeping every tracked file, not just the gate's subset — the .bats files under tests/ were checked the same way and hold no cmake invocation.

Verification

  • check-family-conventions.sh (from shipyard-cmake-collapsed): 3 failures -> ok, exit 0.
  • Whole-tree sweep with check 18's own regex over git ls-files: clean, no exceptions needed. A wider sweep for any bare cmake/ctest/cpack token is also clean.
  • No registry reference survives anywhere in the tree.
  • Also green: check-shell-portability.sh, check-comments.sh, sh -n on every tracked *.sh, all three workflows parse as YAML, CMakePresets.json parses as JSON.
  • No workflow step was added; install@v1's default mode already puts shipyard-cmake on PATH.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GTxFde2TJMmp5p64DhvDSK

The shipyard pkg no longer writes the CMake user package registry, and
MavericksShipyardConfig.cmake now refuses any cmake but shipyard-cmake.

build/msc.sh is replaced wholesale by shipyard's canonical template (conventions
check 17 compares it byte for byte): $SHIPYARD_SCRIPTS in CI, else ask
shipyard-cmake where find_package(MavericksShipyard) lands.

Three call sites move to shipyard-cmake: both halves of release.yml's
`cmake --preset cross && cmake --build ...` -- the second is a command too, after
the `&&` -- and the `(cmake --build build/updater)` that build/package-pkg.sh
names when the updater is missing. That last one is the sort a gate cannot see:
it sits behind a bare "(" that conventions check 18 deliberately skips, and it
hands a reader a command the refusal would reject.

The install step's comment said shipyard self-registers in the user package
registry. It installs a pkg and puts shipyard-cmake on PATH; the comment now
says that.

CMakePresets.json needs no change -- a preset is data, and shipyard-cmake reads
it like any other cmake.

BREAKING CHANGE: builds now require the shipyard pkg (it provides
/usr/local/bin/shipyard-cmake). Do not merge until shipyard has landed bc3082a.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTxFde2TJMmp5p64DhvDSK
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.

1 participant