Skip to content

upgraded the ginger execution report for mail to have a more modern design#4474

Merged
ravirk91 merged 6 commits into
masterfrom
BugFix/58029/AllignmentIssueInReport
Mar 31, 2026
Merged

upgraded the ginger execution report for mail to have a more modern design#4474
ravirk91 merged 6 commits into
masterfrom
BugFix/58029/AllignmentIssueInReport

Conversation

@omri1911

@omri1911 omri1911 commented Mar 29, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • Bug Fixes

    • Improved error message text wrapping in execution reports to prevent the error column from shrinking below a minimum width.
  • Style

    • Updated execution report email visuals: new color palette, refined header layout with a multi-color stripe, adjusted typography and spacing, removed inner shadows, and more consistent backgrounds.
    • Simplified the general details section and renamed its title to "RUNSET DETAILS" for clearer presentation.

@omri1911
omri1911 requested a review from ravirk91 March 29, 2026 20:55
@coderabbitai

coderabbitai Bot commented Mar 29, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

Updated email execution report templates and adjusted inline CSS for error-field rendering. Changes include color and layout refinements, header restructuring, section title renaming to "RUNSET DETAILS", removal of box-shadow usage, and a word-break/min-width tweak for error cells.

Changes

Cohort / File(s) Summary
Error Field Styling
Ginger/GingerCoreNET/Reports/GingerExecutionReport.cs
Changed inline HTML CSS for action-failure "Error" cell: word-break: break-allword-break: break-word and added min-width:200px to prevent column collapsing and adjust wrapping.
Email Template Updates
Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html, Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html
Refactored email HTML: updated global/background colors to #f2f5fa, replaced status colors with hex values, reworked header layout (black bar, direct cid:beat/cid:ginger images, added multicolored stripe), removed many HTML comments and box-shadow styling, consolidated execution details into {RunsetDetails_Content} and renamed section to "RUNSET DETAILS", adjusted paddings and typography.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • Maheshkale447

Poem

