Skip to content

Test MSRV 1.89 in CI#134

Merged
leynos merged 4 commits intomainfrom
codex/update-ci-to-use-rust-1.89.0
Aug 25, 2025
Merged

Test MSRV 1.89 in CI#134
leynos merged 4 commits intomainfrom
codex/update-ci-to-use-rust-1.89.0

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented Aug 23, 2025

Summary

  • declare and pin MSRV at Rust 1.89
  • verify MSRV in CI and release pipeline

closes #119

Testing

  • RUSTUP_TOOLCHAIN=1.89.0 make fmt
  • RUSTUP_TOOLCHAIN=1.89.0 make lint
  • RUSTUP_TOOLCHAIN=1.89.0 make test

https://chatgpt.com/codex/tasks/task_e_68a977ffdd4c832291b4e2a63e2e8b57

Summary by Sourcery

Set MSRV to Rust 1.89 and enforce it across CI, release, and project manifests

Enhancements:

  • Pin minimum Rust version to 1.89.0 in Cargo.toml files and rust-toolchain.toml

CI:

  • Add CI matrix to run workflows on stable and Rust 1.89 toolchains
  • Restrict coverage and codescene upload to stable builds
  • Install and verify MSRV build in the release pipeline

@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Aug 23, 2025

Reviewer's Guide

This PR formally pins the Minimum Supported Rust Version (MSRV) to 1.89.0 by extending CI and test workflows with a dual-toolchain matrix, adding MSRV verification in the release pipeline, and bumping crate metadata and toolchain configs to 1.89.0.

Class diagram for updated crate metadata with MSRV

classDiagram
    class Netsuke {
        +name: "netsuke"
        +version: "0.1.0"
        +edition: "2024"
        +rust-version: "1.89.0"
    }
    class NinjaEnv {
        +name: "ninja_env"
        +version: "0.1.0"
        +edition: "2024"
        +rust-version: "1.89.0"
    }
Loading

File-Level Changes

Change Details Files
Add Rust version matrix in CI and netsukefile workflows to test both stable and MSRV toolchains
  • Added matrix strategy for rust versions [stable, '1.89.0']
  • Injected RUSTUP_TOOLCHAIN from matrix into env and setup steps
  • Scoped coverage and upload steps to run only on stable builds
.github/workflows/ci.yml
.github/workflows/netsukefile-test.yml
Verify MSRV build in the release pipeline
  • Install the 1.89.0 toolchain before release steps
  • Add step to build project with +1.89.0 cross target for MSRV verification
.github/workflows/release.yml
Pin crate rust-version metadata and toolchain files to MSRV 1.89.0
  • Updated rust-version in Cargo.toml for main and test_support crates
  • Updated rust-version in ninja_env/Cargo.toml
  • Set rust-toolchain.toml channel to 1.89.0
Cargo.toml
ninja_env/Cargo.toml
test_support/Cargo.toml
rust-toolchain.toml

Assessment against linked issues

Issue Objective Addressed Explanation
#119 Update rust-toolchain.toml to use stable 1.89.0 instead of nightly-2025-06-26.
#119 Add CI matrix entry to build/test with the 1.89.0 toolchain.
#119 Modify workflows (.github/workflows/release.yml and others) to include a step targeting +1.89.0 alongside the latest stable.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Aug 23, 2025

Warning

Rate limit exceeded

@leynos has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 2 minutes and 32 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 8f62d2a and 449a3aa.

📒 Files selected for processing (1)
  • .github/workflows/release.yml (5 hunks)

Summary by CodeRabbit

  • Chores
    • Raised minimum supported Rust version to 1.89.0 across the project and toolchain.
    • Updated CI to build/test on stable and 1.89.0, include rustfmt/clippy, and display toolchain versions.
    • Run coverage uploads only on stable using repository secrets.
    • Pinned GitHub Actions to specific SHAs for improved security and reproducibility.
    • Release workflow now declares explicit permissions and verifies MSRV builds before publishing; artifact and release steps pinned to SHAs.

Walkthrough

Summarise: Enforce MSRV 1.89.0 across CI and manifests; add CI matrix (stable, 1.89.0), gate coverage to stable, add MSRV verification steps in release workflow, pin many actions to commits, and update rust-toolchain and Cargo.toml rust-version fields to 1.89.0.

Changes

