Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Build out change review and threaded discussions

f6f4b1db24292d1df877680714952a9c568e2b78 · Keenan Nemetz · 15d ago · parent 564acd4b

Build out change review and threaded discussions

- Add Conversation, Files and Runs tabs to change requests. Files uses the
  code-browser shape with a changed-file tree and one selected-file diff;
  Runs lists the head commit's workflow results.
- Show anchored review comments beneath the line, with a collapsed excerpt
  read from the exact blob that was reviewed, and return posted anchors to
  their line note.
- Add comment threads: any comment can be replied to, the UI flattens the
  descendants under one root, reply context links back to the parent, and
  reply targets feed a single composer at the foot of the discussion.
- Collapse reply groups while keeping the root visible, and scroll to the
  composer when Reply is selected.
- Add comment context menus with Reply, Copy text, Copy link, Edit and
  Delete. Add web edit/delete routes with author or admin checks; deletion
  leaves a tombstone so replies keep their thread.
- Support --reply-to in the issue and change CLI commands, and treat a
  missing parent as a tombstone rather than an invalid tree.
- Fix the diff comment gutter, action button colours, reply labels, and
  keep the Files tree and diff pane aligned.

Update metadata validation, web templates, CSS, JavaScript, tests, and the
CLI/change-request/issue docs.

server/web/templates/request_runs.html +43

@@ -0,0 +1,43 @@
1 {{define "request_runs"}}
2 {{template "header" .}}
3 {{template "repohead" (nav .Name "requests")}}
4 {{template "request_head" .}}
5 {{template "request_tabs" .}}
6
7 <div class="thread">
8 <div class="thread-main">
9 <div class="with-more">
10 <h2>{{icon "play"}}Workflow results</h2>
11 <span class="muted">{{len .Runs}} result(s) for <a class="sha" href="/r/{{.Name}}/commit/{{.Request.Head}}">{{short .Request.Head}}</a></span>
12 </div>
13
14 {{if .Runs}}
15 <div class="panel">
16 <table>
17 <thead>
18 <tr><th>Status</th><th>Job</th><th>Attempts</th><th>Age</th><th></th></tr>
19 </thead>
20 <tbody>
21 {{range .Runs}}
22 <tr>
23 <td class="fit"><span class="status {{.Status}}">{{.Status}}</span></td>
24 <td><a href="/r/{{$.Name}}/runs/{{.ID}}">{{.Job}}</a> <span class="muted">{{.Workflow}}</span></td>
25 <td class="muted">{{.Attempts}}</td>
26 <td class="muted nowrap">{{since .Created.Unix}}</td>
27 <td>{{if or .LogOID .Log}}<a href="/r/{{$.Name}}/runs/{{.ID}}/log">log</a>{{end}}</td>
28 </tr>
29 {{end}}
30 </tbody>
31 </table>
32 </div>
33 {{else}}
34 <p class="muted">No workflow runs for this commit yet.</p>
35 {{end}}
36 </div>
37
38 <aside class="thread-side">
39 {{template "request_sidebar" .}}
40 </aside>
41 </div>
42 {{template "footer" .}}
43 {{end}}