forked from apache/cassandra-builds
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a script to help verify release checks
- Loading branch information
1 parent
05a3817
commit 029d0ab
Showing
1 changed file
with
127 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
#!/bin/bash | ||
|
||
# Parameters | ||
# $1 release | ||
# $2 maven artefacts url (as specified in the vote email) | ||
# | ||
# Example use: `./cassandra-check-release.sh 4.0-beta3 https://repository.apache.org/content/repositories/orgapachecassandra-1224/org/apache/cassandra/cassandra-all/4.0-beta3/` | ||
# | ||
# This script is very basic and experimental. I beg of you to help improve it. | ||
# | ||
|
||
################### | ||
# prerequisites | ||
|
||
command -v wget >/dev/null 2>&1 || { echo >&2 "wget needs to be installed"; exit 1; } | ||
command -v gpg >/dev/null 2>&1 || { echo >&2 "gpg needs to be installed"; exit 1; } | ||
command -v sha1sum >/dev/null 2>&1 || { echo >&2 "sha1sum needs to be installed"; exit 1; } | ||
command -v md5sum >/dev/null 2>&1 || { echo >&2 "md5sum needs to be installed"; exit 1; } | ||
command -v sha256sum >/dev/null 2>&1 || { echo >&2 "sha256sum needs to be installed"; exit 1; } | ||
command -v sha512sum >/dev/null 2>&1 || { echo >&2 "sha512sum needs to be installed"; exit 1; } | ||
command -v tar >/dev/null 2>&1 || { echo >&2 "tar needs to be installed"; exit 1; } | ||
command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 1; } | ||
command -v timeout >/dev/null 2>&1 || { echo >&2 "timeout needs to be installed"; exit 1; } | ||
command -v docker >/dev/null 2>&1 || { echo >&2 "docker needs to be installed"; exit 1; } | ||
(docker info >/dev/null 2>&1) || { echo >&2 "docker needs to running"; exit 1; } | ||
(java -version 2>&1 | grep -q "1.8") || { echo >&2 "Java 8 must be used"; exit 1; } | ||
(java -version 2>&1 | grep -iq jdk ) || { echo >&2 "Java JDK must be used"; exit 1; } | ||
(curl --output /dev/null --silent --head --fail "https://dist.apache.org/repos/dist/dev/cassandra/$1/") || { echo >&2 "Not Found: https://dist.apache.org/repos/dist/dev/cassandra/$1/"; exit 1; } | ||
(curl --output /dev/null --silent --head --fail "$2") || { echo >&2 "Not Found: $2"; exit 1; } | ||
|
||
################### | ||
|
||
mkdir -p /tmp/$1 | ||
cd /tmp/$1 | ||
echo "Downloading KEYS" | ||
wget https://downloads.apache.org/cassandra/KEYS | ||
echo "Downloading $2" | ||
wget -Nqnd -e robots=off --recursive --no-parent $2 | ||
echo "Downloading https://dist.apache.org/repos/dist/dev/cassandra/$1/" | ||
wget -Nqe robots=off --recursive --no-parent https://dist.apache.org/repos/dist/dev/cassandra/$1/ | ||
|
||
echo | ||
echo "====== CHECK RESULTS ======" | ||
echo | ||
|
||
gpg --import KEYS | ||
|
||
(compgen -G "*.asc" >/dev/null) || { echo >&2 "No *.asc files found in $(pwd)"; exit 1; } | ||
for f in *.asc ; do gpg --verify $f ; done | ||
(compgen -G "*.pom" >/dev/null) || { echo >&2 "No *.pom files found in $(pwd)"; exit 1; } | ||
(compgen -G "*.jar" >/dev/null) || { echo >&2 "No *.jar files found in $(pwd)"; exit 1; } | ||
for f in *.pom *.jar *.asc ; do echo -n "sha1: " ; echo "$(cat $f.sha1) $f" | sha1sum -c ; echo -n "md5: " ; echo "$(cat $f.md5) $f" | md5sum -c ; done | ||
|
||
cd dist.apache.org/repos/dist/dev/cassandra/$1 | ||
(compgen -G "*.asc" >/dev/null) || { echo >&2 "No *.asc files found in $(pwd)"; exit 1; } | ||
for f in *.asc ; do gpg --verify $f ; done | ||
(compgen -G "*.gz" >/dev/null) || { echo >&2 "No *.gz files found in $(pwd)"; exit 1; } | ||
(compgen -G "*.sha256" >/dev/null) || { echo >&2 "No *.sha256 files found in $(pwd)"; exit 1; } | ||
(compgen -G "*.sha512" >/dev/null) || { echo >&2 "No *.sha512 files found in $(pwd)"; exit 1; } | ||
for f in *.gz ; do echo -n "sha256: " ; echo "$(cat $f.sha256) $f" | sha256sum -c ; echo -n "sha512:" ; echo "$(cat $f.sha512) $f" | sha512sum -c ; done | ||
|
||
echo | ||
rm -fR apache-cassandra-$1-src | ||
tar -xzf apache-cassandra-$1-src.tar.gz | ||
pushd apache-cassandra-$1-src | ||
echo "Source build $(ant artifacts | grep '^BUILD ')" | ||
popd | ||
|
||
echo | ||
rm -fR apache-cassandra-$1 | ||
tar -xzf apache-cassandra-$1-bin.tar.gz | ||
rm -f procfifo | ||
mkfifo procfifo | ||
timeout 30 apache-cassandra-$1/bin/cassandra -f 2>&1 >procfifo & | ||
PID=$! | ||
success=false | ||
while read LINE && ! $success ; do | ||
if [[ $LINE =~ "Starting listening for CQL clients on" ]] ; then | ||
echo "Binary artefact OK" | ||
kill "$PID" | ||
success=true | ||
fi | ||
done < procfifo | ||
rm -f procfifo | ||
wait "$PID" | ||
if ! $success ; then | ||
echo "Binary artefact FAILED" | ||
fi | ||
|
||
echo | ||
rm -f procfifo | ||
mkfifo procfifo | ||
docker run -i -v `pwd`/debian:/debian openjdk:8-jdk-slim-buster timeout 1080 /bin/bash -c "( apt -qq update; apt -qq install -y python python3 procps; dpkg --ignore-depends=java7-runtime --ignore-depends=java8-runtime -i debian/*.deb ) 2>/dev/null; CASSANDRA_CONF=file:///etc/cassandra/ HEAP_NEWSIZE=500m MAX_HEAP_SIZE=1g cassandra -R -f" 2>&1 >procfifo & | ||
PID=$! | ||
success=false | ||
while read LINE && ! $success ; do | ||
if [[ $LINE =~ "Starting listening for CQL clients on" ]] ; then | ||
echo "Debian package OK" | ||
kill "$PID" | ||
success=true | ||
fi | ||
done < procfifo | ||
rm -f procfifo | ||
wait "$PID" | ||
if ! $success ; then | ||
echo "Debian package FAILED" | ||
fi | ||
|
||
echo | ||
rm -f procfifo | ||
mkfifo procfifo | ||
docker run -i -v `pwd`/redhat:/redhat almalinux timeout 1080 /bin/bash -c "( yum install -y java-1.8.0-openjdk procps-ng ; rpm -i redhat/*.rpm ) 2>/dev/null; cassandra -R -f " 2>&1 >procfifo & | ||
PID=$! | ||
|
||
success=false | ||
while read LINE && ! $success ; do | ||
if [[ $LINE =~ "Starting listening for CQL clients on" ]] ; then | ||
echo "Redhat package OK" | ||
kill "$PID" | ||
success=true | ||
fi | ||
done < procfifo | ||
rm -f procfifo | ||
wait "$PID" | ||
if ! $success ; then | ||
echo "Redhat package FAILED" | ||
fi |