Monorepo for Tangled tangled.org

appview/pages: show CI status in all pulls view

Signed-off-by: oppiliappan <me@oppi.li>

Changed files
+37 -10
appview
pages
templates
repo
pulls
+1
appview/pages/pages.go
··· 813 DidHandleMap map[string]string 814 FilteringBy db.PullState 815 Stacks map[string]db.Stack 816 } 817 818 func (p *Pages) RepoPulls(w io.Writer, params RepoPullsParams) error {
··· 813 DidHandleMap map[string]string 814 FilteringBy db.PullState 815 Stacks map[string]db.Stack 816 + Pipelines map[string]db.Pipeline 817 } 818 819 func (p *Pages) RepoPulls(w io.Writer, params RepoPullsParams) error {
+5 -7
appview/pages/templates/repo/pulls/fragments/summarizedPullHeader.html
··· 13 </span> 14 </div> 15 16 - <div class="flex-shrink-0 flex items-center"> 17 {{ $latestRound := .LastRoundNumber }} 18 {{ $lastSubmission := index .Submissions $latestRound }} 19 {{ $commentCount := len $lastSubmission.Comments }} 20 {{ if and $pipeline $pipeline.Id }} 21 - <div class="inline-flex items-center gap-2"> 22 - {{ template "repo/pipelines/fragments/pipelineSymbol" $pipeline }} 23 - <span class="mx-2 before:content-['·'] before:select-none"></span> 24 - </div> 25 {{ end }} 26 <span> 27 - <div class="inline-flex items-center gap-2"> 28 {{ i "message-square" "w-3 h-3 md:hidden" }} 29 {{ $commentCount }} 30 <span class="hidden md:inline">comment{{if ne $commentCount 1}}s{{end}}</span> 31 </div> 32 </span> 33 - <span class="mx-2 before:content-['·'] before:select-none"></span> 34 <span> 35 <span class="hidden md:inline">round</span> 36 <span class="font-mono">#{{ $latestRound }}</span>
··· 13 </span> 14 </div> 15 16 + <div class="flex-shrink-0 flex items-center gap-2"> 17 {{ $latestRound := .LastRoundNumber }} 18 {{ $lastSubmission := index .Submissions $latestRound }} 19 {{ $commentCount := len $lastSubmission.Comments }} 20 {{ if and $pipeline $pipeline.Id }} 21 + {{ template "repo/pipelines/fragments/pipelineSymbol" $pipeline }} 22 + <span class="before:content-['·'] before:select-none text-gray-500 dark:text-gray-400"></span> 23 {{ end }} 24 <span> 25 + <div class="inline-flex items-center gap-1"> 26 {{ i "message-square" "w-3 h-3 md:hidden" }} 27 {{ $commentCount }} 28 <span class="hidden md:inline">comment{{if ne $commentCount 1}}s{{end}}</span> 29 </div> 30 </span> 31 + <span class="before:content-['·'] before:select-none text-gray-500 dark:text-gray-400"></span> 32 <span> 33 <span class="hidden md:inline">round</span> 34 <span class="font-mono">#{{ $latestRound }}</span>
+10 -3
appview/pages/templates/repo/pulls/pulls.html
··· 54 <span class="text-gray-500 dark:text-gray-400">#{{ .PullId }}</span> 55 </a> 56 </div> 57 - <p class="text-sm text-gray-500 dark:text-gray-400 flex flex-wrap items-center gap-1"> 58 {{ $owner := index $.DidHandleMap .OwnerDid }} 59 {{ $bgColor := "bg-gray-800 dark:bg-gray-700" }} 60 {{ $icon := "ban" }} ··· 103 #{{ .LastRoundNumber }} 104 </span> 105 </span> 106 - </p> 107 </div> 108 {{ if .StackId }} 109 {{ $otherPulls := index $.Stacks .StackId }} ··· 135 {{ $root := index . 1 }} 136 <div class="grid grid-cols-1 rounded-b border-b border-t border-gray-200 dark:border-gray-900 divide-y divide-gray-200 dark:divide-gray-900"> 137 {{ range $pull := $list }} 138 <a href="/{{ $root.RepoInfo.FullName }}/pulls/{{ $pull.PullId }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 139 <div class="flex gap-2 items-center px-6"> 140 <div class="flex-grow min-w-0 w-full py-2"> 141 - {{ template "repo/pulls/fragments/summarizedHeader" (list $pull 0) }} 142 </div> 143 </div> 144 </a>
··· 54 <span class="text-gray-500 dark:text-gray-400">#{{ .PullId }}</span> 55 </a> 56 </div> 57 + <div class="text-sm text-gray-500 dark:text-gray-400 flex flex-wrap items-center gap-1"> 58 {{ $owner := index $.DidHandleMap .OwnerDid }} 59 {{ $bgColor := "bg-gray-800 dark:bg-gray-700" }} 60 {{ $icon := "ban" }} ··· 103 #{{ .LastRoundNumber }} 104 </span> 105 </span> 106 + 107 + {{ $pipeline := index $.Pipelines .LatestSha }} 108 + {{ if $pipeline }} 109 + <span class="before:content-['·']"></span> 110 + {{ template "repo/pipelines/fragments/pipelineSymbol" $pipeline }} 111 + {{ end }} 112 + </div> 113 </div> 114 {{ if .StackId }} 115 {{ $otherPulls := index $.Stacks .StackId }} ··· 141 {{ $root := index . 1 }} 142 <div class="grid grid-cols-1 rounded-b border-b border-t border-gray-200 dark:border-gray-900 divide-y divide-gray-200 dark:divide-gray-900"> 143 {{ range $pull := $list }} 144 + {{ $pipeline := index $root.Pipelines $pull.LatestSha }} 145 <a href="/{{ $root.RepoInfo.FullName }}/pulls/{{ $pull.PullId }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 146 <div class="flex gap-2 items-center px-6"> 147 <div class="flex-grow min-w-0 w-full py-2"> 148 + {{ template "repo/pulls/fragments/summarizedHeader" (list $pull $pipeline) }} 149 </div> 150 </div> 151 </a>
+21
appview/pulls/pulls.go
··· 555 556 // we want to group all stacked PRs into just one list 557 stacks := make(map[string]db.Stack) 558 n := 0 559 for _, p := range pulls { 560 // this PR is stacked 561 if p.StackId != "" { 562 // we have already seen this PR stack ··· 575 } 576 pulls = pulls[:n] 577 578 identsToResolve := make([]string, len(pulls)) 579 for i, pull := range pulls { 580 identsToResolve[i] = pull.OwnerDid ··· 596 DidHandleMap: didHandleMap, 597 FilteringBy: state, 598 Stacks: stacks, 599 }) 600 } 601
··· 555 556 // we want to group all stacked PRs into just one list 557 stacks := make(map[string]db.Stack) 558 + var shas []string 559 n := 0 560 for _, p := range pulls { 561 + // store the sha for later 562 + shas = append(shas, p.LatestSha()) 563 // this PR is stacked 564 if p.StackId != "" { 565 // we have already seen this PR stack ··· 578 } 579 pulls = pulls[:n] 580 581 + repoInfo := f.RepoInfo(user) 582 + ps, err := db.GetPipelineStatuses( 583 + s.db, 584 + db.FilterEq("repo_owner", repoInfo.OwnerDid), 585 + db.FilterEq("repo_name", repoInfo.Name), 586 + db.FilterEq("knot", repoInfo.Knot), 587 + db.FilterIn("sha", shas), 588 + ) 589 + if err != nil { 590 + log.Printf("failed to fetch pipeline statuses: %s", err) 591 + // non-fatal 592 + } 593 + m := make(map[string]db.Pipeline) 594 + for _, p := range ps { 595 + m[p.Sha] = p 596 + } 597 + 598 identsToResolve := make([]string, len(pulls)) 599 for i, pull := range pulls { 600 identsToResolve[i] = pull.OwnerDid ··· 616 DidHandleMap: didHandleMap, 617 FilteringBy: state, 618 Stacks: stacks, 619 + Pipelines: m, 620 }) 621 } 622