Release Process

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:

  1. See the generic Apache Release process – http://www.apache.org/dev/release-publishing.html.

  2. See the generic Apache Release FAQ – http://www.apache.org/legal/release-policy.html.

  3. See the ASF policy and documentation for releases: http://www.apache.org/dev/#releases.

  4. See the necessary steps and requirements for the release distribution -- http://www.apache.org/dev/release-distribution.html.

  5. 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.

  1.  PPMC vote and tally.

  2. During incubation, IPMC vote, for example: 

    https://lists.apache.org/thread.html/ae06af5a10d99a14e35a0fee8a8e35e91505b85293549f8152a075d4@%3Cgeneral.incubator.apache.org%3E

    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:

    https://lists.apache.org/thread.html/30c40866c0ad97d747c270dc7b7ddc78f60157695763bf355e1697a4@%3Cgeneral.incubator.apache.org%3E


  3. 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:

    https://dist.apache.org/repos/dist/release/incubator/netbeans/incubating-netbeans-html4j/

  4. Also, the KEYS file needed to verify netbeans distributions needs to be uploaded in the root (netbeans) dist folder there as well:

    http://www.apache.org/dev/release-distribution.html#sigs-and-sums

  5. Finally, the NetBeans website (netbeans.apache.org) needs to provide a download link for the distribution, including (explicitly) links to:

    http://www.apache.org/dev/release-distribution.html#download-links

    Example: http://impala.incubator.apache.org/downloads.html

    i
    .e., u
    pdate the website with the release info, as that is required to make it a proper and community-visible release.

Note: If the main site is not syncing go to selfserve.apache.org and click "synchronize git repositories".

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.)
-go to:
https://builds.apache.org/view/Incubator%20Projects/job/incubator-netbeans-release/
-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
E.g.:


for ZIP in *.zip; do md5sum --check $ZIP.md5; sha1sum --check $ZIP.sha1; done

or

find . -name '*.sha1' -exec shasum --check '{}' ';'

(should print things like "<zip>: OK")

2. Signing the release candidate

-create a GPG key, see:
https://www.apache.org/dev/release-signing.html
-for each zip file ($ZIP) do:
gpg --armor --output $ZIP.asc --detach-sig $ZIP
E.g.:


for ZIP in *.zip; do gpg --armor --output $ZIP.asc --detach-sig $ZIP; done

or

for shafile in `find . -name '*.sha1' `; do plainfile=${shafile%.sha1}; gpg --armor --output $plainfile.asc --detach-sig $plainfile; done;


-verify the signatures:
gpg --verify $ZIP.asc $ZIP
E.g.:
for ZIP in *.zip; do gpg --verify $ZIP.asc $ZIP; done

or

find . -name '*.asc' -exec gpg --verify '{}' ';'

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
---cd 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.:
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-bin.zip
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-bin.zip.asc
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-bin.zip.md5
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-bin.zip.sha1
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-source.zip
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-source.zip.asc
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-source.zip.md5
incubating-netbeans-java/incubating-9.0-beta/incubating-netbeans-java-9.0-beta-source.zip.sha1
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-bin.zip
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-bin.zip.asc
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-bin.zip.md5
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-bin.zip.sha1
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-source.zip
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-source.zip.asc
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-source.zip.md5
incubating-netbeans-platform/incubating-9.0-beta/incubating-netbeans-platform-9.0-beta-source.zip.sha1

---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

$ svn checkout https://dist.apache.org/repos/dist/release/incubator/netbeans

Then move the candidate to the release area:

$ svn move $RELEASE/repos/dist/dev/incubator/netbeans/<candidate> .

Example: 

svn mv ../../../dev/incubator/netbeans/incubating-netbeans-platform/incubating-9.0-vc3/ incubating-netbeans-platform/incubating-9.0

Remove the deprecated .md5 files:

$ find . -name '*.md5' -delete

And then commit the move:

$cd $RELEASE/repos/dist

$ svn commit -m "<commitmessage>" dev/incubator/netbeans/release/incubator/netbeans/

6. Updating redirect for NetBeans Distribution Update Center

Once release is synchronized across all download mirrors it is necessary to update redirect for release modules to final location:

  1.  Login to NetBeans virtual machine where redirect is configured: ssh <your_apache_id>@netbeans-vm.apache.org
  2.  Become root using e.g. OTP MD5 online encryption: sudo /bin/bash
  3.  Go to uc directory: cd /var/www/html/uc/
  4.  Create new version: mkdir 9.0
  5.  Go to the new directory: cd 9.0
  6.  Download the new gzipped module catalog: wget https://dist.apache.org/repos/dist/release/incubator/netbeans/incubating-netbeans-java/incubating-9.0/nbms/updates.xml.gz
  7.  Create new .htaccess file: touch .htaccess
  8.  Edit the .htaccess file in vi editor and add correct redirect rule: RedirectMatch ^/uc/9.0/(.*)(\?.*)?$ http://www.apache.org/dyn/closer.lua?action=download&filename=incubator/netbeans/incubating-netbeans-java/incubating-9.0/nbms/$1