this repo has no description
1{{ define "title" }} 2 {{ .Pull.Title }} &middot; pull #{{ .Pull.PullId }} &middot; {{ .RepoInfo.FullName }} 3{{ end }} 4 5{{ define "extrameta" }} 6 {{ template "repo/pulls/fragments/og" (dict "RepoInfo" .RepoInfo "Pull" .Pull) }} 7{{ end }} 8 9{{ define "mainLayout" }} 10 <div class="px-1 col-span-full flex-grow flex flex-col gap-4"> 11 {{ block "contentLayout" . }} 12 {{ block "content" . }}{{ end }} 13 {{ end }} 14 </div> 15{{ end }} 16 17{{ define "repoContentLayout" }} 18 <div class="grid grid-cols-1 md:grid-cols-10 gap-4 w-full"> 19 <div class="col-span-1 md:col-span-7"> 20 <section class="bg-white dark:bg-gray-800 p-6 rounded relative w-full mx-auto dark:text-white"> 21 {{ block "repoContent" . }}{{ end }} 22 </section> 23 {{ block "repoAfter" . }}{{ end }} 24 </div> 25 <div class="col-span-1 md:col-span-3 flex flex-col gap-6"> 26 {{ template "repo/fragments/labelPanel" 27 (dict "RepoInfo" $.RepoInfo 28 "Defs" $.LabelDefs 29 "Subject" $.Pull.AtUri 30 "State" $.Pull.Labels) }} 31 {{ template "repo/fragments/participants" $.Pull.Participants }} 32 {{ template "repo/fragments/backlinks" 33 (dict "RepoInfo" $.RepoInfo 34 "Backlinks" $.Backlinks) }} 35 {{ template "repo/fragments/externalLinkPanel" $.Pull.AtUri }} 36 </div> 37 38 <div class="col-span-1 md:col-span-7"> 39 {{ template "repo/fragments/diff" (list .Diff .DiffOpts) }} 40 </div> 41 <div class="col-span-1 md:col-span-3 flex flex-col max-h-dvh sticky top-0"> 42 <div class="z-20 sticky top-0 rounded-t p-3 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700"> 43 <h2 class="font-bold uppercase">history</h2> 44 </div> 45 <div class="flex flex-col-reverse gap-4 overflow-y-auto"> 46 {{ template "submissions2" . }} 47 </div> 48 </div> 49 </div> 50{{ end }} 51 52{{ define "repoContent" }} 53 {{ template "repo/pulls/fragments/pullHeader" . }} 54 55 {{ if .Pull.IsStacked }} 56 <div class="mt-8"> 57 {{ template "repo/pulls/fragments/pullStack" . }} 58 </div> 59 {{ end }} 60{{ end }} 61 62{{ define "repoAfter" }} 63 <div id="pull-close"></div> 64 <div id="pull-reopen"></div> 65{{ end }} 66 67{{ define "submissions2" }} 68 {{ $lastIdx := sub (len .Pull.Submissions) 1 }} 69 {{ range $ridx, $item := reverse .Pull.Submissions }} 70 {{ $idx := sub $lastIdx $ridx }} 71 <div class="rounded border border-gray-200 dark:border-gray-700 w-full shadow-sm bg-gray-50 dark:bg-gray-800/50"> 72 {{ with $item }} 73 {{ $patches := .AsFormatPatch }} 74 {{ $round := .RoundNumber }} 75 <div class="rounded px-6 py-4 bg-white dark:bg-gray-800 flex gap-2"> 76 <div class="flex-shrink-0"> 77 <img 78 src="{{ tinyAvatar $.Pull.OwnerDid }}" 79 alt="" 80 class="rounded-full size-8 mr-1 border-2 border-gray-100 dark:border-gray-900" 81 /> 82 </div> 83 <!-- right column: name and body in two rows --> 84 <div class="flex-1 min-w-0 flex flex-col gap-2"> 85 <div class="flex gap-2 items-center justify-between mb-1"> 86 <span class="inline-flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400 hover:text-gray-500"> 87 {{ resolve $.Pull.OwnerDid }} submitted v{{ $round }} 88 <span class="select-none before:content-['\00B7']"></span> 89 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ $round }}">{{ template "repo/fragments/shortTimeAgo" .Created }}</a> 90 </span> 91 {{ if ne $idx 0 }} 92 <a class="flex items-center gap-2 no-underline hover:no-underline text-sm" 93 hx-boost="true" 94 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{$round}}/interdiff"> 95 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }} 96 <span class="hidden md:inline">interdiff</span> 97 </a> 98 {{ end }} 99 </div> 100 <div> 101 {{ if eq 1 (len $patches) }} 102 <!-- only one commit, just inline the message into the round header --> 103 {{ $commit := index $patches 0 }} 104 <span>{{ $commit.Title | description }}</span> 105 {{ if gt (len $commit.Body) 0 }} 106 <p id="body-{{$round}}-{{$commit.SHA}}" class="mt-1 pb-2"> 107 {{ nl2br $commit.Body }} 108 </p> 109 {{ end }} 110 {{ else }} 111 <span>Commits:</span> 112 {{ range $patches }} 113 <div id="commit-{{.SHA}}" class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col"> 114 <div class="flex items-center gap-2"> 115 {{ i "git-commit-horizontal" "w-4 h-4 flex-shrink-0" }} 116 <div class="flex items-center"> 117 <span>{{ .Title | description }}</span> 118 {{ if gt (len .Body) 0 }} 119 <button 120 class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600" 121 hx-on:click="document.getElementById('body-{{$round}}-{{.SHA}}').classList.toggle('hidden')" 122 > 123 {{ i "ellipsis" "w-3 h-3" }} 124 </button> 125 {{ end }} 126 </div> 127 </div> 128 {{ if gt (len .Body) 0 }} 129 <p id="body-{{$round}}-{{.SHA}}" class="hidden mt-1 text-sm pb-2"> 130 {{ nl2br .Body }} 131 </p> 132 {{ end }} 133 </div> 134 {{ end }} 135 {{ end }} 136 </div> 137 <div> 138 {{ block "pipelineStatus" (list $ .) }} {{ end }} 139 </div> 140 </div> 141 </div> 142 <div class="relative ml-10 border-l-2 border-gray-200 dark:border-gray-700"> 143 {{ range $cidx, $c := .Comments }} 144 <div id="comment-{{$c.ID}}" class="flex gap-2 -ml-4 py-4 w-full mx-auto"> 145 <!-- left column: profile picture --> 146 <div class="flex-shrink-0"> 147 <img 148 src="{{ tinyAvatar $c.OwnerDid }}" 149 alt="" 150 class="rounded-full size-8 mr-1 border-2 border-gray-100 dark:border-gray-900" 151 /> 152 </div> 153 <!-- right column: name and body in two rows --> 154 <div class="flex-1 min-w-0"> 155 <!-- Row 1: Author and timestamp --> 156 <div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1"> 157 <span>{{ resolve $c.OwnerDid }}</span> 158 <span class="before:content-['·']"></span> 159 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}">{{ template "repo/fragments/time" $c.Created }}</a> 160 </div> 161 <!-- Row 2: Body text --> 162 <div class="prose dark:prose-invert mt-1"> 163 {{ $c.Body | markdown }} 164 </div> 165 </div> 166 </div> 167 {{ end }} 168 </div> 169 {{ end }} 170 {{ if eq $lastIdx .RoundNumber }} 171 {{ block "mergeStatus" $ }} {{ end }} 172 {{ block "resubmitStatus" $ }} {{ end }} 173 {{ end }} 174 {{ if $.LoggedInUser }} 175 {{ if eq $lastIdx .RoundNumber }} 176 {{ template "newComment" (list $ .) }} 177 {{ else }} 178 {{ template "repo/pulls/fragments/replyPullCommentPlaceholder" (dict "LoggedInUser" $.LoggedInUser "Submission" .) }} 179 {{ end }} 180 {{ else }} 181 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm p-2 relative flex gap-2 items-center"> 182 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 183 sign up 184 </a> 185 <span class="text-gray-500 dark:text-gray-400">or</span> 186 <a href="/login" class="underline">login</a> 187 to add to the discussion 188 </div> 189 {{ end }} 190 </div> 191 {{ end }} 192{{ end }} 193 194{{ define "newComment" }} 195 {{ $root := index . 0 }} 196 {{ $submission := index . 1 }} 197 <form 198 id="comment-form" 199 hx-post="/{{ $root.RepoInfo.FullName }}/pulls/{{ $root.Pull.PullId }}/round/{{ $submission.RoundNumber }}/comment" 200 hx-on::after-request="if(event.detail.successful) this.reset()" 201 > 202 <div class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-4 px-4 relative w-full"> 203 <div class="text-sm pb-2 text-gray-500 dark:text-gray-400"> 204 {{ template "user/fragments/picHandleLink" $root.LoggedInUser.Did }} 205 </div> 206 <textarea 207 id="comment-textarea" 208 name="body" 209 class="w-full p-2 rounded border border-gray-200 dark:border-gray-700" 210 placeholder="Add to the discussion" 211 rows="8" 212 ></textarea> 213 <div id="pull-comment"></div> 214 </div> 215 {{ template "replyActions" . }} 216 </form> 217{{ end }} 218 219{{ define "replyActions" }} 220 <div class="flex flex-wrap items-stretch justify-end gap-2 text-gray-500 dark:text-gray-400 text-sm"> 221 {{ template "cancel" . }} 222 {{ template "reply" . }} 223 </div> 224{{ end }} 225 226{{ define "cancel" }} 227 <button 228 class="btn text-red-500 dark:text-red-400 flex gap-2 items-center group" 229 hx-get="TODO" 230 hx-target="TODO" 231 hx-swap="outerHTML"> 232 {{ i "x" "size-4" }} 233 cancel 234 </button> 235{{ end }} 236 237{{ define "reply" }} 238 <button 239 id="TODO" 240 type="submit" 241 class="btn-create flex items-center gap-2 no-underline hover:no-underline"> 242 {{ i "reply" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 243 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 244 reply 245 </button> 246{{ end }} 247 248{{ define "submissions" }} 249 {{ $lastIdx := sub (len .Pull.Submissions) 1 }} 250 {{ $targetBranch := .Pull.TargetBranch }} 251 {{ $repoName := .RepoInfo.FullName }} 252 {{ range $idx, $item := .Pull.Submissions }} 253 {{ with $item }} 254 <details {{ if eq $idx $lastIdx }}open{{ end }}> 255 <summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer"> 256 <div class="flex flex-wrap gap-2 items-stretch"> 257 <!-- round number --> 258 <div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white"> 259 <span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .RoundNumber }}</span> 260 </div> 261 <!-- round summary --> 262 <div class="flex-1 rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400"> 263 <span class="gap-1 flex items-center"> 264 {{ $owner := resolve $.Pull.OwnerDid }} 265 {{ $re := "re" }} 266 {{ if eq .RoundNumber 0 }} 267 {{ $re = "" }} 268 {{ end }} 269 <span class="hidden md:inline">{{$re}}submitted</span> 270 by {{ template "user/fragments/picHandleLink" $.Pull.OwnerDid }} 271 <span class="select-none before:content-['\00B7']"></span> 272 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}">{{ template "repo/fragments/shortTime" .Created }}</a> 273 <span class="select-none before:content-['·']"></span> 274 {{ $s := "s" }} 275 {{ if eq (len .Comments) 1 }} 276 {{ $s = "" }} 277 {{ end }} 278 {{ len .Comments }} comment{{$s}} 279 </span> 280 </div> 281 282 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group" 283 hx-boost="true" 284 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}"> 285 {{ i "file-diff" "w-4 h-4" }} 286 <span class="hidden md:inline">diff</span> 287 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 288 </a> 289 {{ if ne $idx 0 }} 290 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group" 291 hx-boost="true" 292 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}/interdiff"> 293 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }} 294 <span class="hidden md:inline">interdiff</span> 295 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 296 </a> 297 {{ end }} 298 <span id="interdiff-error-{{.RoundNumber}}"></span> 299 </div> 300 </summary> 301 302 {{ if .IsFormatPatch }} 303 {{ $patches := .AsFormatPatch }} 304 {{ $round := .RoundNumber }} 305 <details class="group py-2 md:ml-[3.5rem] text-gray-500 dark:text-gray-400 flex flex-col gap-2 relative text-sm"> 306 <summary class="py-1 list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 307 {{ $s := "s" }} 308 {{ if eq (len $patches) 1 }} 309 {{ $s = "" }} 310 {{ end }} 311 <div class="group-open:hidden flex items-center gap-2 ml-2"> 312 {{ i "chevrons-up-down" "w-4 h-4" }} expand {{ len $patches }} commit{{$s}} 313 </div> 314 <div class="hidden group-open:flex items-center gap-2 ml-2"> 315 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len $patches }} commit{{$s}} 316 </div> 317 </summary> 318 {{ range $patches }} 319 <div id="commit-{{.SHA}}" class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col"> 320 <div class="flex items-center gap-2"> 321 {{ i "git-commit-horizontal" "w-4 h-4" }} 322 <div class="text-sm text-gray-500 dark:text-gray-400"> 323 <!-- attempt to resolve $fullRepo: this is possible only on non-deleted forks and branches --> 324 {{ $fullRepo := "" }} 325 {{ if and $.Pull.IsForkBased $.Pull.PullSource.Repo }} 326 {{ $fullRepo = printf "%s/%s" $owner $.Pull.PullSource.Repo.Name }} 327 {{ else if $.Pull.IsBranchBased }} 328 {{ $fullRepo = $.RepoInfo.FullName }} 329 {{ end }} 330 331 <!-- if $fullRepo was resolved, link to it, otherwise just span without a link --> 332 {{ if $fullRepo }} 333 <a href="/{{ $fullRepo }}/commit/{{ .SHA }}" class="font-mono text-gray-500 dark:text-gray-400">{{ slice .SHA 0 8 }}</a> 334 {{ else }} 335 <span class="font-mono">{{ slice .SHA 0 8 }}</span> 336 {{ end }} 337 </div> 338 <div class="flex items-center"> 339 <span>{{ .Title | description }}</span> 340 {{ if gt (len .Body) 0 }} 341 <button 342 class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600" 343 hx-on:click="document.getElementById('body-{{$round}}-{{.SHA}}').classList.toggle('hidden')" 344 > 345 {{ i "ellipsis" "w-3 h-3" }} 346 </button> 347 {{ end }} 348 </div> 349 </div> 350 {{ if gt (len .Body) 0 }} 351 <p id="body-{{$round}}-{{.SHA}}" class="hidden mt-1 text-sm pb-2"> 352 {{ nl2br .Body }} 353 </p> 354 {{ end }} 355 </div> 356 {{ end }} 357 </details> 358 {{ end }} 359 360 361 <div class="md:pl-[3.5rem] flex flex-col gap-2 mt-2 relative"> 362 {{ range $cidx, $c := .Comments }} 363 <div id="comment-{{$c.ID}}" class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-2 px-4 relative w-full"> 364 {{ if gt $cidx 0 }} 365 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 366 {{ end }} 367 <div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1"> 368 {{ template "user/fragments/picHandleLink" $c.OwnerDid }} 369 <span class="before:content-['·']"></span> 370 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}">{{ template "repo/fragments/time" $c.Created }}</a> 371 </div> 372 <div class="prose dark:prose-invert"> 373 {{ $c.Body | markdown }} 374 </div> 375 </div> 376 {{ end }} 377 378 {{ block "pipelineStatus" (list $ .) }} {{ end }} 379 380 {{ if eq $lastIdx .RoundNumber }} 381 {{ block "mergeStatus" $ }} {{ end }} 382 {{ block "resubmitStatus" $ }} {{ end }} 383 {{ end }} 384 385 {{ if $.LoggedInUser }} 386 {{ template "repo/pulls/fragments/pullActions" 387 (dict 388 "LoggedInUser" $.LoggedInUser 389 "Pull" $.Pull 390 "RepoInfo" $.RepoInfo 391 "RoundNumber" .RoundNumber 392 "MergeCheck" $.MergeCheck 393 "ResubmitCheck" $.ResubmitCheck 394 "BranchDeleteStatus" $.BranchDeleteStatus 395 "Stack" $.Stack) }} 396 {{ else }} 397 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm p-2 relative flex gap-2 items-center w-fit"> 398 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 399 sign up 400 </a> 401 <span class="text-gray-500 dark:text-gray-400">or</span> 402 <a href="/login" class="underline">login</a> 403 to add to the discussion 404 </div> 405 {{ end }} 406 </div> 407 </details> 408 {{ end }} 409 {{ end }} 410{{ end }} 411 412{{ define "mergeStatus" }} 413 {{ if .Pull.State.IsClosed }} 414 <div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded drop-shadow-sm px-6 py-2 relative"> 415 <div class="flex items-center gap-2 text-black dark:text-white"> 416 {{ i "ban" "w-4 h-4" }} 417 <span class="font-medium">closed without merging</span 418 > 419 </div> 420 </div> 421 {{ else if .Pull.State.IsMerged }} 422 <div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative"> 423 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300"> 424 {{ i "git-merge" "w-4 h-4" }} 425 <span class="font-medium">pull request successfully merged</span 426 > 427 </div> 428 </div> 429 {{ else if .Pull.State.IsDeleted }} 430 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative"> 431 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 432 {{ i "git-pull-request-closed" "w-4 h-4" }} 433 <span class="font-medium">This pull has been deleted (possibly by jj abandon or jj squash)</span> 434 </div> 435 </div> 436 {{ else if and .MergeCheck .MergeCheck.Error }} 437 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative"> 438 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 439 {{ i "triangle-alert" "w-4 h-4" }} 440 <span class="font-medium">{{ .MergeCheck.Error }}</span> 441 </div> 442 </div> 443 {{ else if and .MergeCheck .MergeCheck.IsConflicted }} 444 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative"> 445 <details class="text-red-500 dark:text-red-300 group"> 446 <summary class="flex items-center justify-between cursor-pointer list-none"> 447 <div class="flex items-center gap-2 "> 448 {{ i "triangle-alert" "w-4 h-4" }} 449 <span class="font-medium">merge conflicts detected</span> 450 </div> 451 <div> 452 <span class="group-open:hidden inline">{{ i "chevrons-up-down" "w-4 h-4" }}</span> 453 <span class="hidden group-open:inline">{{ i "chevrons-down-up" "w-4 h-4" }}</span> 454 </div> 455 </summary> 456 {{ if gt (len .MergeCheck.Conflicts) 0 }} 457 <ul class="space-y-1 mt-2"> 458 {{ range .MergeCheck.Conflicts }} 459 {{ if .Filename }} 460 <li class="flex items-center"> 461 {{ i "file-warning" "inline-flex w-4 h-4 mr-1.5 text-red-500 dark:text-red-300 flex-shrink-0" }} 462 <span class="font-mono" style="word-break: keep-all; overflow-wrap: break-word;">{{ .Filename }}</span> 463 </li> 464 {{ else if .Reason }} 465 <li class="flex items-center"> 466 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }} 467 <span>{{.Reason}}</span> 468 </li> 469 {{ end }} 470 {{ end }} 471 </ul> 472 {{ end }} 473 </details> 474 </div> 475 {{ else if .MergeCheck }} 476 <div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative"> 477 <div class="flex items-center gap-2 text-green-500 dark:text-green-300"> 478 {{ i "circle-check-big" "w-4 h-4" }} 479 <span class="font-medium">no conflicts, ready to merge</span> 480 </div> 481 </div> 482 {{ end }} 483{{ end }} 484 485{{ define "resubmitStatus" }} 486 {{ if .ResubmitCheck.Yes }} 487 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative"> 488 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300"> 489 {{ i "triangle-alert" "w-4 h-4" }} 490 <span class="font-medium">this branch has been updated, consider resubmitting</span> 491 </div> 492 </div> 493 {{ end }} 494{{ end }} 495 496{{ define "pipelineStatus" }} 497 {{ $root := index . 0 }} 498 {{ $submission := index . 1 }} 499 {{ $pipeline := index $root.Pipelines $submission.SourceRev }} 500 {{ with $pipeline }} 501 {{ $id := .Id }} 502 {{ if .Statuses }} 503 <span>Workflows:</span> 504 <div class=" grid grid-cols-1 bg-white dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 divide-y divide-gray-200 dark:divide-gray-700"> 505 {{ range $name, $all := .Statuses }} 506 <a href="/{{ $root.RepoInfo.FullName }}/pipelines/{{ $id }}/workflow/{{ $name }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 507 <div 508 class="flex gap-2 items-center justify-between p-2"> 509 {{ $lastStatus := $all.Latest }} 510 {{ $kind := $lastStatus.Status.String }} 511 512 <div id="left" class="flex items-center gap-2 flex-shrink-0"> 513 {{ template "repo/pipelines/fragments/workflowSymbol" $all }} 514 {{ $name }} 515 </div> 516 <div id="right" class="flex items-center gap-2 flex-shrink-0"> 517 <span class="font-bold">{{ $kind }}</span> 518 {{ if .TimeTaken }} 519 {{ template "repo/fragments/duration" .TimeTaken }} 520 {{ else }} 521 {{ template "repo/fragments/shortTimeAgo" $lastStatus.Created }} 522 {{ end }} 523 </div> 524 </div> 525 </a> 526 {{ end }} 527 </div> 528 {{ end }} 529 {{ end }} 530{{ end }}