Skip to content

fix(rust): fix CI/CD release pipeline silently skipping all Rust releases#248

Merged
konard merged 4 commits intomainfrom
issue-247-f9c2488a0da2
Apr 12, 2026
Merged

fix(rust): fix CI/CD release pipeline silently skipping all Rust releases#248
konard merged 4 commits intomainfrom
issue-247-f9c2488a0da2

Conversation

@konard
Copy link
Copy Markdown
Contributor

@konard konard commented Apr 11, 2026

Summary

Fixes #247 — The Rust CI/CD pipeline was silently skipping all releases despite successful builds and tests.

Root Cause Analysis

Primary root cause: The auto-release and manual-release jobs in rust.yml lacked always() in their if conditions. In GitHub Actions, when a job in the transitive dependency chain is skipped (like changelog-check which only runs on PRs), all downstream jobs without always() are also skipped by default — even if the immediate needs jobs all succeed.

The dependency chain on push events:

changelog-check (SKIPPED) → lint (always(), PASSES) → build (always(), PASSES)
                           → test (always(), PASSES) ↗
lint, test, build → auto-release (NO always() → SKIPPED!)

Secondary issues:

  • The changelog version regex in create-github-release.mjs didn't support Rust's ## [version] - date format (only JS's ## version)
  • Rust release jobs were missing the format-github-release.mjs step for consistent release note formatting

Changes

  1. .github/workflows/rust.yml — Added always() with explicit needs.*.result == 'success' checks to both auto-release and manual-release job conditions, matching the pattern used in the working JS workflow
  2. scripts/create-github-release.mjs — Fixed changelog regex to handle both ## 0.22.0 (JS) and ## [0.8.0] - 2026-04-11 (Rust) formats
  3. .github/workflows/rust.yml — Added format-github-release.mjs step to both auto-release and manual-release jobs

Evidence

CI run 24273002407 on the most recent push to main:

Job Result
Changelog Fragment Check skipped (expected on push)
Lint and Format Check success
Test (ubuntu/macos) success
Build Package success
Auto Release skipped (the bug)

Full case study: docs/case-studies/issue-247/README.md

Test Plan

  • Verified new changelog regex handles both JS and Rust formats via experiments/test-changelog-regex.mjs
  • Verified old regex fails for Rust format (confirming the bug)
  • CI should pass on this PR
  • After merge, the next push to main with Rust changes should trigger the auto-release job (no longer skipped)

Adding .gitkeep for PR creation (default mode).
This file will be removed when the task is complete.

Issue: #247
@konard konard self-assigned this Apr 11, 2026
…ases (#247)

Root cause: The `auto-release` and `manual-release` jobs in rust.yml lacked
`always()` in their `if` conditions. When `changelog-check` is skipped on push
events (it only runs on PRs), GitHub Actions transitively skips all downstream
jobs that don't use `always()` — even though the immediate `needs` jobs succeed.

Fixes:
- Add `always()` with explicit result checks to auto-release and manual-release
  job conditions, matching the pattern already used in the JS workflow
- Fix changelog version regex in create-github-release.mjs to support Rust's
  `## [version] - date` format alongside JS's `## version` format
- Add format-github-release.mjs step to Rust release jobs for consistent
  release note formatting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@konard konard changed the title [WIP] Looks like CI/CD for Rust packages releases and GitHub releases is not working fix(rust): fix CI/CD release pipeline silently skipping all Rust releases Apr 11, 2026
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@konard konard marked this pull request as ready for review April 11, 2026 05:56
@konard
Copy link
Copy Markdown
Contributor Author

konard commented Apr 11, 2026

🤖 Solution Draft Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost: $4.009320

📊 Context and tokens usage:

  • Context window: 95.2K / 1M (10%) input tokens, 21.3K / 128K (17%) output tokens

Total: (83.6K + 5.9M cached) input tokens, 21.3K output tokens, $4.009320 cost

🤖 Models used:

  • Tool: Anthropic Claude Code
  • Requested: opus
  • Model: Claude Opus 4.6 (claude-opus-4-6)

📎 Log file uploaded as Gist (2082KB)


Now working session is ended, feel free to review and add any feedback on the solution draft.

@konard
Copy link
Copy Markdown
Contributor Author

konard commented Apr 11, 2026

✅ Ready to merge

This pull request is now ready to be merged:

  • All CI checks have passed
  • No merge conflicts
  • No pending changes

Monitored by hive-mind with --auto-restart-until-mergeable flag

@konard konard merged commit b1d0d1d into main Apr 12, 2026
16 checks passed
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.

Looks like CI/CD for Rust packages releases and GitHub releases is not working

1 participant