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/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

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

Make the run list say what triggered each run

57dc79afa8097830de03fc2fc2c19561470b6d36 · Keenan Nemetz · 6d ago · parent 338a19dd

Make the run list say what triggered each run

The runs table said only which ref a run used, so a push, an issue event
and a manual dispatch looked alike. Give each run a TriggerTitle and show
it in a "Triggered by" column; the run page uses the same words.

Drop the separate workflows page. The run list is where a job is found,
and the run page now links the workflow definition it ran, so a second
page listing the same jobs only split the answer.

Show the full log viewer only while a run is going. A finished run has
per-step logs, and the full log is a download rather than a second copy
of every step's output.

server/integration_test.go +26−2

@@ -2900,6 +2900,25 @@ jobs:
2900 2900 if body != string(stored) {
2901 2901 t.Fatalf("the served log differs from %s", logPath)
2902 2902 }
2903 dlReq, dlErr := http.NewRequest(http.MethodGet, f.http.URL+"/r/"+f.repo+"/runs/"+done.ID+"/log?download=1", nil)
2904 if dlErr != nil {
2905 t.Fatal(dlErr)
2906 }
2907 dlResp, dlErr := http.DefaultClient.Do(dlReq)
2908 if dlErr != nil {
2909 t.Fatal(dlErr)
2910 }
2911 downloaded, dlErr := io.ReadAll(dlResp.Body)
2912 dlResp.Body.Close()
2913 if dlErr != nil {
2914 t.Fatal(dlErr)
2915 }
2916 if cd := dlResp.Header.Get("Content-Disposition"); !strings.Contains(cd, "attachment") || !strings.Contains(cd, done.ID) {
2917 t.Fatalf("downloaded log Content-Disposition = %q", cd)
2918 }
2919 if string(downloaded) != string(stored) {
2920 t.Fatalf("the downloaded log differs from %s", logPath)
2921 }
2903 2922
2904 2923 // The result is stored in the database, not on the branch: the record names this
2905 2924 // job, its log and its outcome, and the queue records who reported it. Attribution
@@ -2949,9 +2968,14 @@ jobs:
2949 2968 t.Fatalf("range request = %d, Content-Range %q", resp.StatusCode, resp.Header.Get("Content-Range"))
2950 2969 }
2951 2970 // Attribution is the boundary's, and the page says who it accepted the result from.
2971 // A finished run shows each step once; the whole log is a download, not a second
2972 // copy of every step's output in an accordion above them.
2952 2973 if _, page := f.get("/r/" + f.repo + "/runs/" + done.ID); !strings.Contains(page, "reported by") ||
2953 !strings.Contains(page, "say hello") || !strings.Contains(page, "step=1") {
2954 t.Fatalf("the run page does not show the result, the step, or its log link:\n%s", page)
2974 !strings.Contains(page, "say hello") || !strings.Contains(page, "step=1") ||
2975 !strings.Contains(page, "Download full log") || !strings.Contains(page, "download=1") {
2976 t.Fatalf("the run page does not show the result, the step log, or the full-log download:\n%s", page)
2977 } else if strings.Contains(page, "data-log-stream") {
2978 t.Fatalf("the finished run page still shows the full live log viewer:\n%s", page)
2955 2979 }
2956 2980 if done.SHA != mustSHA(t, work) {
2957 2981 t.Fatalf("run recorded sha %s, want the pushed commit", done.SHA)