23
23
24
24
DRILL_CHECKUM_ALOGRITHMS=" sha1 md5"
25
25
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 "
28
28
DRILL_ARTIFACT_DIR=.
29
29
30
+ TERSE=false
31
+ CMD_REDIRECT=" /dev/stdout"
32
+ DOWNLOAD_URL=
33
+ ARTIFACT_COUNT=0
34
+
30
35
ERROR=' \e[0;31m'
31
36
SUCCESS=' \e[0;32m'
32
37
DEBUG=' \e[1;30m'
@@ -36,68 +41,137 @@ RESET='\e[0m'
36
41
#
37
42
# Helper methods
38
43
#
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
+ }
42
126
43
127
#
44
- # Check the command line argument
128
+ # Parse the command line arguments
45
129
#
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
54
142
;;
55
143
* )
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
59
160
60
161
#
61
162
# Begin validation
62
163
#
63
- ARTIFACT_COUNT=0
64
- pushd $DRILL_ARTIFACT_DIR & > /dev/null
65
164
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 " "
96
167
97
168
# 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
99
174
error_exit " No artifact found in '$DRILL_ARTIFACT_DIR '"
100
175
else
101
176
echo -e $SUCCESS " All verifications passed on ${ARTIFACT_COUNT} artifacts." $RESET
102
177
fi
103
- popd & > /dev/null
0 commit comments