Repository navigation
ci(loadgen): publish buzz-loadgen as ghcr.io/block/buzz-loadgen - #8717
Merged
Merged
Conversation
buzz-loadgen has no image, so it cannot run in a cluster. Add a separate Dockerfile.loadgen (static musl binary on alpine, non-root) and a loadgen-image.yml publisher modeled on sprig-image.yml: native amd64 and arm64 builds pushed by digest, merged into a multi-arch manifest with provenance. Main pushes that touch the loadgen's crates publish :main and :sha-<7>; PRs that touch the Dockerfile or workflow build without pushing. Kept out of the relay image so production relay images don't carry a load tool and test-client-only commits don't count as relay changes. Co-authored-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Luke Tornquist <tornquist@squareup.com>
USER loadgen is a name, so a pod with runAsNonRoot: true fails to start: the kubelet cannot verify a non-numeric user is non-root. Create the user with a fixed UID/GID and set USER to the numbers. Co-authored-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Luke Tornquist <tornquist@squareup.com>
TheSentinel454
marked this pull request as ready for review
October 29, 2026 23:44
TheSentinel454
temporarily deployed
to
codex-review
October 29, 2026 23:44 — with
GitHub Actions
Inactive
🔐 Codex Security Review
Review SummaryOverall Risk: NONE
FindingsNo concrete security, correctness, or reliability findings were identified. Notes
Generated by Codex Security Review | |
Review follow-ups. Run `buzz-loadgen --help` after strip in the builder so each native-arch CI build proves the binary starts. Add .cargo/config.toml to the publish path filter since its [env] affects release builds. Note in the workflow that same-repo PRs still write the build cache, and in LOADGEN.md to pin :sha-<7> for comparable runs and point --report at a writable mount (the container has no writable working directory). Co-authored-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Luke Tornquist <tornquist@squareup.com>
TheSentinel454
temporarily deployed
to
codex-review
October 29, 2026 23:55 — with
GitHub Actions
Inactive
bradseiler
approved these changes
Oct 29, 2026
shu-hui-cash
added a commit
that referenced
this pull request
Oct 30, 2026
…nity-storage-calculation * origin/main: fix(mobile): resolve iOS pushes on a fresh connection and retry a stale one (#8722) ci(loadgen): publish buzz-loadgen as ghcr.io/block/buzz-loadgen (#8717) test(relay): fix main's build after the test-state helper rename (#8718) fix(db): keep lease releases durable and deflake PostgreSQL lane tests (#8676) test: dedupe collect_until_eose by event id and uncap two shell tests (#8677) ci: cache the Tauri apt .debs and fit a cold Windows Rust run in its cap (#8679) test(desktop): gate flaky E2E specs on the state they assume (#8681) test(desktop): settle composer edits and press hover-only row actions by keyboard (#8682) Signed-off-by: Shu Hui <shu@squareup.com>
ravarora2
added a commit
that referenced
this pull request
Oct 30, 2026
…vent-guards * origin/main: (29 commits) Restyle community invitations (#8728) feat(relay): add incremental artifact reads (#8523) fix(mobile): show agent DM typing and balance reply bubble padding (#8731) perf(relay): route author- and #p-scoped global subscriptions by selector (#8666) fix(desktop): fix the product races behind four E2E flakes (#8680) test(scripts): stop file-size fixtures leaking git repos and fsmonitor daemons (#8727) test(mobile): keep late callbacks and fixed sleeps from failing tests (#8678) fix(mobile): resolve iOS pushes on a fresh connection and retry a stale one (#8722) ci(loadgen): publish buzz-loadgen as ghcr.io/block/buzz-loadgen (#8717) test(relay): fix main's build after the test-state helper rename (#8718) fix(db): keep lease releases durable and deflake PostgreSQL lane tests (#8676) test: dedupe collect_until_eose by event id and uncap two shell tests (#8677) ci: cache the Tauri apt .debs and fit a cold Windows Rust run in its cap (#8679) test(desktop): gate flaky E2E specs on the state they assume (#8681) test(desktop): settle composer edits and press hover-only row actions by keyboard (#8682) test(desktop): measure inline video controls against their player (#8683) relay: open the search pool lazily so a dead reader can't block boot (#8662) fix(mobile): address #8650 second-pass review (#8691) Revert "fix(mobile): push every message in your own Solo chats (#8615)" (#8690) fix: don't notify workflow owners through their attribution tag (#8694) ... Signed-off-by: Ravneet Arora <rarora@squareup.com>
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
buzz-loadgen(#8636) has no container image, so you can't run it as a Kubernetes Job. The relayDockerfilebuilds onlybuzz-relay,buzz-admin, andbuzz-pair-relay.This PR adds:
Dockerfile.loadgen. It builds a static muslbuzz-loadgenon the same pinnedrust:1.98-alpine3.22base thatDockerfile.spriguses, then copies it into pinnedalpine:3.22withca-certificates. Each native-arch build runsbuzz-loadgen --helpafter strip. The image runs as numeric UID/GID 10001 sorunAsNonRootcan verify it, andbuzz-loadgenis the entrypoint..github/workflows/loadgen-image.yml, modeled onsprig-image.yml. It builds natively on amd64 and arm64, pushes by digest, merges a multi-arch manifest, and attests provenance.buzz-test-client,buzz-ws-client,buzz-core, or the workspace manifests publish:mainand:sha-<7>.buzz-loadgen-buildcache), assprig-image.ymldoes.workflow_dispatch.perf/LOADGEN.mdcovering the image and how to pass shard arguments.Why it's not in the relay image: that would ship a load tool in every production relay image. It would also make commits that only touch the test client count as relay-image changes.
Rollout
Merging triggers the first publish.
ghcr.io/block/buzz-loadgenpublic once, the same asbuzz-sprig.docker buildx imagetools inspect ghcr.io/block/buzz-loadgen:mainlists amd64 and arm64.gh attestation verify oci://ghcr.io/block/buzz-loadgen:main --owner blockpasses.docker pullworks once the package is public.Simpler or more complex: this adds two files and no Rust changes. The workflow has fewer moving parts than
sprig-image.yml: no semver tags, no:latest, and no image-name override variable.Related issue
None found. Follows #8636.
Testing
docker buildat2c18186a:--helpexits 0. The image config isUser=10001:10001, and the container runs as uid 10001.--shard 5/2exits 2, and malformed TOML exits 1 with the parse error.seedagainst an address with no listener exits 1 with "Connection refused".https://example.comcompletes the handshake, and a self-signed host is rejected withUnknownIssuer.--helpcheck runs on both architectures in CI fromc24ee76bon.runAsNonRootadmission. The first Indexed Job is that check.🤖 Generated with Claude Code