🐰 A nibble of pixels, a hop of delight,
Header bars black and a stripe shining bright,
Runset details tidy, no shadows to hide,
Errors now wrap with a comfy wide stride,
Hooray for reports that look snug and right! ✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description is completely missing. No content was provided by the author, failing to meet the required template structure with description, change type, and checklist items. Add a comprehensive description following the repository template, including a brief summary of changes, the type of change (Bug fix/New feature/Breaking change), and completion of all checklist items.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: upgrading the execution report design to be more modern, which aligns with the CSS styling, color scheme, and layout updates across multiple report files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch BugFix/58029/AllignmentIssueInReport

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html`:
- Around line 212-218: The email header template no longer uses the inline image
cid:customer, but the sender code in
RunSetActionHTMLReportSendEmailOperations.cs still calls GetLinkedResource(...,
"customer") (around lines 370-387), causing an unused embedded image to be
attached; remove that GetLinkedResource(...) call (or guard it behind a check
that the template contains cid:customer) so the customer linked resource is not
added when the HTML does not reference it, and ensure any related
Add/LinkedResource attach logic for "customer" is cleaned up accordingly.

In
`@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html`:
- Around line 259-261: The template emits a stray
<!--ExecutionStatisticsDetails_Start--> without a matching
<!--ExecutionStatisticsDetails_End-->, breaking the section logic used by
RunSetActionHTMLReportSendEmailOperations (the code around
RunSetActionHTMLReportSendEmailOperations.cs:544-562) and GingerExecutionReport
(methods around GingerExecutionReport.cs:318-356); restore a proper
ExecutionStatisticsDetails block or remove the start token: either insert the
full ExecutionStatisticsDetails markup including the closing
<!--ExecutionStatisticsDetails_End--> (matching the structure expected by the
Render/conditional removal logic in GingerExecutionReport and
RunSetActionHTMLReportSendEmailOperations) or remove the lone
<!--ExecutionStatisticsDetails_Start--> entirely so the start/end pair remains
consistent with the code that finds and replaces that block.
- Around line 309-317: The failures details table is inheriting the global
"table { table-layout: fixed !important }" rule and needs the same override used
in EmailExecutionReport.html; update the Linux template so the failures grid
table (identify by class "innerTable" and/or the surrounding GridTitleTd header)
explicitly sets "table-layout: auto !important" — add the override either as an
inline style on the <table class="innerTable"> or as a CSS rule scoped to that
selector in EmailExecutionReportOnLinux.html to prevent long cell values from
being squeezed or overflowing.
- Around line 211-214: The header table in EmailExecutionReportOnLinux.html has
mismatched <tr> tags (the row containing the cell with class
"HeaderwhiteTextColor" / text "Ginger Execution Report" opens a <tr> but does
not close it), so add the corresponding closing </tr> tags to restore
well-formed table rows for the inner header table; also add the missing HTML
comment marker <!--ExecutionStatisticsDetails_End--> immediately after the
execution statistics block to match the existing
<!--ExecutionStatisticsDetails_Start--> marker so
RunSetActionHTMLReportSendEmailOperations.cs and GingerExecutionReport.cs can
detect the section correctly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 35775676-54ed-440c-8263-75bd5ca02ee7

📥 Commits

Reviewing files that changed from the base of the PR and between 0ea14c4 and 36289f3.

⛔ Files ignored due to path filters (4)
  • Ginger/Ginger/Reports/GingerExecutionReport/assets/img/@BeatLogo.png is excluded by !**/*.png, !**/*.png
  • Ginger/Ginger/Reports/GingerExecutionReport/assets/img/@Ginger.png is excluded by !**/*.png, !**/*.png
  • Ginger/GingerCoreNET/Reports/GingerExecutionReport/assets/img/@BeatLogo.png is excluded by !**/*.png, !**/*.png
  • Ginger/GingerCoreNET/Reports/GingerExecutionReport/assets/img/@Ginger.png is excluded by !**/*.png, !**/*.png
📒 Files selected for processing (4)
  • Ginger/GingerCoreNET/Reports/GingerExecutionReport.cs
  • Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html
  • Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html
  • Ginger/GingerCoreNET/Run/RunSetActions/RunSetActionHTMLReportSendEmailOperations.cs

Comment on lines +212 to +218
<td style="width:25%;text-align:left;padding:10px 0 10px 15px;">
<img height="40" src="cid:beat" aria-hidden="true" alt="Ginger Logo" border="0" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #555555;">
</td>
<td style="width:50%;text-align:center" class="HeaderwhiteTextColor"><span>Ginger Execution Report</span></td>
<td cellspacing="20" style="width:50%; padding-right: 10px; text-align: right;" align="right"> <img height="40" align="right" src="cid:customer" aria-hidden="true" alt="alt_text" border="0" style="background: #fff; font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #555555;"></td>
<td style="width:25%;text-align:right;padding:10px 15px 10px 0;">
<img height="40" align="right" src="cid:ginger" aria-hidden="true" alt="Ginger" border="0" style="font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #555555;">
</td>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Update the mail builder after removing cid:customer.

This header no longer references cid:customer, but RunSetActionHTMLReportSendEmailOperations.cs:370-387 still adds GetLinkedResource(..., "customer"). Every mail will now carry an unused inline image unless that code path is cleaned up too.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html`
around lines 212 - 218, The email header template no longer uses the inline
image cid:customer, but the sender code in
RunSetActionHTMLReportSendEmailOperations.cs still calls GetLinkedResource(...,
"customer") (around lines 370-387), causing an unused embedded image to be
attached; remove that GetLinkedResource(...) call (or guard it behind a check
that the template contains cid:customer) so the customer linked resource is not
added when the HTML does not reference it, and ensure any related
Add/LinkedResource attach logic for "customer" is cleaned up accordingly.

Comment on lines 211 to 214
<tr>
<td style="width:33%;text-align:center" class="HeaderwhiteTextColor"><span>Ginger Execution Report</span></td>
<tr>
</table>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=$(fd -p 'EmailExecutionReportOnLinux.html' | head -n1)
nl -ba "$file" | sed -n '207,214p'

