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
- Administer Project (upper left button)
- Left Rail (Versions)
- Name | Description | Add (Follow existing convention)
- Exit Administration
Bulk edit all un-resolved issues so they have the new version as their fix version
- Go into JIRA
- Click Issues Tab in Left Pane
- Click your Version under the Unresolved: By Version Section
- Click the 'Gear Icon' > Bulk Change: all (#) Issues
- Step 1 of 4: Select all issues
- Step 2 of 4: Edit Issues
- Step 3 of 4: Change Fix Version/s to the Next Release Version
- Step 4 of 4: Review the changes and confirm
Generate Change Log and append it to CHANGES.md in master
- Go into JIRA
- Click the Version Tab in the Left Pane
- Click the Version you are making an RC for
- Click Release Notes (Upper Right )
- Configure Release Notes
- Select Style == Text >> Create
- 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
- Navigate to doap_CLIMATE.rdf simply add a new entry for the proposed new release.
Change Sphinx Documentation Version
- 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
- 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
- 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:
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
- announce@apache.org
- dev@climate.apache.org
- narccap@ucar.edu
- esip-education@lists.esipfed.org
- esip-esda@lists.esipfed.org
netcdfgroup@unidata.ucar.edu
python-users@unidata.ucar.edu
- esgf-user@lists.llnl.gov
- opensource@lists.nasa.gov
- opendev@jpl.nasa.gov
- opensource@jpl.nasa.gov
- https://podaac.jpl.nasa.gov/forum/
3 Comments
Lewis John McGibbney
Comment here folks, as of OCW 1.0.0, this release process is flawless.
Lewis John McGibbney
1.2.0 release process is flawless.
Lewis John McGibbney
1.3.0 release process is flawless