- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI) - Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend - Dockerfile.gui: Astro static build served via nginx - docker-compose.yml: backend (internal) + frontend (port 5353) - nginx.conf: root redirects to /es/, /api/ proxied to backend - zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
21 KiB
Release process - Release
Table of contents
- 1. Overview
- 2. Applicable components
- 3. Updates to repositories
- 4. Determine the new version number
- 5. Update the Changes files
- 6. Set version number for Perl modules
- 7. Set version number for GUI
- 8. Update Makefile.PL with required version
- 9. Create a clean Git working area of develop branch
- 10. Produce distribution tarballs
- 11. Produce distribution zip file
- 12. Update Zonemaster repository main README.md
- 13. Generate documents and check public documents
- 14. Upload to CPAN
- 15. Merge develop branch into master
- 16. Create Docker images and upload image to Docker Hub
- 17. Tag the release with git
- 18. Announce the release
- 19. Merge master into develop
- 20. Clean-up on discussion forum
- 21. Clean-up on GitHub related to the release
- Appendix A on version number in Makefile.PL
- Appendix B on reverting commits
1. Overview
The steps in this document executes the actual release. They assume that development, the preparation steps and the QA testing have been concluded. To run the steps below a build system is needed. See Build Environment Preparation for how to set it up.
Note: Normally, the develop branch version of this document should be used.
2. Applicable components
Every applicable step below should be run for each component. If there are no changes in a component (no release) it should be skipped. The main component (Zonemaster/Zonemaster) can never be skipped and should always be released. The components should be released in the following order:
- zonemaster-ldns
- zonemaster-engine
- zonemaster-cli
- zonemaster-backend
- zonemaster-gui
- Zonemaster/Zonemaster
3. Updates to repositories
All updates to develop branch and master branch should go via pull requests following the usual process. That is just assumed here.
4. Determine the new version number
The version number of the new release should be chosen according to Versions and Releases document.
Each component listed above should have its version number. The Zonemaster Product (Zonemaster/Zonemaster) version number also refer to the version of the other components.
5. Update the Changes files
Any changes since the last release must be documented in the Changes files. Refer to any GitHub issues or pull requests related to the change by the issue number or pull request number or both.
The updates to the Changes file are done to the develop branch.
- zonemaster-ldns - Changes LDNS
- zonemaster-engine - Changes Engine
- zonemaster-cli - Changes CLI
- zonemaster-backend - Changes Backend
- zonemaster-gui - Changes GUI
- Zonemaster/Zonemaster
- First update Changes Zonemaster
- Then update the RELEASE.md page (use content of Changes file, only latest release) to match the upcoming Github release page.
6. Set version number for Perl modules
This step does not apply to Zonemaster/Zonemaster and Zonemaster-GUI
The version numbers is to be set in these Perl modules in the develop branch:
- zonemaster-ldns - LDNS.pm
- zonemaster-engine - Engine.pm
- zonemaster-cli - CLI.pm
- zonemaster-backend - Backend.pm
7. Set version number for GUI
This step applies to Zonemaster-GUI only
Update the following files in the develop branch of Zonemaster-GUI:
- package.json
- In the top of the file, the version is given after "version".
- The file
package-lock.jsonis ignored
Update the following file in the develop branch of Zonemaster/Zonemaster:
- public/installation/zonemaster-gui.md
- The version is both part of the filename (zip file) and part of the download path (a directory). Both are repeated several times, once per OS.
The update of the installation document can preferably be done in the same pull request as the update of the
Changesfile for Zonemaster/Zonemaster
8. Update Makefile.PL with required version
This section is relevant for Zonemaster-Engine, Zonemaster-CLI and Zonemaster-Backend.
If needed, update Makefile.PL in the develop branch. See Appendix A for
how the version number should be specified in Makefile.PL.
Usually let Zonemaster-Engine, Zonemaster-CLI and Zonemaster-Backend, respectively, require the version of other the Zonemaster components (see below) included in this release, because that is what has been tested.
If a component will not be updated by this release, then it can continue to require the previous version unless it must be change to resolve some issue, and then the version of the requiring component must also be updated.
In Zonemaster-Engine Makefile.PL set the lowest version of Zonemaster-LDNS that Zonemaster-Engine requires. E.g.
requires 'Zonemaster::LDNS' => 2.001;
In Zonemaster-CLI Makefile.PL and Zonemaster-Backend Makefile.PL, set the minimum required versions of Zonemaster-LDNS and Zonemaster-Engine. E.g.
requires 'Zonemaster::Engine' => 4.000;
requires 'Zonemaster::LDNS' => 2.001;
9. Create a clean Git working area of develop branch
Make sure that you have checked out the develop branch and that your clone is
up-to-date.
git fetch --all
git branch
Empty the submodule area (LDNS). Zonemaster-LDNS only.
git submodule deinit -f ldns
Make sure your working directory is clean.
git status --ignored
Or clean it.
git clean -dfx
git reset --hard
10. Produce distribution tarballs
This section is not relevant for Zonemaster-GUI or Zonemaster/Zonemaster
See Release process - Create Test Distribution, sections 4-6 for more details and what warnings that could be ignored.
perl Makefile.PL --no-ed25519 # For Zonemaster-LDNS:
perl Makefile.PL # For other components
make all # For all
make distcheck
make dist
11. Produce distribution zip file
This section is relevant for Zonemaster-GUI only.
For this you need a build environment for Node.js, on which you create the zip file. See Release process - Create Test Distribution, sections 7 for more details
Build the distribution zip file:
npm install
npm run build
npm run release
If you get building errors, repeat the
nvmcommands in build environment for Node.js first.You can ignore warnings and security fixes at this stage, and do not run any
npm audit fix.
The distribution zip file is in the root level of the zonemaster-gui folder.
Its name is zonemaster_web_gui_v0.0.0.zip with correct version.
12. Update Zonemaster repository main README.md
This section is relevant for Zonemaster/Zonemaster only.
If needed, update the following section of the Zonemaster repository main README.md file in develop branch:
- Notable bugs and issues
13. Generate documents and check public documents
The two sub-sections here are relevant for Zonemaster/Zonemaster only.
13.1. Generate documents
If no files in neither Zonemaster/Zonemaster nor Zonemaster-Engine have been updated this section can be skipped.
- On a computer install Zonemaster-LDNS and Zonemaster-Engine using the distribution packages created for this release.
- Clone Zonemaster/Zonemaster and check out the develop branch. The
working area should be clean (
git status --ignore). - Go to the utils directory and create the files as documented in the README.pm file in that directory.
- If any of the created files has been updated (
git status) then it should be added to the develop branch via a pull request. - No reviewer or approval is required for this change.
13.2 Check public documents
The step above, 13.1, should be completed (merged to develop branch) before this step is run to avoid double errors.
Prior to this step mdbook-linkcheck must be installed (see
Build environment preparation). Run from the Zonemaster/Zonemaster
repository (develop branch checked out):
mdbook-linkcheck -s docs/public/
- If any error is reported, correct the file or files.
- Add changes to the develop branch via a pull request.
- No reviewer or approval is required for this change.
- Repeat the command after merging the changes to verify that the found errors have been resolved.
14. Upload to CPAN
This section is not relevant for Zonemaster-GUI or Zonemaster/Zonemaster.
For each component that is to be updated in this release, publish the distribution tarball created following this document on CPAN. Currently we use the organizational account ZNMSTR on PAUSE for doing this.
15. Merge develop branch into master
For the steps in this section, it is assumed that the git "remote" which is called "origin" points at "zonemaster/zonemaster.git", "zonemaster/zonemaster-ldns.git" etc. This is default when making a git clone. Use
git remote -vto verify that.
Make sure you're up to date and your working directory is completely clean:
git fetch origin
git status --ignored
Note: To throw away any and all changes to tracked and untracked files you can run
git clean -dfx ; git reset --hard.
Verify if there are commits on master since last release:
TAG=$( git tag --list --sort=-creatordate | head -n 1 )
# count the number of commits in master since last release and
# if the count is not 0, look for commits belonging to master and develop
[ $(git rev-list --count $TAG..master) -ne 0 ] && cat <( git rev-list $TAG^2..develop ) <( git rev-list $TAG..master ) | sort | uniq -d
If commits are returned by this previous command, some additional work is needed. See Appendix B for that.
Finally once master branch is ready, create a pull request from develop
into master and merge it. No reviewer or approval is required for this
update.
16. Create Docker images and upload image to Docker Hub
- Follow the instructions in Create Docker Image to build a Docker images.
- Upload the Zonemaster-CLI image to Docker Hub for Zonemaster using the instructions in Create Docker Image.
17. Tag the release with git
For each repository, go to "releases" in GitHub and select "draft a new release". Use the version number as tag and create a new release description. Use the section of Changes file for the relevant release and make links of everything that can have meaningful links, especially make links to issues and PRs.
For Zonemaster-GUI, add the distribution zip file as attached file to the release description in GitHub.
Always release the Zonemaster Product (Zonemaster/Zonemaster) as the last step.
The releases pages:
- Zonemaster-LDNS Releases
- Zonemaster-Engine Releases
- Zonemaster-CLI Releases
- Zonemaster-Backend Releases
- Zonemaster-GUI Releases
- Zonemaster Product Releases - use the RELEASE.md created in step 5.
18. Announce the release
- Send emails to the mailing lists
zonemaster-usersandzonemaster-announce(the same email content will usually work fine). Always refer to the Github release page, but the URL with the version. - Forward the
zonemaster-usersemail to the mailing listzonemaster-group. - Create an announcement on the Zonemaster discussion forum on GitHub.
- Choose "New discussion"
- Select "Announcements"
- Use Zonemaster version as title
- Use the body of the Github release page for the version as the body of the announcement.
19. Merge master into develop
Create a pull request from master on github back into develop and merge
it. No review or approval is required for this update.
20. Clean-up on discussion forum
On the Zonemaster discussion forum on GitHub, close the announcement of the previous version. Also close discussions that are not relevant to keep open, i.e. resolved issues and other questions that have been answered and some time has passed with no further follow-up questions.
21. Clean-up on Github related to the release
For each repository:
- Zonemaster/Zonemaster
- zonemaster-ldns
- zonemaster-engine
- zonemaster-cli
- zonemaster-backend
- zonemaster-gui
Do the following steps related to the release:
- Check the issues with the release as milestone.
- Close if completed or irrelevant.
- Else move to a new milestone.
- Verify that the milestone of the release is 100% complete.
- Close if completed.
- Else make it complete and then close it.
- Verify that there are milestones for at least two of the next standard releases.
- If not, create the appropriate vYYYY.x milestones (e.g v2025.1)
- Also, if no due date has been chosen, set YYYY-06-15 for the .1 release and YYYY-12-15 for the .2 release.
Appendix A on version number in Makefile.PL
As described above, Makefile.PL of Zonemaster-CLI and Zonemaster-Backend,
respectively, must be specified with the lowest supported version of
Zonemaster::LDNS and Zonemaster::Engine, respectively. Zonemaster-Engine
must have that of Zonemaster::LDNS.
The versions of Zonemaster::LDNS and Zonemaster::Engine are defined in the
format vX.Y.Z and it is important how this is written in Makefile.PL.
For lowest risk of error follow the following steps:
- Expand the version number with leading zeros on second ("Y") and third
("Z") level. Remove the leading
vand the second and third dots. E.g.v2.1.2=2.001002. - Decide if the third level can be skipped, e.g.
v2.1.2>2.001. - Please note that if the version in
Makefile.PLis set to2.1then the interpretation is that the "v" version isv2.100.0or greater.
When specifying the version of Zonemaster::LDNS and Zonemaster::Engine in
Makefile.PL always use the expanded format, e.g. 2.001002 or 2.001
depending on the need.
For other libraries, other formats may be correct. If the version of the
library only has two levels ("X.Y") then other rules apply. Also note
that the version in Zonemaster::Backend is specified as X.Y.Z without
the "v", which may affect the version comparison.
Appendix B on reverting commits
When merging develop into master a merge conflict could occur. This is due
to the fact that some commits belongs to both branches. Usually this is the
result of a merge request in master branch instead of develop during
development. Once this happens, the faulty merge is reverted on master and
merged into develop. Depending on the steps chosen, this could lead to having
the same commit in both branches.
To avoid merge conflict, it is necessary to revert the revert commits on
master (yes revert of the revert) before merging develop into master.
How would the release officer find the commit to revert?
Usually a revert commit contains a predefined subject (or title) looking like:
Revert "subject of the reverted commit".
One can looks for commits with this string using a command like:
TAG=$( git tag --list --sort=-creatordate | head -n 1 )
for c in $(cat <( git rev-list $TAG^2..develop ) <( git rev-list $TAG..master ) | sort | uniq -d); \
do git log --oneline --grep="Revert \"$(git show -s --pretty=%s $c)\"" $c~..master ^$TAG ; \
done
Or look for them visually with:
git log --oneline --graph $TAG..master
Once found, either revert each commits (git revert <commit> ...) or the merge
commit.
How would the release officer know the parent number to revert?
In case one reverts the merge commit, since it was merged into master, the
parent number is 1.
git revert -m 1 <merge commit>