python - <<'PY'
from pathlib import Path
p = next(Path('.').rglob('EmailExecutionReportOnLinux.html'))
block = "\n".join(p.read_text(encoding="utf-8").splitlines()[206:214])
print("open <tr> =", block.count("<tr>"))
print("close </tr> =", block.count("</tr>"))
PY

Repository: Ginger-Automation/Ginger

Length of output: 110


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=$(fd -p 'EmailExecutionReportOnLinux.html' | head -n1)
echo "=== File location: $file ==="
echo "=== Lines 207-214 with line numbers ==="
cat -n "$file" | sed -n '207,214p'

echo ""
echo "=== Tag count check ==="
python3 - <<'PY'
from pathlib import Path
p = next(Path('.').rglob('EmailExecutionReportOnLinux.html'))
block = "\n".join(p.read_text(encoding="utf-8").splitlines()[206:214])
print("Block content:")
print(block)
print("")
print("open <tr> count =", block.count("<tr>"))
print("close </tr> count =", block.count("</tr>"))
PY

Repository: Ginger-Automation/Ginger

Length of output: 1675


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=$(fd -p 'EmailExecutionReportOnLinux.html' | head -n1)

echo "=== Lines 256-265 (statistics markers check) ==="
cat -n "$file" | sed -n '256,265p'

echo ""
echo "=== Lines 306-320 (failures table check) ==="
cat -n "$file" | sed -n '306,320p'

echo ""
echo "=== Check for ExecutionStatisticsDetails markers ==="
grep -n "ExecutionStatisticsDetails" "$file" || echo "No statistics markers found"

echo ""
echo "=== Check for table-layout in CSS ==="
grep -n "table-layout" "$file" | head -5

Repository: Ginger-Automation/Ginger

Length of output: 1892


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=$(fd -p 'EmailExecutionReportOnLinux.html' | head -n1)

echo "=== CSS context lines 35-45 ==="
cat -n "$file" | sed -n '35,45p'

echo ""
echo "=== Search for ExecutionStatisticsDetails_End ==="
grep -n "ExecutionStatisticsDetails_End" "$file" || echo "NOT FOUND - Missing end marker"

echo ""
echo "=== Check if there's content between Statistics_Start and BusinessFlows_Start ==="
sed -n '260,265p' "$file"

echo ""
echo "=== Failures table at line 317 - check for table-layout style ==="
sed -n '317p' "$file"

Repository: Ginger-Automation/Ginger

Length of output: 1219


Fix malformed header row with mismatched <tr> tags, and add missing statistics section end marker.

Line 213 opens a row where the first row should close. The inner header table has 3 opening <tr> tags and no closing </tr> tags, breaking HTML structure and causing inconsistent rendering across mail clients.

Additionally, line 260 declares <!--ExecutionStatisticsDetails_Start--> but the matching <!--ExecutionStatisticsDetails_End--> marker is missing from the file. This breaks the section boundary expected by RunSetActionHTMLReportSendEmailOperations.cs and GingerExecutionReport.cs, preventing proper content insertion.

Fixes

Line 213 (header row):

                            <tr>
                                <td style="width:33%;text-align:center" class="HeaderwhiteTextColor"><span>Ginger Execution Report</span></td>
-                            <tr>
+                            </tr>

Add missing marker after line 260:

             <!--ExecutionStatisticsDetails_Start-->
+            <!--ExecutionStatisticsDetails_End-->
             <!--ExecutionBusinessFlowsDetails_Start-->
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<tr>
<td style="width:33%;text-align:center" class="HeaderwhiteTextColor"><span>Ginger Execution Report</span></td>
<tr>
</table>
<tr>
<td style="width:33%;text-align:center" class="HeaderwhiteTextColor"><span>Ginger Execution Report</span></td>
</tr>
</table>
🧰 Tools
🪛 HTMLHint (1.9.2)

