Show the owner display name and link commits on the Pipelines tab

The run list and run detail named the admin by username while every
other page uses OWNER_DISPLAY_NAME. Commit hashes were plain text; they
now link to the commit page with the same style as on the branches,
tags, and commits pages.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
AuthorKonata <konata@posteo.jp>
Date
Commit72e42c540ae79d1aa7608f085fccdb1b4b106b90
Parentcff483d
3 files changed, 14 insertions(+), 13 deletions(-)
▾Minternal/web/e2e/ci_test.go
@@ -379,6 +379,14 @@ func TestCISuccessfulRun(t *testing.T) {
if r.Count(".ci-status-pill.ci-status-success") == 0 {
t.Error("no success pill on the history page")
}
if r.Count(`a.commit-hash[href^="/ci-repo/commit/"]`) == 0 {
t.Error("commit hash is not a link to the commit page")
}
// The trigger label uses the owner display name, like every other
// place that names the admin.
if !contains(r.Texts(".text-muted"), "by "+e.Cfg.OwnerDisplayName) || contains(r.Texts(".text-muted"), "by admin") {
t.Errorf("trigger labels = %v", r.Texts(".text-muted"))
}
})
t.Run("run detail page shows step and log", func(t *testing.T) {
▾Minternal/web/views/ci.go
@@ -251,7 +251,7 @@ func CiHistory(cfg *config.Config, user *db.SessionUser, repo *db.Repo, runs []C
g.Text(" to your repository to get started.")),
)),
g.If(len(runs) > 0, Ul(Class("issue-list"),
g.Map(runs, func(r CiRunSummary) g.Node { return ciRunItem(repo, r) }),
g.Map(runs, func(r CiRunSummary) g.Node { return ciRunItem(cfg, repo, r) }),
)),
Pagination(page),
ciHelp(repo),
@@ -260,7 +260,7 @@ func CiHistory(cfg *config.Config, user *db.SessionUser, repo *db.Repo, runs []C
}
// ciRunItem renders one entry of the run list.
func ciRunItem(repo *db.Repo, r CiRunSummary) g.Node {
func ciRunItem(cfg *config.Config, repo *db.Repo, r CiRunSummary) g.Node {
run := r.Run
title := ""
if run.Status == "queued" {
@@ -285,14 +285,14 @@ func ciRunItem(repo *db.Repo, r CiRunSummary) g.Node {
Span(Class("ci-run-id"), g.Text("#"+ciRunNumber(&run))),
),
Div(Class("release-item-meta"),
g.If(shortSHA != "", Code(Class("ci-sha"), g.Text(shortSHA))),
g.If(shortSHA != "", A(Href("/"+repo.Name+"/commit/"+deref(run.CommitSHA)), Class("commit-hash mono"), g.Text(shortSHA))),
g.If(deref(run.CommitBranch) != "",
Span(Class("badge"), g.Text(deref(run.CommitBranch)))),
g.If(deref(run.CommitTag) != "",
Span(Class("badge"), g.Text(deref(run.CommitTag)))),
Span(Class("text-muted"), g.Text(run.TriggerSource)),
g.If(deref(run.TriggeredByUsername) != "",
Span(Class("text-muted"), g.Text("by "+deref(run.TriggeredByUsername)))),
Span(Class("text-muted"), g.Text("by "+util.DisplayName(deref(run.TriggeredByUsername), cfg.OwnerDisplayName)))),
g.If(r.ArtifactCount > 0, Span(g.Text(artifactText))),
g.If(ciDuration(run.StartedAt, run.FinishedAt) != "",
Span(Class("text-muted"),
@@ -353,7 +353,7 @@ func CiRunDetail(cfg *config.Config, user *db.SessionUser, repo *db.Repo, run *d
}
triggeredBy := "triggered by " + run.TriggerSource
if deref(run.TriggeredByUsername) != "" {
triggeredBy += " (" + deref(run.TriggeredByUsername) + ")"
triggeredBy += " (" + util.DisplayName(deref(run.TriggeredByUsername), cfg.OwnerDisplayName) + ")"
}
refreshHref := "?"
refreshLabel := "Resume refresh"
@@ -375,7 +375,7 @@ func CiRunDetail(cfg *config.Config, user *db.SessionUser, repo *db.Repo, run *d
g.Text(" Pipeline #"+displayID),
),
Div(Class("release-item-meta"),
g.If(shortSHA != "", Code(Class("ci-sha"), g.Text(shortSHA))),
g.If(shortSHA != "", A(Href("/"+repo.Name+"/commit/"+deref(run.CommitSHA)), Class("commit-hash mono"), g.Text(shortSHA))),
g.If(deref(run.CommitBranch) != "",
A(Href("/"+repo.Name+"/tree/"+EscapePath(deref(run.CommitBranch))), Class("badge"),
g.Text(deref(run.CommitBranch)))),
▾Mweb/static/assets/css/components.css
@@ -2039,13 +2039,6 @@
.ci-run-id {
font-weight: 600;
}
.ci-sha {
font-family: var(--font-mono);
font-size: var(--text-xs);
background: var(--color-bg-inset);
padding: 1px var(--space-1);
border-radius: var(--radius-sm);
}
.ci-run-header {
display: flex;
flex-wrap: wrap;