Skip to content

Commit

Permalink
Initial implementation of verify-kafka.rc.sh
Browse files Browse the repository at this point in the history
  • Loading branch information
elalonde committed Nov 7, 2019
1 parent 42d11a2 commit b535d5e
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 4 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Various utilities related to kafka

- bin/verify-kafka-release.sh
A utility for verifying kafka releases
usage: verify-kafka-release.sh VERSION REMOTE_RELEASE_SITE
example: verify-kafka-release.sh 2.2.2 home.apache.org/~rhauch/kafka-2.2.2-rc2
- bin/verify-kafka-rc.sh
A utility for verifying kafka release candidates
usage: verify-kafka-rc.sh VERSION REMOTE_RELEASE_SITE
example: verify-kafka-rc.sh 2.2.2 https://home.apache.org/~rhauch/kafka-2.2.2-rc2
119 changes: 119 additions & 0 deletions bin/verify-kafka-rc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#!/usr/bin/env bash
#This is free and unencumbered software released into the public domain.
#
#Anyone is free to copy, modify, publish, use, compile, sell, or
#distribute this software, either in source code form or as a compiled
#binary, for any purpose, commercial or non-commercial, and by any
#means.
#
#In jurisdictions that recognize copyright laws, the author or authors
#of this software dedicate any and all copyright interest in the
#software to the public domain. We make this dedication for the benefit
#of the public at large and to the detriment of our heirs and
#successors. We intend this dedication to be an overt act of
#relinquishment in perpetuity of all present and future rights to this
#software under copyright law.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
#EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
#MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
#IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
#OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
#ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
#OTHER DEALINGS IN THE SOFTWARE.
#
#For more information, please refer to <http://unlicense.org/>
#
# usage: verify-kafka-rc.sh VERSION REMOTE_RELEASE_SITE
# example: ./verify-kafka-rc.sh 2.2.2 https://home.apache.org/~rhauch/kafka-2.2.2-rc2
#
# lightly tested on os x.

set -e
set -u
set -o pipefail

if [ $# -ne 2 ]; then
echo "usage:"
echo -e "\tverify-kafka-rc.sh VERSION REMOTE_RELEASE_SITE"
echo "example:"
echo "verify-kafka-rc.sh 2.2.2 home.apache.org/~rhauch/kafka-2.2.2-rc2"
exit 1
fi

for x in wget gpg md5sum sha1sum sha512sum tr cut tar gradle; do
which $x >/dev/null
if [ $? -ne 0 ]; then
echo "missing required utility $x">&2
exit 1;
fi
done

declare -r KEYS_URL='https://kafka.apache.org/KEYS'
declare -r WORKDIR="$TMPDIR/$$.out"
declare -r KEYS_FILE="$WORKDIR/keys.out"
declare -r VERSION="$1"
declare -r REMOTE_RELEASE_SITE="$2"
declare -r FILES=RELEASE_NOTES.html\ kafka-$VERSION-src.tgz\ kafka_2.11-$VERSION-site-docs.tgz\ kafka_2.11-$VERSION.tgz\ kafka_2.12-$VERSION-site-docs.tgz\ kafka_2.12-$VERSION.tgz

mkdir -p $WORKDIR

echo "workdir: $WORKDIR"
echo "Downloading signing keys"
wget -q $KEYS_URL -O $KEYS_FILE

echo "Importing signing keys"
gpg --import "$KEYS_FILE"

echo "Downloading release files"
for x in $FILES; do
echo -e "\t$x"
wget -q $REMOTE_RELEASE_SITE/$x -O $WORKDIR/$x
for y in asc md5 sha1 sha512; do
echo -e "\t$x.$y"
wget -q $REMOTE_RELEASE_SITE/$x.$y -O $WORKDIR/$x.$y
done
done

echo "Verifying pgp signatures"
for x in $FILES; do
gpg --verify $WORKDIR/$x.asc
done

for x in md5 sha1 sha512; do
util=${x}sum
echo "Verifying ${x}sums"
for y in $FILES; do
sum=$(cat $WORKDIR/$y.$x | tr -d '\n' | cut -d':' -f2- | sed -e 's/ //g')
echo "$sum $WORKDIR/$y" >$WORKDIR/$y.$x.normalized
$util -c $WORKDIR/$y.$x.normalized
done
done

echo "Verifying kafka source tree"
pushd $WORKDIR >/dev/null
tar zxf kafka-$VERSION-src.tgz
pushd $WORKDIR/kafka-$VERSION-src >/dev/null
echo -e "Invoking gradle"
gradle
echo -e "\tBuilding jar from source"
./gradlew
echo -e "\tBuilding source jar"
./gradlew srcJar
echo -e "\tBuilding javadoc"
./gradlew javadoc
echo -e "\tBuilding javadoc jar"
./gradlew javadocJar # builds a javadoc jar for each module
echo -e "\tBuilding scaladoc"
./gradlew scaladoc
echo -e "\tBuilding scaladoc jar"
./gradlew scaladocJar # builds a scaladoc jar for each module
echo -e "\tBuilding docs jar"
./gradlew docsJar # builds both (if applicable) javadoc and scaladoc jars for each module
echo -e "\tRunning unit tests"
./gradlew unitTest
echo -e "\tRunning integration tests"
./gradlew integrationTest
popd >/dev/null
popd >/dev/null
echo "All steps successful."

0 comments on commit b535d5e

Please sign in to comment.