[error] 213-213: Tag must be paired, missing: [ ], start tag match failed [ ] on line 213.

(tag-pair)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html`
around lines 211 - 214, The header table in EmailExecutionReportOnLinux.html has
mismatched <tr> tags (the row containing the cell with class
"HeaderwhiteTextColor" / text "Ginger Execution Report" opens a <tr> but does
not close it), so add the corresponding closing </tr> tags to restore
well-formed table rows for the inner header table; also add the missing HTML
comment marker <!--ExecutionStatisticsDetails_End--> immediately after the
execution statistics block to match the existing
<!--ExecutionStatisticsDetails_Start--> marker so
RunSetActionHTMLReportSendEmailOperations.cs and GingerExecutionReport.cs can
detect the section correctly.

Comment on lines +259 to 261
<!--ExecutionGeneralDetails_End-->
<!--ExecutionStatisticsDetails_Start-->
<!--ExecutionBusinessFlowsDetails_Start-->

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Restore a real ExecutionStatisticsDetails block or remove the stray start marker.

The Linux template now emits <!--ExecutionStatisticsDetails_Start--> but never closes it, and there is no statistics markup between that marker and <!--ExecutionBusinessFlowsDetails_Start-->. RunSetActionHTMLReportSendEmailOperations.cs:544-562 and GingerExecutionReport.cs:318-356 rely on the exact start/end pair, so this variant can no longer render or conditionally remove the statistics section correctly.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html`
around lines 259 - 261, The template emits a stray
<!--ExecutionStatisticsDetails_Start--> without a matching
<!--ExecutionStatisticsDetails_End-->, breaking the section logic used by
RunSetActionHTMLReportSendEmailOperations (the code around
RunSetActionHTMLReportSendEmailOperations.cs:544-562) and GingerExecutionReport
(methods around GingerExecutionReport.cs:318-356); restore a proper
ExecutionStatisticsDetails block or remove the start token: either insert the
full ExecutionStatisticsDetails markup including the closing
<!--ExecutionStatisticsDetails_End--> (matching the structure expected by the
Render/conditional removal logic in GingerExecutionReport and
RunSetActionHTMLReportSendEmailOperations) or remove the lone
<!--ExecutionStatisticsDetails_Start--> entirely so the start/end pair remains
consistent with the code that finds and replaces that block.

Comment on lines +309 to +317
<table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#f2f5fa">
<tr>
<td colspan="4" class="GridTitleTd">
FAILED ACTIONS DETAILS
</td>
</tr>
</table>
<div class="spacerDiv">&nbsp;</div>
<table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable" style="box-shadow: 0 0 10px rgba(0,0,0,.6);-moz-box-shadow: 0 0 10px rgba(0,0,0,.6); -webkit-box-shadow: 0 0 10px rgba(0,0,0,.6);-o-box-shadow: 0 0 10px rgba(0,0,0,.6);">
<table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Mirror the table-layout:auto override on Linux failures details.

This table still inherits table-layout: fixed !important from the global table rule. Unlike EmailExecutionReport.html, it never overrides that for the failures grid, so long error values will keep squeezing or overflowing on Linux.

