1esc=$(printf '\e') 2cr=$(printf '\r') 3 4if [ -n "${GITLAB_CI:-}" ]; then 5 ci=gitlab 6 eol= 7 link_start="${esc}[33m" 8 link_end="${esc}[m" 9elif [ -n "${GITHUB_ACTION:-}" ]; then 10 ci=github 11 eol="\\" 12 link_start= 13 link_end= 14elif [ -n "${JENKINS_HOME:-}" ]; then 15 ci=jenkins 16 eol="<br/>" 17 link_start= 18 link_end= 19else 20 echo "Unexpected CI/CD context" >&2 21 exit 1 22fi 23 24open_section() { 25 id=$1 26 title=$2 27 collapsed=$3 28 echo "${esc}[0Ksection_start:$(date +%s):${id}${collapsed}${cr}${esc}[0K${esc}[1m${esc}[36m${title}${esc}[m" 29} 30 31close_section() { 32 id=$1 33 echo "${esc}[0Ksection_end:$(date +%s):${id}${cr}${esc}[0K" 34} 35 36summary() { 37 fixedReports= 38 newReports= 39 unfixedReports= 40 while read -r line; do 41 var=${line%%: *} 42 val=${line#*: } 43 eval "${var}=${val}" 44 done <"${updateLog}" 45 46 case "${ci}" in 47 github) 48 eol="\\" 49 ;; 50 gitlab) 51 eol= 52 ;; 53 jenkins) 54 eol="<br/>" 55 ;; 56 *) 57 eol= 58 ;; 59 esac 60 61 currentDbReportsUrl="${eclairReportUrlPrefix}/fs${jobDir}/PROJECT.ecd;/by_service.html#service&kind" 62 if [ -z "${newReports}" ]; then 63 fixedMsg="No fixed reports as there is no baseline" 64 unfixedMsg="Unfixed reports: ${unfixedReports}" 65 referenceReportsMsgTxt= 66 referenceReportsMsgLog= 67 else 68 fixedMsg="Fixed reports: ${fixedReports}" 69 unfixedMsg="Unfixed reports: ${unfixedReports} [new: ${newReports}]" 70 case "${event}" in 71 pull_request | auto_pull_request) 72 referenceDbReportsUrl="${eclairReportUrlPrefix}/fs${jobDir}/base/PROJECT.ecd;/by_service.html#service&kind" 73 reference_kind=base 74 ;; 75 push) 76 referenceDbReportsUrl="${eclairReportUrlPrefix}/fs${jobDir}/prev/PROJECT.ecd;/by_service.html#service&kind" 77 reference_kind=previous 78 ;; 79 *) 80 echo "Unexpected event ${event}" >&2 81 exit 1 82 ;; 83 esac 84 fi 85 86 case "${ci}" in 87 jenkins) 88 if [ -n "${newReports}" ]; then 89 referenceReportsMsgTxt="<a href="${referenceDbReportsUrl}">Browse ${reference_kind} reports</a>" 90 fi 91 cat <<EOF >"${summaryTxt}" 92${fixedMsg}${eol} 93${unfixedMsg} ${eol} 94<a href="https://www.bugseng.com/eclair"> 95 <img src="${eclairReportUrlPrefix}/rsrc/eclair.svg" width="100" /> 96</a> 97<h3>${jobHeadline}</h3> 98<a href="${indexHtmlUrl}">Browse analysis summary</a> 99<a href="${currentDbReportsUrl}">Browse current reports</a> 100${referenceReportsMsgTxt} 101EOF 102 ;; 103 *) 104 if [ -n "${newReports}" ]; then 105 referenceReportsMsgTxt="Browse ${reference_kind} reports: ${referenceDbReportsUrl}" 106 fi 107 cat <<EOF >"${summaryTxt}" 108<a href="https://www.bugseng.com/eclair"> 109 <img src="${eclairReportUrlPrefix}/rsrc/eclair.svg" width="100" /> 110</a> 111Analysis Summary 112 113${jobHeadline}${eol} 114${fixedMsg}${eol} 115${unfixedMsg}${eol} 116Browse analysis summary: ${indexHtmlUrl} 117Browse current reports: ${currentDbReportsUrl} 118${referenceReportsMsgTxt} 119EOF 120 ;; 121 esac 122 123 analysisSummaryMsgLog="Browse analysis summary: ${link_start}${indexHtmlUrl}${link_end}" 124 currentReportsMsgLog="Browse current reports: ${link_start}${currentDbReportsUrl}${link_end}" 125 if [ -n "${newReports}" ]; then 126 referenceReportsMsgLog="Browse ${reference_kind} reports: ${link_start}${referenceDbReportsUrl}${link_end}" 127 fi 128 case ${ci} in 129 github) 130 cat "${summaryTxt}" "${cleanRegressionsLog}" >"${GITHUB_STEP_SUMMARY}" 131 ;; 132 gitlab) 133 open_section ECLAIR_summary "ECLAIR analysis summary" "" 134 # Generate summary and print it (GitLab-specific) 135 cat <<EOF 136${jobHeadline} 137${fixedMsg} 138${unfixedMsg} 139${analysisSummaryMsgLog} 140${currentReportsMsgLog} 141${referenceReportsMsgLog} 142EOF 143 cat ${cleanRegressionsLog} 144 close_section ECLAIR_summary 145 ;; 146 jenkins) 147 cat <<EOF 148${jobHeadline} 149${fixedMsg} 150${unfixedMsg} 151${analysisSummaryMsgLog} 152${currentReportsMsgLog} 153${referenceReportsMsgLog} 154EOF 155 ;; 156 *) 157 echo "Unexpected CI/CD context" >&2 158 exit 1 159 ;; 160 esac 161} 162 163log_file() { 164 section_id=$1 165 section_name=$2 166 file=$3 167 exit_code=$4 168 if [ "${exit_code}" = 0 ]; then 169 collapsed=[collapsed=true] 170 else 171 collapsed= 172 fi 173 174 case ${ci} in 175 github | jenkins) 176 echo "${section_name}" 177 ;; 178 gitlab) 179 open_section "${section_id}" "${section_name}" "${collapsed}" 180 ;; 181 *) 182 echo "Unexpected CI/CD context" >&2 183 exit 1 184 ;; 185 esac 186 187 cat "${file}" 188 189 case ${ci} in 190 github | jenkins) ;; 191 gitlab) 192 close_section "${section_id}" 193 ;; 194 *) ;; 195 esac 196} 197 198maybe_log_file_exit() { 199 section_id=$1 200 section_name=$2 201 file=$3 202 exit_code=$4 203 204 case ${ci} in 205 github | jenkins) 206 echo "${section_name}" 207 ;; 208 gitlab) 209 open_section "${section_id}" "${section_name}" "" 210 ;; 211 *) 212 echo "Unexpected CI/CD context" >&2 213 exit 1 214 ;; 215 esac 216 217 if [ "${exit_code}" != 0 ]; then 218 cat "${file}" 219 fi 220 221 case ${ci} in 222 github | jenkins) ;; 223 gitlab) 224 close_section "${section_id}" 225 ;; 226 *) ;; 227 esac 228 return "${exit_code}" 229} 230 231is_enabled() { 232 case "$1" in 233 true | TRUE | y | Y | yes | YES | 1) 234 return 0 235 ;; 236 *) 237 return 1 238 ;; 239 esac 240} 241