Overview
The release manager role in Apache MXNet means you are responsible for a few different things:
...
- The release candidate should contain all planned features, bug fixes, and code changes above. The release candidate commit should have passed the merge build, pip builds, nightly tests. Docs should also be manually built locally & checked for correctness. TODO: how to retrieve the commit hash.
- Tag release candidate
- Checkout the commit into a new branch "v#.#.#" and push it
- Go to the GitHub repo’s “releases” tab
- Click “Draft a new release”
- Provide the release tag in the form of “v#.#.#.rc0” where 0 means it’s the first release candidate
- Select the commit by clicking Target: branch > Recent commits > $commit_hash
- Copy and paste NEWS change into the description box
- Select “This is a pre-release"
- Tag all the dependent submodules for every MXNet release. If a code-change (e.g. bug-fix) is required to a dependent sub-module then we take a branch from the tag and apply the code-change only to the branch for the sub-module so that the change is minimal. This should allow the MXNet release process to have better convergence towards a stable release.
- Create artifacts for the release and push to the dist folder
a) The src tar - apache-mxnet-src-#.#.#.rc0-incubating.tar.gx:
- Clone the Repo and checkout the release branch
- remove R-package until the licensing issue is resolved
- Remove all the .git files
- Remove all other files of the form .* (eg .travis, .DS_Store etc)
- on MacOS use gnu-tar
Try to untar it in a different type of machine and try a classic build with `make`. Follow build instructions in the "Build from Source" section http://mxnet.incubator.apache.org/get_started/install.html
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
git clone git@github.com:apache/incubator-mxnet.git --recursive apache-mxnet-src-0.11.0.rc3-incubating git checkout v0.11.0 git submodule update --init --recursive git checkout 0.11.0.rc3 rm -rf R-package/* rm -rf R-package rm -rf .DS_Store rm -rf .git* brew install gnu-tar gtar -czvf apache-mxnet-src-0.11.0.rc3-incubating.tar.gz apache-mxnet-src-0.11.0.rc3-incubating |
b) apache-mxnet-src-#.#.#.rc0-incubating.tar.gz.asc:
details here: http://www.apache.org/dev/release-signing.html#openpgp-ascii-detach-sig
c) apache-mxnet-src-#.#.#.rc0-incubating.tar.gz.md5: Create MD5 checksum
d) apache-mxnet-src-#.#.#.rc0-incubating.tar.gz.sha512: Create SHA checksum
...
gpg
...
--armor
...
--output
...
apache-mxnet-src-0.11.0-incubating.tar.gz.asc
...
--detach-sig
...
apache-mxnet-src-0.11.0-incubating.tar.gz
...
md5
...
apache-mxnet-src-0.11.0-incubating.tar.gz
...
>
...
apache-mxnet-src-0.11.0-incubating.tar.gz.md5
...
shasum
...
-a
...
512
...
apache-mxnet-src-0.11.0-incubating.tar.gz
...
>
...
apache-mxnet-src-0.11.0-incubating.tar.gz.sha512
Code Block | ||||
---|---|---|---|---|
| ||||
#.#.#-incubating.RC0 folder: Create a folder for this RC in the dist folder # Checkout the Apache directory in Apache distribution SVN "dev" repo $ svn co https://dist.apache.org/repos/dist/dev/incubator/mxnet # select p # Make directory for this RC in the above directory $ cd mxnet $ mkdir #.#.#.rc0 # Move artifacts into this folder $ cp ../apache-mxnet-src-#.#.#.rc0-incubating.tar.gz* #.#.#.rc0 $ svn add #.#.#.rc0 $ svn commit -m "Add mxnet-#.#.#.rc0" --username "lxn2" |
...
3. Validate release package
As per the Apache documentation, verify that the release candidate artifacts satisfy the following:
- PGP signatures and SHA256/MD5 checksum verification
Example (performed on a Macbook Pro: brew install gpg2 coreutils):
$ svn co https://dist.apache.org/repos/dist/dev/incubator/mxnet && cd mxnet/
...
#.#.#.rc0
$ brew install gpg2 coreutils
$ gpg2 --import ../KEYS
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
targpg --zxvfverify ./apache-mxnet-src-0.11.0.rc3-incubating.tar.gz.asc mvgsha512sum apache-mxnet-src-0.11.0.rc3-incubating -check ./apache-mxnet-src-0.11.0.rc1-incubating gtar.tar.gz.sha512 gmd5sum -czvf-check ./apache-mxnet-src-0.11.0.rc3-incubating.tar.gz apache-mxnet-src-0.11.0-incubating #create a directory under releases or dist/incubator ? - https://httpd.apache.org/dev/release.html svn mv https://dist.apache.org/repos/dist/dev/incubator/mxnet/0.11.0.rc3/ http://www.apache.org/dist/incubator/mxnet/mxnet-#.#.#.rc0 |
...
.md5 |
- Test that a build is successful - spinning up a deep learning Ubuntu AMI will give you an environment with all dependencies to build. A `make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1` should do.
- DISCLAIMER is correct, filenames include “incubating”
- LICENSE and NOTICE files are correct and dependency licenses are acceptable
- LICENSE and NOTICE files at the root of the artifact directory must only reflect the contents of the artifact in which they are contained.
- See:
- LICENSE file requirements
- LICENSE requirements for distribution artifacts with multiple licenses
- NOTICE file requirements (Check Copyright year) - see also https://www.apache.org/legal/src-headers.html
- Apache Legal
- Acceptable and Unacceptable Dependency Licenses
- All source files have license headers where appropriate, RAT checks pass - TODO - add instructions - see https://creadur.apache.org/rat/
- The provenance of all source files is clear (ASF or software grants)
2. Running the voting process for a release:
1. calling votes and triaging issues, revote if necessary
The full voting process is two phases: 3 days on dev@mxnet.apache.org, 3 days on http://general@incubator.apache.org.
For the dev@ vote, there must be at least 3 +1 votes and more +1 votes than -1 votes. Once that quorum has been reached, the vote then moves onto the general@ vote, where anyone can contribute a vote, but only MXNet PMC votes are binding. To pass, there must be 3 +1 PMC votes and more +1 votes than -1 votes. Send out a notice to vote.
EMAIL TEMPLATE: OPENING A VOTE TO DEV@
To: dev@mxnet.apache.org
Subject: [VOTE] Release MXNet version 0.11.0.RC#
This is the vote to release Apache MXNet (incubating) version 0.11.0. Voting will start now and close $utc_now+72.
Link to release notes: <Link>
Link to release candidate 0.11.0.rc0: <Link>
Link to pip build: <Link>
Please remember to TEST first before voting accordingly:
+1 = approve
+0 = no opinion
-1 = disapprove (provide reason)
Once each vote is complete, send out a results email.
EMAIL TEMPLATE: VOTING RESULTS
To: dev@mxnet.apache.org
Subject: [RESULTS] [VOTE] Release MXNet version 0.11.0.RC#
This vote passes with 7 +1 votes (3 bindings) and no 0 or -1 votes.
+1 votes
PMC Members:
* $Name
* $Name
* $Name
Committers:
* $Name
* $Name
Community:
* $Name
* $Name
0 votes
* No votes
-1 votes
* No votes
Vote thread:
https://lists.apache.org/list.html?commits@mxnet.apache.org/
I'll continue with the release process and the release announcement will follow in the next few days.
$RM
Should any vote fail to reach quorum or release manager determines that another RC needs to go out, the release manager should triage the issues, create GitHub issues, and move to fix the issues. Once fixed, make changes to NEWS & README.md in case it specifically lists the old RC# number. Start the process for another release candidate. In the new voting email, detail what has changed since the last release candidate. Repeat until the vote passes.
EMAIL TEMPLATE: CANCEL A VOTE
As per the Apache documentation, verify that the release candidate artifacts satisfy the following:
- PGP signatures and SHA256/MD5 checksum verification
Example (performed on a Macbook Pro: brew install gpg2 coreutils):
$ svn co https://dist.apache.org/repos/dist/dev/incubator/mxnet && cd mxnet/#.#.#.rc0
$ brew install gpg2 coreutils
$ gpg2 --import ../KEYS
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
gpg --verify ./apache-mxnet-src-0.11.0.rc3-incubating.tar.gz.asc
gsha512sum --check ./apache-mxnet-src-0.11.0.rc1-incubating.tar.gz.sha512
gmd5sum --check ./apache-mxnet-src-0.11.0.rc3-incubating.tar.gz.md5 |
- Test that a build is successful - spinning up a deep learning Ubuntu AMI will give you an environment with all dependencies to build. A `make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1` should do.
- DISCLAIMER is correct, filenames include “incubating”
- LICENSE and NOTICE files are correct and dependency licenses are acceptable
- LICENSE and NOTICE files at the root of the artifact directory must only reflect the contents of the artifact in which they are contained.
- See:
- LICENSE file requirements
- LICENSE requirements for distribution artifacts with multiple licenses
- NOTICE file requirements (Check Copyright year) - see also https://www.apache.org/legal/src-headers.html
- Apache Legal
- Acceptable and Unacceptable Dependency Licenses
- All source files have license headers where appropriate, RAT checks pass - TODO - add instructions - see https://creadur.apache.org/rat/
- The provenance of all source files is clear (ASF or software grants)
2. Running the voting process for a release:
1. calling votes and triaging issues, revote if necessary
The full voting process is two phases: 3 days on dev@mxnet.apache.org, 3 days on http://general@incubator.apache.org.
For the dev@ vote, there must be at least 3 +1 votes and more +1 votes than -1 votes. Once that quorum has been reached, the vote then moves onto the general@ vote, where anyone can contribute a vote, but only MXNet PMC votes are binding. To pass, there must be 3 +1 PMC votes and more +1 votes than -1 votes. Send out a notice to vote.
EMAIL TEMPLATE: OPENING A VOTE TO DEV@
To: dev@mxnet.apache.org
Subject: [VOTE] Release MXNet version 0.11.0.RC#
This is the vote to release Apache MXNet (incubating) version 0.11.0. Voting will start now and close $utc_now+72.
Link to release notes: <Link>
Link to release candidate 0.11.0.rc0: <Link>
Link to pip build: <Link>
Please remember to TEST first before voting accordingly:
+1 = approve
+0 = no opinion
-1 = disapprove (provide reason)
Once each vote is complete, send out a results email.
EMAIL TEMPLATE: VOTING RESULTS
To: dev@mxnet.apache.org
Subject: [RESULTSCANCELLED] [VOTE] Release MXNet version 0.11.0.RC#
...
...
...
We
...
are
...
CANCELLING
...
this
...
+1 votes
PMC Members:
* $Name
* $Name
* $Name
Committers:
* $Name
* $Name
Community:
* $Name
* $Name
0 votes
* No votes
-1 votes
* No votes
Vote thread:
https://lists.apache.org/list.html?commits@mxnet.apache.org/
I'll continue with the release process and the release announcement will follow in the next few days.
$RM
Should any vote fail to reach quorum or release manager determines that another RC needs to go out, the release manager should triage the issues, create GitHub issues, and move to fix the issues. Once fixed, make changes to NEWS & README.md in case it specifically lists the old RC# number. Start the process for another release candidate. In the new voting email, detail what has changed since the last release candidate. Repeat until the vote passes.
EMAIL TEMPLATE: CANCEL A VOTE
To: dev@mxnet.apache.org
Subject: [CANCELLED] [VOTE] Release MXNet version 0.11.0.RC#
We are CANCELLING this vote because...
We will address this issue and send out RC#+1 for another vote.
EMAIL TEMPLATE: OPEN A VOTE TO GENERAL@
...
vote because...
We will address this issue and send out RC#+1 for another vote.
EMAIL TEMPLATE: OPEN A VOTE TO GENERAL@
This is a call for a releasing Apache MXNet #.#.#-incubating, release
candidate #.
Apache S2Graph community has voted and approved the release.
Vote thread:
https://lists.apache.org/#######
Result thread:
https://lists.apache.org/#########
The source tarball, including signatures, digests, etc. can be found at:
https://dist.apache.org/repos/dist/dev/incubator/mxnet/########
The tag to be voted upon is v0.2.0-incubating-rc3:
<link>
The release hash is #########:
<link>
Release artifacts are signed with the following key:
<link>
KEYS file available:
<link>
For information about the contents of this release, see:
<link to release notes>
The vote will be open for 72 hours.
[ ] +1 Release this package as 0.1.0
[ ] +0 no opinion
[ ] -1 Do not release this package because...
3. Finalizing and posting a release:
1. marking & publishing the official release
Once the release candidate passes the vote, we draft the official release on GitHub and rename the release candidate as the official release.
Draft official release on GitHub:
- Go to the GitHub repo’s “releases” tab
- Click “Draft a new release”
- Provide the release tag in the form of “v#.#.#”
- Select the commit by clicking Target: master > the passing release candidate tag
- Copy and paste NEWS change into the description box
Download the nightly pip build, rename, and publish:
- TODO
Rename and publish the source package:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
tar -zxvf apache-mxnet-src-0.11.0.rc3-incubating.tar.gz
mv apache-mxnet-src-0.11.0.rc3-incubating apache-mxnet-src-0.11.0-incubating
gtar -czvf apache-mxnet-src-0.11.0-incubating.tar.gz apache-mxnet-src-0.11.0-incubating
#create a directory under releases or dist/incubator ? - https://httpd.apache.org/dev/release.html
svn mv https://dist.apache.org/repos/dist/dev/incubator/mxnet/0.11.0.rc3/ http://www.apache.org/dist/incubator/mxnet/mxnet-#.#.#.rc0 |
TODO
3. Finalizing and posting a release:
1. marking & publishing the official release
Once the release candidate passes the vote, we draft the official release on GitHub and rename the release candidate as the official release.
Draft official release on GitHub:
- Go to the GitHub repo’s “releases” tab
- Click “Draft a new release”
- Provide the release tag in the form of “v#.#.#”
- Select the commit by clicking Target: master > the passing release candidate tag
- Copy and paste NEWS change into the description box
Download the nightly pip build, rename, and publish:
- TODO
Rename and publish the source package:
...
# Move the sub-directory in "dev" to the
# corresponding directory in "release"
$ export SVN_EDITOR=vim
$ svn mv https://dist.apache.org/repos/dist/dev/incubator/mxnet/mxnet-#.#.#.rc0 http://www.apache.org/dist/incubator/mxnet/mxnet-#.#.#.rc0
...