Every PPMC member should read the below docs at least once, several times, because eventually, after graduation, the NetBeans PMC members will be responsible to verify and ensure releases are done in compliance with these rules:
- See the generic Apache Release process – http://www.apache.org/dev/release-publishing.html.
- See the generic Apache Release FAQ – http://www.apache.org/legal/release-policy.html.
- See the ASF policy and documentation for releases: http://www.apache.org/dev/#releases.
- See the necessary steps and requirements for the release distribution -- http://www.apache.org/dev/release-distribution.html.
- And the specific amendments for Incubator releases -- http://incubator.apache.org/guides/releasemanagement.html.
Specific Steps, Details, and Examples
After reading the above, some specific steps and details and examples below.
- PPMC vote and tally.
- During incubation, IPMC vote, for example:
Conclude and tally the vote on general@ by replying with a final [RESULT][VOTE] <subject>, which can be done after minimal 72h. Check the general@ list for examples on the format and content of such [RESULT][VOTE] emails, for example:
- The source distribution at https://dist.apache.org/repos/dist/dev/incubator/netbeans/
needs to be moved (can use svn mv for that) to something like:
- Also, the KEYS file needed to verify netbeans distributions needs to be uploaded in the root (netbeans) dist folder there as well:
- Finally, the NetBeans website (netbeans.apache.org) needs to provide a download link for the distribution, including (explicitly) links to:
i.e., update the website with the release info, as that is required to make it a proper and community-visible release.
Producing a Release Candidate
1. Obtaining the release candidate files
-decide version of the product, $VERSION (e.g. 9.0-rc1, 9.0-beta, 9.0, etc.)
-press "Build with Parameters", fill $VERSION into the VERSION input line, press Build
-wait for the build to finish
-click on the build that was started above,
-download the build artifacts
-check the MD5 and SHA1 sums of each zip ($ZIP):
md5sum --check $ZIP.md5
sha1sum --check $ZIP.sha1
for ZIP in *.zip; do md5sum --check $ZIP.md5; sha1sum --check $ZIP.sha1; done
(should print things like "<zip>: OK")
2. Signing the release candidate
-create a GPG key, see:
-for each zip file ($ZIP) do:
gpg --armor --output $ZIP.asc --detach-sig $ZIP
for ZIP in *.zip; do gpg --armor --output $ZIP.asc --detach-sig $ZIP; done
-verify the signatures:
gpg --verify $ZIP.asc $ZIP
for ZIP in *.zip; do gpg --verify $ZIP.asc $ZIP; done
3. Publishing them in the staging area
-in a directory (marked as $RELEASE in the following) do:
--setup (this can be reused in the future):
---mkdir -p dev/incubator/netbeans
---svn checkout https://dist.apache.org/repos/dist/dev/incubator/netbeans .
--publishing to staging repository:
---create directories for the release, e.g. incubating-netbeans-platform/incubating-$VERSION, incubating-netbeans-java/incubating-$VERSION
---place the source zips, convenience binaries and the sha1, md5 asn asc files into the appropriate folder, e.g.:
---svn add all the files, e.g.: "svn add incubating-netbeans-java/ incubating-netbeans-platform/"
---commit the files into the staging area:
svn --username "<your-apache-username>" commit
commit message could be something like: "Apache NetBeans 9.0-beta RC1."
It may be possible to skip the --username "<your-apache-username>", but it shouldn't hurt. You'll be asked for a password.
4. Creating tag for the release candidate:
-let CANDIDATE be "rc1", "rc2", etc. depending on which candidate this is
-determine the git revision that was used to build the release - go to the Jenkins job, and look for a long hash after "Revision:". Will be referred to as $HASH.
-prepare a commit message - could be something like "$CANDIDATE of $VERSION release", or something more descriptive. ($COMMIT)
-do the tag:
git tag -a '$VERSION-$CANDIDATE' -m "$COMMIT" $HASH
-push the tag:
git push origin '$VERSION-$CANDIDATE'
(assuming the Apache repo is "origin" for you)
5. Releasing a Release Candidate
To actually release a candidate, move it to the release area. In addition to the staging area, the release area needs to be checked out:
$ cd $RELEASE
$ mkdir -p repos/dist/release/incubator/netbeans
$ cd repos/dist/release/incubator/netbeans
Then move the candidate to the release area:
$ svn move $RELEASE/repos/dist/dev/incubator/netbeans/<candidate> .
And then commit the move:
$ svn commit -m "<commitmessage>" dev/incubator/netbeans/release/incubator/netbeans/