Skip to content

fix(ci): serialize mise bootstrap to protect Node GPG state - #287

Merged
huronat merged 1 commit into
mainfrom
fix/ci-serialize-mise-bootstrap
Sep 16, 2026
Merged

huronat merged 1 commit into
mainfrom
fix/ci-serialize-mise-bootstrap

Conversation

@huronat

@huronat huronat commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Concurrent installation of the pinned Node 24.12.0 and 22.23.2 versions can race GPG's initial directory/keyring creation on clean runners. This failed both the Rust bootstrap and the Python distribution build before project checks ran.

Serialize tool installation with --jobs=1 in CI/release mise-action setup and tools/init.sh. Install the complete root tool set in the Python/npm distribution setup: their first mise exec otherwise auto-installs omitted tools outside the serialized install. All tool/action version pins and signature verification remain unchanged; normal task/build concurrency is unchanged. The native audio setup uses an explicit Node-free tool set and needs no change.

The pinned mise install implementation supports --jobs=1, and the pinned action implementation forwards install_args to that command.

Validation: 120 focused CI policy/public-tree tests pass; Ruff formatting/lint, actionlint, and git diff --check pass. Regression checks cover all automatic workflow installs, prevent partial installs from deferring the race to mise exec, and verify init stops when installation fails.

Clean Linux verification at 996b07feedc2a55cebd6962895e5d7a0d7afc0b8: fresh bootstrap and Python distributions pass. Both logs show Node 24 installation completing before Node 22 starts, with successful GPG signatures and checksums for both. The distribution job's first mise exec no longer installs omitted tools.

The complete CI run, including CI / Required, and all CodeQL checks pass at this head. CodeRabbit approved the same commit with no inline findings.

@huronat
huronat requested a review from a team as a code owner September 16, 2026 15:21
@coderabbitai

coderabbitai Bot commented Sep 16, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 2a16e8b6-2eec-42a9-bb36-319bac41060d

📥 Commits

Reviewing files that changed from the base of the PR and between b0f0eeb and 996b07f.

📒 Files selected for processing (9)
  • .github/workflows/ci.yml
  • .github/workflows/release-docker.yml
  • .github/workflows/release-helm.yml
  • .github/workflows/release-native.yml
  • .github/workflows/release-npm.yml
  • .github/workflows/release-python.yml
  • .github/workflows/release.yml
  • tools/ci/tests/test_required_ci.py
  • tools/init.sh

Limit details: You’ve used all 8 included reviews currently available.


📝 Walkthrough

Walkthrough

CI and release workflows now serialize mise tool installation with --jobs=1. The bootstrap script uses the same setting. Tests validate workflow configuration and bootstrap command ordering.

Changes

Mise installation serialization

Layer / File(s) Summary
CI workflow installation settings
.github/workflows/ci.yml
The policy, language, contracts, Helm, live SDK, and CPU-stack jobs pass install_args: --jobs=1 to mise-action.
Release workflow installation settings
.github/workflows/release-docker.yml, .github/workflows/release-helm.yml, .github/workflows/release-native.yml, .github/workflows/release-npm.yml, .github/workflows/release-python.yml, .github/workflows/release.yml
Release jobs use serialized mise installation. The npm and Python workflows replace explicit tool lists with installation of all configured tools using --jobs=1.
Bootstrap script and validation
tools/init.sh, tools/ci/tests/test_required_ci.py
tools/init.sh runs mise install --jobs=1. Tests validate workflow arguments and confirm that full-sync runs only after successful installation.

Suggested reviewers: mamayer19

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to 996b0

No actionable current-head risk remains; the CI bootstrap race mitigation is ready to merge.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 2 files. (7 skipped: 7 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: serializing mise bootstrap installation to prevent Node GPG state races in CI.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 2 files. (7 skipped: 7 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ci-serialize-mise-bootstrap

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

@huronat
huronat merged commit 538daff into main Sep 16, 2026
19 checks passed
@huronat
huronat deleted the fix/ci-serialize-mise-bootstrap branch September 16, 2026 15:36
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