Skip to content

Commit 050ff96

Browse files
committed
DRILL-4050: Add zip archives to the list of artifacts in verify_release.sh
This enhanced version of the script allows integrated download and verification of a Drill release. It can be used to verify both the main release artifacts and maven repository artifacts. For example, to verify the 1.6 rc0 release artifacts, I ran ./verify_release.sh https://repository.apache.org/content/repositories/orgapachedrill-1030/ /tmp/drill-1.6/maven/ ./verify_release.sh http://home.apache.org/~parthc/drill/releases/1.6.0/rc0/ /tmp/drill-1.6/main/ If I had pre-downloaded the files in the respective folders, I'd run ./verify_release.sh /tmp/drill-1.6/maven/ ./verify_release.sh /tmp/drill-1.6/main/ Finally, run with `-nv` option to reduce the verbosity of the output. Closes apache#249.
1 parent dd4f03b commit 050ff96

File tree

1 file changed

+125
-51
lines changed

1 file changed

+125
-51
lines changed

tools/verify_release.sh

+125-51
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,15 @@
2323

2424
DRILL_CHECKUM_ALOGRITHMS="sha1 md5"
2525
DRILL_SIGNATURE_EXTENSION=asc
26-
DRILL_ARTIFACT_EXTENSION=tar.gz
27-
DRILL_ARTIFACTS=*.${DRILL_ARTIFACT_EXTENSION}
26+
DRILL_DOWNLOAD_EXTENSIONS="tar.gz,zip,xml,asc,jar,md5,pom,sha1"
27+
DRILL_ARTIFACTS="*.tar.gz *.zip *.pom *.jar"
2828
DRILL_ARTIFACT_DIR=.
2929

