NodeWright Versioning Strategy
NodeWright uses independent versioning for three components, all following Semantic Versioning:
- Operator - Kubernetes operator that manages NodeWright resources
- Agent - Container that executes package operations on nodes
- Chart - Helm chart for deploying the operator
- NOTE: the versioning of the chat also includes versioning of the expected agent version.
- NOTE: If changing either the operator or agent this will generally include a chart release too.
Git Tagging Convention
Component Versioning
Operator & Agent
- Independent versioning with their own release cycles
- Semantic versioning: MAJOR.MINOR.PATCH
- Compatibility: Maintained through well-defined interfaces
The agent has been implemented in Go since the cutover (#222) and continues the
existing agent/vx.y.z version stream rather than starting a new component:
agent/v6.x tags are the Python implementation, and the first Go release is
agent/v7.0.0, a major bump for the build-stack change. The operator-facing
contract (arguments, environment variables, exit codes, and the on-host state
paths) is unchanged; the behaviour differences are listed in
agent/RELEASE_NOTES.md.
Helm Chart
- Independent from operator/agent (starting at v0.8.0 these will start to diverge in version number)
- Chart version (
version): Tracks chart template/config changes - App version (
appVersion): Recommended stable operator version
Chart Behavior
Chart.yaml
example:
Image Tag Defaults
Image Pinning: Tag vs Digest
- You can specify either a tag or a digest for images.
- If both are provided, the digest takes precedence and determines the image pulled. The rendered image reference may display as
:tag@sha256:..., but the digest controls selection.
Release Branching Strategy
NodeWright uses release branches to manage patches and maintenance releases, in three families:
Why Release Branches:
- Chart defines compatibility - each
release/vX.Y.xbranch contains a tested, compatible set: the operator, the chart, and the agent version the chart pins - The agent releases on its own cadence -
release/agent/vX.Y.xcarries only the agent, so an agent major (such as the v7 Go rewrite) neither forces an early operator minor nor ships as a chart patch - The CLI releases on its own cadence -
release/cli/vX.Y.xcarries only the CLI, which users install and upgrade independently of the operator and which must keep working against older operators, so its versions do not line up with operator minors - Simplified patches - fix bugs in the context of the full integrated system
- Connected git history - preserves relationships between operator, agent, and chart changes
Branch Workflow:
- Main development happens on
mainbranch - Operator release preparation creates
release/v{MAJOR.MINOR}.x; operator and chart RCs, finals and patches are tagged there - Agent release preparation creates
release/agent/v{MAJOR.MINOR}.x; agent RCs, finals and patches are tagged there - CLI release preparation creates
release/cli/v{MAJOR.MINOR}.x; CLI RCs, finals and patches are tagged there - A new agent version reaches users through a chart patch that bumps the agent pin in
chart/values.yamlon the activerelease/vX.Y.x - Critical fixes may be backported from
mainto any kind of release branch
Go Module Support
The operator supports Go module imports for external projects:
Module mapping: Tag operator/v0.8.0 maps to module github.com/NVIDIA/nodewright/operator@v0.8.0
Quick Reference
These examples use
nodewright, the default install namespace for new installs. Substitute your own if you installed elsewhere; installs predating the namespace rename are inskyhook.
Changelogs
Each component has a machine-generated CHANGELOG.md (regenerated from git history by scripts/gen-changelog.sh; do not hand-edit) and a human-authored RELEASE_NOTES.md for behavior changes and upgrade steps. See the “Changelogs and Release Notes” section of release-process.md for the tooling and the generate-vs-curate split.
Release Process
For step-by-step instructions on how to release components, see release-process.md.
CI/CD triggers on git tags:
operator/vx.y.z→ publishes operator imageagent/vx.y.z→ publishes agent imagechart/vx.y.z→ publishes helm chart
Chart versioning:
- PATCH: Bug fixes, docs
- MINOR: New features, config options
- MAJOR: Breaking changes to chart, or compatibility with agent or operator.