Cohort / File(s) Summary
CI matrices & caching
.github/workflows/ci.yml, .../netsukefile-test.yml
Add matrix rust: [stable, 1.89.0], set fail-fast: false, pass matrix.rust to Setup Rust (components rustfmt, clippy), add steps to show rustc/cargo versions, update cache keys to include matrix.rust, and gate tests/coverage steps to matrix.rust == 'stable'.
Release MSRV validation & action pinning
.github/workflows/release.yml
Pin multiple actions to specific SHAs, declare job permissions, install 1.89.0 toolchain, add +1.89.0 targets, show Rust versions, and run cross +1.89.0 build to verify MSRV alongside stable builds.
Workspace manifests
Cargo.toml, ninja_env/Cargo.toml, test_support/Cargo.toml
Set [package].rust-version = "1.89.0" (bumped from 1.85.0 where present).
Toolchain file
rust-toolchain.toml
Replace nightly-2025-06-26 with 1.89.0; keep components ["rustfmt","clippy"].

Sequence Diagram(s)

sequenceDiagram
  participant Dev as Push/PR
  participant CI as CI Workflows
  participant Matrix as Build/Test Matrix
  participant Release as Release Workflow
  participant CodeScene as CodeScene

  Dev->>CI: Trigger workflows
  CI->>Matrix: Start jobs (matrix: stable, 1.89.0)
  Note over Matrix: Setup Rust with matrix.rust\nInstall components: rustfmt, clippy
  Matrix->>Matrix: Build & lint (both toolchains)
  alt matrix.rust == stable
    Matrix->>Matrix: Run tests & measure coverage
    Matrix->>CodeScene: Upload coverage (if secret present)
  else matrix.rust == 1.89.0
    Matrix-->>CodeScene: Skip coverage/upload
  end

  Dev->>Release: Tag/PR triggers release
  Release->>Release: Setup stable and install 1.89.0
  Release->>Release: Add targets (+stable and +1.89.0)
  Release->>Release: cross build (stable) and cross +1.89.0 build (MSRV verify)
  Release->>Release: Package & publish artifacts
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Assessment against linked issues

