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.

Let a job declare the network it needs

d79580247b8f33f7ffdf2f05847733cad12c187a · Keenan Nemetz · 6d ago · parent 4ac42680

Let a job declare the network it needs

A runner's --container-network decided the network for every job it took, so a
machine that could reach the network gave it to builds that never asked, and a
job that did need one could be handed to a machine that had none. The docs said
"add bridge only when a job needs it", which no workflow could express.

A job now says `network: none` or `network: bridge`. The request is pinned with
the run, and the lease only hands a bridge job to a runner that advertises the
capability, so a job waits for a capable machine instead of failing on one that
never could. The runner applies the job's request to its container, which means a
bridge runner can still withhold the network from a job that asked for none.

A job that declares nothing keeps the runner's own setting, which is what every
workflow meant before this field existed. The local run applies the same rule and
refuses a bridge job when it was started without one, so `vole workflow run` either
matches CI or says what to change on the command line.

The workflows page, the run page, and the runner's log line now say what a job
asked for and what it ran with. verify.yaml and release.yaml are deliberately not
in this change: the instance validates a pushed workflow with the binary it is
running, so they can declare the field once that binary knows it.

Closes #159.

server/web/templates/workflows.html +2−1

@@ -41,7 +41,8 @@
41 41 {{if .Description}}<div class="muted">{{.Description}}</div>{{end}}
42 42 </td>
43 43 <td class="muted">{{if .Labels}}{{join .Labels ", "}}{{else}}any runner{{end}}</td>
44 <td>{{if .Image}}<code>{{.Image}}</code>{{else}}<span class="muted">none</span>{{end}}</td>
44 <td>{{if .Image}}<code>{{.Image}}</code>{{else}}<span class="muted">none</span>{{end}}
45 {{if .Network}}<div class="muted">{{if eq .Network "none"}}no network{{else}}network {{.Network}}{{end}}</div>{{end}}</td>
45 46 <td class="muted">{{.Steps}}</td>
46 47 <td class="muted">{{.Artifacts}} artifact(s){{if .Pages}} · site{{end}}</td>
47 48 <td>