diff --git a/ui/src/routes/works/[wid]/+page.svelte b/ui/src/routes/works/[wid]/+page.svelte index 50e4774..11f167c 100644 --- a/ui/src/routes/works/[wid]/+page.svelte +++ b/ui/src/routes/works/[wid]/+page.svelte @@ -153,9 +153,26 @@

{trace.title}

-
-
{#each trace.logs as l (l.pos)}{l.out}{/each}
-
+ {#if trace.items} + + {/if} + {#if trace.logs} +
+
{#each trace.logs as l (l.pos)}{l.out}{/each}
+
+ {/if} {/each} {:catch error}
diff --git a/works.go b/works.go index 0d07a58..4bba8b2 100644 --- a/works.go +++ b/works.go @@ -374,10 +374,16 @@ func declareAPIAdminWorksRoutes(router *gin.RouterGroup) { }) } +type UserTraceItem struct { + Title string `json:"title"` + Status string `json:"status"` +} + type UserTrace struct { - Title string `json:"title"` - Status string `json:"status"` - Logs []*drone.Line `json:"logs"` + Title string `json:"title"` + Status string `json:"status"` + Logs []*drone.Line `json:"logs,omitempty"` + Items []UserTraceItem `json:"items,omitempty"` } func declareAPIAuthWorksRoutes(router *gin.RouterGroup) { @@ -495,6 +501,32 @@ func declareAPIAuthWorksRoutes(router *gin.RouterGroup) { Status: step.Status, Logs: keeptLogs, }) + } else if step.Name == "Check steps" { + result, err := client.Logs(slug[0], slug[1], int(buildn), stage.Number, step.Number) + if err != nil { + log.Printf("An error occurs when retrieving logs from Drone (%s/%s/%d/%d/%d): %s", slug[0], slug[1], buildn, stage.Number, step.Number, err.Error()) + continue + } + + items := []UserTraceItem{} + for _, line := range result { + if strings.HasPrefix(line.Message, "report:") { + tmp := strings.Split(strings.TrimSpace(line.Message), ":") + if len(tmp) != 3 { + continue + } + items = append(items, UserTraceItem{ + Title: tmp[1], + Status: tmp[2], + }) + } + } + + traces = append(traces, UserTrace{ + Title: step.Name, + Status: step.Status, + Items: items, + }) } } }