CEP 3 - Cyclus Release Procedure¶
- CEP:
3
- Title:
Cyclus Release Procedure
- Last-Modified:
2017-11-06
- Author:
Anthony Scopatz and Matthew Gidden and Baptiste Mouginot
- Status:
Accepted
- Type:
Process
- Created:
2013-10-25
Abstract¶
The purpose of this document is to act as a guideline and checklist for how to release the Cyclus core code base and the supported projects in the ecosystem.
The Cyclus Ecosystem¶
The very first thing to do when preparing for an upcoming release is to elect a release manager. This person has the special responsibility of making sure all of the following tasks are implemented. Therefore, their judgment for the placement of issues and code stability must be adhered to.
The Cyclus ecosystem has a few projects which are all released together. (This may change in the future a development diverges and the core becomes more stable.) The projects that are under the release manager’s purview are:
The projects which are not yet under the release managers purview are:
Note
The following full release process only applies to MAJOR and MINOR release number changes. MICRO or PATCH releases may be performed with a version bump and a git tag alone. This is to enable fast turn arounds for bug fixes and binary package creation (ie deb or conda). Therefore versions with a non-zero MICRO number should be considered relatively unstable.
Project Checklist¶
Note
Utility scripts for this process can be found in the release repository
Releasing a Cyclus project is comprised of the following operations. Each operation should be enacted in order.
Release Candidate Process¶
Review ALL issues and pull requests, reassigning or closing them as needed.
Ensure that all issues/PRs in this release’s milestone have been closed. Moving them to the next release’s milestone is a perfectly valid strategy for completing this milestone.
Initiate the release candidate process (see above)
Review the current state of documentation and make approriate updates.
Finish the release candidate process
make sure all commits in the
release
branch also are inmaster
Release Process¶
Make sure every local Cyclus project repository is up to date with its
master
, andvX.X.X-release
branches onupstream
.Bump the version in
cyclus/src/version.h.in
andcyclus/cyclus/__init__.py
,cycamore/src/cycamore_version.h.in
, andcymetric/setup.py
; commit the changesPerform maintenance tasks for all projects. The maintenance depends on PyNE and Doxygen. Maintenance files can be found here.
they are described in detail below, but the
maintenance.sh
utility inrelease/utils
will do this automatically for youmake sure to have your
rs.cred
file (seemaintenance.sh
’s help)
$ cd /path/to/release/utils $ export CYCLUS_DIR=/path/to/cyclus $ export CYCAMORE_DIR=/path/to/cycamore $ ./maintenance.sh -r -v X.X.X # X.X.X is *this* version
Note
If maintenance script fails because of an ABI failure that is caused by a compiler update (or other similar change caused by reasons other than code changes), you might want to accept them and procceed with the release with those. To do so you need to generate the new symbols and commit them:
First make sure those changes can be ignored by emailing for discussion/approval the dev-list
if the dev-list agrees to those changes, update the symbols and commit the new one:
$ cd $CYCLUS_DIR/release $ ./smbchk.py --update -t X.X.X # X.X.X is *this* version $ git add symbols.json $ git commit -m "Describe here all the change on the ABI"
Commit all changes for all projects.
$ cd /path/to/project $ git checkout vX.X.X-release $ git commit -am "final release commit after maintenence"
Update all master branches.
$ cd /path/to/project $ git checkout master $ git merge --no-ff vX.X.X-release $ git push upstream master
Locally tag the repository for each of the projects.
$ cd /path/to/project $ git checkout master $ git merge --no-ff vX.X.X-release $ git tag -a -m "Cyclus project release X.X.X, see http://fuelcycle.org/previous/vX.X.X.html for release notes" X.X.X
Draft release notes.
the
make_release_notes.sh
utility inrelease/utils
will help provide a template
$ cd /path/to/release/utils $ export CYCLUS_DIR=/path/to/cyclus $ export CYCAMORE_DIR=/path/to/cycamore $ export CYMETRIC_DIR=/path/to/cymetric $ ./make_release_notes.sh W.W.W X.X.X # W.W.W is the previous version, X.X.X is *this* version
add the release notes as
cyclus.github.com/source/previous/vX.X.X.rst
with appropriate updates toindex.rst
in that directory
Update the API docs.
the
api_docs.sh
utility inrelease/utils
will do this automatically for you
$ cd /path/to/release/utils $ export CYCLUS_DIR=/path/to/cyclus $ export CYCAMORE_DIR=/path/to/cycamore $ ./api_docs.sh X.X.X # X.X.X is *this* version
Update the
master
branch of all projects and clean up.$ cd /path/to/project $ git push upstream X.X.X master $ git push upstream --delete vX.X.X-release
Manually visit the github.com page for each project and draft/publish a new release.
See instructions here
Update Conda-forge
For each project, find the corresponding feedstock repository in the conda-forge organization on github. For example, cyclus’ feedstock is at https://github.com/conda-forge/cyclus-feedstock
In each project’s feedstok, open up a PR which updates the recipe/meta.yaml file with the new version number and the new SHA-256 value of the new version’s tarball. See conda-forge documentation for more or ask the feedstock maintainers for help.
Note that each feedstock must be accepted and the package uploaded to anaconda.org (automatic) prior to accepting updates for the next feedstock dependency. For example, cyclus must be fully updated before cycamore.
Create a DOI. See CEP4 for details.
This can be updated one day to use the Figshare API
Update website release information.
on the front page (
source/index.rst
)DOIs (
source/cite/index.rst
)release notes (
source/previous/index.rst
), remember both the release notes and the zip/tar URLs!layout template (
source/atemplates/layout.html
) of the websiteinstall from tarball instruction (
source/user/install_from_tarball.rst
)
Commit all changes to
cyclus.github.com
andmake gh-publish
Send out an email to
cyclus-dev
andcyclus-users
to announce the release!
Maintainence Tasks¶
Note
There is now the maintenence.sh
utility in release/utils
that
will automate this for you. The section remains here for posterity.
Each project may have associate maintenance tasks which may need to be performed at least as often as every micro release.
Cyclus¶
Update PyNE: PyNE source code is included and shipped as part of Cyclus. As pyne evolves, we’ll want to have our version evolve as well. Here are the steps to do so. These assume that in your HOME dir there are both the pyne and Cyclus repos. Remember to check in the changes afterwards.
$ cd ~/pyne
$ ./amalgamate.py -s pyne.cc -i pyne.h
$ cp pyne.* ~/cyclus/src
Update Nuclear Data: PyNE also provides a nuclear data library generator which we use for our source data. Occassionally, this needs to be updated as updates to pyne itself come out. The command for generating Cyclus specific nuclear data is as follows:
$ cd ~/pyne
$ nuc_data_make -o cyclus_nuc_data.h5 \
-m atomic_mass,scattering_lengths,decay,simple_xs,materials,eaf,wimsd_fpy,nds_fpy
Once the file is generated it must be put onto rackspace.
Update Gtest: We include a copy of the fused Gtest source code within our
source tree located in the tests/GoogleTest
directory. To keep up with
Gtest’s natural evolution cycle, please download the latest release of Google Tests
and follow the fused source directions here. If we go too long without doing this,
it could be very painful to update.
Verify & Update API Stability: Since Cyclus v1.0 we promise API stability. Luckily, we have a tool for keeping track of this mostly automatically. In order to check this correctly, you must have a RELEASE build of Cyclus compiled/installed. Every release please run the following command to verify that the release branch is stable:
$ cd cyclus/release
$ ./smbchk.py --update -t HEAD --no-save --check
If Cyclus only has API additions, it is considered stable and the command will tell you so. If Cyclus also has API deletions, then Cyclus is considered unstable and a diff of the symbols will be printed. You cannot release |cyclus| if it is unstable! Please post the diff to either the mailing list or the issue tracker and work to resolve the removed symbols until it this command declares that Cyclus is stable. It is probably best to do this prior to any release candidates if possible.
Once stable and there are no more code changes to be made, add the symbols in this release to the database with the following command (again - make sure you are working on a RELEASE build of Cyclus):
$ cd cyclus/release
$ ./smbchk.py --update -t X.X.X
where X.X.X
is the version tag. This should alter the symbols.json
file. Commit this and add it to the repo.
Cycamore¶
No maintenence required.
Cymetric¶
No maintenance required.
Document History¶
This document is released under the CC-BY 3.0 license.