Skip to content

ci: replace arduino/setup-protoc@v3 with direct install before GitHub Actions Node.js 24 cutover (2026-06-02) #516

Description

@mosuka

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

  • No remaining references to arduino/setup-protoc under .github/workflows/.
  • protoc --version step in CI reports the same major version we used before the swap.
  • release.yml, regression.yml, periodic.yml all execute through to the same outcome they had on the last green run (no new failures attributable to the protoc swap).
  • Works on Linux x86_64, Linux aarch64, macOS, and Windows runners — the matrix entries we already have.
  • If a composite action is used, it lives under .github/actions/install-protoc/ with its own action.yml and is documented at the top of the file.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions