Skip to content

chore: synchronize release version management - #934

Merged
ndizazzo merged 2 commits into
mainfrom
chore/revise-version-management
Jul 1, 2026
Merged

chore: synchronize release version management#934
ndizazzo merged 2 commits into
mainfrom
chore/revise-version-management

Conversation

@ndizazzo

@ndizazzo ndizazzo commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • sync mesh-llm release/version surfaces to the current GitHub release, v0.72.1
  • add just release <version> as a synchronous release-prep and publish command
  • expand scripts/release-version.sh so future bumps update Rust crates, lockfile entries, SDK/package manifests, docs, config schema metadata, and website source examples together
  • add fail-closed release preflight checks for invalid/non-advancing versions, existing tags/releases, dirty worktrees, and non-current main

Rationale

The previous release workflow accepted a version input for build jobs, but it did not reliably produce and build from a source commit that contained the corresponding version bump. That made the repository drift from published releases and left multiple public surfaces stuck on older versions.

This PR makes the release commit the first-class source of truth. just release <version> prepares the versioned commit on main, pushes it, dispatches the GitHub release workflow against that commit, watches the run via gh, and then attaches generated release notes to the GitHub release after a successful non-canary build. That avoids release branches and keeps the release build tied to the commit containing the version update.

The release command also fails closed before it can publish an ambiguous release: the target version must parse as semver, advance from the workspace version, and not already exist as a local tag, remote tag, or GitHub release. This supports RC progression such as 0.72.0-rc1 to 0.72.0-rc3, while preventing accidental rebuilds of an already released version.

Validation

  • just test-all
  • scripts/release-version.sh 0.72.1
  • bash -n scripts/release.sh scripts/release-version.sh
  • cargo metadata --format-version 1
  • just check-release
  • git diff --check

Note: the first full just test-all attempt exposed the expected config schema snapshot drift after syncing the built-in plugin version, and Playwright Chromium needed to be installed for the updated Playwright version. After updating the snapshot and running pnpm exec playwright install chromium, the final full just test-all passed.

Summary by CodeRabbit

  • New Features

    • Added a new release helper command to streamline preparing and publishing GitHub releases.
  • Documentation

    • Updated SDK, CLI, and runtime documentation/examples to reference release version 0.72.1.
    • Refreshed install snippets across Rust, Node.js, Swift, Kotlin, and native runtime docs.
  • Chores

    • Bumped workspace and package versions to 0.72.1 across the project.
    • Updated the supported version list and UI placeholders to align with the latest release.

@github-actions
github-actions Bot requested a review from i386 June 30, 2026 22:00
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR bumps the workspace, crate, package, SDK, and documentation version references to 0.72.1, and adds release automation scripts plus a Justfile recipe to run them.

Changes

Version Bump Across Manifests, Config, and Docs

Layer / File(s) Summary
Workspace root and config schema
Cargo.toml, crates/mesh-llm-config/src/model/built_in_schema.rs, crates/mesh-llm-config/src/model/built_in_schema/presentation.rs, crates/mesh-llm-host-runtime/tests/fixtures/config_schema_reference.json
Updates the workspace/package version, known mesh version list, presentation placeholders, and a fixture version field to 0.72.1.
Rust crate dependency bumps
crates/mesh-client/Cargo.toml, crates/mesh-llm-*/Cargo.toml, crates/model-*/Cargo.toml, crates/skippy-*/Cargo.toml, crates/openai-frontend/Cargo.toml
Updates path-based dependency version requirements across many crate manifests while keeping paths and feature flags unchanged.
Package manifest version bumps
crates/mesh-llm-ui/package.json, sdk/node/package.json
Bumps the package version fields to 0.72.1.
Docs and README examples
crates/mesh-llm-native-runtime/README.md, crates/mesh-llm-sdk/README.md, docs/SDK.md, docs/design/NATIVE_RUNTIMES.md, docs/sdk/node.md, docs/sdk/rust.md, docs/sdk/swift.md, website/src/docs/pages/CLI.md
Updates version examples in READMEs and documentation, including the CLI guidance text.
Kotlin and Swift SDK updates
sdk/kotlin/README.md, sdk/kotlin/build.gradle.kts, sdk/kotlin/example/example-jvm/build.gradle.kts, sdk/swift/README.md, sdk/swift/scripts/generate-swift-bindings.sh
Updates Kotlin project versions, Kotlin example versions, the Swift installation example, and the Swift bindings generation script version pin.

Release Automation Scripts

