Monorepo for Tangled
0

Configure Feed

Select the types of activity you want to include in your feed.

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 <me@oppi.li>

author
oppiliappan
committer
Tangled
date (Jul 17, 2026, 12:51 PM +0300) commit df9725a5 parent f217a2f5 change-id owpooppr
+34 -21
+9 -2
appview/pages/pages.go
··· 957 957 EmailToDid map[string]string 958 958 VerifiedCommits commitverify.VerifiedCommits 959 959 Languages []types.RepoLanguageDetails 960 - Pipelines map[string]types.Pipeline 961 960 NeedsKnotUpgrade bool 962 961 KnotUnreachable bool 963 962 types.RepoIndexResponse ··· 1026 1025 Active string 1027 1026 EmailToDid map[string]string 1028 1027 VerifiedCommits commitverify.VerifiedCommits 1029 - Pipelines map[string]types.Pipeline 1030 1028 1031 1029 types.RepoLogResponse 1032 1030 } ··· 1709 1707 1710 1708 func (p *Pages) WorkflowSymbolOOB(w io.Writer, params WorkflowSymbolOOBParams) error { 1711 1709 return p.executePlain("repo/pipelines/fragments/workflowSymbolOOB", w, params) 1710 + } 1711 + 1712 + type PipelineStatusesParams struct { 1713 + RepoInfo repoinfo.RepoInfo 1714 + Pipelines map[string]types.Pipeline 1715 + } 1716 + 1717 + func (p *Pages) PipelineStatusesFragment(w io.Writer, params PipelineStatusesParams) error { 1718 + return p.executePlain("repo/fragments/commitPipelineStatuses", w, params) 1712 1719 } 1713 1720 1714 1721 type WorkflowParams struct {
+24 -8
appview/repo/index.go
··· 187 187 } 188 188 } 189 189 190 - pr := <-pipelineCh 191 - if pr.err != nil { 192 - l.Error("failed to fetch pipeline statuses", "err", pr.err) 193 - // non-fatal 194 - } 195 - pipelines := pr.pipelines 196 - 197 190 rp.pages.RepoIndexPage(w, pages.RepoIndexParams{ 198 191 BaseParams: pages.BaseParamsFromContext(r.Context()), 199 192 RepoInfo: rp.repoResolver.GetRepoInfo(r, user), ··· 206 199 EmailToDid: emailToDidMap, 207 200 VerifiedCommits: vc, 208 201 Languages: languageInfo, 209 - Pipelines: pipelines, 202 + }) 203 + } 204 + 205 + func (rp *Repo) PipelineStatuses(w http.ResponseWriter, r *http.Request) { 206 + l := rp.logger.With("handler", "PipelineStatuses") 207 + 208 + f, err := rp.repoResolver.Resolve(r) 209 + if err != nil { 210 + l.Error("failed to resolve repo", "err", err) 211 + return 212 + } 213 + 214 + user := rp.oauth.GetMultiAccountUser(r) 215 + shas := r.URL.Query()["sha"] 216 + 217 + pipelines, err := getPipelineStatuses(r.Context(), f, shas) 218 + if err != nil { 219 + l.Error("failed to fetch pipeline statuses", "err", err) 220 + return 221 + } 222 + 223 + rp.pages.PipelineStatusesFragment(w, pages.PipelineStatusesParams{ 224 + RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 225 + Pipelines: pipelines, 210 226 }) 211 227 } 212 228
-11
appview/repo/log.go
··· 173 173 l.Error("failed to GetVerifiedObjectCommits", "err", err) 174 174 } 175 175 176 - var shas []string 177 - for _, c := range xrpcResp.Commits { 178 - shas = append(shas, c.Hash.String()) 179 - } 180 - pipelines, err := getPipelineStatuses(r.Context(), f, shas) 181 - if err != nil { 182 - l.Error("failed to getPipelineStatuses", "err", err) 183 - // non-fatal 184 - } 185 - 186 176 rp.pages.RepoLog(w, pages.RepoLogParams{ 187 177 BaseParams: pages.BaseParamsFromContext(r.Context()), 188 178 TagMap: tagMap, ··· 190 180 RepoLogResponse: xrpcResp, 191 181 EmailToDid: emailToDidMap, 192 182 VerifiedCommits: vc, 193 - Pipelines: pipelines, 194 183 }) 195 184 } 196 185
+1
appview/repo/router.go
··· 10 10 func (rp *Repo) Router(mw *middleware.Middleware) http.Handler { 11 11 r := chi.NewRouter() 12 12 r.Get("/", rp.Index) 13 + r.Get("/commit-statuses", rp.PipelineStatuses) 13 14 r.Get("/opengraph", rp.Opengraph) 14 15 r.Get("/feed.atom", rp.AtomFeed) 15 16 r.Get("/commits/{ref}", rp.Log)