Skip to content

Release standalone tsunami-serve binaries - #3

Merged
zarubaf merged 1 commit into
mainfrom
release-binaries
Aug 20, 2026
Merged

zarubaf merged 1 commit into
mainfrom
release-binaries

Conversation

@zarubaf

@zarubaf zarubaf commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Why

The MCP server is a standalone Rust binary, but there is no way to get one without a Rust toolchain. release.yml builds Python wheels only, and installing the wheel drags in a Python environment to run a server that does not need it. Anything that wants to pin the server — a build system, a container image, a bare machine — has to build it from source.

This came up pinning tsunami-serve into a hardware monorepo's Bazel toolchain, where every CLI is fetched at a version and verified by SHA-256. There was nothing to point at.

What

A binaries job that builds tsunami-serve for macOS and Linux on both architectures and uploads them to the GitHub release:

target asset
aarch64-apple-darwin tsunami-serve-<tag>-darwin-arm64
x86_64-apple-darwin tsunami-serve-<tag>-darwin-x86_64
x86_64-unknown-linux-musl tsunami-serve-<tag>-linux-x86_64
aarch64-unknown-linux-musl tsunami-serve-<tag>-linux-arm64

Linux targets musl and links statically, so the binary has no glibc floor — it runs on distroless and immutable images as well as on a distro. The dependency tree is 143 pure-Rust crates (wellen, lz4_flex, miniz_oxide, fst-reader are all native Rust), so there is nothing that needs a C toolchain to cross.

A separate release job attaches them, deliberately not folded into publish — a PyPI outage should not cost the binaries, and vice versa.

Supporting changes

  • Commit Cargo.lock. A workspace that ships a binary should have one, and cargo build --locked in the release job is what makes a tagged build reproducible rather than resolved afresh whenever the tag happens to be pushed.
  • Give tsunami-serve a --version. clap does not derive one unless asked. A tool that cannot report its own version is a tool whose pin cannot be checked.

Testing

cargo build --release --locked -p tsunami-serve builds clean on aarch64-apple-darwin. The workflow YAML parses and the job graph is build, sdist, binaries, release, publish. The cross-compiled targets have not been exercised — they will run for real on the first tag push.

🤖 Generated with Claude Code

The MCP server is a standalone Rust binary, but there is no way to get
one without a Rust toolchain: release.yml builds Python wheels only, and
installing the wheel drags in a Python environment to run a server that
does not need it. Anything that wants to pin the server -- a build
system, a container image, a bare machine -- has to build from source.

Add a `binaries` job that builds tsunami-serve for macOS and Linux on
both architectures and uploads them to the GitHub release. Linux targets
musl and links statically, so the binary has no glibc floor and runs on
distroless and immutable images as well as on a distro.

Two supporting changes:

- Commit Cargo.lock. A workspace that ships a binary should have one, and
  `cargo build --locked` in the release job is what makes a tagged build
  reproducible rather than resolved afresh at release time.

- Give tsunami-serve a `--version`. clap does not derive one unless asked,
  and a tool that cannot report its own version is one whose pin cannot be
  checked.
@zarubaf
zarubaf merged commit e13c072 into main Aug 20, 2026
7 checks passed
zarubaf added a commit to silicon-org/foundry that referenced this pull request Aug 20, 2026
Waveform query engine the debugging agents drive over MCP. Pinned like
every other CLI here rather than built in the graph: it is a tool people
and agents type at, not something a build action invokes.

Upstream shipped no binaries until zarubaf/tsunami#3; the Linux builds
are static musl, so the pin has no glibc floor and runs on the Talos
workers as well as a laptop.
zarubaf added a commit to silicon-org/foundry that referenced this pull request Aug 23, 2026
Waveform query engine the debugging agents drive over MCP. Pinned like
every other CLI here rather than built in the graph: it is a tool people
and agents type at, not something a build action invokes.

Upstream shipped no binaries until zarubaf/tsunami#3; the Linux builds
are static musl, so the pin has no glibc floor and runs on the Talos
workers as well as a laptop.
zarubaf added a commit to silicon-org/foundry that referenced this pull request Aug 23, 2026
Waveform query engine the debugging agents drive over MCP. Pinned like
every other CLI here rather than built in the graph: it is a tool people
and agents type at, not something a build action invokes.

Upstream shipped no binaries until zarubaf/tsunami#3; the Linux builds
are static musl, so the pin has no glibc floor and runs on the Talos
workers as well as a laptop.
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