Releasing NNF Software
NNF Software Overview
The following repositories comprise the NNF Software and each have their own versions. There is a
hierarchy, since nnf-deploy packages the individual components together using submodules.
Each component under nnf-deploy needs to be released first, then nnf-deploy can be updated to
point to those release versions, then nnf-deploy itself can be updated and released.
The documentation repo (NearNodeFlash/NearNodeFlash.github.io) is released separately and is not
part of nnf-deploy, but it should match the version number of nnf-deploy. Release this like the
other components.
-
- DataWorkflowServices/dws
- HewlettPackard/lustre-csi-driver
- NearNodeFlash/lustre-fs-operator
- NearNodeFlash/nnf-mfu (standalone repo, not a submodule)
- NearNodeFlash/nnf-ec (standalone repo, not a submodule)
- NearNodeFlash/nnf-sos
- NearNodeFlash/nnf-dm
- NearNodeFlash/nnf-integration-test
The release order matters because of dependency relationships between repos. The release-all.sh
tool enforces the following order:
dwslustre-csi-driverlustre-fs-operatornnf-mfunnf-ecnnf-sos(depends on dws, nnf-mfu, nnf-ec)nnf-dm(depends on dws, nnf-sos, nnf-mfu)nnf-integration-test(depends on dws, nnf-sos, nnf-dm, lustre-fs-operator)nnf-deploy(packages all submodules)NearNodeFlash.github.io(documentation, version matches nnf-deploy)
Overview of release-all tool
release-all.sh automates most of the steps of releasing NNF software and adds additional checks for common issues.
Prerequisites
The following tools must be installed and available in your PATH:
| Tool | Purpose | Notes |
|---|---|---|
gh |
GitHub CLI for PRs, releases | Requires GH_TOKEN env var (see below) |
yq |
YAML processing | Must be the Go version, not the Python version |
jq |
JSON processing | Used by final-release-notes.sh |
git |
Version control | SSH access to GitHub required |
make |
Build automation | Runs make manifests, make generate, etc. |
perl |
Version string manipulation | Used for semver bump calculations |
sed |
Text processing | |
tput |
Terminal formatting |
Environment variables:
GH_TOKEN— A GitHub classic personal access token withreposcope. Required byghand by therelease-push,create-pr,merge-pr, andtag-releasephases.
SSH access:
- Verify with
ssh -T git@github.com. The release tool clones all repos via SSH.
Assumptions
masterormainbranch for each repository contains tested software and documentation ready to be released.
Steps
Run the steps in this order
Note: You almost always want to use the
-Roption to focus thephaseactivity to a specific repo.Use
-B major|minor|patch(default:patch) to control which part of the version number is bumped.
-
List Repos: Get the ordered list of repo names to use with
-Roption in subsequent steps. This is referred to asrepo-list> Pro tip: Keep this list in a separate window for easy viewingThe output will show the repos in dependency order:
-
Check Vendoring: For each repo's master/main branch; determine whether any of them need to be re-vendored. > Note: Ensure each repo is error-free before proceeding to the next repo in
repo-list -
Create Trial Release Branch: Create the new release branch, merge master/main to that release branch, but don't push it yet. The point of this step is to look for merge conflicts between master/main and the release branch.
-
Generate Release: For each repo in
repo-list, proceed through the following steps in sequence before moving on to the next repo. > Note: The next steps use theghGitHub CLI tool and require aGH_TOKENenvironment variable containing areposcope classic token.Step 3a — Push the release branch. Choose one of the following based on whether step 2 had merge conflicts:
-
If the Create Trial Release Branch had no errors:
-
If Create Trial Release Branch was unable to auto merge, manually fix and merge the release branch, then re-run this phase on the existing branch:
cd workingspace/<repo> # Manually merge the changes from master/main to the release branch go mod tidy go mod vendor git status # confirm all issues have been addressed git add <all affected files> git commit -s # take the default commit message, don't bother editing it.Then re-run this phase on this branch, telling the tool to pick up where you left off:
Step 3b — Create PR for the pushed release branch:
Step 3c — Merge PR for the pushed release branch:
Warning: Do NOT manually merge the PR. Let
release-all.shmerge it. If you accidentally merge manually, thetag-releasephase may not find the expected merge commit message — use-x force-tag=vX.Y.Zto recover (see step 3d).Step 3d — Tag the release:
Important: This creates an annotated git tag. The CI/CD workflow (
handle_release_tag.yaml) verifies that the tag is annotated and will reject lightweight tags. After tagging, the CI/CD workflow automatically creates the GitHub release with auto-generated release notes and attaches build artifacts (e.g.,manifests.tarfornnf-deploy).If tagging fails because the most recent commit doesn't contain the expected merge message (e.g., due to a manual merge), use the force-tag override:
-
Finalize the release notes
Finalize the release by updating the nnf-deploy release notes to include the release notes from all submodules that were modified by this release. This also updates the release notes for any submodule that has CRDs, to include information about each version of the CRD offered by that submodule. Do this after the release steps have been completed for all repositories, including the NearNodeFlash.github.io repository.
Note:
final-release-notes.shrequiresyq,gh,jq, andperlto be installed, andGH_TOKENto be set.
-
Generate complete release notes for the specified
nnf-deployrelease for review: -
Review the generated notes, then commit them:
Verify the release
After all repos are released and release notes are finalized, compare the new NNF release manifest to the previous release manifest. This is a recommended verification step to confirm the release contains the expected changes and catch any problems.
The output:
Peruse the release manifest differences:
Quickly see which submodules were updated between the releases:
Quickly determine the scope of the differences between the releases: