Skip to content

Move Ruby to 3.4 and the flake to today's nixpkgs-unstable - #935

Merged
jeremy merged 1 commit into
mainfrom
nix-ruby-3-4
Oct 21, 2026
Merged

jeremy merged 1 commit into
mainfrom
nix-ruby-3-4

Conversation

@jeremy

@jeremy jeremy commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Follow-up to #932. Today's nixpkgs-unstable has removed ruby_3_3, which the dev shell pins, so flake.lock stayed on August's nixpkgs for v0.15.1. This moves Ruby to 3.4 everywhere it's pinned, and moves the lock.

  • Ruby 3.3 → 3.4 in the three places that have to agree, since make check compiles the skill-eval patterns under Ruby's own regex engine: .mise.toml, both ruby/setup-ruby ruby-version inputs in test.yml (Integration Tests and Skill Evals), and ruby_3_4 in flake.nix's dev shell. CONTRIBUTING.md's requirement line follows.
  • flake.lock: nixpkgs c27cdad4 (2026-08-27) → 5adc5083 (2026-10-20), the current nixpkgs-unstable head. Nix's Go goes from 1.26.7 to 1.26.9. vendorHash doesn't change.

Nix is still a patch behind the release binaries. go.mod's toolchain line asks for 1.26.10 (GO-2026-6809), and nixpkgs master has it, but unstable doesn't yet. buildGoModule builds with the Go nixpkgs gives it, so the flake builds with 1.26.9 until a later flake.lock bump takes Nix to Go 1.26.10 once unstable has it.

Verified on Linux x86_64, in the nixos/nix image scripts/update-nix-flake.sh pins:

  • nix eval --raw .#devShells.x86_64-linux.default.drvPath resolves. With ruby_3_3 put back on the new lock, the same eval fails with nixpkgs' removal error, so the Ruby move is what makes the bump possible.
  • scripts/nix-build-check.sh, the "Build the flake" step, passes with the existing vendorHash; the binary prints basecamp version 0.16.0, and go version on it reads go1.26.9.
  • make check passes under Ruby 3.4.10, check-eval-patterns (199 patterns across 34 case files) and check-eval-harness included. The dev shell's ruby_3_4, 3.4.11 on this lock, compiles the same 199.

Summary by cubic

Moves the dev toolchain to Ruby 3.4 everywhere it's pinned and updates the flake to today's nixpkgs-unstable. nixpkgs-unstable removed ruby_3_3, which is why flake.lock was still pinned to August's nixpkgs.

The Ruby pins have to agree because make check compiles the skill-eval patterns under Ruby's own regex engine: .mise.toml, both ruby/setup-ruby inputs in test.yml, the dev shell's ruby_3_4 in flake.nix, and the requirement line in CONTRIBUTING.md all move to 3.4.

Notes

  • The flake now builds with Go 1.26.9; go.mod's toolchain asks for 1.26.10, which nixpkgs master has but unstable doesn't yet, so a later flake.lock bump will pick it up.
  • vendorHash is unchanged; the existing Nix build check passes with the new lock.

Written for commit 5292e49. Summary will update on new commits.

View guided diff Turn on auto-fix

