@@ -130,6 +130,17 @@ jobs:
130130 EXP_LABEL=$( [ "$EXP" = "true" ] && echo "EXP" || echo "Non-EXP" )
131131 echo "CONFIG_LABEL=${WAF_LABEL} + ${EXP_LABEL}" >> $GITHUB_OUTPUT
132132
133+ - name : Prepare HTML Escape Helper
134+ shell : bash
135+ run : |
136+ HTML_ESCAPE_HELPER="$RUNNER_TEMP/html_escape_helper.sh"
137+ cat > "$HTML_ESCAPE_HELPER" <<'EOF'
138+ html_escape() {
139+ printf '%s' "$1" | sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' -e 's/"/\"/g' -e "s/'/\'/g"
140+ }
141+ EOF
142+ echo "HTML_ESCAPE_HELPER=$HTML_ESCAPE_HELPER" >> "$GITHUB_ENV"
143+
133144 # ------------------------------------------------------------------
134145 # Quota failure
135146 # ------------------------------------------------------------------
@@ -144,7 +155,10 @@ jobs:
144155 CLEANUP_PILL : ${{ steps.cleanup.outputs.CLEANUP_PILL }}
145156 CONFIG_LABEL : ${{ steps.config.outputs.CONFIG_LABEL }}
146157 run : |
158+ . "$HTML_ESCAPE_HELPER"
147159 RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
160+ ACTOR="$(html_escape "$GITHUB_ACTOR")"
161+ BRANCH="$(html_escape "$BRANCH_NAME")"
148162 PILL_BASE="display:inline-block; min-width:70px; text-align:center; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:600; line-height:1.4;"
149163 DEPLOY_PILL="<span style=\"${PILL_BASE} background:#f8d7da; color:#721c24;\">❌ FAILED</span>"
150164 E2E_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">⏭️ SKIPPED</span>"
@@ -178,9 +192,9 @@ jobs:
178192 <h3 style="margin:0 0 14px; font-size:13px; text-transform:uppercase; letter-spacing:0.5px; color:#6b7280; border-bottom:2px solid #e5e7eb; padding-bottom:8px;">Deployment Details</h3>
179193 <table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:28px;">
180194 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280; width:140px;">Triggered By</td>
181- <td style="padding:8px 0; font-size:13px; color:#111827;">${{ github.actor } }</td></tr>
195+ <td style="padding:8px 0; font-size:13px; color:#111827;">${ACTOR }</td></tr>
182196 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Branch</td>
183- <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${{ env.BRANCH_NAME } }</td></tr>
197+ <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${BRANCH }</td></tr>
184198 </table>
185199 <table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr><td align="center" style="padding:8px 0;">
186200 <a href="${RUN_URL}" style="display:inline-block; background:#dc2626; color:#ffffff; text-decoration:none; padding:12px 28px; border-radius:4px; font-size:13px; font-weight:600; letter-spacing:0.3px;">VIEW PIPELINE RUN</a>
@@ -219,8 +233,11 @@ jobs:
219233 CONFIG_LABEL : ${{ steps.config.outputs.CONFIG_LABEL }}
220234 CLEANUP_PILL : ${{ steps.cleanup.outputs.CLEANUP_PILL }}
221235 run : |
236+ . "$HTML_ESCAPE_HELPER"
222237 RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
223- RESOURCE_GROUP="$INPUT_RESOURCE_GROUP_NAME"
238+ RESOURCE_GROUP="$(html_escape "$INPUT_RESOURCE_GROUP_NAME")"
239+ ACTOR="$(html_escape "$GITHUB_ACTOR")"
240+ BRANCH="$(html_escape "$BRANCH_NAME")"
224241 PILL_BASE="display:inline-block; min-width:70px; text-align:center; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:600; line-height:1.4;"
225242 DEPLOY_PILL="<span style=\"${PILL_BASE} background:#f8d7da; color:#721c24;\">❌ FAILED</span>"
226243 E2E_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">⏭️ SKIPPED</span>"
@@ -256,9 +273,9 @@ jobs:
256273 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280; width:140px;">Resource Group</td>
257274 <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${RESOURCE_GROUP}</td></tr>
258275 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Triggered By</td>
259- <td style="padding:8px 0; font-size:13px; color:#111827;">${{ github.actor } }</td></tr>
276+ <td style="padding:8px 0; font-size:13px; color:#111827;">${ACTOR }</td></tr>
260277 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Branch</td>
261- <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${{ env.BRANCH_NAME } }</td></tr>
278+ <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${BRANCH }</td></tr>
262279 </table>
263280 <table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr><td align="center" style="padding:8px 0;">
264281 <a href="${RUN_URL}" style="display:inline-block; background:#dc2626; color:#ffffff; text-decoration:none; padding:12px 28px; border-radius:4px; font-size:13px; font-weight:600; letter-spacing:0.3px;">INVESTIGATE FAILURE</a>
@@ -302,14 +319,13 @@ jobs:
302319 CLEANUP_PILL : ${{ steps.cleanup.outputs.CLEANUP_PILL }}
303320 TEST_SUITE_NAME : ${{ steps.test_suite.outputs.TEST_SUITE_NAME }}
304321 run : |
305- # HTML-escape values that get embedded into the email template to avoid HTML/attribute injection from workflow inputs.
306- html_escape() {
307- printf '%s' "$1" | sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' -e 's/"/\"/g' -e "s/'/\'/g"
308- }
322+ . "$HTML_ESCAPE_HELPER"
309323 RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
310324 WEBAPP_URL="$(html_escape "${INPUT_CONTAINER_WEB_APPURL:-$INPUT_EXISTING_WEBAPP_URL}")"
311325 RESOURCE_GROUP="$(html_escape "$INPUT_RESOURCE_GROUP_NAME")"
312326 TEST_REPORT_URL="$(html_escape "$INPUT_TEST_REPORT_URL")"
327+ ACTOR="$(html_escape "$GITHUB_ACTOR")"
328+ BRANCH="$(html_escape "$BRANCH_NAME")"
313329 PILL_BASE="display:inline-block; min-width:70px; text-align:center; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:600; line-height:1.4;"
314330 DEPLOY_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">✅ SUCCESS</span>"
315331
@@ -353,9 +369,9 @@ jobs:
353369 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Web App URL</td>
354370 <td style="padding:8px 0; font-size:13px;"><a href="${WEBAPP_URL}" style="color:#2563eb; text-decoration:none; font-family:'Cascadia Code','Courier New',monospace;">${WEBAPP_URL}</a></td></tr>
355371 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Triggered By</td>
356- <td style="padding:8px 0; font-size:13px; color:#111827;">${{ github.actor } }</td></tr>
372+ <td style="padding:8px 0; font-size:13px; color:#111827;">${ACTOR }</td></tr>
357373 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Branch</td>
358- <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${{ env.BRANCH_NAME } }</td></tr>
374+ <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${BRANCH }</td></tr>
359375 ${TEST_DETAIL_ROWS}
360376 </table>
361377 <table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr><td align="center" style="padding:8px 0;">
@@ -399,14 +415,13 @@ jobs:
399415 CONFIG_LABEL : ${{ steps.config.outputs.CONFIG_LABEL }}
400416 TEST_SUITE_NAME : ${{ steps.test_suite.outputs.TEST_SUITE_NAME }}
401417 run : |
402- # HTML-escape values that get embedded into the email template to avoid HTML/attribute injection from workflow inputs.
403- html_escape() {
404- printf '%s' "$1" | sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' -e 's/"/\"/g' -e "s/'/\'/g"
405- }
418+ . "$HTML_ESCAPE_HELPER"
406419 RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
407420 WEBAPP_URL="$(html_escape "${INPUT_CONTAINER_WEB_APPURL:-$INPUT_EXISTING_WEBAPP_URL}")"
408421 RESOURCE_GROUP="$(html_escape "$INPUT_RESOURCE_GROUP_NAME")"
409422 TEST_REPORT_URL="$(html_escape "$INPUT_TEST_REPORT_URL")"
423+ ACTOR="$(html_escape "$GITHUB_ACTOR")"
424+ BRANCH="$(html_escape "$BRANCH_NAME")"
410425 PILL_BASE="display:inline-block; min-width:70px; text-align:center; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:600; line-height:1.4;"
411426 DEPLOY_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">✅ SUCCESS</span>"
412427 E2E_PILL="<span style=\"${PILL_BASE} background:#f8d7da; color:#721c24;\">❌ FAILED</span>"
@@ -441,9 +456,9 @@ jobs:
441456 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Web App URL</td>
442457 <td style="padding:8px 0; font-size:13px;"><a href="${WEBAPP_URL}" style="color:#2563eb; text-decoration:none; font-family:'Cascadia Code','Courier New',monospace;">${WEBAPP_URL}</a></td></tr>
443458 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Triggered By</td>
444- <td style="padding:8px 0; font-size:13px; color:#111827;">${{ github.actor } }</td></tr>
459+ <td style="padding:8px 0; font-size:13px; color:#111827;">${ACTOR }</td></tr>
445460 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Branch</td>
446- <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${{ env.BRANCH_NAME } }</td></tr>
461+ <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${BRANCH }</td></tr>
447462 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Test Suite</td>
448463 <td style="padding:8px 0; font-size:13px; color:#111827;">${TEST_SUITE_NAME}</td></tr>
449464 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Test Report</td>
@@ -488,13 +503,12 @@ jobs:
488503 CONFIG_LABEL : ${{ steps.config.outputs.CONFIG_LABEL }}
489504 TEST_SUITE_NAME : ${{ steps.test_suite.outputs.TEST_SUITE_NAME }}
490505 run : |
491- # HTML-escape values that get embedded into the email template to avoid HTML/attribute injection from workflow inputs.
492- html_escape() {
493- printf '%s' "$1" | sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' -e 's/"/\"/g' -e "s/'/\'/g"
494- }
506+ . "$HTML_ESCAPE_HELPER"
495507 RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
496508 EXISTING_URL="$(html_escape "$INPUT_EXISTING_WEBAPP_URL")"
497509 TEST_REPORT_URL="$(html_escape "$INPUT_TEST_REPORT_URL")"
510+ ACTOR="$(html_escape "$GITHUB_ACTOR")"
511+ BRANCH="$(html_escape "$BRANCH_NAME")"
498512 PILL_BASE="display:inline-block; min-width:70px; text-align:center; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:600; line-height:1.4;"
499513 DEPLOY_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">⏭️ SKIPPED</span>"
500514 E2E_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">✅ SUCCESS</span>"
@@ -532,9 +546,9 @@ jobs:
532546 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280; width:140px;">Target URL</td>
533547 <td style="padding:8px 0; font-size:13px;"><a href="${EXISTING_URL}" style="color:#2563eb; text-decoration:none; font-family:'Cascadia Code','Courier New',monospace;">${EXISTING_URL}</a></td></tr>
534548 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Triggered By</td>
535- <td style="padding:8px 0; font-size:13px; color:#111827;">${{ github.actor } }</td></tr>
549+ <td style="padding:8px 0; font-size:13px; color:#111827;">${ACTOR }</td></tr>
536550 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Branch</td>
537- <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${{ env.BRANCH_NAME } }</td></tr>
551+ <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${BRANCH }</td></tr>
538552 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Test Suite</td>
539553 <td style="padding:8px 0; font-size:13px; color:#111827;">${TEST_SUITE_NAME}</td></tr>
540554 ${REPORT_ROW}
@@ -578,13 +592,12 @@ jobs:
578592 CONFIG_LABEL : ${{ steps.config.outputs.CONFIG_LABEL }}
579593 TEST_SUITE_NAME : ${{ steps.test_suite.outputs.TEST_SUITE_NAME }}
580594 run : |
581- # HTML-escape values that get embedded into the email template to avoid HTML/attribute injection from workflow inputs.
582- html_escape() {
583- printf '%s' "$1" | sed -e 's/&/\&/g' -e 's/</\</g' -e 's/>/\>/g' -e 's/"/\"/g' -e "s/'/\'/g"
584- }
595+ . "$HTML_ESCAPE_HELPER"
585596 RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
586597 EXISTING_URL="$(html_escape "$INPUT_EXISTING_WEBAPP_URL")"
587598 TEST_REPORT_URL="$(html_escape "$INPUT_TEST_REPORT_URL")"
599+ ACTOR="$(html_escape "$GITHUB_ACTOR")"
600+ BRANCH="$(html_escape "$BRANCH_NAME")"
588601 PILL_BASE="display:inline-block; min-width:70px; text-align:center; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:600; line-height:1.4;"
589602 DEPLOY_PILL="<span style=\"${PILL_BASE} background:#d4edda; color:#155724;\">⏭️ SKIPPED</span>"
590603 E2E_PILL="<span style=\"${PILL_BASE} background:#f8d7da; color:#721c24;\">❌ FAILED</span>"
@@ -622,9 +635,9 @@ jobs:
622635 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280; width:140px;">Target URL</td>
623636 <td style="padding:8px 0; font-size:13px;"><a href="${EXISTING_URL}" style="color:#2563eb; text-decoration:none; font-family:'Cascadia Code','Courier New',monospace;">${EXISTING_URL}</a></td></tr>
624637 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Triggered By</td>
625- <td style="padding:8px 0; font-size:13px; color:#111827;">${{ github.actor } }</td></tr>
638+ <td style="padding:8px 0; font-size:13px; color:#111827;">${ACTOR }</td></tr>
626639 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Branch</td>
627- <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${{ env.BRANCH_NAME } }</td></tr>
640+ <td style="padding:8px 0; font-size:13px; color:#111827; font-family:'Cascadia Code','Courier New',monospace;">${BRANCH }</td></tr>
628641 <tr><td style="padding:8px 0; font-size:13px; color:#6b7280;">Test Suite</td>
629642 <td style="padding:8px 0; font-size:13px; color:#111827;">${TEST_SUITE_NAME}</td></tr>
630643 ${REPORT_ROW}
0 commit comments