Skip to content

CI: publish per-commit Verus releases, matching the cvc5 and z3 forks - #3

Merged
kiranandcode merged 2 commits into
mainfrom
ci/basis-build-publish
Sep 3, 2026
Merged

CI: publish per-commit Verus releases, matching the cvc5 and z3 forks#3
kiranandcode merged 2 commits into
mainfrom
ci/basis-build-publish

Conversation

@kiranandcode

Copy link
Copy Markdown

Why

build.yml already builds verus-arm64-macos.zip and verus-x86-linux.zip, but only as workflow artifacts. Artifacts expire and need an authenticated API call to fetch, so nothing downstream can pin the Verus built from commit X.

verus-tools-mcp pins cvc5 and z3 by downloading published release binaries and verifying them against hardcoded sha256 hashes. Verus has no equivalent, which leaves it the one unpinned component of the stack: resolve_verus_bin() falls back through VERUS_BIN to a checkout to bare verus on PATH, so two runs of the same MCP commit can silently use different verifiers.

What

Adds .github/workflows/basis-build.yml, which calls the existing build.yml and publishes its zips to a per-commit release tagged basis-<sha10> with sha256 sidecars and a SHA256SUMS roll-up.

It mirrors the basis-build workflows already running on BasisResearch/cvc5 (publishing from main) and BasisResearch/z3 (from master), including:

  • build on push, PR and workflow_dispatch; publish only when not a PR
  • concurrency scoped per ref so PR runs do not cancel main builds
  • gh release delete --cleanup-tag before create, so a re-run replaces its own release rather than failing on an existing tag
  • contents: write scoped to the publish job only

Release notes carry the Verus version, taken from build.yml's existing version output.

The one difference from the solver forks

The assets are zips of the whole target-verus/release tree, not bare binaries, because Verus needs vstd.vir and its libraries alongside the executable. Consumers download and unzip rather than chmod-and-run.

Risk

No change to build.yml, so the existing artifact flow and rolling-release.yml are untouched. The new workflow only adds a publish step on top of a build that already runs green on this fork.

Worth a look at whether main is the right and only publish branch. cvc5 and z3 each publish from their default branch and nothing else, which this matches now that block-non-mcp is merged.

kiranandcode and others added 2 commits September 3, 2026 18:16
build.yml already produces verus-arm64-macos.zip and verus-x86-linux.zip, but
only as workflow artifacts. Those expire and need an authenticated API call to
fetch, so nothing downstream can pin "the Verus built from commit X" the way
verus-tools-mcp pins cvc5 and z3 against published binaries and hardcoded
hashes.

This adds basis-build.yml, which calls the existing build.yml and publishes its
zips to a per-commit release tagged basis-<sha10> with sha256 sidecars and a
SHA256SUMS roll-up. It mirrors the basis-build workflows on BasisResearch/cvc5
and BasisResearch/z3, including the delete-then-create so a re-run replaces
its own release rather than failing.

The assets are zips of the whole target-verus/release tree rather than bare
binaries, since Verus needs vstd.vir and its libraries alongside the
executable. That is the one way this differs from the solver forks.

No change to build.yml, so the existing artifact flow and rolling-release keep
working unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ms3PAGBHqqyGftGLY4xfcf
Branch protection requires a review this account cannot give, so the harness
needs releases before the PR can merge. Adding ci/basis-build-publish to the
push trigger lets the branch publish now.

Builds from any ref other than main are marked --prerelease, so a release cut
from an unmerged branch never claims "Latest" on the fork and the temporary
state is visible rather than silent.

Reverting is deleting one line from the trigger list; the prerelease branch
then goes dead on its own once main is the only publishing ref.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ms3PAGBHqqyGftGLY4xfcf
@naiimic
naiimic self-requested a review September 3, 2026 22:38
@kiranandcode
kiranandcode merged commit d3e37cb into main Sep 3, 2026
24 checks passed
@kiranandcode

Copy link
Copy Markdown
Author

Thanks @naiimic !!!

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.

2 participants