Objective Addressed Explanation
Update rust-toolchain.toml to stable 1.89.0 instead of nightly ([#119])
Add CI matrix entry to run with 1.89.0 toolchain ([#119])
Modify workflows, including release, to include +1.89.0 alongside latest stable ([#119])

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Bump declared MSRV to 1.89.0 (Cargo.toml, ninja_env/Cargo.toml, test_support/Cargo.toml) Manifest rust-version bumps are a repository policy/action beyond the issue's CI alignment request; the linked issue required CI/toolchain alignment, not changing declared MSRV in package manifests.

Poem

Rust pins tightened, pipelines sing,
Two toolchains march and checks take wing.
Cross builds dance and actions lock,
MSRV stands on solid rock.
CI hums steady — 1.89.0. 🚀

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codex/update-ci-to-use-rust-1.89.0

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

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

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

codescene-delta-analysis[bot]

This comment was marked as outdated.

sourcery-ai[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 10

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/ci.yml (1)

42-49: Fix CodeScene upload step to use secrets in the if condition

Enforce the use of the secrets context for the guard and pass the token input directly from secrets.

  • File: .github/workflows/ci.yml
  • Step: Upload coverage data to CodeScene
  • Remove the step-level env block for CS_ACCESS_TOKEN (it isn’t available when if is evaluated).
  • Change the if to check secrets.CS_ACCESS_TOKEN != ''.
  • Pass the token via secrets.CS_ACCESS_TOKEN in the action input.
       - name: Upload coverage data to CodeScene
-        env:
-          CS_ACCESS_TOKEN: ${{ secrets.CS_ACCESS_TOKEN }}
-        if: matrix.rust == 'stable' && env.CS_ACCESS_TOKEN
+        name: Upload coverage data to CodeScene
+        if: matrix.rust == 'stable' && secrets.CS_ACCESS_TOKEN != ''
         uses: leynos/shared-actions/.github/actions/upload-codescene-coverage@c6559452842af6a83b83429129dccaf910e34562
         with:
           format: lcov
-          access-token: ${{ env.CS_ACCESS_TOKEN }}
+          access-token: ${{ secrets.CS_ACCESS_TOKEN }}
           installer-checksum: ${{ vars.CODESCENE_CLI_SHA256 }}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 5fd3cad and 73ce468.

📒 Files selected for processing (7)
  • .github/workflows/ci.yml (2 hunks)
  • .github/workflows/netsukefile-test.yml (1 hunks)
  • .github/workflows/release.yml (2 hunks)
  • Cargo.toml (1 hunks)
  • ninja_env/Cargo.toml (1 hunks)
  • rust-toolchain.toml (1 hunks)
  • test_support/Cargo.toml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
Cargo.toml

📄 CodeRabbit inference engine (AGENTS.md)

Cargo.toml: Use explicit version ranges and keep dependencies up to date
Mandate SemVer caret requirements for all dependencies (e.g., "1.2.3")
Prohibit wildcard (*) and open-ended (>=) version specifiers; use ~ only with a specific, documented reason

Files:

  • Cargo.toml
🔍 Remote MCP

Additional context for reviewing the MSRV bump to Rust 1.89.0:

  • The rust-version field in each Cargo.toml specifies the minimum supported Rust toolchain and is enforced by Cargo (since v1.56) — Cargo will refuse to build with a compiler older than the declared version. (doc.rust-lang.org)

  • Rust 1.89.0 became the stable release on August 7, 2025, ensuring that the MSRV pinned in CI and in rust-toolchain.toml corresponds to an officially published toolchain. (blog.rust-lang.org)

⏰ Context from checks skipped due to timeout of 120000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build-test (stable)
🔇 Additional comments (5)
rust-toolchain.toml (1)

2-2: Pin the toolchain to 1.89.0 — LGTM.

Keep the components list aligned with CI to avoid drift.

Run the verification script to ensure MSRV is consistently declared and referenced across the repo.

#!/bin/bash
set -euo pipefail

echo "1) Verify rust-toolchain.toml channel:"
rg -n "^channel\s*=\s*\"1\.89\.0\"" rust-toolchain.toml || { echo "Mismatch in rust-toolchain.toml"; exit 1; }

echo "2) Verify all Cargo.toml files declare rust-version = \"1.89.0\":"
rg -n --glob 'Cargo.toml' '^\s*rust-version\s*=\s*"([^"]+)"' -H | sed 's/^/FOUND: /'
if rg -n --glob 'Cargo.toml' -P '^\s*rust-version\s*=\s*"(?!1\.89\.0)"' ; then
  echo "ERROR: One or more crates do not declare rust-version = \"1.89.0\""
  exit 1
fi

echo "3) Verify no workflows still reference nightly or an older MSRV:"
rg -n ".github/workflows" -e "nightly" -e "1\.85\.0" -e "1\.86\.0" -e "1\.87\.0" -e "1\.88\.0" || true

echo "4) Verify CI and other workflows reference 1.89.0:"
rg -n ".github/workflows" -e "1\.89\.0"
test_support/Cargo.toml (1)

5-5: Align crate MSRV to 1.89.0 — LGTM.

Match this with CI to ensure tests run on the declared MSRV.

Cargo.toml (1)

5-5: Declare rust-version = "1.89.0" in the root crate — LGTM.

Pin the workspace MSRV via manifests as done here and in member crates to let Cargo fail-fast on older compilers.

ninja_env/Cargo.toml (1)

5-5: Update crate MSRV to 1.89.0 — LGTM.

This keeps the workspace consistent with CI and rust-toolchain.toml.

.github/workflows/ci.yml (1)

36-36: Gate coverage generation to stable — LGTM.

Keep coverage noise down while still validating MSRV builds in the matrix.

Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/netsukefile-test.yml
Comment thread .github/workflows/netsukefile-test.yml
Comment thread .github/workflows/netsukefile-test.yml
Comment thread .github/workflows/release.yml
Comment thread .github/workflows/release.yml Outdated
codescene-delta-analysis[bot]

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
.github/workflows/ci.yml (1)

21-35: Speed up builds by caching the Cargo registry and git index per toolchain.

Add a cache step keyed by matrix.rust. Omit target to avoid stale artefacts across rustc revisions.

   steps:
     - uses: actions/checkout@v4
+    - name: Cache Cargo (registry + git)
+      uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
+      with:
+        path: |
+          ~/.cargo/registry
+          ~/.cargo/git
+        key: ${{ runner.os }}-cargo-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }}
+        restore-keys: |
+          ${{ runner.os }}-cargo-${{ matrix.rust }}-
+          ${{ runner.os }}-cargo-
     - name: Setup Rust
       uses: leynos/shared-actions/.github/actions/setup-rust@c6559452842af6a83b83429129dccaf910e34562
.github/workflows/release.yml (1)

109-117: Avoid caching target across different toolchains; scope the cache or drop target.

The cache key ignores the compiler, and target contains artefacts compiled with +1.89.0 before the stable build. Prevent stale or incompatible incremental states.

Apply one of these diffs:

Option A — only cache registry and git:

       with:
         path: |
           ~/.cargo/registry
           ~/.cargo/git
-          target
         key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
         restore-keys: |
           ${{ runner.os }}-cargo-

Option B — keep target but scope key by toolchain channel:

-        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+        key: ${{ runner.os }}-cargo-stable-${{ hashFiles('**/Cargo.lock') }}
         restore-keys: |
-          ${{ runner.os }}-cargo-
+          ${{ runner.os }}-cargo-stable-

Then add a separate cache step earlier for the MSRV build keyed with cargo-1.89.0-… if you truly need to cache its target.

♻️ Duplicate comments (9)
.github/workflows/netsukefile-test.yml (3)

12-15: Keep matrix with fail-fast: false (LGTM).

Run both toolchains to completion to surface independent failures.


27-31: Emit toolchain versions for auditability (LGTM).

Log rustup, rustc, and cargo versions to disambiguate matrix runs.


39-42: Scope cache keys by toolchain (LGTM).

Isolate caches between stable and MSRV to prevent artefact bleed.

.github/workflows/ci.yml (2)

12-15: Keep fail-fast: false (LGTM).

Run the full matrix to surface both stable and MSRV failures.


24-27: Install rustfmt and clippy for each toolchain (LGTM).

Guarantee fmt/lint availability on stable and 1.89.0.

.github/workflows/release.yml (4)

88-97: Install MSRV, add target, and emit versions (LGTM).

Set up the 1.89.0 toolchain and target triple and log versions to make the MSRV verification reproducible.


106-107: Verify MSRV build in the release pipeline (LGTM).

Fail fast if 1.89.0 cannot build the release target.


86-97: Reorder to fail earlier if MSRV is broken (optional).

Install and add target for 1.89.0, then run MSRV verify before installing cross to save time on broken tags. You already follow this ordering; keep it as policy for future edits.


1-10: Validate repo-wide MSRV alignment to 1.89.0.

Run the checks below and patch any stragglers (rust-toolchain.toml and all Cargo.toml rust-version fields).

#!/bin/bash
set -euo pipefail

echo "== rust-toolchain.toml channel =="
rg -n '^channel\s*=\s*"1\.89\.0"$' rust-toolchain.toml || true

echo
echo "== Manifests with rust-version 1.89.0 =="
rg -nP '^\s*rust-version\s*=\s*"1\.89\.0"\s*$' -g '!**/target/**' Cargo.toml || true

echo
echo "== Workflows using MSRV =="
rg -n "rust: \\[stable, '1.89.0'\\]" .github/workflows || true
rg -n "toolchain: \\$\\{\\{ matrix.rust \\}\\}" .github/workflows || true
rg -n "cross \\+1\\.89\\.0 build" .github/workflows || true

echo
echo "Review any missing hits and update to 1.89.0."
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 73ce468 and 35fedba.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml (3 hunks)
  • .github/workflows/netsukefile-test.yml (1 hunks)
  • .github/workflows/release.yml (5 hunks)
🧰 Additional context used
🪛 YAMLlint (1.37.1)
.github/workflows/release.yml

[warning] 58-58: too few spaces before comment: expected 2

(comments)


[warning] 61-61: too few spaces before comment: expected 2

(comments)

🔍 Remote MCP Ref

Relevant facts for reviewing MSRV changes

  • The Cargo manifest supports a rust-version field in [package]; this declares the minimum supported Rust compiler and is placed in Cargo.toml’s [package] section.
  • Cargo will refuse to build with a compiler older than the declared rust-version (i.e., the field is enforced by Cargo).
  • The rust-version entry affects workspace/crate compatibility expectations and should be kept aligned with CI/toolchain pins (rust-toolchain.toml and CI matrices) to avoid drift.
⏰ Context from checks skipped due to timeout of 120000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build-test (stable)
🔇 Additional comments (3)
.github/workflows/netsukefile-test.yml (1)

18-19: Export RUSTUP_TOOLCHAIN per job (LGTM).

Align Makefile invocations with the selected toolchain via env propagation.

.github/workflows/ci.yml (1)

37-37: Gate coverage to stable (LGTM).

Avoid divergent coverage deltas from MSRV builds.

.github/workflows/release.yml (1)

130-144: Pin upload/download actions (LGTM).

Use commit SHAs for upload-artifact and download-artifact to harden supply chain.

Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/netsukefile-test.yml Outdated
Comment thread .github/workflows/release.yml Outdated
Comment thread .github/workflows/release.yml
codescene-delta-analysis[bot]

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/release.yml (1)

111-119: Scope Cargo cache key by target triple to prevent cross‑target cache thrash

Key the cache by matrix.target so x86_64/aarch64 artefacts don’t overwrite each other.

Apply this diff:

       - name: Cache cargo registry
         uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809  # v4
         with:
           path: |
             ~/.cargo/registry
             ~/.cargo/git
             target
-          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+          key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
           restore-keys: |
-            ${{ runner.os }}-cargo-
+            ${{ runner.os }}-cargo-${{ matrix.target }}-
+            ${{ runner.os }}-cargo-
♻️ Duplicate comments (9)
.github/workflows/netsukefile-test.yml (3)

12-15: Disable fail-fast and add matrix — LGTM

Run the full matrix and surface all failures; the configuration is correct.


27-31: Echo active Rust toolchain — LGTM

Print rustup, rustc, and cargo versions for traceability across matrix axes.


33-41: Scope Cargo cache by toolchain; stop caching target — LGTM

Prevent cross‑toolchain artefact bleed and avoid defeating the cache when cleaning.

.github/workflows/ci.yml (2)

12-15: Disable fail-fast and add Rust matrix — LGTM

Execute both stable and MSRV jobs to completion.


25-32: Install rustfmt/clippy and echo toolchain — LGTM

Guarantee formatter/linter availability on each toolchain and log versions.

.github/workflows/release.yml (4)

13-14: Declare least‑privilege permissions for build job — LGTM

Keep contents: read for the build job.


90-109: Install MSRV, add target, log versions, and verify MSRV build — LGTM

Validate MSRV early and log both MSRV and stable toolchain versions.


139-140: Declare least‑privilege permissions for release job — LGTM

Grant contents: write to publish artefacts and notes.


60-60: Pin marketplace actions to SHAs — LGTM

Harden supply‑chain by pinning checkout, setup‑python, cache, upload‑artifact, gh‑release, and download‑artifact to commits.

Also applies to: 63-63, 100-100, 132-132, 143-147

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 35fedba and 8f62d2a.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml (2 hunks)
  • .github/workflows/netsukefile-test.yml (1 hunks)
  • .github/workflows/release.yml (5 hunks)
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/ci.yml

48-48: context "secrets" is not allowed here. available contexts are "env", "github", "inputs", "job", "matrix", "needs", "runner", "steps", "strategy", "vars". see https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability for more details

(expression)

🔍 Remote MCP Ref

Relevant facts to help review this PR

  • Cargo's rust-version in Cargo.toml is enforced by Cargo as the minimum compiler; builds will fail on older compilers — ensure CI actually runs 1.89.0 to match the new rust-version.

  • GitHub Actions docs show how to specify a Rust toolchain in workflows and recommend verifying toolchain versions in CI (e.g., rustup show; rustc --version; cargo --version) — this supports adding the "Show rustc version" steps.

  • Pinning third‑party Actions to commit SHAs is recommended for security/reproducibility; docs describe using commit SHAs instead of tags/major versions. Review pinned SHAs for desired tradeoffs (stability vs. automatic updates).

  • actions/cache guidance: choose cache keys and be cautious about caching build outputs (target) when workflows run clean or different toolchains; the PR's change to not cache target and to include matrix.rust in cache keys aligns with best practices.

  • Clippy and some tooling document considerations for minimum-supported-Rust-version; if linters or formatters are run under multiple toolchains, confirm they behave identically across stable and 1.89.0.

  • When verifying MSRV for cross-compilation, using cross with an explicit toolchain (e.g., cross +1.89.0 build) is a valid approach and matches the PR's MSRV verification in release.yml.

Sources used: github Actions docs (specifying Rust version, pinning SHAs); rust-bitcoin README MSRV examples; clippy MSRV docs; actions/cache docs; cross usage example

🔇 Additional comments (3)
.github/workflows/netsukefile-test.yml (1)

18-19: Keep RUSTUP_TOOLCHAIN in env — aligns with setup input

Export the toolchain and also pass it to the setup action. With the added “Show rustc version” step this is auditable.

.github/workflows/ci.yml (2)

42-42: Gate coverage generation to stable — LGTM

Avoid toolchain drift in coverage metrics.


48-53: Confirm step-level secret context fix

All instances of secrets.CS_ACCESS_TOKEN in step-level if conditions have been replaced with env.CS_ACCESS_TOKEN and the corresponding env block added. No remaining step-level if uses secrets.*. Workflow now passes actionlint.

Comment thread .github/workflows/release.yml
@leynos leynos merged commit d60cbd3 into main Aug 25, 2025
4 checks passed
@leynos leynos deleted the codex/update-ci-to-use-rust-1.89.0 branch August 25, 2025 05:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Align CI toolchain with declared MSRV (Rust 1.85.0)

1 participant