💡 Suggested fix
-            <table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable">
+            <table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable" style="table-layout: auto !important;">
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#f2f5fa">
<tr>
<td colspan="4" class="GridTitleTd">
FAILED ACTIONS DETAILS
</td>
</tr>
</table>
<div class="spacerDiv">&nbsp;</div>
<table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable" style="box-shadow: 0 0 10px rgba(0,0,0,.6);-moz-box-shadow: 0 0 10px rgba(0,0,0,.6); -webkit-box-shadow: 0 0 10px rgba(0,0,0,.6);-o-box-shadow: 0 0 10px rgba(0,0,0,.6);">
<table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable">
<table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#f2f5fa">
<tr>
<td colspan="4" class="GridTitleTd">
FAILED ACTIONS DETAILS
</td>
</tr>
</table>
<div class="spacerDiv">&nbsp;</div>
<table align="center" role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable" style="table-layout: auto !important;">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html`
around lines 309 - 317, The failures details table is inheriting the global
"table { table-layout: fixed !important }" rule and needs the same override used
in EmailExecutionReport.html; update the Linux template so the failures grid
table (identify by class "innerTable" and/or the surrounding GridTitleTd header)
explicitly sets "table-layout: auto !important" — add the override either as an
inline style on the <table class="innerTable"> or as a CSS rule scoped to that
selector in EmailExecutionReportOnLinux.html to prevent long cell values from
being squeezed or overflowing.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html`:
- Line 8: The HTML email template EmailExecutionReport.html has an empty <title>
tag; update the <title> element to contain a meaningful, descriptive string
(e.g., "Ginger Execution Report - {ExecutionName}" or "Ginger Execution Report")
so that EmailExecutionReport.html's <title> is not blank and improves
accessibility and browser display; locate the <title> tag in
EmailExecutionReport.html and replace the empty content with the chosen
descriptive text, optionally templating it if the report name is available.
- Around line 223-244: The gradient stripe in the <tr> of the email template is
inconsistent between platforms: one uses 20 <td> cells at 5% width with colors
`#ec008c` → ... → `#fdb118` while the other uses 3 wide ~33% <td>s (`#ec008c`,
`#f77341`, `#fdb515`), so update the template that differs to match the intended
design by editing the <tr> containing the gradient <td> elements—either replace
the 3-cell block with the 20 <td> entries (each width="5%" and the full color
sequence
`#ec008c`,`#ed0e83`,`#ee177d`,`#ef2077`,`#f02971`,`#f1326b`,`#f23b65`,`#f3455f`,`#f34e59`,`#f45754`,`#f5604e`,`#f66948`,`#f77242`,`#f87b3c`,`#f98436`,`#f98d30`,`#fa962a`,`#fb9f24`,`#fca81e`,`#fdb118`)
or consolidate the 20-cell row to the 3-cell variant—ensure the <tr> and its
<td> bgcolor values and width attributes are identical across both templates.
- Around line 275-280: The template now expects {RunsetDetails_Content} but
GingerExecutionReport.cs still writes into {GeneralDetails_Headers},
{GeneralDetails_Data}, {ExecutionGeneralDetails_Headers}, and
{ExecutionGeneralDetails_Data}; update the report-generation code in
GingerExecutionReport.cs to assemble the runset details HTML (the combined
content currently being produced for those old placeholders) and inject it into
the {RunsetDetails_Content} placeholder instead of the obsolete placeholders so
the "RUNSET DETAILS" section is populated.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: b6ac9df9-9668-4d81-bbff-3c5d65b38722

📥 Commits

Reviewing files that changed from the base of the PR and between 36289f3 and 13c5c12.

📒 Files selected for processing (2)
  • Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html
  • Ginger/GingerCoreNET/Run/RunSetActions/RunSetActionHTMLReportSendEmailOperations.cs

<meta name="viewport" content="width=device-width">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="x-apple-disable-message-reformatting">
<title></title>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Empty <title> tag should have descriptive content.

Static analysis flagged this as an error. While many email clients ignore the title, providing a meaningful value improves accessibility and helps users who view the email in a browser.

🔧 Proposed fix
-    <title></title>
+    <title>Ginger Execution Report</title>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<title></title>
<title>Ginger Execution Report</title>
🧰 Tools
🪛 HTMLHint (1.9.2)

[error] 8-8: <title></title> must not be empty.