Layer / File(s) Summary
release-version.sh helpers
scripts/release-version.sh
Adds helpers to read the workspace version, rewrite literal and JSON version references, update the known mesh versions list, and apply them in the main bump flow.
release.sh release flow
scripts/release.sh
Adds the release script entrypoint, version and preflight checks, release-source bump and push steps, workflow dispatch and watch logic, and release note attachment.
Justfile release recipe
Justfile
Adds a Just recipe that invokes the release script with a version and forwarded arguments.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers

  • michaelneale
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: synchronizing release/version management across the repo.
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.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/revise-version-management

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.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 4

Caution

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

⚠️ Outside diff range comments (1)
crates/mesh-llm-config/src/model/built_in_schema/presentation.rs (1)

246-261: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Inconsistent min/max placeholder example after bump.

mesh_requirements.min_node_version placeholder was bumped to "0.72.1", but mesh_requirements.max_node_version placeholder is still "0.69.0" (unchanged). The resulting example now shows a minimum version higher than the maximum version, which is a nonsensical/confusing placeholder pair for users configuring this setting.

🐛 Proposed fix
         "mesh_requirements.max_node_version" => Some(sp(
             "Maximum node version",
             "Highest mesh-llm node version allowed when this requirement-aware mesh is created or joined.",
             ATTESTATION_CATEGORY,
             20,
         )
-        .placeholder("0.69.0")
+        .placeholder("0.72.1")
         .hint("text")),
🤖 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 `@crates/mesh-llm-config/src/model/built_in_schema/presentation.rs` around
lines 246 - 261, The placeholder values for the node version requirements are
inconsistent in the presentation schema: `mesh_requirements.min_node_version`
was updated to a newer example while `mesh_requirements.max_node_version` still
shows an older one, creating a confusing min-greater-than-max pair. Update the
`sp(...)` entries in `presentation.rs` so the
`mesh_requirements.min_node_version` and `mesh_requirements.max_node_version`
placeholders form a sensible ordered example, keeping the two values aligned and
easy to understand for users.
🧹 Nitpick comments (3)
scripts/release.sh (2)

201-242: 🩺 Stability & Availability | 🔵 Trivial

Direct push to origin/main bypasses normal PR review for the release-prep commit.

push_release_source_commit pushes straight to main (line 241), which requires the operator's credentials to bypass any branch-protection rules requiring PR review/status checks on main. Worth confirming this is intentional and that main is configured to allow it for the release automation path (or a bot/service account), otherwise this step will fail at push time.

🤖 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 `@scripts/release.sh` around lines 201 - 242, The `push_release_source_commit`
flow is pushing directly to `origin/main`, which can bypass normal branch
protection and PR review for the release-prep commit. Update this release step
to use the intended protected-branch automation path or clearly gate it behind a
bot/service account setup, and verify the `git push` in
`push_release_source_commit` aligns with the repository’s `main` protection
rules.

53-127: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

set +e around the Python semver comparison is intentional and bounded, but consider avoiding it.

The static analysis hint flags set +e as masking failures. Here it's narrowly scoped and the exit code is checked immediately afterward via an exhaustive case (0/1/*), so it isn't actually masking unhandled failures. Still, you can avoid disabling errexit globally by capturing the status with an if instead.

♻️ Alternative without `set +e`
-    set +e
-    python3 - "$current" "$target" <<'PY'
+    if python3 - "$current" "$target" <<'PY'
 ...
 PY
