Skip to content

v0.10.1 chore: add release hygiene workflow - #128

Merged
nutt-adam merged 2 commits into
mainfrom
codex/release-hygiene
May 4, 2026
Merged

v0.10.1 chore: add release hygiene workflow#128
nutt-adam merged 2 commits into
mainfrom
codex/release-hygiene

Conversation

@nutt-adam

@nutt-adam nutt-adam commented May 4, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Issue: release hygiene after PRs 125, 126, and 127
  • What changed:
    • Adds a tag-driven Release GitHub Actions workflow.
    • Bumps Tutti to 0.10.1 / 0.10.1.0.
    • Documents the release playbook in VERSIONING.md and points README at it.
    • Adds CHANGELOG notes for the release automation and v0.10 train.

Versioning (required)

  • I updated Cargo.toml version
  • I updated VERSION
  • I added/updated CHANGELOG.md
  • I documented release impact in this PR

SemVer choice

  • PATCH (release automation / packaging hygiene, non-breaking)
  • MINOR (new capability/new CLI/workflow contract change)
  • MAJOR (breaking contract)

Version selected: v0.10.1

Release impact

After this merges and main CI passes, create and push v0.10.1 from main. The Release workflow will validate version alignment, run Rust gates, build Linux/macOS archives, publish a GitHub Release with checksums, and publish to crates.io if CARGO_REGISTRY_TOKEN is configured.

Validation

  • cargo fmt --all -- --check
  • cargo check --locked
  • cargo clippy --locked -- -D warnings
  • cargo test --locked (456 unit tests + 1 integration test passed)
  • cargo package --locked
  • cargo build --release --locked
  • release note extraction script tested locally
  • release.yml parsed as YAML locally

Release

  • Tag planned/applied (v0.10.1)
  • Tag notes include issue IDs / release tranche context

Summary by CodeRabbit

  • Chores

    • Version bumped to 0.10.1
    • Automated release pipeline established to build, package, and publish binaries across Linux and macOS platforms with checksum verification
  • Documentation

    • Versioning and release automation documentation updated with release checklist and process guidelines

@coderabbitai

coderabbitai Bot commented May 4, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@nutt-adam has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 53 minutes and 40 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ 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.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6ecf13fc-34d5-4478-b4dc-d79fd25419be

📥 Commits

Reviewing files that changed from the base of the PR and between a7089ce and 0c12b55.

📒 Files selected for processing (1)
  • .github/workflows/release.yml
📝 Walkthrough

Walkthrough

This PR introduces a GitHub Actions release workflow that automates version tag validation, builds release binaries for Linux and macOS platforms, creates archives with SHA-256 checksums, publishes GitHub Releases, and conditionally publishes to crates.io. Version is bumped to 0.10.1, and release procedures are documented.

Changes

Release Automation

Layer / File(s) Summary
Version Bump
Cargo.toml, VERSION, CHANGELOG.md
Crate version updated from 0.10.0 to 0.10.1; 0.10.1 changelog entry added describing release automation and versioning updates.
Release Workflow Implementation
.github/workflows/release.yml
Multi-job workflow triggered on version tags (vX.Y.Z) or manual dispatch. validate job enforces tag format, compares against Cargo.toml and VERSION files, extracts release notes from changelog, and runs formatting/check/clippy/test/package CI gates. build job compiles across Linux x86_64, macOS arm64, and macOS x86_64 targets, creates .tar.gz archives and .sha256 checksums per platform. github-release job publishes GitHub Release with archives and checksums. crates job conditionally publishes to crates.io when CARGO_REGISTRY_TOKEN secret is configured.
Release Documentation
VERSIONING.md, README.md
VERSIONING.md expanded to clarify SemVer tag/Cargo format vs. four-slot VERSION file, formalize PR version-bump requirements, document tag validation constraints, add workflow step-by-step example, detail automated release workflow behavior, and provide release checklist. README link text updated from "Versioning and release policy" to "Versioning and release automation".

Sequence Diagram