(title-require)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html`
at line 8, The HTML email template EmailExecutionReport.html has an empty
<title> tag; update the <title> element to contain a meaningful, descriptive
string (e.g., "Ginger Execution Report - {ExecutionName}" or "Ginger Execution
Report") so that EmailExecutionReport.html's <title> is not blank and improves
accessibility and browser display; locate the <title> tag in
EmailExecutionReport.html and replace the empty content with the chosen
descriptive text, optionally templating it if the report name is available.

Comment on lines +223 to +244
<tr>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#ec008c"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#ed0e83"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#ee177d"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#ef2077"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f02971"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f1326b"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f23b65"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f3455f"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f34e59"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f45754"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f5604e"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f66948"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f77242"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f87b3c"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f98436"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#f98d30"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#fa962a"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#fb9f24"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#fca81e"></td>
<td style="height:4px;padding:0;font-size:0;line-height:0;width:5%" bgcolor="#fdb118"></td>
</tr>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Compare color stripe implementations between Windows and Linux templates
echo "=== Windows template color stripe ==="
rg -n "bgcolor=\"#e" --type=html Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html | head -25

echo ""
echo "=== Linux template color stripe ==="
rg -n "bgcolor=\"#e" --type=html Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html | head -10

Repository: Ginger-Automation/Ginger

Length of output: 748


🏁 Script executed:

#!/bin/bash
# Get the complete color stripe from Windows template
echo "=== Windows template - full color stripe ==="
sed -n '223,244p' Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html | grep -o 'bgcolor="#[^"]*"' | wc -l
sed -n '223,244p' Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html | grep -o 'bgcolor="#[^"]*"'

echo ""
echo "=== Linux template - full color stripe ==="
# Find the same stripe pattern in Linux template
rg -A 30 'bgcolor="#ec008c"' --type=html Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html | head -40 | grep -o 'bgcolor="#[^"]*"' | wc -l
rg -A 30 'bgcolor="#ec008c"' --type=html Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html | head -40 | grep -o 'bgcolor="#[^"]*"'

Repository: Ginger-Automation/Ginger

Length of output: 593


🏁 Script executed:

#!/bin/bash
# Get full Linux stripe HTML including width attributes
rg -B 2 -A 35 'bgcolor="#ec008c"' --type=html Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReportOnLinux.html | grep -E '<tr>|<td.*bgcolor' | head -10

Repository: Ginger-Automation/Ginger

Length of output: 598


Visual gradient stripe differs between Windows and Linux templates.

The Windows template uses a 20-cell smooth gradient stripe (5% width each, colors ranging from #ec008c to #fdb118), while the Linux template uses a 3-cell blocky stripe (33–34% width each, colors #ec008c#f77341#fdb515). This difference in color distribution and cell width creates visually distinct appearances across platforms. Consider whether this divergence is intentional or if the templates should be aligned.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html`
around lines 223 - 244, The gradient stripe in the <tr> of the email template is
inconsistent between platforms: one uses 20 <td> cells at 5% width with colors
`#ec008c` → ... → `#fdb118` while the other uses 3 wide ~33% <td>s (`#ec008c`,
`#f77341`, `#fdb515`), so update the template that differs to match the intended
design by editing the <tr> containing the gradient <td> elements—either replace
the 3-cell block with the 20 <td> entries (each width="5%" and the full color
sequence
`#ec008c`,`#ed0e83`,`#ee177d`,`#ef2077`,`#f02971`,`#f1326b`,`#f23b65`,`#f3455f`,`#f34e59`,`#f45754`,`#f5604e`,`#f66948`,`#f77242`,`#f87b3c`,`#f98436`,`#f98d30`,`#fa962a`,`#fb9f24`,`#fca81e`,`#fdb118`)
or consolidate the 20-cell row to the 3-cell variant—ensure the <tr> and its
<td> bgcolor values and width attributes are identical across both templates.

