This helper script can greatly reduce the amount of work necessary to stage an RC and prepare it for VOTEing. It is suggested that you do the entire processing manually at least once to understand exactly what is going on (and to make sure you have everything setup properly) before using the script.

 

Get your GPG Key Created and Uploaded

If you already have a GPG key on a public key server then move onto the next step.

Released code must be signed with a public encryption key.  For more information see the ASF's Release Signing page.  If you are new to GPG keys and encryption see the ASF's How To OpenPGP page to learn more. If you just want to make a key then start here.

Clean up JIRA

Create a new version within JIRA Admin Console

  1. Administer Project (upper left button)
  2. Left Rail (Versions)
  3. Name | Description | Add (Follow existing convention)
  4. Exit Administration

Bulk edit all un-resolved issues so they have the new version as their fix version

  1. Go into JIRA
  2. Click Issues Tab in Left Pane
  3. Click your Version under the Unresolved: By Version Section
  4. Click the 'Gear Icon' > Bulk Change: all (#) Issues
  5. Step 1 of 4: Select all issues
  6. Step 2 of 4: Edit Issues
  7. Step 3 of 4: Change Fix Version/s to the Next Release Version
  8. Step 4 of 4: Review the changes and confirm

Generate Change Log and append it to CHANGES.md in master

  1. Go into JIRA
  2. Click the Version Tab in the Left Pane
  3. Click the Version you are making an RC for
  4. Click Release Notes (Upper Right )
  5. Configure Release Notes
  6. Select Style == Text >> Create
  7. Scroll down to the Edit/Copy Release Notes Input Box and select all and Copy/Paste into CHANGES.md within master. If you are re-rolling, you need to replace the previous issues, to avoid duplicates.

Update Previous Release within the DOAP file in master

  1. Navigate to doap_CLIMATE.rdf simply add a new entry for the proposed new release.

Change Sphinx Documentation Version

  1. The conf.py for the Sphinx documentation contains version information. This needs to be updated to reflect the current release. Be sure to remove "SNAPSNOT" from the version if it is in there.

Update setup.py and Webapp package.json

  1. Ensure that _version variable within setup.py is the version you intend to release. Note, this needs to contain semantic versioning e.g. 1.2.0
  2. Ensure that the version key in package.json matches setup.py above

Commit and push all of the above changes.

Create a Tag for the Release Candidate (RC)

Create a tag with the following command

git tag -a <VERSION>_rc<RC NUMBER> -m "Apache Open Climate Workbench <VERSION> RC<RC NUMBER>"

Push the tag to the ASF server

git push --tags

Create the RC Artifacts

Create the compressed source artifacts

git archive <VERSION>_rc<RC NUMBER> | gzip > climate-<VERSION>-rc<RC NUMBER>.tgz
git archive --format zip --output "climate-<VERSION>-rc<RC NUMBER>.zip" <VERSION>_rc<RC NUMBER> 

SHA512 the source artifacts

sha512sum climate-<VERSION>-rc<RC NUMBER>.tgz > climate-<VERSION>-rc<RC NUMBER>.tgz.sha512
sha512sum climate-<VERSION>-rc<RC NUMBER>.zip > climate-<VERSION>-rc<RC NUMBER>.zip.sha512

Sign the release

gpg --armor --output climate-<VERSION>-rc<RC NUMBER>.tgz.asc --detach-sig climate-<VERSION>-rc<RC NUMBER>.tgz
gpg --armor --output climate-<VERSION>-rc<RC NUMBER>.zip.asc --detach-sig climate-<VERSION>-rc<RC NUMBER>.zip

Stage the RC for VOTEing

Checkout the staging directory

svn checkout https://dist.apache.org/repos/dist/dev/climate/

Make RC directory and commit the artifacts

# Assuming you just ran the above command in the current directory
cd climate
mkdir <VERSION>_rc<RC NUMBER>
# Assuming the release artifacts are in the above directory
cp ../climate-* ./!:1
svn add !:2
svn commit -m "Stage OCW <VERSION> RC<RC NUMBER> artifacts"

Call for a VOTE on the RC artifacts

Example VOTE email template

Hi all,

The release candidate for Apache Open Climate Workbench <VERSION> is now available.

The tag for this release is available at:
<Shorted URL to tag. For example, http://s.apache.org/anr >

Release artifacts are available for review at:
https://dist.apache.org/repos/dist/dev/climate/<VERSION>_rc<RC NUMBER>/

In this development drive we addressed X issues, you can see the release
report at <Shorted URL to release report. For example, http://s.apache.org/anr >

Please vote on releasing these packages as Apache OCW <VERSION>. The vote is
open for the next 72 hours.

The above artifacts were signed using he following KEY

pub   4096R/48BAEBF6 2013-10-28
uid                  Lewis John McGibbney (CODE SIGNING KEY) <lewismc@apache.org>
sig 3        48BAEBF6 2013-10-28  Lewis John McGibbney (CODE SIGNING KEY) <lewismc@apache.org>
sub   4096R/88149F13 2013-10-28
sig          48BAEBF6 2013-10-28  Lewis John McGibbney (CODE SIGNING KEY) <lewismc@apache.org>

Only votes from Apache OCW PMC are binding, but folks are welcome to check the
release candidate and voice their approval or disapproval. The vote passes
if at least three binding +1 votes are cast. This VOTE will be open for at
least 72 hours.

[ ] +1 Release the packages as Apache OCW <VERSION>

[ ] -1 Do not release the packages because...

Release the Artifacts

Checkout Release Repsitory

If you don't already have a copy of the release repository run the following:

svn checkout https://dist.apache.org/repos/dist/release/climate/

Clean Up Release Repository

Remove the old release artifacts before pushing 

svn rm https://dist.apache.org/repos/dist/release/climate/<VERSION - 1> -m "Cleaning up old release for <VERSION>"

Copy the Artifacts Over from Staging

svn mv https://dist.apache.org/repos/dist/dev/climate/<VERSION>_<RC NUMBER> https://dist.apache.org/repos/dist/release/climate/<VERSION>

Be sure to change the names of all the artifacts so they don't have "_<RC NUMBER>" in them!

 

Publish to PyPi

Upload to PyPI Live

Once you've successfully uploaded to PyPI Test, perform the same steps but point to the live PyPI server instead. To register, run:

Publish to Pypi
python setup.py egg_info -Rb '' sdist register upload

You should now see the package present within PyPI.

Update the conda package

Please see this page for more detailed instructions. This should not be done until after uploading the package to PyPI. At minimum you will need to do the following:

  • Fork the ocw feedstock repo.
  • Make the following changes to recipe/meta.yaml:
    • Bump up the version number and update the hash field in recipe/meta.yaml. 
    • Set the build number to 0.
    • Add your GitHub username to the maintainers section if it isn't on there already.
    • If needed, update any dependencies in the requirements section.
  • Submit a pull request to the feedstock repo.
  • If all of the CI tests look good, merge the PR.
  • After a few minutes, check the package info page on anaconda. If the version number has been updated, you are good to go!

Update Project Website

After the ASF mirrors have updated with the latest release be sure to update the website accordingly!

Release the Version in JIRA

Be sure to release the version through the Admin page on JIRA. If you lack necessary permissions let the PMC know!

Update the Release Tag

We tag the RC with <VERSION>_<RC NUMBER> in git. We need to make sure to update the tag accordingly. You can use the following commands. Be sure to replace "new" with the new tag name and "old" with the old tag name.

 

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags


Announce the Release

Arguably the most important part of the release process... evangelize and let the world know that OCW is out there.

Some target communities/mailing lists include

 

  • No labels

3 Comments

  1. Comment here folks, as of OCW 1.0.0, this release process is flawless.

    1. 1.2.0 release process is flawless.

  2. 1.3.0 release process is flawless