more info on verifying the builds (whether downloaded or not) and vote (a script)
also tidy the release/dir moving pr_report to a subdir Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/27e03e0e Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/27e03e0e Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/27e03e0e Branch: refs/heads/master Commit: 27e03e0e17aa61065d7fae26f1fd252738c45f80 Parents: 155921d Author: Alex Heneveld <[email protected]> Authored: Thu Sep 3 14:48:08 2015 +0100 Committer: Alex Heneveld <[email protected]> Committed: Thu Sep 3 17:18:38 2015 +0100 ---------------------------------------------------------------------- .../release-process/verify-release-artifacts.md | 17 ++- .../committers/release-process/vote.md | 44 ++++--- release/Gemfile | 5 - release/Gemfile.lock | 38 ------ release/README.md | 3 +- release/make-release-artifacts.sh | 4 +- release/pr_report.rb | 12 -- release/print-vote-email.sh | 129 +++++++++++++++++++ release/pull-request-reports/Gemfile | 5 + release/pull-request-reports/Gemfile.lock | 38 ++++++ release/pull-request-reports/pr_report.rb | 12 ++ 11 files changed, 228 insertions(+), 79 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/docs/website/developers/committers/release-process/verify-release-artifacts.md ---------------------------------------------------------------------- diff --git a/docs/website/developers/committers/release-process/verify-release-artifacts.md b/docs/website/developers/committers/release-process/verify-release-artifacts.md index 086e56c..40c8b20 100644 --- a/docs/website/developers/committers/release-process/verify-release-artifacts.md +++ b/docs/website/developers/committers/release-process/verify-release-artifacts.md @@ -36,10 +36,12 @@ curl https://dist.apache.org/repos/dist/release/incubator/brooklyn/KEYS | gpg2 - {% endhighlight %} -Verify the hashes and signatures of artifacts ---------------------------------------------- +Download the artifacts +---------------------- -If the releases have been published to the pre-release area, download them: +If you've just built the RC, simply go to that directory and skip this step. + +If you're verifying a build someone else has made, first download the files including all keys using: {% highlight bash %} TEMP_DIR=~/tmp/brooklyn/release/${VERSION_NAME}-rc${RC_NUMBER} @@ -56,7 +58,14 @@ for ext in -src.tar.gz -src.zip -bin.tar.gz -bin.zip; do done {% endhighlight %} -Then verify the hashes, and ensure you get a positive message from each one: +(Alternatively if you have `apache-dist-dev-repo` checked out, +you can do an `svn up` in there and `cd apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER}`.) + + +Verify the hashes and signatures of artifacts +--------------------------------------------- + +Then check the hashes and signatures, ensuring you get a positive message from each one: {% highlight bash %} for ext in -src.tar.gz -src.zip -bin.tar.gz -bin.zip; do http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/docs/website/developers/committers/release-process/vote.md ---------------------------------------------------------------------- diff --git a/docs/website/developers/committers/release-process/vote.md b/docs/website/developers/committers/release-process/vote.md index db8b305..d3f6930 100644 --- a/docs/website/developers/committers/release-process/vote.md +++ b/docs/website/developers/committers/release-process/vote.md @@ -7,32 +7,39 @@ navgroup: developers Start the vote -------------- -Copy-paste the e-mail below, being sure to substitute: +A script to generate the voting email can be found in `release/print-vote-email.sh`, +taking a single argument being the staging repo link. For example: -- version number -- RC number + release/print-vote-email.sh orgapachebrooklyn-1234 | pbcopy + +You should move the subject and put your name at the end, and simply eyeball the rest. This should be sent to **[email protected]**. + +Alternatively, copy-paste the e-mail template below, being sure to substitute: + +- VERSION_NAME +- RC_NUMBER - URLs containing version numbers - URL for your own PGP key - Checksums - URL for the Maven staging repository -### Subject: [VOTE] Release Apache Brooklyn 0.7.0-incubating [rc1] +### Subject: [VOTE] Release Apache Brooklyn ${VERSION_NAME} [rc${RC_NUMBER}] {% highlight text %} -This is to call for a vote for the release of Apache Brooklyn 0.7.0-incubating. +This is to call for a vote for the release of Apache Brooklyn ${VERSION_NAME}. This release comprises of a source code distribution, and a corresponding binary distribution, and Maven artifacts. The source and binary distributions, including signatures, digests, etc. can be found at: -https://dist.apache.org/repos/dist/dev/incubator/brooklyn/apache-brooklyn-0.7.0-incubating-rc1 +https://dist.apache.org/repos/dist/dev/incubator/brooklyn/apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER} The artifact SHA-256 checksums are as follows: -c3b5c581f14b44aed786010ac7c8c2d899ea0ff511135330395a2ff2a30dd5cf *apache-brooklyn-0.7.0-incubating-rc1-bin.tar.gz -cef49056ba6e5bf012746a72600b2cee8e2dfca1c39740c945c456eacd6b6fca *apache-brooklyn-0.7.0-incubating-rc1-bin.zip -8069bfc54e7f811f6b57841167b35661518aa88cabcb070bf05aae2ff1167b5a *apache-brooklyn-0.7.0-incubating-rc1-src.tar.gz -acd2229c44e93e41372fd8b7ea0038f15fe4aaede5a3bcc5056f28a770543b82 *apache-brooklyn-0.7.0-incubating-rc1-src.zip +c3b5c581f14b44aed786010ac7c8c2d899ea0ff511135330395a2ff2a30dd5cf *apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER}-bin.tar.gz +cef49056ba6e5bf012746a72600b2cee8e2dfca1c39740c945c456eacd6b6fca *apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER}-bin.zip +8069bfc54e7f811f6b57841167b35661518aa88cabcb070bf05aae2ff1167b5a *apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER}-src.tar.gz +acd2229c44e93e41372fd8b7ea0038f15fe4aaede5a3bcc5056f28a770543b82 *apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER}-src.zip The Nexus staging repository for the Maven artifacts is located at: https://repository.apache.org/content/repositories/orgapachebrooklyn-1004 @@ -48,10 +55,10 @@ The artifacts were built from Git commit ID https://git-wip-us.apache.org/repos/asf?p=incubator-brooklyn.git;a=commit;h=24a23c5a4fd5967725930b8ceaed61dfbd225980 -Please vote on releasing this package as Apache Brooklyn 0.7.0-incubating. +Please vote on releasing this package as Apache Brooklyn ${VERSION_NAME}. The vote will be open for at least 72 hours. -[ ] +1 Release this package as Apache Brooklyn 0.7.0-incubating +[ ] +1 Release this package as Apache Brooklyn ${VERSION_NAME} [ ] +0 no opinion [ ] -1 Do not release this package because ... @@ -99,12 +106,15 @@ Finally, count up the +1s and separate into binding (PPMC) and non-binding. Email the vote result --------------------- -This is a new email thread with a different subject. +This is a new email thread with a different subject +(the same as before with `[RESULT]` prepended). + +Note that you must find the URL for the previous thread at [mail-archives.apache.org](https://mail-archives.apache.org/). -### Subject: [RESULT][VOTE] Release Apache Brooklyn 0.7.0-incubating [rc1] +### Subject: [RESULT]\[VOTE] Release Apache Brooklyn ${VERSION_NAME} [rc${RC_NUMBER}] {% highlight text %} -The vote for releasing Apache Brooklyn 0.7.0-incubating passed with 5 binding +1s, 1 non-binding +1s, and no 0 or -1. +The vote for releasing Apache Brooklyn ${VERSION_NAME} passed with 5 binding +1s, 1 non-binding +1s, and no 0 or -1. Vote thread link: https://mail-archives.apache.org/mod_mbox/incubator-brooklyn-dev/201507.mbox/%3CCABQFKi1WapCMRUqQ93E7Qow5onKgL3nyG3HW9Cse7vo%2BtUChRQ%40mail.gmail.com%3E @@ -124,6 +134,6 @@ Thanks to everyone that tested our release and voted. We will shortly begin a vote on the incubator-general list. -Thanks, -[Release manager name] +Thanks. + {% endhighlight %} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/Gemfile ---------------------------------------------------------------------- diff --git a/release/Gemfile b/release/Gemfile deleted file mode 100644 index 8ab84b5..0000000 --- a/release/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -#ruby=ruby-2.1.2 -#ruby-gemset=brooklyn-release-helpers - -source 'https://rubygems.org' -gem 'github_api' http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/Gemfile.lock ---------------------------------------------------------------------- diff --git a/release/Gemfile.lock b/release/Gemfile.lock deleted file mode 100644 index 859202a..0000000 --- a/release/Gemfile.lock +++ /dev/null @@ -1,38 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.3.8) - descendants_tracker (0.0.4) - thread_safe (~> 0.3, >= 0.3.1) - faraday (0.9.1) - multipart-post (>= 1.2, < 3) - github_api (0.12.3) - addressable (~> 2.3) - descendants_tracker (~> 0.0.4) - faraday (~> 0.8, < 0.10) - hashie (>= 3.3) - multi_json (>= 1.7.5, < 2.0) - nokogiri (~> 1.6.3) - oauth2 - hashie (3.4.2) - jwt (1.5.1) - mini_portile (0.6.2) - multi_json (1.11.1) - multi_xml (0.5.5) - multipart-post (2.0.0) - nokogiri (1.6.6.2) - mini_portile (~> 0.6.0) - oauth2 (1.0.0) - faraday (>= 0.8, < 0.10) - jwt (~> 1.0) - multi_json (~> 1.3) - multi_xml (~> 0.5) - rack (~> 1.2) - rack (1.6.4) - thread_safe (0.3.5) - -PLATFORMS - ruby - -DEPENDENCIES - github_api http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/README.md ---------------------------------------------------------------------- diff --git a/release/README.md b/release/README.md index f1976f6..325b165 100644 --- a/release/README.md +++ b/release/README.md @@ -44,6 +44,7 @@ run for example `/vagrant/make-release/artifacts.sh`. Pull request reporting ---------------------- -`pr_report.rb` (and associated files `Gemfile` and `Gemfile.lock`) uses the GitHub API to extract a list of open pull +The files in `pull-request-reports`, mainly `pr_report.rb` +(and associated files `Gemfile` and `Gemfile.lock`) uses the GitHub API to extract a list of open pull requests, and writes a summary into `pr_report.tsv`. This could then be imported into Google Sheets to provide a handy way of classifying and managing outstanding PRs ahead of making a release. http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/make-release-artifacts.sh ---------------------------------------------------------------------- diff --git a/release/make-release-artifacts.sh b/release/make-release-artifacts.sh index 8cefc77..b0b48d4 100755 --- a/release/make-release-artifacts.sh +++ b/release/make-release-artifacts.sh @@ -131,8 +131,8 @@ fi release_script_dir=$( cd $( dirname $0 ) && pwd ) brooklyn_dir=$( pwd ) -staging_dir="${brooklyn_dir}/src-release-tmp/${release_name}-src" -bin_staging_dir="${brooklyn_dir}/bin-release-tmp/${release_name}-bin" +staging_dir="${release_script_dir}/tmp/working-src/${release_name}-src" +bin_staging_dir="${release_script_dir}/tmp/working-bin/${release_name}-bin" artifact_dir="${release_script_dir}/${artifact_name}" echo "The version is ${current_version}" http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/pr_report.rb ---------------------------------------------------------------------- diff --git a/release/pr_report.rb b/release/pr_report.rb deleted file mode 100644 index 95b6317..0000000 --- a/release/pr_report.rb +++ /dev/null @@ -1,12 +0,0 @@ -#ruby - -require 'CSV' -require 'github_api' - -gh = Github.new - -CSV.open("pr_report.tsv", "wb", { :col_sep => "\t" }) do |csv| - gh.pull_requests.list('apache', 'incubator-brooklyn'). - select { |pr| pr.state == "open" }. - each { |pr| csv << [ pr.number, pr.title, pr.created_at, pr.user.login ] } -end http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/print-vote-email.sh ---------------------------------------------------------------------- diff --git a/release/print-vote-email.sh b/release/print-vote-email.sh new file mode 100755 index 0000000..ac62241 --- /dev/null +++ b/release/print-vote-email.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +# prints a sample email with all the correct information + +set +x + +fail() { + echo >&2 "$@" + exit 1 +} + +if [ -z "${VERSION_NAME}" ] ; then fail VERSION_NAME must be set ; fi +if [ -z "${RC_NUMBER}" ] ; then fail RC_NUMBER must be set ; fi + +base=apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER} + +if [ -z "$1" ] ; then fail "A single argument being the staging repo ID must be supplied, e.g. orgapachebrooklyn-1234" ; fi + +archetype_check=`curl https://repository.apache.org/content/repositories/${staging_repo_id}/archetype-catalog.xml 2> /dev/null` +if ! echo $archetype_check | grep brooklyn-archetype-quickstart > /dev/null ; then + fail staging repo looks wrong at https://repository.apache.org/content/repositories/${staging_repo_id} +fi +if ! echo $archetype_check | grep ${VERSION_NAME} > /dev/null ; then + fail wrong version at https://repository.apache.org/content/repositories/${staging_repo_id} +fi + +artifact=release/tmp/${base}/${base}-bin.tar.gz +if [ ! -f $artifact ] ; then + fail could not find artifact $artifact +fi +if [ -z "$APACHE_ID" ] ; then + APACHE_ID=`gpg2 --verify ${artifact}.asc ${artifact} 2>&1 | egrep -o '[^<]*@apache.org>' | cut -d @ -f 1` +fi +if [ -z "$APACHE_ID" ] ; then + fail "could not deduce APACHE_ID (your apache username); are files signed correctly?" +fi +if ! ( gpg2 --verify ${artifact}.asc ${artifact} 2>&1 | grep ${APACHE_ID}@apache.org > /dev/null ) ; then + fail "could not verify signature; are files signed correctly and ID ${APACHE_ID} correct?" +fi + +cat <<EOF + +Subject: [VOTE] Release Apache Brooklyn ${VERSION_NAME} [rc${RC_NUMBER}] + + +This is to call for a vote for the release of Apache Brooklyn ${VERSION_NAME}. + +This release comprises of a source code distribution, and a corresponding +binary distribution, and Maven artifacts. + +The source and binary distributions, including signatures, digests, etc. can +be found at: + + https://dist.apache.org/repos/dist/dev/incubator/brooklyn/${base} + +The artifact SHA-256 checksums are as follows: + +EOF + +cat release/tmp/${base}/*.sha256 | awk '{print " "$0}' + +cat <<EOF + +The Nexus staging repository for the Maven artifacts is located at: + + https://repository.apache.org/content/repositories/${staging_repo_id} + +All release artifacts are signed with the following key: + + https://people.apache.org/keys/committer/${APACHE_ID}.asc + +KEYS file available here: + + https://dist.apache.org/repos/dist/release/incubator/brooklyn/KEYS + + +The artifacts were built from git commit ID $( git rev-parse HEAD ): + + https://git-wip-us.apache.org/repos/asf?p=incubator-brooklyn.git;a=commit;h=$( git rev-parse HEAD ) + + +Please vote on releasing this package as Apache Brooklyn ${VERSION_NAME}. + +The vote will be open for at least 72 hours. +[ ] +1 Release this package as Apache Brooklyn ${VERSION_NAME} +[ ] +0 no opinion +[ ] -1 Do not release this package because ... + + +Thanks! +EOF + +cat <<EOF + + + +CHECKLIST for reference + +[ ] Download links work. +[ ] Binaries work. +[ ] Checksums and PGP signatures are valid. +[ ] Expanded source archive matches contents of RC tag. +[ ] Expanded source archive builds and passes tests. +[ ] LICENSE is present and correct. +[ ] NOTICE is present and correct, including copyright date. +[ ] All files have license headers where appropriate. +[ ] All dependencies have compatible licenses. +[ ] No compiled archives bundled in source archive. +[ ] I follow this projectâs commits list. + +EOF http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/pull-request-reports/Gemfile ---------------------------------------------------------------------- diff --git a/release/pull-request-reports/Gemfile b/release/pull-request-reports/Gemfile new file mode 100644 index 0000000..8ab84b5 --- /dev/null +++ b/release/pull-request-reports/Gemfile @@ -0,0 +1,5 @@ +#ruby=ruby-2.1.2 +#ruby-gemset=brooklyn-release-helpers + +source 'https://rubygems.org' +gem 'github_api' http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/pull-request-reports/Gemfile.lock ---------------------------------------------------------------------- diff --git a/release/pull-request-reports/Gemfile.lock b/release/pull-request-reports/Gemfile.lock new file mode 100644 index 0000000..859202a --- /dev/null +++ b/release/pull-request-reports/Gemfile.lock @@ -0,0 +1,38 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.3.8) + descendants_tracker (0.0.4) + thread_safe (~> 0.3, >= 0.3.1) + faraday (0.9.1) + multipart-post (>= 1.2, < 3) + github_api (0.12.3) + addressable (~> 2.3) + descendants_tracker (~> 0.0.4) + faraday (~> 0.8, < 0.10) + hashie (>= 3.3) + multi_json (>= 1.7.5, < 2.0) + nokogiri (~> 1.6.3) + oauth2 + hashie (3.4.2) + jwt (1.5.1) + mini_portile (0.6.2) + multi_json (1.11.1) + multi_xml (0.5.5) + multipart-post (2.0.0) + nokogiri (1.6.6.2) + mini_portile (~> 0.6.0) + oauth2 (1.0.0) + faraday (>= 0.8, < 0.10) + jwt (~> 1.0) + multi_json (~> 1.3) + multi_xml (~> 0.5) + rack (~> 1.2) + rack (1.6.4) + thread_safe (0.3.5) + +PLATFORMS + ruby + +DEPENDENCIES + github_api http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/27e03e0e/release/pull-request-reports/pr_report.rb ---------------------------------------------------------------------- diff --git a/release/pull-request-reports/pr_report.rb b/release/pull-request-reports/pr_report.rb new file mode 100644 index 0000000..95b6317 --- /dev/null +++ b/release/pull-request-reports/pr_report.rb @@ -0,0 +1,12 @@ +#ruby + +require 'CSV' +require 'github_api' + +gh = Github.new + +CSV.open("pr_report.tsv", "wb", { :col_sep => "\t" }) do |csv| + gh.pull_requests.list('apache', 'incubator-brooklyn'). + select { |pr| pr.state == "open" }. + each { |pr| csv << [ pr.number, pr.title, pr.created_at, pr.user.login ] } +end
