polish icons for step lists

This commit is contained in:
Francesco Renzi
2026-01-22 12:34:20 +00:00
parent 9f96f7f3d6
commit 9ecb88f16e
4 changed files with 29 additions and 7 deletions

View File

@@ -723,6 +723,14 @@ html[data-color-mode="light"] .dap-debug-btn.selected {
color: var(--fgColor-success, #3fb950); color: var(--fgColor-success, #3fb950);
} }
.dap-step-status-icon.completed.success {
color: var(--fgColor-success, #3fb950);
}
.dap-step-status-icon.completed.failed {
color: var(--fgColor-danger, #f85149);
}
.dap-step-status-icon.current { .dap-step-status-icon.current {
color: var(--fgColor-accent, #58a6ff); color: var(--fgColor-accent, #58a6ff);
} }

View File

@@ -156,6 +156,7 @@ const Icons = {
arrowUp: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"/></svg>`, arrowUp: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"/></svg>`,
arrowDown: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M13.03 8.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.47 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l2.97 2.97V3.75a.75.75 0 0 1 1.5 0v7.44l2.97-2.97a.75.75 0 0 1 1.06 0Z"/></svg>`, arrowDown: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M13.03 8.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.47 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l2.97 2.97V3.75a.75.75 0 0 1 1.5 0v7.44l2.97-2.97a.75.75 0 0 1 1.06 0Z"/></svg>`,
copy: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25ZM5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg>`, copy: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25ZM5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg>`,
x: `<svg viewBox="0 0 16 16" width="16" height="16"><path fill="currentColor" d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"/></svg>`,
}; };
/** /**
@@ -458,10 +459,14 @@ function closeDebuggerPane() {
/** /**
* Get status icon for step * Get status icon for step
*/ */
function getStepStatusIcon(status) { function getStepStatusIcon(status, result) {
switch (status) { switch (status) {
case 'completed': case 'completed':
return `<span class="dap-step-status-icon completed">${Icons.check}</span>`; if (result === 'succeeded') {
return `<span class="dap-step-status-icon completed success">${Icons.check}</span>`;
} else {
return `<span class="dap-step-status-icon completed failed">${Icons.x}</span>`;
}
case 'current': case 'current':
return `<span class="dap-step-status-icon current">${Icons.play}</span>`; return `<span class="dap-step-status-icon current">${Icons.play}</span>`;
case 'pending': case 'pending':
@@ -485,7 +490,7 @@ function renderStepList(steps) {
stepsList = steps; stepsList = steps;
const html = steps.map((step) => { const html = steps.map((step) => {
const statusIcon = getStepStatusIcon(step.status); const statusIcon = getStepStatusIcon(step.status, step.result);
const changeBadge = step.change ? `<span class="dap-step-badge dap-step-badge-${step.change.toLowerCase()}">[${step.change}]</span>` : ''; const changeBadge = step.change ? `<span class="dap-step-badge dap-step-badge-${step.change.toLowerCase()}">[${step.change}]</span>` : '';
const typeLabel = step.type === 'uses' ? step.typeDetail || step.type : step.type; const typeLabel = step.type === 'uses' ? step.typeDetail || step.type : step.type;
const isPending = step.status === 'pending'; const isPending = step.status === 'pending';

View File

@@ -333,6 +333,7 @@ EXAMPLES:
type = s.Type, type = s.Type,
typeDetail = s.TypeDetail, typeDetail = s.TypeDetail,
status = s.Status.ToString().ToLower(), status = s.Status.ToString().ToLower(),
result = s.Result?.ToString().ToLower(),
change = s.Change?.ToString().ToUpper() change = s.Change?.ToString().ToUpper()
}).ToList(), }).ToList(),
totalCount = steps.Count, totalCount = steps.Count,
@@ -378,10 +379,11 @@ EXAMPLES:
foreach (var step in steps) foreach (var step in steps)
{ {
// Status indicator // Status indicator - for completed steps, differentiate success vs failure
var statusIcon = step.Status switch var statusIcon = step.Status switch
{ {
StepStatus.Completed => "\u2713", // checkmark StepStatus.Completed when step.Result == DistributedTask.WebApi.TaskResult.Succeeded => "\u2713", // checkmark
StepStatus.Completed => "\u2717", // x mark for failed/canceled/skipped
StepStatus.Current => "\u25B6", // play arrow StepStatus.Current => "\u25B6", // play arrow
StepStatus.Pending => " ", StepStatus.Pending => " ",
_ => "?" _ => "?"
@@ -419,7 +421,7 @@ EXAMPLES:
// Legend // Legend
sb.AppendLine(); sb.AppendLine();
sb.Append("Legend: \u2713 = completed, \u25B6 = current/paused"); sb.Append("Legend: \u2713 = succeeded, \u2717 = failed, \u25B6 = current/paused");
if (steps.Any(s => s.Change.HasValue)) if (steps.Any(s => s.Change.HasValue))
{ {
sb.Append(", [ADDED] = new, [MODIFIED] = edited, [MOVED] = reordered"); sb.Append(", [ADDED] = new, [MODIFIED] = edited, [MOVED] = reordered");

View File

@@ -1,4 +1,5 @@
using GitHub.DistributedTask.Pipelines; using GitHub.DistributedTask.Pipelines;
using GitHub.DistributedTask.WebApi;
namespace GitHub.Runner.Worker.Dap.StepCommands namespace GitHub.Runner.Worker.Dap.StepCommands
{ {
@@ -61,6 +62,11 @@ namespace GitHub.Runner.Worker.Dap.StepCommands
/// </summary> /// </summary>
public StepStatus Status { get; set; } public StepStatus Status { get; set; }
/// <summary>
/// Result of step execution (for completed steps).
/// </summary>
public TaskResult? Result { get; set; }
/// <summary> /// <summary>
/// Change type if the step was modified during this debug session, null otherwise. /// Change type if the step was modified during this debug session, null otherwise.
/// </summary> /// </summary>
@@ -93,7 +99,8 @@ namespace GitHub.Runner.Worker.Dap.StepCommands
Index = index, Index = index,
Name = step.DisplayName ?? "Unknown step", Name = step.DisplayName ?? "Unknown step",
Status = status, Status = status,
Step = step Step = step,
Result = step.ExecutionContext?.Result
}; };
// Try to extract ActionStep from IActionRunner // Try to extract ActionStep from IActionRunner