1
1
#! /bin/bash
2
2
3
3
# Parameters
4
- # $1 release
5
- # $2 maven artefacts url number (as specified in the vote email)
4
+ # $1 staged|released
5
+ # $2 release
6
+ # $3 maven artefacts staging repo id (as specified in the repo url found in the vote email) (ignored for 'released')
6
7
#
7
- # Example use: `./cassandra-check-release.sh 4.0-beta3 1224
8
+ # Example use: `./cassandra-check-release.sh staged 4.0-beta3 1224
8
9
#
9
10
# This script is very basic and experimental. I beg of you to help improve it.
10
11
#
@@ -19,25 +20,35 @@ command -v md5sum >/dev/null 2>&1 || { echo >&2 "md5sum needs to be installed";
19
20
command -v sha256sum > /dev/null 2>&1 || { echo >&2 " sha256sum needs to be installed" ; exit 1; }
20
21
command -v sha512sum > /dev/null 2>&1 || { echo >&2 " sha512sum needs to be installed" ; exit 1; }
21
22
command -v tar > /dev/null 2>&1 || { echo >&2 " tar needs to be installed" ; exit 1; }
22
- command -v ant > /dev/null 2>&1 || { echo >&2 " ant needs to be installed" ; exit 1; }
23
- command -v timeout > /dev/null 2>&1 || { echo >&2 " timeout needs to be installed" ; exit 1; }
24
23
command -v docker > /dev/null 2>&1 || { echo >&2 " docker needs to be installed" ; exit 1; }
25
24
(docker info > /dev/null 2>&1 ) || { echo >&2 " docker needs to running" ; exit 1; }
26
- (java -version 2>&1 | grep -q " 1.8" ) || { echo >&2 " Java 8 must be used" ; exit 1; }
27
- (java -version 2>&1 | grep -iq jdk ) || { echo >&2 " Java JDK must be used" ; exit 1; }
28
- (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; }
29
- (curl --output /dev/null --silent --head --fail " https://repository.apache.org/content/repositories/orgapachecassandra-$2 /org/apache/cassandra/cassandra-all/$1 " ) || { echo >&2 " Not Found: https://repository.apache.org/content/repositories/orgapachecassandra-$2 /org/apache/cassandra/cassandra-all/$1 " ; exit 1; }
25
+
26
+ ( [ " staged" = $1 ] || [ " released" = $1 ] ) || { echo >&2 " first argument must be staged or released" ; exit 1; }
27
+ ( [ $# -ge 2 ] ) || { echo >&2 " minimum two arguments must be provided" ; exit 1; }
28
+ if [ -z " $3 " ] ; then
29
+ [ " released" == $1 ] || { echo >&2 " third argument must not be specified when first is released" ; exit 1; }
30
+ dist_url=" https://dist.apache.org/repos/dist/release/cassandra/$2 /"
31
+ maven_repo_url=" https://repository.apache.org/content/repositories/releases/org/apache/cassandra/cassandra-all/$2 "
32
+ packages_url=" https://repo.aws.dsinternal.org/artifactory/apache-cassandra-"
33
+ else
34
+ [ " staged" == $1 ] || { echo >&2 " third argument must be specified when first is staged" ; exit 1; }
35
+ dist_url=" https://dist.apache.org/repos/dist/dev/cassandra/$2 /"
36
+ maven_repo_url=" https://repository.apache.org/content/repositories/orgapachecassandra-$3 /org/apache/cassandra/cassandra-all/$2 "
37
+ packages_url=" https://dist.apache.org/repos/dist/dev/cassandra/${2} /"
38
+ fi
39
+ (curl --output /dev/null --silent --head --fail " ${dist_url} " ) || { echo >&2 " Not Found: ${dist_url} " ; exit 1; }
40
+ (curl --output /dev/null --silent --head --fail " ${maven_repo_url} " ) || { echo >&2 " Not found: ${maven_repo_url} " ; exit 1; }
30
41
31
42
# ##################
32
43
33
- mkdir -p /tmp/$1
34
- cd /tmp/$1
44
+ mkdir -p /tmp/$2
45
+ cd /tmp/$2
35
46
echo " Downloading KEYS"
36
47
wget -q https://downloads.apache.org/cassandra/KEYS
37
- echo " Downloading https://repository.apache.org/content/repositories/orgapachecassandra- $2 /org/apache/cassandra/cassandra-all/ $1 "
38
- wget -Nqnd -e robots=off --recursive --no-parent https://repository.apache.org/content/repositories/orgapachecassandra- $2 /org/apache/cassandra/cassandra-all/ $1
39
- echo " Downloading https://dist.apache.org/repos/dist/dev/cassandra/ $1 / "
40
- wget -Nqe robots=off --recursive --no-parent https://dist.apache.org/repos/dist/dev/cassandra/ $1 /
48
+ echo " Downloading ${maven_repo_url} "
49
+ wget -Nqnd -e robots=off --recursive --no-parent ${maven_repo_url}
50
+ echo " Downloading ${dist_url} "
51
+ wget -Nqe robots=off --recursive --no-parent ${dist_url}
41
52
42
53
echo
43
54
echo " ====== CHECK RESULTS ======"
@@ -51,7 +62,7 @@ for f in *.asc ; do gpg --verify $f ; done
51
62
(compgen -G " *.jar" > /dev/null) || { echo >&2 " No *.jar files found in $( pwd) " ; exit 1; }
52
63
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
53
64
54
- cd dist.apache.org/repos/dist/dev /cassandra/$1
65
+ cd dist.apache.org/repos/dist/* /cassandra/$2
55
66
(compgen -G " *.asc" > /dev/null) || { echo >&2 " No *.asc files found in $( pwd) " ; exit 1; }
56
67
for f in * .asc ; do gpg --verify $f ; done
57
68
(compgen -G " *.gz" > /dev/null) || { echo >&2 " No *.gz files found in $( pwd) " ; exit 1; }
@@ -60,17 +71,18 @@ for f in *.asc ; do gpg --verify $f ; done
60
71
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
61
72
62
73
echo
63
- rm -fR apache-cassandra-$1 -src
64
- tar -xzf apache-cassandra-$1 -src.tar.gz
65
- rm -fR apache-cassandra-$1
66
- tar -xzf apache-cassandra-$1 -bin.tar.gz
74
+ rm -fR apache-cassandra-$2 -src
75
+ tar -xzf apache-cassandra-$2 -src.tar.gz
76
+ rm -fR apache-cassandra-$2
77
+ tar -xzf apache-cassandra-$2 -bin.tar.gz
67
78
68
79
JDKS=" 8"
69
- if [[ $1 =~ [4]\. ]] ; then
80
+ if [[ $2 =~ [4]\. ]] ; then
70
81
JDKS=(" 8" " 11" )
71
- elif [[ $1 =~ [5]\. ]] ; then
82
+ elif [[ $2 =~ [5]\. ]] ; then
72
83
JDKS=(" 11" " 17" )
73
84
fi
85
+ TIMEOUT=2160
74
86
75
87
for JDK in ${JDKS[@]} ; do
76
88
@@ -82,10 +94,10 @@ for JDK in ${JDKS[@]} ; do
82
94
echo
83
95
rm -f procfifo
84
96
mkfifo procfifo
85
- docker run -i -v ` pwd` /apache-cassandra-$1 -src:/apache-cassandra-$1 -src openjdk:${JDK} -jdk-slim-buster timeout 2160 /bin/bash -c "
97
+ docker run -i -v ` pwd` /apache-cassandra-$2 -src:/apache-cassandra-$2 -src openjdk:${JDK} -jdk-slim-buster timeout ${TIMEOUT} /bin/bash -c "
86
98
( apt -qq update;
87
99
apt -qq install -y ant build-essential git python procps ) 2>&1 >/dev/null;
88
- cd apache-cassandra-$1 -src ;
100
+ cd apache-cassandra-$2 -src ;
89
101
ant artifacts ${BUILD_OPT} " 2>&1 > procfifo &
90
102
91
103
PID=$!
@@ -108,10 +120,10 @@ for JDK in ${JDKS[@]} ; do
108
120
echo
109
121
rm -f procfifo
110
122
mkfifo procfifo
111
- docker run -i -v ` pwd` /apache-cassandra-$1 :/apache-cassandra-$1 openjdk:${JDK} -jdk-slim-buster timeout 2160 /bin/bash -c "
123
+ docker run -i -v ` pwd` /apache-cassandra-$2 :/apache-cassandra-$2 openjdk:${JDK} -jdk-slim-buster timeout ${TIMEOUT} /bin/bash -c "
112
124
( apt -qq update;
113
125
apt -qq install -y python python3 procps ) 2>&1 >/dev/null;
114
- apache-cassandra-$1 /bin/cassandra -R -f" 2>&1 > procfifo &
126
+ apache-cassandra-$2 /bin/cassandra -R -f" 2>&1 > procfifo &
115
127
116
128
PID=$!
117
129
success=false
@@ -138,7 +150,7 @@ for JDK in ${JDKS[@]} ; do
138
150
echo
139
151
rm -f procfifo
140
152
mkfifo procfifo
141
- docker run -i -v ` pwd` /debian:/debian ${DEBIAN_IMAGE} timeout 2160 /bin/bash -c "
153
+ docker run -i -v ` pwd` /debian:/debian ${DEBIAN_IMAGE} timeout ${TIMEOUT} /bin/bash -c "
142
154
( apt -qq update ;
143
155
apt -qq install -y python ; # will silently fail on debian latest
144
156
apt -qq install -y python3 procps ;
@@ -163,20 +175,20 @@ for JDK in ${JDKS[@]} ; do
163
175
164
176
# test deb repository startup
165
177
166
- idx=` expr index " $1 " -`
178
+ idx=` expr index " $2 " -`
167
179
if [ $idx -eq 0 ]
168
180
then
169
- release_short=${1 }
181
+ release_short=${2 }
170
182
else
171
- release_short=${1 : 0: $((idx-1))}
183
+ release_short=${2 : 0: $((idx-1))}
172
184
fi
173
185
debian_series=" $( echo ${release_short} | cut -d ' .' -f 1) $( echo ${release_short} | cut -d ' .' -f 2) x"
174
186
175
187
echo
176
188
rm -f procfifo
177
189
mkfifo procfifo
178
- docker run -i ${DEBIAN_IMAGE} timeout 2160 /bin/bash -c "
179
- ( echo 'deb https://dist.apache.org/repos/dist/dev/cassandra/ ${1} / debian ${debian_series} main' | tee -a /etc/apt/sources.list.d/cassandra.sources.list ;
190
+ docker run -i ${DEBIAN_IMAGE} timeout ${TIMEOUT} /bin/bash -c "
191
+ ( echo 'deb ${packages_url} debian ${debian_series} main' | tee -a /etc/apt/sources.list.d/cassandra.sources.list ;
180
192
apt -qq update ;
181
193
apt -qq install -y curl gnupg2 ;
182
194
apt-key adv --keyserver keyserver.ubuntu.com --recv-key E91335D77E3E87CB ;
@@ -207,13 +219,13 @@ for JDK in ${JDKS[@]} ; do
207
219
fi
208
220
209
221
RH_DISTS=" almalinux"
210
- if ! [[ $1 =~ [23]\. ]] ; then
211
- RH_DISTS=(" almalinux" " centos:7 " )
222
+ if ! [[ $2 =~ [23]\. ]] ; then
223
+ RH_DISTS=(" almalinux" " noboolean " )
212
224
fi
213
225
for RH_DIST in ${RH_DISTS[@]} ; do
214
226
215
227
NOBOOLEAN_REPO=" "
216
- if [ " $RH_DIST " == " centos:7 " ] ; then
228
+ if [ " $RH_DIST " == " noboolean " ] ; then
217
229
NOBOOLEAN_REPO=" /noboolean"
218
230
fi
219
231
@@ -222,9 +234,9 @@ for JDK in ${JDKS[@]} ; do
222
234
echo
223
235
rm -f procfifo
224
236
mkfifo procfifo
225
- docker run -i -v ` pwd` /redhat${NOBOOLEAN_REPO} :/redhat ${RH_DIST} timeout 2160 /bin/bash -c "
237
+ docker run -i -v ` pwd` /redhat${NOBOOLEAN_REPO} :/redhat almalinux timeout ${TIMEOUT} /bin/bash -c "
226
238
( yum install -y procps-ng python3-pip;
227
- if [ " centos:7 " == " $RH_DIST " ] && [ " java-17-openjdk-devel" == " $JDK_RH " ] ; then
239
+ if [ " noboolean " == " $RH_DIST " ] && [ " java-17-openjdk-devel" == " $JDK_RH " ] ; then
228
240
# centos7 doesn't have jdk17, so manual install ;
229
241
curl https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm -o jdk-17_linux-x64_bin.rpm ;
230
242
yum -y install ./jdk-17_linux-x64_bin.rpm ;
@@ -255,10 +267,10 @@ for JDK in ${JDKS[@]} ; do
255
267
rm -f procfifo
256
268
mkfifo procfifo
257
269
# yum repo installation failing due to a legacy (SHA1) third-party sig in our KEYS file, hence use of update-crypto-policies. Impacts all rhel9+ users.
258
- docker run -i ${RH_DIST} timeout 2160 /bin/bash -c " (
270
+ docker run -i almalinux timeout ${TIMEOUT} /bin/bash -c " (
259
271
echo '[cassandra]' >> /etc/yum.repos.d/cassandra.repo ;
260
272
echo 'name=Apache Cassandra' >> /etc/yum.repos.d/cassandra.repo ;
261
- echo 'baseurl=https://dist.apache.org/repos/dist/dev/cassandra/ ${1} / redhat${NOBOOLEAN_REPO} ' >> /etc/yum.repos.d/cassandra.repo ;
273
+ echo 'baseurl=${packages_url} redhat${NOBOOLEAN_REPO} ' >> /etc/yum.repos.d/cassandra.repo ;
262
274
echo 'gpgcheck=1' >> /etc/yum.repos.d/cassandra.repo ;
263
275
echo 'repo_gpgcheck=1' >> /etc/yum.repos.d/cassandra.repo ;
264
276
echo 'gpgkey=https://downloads.apache.org/cassandra/KEYS' >> /etc/yum.repos.d/cassandra.repo ;
0 commit comments