Make CI runnable on the QuickNode fork#2
Conversation
Three independent problems prevented these workflows from running on quiknode-labs/shredstream-proxy: 1. **Custom self-hosted runner**: all three workflows used `ubuntu-22.04-16c-64g-public`, which is Jito's private runner pool. The fork has no access — jobs would queue indefinitely. 2. **Missing Rust toolchain**: the `setup-rust` composite action only installed protoc and assumed rustc was already present on the runner (true on Jito's custom runner). Stock GitHub-hosted runners ship rustup but no specific toolchain; the build would fail to find 1.84. 3. **Hardcoded Docker Hub push**: build.yml and release.yml pushed to `jitolabs/jito-shredstream-proxy:*` using `secrets.DOCKERHUB_USER` / `secrets.DOCKERHUB_PWD`. Those secrets don't exist on the fork and shouldn't — they're Jito's. The QN deploy pipeline pulls binaries from an OCI bucket via the `role_chain_build` Drone pipeline, so the Docker Hub path is irrelevant for QN production deploys. Changes: - `setup-rust/action.yaml`: add `dtolnay/rust-toolchain@1.84` step to explicitly install the toolchain pinned in `rust-toolchain.toml`. Stays compatible with self-hosted runners that already have rust. - `test.yml` / `build.yml`: switch to stock `ubuntu-22.04` runner. Drop Docker login/build/push from build.yml — clippy + a fresh `cargo build --release` cover the PR-validation purpose without publishing artifacts anywhere. - `release.yml`: switch to stock runner. Replace the Docker-based binary extraction (build image → push to Docker Hub → docker run cat) with a direct `cargo build --release`. The resulting binary is staged as `jito-shredstream-proxy-x86_64-unknown-linux-gnu` and uploaded to the GitHub Release by `softprops/action-gh-release@v2` on tag push — same artifact name as before, no behavior change for consumers reading the Release page. Dropped multi-arch (arm64) builds since the QN fleet is x86_64-only (znver3/4/5 targets per `role_chain_build`). If arm64 is ever needed, re-add via `cross` or QEMU. Note: Actions must be enabled on the fork (Settings → Actions → General → "Allow all actions and reusable workflows") for any of these to run. That's a one-time manual click — no PR can do it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7f8e6ea. Configure here.
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@1.84 | ||
| with: | ||
| components: rustfmt, clippy |
There was a problem hiding this comment.
Hardcoded toolchain version duplicates rust-toolchain.toml source of truth
Low Severity
The action description on line 2 says "Install Rust toolchain (from rust-toolchain.toml)" but the implementation uses dtolnay/rust-toolchain@1.84 which hardcodes the version and never reads rust-toolchain.toml. This creates a dual source of truth — rust-toolchain.toml declares channel = "1.84" and components ["rustfmt", "rustc-dev", "clippy", "cargo"], but the action independently pins @1.84 with only rustfmt, clippy. When someone bumps the channel in rust-toolchain.toml, CI will silently keep using the old version, causing local/CI divergence that's hard to diagnose.
Reviewed by Cursor Bugbot for commit 7f8e6ea. Configure here.


Problem
Three independent issues prevented
.github/workflows/{test,build,release}.ymlfrom running onquiknode-labs/shredstream-proxy:Self-hosted runner reference. All three workflows use `runs-on: ubuntu-22.04-16c-64g-public` — Jito's private runner pool. The fork has no access, so every job would queue indefinitely. Zero workflow runs exist on the fork today, confirming nothing is wired up.
Missing Rust toolchain installation. The `setup-rust` composite action only installs protoc; it assumes `rustc` is already present on the runner (true on Jito's self-hosted image). Stock `ubuntu-22.04` GitHub-hosted runners ship rustup but no pinned toolchain, so `cargo build` would fail to resolve the `1.84` channel from `rust-toolchain.toml` without explicit install.
Hardcoded Docker Hub publish. Both `build.yml` and `release.yml` push to `jitolabs/jito-shredstream-proxy:*` using `secrets.DOCKERHUB_USER` / `secrets.DOCKERHUB_PWD`. Those secrets don't exist on the fork and shouldn't — they're Jito's. Our deploy pipeline pulls binaries from an OCI bucket via the `role_chain_build` Drone job, not from Docker Hub, so the Docker push is irrelevant for QN production deploys.
Changes
`.github/actions/setup-rust/action.yaml`
`.github/workflows/test.yml`
`.github/workflows/build.yml`
`.github/workflows/release.yml`
Diff summary
```
.github/actions/setup-rust/action.yaml | +12 −1
.github/workflows/build.yml | +3 −24
.github/workflows/release.yml | +10 −28
.github/workflows/test.yml | +1 −1
```
25 lines added, 57 removed.
What this does NOT do
Actions still need to be enabled on the fork. GitHub disables Actions on every fork by default. Repo admin needs to go to Settings → Actions → General and pick "Allow all actions and reusable workflows". This is a one-time manual click that no PR can substitute for. Once enabled, the workflows in this PR will start running on subsequent pushes/PRs/tags automatically.
Test plan
Local YAML syntax check passed (`pyyaml.safe_load` on all four files). The workflows can't actually be executed until Actions is enabled on the fork — once it is, the next PR push to this branch should kick off `test` and `build` automatically.
Manual smoke test after enabling Actions:
🤖 Generated with Claude Code
Note
Low Risk
CI-only changes: switches to GitHub-hosted runners, pins/install Rust toolchain explicitly, and removes Docker publish steps. Main risk is release workflow now builds binaries directly with
cargo build, so artifact contents may differ from the prior container-based build.Overview
Makes CI runnable on standard GitHub-hosted runners by switching all workflows to
runs-on: ubuntu-22.04and updatingsetup-rustto explicitly install Rust1.84(plusrustfmt/clippy) before running jobs.Removes Docker Buildx/login/build-and-push steps from
build.yml/release.yml, replacing them with a directcargo build --release --locked --bin jito-shredstream-proxy, and stages/uploads the built binary to GitHub Releases. Also fixescaller-workflow-namevalues so cargo cache keys differ per workflow.Reviewed by Cursor Bugbot for commit 7f8e6ea. Bugbot is set up for automated code reviews on this repo. Configure here.