nixpkgs-unstable has removed ruby_3_3 ("ruby_3_3 has been removed, as it
will reach end-of-life upstream during Nixpkgs 26.11's support cycle"),
so the dev shell no longer evaluates on a current lock; that is why #932
left flake.lock on August's nixpkgs. The Ruby pins have to agree,
because make check compiles the skill-eval patterns under Ruby's own
regex engine: .mise.toml, both ruby/setup-ruby inputs in test.yml, and
the dev shell in flake.nix all move to 3.4, along with the requirement
line in CONTRIBUTING.md.

flake.lock moves nixpkgs from c27cdad4 (2026-08-27) to 5adc5083
(2026-10-20), taking the Nix build from Go 1.26.7 to 1.26.9. vendorHash
is unchanged. go.mod's toolchain line asks for 1.26.10, which nixpkgs
master has and unstable doesn't yet; buildGoModule builds with the Go it
is given, so a later flake.lock bump takes Nix to 1.26.10 once unstable
has it.
@jeremy
jeremy requested a review from a team as a code owner October 21, 2026 18:06
Copilot AI balanced review requested due to automatic review settings October 21, 2026 18:06
@github-actions

Copy link
Copy Markdown

Sensitive Change Detection (shadow mode)

This PR modifies control-plane files:

  • .github/workflows/test.yml

Shadow mode — this check is informational only. When activated, changes to these paths will require approval from a maintainer.

@github-actions github-actions Bot added ci CI/CD workflows docs labels Oct 21, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-21T20:10:46.362059Z 5292e49 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Nix builds remain on Go 1.26.9, identified in #932 as affected by GO-2026-6809, so the remaining security risk needs human acceptance.

No open issues 🎉

What changed in this PR

Updates Ruby to 3.4 across development and CI, allowing the nixpkgs-unstable refresh following #932.

Changes:

  • Aligns Ruby pins and contributor requirements.
  • Refreshes nixpkgs, moving Nix builds to Go 1.26.9; the Go 1.26.10 security update remains pending.

[!TIP]
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.

File Description
flake.nix Uses Ruby 3.4 in the development shell.
flake.lock Updates the pinned nixpkgs revision.
CONTRIBUTING.md Documents the Ruby 3.4 requirement.
.mise.toml Pins local Ruby to 3.4.
.github/​workflows/​test.yml Updates both CI Ruby pins to 3.4.

Review effort: Balanced

@jeremy

jeremy commented Oct 21, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit: 5292e493df

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jeremy

jeremy commented Oct 21, 2026

Copy link
Copy Markdown
Member Author

Flagged for human review — the remaining Go 1.26.9 exposure in Nix builds is a security trade-off for the author to accept or not, so it stays open.

What I checked on 5292e49:

  • The Nix build compiles with go-1.26.9 (the Nix flake builds job pulls go-1.26.9 from cache.nixos.org). nixpkgs-unstable's channel is still at this lock's 5adc5083, with go_1_26 at 1.26.9, so no newer unstable lock exists to move to today.
  • GO-2026-6809 (crypto/x509 Certificate.Verify, fixed in 1.26.10) is reachable from cmd/basecamp, the only package nix/package.nix builds. govulncheck under go1.26.9 traces it through the sigstore check in basecamp upgrade, and every HTTPS request verifies its chain through the same function.
  • This PR doesn't introduce the exposure: main's lock builds Nix with 1.26.7, which is affected too. The PR moves Nix from 1.26.7 to 1.26.9 and leaves the CVE where it was.
  • Dependabot here covers gomod, github-actions and docker, not the flake, so nothing bumps flake.lock once unstable picks up 1.26.10. A person or a lane has to.

Options:

  1. Accept and merge as is, then bump flake.lock in a one-file follow-up once unstable carries 1.26.10 (master already does). This is my recommendation: the exposure is already on main, this PR narrows the Go gap, and the fix is a lock bump.
  2. Hold this PR until unstable advances, then bump flake.lock here so it lands with 1.26.10.
  3. Bridge now: override go_1_26 to 1.26.10 in nix/package.nix, so Nix CI and every Nix install compile Go from source until someone removes the override; or lock nixpkgs to a master revision, which the channel hasn't tested and the cache may not fully cover. I haven't tried either, because neither this Mac nor thelio has nix.

@jeremy

jeremy commented Oct 21, 2026

Copy link
Copy Markdown
Member Author

Review threads: none on 5292e49.
Review bodies: 1 finding answered (0 fixed, 0 declined, 1 open for a decision).
Open for a decision: #935 (review), Copilot's note that Nix builds stay on Go 1.26.9 (GO-2026-6809). The author needs to choose: accept it with a follow-up flake.lock bump, hold this PR for unstable, or bridge Go in nix/package.nix. Options and evidence: #935 (comment)

@jeremy
jeremy merged commit cb7db7e into main Oct 21, 2026
32 checks passed
@jeremy
jeremy deleted the nix-ruby-3-4 branch October 21, 2026 22:49
@jeremy jeremy mentioned this pull request Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI/CD workflows docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants