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
master
branch. 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-driver
andlustre-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.yaml
with the correct version. -
For
lustre-csi-driver
, updatedeploy/kubernetes/base/kustomization.yaml
andcharts/lustre-csi-driver/values.yaml
with the correct version.
-
-
If
nnf-mfu
was updated, multiple references innnf-dm
will need to be updated with the new version number for thennf-mfu
image:-
In
Dockerfile
andMakefile
, replaceNNFMU_VERSION
with 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.yaml
and update the referenced versions for:-
lustre-csi-driver
-
lustre-fs-operator
-
nnf-mfu
-
-
Commit the changes and open a Pull Request against the
master
branch. -
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 add
for each of the submodules. -
Run
go mod tidy
and thenmake
. Do anothergit add
for any changes, particularlygo.mod
and/orgo.sum
. -
Verify that
git status
is happy withnnf-deploy
and 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!