From fab6725b24facde86e63bf4fbb58c357c39a102c Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Wed, 18 Jun 2025 19:49:03 +0100 Subject: [PATCH] appview: show CI status on log and commit pages Change-Id: ulwsmwptkwsmsnsvtmpwmmzkyuokoqmo Signed-off-by: oppiliappan --- appview/pages/pages.go | 4 +- appview/pages/templates/repo/commit.html | 6 + .../repo/fragments/pipelineStatusSymbol.html | 3 +- appview/pages/templates/repo/index.html | 2 +- appview/pages/templates/repo/log.html | 115 ++++++++++-------- appview/repo/index.go | 6 +- appview/repo/repo.go | 27 +++- appview/repo/repo_util.go | 17 +-- 8 files changed, 112 insertions(+), 68 deletions(-) diff --git a/appview/pages/pages.go b/appview/pages/pages.go index fe0e43c..23e3318 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -436,7 +436,7 @@ type RepoIndexParams struct { EmailToDidOrHandle map[string]string VerifiedCommits commitverify.VerifiedCommits Languages *types.RepoLanguageResponse - Pipelines map[plumbing.Hash]db.Pipeline + Pipelines map[string]db.Pipeline types.RepoIndexResponse } @@ -475,6 +475,7 @@ type RepoLogParams struct { Active string EmailToDidOrHandle map[string]string VerifiedCommits commitverify.VerifiedCommits + Pipelines map[string]db.Pipeline } func (p *Pages) RepoLog(w io.Writer, params RepoLogParams) error { @@ -487,6 +488,7 @@ type RepoCommitParams struct { RepoInfo repoinfo.RepoInfo Active string EmailToDidOrHandle map[string]string + Pipeline *db.Pipeline // singular because it's always going to be just one VerifiedCommit commitverify.VerifiedCommits diff --git a/appview/pages/templates/repo/commit.html b/appview/pages/templates/repo/commit.html index 0a6c1e8..702320e 100644 --- a/appview/pages/templates/repo/commit.html +++ b/appview/pages/templates/repo/commit.html @@ -68,6 +68,12 @@ {{ end }} + +
+ {{ if $.Pipeline }} + {{ template "repo/fragments/pipelineStatusSymbol" $.Pipeline }} + {{ end }} +
diff --git a/appview/pages/templates/repo/fragments/pipelineStatusSymbol.html b/appview/pages/templates/repo/fragments/pipelineStatusSymbol.html index d087bca..235c635 100644 --- a/appview/pages/templates/repo/fragments/pipelineStatusSymbol.html +++ b/appview/pages/templates/repo/fragments/pipelineStatusSymbol.html @@ -15,7 +15,8 @@ {{ if $allPass }}
- {{ i "check" "size-4 text-green-600 dark:text-green-400 " }} {{ $total }}/{{ $total }} + {{ i "check" "size-4 text-green-600 dark:text-green-400 " }} + {{ $total }}/{{ $total }}
{{ else }} {{ $radius := f64 8 }} diff --git a/appview/pages/templates/repo/index.html b/appview/pages/templates/repo/index.html index e7b06ea..3db6d57 100644 --- a/appview/pages/templates/repo/index.html +++ b/appview/pages/templates/repo/index.html @@ -272,7 +272,7 @@ {{ end }} - {{ $pipeline := index $.Pipelines .Hash }} + {{ $pipeline := index $.Pipelines .Hash.String }} {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }}
{{ template "repo/fragments/pipelineStatusSymbol" $pipeline }} diff --git a/appview/pages/templates/repo/log.html b/appview/pages/templates/repo/log.html index d25f52c..1f9994d 100644 --- a/appview/pages/templates/repo/log.html +++ b/appview/pages/templates/repo/log.html @@ -20,6 +20,7 @@ Author Commit Message + Date @@ -57,29 +58,34 @@ {{ i "folder-code" "w-4 h-4" }} + -
-
- {{ index $messageParts 0 }} - {{ if gt (len $messageParts) 1 }} - - {{ end }} - - - {{ if index $.TagMap $commit.Hash.String }} - {{ range $tag := index $.TagMap $commit.Hash.String }} - - {{ $tag }} - - {{ end }} - {{ end }} - -
- +
+ {{ index $messageParts 0 }} {{ if gt (len $messageParts) 1 }} - + {{ end }} + + {{ if index $.TagMap $commit.Hash.String }} + {{ range $tag := index $.TagMap $commit.Hash.String }} + + {{ $tag }} + + {{ end }} + {{ end }} +
+ + {{ if gt (len $messageParts) 1 }} + + {{ end }} + + + + {{ $pipeline := index $.Pipelines .Hash.String }} + {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }} + {{ template "repo/fragments/pipelineStatusSymbol" $pipeline }} + {{ end }} {{ timeFmt $commit.Committer.When }} @@ -94,43 +100,41 @@
{{ $messageParts := splitN $commit.Message "\n\n" 2 }}
-
-
-
-
- - {{ index $messageParts 0 }} - - {{ if gt (len $messageParts) 1 }} - - {{ end }} +
+
+
+ + {{ index $messageParts 0 }} + + {{ if gt (len $messageParts) 1 }} + + {{ end }} - {{ if index $.TagMap $commit.Hash.String }} - {{ range $tag := index $.TagMap $commit.Hash.String }} - - {{ $tag }} - - {{ end }} + {{ if index $.TagMap $commit.Hash.String }} + {{ range $tag := index $.TagMap $commit.Hash.String }} + + {{ $tag }} + {{ end }} -
- - {{ if gt (len $messageParts) 1 }} - {{ end }}
- - {{ i "folder-code" "w-4 h-4" }} - + + {{ if gt (len $messageParts) 1 }} + + {{ end }}
+ + {{ i "folder-code" "w-4 h-4" }} +
@@ -160,6 +164,15 @@
{{ shortTimeFmt $commit.Committer.When }} + + + {{ $pipeline := index $.Pipelines .Hash.String }} + {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }} +
+ + {{ template "repo/fragments/pipelineStatusSymbol" $pipeline }} + + {{ end }}
{{ end }} diff --git a/appview/repo/index.go b/appview/repo/index.go index 48f15ee..061fccd 100644 --- a/appview/repo/index.go +++ b/appview/repo/index.go @@ -127,7 +127,11 @@ func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) { // non-fatal } - pipelines, err := rp.getPipelineStatuses(repoInfo, commitsTrunc) + var shas []string + for _, c := range commitsTrunc { + shas = append(shas, c.Hash.String()) + } + pipelines, err := rp.getPipelineStatuses(repoInfo, shas) if err != nil { log.Printf("failed to fetch pipeline statuses: %s", err) // non-fatal diff --git a/appview/repo/repo.go b/appview/repo/repo.go index 3243548..82b25c8 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -133,13 +133,26 @@ func (rp *Repo) RepoLog(w http.ResponseWriter, r *http.Request) { log.Println(err) } + repoInfo := f.RepoInfo(user) + + var shas []string + for _, c := range repolog.Commits { + shas = append(shas, c.Hash.String()) + } + pipelines, err := rp.getPipelineStatuses(repoInfo, shas) + if err != nil { + log.Println(err) + // non-fatal + } + rp.pages.RepoLog(w, pages.RepoLogParams{ LoggedInUser: user, TagMap: tagMap, - RepoInfo: f.RepoInfo(user), + RepoInfo: repoInfo, RepoLogResponse: *repolog, EmailToDidOrHandle: emailToDidOrHandle(rp, emailToDidMap), VerifiedCommits: vc, + Pipelines: pipelines, }) return } @@ -289,12 +302,24 @@ func (rp *Repo) RepoCommit(w http.ResponseWriter, r *http.Request) { } user := rp.oauth.GetUser(r) + repoInfo := f.RepoInfo(user) + pipelines, err := rp.getPipelineStatuses(repoInfo, []string{result.Diff.Commit.This}) + if err != nil { + log.Println(err) + // non-fatal + } + var pipeline *db.Pipeline + if p, ok := pipelines[result.Diff.Commit.This]; ok { + pipeline = &p + } + rp.pages.RepoCommit(w, pages.RepoCommitParams{ LoggedInUser: user, RepoInfo: f.RepoInfo(user), RepoCommitResponse: result, EmailToDidOrHandle: emailToDidOrHandle(rp, emailToDidMap), VerifiedCommit: vc, + Pipeline: pipeline, }) return } diff --git a/appview/repo/repo_util.go b/appview/repo/repo_util.go index 0a3fcf7..c342bb5 100644 --- a/appview/repo/repo_util.go +++ b/appview/repo/repo_util.go @@ -9,7 +9,6 @@ import ( "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/pages/repoinfo" - "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" ) @@ -108,19 +107,14 @@ func randomString(n int) string { // golang is so blessed that it requires 35 lines of imperative code for this func (rp *Repo) getPipelineStatuses( repoInfo repoinfo.RepoInfo, - commits []*object.Commit, -) (map[plumbing.Hash]db.Pipeline, error) { - m := make(map[plumbing.Hash]db.Pipeline) + shas []string, +) (map[string]db.Pipeline, error) { + m := make(map[string]db.Pipeline) - if len(commits) == 0 { + if len(shas) == 0 { return m, nil } - shas := make([]string, len(commits)) - for _, c := range commits { - shas = append(shas, c.Hash.String()) - } - ps, err := db.GetPipelineStatuses( rp.db, db.FilterEq("repo_owner", repoInfo.OwnerDid), @@ -133,8 +127,7 @@ func (rp *Repo) getPipelineStatuses( } for _, p := range ps { - hash := plumbing.NewHash(p.Sha) - m[hash] = p + m[p.Sha] = p } return m, nil -- 2.43.0