...
- Make a code signing key if you don't have one yet
- Publish your key if you haven't done so yet
- If you haven't done so yet, add yourself to the Apache Web-of-Trust by meeting face-to-face with a person so they can sign your key
- Publish your signed key
- If you haven't done so before, add your key to the KEYS file in the release staging area and the release distribution area
- The staging area is https://dist.apache.org/repos/dist/dev/incubator/impala/. Once graduated, it will presumably be https://dist.apache.org/repos/dist/dev/impala/
- The release area is https://dist.apache.org/repos/dist/release/incubator/impala/, and will presumably be https://dist.apache.org/repos/dist/release/impala/ after graduation.
- Pick a commit in the "master" branch you want to release from and test it.
- Test the licencing using Apache RAT; follow the instructions in bin/check-rat-report.py
- Propose a release on the dev@ list. It should start with the string "[DISCUSS]". Explain that this is not a "[VOTE]", and that anyone may participate.
- Make a new branch off of your commit called "branch-x.y.z", where x.y.z is the version you want to release
- In this branch (but not in master) update the version number in bin/save-version.sh to x.y.z
- Continue testing. If you find bugs, file them. When they are fixed, cherry-pick the fixes from master to your branch that you want to include in the release:
Code Block language bash git fetch apache # to make sure you have the latest master git log apache/master # to find the commits you want to cherry-pick git checkout apache/branch-x.y.z git checkout -b x.y.z-patch-foo # the name doesn't matter - it will only be in your local workstation git cherry-pick b4d1a3... # or whatever git hashes # then resolve conflicts, if there are any # cherry-pick some more commits: git cherry-pick .... git cherry-pick ..... git push apache HEAD:branch-x.y.z
At that time, tag the tree at the release candidate
Code Block language bash git fetch apache git checkout apache/branch-x.y.z git tag -a x.y.z-rcw # when making release candidate w of version x.y.z git push apache x.y.z-RCw
- Make a release tarball:
Make the tarball using git archive. Name it apache-impala-incubating-x.y.z.tar.gz, or apache-impala-x.y.z.tar.gz if Impala has graduated from the incubator.
Code Block language bash git archive --prefix=apache-impala-incubating-x.y.z/ -o /tmp/apache-impala-incubating-x.y.z.tar.gz x.y.z-rcw
Make signature, as well as md5 and sha1 checksums:
Code Block language bash # Make the signature: gpg -u YOUR_USER_NAME@apache.org --armor --output apache-impala-incubating-x.y.z.tar.gz.asc --detach-sign apache-impala-incubating-x.y.z.tar.gz # Make sure it worked: gpg --verify apache-impala-incubating-x.y.z.tar.gz.asc apache-impala-incubating-x.y.z.tar.gz # Make checksums: md5sum apache-impala-incubating-x.y.z.tar.gz > apache-impala-incubating-x.y.z.tar.gz.md5 sha1sum apache-impala-incubating-x.y.z.tar.gz > apache-impala-incubating-x.y.z.tar.gz.sha
- The directory layout is x.y.z/RCw, where w is the release candidate number - RC1 is the first candidate, RC2 the second, and so on.
While incubating, the location is https://dist.apache.org/repos/dist/dev/incubator/impala/. Once graduated, it will presumably be https://dist.apache.org/repos/dist/dev/impala/. Upload all four artifacts.
Code Block language bash svn checkout https://dist.apache.org/repos/dist/dev/incubator/impala/ cd impala/ # The directory layout is x.y.z/RCw, where w is the release candidate number - RC1 is the first candidate, RC2 the second, and so on. mkdir -p x.y.z/RCw cd x.y.z/RC2 cp /tmp/apache-impala-incubating-2.7.0.tar.gz* ./ svn add . svn commit --username=YOUR_APACHE_USER_NAME -m "Impala x.y.z release candidate w"
- Get informal feedback on your release candidate from the dev@ list.
- Describe where to find the release artifacts, as well as the tag and the git tree hash they are intended to correspond to.
- If you need to make changes, you can cherry-pick commits from master.
- If you have made changes, upload new release candidates - don't overwrite old ones.
- Take a vote on dev@. Your vote email should:
- Have a subject that starts with "[VOTE]"
- Explain what the vote is about
- Explain how to find the artifacts for testing, and what each type of vote means
- Explain the conditions for the vote passing, including how long the vote will remain open for.
- Include a link to this wiki page so voters can read the instructions in it on how to test, verify, and vote.
- Be consistent with the Impala bylaws. For instance, at the moment I am writing this wiki page, votes stay open for 72 hours.
- If the vote passes, and Impala has yet to graduate, take a vote in the incubator PMC, following current incubator policy.
- Publish the release.
- Send a patch review to the master branch to update its version number to "p.q.r-snapshot" (where p.q.r is greater than x.y.z)
...
- Download the tarball. Check the signature and the checksums.
Check that it matches the upstream tag
Code Block language bash # move to your git directory and checkout the tag: cd incubator-impala git fetch apache --tags git checkout x.y.z-rcw # compare the tarball and the repo: cd .. tar xzf apache-impala-incubating-x.y.z.tar.gz diff -r apache-impala-incubating-x.y.z incubator-impala # You should see something like "Only in incubator-impala: .git", but no other output
- Test it
- Check compliance with ASF release policy. Use Apache RAT and follow the instructinos in bin/check-rat-report.py
- Vote
...