update-project-version
von nvidia
Update the NeMo Relay project version across Cargo, Node, and lockfiles without leaving release surfaces out of sync
npx skills add https://github.com/nvidia/nemo-relay --skill update-project-versionUpdate Project Version
Companion Guidance
Use karpathy-guidelines alongside this skill for implementation or review
work. Keep changes scoped, surface assumptions, and define focused validation
before editing.
Use this skill when changing the released NeMo Relay version, including pre-release or build-metadata variants used during packaging.
Source Of Truth
Cargo.toml[workspace.package].versionis the source of truth for the Rust workspace and Python build versioning.- Keep
Cargo.toml[workspace.dependencies]self-references aligned when the workspace version changes. crates/node/package.jsoncarries its own npm package version and must stay aligned with the workspace-rootpackage-lock.json.integrations/openclaw/package.jsoncarries the OpenClaw npm plugin version and must stay aligned with the workspace-rootpackage-lock.json.package-lock.jsonrecords Node package versions underpackages["crates/node"].versionandpackages["integrations/openclaw"].version. The workspace-root lockfile may not have a top-levelversionfield.
Workflow
- Read the current version from
Cargo.tomland decide the exact target version string. - Run
just set-version <version>to update release-version source files:[workspace.package].versionworkspace.dependencies.nemo-relay.versionworkspace.dependencies.nemo-relay-adaptive.versionworkspace.dependencies.nemo-relay-pii-redaction.versionworkspace.dependencies.nemo-relay-ffi.versionworkspace.dependencies.nemo-relay-cli.versioncrates/node/package.jsonversionintegrations/openclaw/package.jsonversionpackage-lock.jsonpackages["crates/node"].versionpackage-lock.jsonpackages["integrations/openclaw"].versionintegrations/openclaw/package.jsondependencies["nemo-relay-node"]package-lock.jsonpackages["integrations/openclaw"].dependencies["nemo-relay-node"]
- If editing helper code, keep helper inputs aligned with those same fields:
set_project_versionshould call the Cargo, Node, and coding-agent plugin version helpers for the same target version.set_cargo_workspace_versionshould update[workspace.package].versionplusworkspace.dependencies.nemo-relay.version,workspace.dependencies.nemo-relay-adaptive.version,workspace.dependencies.nemo-relay-pii-redaction.version,workspace.dependencies.nemo-relay-ffi.version, andworkspace.dependencies.nemo-relay-cli.version.set_node_package_versionsshould updatecrates/node/package.json,integrations/openclaw/package.json, the correspondingpackage-lock.jsonpackage entries, and the OpenClawnemo-relay-nodedependency entries in both files.set_node_package_versionremains a compatibility alias.set_npm_package_versionremains the reusable npm JSON helper for Node packaging recipes.
- Refresh generated surfaces:
- Run
cargo check --workspaceto refreshCargo.lockif workspace package entries changed. - If Cargo metadata changed and committed attribution files must stay fresh,
regenerate
ATTRIBUTIONS-Rust.mdwith./scripts/generate_attributions.sh rust. - If
package-lock.jsonchanged, regenerateATTRIBUTIONS-Node.mdwith./scripts/generate_attributions.sh node.
- Run
- Audit remaining references to the old version with targeted search. Separate true version pins from examples, generated attribution files, and unrelated third-party versions.
Validation
rg -n '^version =|nemo-relay = \\{ version =|nemo-relay-adaptive = \\{ version =|nemo-relay-pii-redaction = \\{ version =|nemo-relay-ffi = \\{ version =|nemo-relay-cli = \\{ version =' Cargo.tomlrg -n '\"version\"' crates/node/package.json integrations/openclaw/package.json package-lock.jsoncargo check --workspace- If Rust attribution files are expected to stay current:
./scripts/generate_attributions.sh rust - If Node packaging changed materially: run
npm install --ignore-scriptsfrom the repository root or stronger Node validation throughjust test-node
Release Notes
just package-nodeandjust package-pythonmay set temporary non-release versions for packaging. Do not commit those temporary suffixes as the canonical project version unless the release process requires that exact string.
Avoid
- Updating only
Cargo.tomlor only Node package metadata - Forgetting
Cargo.lock,ATTRIBUTIONS-Rust.md, orATTRIBUTIONS-Node.mdafter changing versioned inputs that feed them - Doing blind repository-wide search/replace across docs and generated attribution files
References
Cargo.tomlCargo.lockpackage.jsonpackage-lock.jsoncrates/node/package.jsonintegrations/openclaw/package.jsonjustfilescripts/licensing/attributions_lockfile_md.py