1#!/bin/bash 2set -e 3 4DIFF_SUBSET="scripts/.diff_*" 5DIFF_DOC_ALL="scripts/.diff_all.txt" 6DIFF_DOC_FIXED="scripts/.diff_fixed.txt" 7 8function check_doc() 9{ 10 local TOP_SEVERITY LANGUAGE=$1 11 12 if [ "${LANGUAGE}" == "EN" ] ; then 13 SVT_CRITIAL="critical" 14 SVT_IMPORTANT="important" 15 SVT_MODERATE="moderate" 16 DOC=`git log -1 --name-only | sed -n "/_EN\.md/p"` 17 else 18 SVT_CRITIAL="紧急" 19 SVT_IMPORTANT="重要" 20 SVT_MODERATE="普通" 21 DOC=`git log -1 --name-only | sed -n "/_CN\.md/p"` 22 fi 23 24 echo "Checking doc: ${DOC}" 25 26 # check DOS encoding 27 git show -1 ${DOC} | sed -n "/^+/p" > ${DIFF_DOC_ALL} 28 git show -1 ${DOC} | sed -n "/^+/p" > ${DIFF_DOC_ALL}.dos 29 dos2unix ${DIFF_DOC_ALL}.dos >/dev/null 2>&1 30 CSUM1=`md5sum ${DIFF_DOC_ALL} | awk '{ print $1 }'` 31 CSUM2=`md5sum ${DIFF_DOC_ALL}.dos | awk '{ print $1 }'` 32 if [ "${CSUM1}" != "${CSUM2}" ]; then 33 echo "ERROR: ${DOC} is DOS encoding. Fix it by: 'dos2unix ${DOC}'" 34 exit 1 35 fi 36 37 # check new content location 38 if ! grep -q 'Release Note' ${DIFF_DOC_ALL} ; then 39 echo "ERROR: ${DOC}: Adding new content at the beginning but not end" 40 exit 1 41 fi 42 43 TITLE=`sed -n "/^+## /p" ${DIFF_DOC_ALL} | tr -d " +#"` 44 FILE=`sed -n "/^+| 20[0-9][0-9]-/p" ${DIFF_DOC_ALL} | tr -d " " | awk -F "|" '{ print $3 }'` 45 COMMIT=`sed -n "/^+| 20[0-9][0-9]-/p" ${DIFF_DOC_ALL} | tr -d " " | awk -F "|" '{ print $4 }'` 46 SEVERITY=`sed -n "/^+| 20[0-9][0-9]-/p" ${DIFF_DOC_ALL} | tr -d " " | awk -F "|" '{ print $5 }'` 47 HORIZONTAL_LINE=`sed -n "/^+------$/p" ${DIFF_DOC_ALL}` 48 # echo "### ${COMMIT}, ${SEVERITY}, ${TITLE}, ${FILE}" 49 50 # check standalone file 51 if ! echo ${FILE} | grep -q { ; then 52 if ! git log -1 --name-only | grep -q ${FILE}; then 53 echo "ERROR: ${DOC}: '${FILE}' is not update in this patch" 54 exit 1 55 fi 56 fi 57 58 # check title 59 if [ "${TITLE}" != "${FILE}" ]; then 60 echo "ERROR: ${DOC}: Title '${TITLE}' is not match with '${FILE}'" 61 exit 1 62 fi 63 64 # check commit 65 COMMIT=${COMMIT//#/ } 66 for LIST in ${COMMIT}; do 67 CMT=`echo ${LIST} | cut -d : -f 2` 68 if ! git log -1 | grep -q ${CMT} ; then 69 echo "ERROR: ${DOC}: '${CMT}' is not match in commit message" 70 exit 1 71 fi 72 73 if ! echo ${FILE} | grep -q { ; then 74 if echo ${FILE} | grep -Eq 'spl_|tpl_|bl31_|bl32_|tee_' ; then 75 FILE_PATH=`find -name ${FILE}` 76 if ! strings ${FILE_PATH} | grep -q ${CMT} ; then 77 echo "ERROR: ${DOC}: ${FILE} is not build from '${CMT}'" 78 exit 1 79 fi 80 fi 81 fi 82 done 83 84 # check severity 85 if [ "${SEVERITY}" != "${SVT_CRITIAL}" -a "${SEVERITY}" != "${SVT_IMPORTANT}" -a "${SEVERITY}" != "${SVT_MODERATE}" ]; then 86 echo "ERROR: ${DOC}: Unknown main severity: ${SEVERITY}" 87 exit 1 88 fi 89 90 # check horizontal line 91 if [ -z "${HORIZONTAL_LINE}" ]; then 92 echo "ERROR: ${DOC}: No horizontal line '------' at the last" 93 exit 1 94 fi 95 96 # check 'Fixed' content 97 if grep -q "^+### Fixed" ${DIFF_DOC_ALL} ; then 98 awk -v RS='### Fixed' 'END{printf "%s", $0}' ${DIFF_DOC_ALL} > ${DIFF_DOC_FIXED} 99 sed -i "/^$/d" ${DIFF_DOC_FIXED} 100 sed -i "/Index/d" ${DIFF_DOC_FIXED} 101 sed -i "/---/d" ${DIFF_DOC_FIXED} 102 sed -i "/^+$/d" ${DIFF_DOC_FIXED} 103 104 while read LINE 105 do 106 EACH_SEVERITY=`echo "${LINE}" | awk -F "|" '{ print $3 }' | tr -d " "` 107 if [ "${EACH_SEVERITY}" != "${SVT_CRITIAL}" -a "${EACH_SEVERITY}" != "${SVT_IMPORTANT}" -a "${EACH_SEVERITY}" != "${SVT_MODERATE}" ]; then 108 echo "ERROR: ${DOC}: Unknown severity: ${EACH_SEVERITY}" 109 exit 1 110 fi 111 112 # echo "## EACH: $EACH_SEVERITY" 113 if [ -z "${TOP_SEVERITY}" ]; then 114 TOP_SEVERITY="${EACH_SEVERITY}" 115 elif [ "${TOP_SEVERITY}" == "${SVT_MODERATE}" ]; then 116 if [ "${EACH_SEVERITY}" == "${SVT_CRITIAL}" -o "${EACH_SEVERITY}" == "${SVT_IMPORTANT}" ]; then 117 TOP_SEVERITY="${EACH_SEVERITY}" 118 fi 119 elif [ "${TOP_SEVERITY}" == "${SVT_IMPORTANT}" ]; then 120 if [ "${EACH_SEVERITY}" == "${SVT_CRITIAL}" ]; then 121 TOP_SEVERITY="${EACH_SEVERITY}" 122 fi 123 fi 124 done < ${DIFF_DOC_FIXED} 125 126 if [ "${SEVERITY}" != "${TOP_SEVERITY}" ]; then 127 echo "ERROR: ${DOC}: Main severity should be '${TOP_SEVERITY}'" 128 exit 1 129 fi 130 fi 131} 132 133function check_docs() 134{ 135 if git log -1 --name-only | grep -Eq '\.bin|\.elf' ; then 136 DOC_CN=`git log -1 --name-only | sed -n "/_CN\.md/p"` 137 DOC_EN=`git log -1 --name-only | sed -n "/_EN\.md/p"` 138 if [ -z "${DOC_CN}" -o -z "${DOC_EN}" ]; then 139 echo "ERROR: Update CN/EN Release-Note when .bin or .elf changes" 140 exit 1 141 fi 142 check_doc CN 143 check_doc EN 144 fi 145 146 rm -f ${DIFF_SUBSET} 147} 148 149function pack_loader_image() 150{ 151 for FILE in `ls ./RKBOOT/*MINIALL*.ini` 152 do 153 if [ "${FILE}" = "./RKBOOT/RK302AMINIALL.ini" -o \ 154 "${FILE}" = "./RKBOOT/RK30BMINIALL.ini" -o \ 155 "${FILE}" = "./RKBOOT/RK30MINIALL.ini" -o \ 156 "${FILE}" = "./RKBOOT/RK310BMINIALL.ini" ]; then 157 continue; 158 fi 159 160 if grep -q '^PATH=img/' ${FILE}; then 161 continue; 162 fi 163 164 echo "Pack loader: ${FILE}" 165 ./tools/boot_merger ${FILE} 166 rm -f *loader*.bin *download*.bin *idblock*.img 167 echo 168 done 169} 170 171function pack_trust_image() 172{ 173 # Pack 32-bit trust 174 for FILE in `ls ./RKTRUST/*TOS*.ini` 175 do 176 if ! test -s ${FILE}; then 177 continue; 178 elif ! grep -q 'TOS' ${FILE}; then 179 continue; 180 elif grep -q '^PATH=img/' ${FILE}; then 181 continue; 182 fi 183 184 echo "Pack trust: ${FILE}" 185 # Parse orignal path 186 TOS=`sed -n "/TOS=/s/TOS=//p" ${FILE}|tr -d '\r'` 187 TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${FILE}|tr -d '\r'` 188 189 # replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch 190 TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g") 191 TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g") 192 193 if [ x${TOS_TA} != x -a x${TOS} != x ]; then 194 ./tools/loaderimage --pack --trustos ${TOS} ./trust.img 0x68400000 195 ./tools/loaderimage --pack --trustos ${TOS_TA} ./trust_with_ta.img 0x68400000 196 elif [ ${TOS} ]; then 197 ./tools/loaderimage --pack --trustos ${TOS} ./trust.img 0x68400000 198 elif [ ${TOS_TA} ]; then 199 ./tools/loaderimage --pack --trustos ${TOS_TA} ./trust.img 0x68400000 200 else 201 exit 1 202 fi 203 rm -f trust*.img 204 echo 205 done 206 207 # Pack 64-bit trust 208 for FILE in `ls ./RKTRUST/*TRUST*.ini` 209 do 210 if grep -q '^PATH=img/' ${FILE}; then 211 continue; 212 fi 213 214 echo "Pack trust: ${FILE}" 215 ./tools/trust_merger ${FILE} 216 rm -f trust*.img 217 echo 218 done 219} 220 221function check_dirty() 222{ 223 for FILE in `find -name '*spl*.bin' -o -name '*tpl*.bin' -o -name '*usbplug*.bin' -o -name '*bl31*.elf' -o -name '*bl32*.bin'`; do 224 echo "Checking clean: ${FILE}" 225 if strings ${FILE} | grep '\-dirty ' ; then 226 echo "ERROR: ${FILE} is dirty" 227 exit 1 228 fi 229 done 230} 231 232function check_stripped() 233{ 234 for FILE in `find -name '*bl31*.elf'`; do 235 echo "Checking strip: ${FILE}" 236 INFO=`file ${FILE}` 237 if echo ${INFO} | grep -q "not stripped" ; then 238 echo "ERROR: ${FILE} is not stripped" 239 exit 1 240 fi 241 done 242} 243 244function check_mode() 245{ 246 echo "Checking file mode..." 247 if git whatchanged -1 --oneline | sed -n '/RKBOOT\//p; /RKTRUST\//p; /bin\//p; /doc\//p;' | awk '{ print $2 }' | grep -q 755 ; then 248 git whatchanged -1 --oneline | sed -n '/RKBOOT\//p; /RKTRUST\//p; /bin\//p; /doc\//p;' | grep 755 249 echo "ERROR: Set 644 permission but not 755." 250 exit 1 251 fi 252} 253 254function finish() 255{ 256 echo "OK, everything is nice." 257 echo 258} 259 260check_mode 261check_docs 262check_dirty 263check_stripped 264pack_loader_image 265pack_trust_image 266finish 267