Skip to content

[PET-57] Pin CI runners to ubuntu-24.04 and clear the Node 20 deprecations - #59

Merged
zigcccc merged 3 commits into
mainfrom
PET-57-pin-github-actions-runners
Sep 28, 2026
Merged

zigcccc merged 3 commits into
mainfrom
PET-57-pin-github-actions-runners

Conversation

@zigcccc

@zigcccc zigcccc commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

Linear: PET-57

Why

Deprecation annotations on our CI runs. Nothing failing yet, but all of it lands on someone else's schedule if we leave it.

1. Runner image. Every job emits:

The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026.

The rollout is gradual from that date, so left alone a pipeline nobody touched can go red on a random morning, on top of whatever unrelated work is in flight.

Our exposure looks low: the runners do no native compilation (iOS/Android builds happen on EAS servers), so there's no Android SDK, NDK, Xcode or Java toolchain on our side to break. Node is explicitly pinned (actions/setup-node@v6, node-version: 24) in every job that needs it, pnpm comes from pnpm/action-setup@v6 plus the packageManager field (with the binary itself pinned in the lockfile since #58), and the only system tools we touch are jq and gh, both of which stay preinstalled on Ubuntu 26. So this is most likely a no-op either way — the point is to make it a deliberate one.

2. Node 20 actions. The build-and-submit workflow warns:

Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: dawidd6/action-download-artifact@v2

Auditing the rest turned up a second one that nothing had warned about yet — see below.

What

Three commits, one concern each.

Pin the runners

runs-on: ubuntu-latest → ubuntu-24.04 on all 8 jobs, which is the image ubuntu-latest resolves to today, so the runner stays identical to what these workflows have been running on.

Workflow Jobs
pull-request.yml lint-test · sonar · expo-preview
main.yml lint-test · sonar · convex · expo
build-and-submit.yml build-submit

Drop the third-party download action

That @v2 pin is 23 majors behind (v25 is current), so bumping it blind carries its own risk. Instead the step moves to actions/download-artifact@v8, which has supported cross-run downloads via run-id + github-token since v4, takes the same four inputs just dash-cased, runs on node24, and is already what main.yml and pull-request.yml use for the coverage artifact. One fewer third-party action in the release path.

Behaviour is unchanged: name: version + path: . extracts version.txt to the workspace root, where the next step reads it. Still paired with actions/upload-artifact@v7 in main.yml — the same v4+ pairing the coverage artifact already uses successfully.

Bump expo-github-action/preview to v9

expo/expo-github-action/preview and expo/expo-github-action are separate actions, but the tag resolves against the same repo, so pinning the preview step at v8 pulled a checkout from January 2024 (8.2.1) alongside 9.0.0 (June 2026) elsewhere.

More to the point: v9.0.0's only breaking change is "update tooling and actions to Node 24" — preview/action.yml goes from using: node20 to using: node24. So v8 was a second Node 20 action, just one nothing had warned us about yet.

Inputs and outputs are byte-identical across the two tags, and the step only passes command, so it's a drop-in.

After this, no action in any workflow targets Node 20.

Verification

The preview bump is exercised by the Publish Expo Preview job on this PR, so it's proven rather than reasoned about.

build-and-submit.yml is workflow_dispatch-only and isn't exercised by PR checks, so the download-artifact swap can't be proven green here — it needs a manual dispatch after merge. The inputs were checked against the published action.yml for v8, and the equivalent upload/download pairing already works in the other two workflows.

Follow-up

Moving to ubuntu-26.04 gets its own PR, where a red pipeline is expected and diagnosable. PET-57 also carries an open question worth deciding then: whether to keep the explicit pin as standing policy (we own the cadence, but image security patches need a deliberate bump) or return to ubuntu-latest once 26 is the stable default.

🤖 Generated with Claude Code

Every job emits a notice that the `ubuntu-latest` label migrates to Ubuntu 26
starting 2026-10-19. The rollout is gradual, so left alone the change arrives
on GitHub's schedule rather than ours and a pipeline nobody touched can go red.

Pinning to the image `ubuntu-latest` resolves to today keeps the runner
identical to what these workflows have been running on, and makes the move to
26 a deliberate PR where a failure is expected and diagnosable instead of a
surprise on unrelated work.

All 8 jobs across the 3 workflows were on the bare label. Nothing else changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 29 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 9953e499-00a6-41e0-b29f-403456416d25

📥 Commits

Reviewing files that changed from the base of the PR and between fcd3859 and 09a292d.

📒 Files selected for processing (3)
  • .github/workflows/build-and-submit.yml
  • .github/workflows/main.yml
  • .github/workflows/pull-request.yml

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…y action

The build-and-submit run warns that `dawidd6/action-download-artifact@v2`
targets Node.js 20 and is being forced onto Node.js 24. That pin is also 23
majors behind (v25 is current), so bumping it blind is its own risk.

`actions/download-artifact@v8` has supported cross-run downloads via `run-id` +
`github-token` since v4, takes the same four inputs this step passes (just
dash-cased), runs on node24, and is already what main.yml and
pull-request.yml use to fetch the coverage artifact. So the fix is to drop the
third-party action rather than chase its major versions.

Behaviour is unchanged: `name: version` + `path: .` extracts version.txt to the
workspace root, which is where the next step reads it from. The artifact is
still produced by actions/upload-artifact@v7 in main.yml — the same v4+ pairing
the coverage artifact already uses.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

🚀 Expo preview is ready!

  • Project → petka-app
  • Platforms → android, ios
  • Scheme → petkaapp
  • Runtime Version → 1.15
  • More info

Learn more about 𝝠 Expo Github Action

@zigcccc zigcccc changed the title [PET-57] Pin CI runners to ubuntu-24.04 [PET-57] Pin CI runners to ubuntu-24.04 and drop the Node 20 action Sep 28, 2026
`expo/expo-github-action/preview` and `expo/expo-github-action` are separate
actions, but the tag resolves against the same repo, so pinning the preview
step at v8 pulled a 2.5-year-old checkout (8.2.1, Jan 2024) alongside v9.0.0
elsewhere.

More to the point, v9.0.0's only breaking change is "update tooling and actions
to Node 24" — preview/action.yml goes from `using: node20` to `using: node24`.
So v8 was a second Node 20 action, just one nothing had warned us about yet.

Inputs and outputs are byte-identical between the two tags, and the step only
passes `command`, so this is a drop-in. Unlike the download-artifact swap, this
one is exercised by the Publish Expo Preview job on this PR.

No action in any workflow targets Node 20 after this.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@zigcccc zigcccc changed the title [PET-57] Pin CI runners to ubuntu-24.04 and drop the Node 20 action [PET-57] Pin CI runners to ubuntu-24.04 and clear the Node 20 deprecations Sep 28, 2026
@zigcccc
zigcccc merged commit f9136b9 into main Sep 28, 2026
4 checks passed
@zigcccc
zigcccc deleted the PET-57-pin-github-actions-runners branch September 28, 2026 07:07
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