Background
GitHub Actions is switching its default Node.js runtime to 24 on 2026-06-02. arduino/setup-protoc@v3 pins Node.js 20 internally; after the cutover it will start failing on every workflow that uses it. The latest release of the action remains v3.0.0 (2024-01-31) — no v4 with Node.js 24 support exists yet, and the upstream tracking ticket (arduino/setup-protoc#113) has not moved.
We use this action in 10 workflow steps:
.github/workflows/release.yml — 2 occurrences
.github/workflows/regression.yml — 4 occurrences
.github/workflows/periodic.yml — 4 occurrences
If we wait and v4 does not ship in time, releases and PR validation both break on or shortly after 2026-06-02.
Goal
Remove the dependency on arduino/setup-protoc@v3 by installing the protoc binary directly in each workflow step that needs it, before the Node.js 24 cutover.
Proposed approach
Add a small reusable "install protoc" step (composite action under .github/actions/install-protoc/ or an inline shell snippet) that selects the right installer per OS:
- Linux runners (
ubuntu-*, *-arm): apt-get install -y protobuf-compiler (matches the protoc version Debian/Ubuntu ships) or download an official protoc-*-linux-x86_64.zip / protoc-*-linux-aarch_64.zip release asset if a more precise version pin is desired.
- macOS runners (
macos-*): brew install protobuf.
- Windows runners (
windows-*): choco install -y protoc, or download protoc-*-win64.zip from the official release assets.
The official release-asset path is preferred over package managers because it gives us a deterministic version pin (matches how arduino/setup-protoc itself works). Pin the version to the same one currently requested via the version: input to arduino/setup-protoc (audit per-step before swap).
Replace all 10 call sites in one PR so the migration is atomic and the diff is easy to review.
Acceptance criteria
Out of scope
- Switching to a different protobuf compiler entirely (
buf, prost-build only, etc.).
- Touching the Rust-side
tonic-build / prost-build integration.
References
Deadline
2026-06-02 — the day GitHub Actions changes its default Node.js runtime. Land before this.
Background
GitHub Actions is switching its default Node.js runtime to 24 on 2026-06-02.
arduino/setup-protoc@v3pins Node.js 20 internally; after the cutover it will start failing on every workflow that uses it. The latest release of the action remains v3.0.0 (2024-01-31) — no v4 with Node.js 24 support exists yet, and the upstream tracking ticket (arduino/setup-protoc#113) has not moved.We use this action in 10 workflow steps:
.github/workflows/release.yml— 2 occurrences.github/workflows/regression.yml— 4 occurrences.github/workflows/periodic.yml— 4 occurrencesIf we wait and v4 does not ship in time, releases and PR validation both break on or shortly after 2026-06-02.
Goal
Remove the dependency on
arduino/setup-protoc@v3by installing theprotocbinary directly in each workflow step that needs it, before the Node.js 24 cutover.Proposed approach
Add a small reusable "install protoc" step (composite action under
.github/actions/install-protoc/or an inline shell snippet) that selects the right installer per OS:ubuntu-*,*-arm):apt-get install -y protobuf-compiler(matches the protoc version Debian/Ubuntu ships) or download an officialprotoc-*-linux-x86_64.zip/protoc-*-linux-aarch_64.ziprelease asset if a more precise version pin is desired.macos-*):brew install protobuf.windows-*):choco install -y protoc, or downloadprotoc-*-win64.zipfrom the official release assets.The official release-asset path is preferred over package managers because it gives us a deterministic version pin (matches how
arduino/setup-protocitself works). Pin the version to the same one currently requested via theversion:input toarduino/setup-protoc(audit per-step before swap).Replace all 10 call sites in one PR so the migration is atomic and the diff is easy to review.
Acceptance criteria
arduino/setup-protocunder.github/workflows/.protoc --versionstep in CI reports the same major version we used before the swap.release.yml,regression.yml,periodic.ymlall execute through to the same outcome they had on the last green run (no new failures attributable to the protoc swap)..github/actions/install-protoc/with its ownaction.ymland is documented at the top of the file.Out of scope
buf,prost-buildonly, etc.).tonic-build/prost-buildintegration.References
Deadline
2026-06-02 — the day GitHub Actions changes its default Node.js runtime. Land before this.