-
Notifications
You must be signed in to change notification settings - Fork 174
MakingANewRelease
There are several steps that are required to make a new hwloc release/prerelease and/or release series.
There are two cases:
- You are making a release on a brand-new release series (it's probably a pre-release, like an alpha, beta, or RC -- but hey, it could be a final release, too).
- You are making a release on an existing release series -- meaning that you've already followed the previous steps for initially creating the release series; now you're just putting a new release out on that existing series.
We usually announce the release to the following mailing lists:
- [email protected]
- [email protected] for major releases
- [email protected] for major releases
This is the case where you need to make a release for version A.B.C where C==0 -- the release is probably a pre-release of some kind (e.g., an alpha, beta, or rc tarball). None of the infrastructure yet exists to make this new series.
Before making a branch for the new release series, it's usually a good idea to evaluate if upgrading to newer versions of the GNU Autotools is a good idea. Specifically: we make an effort to pick a tuple of Autotools for use with a release series and try very hard to use those same exact versions for every official release in that series.
If you end up upgrading the version of Autotools that you're using, it is best to edit source:/contrib/dist/make_dist_tarball (on the master -- before you make the Git branch for the new series) to set these versions. Run the script to ensure that these versions work properly with the master branch. Tune up anything that you need on the master branch to make these versions work. Once it's all working, commit the new version of make_dist_tarball with those version numbers back to the master branch.
If the API has changed, increasing HWLOC_API_VERSION in hwloc.h is usually a good idea. This should only be needed for major releases. Do it in master before branching.
Also update HWLOC_VERSION* in contrib/windows/hwloc_config.h.
If struct hwloc_topology has changed, or #define used inside it, or one of its children structures (internal distances, support, bitmap), HWLOC_TOPOLOGY_ABI should be bumped too.
If the plugin ABI has changed (include/hwloc/plugins.h), bumping HWLOC_COMPONENT_ABI might be necessary too.
The main thing to do is to create a release branch in Git. Once you get the master branch in a good state, branch it. Note that there is a naming convention for branches:
$ git branch vA.B
where "A.B" is obviously the numbers that are relevant for your new release series (e.g., "1.1").
Once you make this branch, check it out and edit the VERSION file. Ensure that its VERSION numbers are set to A.B and the greek is set to something relevant (e.g., "a1" or "rc1").
Set the .so library version to the appropriate value (see the Libtool documentation for instructions: page 1 and page 2. And commit these changes.
Update the JenkinsFile using a different night time for scheduled extended builds.
Back on the master branch, edit the VERSION file and ensure that it is now set to version A.(B+1) and its greek is set to something like "a1".
Once everything is ready, push everything to github, as well as a tag on the new branch so that the nightly script (git describe) uses vA.B instead of dev as the basename.
$ git tag hwloc-A.B-branch vA.B
$ git push origin vA.B
$ git push origin hwloc-A.B-branch
$ git push origin master
-
Copy the tarballs to aws.open-mpi.org
-
Log there, update your clone of ompi-scripts, and run something like:
~/ompi-scripts/dist/upload-release-to-s3.py --project hwloc --branch v1.11 --version 1.11.10 --date 2018/03/26 --files ~/hwloc-*1.11.10*
First, get a clone of the Open MPI web site (because the hwloc tree is part of that web site) from https://github.com/open-mpi/ompi-www/.
NOTE it is a very large tree. As of August 2014, a Git clone of this tree takes about 4.3GB of disk space.
- Go into the
software/hwloc
tree.- Copy the prior release series tree into a new tree:
cp -a vA.(B-1) vA.B
(e.g.,cp v1.0 v1.1
). - Cd into the new vA.B tree.
- Edit the version.inc file and change all instances of
vA_(B-1)
tovA_B
and all instances ofvA.(B-1)
tovA.B
. - Update the $releases or $prereleases variable with the new release.
- Check index.php in case you need to update anything there.
- If all that worked, you should be able to surf to your tree in
software/hwloc/vA.B/
and see your release tarballs listed.- Double check that the download links work
- Double check that the link to the Git NEWS file works
- Copy the prior release series tree into a new tree:
- Cd to the
projects/hwloc/doc
directory.- Expand your release tarball and run configure on it. Cd into
the
doc
directory. - IMPORTANT: Ensure to have a recent version of Doxygen before continuing.
- IMPORTANT: You must do this from your expanded and configured tarball. Do NOT generate the doxygen docs from a Git checkout. The idea here is the GUARANTEE that the generated docs exactly match the release tarballs.
- Run
doxygen www.open-mpi.org.cfg
. This will generate a directory namedwww.open-mpi.org
. - Use
contrib/dist/publish_doc
from a GIT tree to copy the generated PDF and HTML directory to the website clone. - Check the links displayed at the end of
publish_doc
script in case they need to be updated in the front page. - Edit the
projects/hwloc/doc/index.php
file to update the arrays of docs to be displayed.- Browse to
projects/hwloc/doc/
and ensure that your prerelease PDF and HTML links show up and work properly. - Browse to
projects/hwloc/doc/vA.B/
and ensure that the HTML documentation shows up properly.
- Browse to
- Expand your release tarball and run configure on it. Cd into
the
- Edit the
projects/hwloc/nav.inc file
. - Add a line for the new series. You might want to label it "(new)", "(beta)", or somesuch.
- Make sure to
git add
all new files. - Then Git commit and push to your Github clone.
- Pull it on AWS
- Browse all the pages that you just added and ensure that they are all working properly, including all links.
- When you're sure everything is correct, do a PR and merge it.
-
REMEMBER:
The main Open MPI web site runs
git pull
every hour or so. So even if your changes aren't immediately visible on the main site, check back in an hour.
This is the case where you are making a release on a release series that has already been created (see below). Hence, all the infrastructure for the release series is already in place and you just need to make a new point release (potentially even the first formal release of the series, version A.B.C, where C==0, because the release series was created with a pre-release such as an alpha, beta, or rc tarball).
Check whether HWLOC_API_VERSION must be updated.
Update HWLOC_VERSION* in contrib/windows/hwloc_config.h
- Edit the VERSION file and change at least 2 things:
- Set the greek value to something relevant (e.g., "b1" or "rc1" or whatever -- keep bumping the number as you make successive pre-releases towards the final release).
- Set the .so library version to the appropriate value (see the Libtool documentation for instructions: page 1 and page 2
- Also update the HWLOC_VERSION in contrib/windows/private_config.h
- You must commit the modified VERSION values back to Git
- NOTE: Each hwloc release branch requires a specific tuple of Autoconf/Automake/Libtool. You are strongly discouraged from changing this tuple for the life of a given series. The idea is to keep the build system fairly constant for the life of a series and only change the tuple at the next release series.
- Double check your Git tree and ensure that "git status" returns no locally-modified files.
- From the top-level source directory, run
contrib/dist/make_dist_tarball
.
If the process succeeds, you'll have 4 tarballs:
- tar.gz and tar.bz2 for the pre-release/greek version.
- tar.gz and tar.bz2 for the final version (i.e., exactly the same, but with the greek value set to the empty string).
The rationale is that you can test the greek tarballs, and if they're good, you have the final tarballs ready to ship. They're guaranteed to be exactly the same because they were all made at the same time.
Follow the same steps as above: [#PostDoxygenDocumentation for posting
the Doxygen documentation]. If you are releasing a production
version, <greek>
will be empty.
Additionally, if this is the first production release, then Git remove all the pre-release documentation directories. We do not continue hosting pre-release documentation after a final release is made.
- If this was the first production release of a series:
- Set the
$dir
variable insoftware/hwloc/current/version.inc
to point to the directory of the new release series. E.g., "v1.1". - Edit the
projects/hwloc/nav.inc
file. - Label the new series as "(stable)".
- Update the labels on the prior series to indicate that they are "(older)", or "(ancient)", or whatever is relevant.
- Set the
- If this is not a pre-release
- Edit
projects/hwloc/doc/index.php
- Add a new link for the new release series.
- Edit
Follow the same steps as above for checking and merging everything.
Tag the new release (some people also want tags for prereleases).
For example:
$ git tag -a hwloc-A.B.C
$ git push origin hwloc-A.B.C
where "A.B.C" is obviously the numbers that are relevant for your new release series (e.g., "1.1.0"). Note that we include the C value in the tag, even if it's zero.
NOTE: Be sure to use the
-a
option so that an annotated Git tag is created. See git-tag(1) for more details.
Once you have made this tag, edit the VERSION
file on the branch and
increment the version number so that it is now "A.(B+1).0a1". This
ensures that we don't make new nightly snapshot tarballs that have the
"A.B" version number. Specifically, version A.B has been released --
so we shouldn't make any more snapshot tarballs with that version
number.
Some users watch Github release notifications to update their hwloc, hence it's nice to update there too. However Github automatic releases only ship a snapshot of the tag without running autogen or generating the doc. Hence those are disabled (and the release page is hidden from the main page).
For non-RC releases, we manually publish a github release once the tag is pushed. Go to https://github.com/open-mpi/hwloc/releases and draft a new release:
- select the appropriate tag
- copy paste the big disclaimer from previous releases in the title an description
- add our official tarballs/winballs
Some releases deserve an Android app update (both Play store and F-Droid).