sequenceDiagram
    participant Committer
    participant GitHub as GitHub<br/>(Tag Push)
    participant Validate as Validate Job
    participant Build as Build Job<br/>(Matrix)
    participant GitHub_API as GitHub<br/>Release API
    participant Crates as crates.io
    
    Committer->>GitHub: Push vX.Y.Z tag
    GitHub->>Validate: Trigger workflow
    
    Validate->>Validate: Check tag format<br/>Verify Cargo.toml version<br/>Verify VERSION file<br/>Extract release notes<br/>Run: fmt/check/clippy/test/package
    
    alt Validation passes
        Validate->>Build: Trigger (dependent job)
        par Platform builds
            Build->>Build: Build Linux x86_64<br/>Create .tar.gz & .sha256
            Build->>Build: Build macOS arm64<br/>Create .tar.gz & .sha256
            Build->>Build: Build macOS x86_64<br/>Create .tar.gz & .sha256
        end
        
        Build->>GitHub_API: Download artifacts<br/>Publish GitHub Release<br/>Attach archives & checksums
        
        alt CARGO_REGISTRY_TOKEN present
            GitHub_API->>Crates: cargo publish
            Crates->>GitHub_API: Publish confirmation
        else Token absent
            GitHub_API->>GitHub_API: Skip crates.io publish<br/>Release remains available
        end
    else Validation fails
        Validate->>GitHub: Workflow stops
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • nutthouse/tutti#42: Introduces foundational VERSIONING.md that this PR expands and operationalizes through the automated release workflow.
  • nutthouse/tutti#60: Also modifies Cargo.toml version field in package metadata.
  • nutthouse/tutti#74: Also updates crate version and release changelog entries.

Poem

🐰 A workflow so clever, so precise and so keen,
Validates each tag in the automation machine,
Builds all the binaries from east coast to west,
Then publishes releases—the automated best!
Version bumped to 0.10.1, smooth and clean.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding release automation workflow for version 0.10.1.
Description check ✅ Passed The description follows the template structure completely: includes summary with issue references, completes all versioning checklist items, specifies SemVer choice (PATCH), and documents validation and release impact thoroughly.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/release-hygiene

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 and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
.github/workflows/release.yml (1)

32-107: ⚡ Quick win

Add Rust build cache to the validate job to avoid full cold recompilation on every release.

The validate job installs Rust and runs cargo check, cargo clippy, cargo test (456+ tests), and cargo package with no caching. Adding Swatinem/rust-cache avoids rebuilding the entire dependency graph from scratch on each tag push.

♻️ Proposed addition
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy, rustfmt
+
+     - uses: Swatinem/rust-cache@v2
+
      - name: Validate tag and versions
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml around lines 32 - 107, The validate job
currently runs cargo check/clippy/test/package without any build cache, causing
full recompilation each run; add a rust cache step (e.g., using
Swatinem/rust-cache@v1) into the validate job before the build steps (before the
Format/Check/Clippy/Test/Package steps) to cache target/ and
Cargo.lock/Cargo.toml-based keys so incremental builds are reused; reference the
job that contains the "Validate tag and versions" step (id: version) and insert
the cache step immediately after that block and before the "Format" step to
restore/save the cache across runs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/release.yml:
- Around line 121-129: The macos-x86_64 runner entry uses the retired runner
value "macos-13"; update that entry so the os field is "macos-15-intel" while
keeping the target as "x86_64-apple-darwin" (i.e., modify the macos-x86_64 job
definition). Also note the macos-arm64 entry uses "macos-14" which will be
deprecated soon—plan to migrate that job to macos-15 or macos-latest when
appropriate.

---

Nitpick comments:
In @.github/workflows/release.yml:
- Around line 32-107: The validate job currently runs cargo
check/clippy/test/package without any build cache, causing full recompilation
each run; add a rust cache step (e.g., using Swatinem/rust-cache@v1) into the
validate job before the build steps (before the Format/Check/Clippy/Test/Package
steps) to cache target/ and Cargo.lock/Cargo.toml-based keys so incremental
builds are reused; reference the job that contains the "Validate tag and
versions" step (id: version) and insert the cache step immediately after that
block and before the "Format" step to restore/save the cache across runs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a0393044-56d3-43e1-af7f-0e40f4b89911

📥 Commits

Reviewing files that changed from the base of the PR and between ddff3d4 and a7089ce.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • .github/workflows/release.yml
  • CHANGELOG.md
  • Cargo.toml
  • README.md
  • VERSION
  • VERSIONING.md

Comment thread .github/workflows/release.yml
@nutt-adam
nutt-adam merged commit 7b6c803 into main May 4, 2026
11 checks passed
@nutt-adam
nutt-adam deleted the codex/release-hygiene branch May 4, 2026 23:29
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