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