30+
TERSE=false
31+
CMD_REDIRECT="/dev/stdout"
32+
DOWNLOAD_URL=
33+
ARTIFACT_COUNT=0
34+
3035
ERROR='\e[0;31m'
3136
SUCCESS='\e[0;32m'
3237
DEBUG='\e[1;30m'
@@ -36,68 +41,137 @@ RESET='\e[0m'
3641
#
3742
# Helper methods
3843
#
39-
error_exit() { echo -e $ERROR$@$RESET; popd &> /dev/null; exit 1; }
40-
info_msg () { echo -e $INFO$@$RESET; }
41-
debug_msg () { echo -e $DEBUG$@$RESET; }
44+
info_msg() { echo -e $INFO$@$RESET; }
45+
debug_msg() { if [ "$TERSE" == "false" ]; then echo -e $DEBUG$@$RESET; fi }
46+
error_msg() { echo -e $ERROR$@$RESET; }
47+
error_exit() { echo -e $ERROR$@$RESET; popd &> /dev/null; exit 1; }
48+
49+
header_msg() {
50+
MSG=$@
51+
info_msg ${MSG}
52+
if [ "$TERSE" == "false" ]; then
53+
info_msg $(eval printf "=%.0s" {1..${#MSG}});
54+
fi
55+
}
56+
57+
test_dir() {
58+
if [ ! -e $1 ]; then
59+
mkdir -p $1
60+
elif [ ! -d $1 ]; then
61+
error_msg "The specified path '$1' is not a directory."
62+
usage
63+
fi
64+
}
65+
66+
usage() {
67+
echo -e "Usage:\n `basename $0` <path_of_drill_artifacts>\n `basename $0` <url_of_drill_artifacts> [path_of_download_directory]"
68+
exit 1
69+
}
70+
71+
download_files() {
72+
if [[ $# == 2 ]]; then
73+
test_dir $2
74+
DRILL_ARTIFACT_DIR=$2
75+
else
76+
DRILL_ARTIFACT_DIR=`mktemp -d`
77+
fi
78+
79+
info_msg "Downloading files from '$1' into '$DRILL_ARTIFACT_DIR'"
80+
pushd ${DRILL_ARTIFACT_DIR} &> /dev/null
81+
wget $1 -r -np -A ${DRILL_DOWNLOAD_EXTENSIONS} -l0 -e robots=off -nH -nv &> $CMD_REDIRECT
82+
popd &> /dev/null
83+
}
84+
85+
verify_directory() {
86+
pushd $1 &> /dev/null
87+
88+
for ARTIFACT in ${DRILL_ARTIFACTS}; do
89+
ARTIFACT_COUNT=$(($ARTIFACT_COUNT+1))
90+
header_msg "Verifying artifact #$ARTIFACT_COUNT '$ARTIFACT' in $PWD"
91+
92+
debug_msg "Verifying signature..."
93+
SIGNATURE_FILE=${ARTIFACT}.${DRILL_SIGNATURE_EXTENSION}
94+
if ! [ -f ${SIGNATURE_FILE} ]; then error_exit "Signature file '${SIGNATURE_FILE}' was not found"; fi
95+
if gpg --verify ${SIGNATURE_FILE} &> $CMD_REDIRECT; then
96+
debug_msg "Signature verified (${SIGNATURE_FILE})."
97+
else
98+
error_exit "Signature verification failed for '${ARTIFACT}'!"
99+
fi
100+
debug_msg ""
101+
102+
debug_msg Verifying checksums...
103+
for ALGO in $DRILL_CHECKUM_ALOGRITHMS; do
104+
CHECKSUM_FILE=${ARTIFACT}.${ALGO}
105+
if ! [ -f ${CHECKSUM_FILE} ]; then error_exit "Checksum file '${CHECKSUM_FILE}' was not found"; fi
106+
COMPUTED_SUM=`${ALGO}sum ${ARTIFACT} | awk '{print $1}'`
107+
FILE_SUM=`cat ${CHECKSUM_FILE}`
108+
if [ "${FILE_SUM}" == "${COMPUTED_SUM}" ]; then
109+
debug_msg "Verified ${ALGO} checksum (${CHECKSUM_FILE})."
110+
else
111+
error_exit "Computed ${ALGO} checksum did not match the one in '${CHECKSUM_FILE}'"
112+
fi
113+
done
114+
debug_msg "Checksums verified.\n"
115+
done
116+
117+
# recurse through the sub-directories
118+
for SUB_DIR in *; do
119+
if [ -d ${SUB_DIR} ]; then
120+
verify_directory ${SUB_DIR}
121+
fi
122+
done
123+
124+
popd &> /dev/null
125+
}
42126

43127
#
44-
# Check the command line argument
128+
# Parse the command line arguments
45129
#
46-
case $# in
47-
0) ;;
48-
1)
49-
if ! [ -d $1 ] ; then
50-
pushd . &> /dev/null
51-
error_exit "'$1' is not a directory."
52-
fi
53-
DRILL_ARTIFACT_DIR=$1
130+
if [ $# -eq 0 ]; then
131+
usage
132+
fi
133+
while [ $# -gt 0 ]; do
134+
case "$1" in
135+
-nv)
136+
TERSE=true
137+
CMD_REDIRECT="/dev/null"
138+
;;
139+
-*)
140+
echo "Unknown option '$1'."
141+
usage
54142
;;
55143
*)
56-
echo "Usage: $0 <path_to_drill_artifacts>"
57-
exit 1
58-
esac
144+
if [[ $1 == https://* ]] || [[ $1 == http://* ]] || [[ $1 == ftp://* ]]; then
145+
DOWNLOAD_URL=$1
146+
else
147+
test_dir $1; DRILL_ARTIFACT_DIR=$1
148+
fi
149+
;;
150+
esac
151+
shift
152+
done
153+
154+
#
155+
# Download files if requested
156+
#
157+
if [ "$DOWNLOAD_URL" != "" ]; then
158+
download_files ${DOWNLOAD_URL} ${DRILL_ARTIFACT_DIR}
159+
fi
59160

60161
#
61162
# Begin validation
62163
#
63-
ARTIFACT_COUNT=0
64-
pushd $DRILL_ARTIFACT_DIR &> /dev/null
65164
shopt -s nullglob
66-
for ARTIFACT in ${DRILL_ARTIFACTS} ; do
67-
MSG="Verifying artifact \"$ARTIFACT\"."
68-
info_msg ${MSG}
69-
info_msg $(eval printf "=%.0s" {1..${#MSG}})
70-
71-
debug_msg Verifying signature...
72-
SIGNATURE_FILE=${ARTIFACT}.${DRILL_SIGNATURE_EXTENSION}
73-
if ! [ -f ${SIGNATURE_FILE} ] ; then error_exit "Signature file '${SIGNATURE_FILE}' was not found"; fi
74-
if gpg --verify ${SIGNATURE_FILE} ; then
75-
debug_msg "Signature verified (${SIGNATURE_FILE})."
76-
else
77-
error_exit "Signature verification failed for '${ARTIFACT}'!"
78-
fi
79-
echo
80-
81-
debug_msg Verifying checksums...
82-
for ALGO in $DRILL_CHECKUM_ALOGRITHMS ; do
83-
CHECKSUM_FILE=${ARTIFACT}.${ALGO}
84-
if ! [ -f ${CHECKSUM_FILE} ] ; then error_exit "Checksum file '${CHECKSUM_FILE}' was not found"; fi
85-
COMPUTED_SUM=`${ALGO}sum ${ARTIFACT} | awk '{print $1}'`
86-
FILE_SUM=`cat ${CHECKSUM_FILE}`
87-
if [ "${FILE_SUM}" == "${COMPUTED_SUM}" ] ; then
88-
debug_msg "Verified ${ALGO} checksum (${CHECKSUM_FILE})."
89-
else
90-
error_exit "Computed ${ALGO} checksum did not match the one in '${CHECKSUM_FILE}'"
91-
fi
92-
done
93-
debug_msg "Checksums verified.\n"
94-
ARTIFACT_COUNT=$(($ARTIFACT_COUNT+1))
95-
done
165+
verify_directory ${DRILL_ARTIFACT_DIR}
166+
info_msg ""
96167

97168
# All GOOD
98-
if [ "$ARTIFACT_COUNT" == "0" ] ; then
169+
if [ "$DOWNLOAD_URL" != "" ]; then
170+
info_msg "Files downloaded to '${DRILL_ARTIFACT_DIR}'"
171+
fi
172+
173+
if [ "$ARTIFACT_COUNT" == "0" ]; then
99174
error_exit "No artifact found in '$DRILL_ARTIFACT_DIR'"
100175
else
101176
echo -e $SUCCESS"All verifications passed on ${ARTIFACT_COUNT} artifacts."$RESET
102177
fi
103-
popd &> /dev/null

0 commit comments

Comments
 (0)