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.
nnf-ec is vendored in as part of nnf-sos and does not
need to be released separately.
Primer
This document is based on the process set forth by the DataWorkflowServices Release Process. Please read that as a background for this document before going any further.
Requirements
To create tags and releases, you will need maintainer or admin rights on the repos.
Release Each Component In nnf-deploy
You'll first need to create releases for each component contained in nnf-deploy. This section
describes that process.
Each release branch needs to be updated with what is on master. To do that, we'll need the latest
copy of master, and it will ultimately be merged to the releases/v0 branch via a Pull Request.
Once merged, an annotated tag is created and then a release.
Each component has its own version number that needs to be incremented. Make sure you change the
version numbers in the commands below to match the new version for the component. The v0.0.3 is
just an example.
-
Ensure your branches are up to date:
-
Create a branch to merge into the release branch:
-
Merge in the updates from the
masterbranch. There should not be any conflicts, but it's not unheard of. Tread carefully if there are conflicts. -
Verify that there are no differences between your branch and the master branch:
If there are any differences, they must be trivial. Some READMEs may have extra lines at the end.
-
Perform repo-specific updates:
-
For
lustre-csi-driverandlustre-fs-operator, there are additional files that need to track the version number as well, which allow them to be installed withkubectl apply -k.-
For
lustre-fs-operator, updateconfig/manager/kustomization.yamlwith the correct version. -
For
lustre-csi-driver, updatedeploy/kubernetes/base/kustomization.yamlandcharts/lustre-csi-driver/values.yamlwith the correct version.
-
-
If
nnf-mfuwas updated, multiple references innnf-dmwill need to be updated with the new version number for thennf-mfuimage:-
In
DockerfileandMakefile, replaceNNFMU_VERSIONwith the new version -
In
config/manager/kustomization.yaml, replacennf-mfu'snewTag: <X.Y.Z>
-
-
-
Create a Pull Request from your branch and target the release branch. When merging the Pull Request, you must use a Merge Commit.
Note
Do not Rebase or Squash! Those actions will remove the records that Git uses to determine which commits have been merged, and then when the next release is created Git will treat everything like a conflict. Additionally, this will cause auto-generated release notes to include the previous release.
-
Once merged, update the release branch locally and then create an annotated tag:
-
Now that there is a tag, a release can be created via the GitHub CLI. Alternatively, use the Web UI.
-
Repeat this process for each remaining component.
Release nnf-deploy
Once the individual components are released, we need to update the submodules and
config/repositories.yaml in the master branch before we start on the release branch. This
makes sure that everything is now current on master.
-
Update the submodules on master:
-
Update
config/repositories.yamland update the referenced versions for:-
lustre-csi-driver -
lustre-fs-operator -
nnf-mfu
-
-
Commit the changes and open a Pull Request against the
masterbranch. -
Once merged, follow steps 1-3 from the previous section to update the release branch with master.
-
There will be conflicts on the submodules after step 3. This is expected. We will update the submodules to the new tags and then commit the changes. If each tag was committed properly, the following command can do this for you:
Verify that each submodule is now at the proper tagged version.
-
Do a
git addfor each of the submodules. -
Run
go mod tidyand thenmake. Do anothergit addfor any changes, particularlygo.modand/orgo.sum. -
Verify that
git statusis happy withnnf-deployand then finalize the merge from master by doing agit commit. -
Follow steps 6-8 from the previous section to finalize the release of
nnf-deploy.
The software is now released!