blob: 01b82abc5e46503daa5f1d298248a1689ecf673c [file] [view]
---
layout: website-normal
title: Verify the release artifacts
navgroup: developers
---
Below is described a series of "sanity checks" that should be performed before uploading the artifacts to the
pre-release area. They are also useful for community members that want to check the artifact before voting (community
members may also want to check the [list of required software packages](prerequisites.html#software-packages) to ensure
they have the GnuPG installed.
Setup
-----
The scripts below use several environment variables to cut out repetition and enable easy repeatability for the next
release. You should determine the following information and set your environment:
{% highlight bash %}
# The version we are releasing now.
VERSION_NAME=0.10.0
# The release candidate number we are making now.
RC_NUMBER=1
# A reference to your Git repository for Brooklyn
BASE_REPO=~/repos/apache-asf/brooklyn
# The Git commit hash from which the release was made - get this from the release script, or the Release Manager's announcement
GIT_COMMIT=edcf928ee65cc29a84376c822759e468a9f016fe
{% endhighlight %}
Import the PGP keys of the release Managers:
{% highlight bash %}
curl https://dist.apache.org/repos/dist/release/brooklyn/KEYS | gpg2 --import
{% endhighlight %}
Download the artifacts
----------------------
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}
BASE_NAME=apache-brooklyn-${VERSION_NAME}-rc${RC_NUMBER}
BASE_URL=https://dist.apache.org/repos/dist/dev/brooklyn/${BASE_NAME}/
mkdir -p ${TEMP_DIR}
cd ${TEMP_DIR}
curl -s $BASE_URL | \
grep href | grep -v '\.\.' | \
sed -e 's@.*href="@'$BASE_URL'@' | \
sed -e 's@">.*@@' | \
xargs -n 1 curl -O
{% endhighlight %}
(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 presence of NOTICE & LICENSE
-----------------------------------
Check that all archives are correctly annotated with license information.
Check NOTICE is included:
{% highlight bash %}
for ARCHIVE in $(find * -type f ! \( -name '*.asc' -o -name '*.sha256' \) ); do
REL_ARCHIVE=${ARCHIVE/-rc?}
case $ARCHIVE in
*.tar.gz)
LIST="tar -tvf"
PREFIX=${REL_ARCHIVE%.tar.gz}
;;
*.zip)
LIST="unzip -Zl"
PREFIX=${REL_ARCHIVE%.zip}
;;
*.rpm)
LIST="rpm -qlp"
PREFIX="/opt/brooklyn"
;;
*)
echo "Unrecognized file type $ARCHIVE. Aborting!"
exit 1
;;
esac
$LIST $ARCHIVE | grep "$PREFIX/NOTICE" && \
$LIST $ARCHIVE | grep "$PREFIX/LICENSE" \
|| { echo "Missing LICENSE or NOTICE in $ARCHIVE. Aborting!"; break; }
done
{% endhighlight %}
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 artifact in $(find * -type f ! \( -name '*.asc' -o -name '*.sha256' \) ); do
shasum -a256 -c ${artifact}.sha256 && \
gpg2 --verify ${artifact}.asc ${artifact} \
|| { echo "Invalid signature for $artifact. Aborting!"; break; }
done
{% endhighlight %}
Verify expanded source archive matches contents of RC tag
---------------------------------------------------------
These commands will compare the contents of the source release to the contents of the equivalent Git commit. Note that
there will be some differences: we cannot release binary files in the source release, so some test artifacts will
appear to be missing from the source release, and the source release excludes the documentation, website and release
scripts.
{% highlight bash %}
cd $BASE_REPO
git checkout $GIT_COMMIT
git clean -d -f -x # WARNING: this will forcibly clean your workspace!
cd $TEMP_DIR
mkdir unpacked-src
# Either:
tar xzf ${BASE_NAME}-src.tar.gz -C unpacked-src/
# or:
unzip ${BASE_NAME}-src.zip -d unpacked-src/
# (or preferably both!)
diff -qr unpacked-src/$BASE_NAME $BASE_REPO
{% endhighlight %}
Check for files with invalid headers in source archive
------------------------------------------------------
{% highlight bash %}
grep -rL "Licensed to the Apache Software Foundation" * | less
{% endhighlight %}
Check for binary files in source archive
-----------------------------------------
Look for files which are created/compiled based on other source files in the distribution.
"Primary" binary files like images are acceptable.
{% highlight bash %}
find . | xargs -n1 file | awk -F $':' ' { t = $1; $1 = $2; $2 = t; print; } ' | sort | less
{% endhighlight %}
Verify the operation of the binary distribution
-----------------------------------------------
{% highlight bash %}
cd $TEMP_DIR
mkdir unpacked-bin
# Either:
tar xzf ${BASE_NAME}-bin.tar.gz -C unpacked-bin/
# or:
unzip ${BASE_NAME}-bin.tar.gz -d unpacked-bin/
# (or preferably both!)
cd unpacked-bin
./bin/brooklyn launch
{% endhighlight %}
Try deploying a simple app, such as the YAML:
{% highlight yaml %}
location: localhost
services:
- type: org.apache.brooklyn.entity.webapp.jboss.JBoss7Server
{% endhighlight %}
Inspect the Maven staging repository
------------------------------------
Go to the Apache Nexus server at [https://repository.apache.org/](https://repository.apache.org/) and log in using the
link in the top right (the credentials are the same as your Git and Jenkins credentials). Go to the "Staging
Repositories" page, and click the repository with the name starting `orgapachebrooklyn`.
Give this a brief inspection to ensure that it looks reasonable. In particular:
- The expected projects are there. (There is no need to do an exhaustive check - but if there is only a couple of
projects there, then something has clearly gone wrong!)
- The projects contain artifacts with the expected version number.
- The artifacts for a project look reasonable - and there is a `.asc` file (detached PGP cleartext signature) for each
artifact.
About the sanity check
----------------------
This is the most basic sanity check. This is now suitable to be uploaded to the pre-release area and an announcement
made with voting open. This is then the point for the RM and the community to perform more detailed testing on the RC
artifacts and submit bug reports and votes.
Automated sanity check script available at brooklyn-dist/release/verity_brooklyn_rc.sh
If the sanity check fails
-------------------------
Note the problems causing the failure, and file bug reports, start mailing list discussions etc., as appropriate.
#### For the release manager who was preparing an RC for upload
You should completely discard the defective artifacts.
You will also need to drop the Maven staging repository on Apache's Nexus server: go to the Apache Nexus server at
[https://repository.apache.org/](https://repository.apache.org/) and log in using the link in the top right (the
credentials are the same as your Git and Jenkins credentials). Go to the "Staging Repositories" page, and tick the
repository with the name starting `orgapachebrooklyn`. Click the **Drop** button.