-    compare_status="$?"
-    set -e
+    then
+        compare_status=0
+    else
+        compare_status="$?"
+    fi
🤖 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 `@scripts/release.sh` around lines 53 - 127, The
ensure_target_version_advances() helper in the release script is using set +e to
capture the Python semver comparison exit status, which the review notes is
unnecessary. Refactor this block to avoid disabling errexit globally by running
the Python comparison in a conditional/if construct that captures the status
directly, while preserving the same 0/1/* handling and die() messages in the
surrounding case logic.

Source: Linters/SAST tools

scripts/release-version.sh (1)

97-113: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Escape $next in the Perl match. release-version.sh only accepts semver input, so this isn’t an injection path, but update_known_mesh_versions still feeds the version straight into a regex. Reusing the quotemeta/@ARGV pattern from update_literal_version_references would make the existence check exact and consistent.

🤖 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 `@scripts/release-version.sh` around lines 97 - 113, The existence check in
update_known_mesh_versions currently interpolates $next directly into the Perl
regex, so update that check to treat the version as a literal match instead of a
regex pattern. Reuse the safer quotemeta/@ARGV approach already used in
update_literal_version_references so the comparison against
known_mesh_llm_versions is exact and consistent, while keeping the rest of the
update logic in update_known_mesh_versions unchanged.
🤖 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 `@crates/mesh-llm/Cargo.toml`:
- Around line 24-30: The dependency block in mesh-llm’s Cargo.toml has an
inconsistent bump: mesh-llm-host-runtime is missing the version pin that all
sibling path dependencies now use. Update the mesh-llm-host-runtime entry to
match the other mesh-llm-* dependencies by adding the same 0.72.1 version field,
keeping the dependency list consistent for publishing. Use the existing
mesh-llm-host-runtime symbol in this block to locate the change.

In `@scripts/release-version.sh`:
- Around line 72-95: The global literal replacement in
update_literal_version_references is too broad and can rewrite unrelated version
strings inside JSON lockfiles and package manifests. Update this helper to use a
more targeted match for JSON content (for example, only the version field in
package.json/package-lock.json via a structured parser or an anchored pattern)
while keeping the loose substitution only for unambiguous text files; also
adjust the loop that calls update_literal_version_references so it selects the
safer path for crates/mesh-llm-ui/package-lock.json and sdk/node/package.json.
- Around line 204-234: The release-version automation is missing the Kotlin SDK
root build file, so it won’t keep the Kotlin project version in sync. Update the
literal_version_files list in scripts/release-version.sh to include
sdk/kotlin/build.gradle.kts alongside the existing Kotlin example build file,
and ensure update_literal_version_references runs over it so future releases
bump both Kotlin version files together.

In `@scripts/release.sh`:
- Around line 49-51: The read_workspace_version helper is too broadly matching
the first version field in Cargo.toml, so it can return the wrong workspace
version. Update the implementation in read_workspace_version to use the same
[workspace.package]-scoped parsing already used by scripts/release-version.sh,
or share that helper instead of duplicating the looser regex. Keep
ensure_target_version_advances and the release prompt wired to the correctly
scoped workspace version lookup.

---

Outside diff comments:
In `@crates/mesh-llm-config/src/model/built_in_schema/presentation.rs`:
- Around line 246-261: The placeholder values for the node version requirements
are inconsistent in the presentation schema:
`mesh_requirements.min_node_version` was updated to a newer example while
`mesh_requirements.max_node_version` still shows an older one, creating a
confusing min-greater-than-max pair. Update the `sp(...)` entries in
`presentation.rs` so the `mesh_requirements.min_node_version` and
`mesh_requirements.max_node_version` placeholders form a sensible ordered
example, keeping the two values aligned and easy to understand for users.

---

Nitpick comments:
In `@scripts/release-version.sh`:
- Around line 97-113: The existence check in update_known_mesh_versions
currently interpolates $next directly into the Perl regex, so update that check
to treat the version as a literal match instead of a regex pattern. Reuse the
safer quotemeta/@ARGV approach already used in update_literal_version_references
so the comparison against known_mesh_llm_versions is exact and consistent, while
keeping the rest of the update logic in update_known_mesh_versions unchanged.

In `@scripts/release.sh`:
- Around line 201-242: The `push_release_source_commit` flow is pushing directly
to `origin/main`, which can bypass normal branch protection and PR review for
the release-prep commit. Update this release step to use the intended
protected-branch automation path or clearly gate it behind a bot/service account
setup, and verify the `git push` in `push_release_source_commit` aligns with the
repository’s `main` protection rules.
- Around line 53-127: The ensure_target_version_advances() helper in the release
script is using set +e to capture the Python semver comparison exit status,
which the review notes is unnecessary. Refactor this block to avoid disabling
errexit globally by running the Python comparison in a conditional/if construct
that captures the status directly, while preserving the same 0/1/* handling and
die() messages in the surrounding case logic.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6f6d2247-1618-482a-b205-bca30d250c2d

📥 Commits

Reviewing files that changed from the base of the PR and between 232c85a and 6173c52.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • crates/mesh-llm-ui/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (48)
  • Cargo.toml
  • Justfile
  • crates/mesh-client/Cargo.toml
  • crates/mesh-llm-api-client/Cargo.toml
  • crates/mesh-llm-api-server/Cargo.toml
  • crates/mesh-llm-cli/Cargo.toml
  • crates/mesh-llm-commands/Cargo.toml
  • crates/mesh-llm-config/Cargo.toml
  • crates/mesh-llm-config/src/model/built_in_schema.rs
  • crates/mesh-llm-config/src/model/built_in_schema/presentation.rs
  • crates/mesh-llm-console-server/Cargo.toml
  • crates/mesh-llm-embedded-runtime/Cargo.toml
  • crates/mesh-llm-hardware-profile/Cargo.toml
  • crates/mesh-llm-host-runtime/Cargo.toml
  • crates/mesh-llm-host-runtime/tests/fixtures/config_schema_reference.json
  • crates/mesh-llm-native-runtime/README.md
  • crates/mesh-llm-node/Cargo.toml
  • crates/mesh-llm-nodejs/Cargo.toml
  • crates/mesh-llm-runtime-install/Cargo.toml
  • crates/mesh-llm-sdk/Cargo.toml
  • crates/mesh-llm-sdk/README.md
  • crates/mesh-llm-system/Cargo.toml
  • crates/mesh-llm-tui/Cargo.toml
  • crates/mesh-llm-ui/package.json
  • crates/mesh-llm/Cargo.toml
  • crates/mesh-mixture-of-agents/Cargo.toml
  • crates/model-artifact/Cargo.toml
  • crates/model-hf/Cargo.toml
  • crates/model-package/Cargo.toml
  • crates/model-resolver/Cargo.toml
  • crates/openai-frontend/Cargo.toml
  • crates/skippy-cache/Cargo.toml
  • crates/skippy-runtime/Cargo.toml
  • crates/skippy-server/Cargo.toml
  • docs/SDK.md
  • docs/design/NATIVE_RUNTIMES.md
  • docs/sdk/node.md
  • docs/sdk/rust.md
  • docs/sdk/swift.md
  • scripts/release-version.sh
  • scripts/release.sh
  • sdk/kotlin/README.md
  • sdk/kotlin/build.gradle.kts
  • sdk/kotlin/example/example-jvm/build.gradle.kts
  • sdk/node/package.json
  • sdk/swift/README.md
  • sdk/swift/scripts/generate-swift-bindings.sh
  • website/src/docs/pages/CLI.md

Comment thread crates/mesh-llm/Cargo.toml
Comment thread scripts/release-version.sh
Comment thread scripts/release-version.sh
Comment thread scripts/release.sh

@michaelneale michaelneale left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

one coderabbit comment about missing version @ndizazzo

@coderabbitai coderabbitai Bot 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.

🧹 Nitpick comments (1)
scripts/release-version.sh (1)

138-138: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Full-file JSON reformat on change may widen diffs beyond the version bump.

When changed is true, the script writes back JSON.stringify(data, null, 2) rather than a targeted patch, so any deviation between the source file's original formatting and a strict 2-space stringify (trailing newline, numeric key ordering artifacts, etc.) will show up as unrelated diff noise in package.json/package-lock.json. Low risk given npm normally emits 2-space JSON, but worth a short comment noting the assumption if this is intentional.

🤖 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 `@scripts/release-version.sh` at line 138, The full-file rewrite in the
release-version script can widen diffs because `process.stdout.write` emits a
complete `JSON.stringify(data, null, 2)` when `changed` is true. Update the
logic around this write path to either narrow the output to only the version
change or add a brief comment near the JSON stringify call explaining the
assumption that npm-managed JSON uses stable 2-space formatting; reference the
`changed` flag and the `process.stdout.write` branch so the intent is clear.
🤖 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.

Nitpick comments:
In `@scripts/release-version.sh`:
- Line 138: The full-file rewrite in the release-version script can widen diffs
because `process.stdout.write` emits a complete `JSON.stringify(data, null, 2)`
when `changed` is true. Update the logic around this write path to either narrow
the output to only the version change or add a brief comment near the JSON
stringify call explaining the assumption that npm-managed JSON uses stable
2-space formatting; reference the `changed` flag and the `process.stdout.write`
branch so the intent is clear.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 48b6a92e-ae16-41c9-a2fb-947a99e0b01d

📥 Commits

Reviewing files that changed from the base of the PR and between 6173c52 and 3c43c1f.

📒 Files selected for processing (4)
  • crates/mesh-llm-config/src/model/built_in_schema/presentation.rs
  • crates/mesh-llm/Cargo.toml
  • scripts/release-version.sh
  • scripts/release.sh
✅ Files skipped from review due to trivial changes (1)
  • crates/mesh-llm-config/src/model/built_in_schema/presentation.rs
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/mesh-llm/Cargo.toml
  • scripts/release.sh

@ndizazzo
ndizazzo merged commit 7a80952 into main Jul 1, 2026
32 checks passed
@ndizazzo
ndizazzo deleted the chore/revise-version-management branch July 1, 2026 02:42
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.

2 participants