From df9725a5f31919257f9c218e16a536dfae8d58d7 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Thu, 16 Jul 2026 14:40:39 +0000 Subject: [PATCH] appview/repo: add /commit-statuses route pings the spindle for pipeline statuses for a list of SHAs and translates them into html fragments Signed-off-by: oppiliappan --- appview/pages/pages.go | 11 +++++++++-- appview/repo/index.go | 32 ++++++++++++++++++++++++-------- appview/repo/log.go | 11 ----------- appview/repo/router.go | 1 + 4 file(s) changed, 34 insertion(s)(+), 21 deletion(s)(-) diff --git a/appview/pages/pages.go b/appview/pages/pages.go --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -957,7 +957,6 @@ EmailToDid map[string]string VerifiedCommits commitverify.VerifiedCommits Languages []types.RepoLanguageDetails - Pipelines map[string]types.Pipeline NeedsKnotUpgrade bool KnotUnreachable bool types.RepoIndexResponse @@ -1026,7 +1025,6 @@ Active string EmailToDid map[string]string VerifiedCommits commitverify.VerifiedCommits - Pipelines map[string]types.Pipeline types.RepoLogResponse } @@ -1709,6 +1707,15 @@ func (p *Pages) WorkflowSymbolOOB(w io.Writer, params WorkflowSymbolOOBParams) error { return p.executePlain("repo/pipelines/fragments/workflowSymbolOOB", w, params) +} + +type PipelineStatusesParams struct { + RepoInfo repoinfo.RepoInfo + Pipelines map[string]types.Pipeline +} + +func (p *Pages) PipelineStatusesFragment(w io.Writer, params PipelineStatusesParams) error { + return p.executePlain("repo/fragments/commitPipelineStatuses", w, params) } type WorkflowParams struct { diff --git a/appview/repo/index.go b/appview/repo/index.go --- a/appview/repo/index.go +++ b/appview/repo/index.go @@ -187,13 +187,6 @@ } } - pr := <-pipelineCh - if pr.err != nil { - l.Error("failed to fetch pipeline statuses", "err", pr.err) - // non-fatal - } - pipelines := pr.pipelines - rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ BaseParams: pages.BaseParamsFromContext(r.Context()), RepoInfo: rp.repoResolver.GetRepoInfo(r, user), @@ -206,7 +199,30 @@ EmailToDid: emailToDidMap, VerifiedCommits: vc, Languages: languageInfo, - Pipelines: pipelines, + }) +} + +func (rp *Repo) PipelineStatuses(w http.ResponseWriter, r *http.Request) { + l := rp.logger.With("handler", "PipelineStatuses") + + f, err := rp.repoResolver.Resolve(r) + if err != nil { + l.Error("failed to resolve repo", "err", err) + return + } + + user := rp.oauth.GetMultiAccountUser(r) + shas := r.URL.Query()["sha"] + + pipelines, err := getPipelineStatuses(r.Context(), f, shas) + if err != nil { + l.Error("failed to fetch pipeline statuses", "err", err) + return + } + + rp.pages.PipelineStatusesFragment(w, pages.PipelineStatusesParams{ + RepoInfo: rp.repoResolver.GetRepoInfo(r, user), + Pipelines: pipelines, }) } diff --git a/appview/repo/log.go b/appview/repo/log.go --- a/appview/repo/log.go +++ b/appview/repo/log.go @@ -173,16 +173,6 @@ l.Error("failed to GetVerifiedObjectCommits", "err", err) } - var shas []string - for _, c := range xrpcResp.Commits { - shas = append(shas, c.Hash.String()) - } - pipelines, err := getPipelineStatuses(r.Context(), f, shas) - if err != nil { - l.Error("failed to getPipelineStatuses", "err", err) - // non-fatal - } - rp.pages.RepoLog(w, pages.RepoLogParams{ BaseParams: pages.BaseParamsFromContext(r.Context()), TagMap: tagMap, @@ -190,7 +180,6 @@ RepoLogResponse: xrpcResp, EmailToDid: emailToDidMap, VerifiedCommits: vc, - Pipelines: pipelines, }) } diff --git a/appview/repo/router.go b/appview/repo/router.go --- a/appview/repo/router.go +++ b/appview/repo/router.go @@ -10,6 +10,7 @@ func (rp *Repo) Router(mw *middleware.Middleware) http.Handler { r := chi.NewRouter() r.Get("/", rp.Index) + r.Get("/commit-statuses", rp.PipelineStatuses) r.Get("/opengraph", rp.Opengraph) r.Get("/feed.atom", rp.AtomFeed) r.Get("/commits/{ref}", rp.Log) -- tangled.sh