Comment on lines +275 to +280
RUNSET DETAILS
</td>
</tr>
</table>
<div class="spacerDiv">&nbsp;</div>
<table role="presentation" align="center" class="innerTable" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" style="box-shadow: 0 0 10px rgba(0,0,0,.6);-moz-box-shadow: 0 0 10px rgba(0,0,0,.6); -webkit-box-shadow: 0 0 10px rgba(0,0,0,.6);-o-box-shadow: 0 0 10px rgba(0,0,0,.6);">
<thead>
<tr>
{ExecutionGeneralDetails_Headers}
</tr>
</thead>
<tbody>
<tr>
{ExecutionGeneralDetails_Data}
</tr>
</tbody>
</table>
<table role="presentation" align="center" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" class="innerTable" style="box-shadow: 0 0 10px rgba(0,0,0,.6);-moz-box-shadow: 0 0 10px rgba(0,0,0,.6); -webkit-box-shadow: 0 0 10px rgba(0,0,0,.6);-o-box-shadow: 0 0 10px rgba(0,0,0,.6);">
<thead>
<tr>
{GeneralDetails_Headers}
</tr>
</thead>
<tbody>
<tr>
{GeneralDetails_Data}
</tr>
</tbody>
</table>
{RunsetDetails_Content}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the placeholder mismatch between template and C# code
echo "=== Placeholders in the HTML template ==="
rg -n "RunsetDetails_Content|GeneralDetails_Headers|GeneralDetails_Data|ExecutionGeneralDetails" Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html

echo ""
echo "=== Placeholder replacements in C# code ==="
rg -n "Replace.*GeneralDetails|Replace.*ExecutionGeneralDetails|Replace.*RunsetDetails" Ginger/GingerCoreNET/Reports/

Repository: Ginger-Automation/Ginger

Length of output: 1348


🏁 Script executed:

#!/bin/bash
# Check if old placeholders exist in the template
echo "=== All placeholder-like content in EmailExecutionReport.html ==="
rg -n "{GeneralDetails|{ExecutionGeneralDetails|{RunsetDetails|{RunSetGeneralDetails" Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html

echo ""
echo "=== Context around line 280 (RunsetDetails_Content) ==="
sed -n '270,290p' Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html

Repository: Ginger-Automation/Ginger

Length of output: 1405


🏁 Script executed:

#!/bin/bash
# Check if {RunsetDetails_Content} is referenced anywhere in C# code
echo "=== References to RunsetDetails_Content in C# code ==="
rg "RunsetDetails_Content" Ginger/GingerCoreNET/Reports/

echo ""
echo "=== Check the full context of placeholder replacements in GingerExecutionReport.cs ==="
sed -n '295,310p' Ginger/GingerCoreNET/Reports/GingerExecutionReport.cs

Repository: Ginger-Automation/Ginger

Length of output: 1691


Critical: {RunsetDetails_Content} placeholder is never populated by the backend.

The template now uses {RunsetDetails_Content}, but GingerExecutionReport.cs (lines 301-304) still injects content into the old placeholders ({GeneralDetails_Headers}, {GeneralDetails_Data}, {ExecutionGeneralDetails_Headers}, {ExecutionGeneralDetails_Data}), which no longer exist in the template. The "RUNSET DETAILS" section will render empty in generated reports.

Update GingerExecutionReport.cs to replace the new {RunsetDetails_Content} placeholder with the generated content.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Ginger/GingerCoreNET/Reports/GingerExecutionReport/EmailExecutionReport.html`
around lines 275 - 280, The template now expects {RunsetDetails_Content} but
GingerExecutionReport.cs still writes into {GeneralDetails_Headers},
{GeneralDetails_Data}, {ExecutionGeneralDetails_Headers}, and
{ExecutionGeneralDetails_Data}; update the report-generation code in
GingerExecutionReport.cs to assemble the runset details HTML (the combined
content currently being produced for those old placeholders) and inject it into
the {RunsetDetails_Content} placeholder instead of the obsolete placeholders so
the "RUNSET DETAILS" section is populated.

@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 3 minor

Alerts:
⚠ 3 issues (≤ 0 issues of at least minor severity)

Results:
3 new issues

Category Results
CodeStyle 3 minor

View in Codacy

🟢 Metrics 14 complexity

Metric Results
Complexity 14

View in Codacy

TIP This summary will be updated as you push new changes. Give us feedback

@ravirk91
ravirk91 merged commit 024a94e into master Mar 31, 2026
13 of 14 checks passed
@ravirk91
ravirk91 deleted the BugFix/58029/AllignmentIssueInReport branch March 31, 2026 14:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants