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 done 56 57 # check severity 58 if [ "${SEVERITY}" != "${SVT_CRITIAL}" -a "${SEVERITY}" != "${SVT_IMPORTANT}" -a "${SEVERITY}" != "${SVT_MODERATE}" ]; then 59 echo "ERROR: ${DOC}: Unknown main severity: ${SEVERITY}" 60 exit 1 61 fi 62 63 # check horizontal line 64 if [ -z "${HORIZONTAL_LINE}" ]; then 65 echo "ERROR: ${DOC}: No horizontal line '------' at the last" 66 exit 1 67 fi 68 69 # check 'Fixed' content 70 if grep -q "^+### Fixed" ${DIFF_DOC_ALL} ; then 71 awk -v RS='### Fixed' 'END{printf "%s", $0}' ${DIFF_DOC_ALL} > ${DIFF_DOC_FIXED} 72 sed -i "/^$/d" ${DIFF_DOC_FIXED} 73 sed -i "/Index/d" ${DIFF_DOC_FIXED} 74 sed -i "/---/d" ${DIFF_DOC_FIXED} 75 sed -i "/^+$/d" ${DIFF_DOC_FIXED} 76 77 while read LINE 78 do 79 EACH_SEVERITY=`echo "${LINE}" | awk -F "|" '{ print $3 }' | tr -d " "` 80 if [ "${EACH_SEVERITY}" != "${SVT_CRITIAL}" -a "${EACH_SEVERITY}" != "${SVT_IMPORTANT}" -a "${EACH_SEVERITY}" != "${SVT_MODERATE}" ]; then 81 echo "ERROR: ${DOC}: Unknown severity: ${EACH_SEVERITY}" 82 exit 1 83 fi 84 85 # echo "## EACH: $EACH_SEVERITY" 86 if [ -z "${TOP_SEVERITY}" ]; then 87 TOP_SEVERITY="${EACH_SEVERITY}" 88 elif [ "${TOP_SEVERITY}" == "${SVT_MODERATE}" ]; then 89 if [ "${EACH_SEVERITY}" == "${SVT_CRITIAL}" -o "${EACH_SEVERITY}" == "${SVT_IMPORTANT}" ]; then 90 TOP_SEVERITY="${EACH_SEVERITY}" 91 fi 92 elif [ "${TOP_SEVERITY}" == "${SVT_IMPORTANT}" ]; then 93 if [ "${EACH_SEVERITY}" == "${SVT_CRITIAL}" ]; then 94 TOP_SEVERITY="${EACH_SEVERITY}" 95 fi 96 fi 97 done < ${DIFF_DOC_FIXED} 98 99 if [ "${SEVERITY}" != "${TOP_SEVERITY}" ]; then 100 echo "ERROR: ${DOC}: Main severity should be '${TOP_SEVERITY}'" 101 exit 1 102 fi 103 fi 104} 105 106function check_docs() 107{ 108 if git log -1 --name-only | grep -Eq '.bin|.elf' ; then 109 DOC_CN=`git log -1 --name-only | sed -n "/_CN\.md/p"` 110 DOC_EN=`git log -1 --name-only | sed -n "/_EN\.md/p"` 111 if [ -z "${DOC_CN}" -o -z "${DOC_EN}" ]; then 112 echo "ERROR: Update CN/EN Release-Note when .bin or .elf changes" 113 exit 1 114 fi 115 check_doc CN 116 check_doc EN 117 fi 118} 119 120function pack_loader_image() 121{ 122 for FILE in `ls ./RKBOOT/*MINIALL*.ini` 123 do 124 if [ "${FILE}" = "./RKBOOT/RK302AMINIALL.ini" -o \ 125 "${FILE}" = "./RKBOOT/RK30BMINIALL.ini" -o \ 126 "${FILE}" = "./RKBOOT/RK30MINIALL.ini" -o \ 127 "${FILE}" = "./RKBOOT/RK310BMINIALL.ini" ]; then 128 continue; 129 fi 130 131 if grep -q '^PATH=img/' ${FILE}; then 132 continue; 133 fi 134 135 echo "Pack loader: ${FILE}" 136 ./tools/boot_merger ${FILE} 137 rm -f *loader*.bin *download*.bin *idblock*.img 138 echo 139 done 140} 141 142function pack_trust_image() 143{ 144 # Pack 32-bit trust 145 for FILE in `ls ./RKTRUST/*TOS*.ini` 146 do 147 if ! test -s ${FILE}; then 148 continue; 149 elif ! grep -q 'TOS' ${FILE}; then 150 continue; 151 elif grep -q '^PATH=img/' ${FILE}; then 152 continue; 153 fi 154 155 echo "Pack trust: ${FILE}" 156 # Parse orignal path 157 TOS=`sed -n "/TOS=/s/TOS=//p" ${FILE}|tr -d '\r'` 158 TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${FILE}|tr -d '\r'` 159 160 # replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch 161 TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g") 162 TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g") 163 164 if [ x${TOS_TA} != x -a x${TOS} != x ]; then 165 ./tools/loaderimage --pack --trustos ${TOS} ./trust.img 0x68400000 166 ./tools/loaderimage --pack --trustos ${TOS_TA} ./trust_with_ta.img 0x68400000 167 elif [ ${TOS} ]; then 168 ./tools/loaderimage --pack --trustos ${TOS} ./trust.img 0x68400000 169 elif [ ${TOS_TA} ]; then 170 ./tools/loaderimage --pack --trustos ${TOS_TA} ./trust.img 0x68400000 171 else 172 exit 1 173 fi 174 rm -f trust*.img 175 echo 176 done 177 178 # Pack 64-bit trust 179 for FILE in `ls ./RKTRUST/*TRUST*.ini` 180 do 181 if grep -q '^PATH=img/' ${FILE}; then 182 continue; 183 fi 184 185 echo "Pack trust: ${FILE}" 186 ./tools/trust_merger ${FILE} 187 rm -f trust*.img 188 echo 189 done 190} 191 192function check_dirty() 193{ 194 for FILE in `find -name '*spl*.bin' -o -name '*tpl*.bin' -o -name '*usbplug*.bin' -o -name '*bl31*.elf' -o -name '*bl32*.bin'`; do 195 echo "Checking clean: ${FILE}" 196 if strings ${FILE} | grep '\-dirty ' ; then 197 echo "ERROR: ${FILE} is dirty" 198 exit 1 199 fi 200 done 201} 202 203function check_stripped() 204{ 205 for FILE in `find -name '*bl31*.elf'`; do 206 echo "Checking strip: ${FILE}" 207 INFO=`file ${FILE}` 208 if echo ${INFO} | grep -q "not stripped" ; then 209 echo "ERROR: ${FILE} is not stripped" 210 exit 1 211 fi 212 done 213} 214 215function check_mode() 216{ 217 echo "Checking file mode..." 218 if git whatchanged -1 --oneline | sed -n '/RKBOOT\//p; /RKTRUST\//p; /bin\//p; /doc\//p;' | awk '{ print $2 }' | grep -q 755 ; then 219 git whatchanged -1 --oneline | sed -n '/RKBOOT\//p; /RKTRUST\//p; /bin\//p; /doc\//p;' | grep 755 220 echo "ERROR: Set 644 permission but not 755." 221 exit 1 222 fi 223} 224 225function finish() 226{ 227 rm -f ${DIFF_DOC_ALL} ${DIFF_DOC_FIXED} 228 echo "OK, everything is nice." 229 echo 230} 231 232check_mode 233check_docs 234check_dirty 235check_stripped 236pack_loader_image 237pack_trust_image 238finish 239