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}
+
+ {#each trace.items as item}
+ -
+
+ {item.title}
+
+ {/each}
+
+ {/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,
+ })
}
}
}