aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAditya Kishore <adi@apache.org>2016-03-14 15:15:38 -0700
committerAditya Kishore <adi@apache.org>2016-03-14 15:15:38 -0700
commit050ff9679d99b5cdacc86f5501802c3d2a6dd3e3 (patch)
tree46dd6a33c26394ad9b5e587c1795a693c3899247 /tools
parentdd4f03be93c7c804954b2f027f6a9071d5291b38 (diff)
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 #249.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/verify_release.sh176
1 files changed, 125 insertions, 51 deletions
diff --git a/tools/verify_release.sh b/tools/verify_release.sh
index eb50a318f..90b991d5e 100755
--- a/tools/verify_release.sh
+++ b/tools/verify_release.sh
@@ -23,10 +23,15 @@
DRILL_CHECKUM_ALOGRITHMS="sha1 md5"
DRILL_SIGNATURE_EXTENSION=asc
-DRILL_ARTIFACT_EXTENSION=tar.gz
-DRILL_ARTIFACTS=*.${DRILL_ARTIFACT_EXTENSION}
+DRILL_DOWNLOAD_EXTENSIONS="tar.gz,zip,xml,asc,jar,md5,pom,sha1"
+DRILL_ARTIFACTS="*.tar.gz *.zip *.pom *.jar"
DRILL_ARTIFACT_DIR=.
+TERSE=false
+CMD_REDIRECT="/dev/stdout"
+DOWNLOAD_URL=
+ARTIFACT_COUNT=0
+
ERROR='\e[0;31m'
SUCCESS='\e[0;32m'
DEBUG='\e[1;30m'
@@ -36,68 +41,137 @@ RESET='\e[0m'
#
# Helper methods
#
-error_exit() { echo -e $ERROR$@$RESET; popd &> /dev/null; exit 1; }
-info_msg () { echo -e $INFO$@$RESET; }
-debug_msg () { echo -e $DEBUG$@$RESET; }
+info_msg() { echo -e $INFO$@$RESET; }
+debug_msg() { if [ "$TERSE" == "false" ]; then echo -e $DEBUG$@$RESET; fi }
+error_msg() { echo -e $ERROR$@$RESET; }
+error_exit() { echo -e $ERROR$@$RESET; popd &> /dev/null; exit 1; }
+
+header_msg() {
+ MSG=$@
+ info_msg ${MSG}
+ if [ "$TERSE" == "false" ]; then
+ info_msg $(eval printf "=%.0s" {1..${#MSG}});
+ fi
+}
+
+test_dir() {
+ if [ ! -e $1 ]; then
+ mkdir -p $1
+ elif [ ! -d $1 ]; then
+ error_msg "The specified path '$1' is not a directory."
+ usage
+ fi
+}
+
+usage() {
+ echo -e "Usage:\n `basename $0` <path_of_drill_artifacts>\n `basename $0` <url_of_drill_artifacts> [path_of_download_directory]"
+ exit 1
+}
+
+download_files() {
+ if [[ $# == 2 ]]; then
+ test_dir $2
+ DRILL_ARTIFACT_DIR=$2
+ else
+ DRILL_ARTIFACT_DIR=`mktemp -d`
+ fi
+
+ info_msg "Downloading files from '$1' into '$DRILL_ARTIFACT_DIR'"
+ pushd ${DRILL_ARTIFACT_DIR} &> /dev/null
+ wget $1 -r -np -A ${DRILL_DOWNLOAD_EXTENSIONS} -l0 -e robots=off -nH -nv &> $CMD_REDIRECT
+ popd &> /dev/null
+}
+
+verify_directory() {
+ pushd $1 &> /dev/null
+
+ for ARTIFACT in ${DRILL_ARTIFACTS}; do
+ ARTIFACT_COUNT=$(($ARTIFACT_COUNT+1))
+ header_msg "Verifying artifact #$ARTIFACT_COUNT '$ARTIFACT' in $PWD"
+
+ debug_msg "Verifying signature..."
+ SIGNATURE_FILE=${ARTIFACT}.${DRILL_SIGNATURE_EXTENSION}
+ if ! [ -f ${SIGNATURE_FILE} ]; then error_exit "Signature file '${SIGNATURE_FILE}' was not found"; fi
+ if gpg --verify ${SIGNATURE_FILE} &> $CMD_REDIRECT; then
+ debug_msg "Signature verified (${SIGNATURE_FILE})."
+ else
+ error_exit "Signature verification failed for '${ARTIFACT}'!"
+ fi
+ debug_msg ""
+
+ debug_msg Verifying checksums...
+ for ALGO in $DRILL_CHECKUM_ALOGRITHMS; do
+ CHECKSUM_FILE=${ARTIFACT}.${ALGO}
+ if ! [ -f ${CHECKSUM_FILE} ]; then error_exit "Checksum file '${CHECKSUM_FILE}' was not found"; fi
+ COMPUTED_SUM=`${ALGO}sum ${ARTIFACT} | awk '{print $1}'`
+ FILE_SUM=`cat ${CHECKSUM_FILE}`
+ if [ "${FILE_SUM}" == "${COMPUTED_SUM}" ]; then
+ debug_msg "Verified ${ALGO} checksum (${CHECKSUM_FILE})."
+ else
+ error_exit "Computed ${ALGO} checksum did not match the one in '${CHECKSUM_FILE}'"
+ fi
+ done
+ debug_msg "Checksums verified.\n"
+ done
+
+ # recurse through the sub-directories
+ for SUB_DIR in *; do
+ if [ -d ${SUB_DIR} ]; then
+ verify_directory ${SUB_DIR}
+ fi
+ done
+
+ popd &> /dev/null
+}
#
-# Check the command line argument
+# Parse the command line arguments
#
-case $# in
- 0) ;;
- 1)
- if ! [ -d $1 ] ; then
- pushd . &> /dev/null
- error_exit "'$1' is not a directory."
- fi
- DRILL_ARTIFACT_DIR=$1
+if [ $# -eq 0 ]; then
+ usage
+fi
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -nv)
+ TERSE=true
+ CMD_REDIRECT="/dev/null"
+ ;;
+ -*)
+ echo "Unknown option '$1'."
+ usage
;;
*)
- echo "Usage: $0 <path_to_drill_artifacts>"
- exit 1
-esac
+ if [[ $1 == https://* ]] || [[ $1 == http://* ]] || [[ $1 == ftp://* ]]; then
+ DOWNLOAD_URL=$1
+ else
+ test_dir $1; DRILL_ARTIFACT_DIR=$1
+ fi
+ ;;
+ esac
+ shift
+done
+
+#
+# Download files if requested
+#
+if [ "$DOWNLOAD_URL" != "" ]; then
+ download_files ${DOWNLOAD_URL} ${DRILL_ARTIFACT_DIR}
+fi
#
# Begin validation
#
-ARTIFACT_COUNT=0
-pushd $DRILL_ARTIFACT_DIR &> /dev/null
shopt -s nullglob
-for ARTIFACT in ${DRILL_ARTIFACTS} ; do
- MSG="Verifying artifact \"$ARTIFACT\"."
- info_msg ${MSG}
- info_msg $(eval printf "=%.0s" {1..${#MSG}})
-
- debug_msg Verifying signature...
- SIGNATURE_FILE=${ARTIFACT}.${DRILL_SIGNATURE_EXTENSION}
- if ! [ -f ${SIGNATURE_FILE} ] ; then error_exit "Signature file '${SIGNATURE_FILE}' was not found"; fi
- if gpg --verify ${SIGNATURE_FILE} ; then
- debug_msg "Signature verified (${SIGNATURE_FILE})."
- else
- error_exit "Signature verification failed for '${ARTIFACT}'!"
- fi
- echo
-
- debug_msg Verifying checksums...
- for ALGO in $DRILL_CHECKUM_ALOGRITHMS ; do
- CHECKSUM_FILE=${ARTIFACT}.${ALGO}
- if ! [ -f ${CHECKSUM_FILE} ] ; then error_exit "Checksum file '${CHECKSUM_FILE}' was not found"; fi
- COMPUTED_SUM=`${ALGO}sum ${ARTIFACT} | awk '{print $1}'`
- FILE_SUM=`cat ${CHECKSUM_FILE}`
- if [ "${FILE_SUM}" == "${COMPUTED_SUM}" ] ; then
- debug_msg "Verified ${ALGO} checksum (${CHECKSUM_FILE})."
- else
- error_exit "Computed ${ALGO} checksum did not match the one in '${CHECKSUM_FILE}'"
- fi
- done
- debug_msg "Checksums verified.\n"
- ARTIFACT_COUNT=$(($ARTIFACT_COUNT+1))
-done
+verify_directory ${DRILL_ARTIFACT_DIR}
+info_msg ""
# All GOOD
-if [ "$ARTIFACT_COUNT" == "0" ] ; then
+if [ "$DOWNLOAD_URL" != "" ]; then
+ info_msg "Files downloaded to '${DRILL_ARTIFACT_DIR}'"
+fi
+
+if [ "$ARTIFACT_COUNT" == "0" ]; then
error_exit "No artifact found in '$DRILL_ARTIFACT_DIR'"
else
echo -e $SUCCESS"All verifications passed on ${ARTIFACT_COUNT} artifacts."$RESET
fi
-popd &> /dev/null \ No newline at end of file