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 start service containers beside it
c1929d2fceb5e9e65204d5eef907d0781b9a5391 · Keenan Nemetz · 5d ago · parent 1d06b008
server/ssh/runner.go +12
| @@ -150,6 +150,12 @@ type runnerStep struct { | |||
| 150 | 150 | Timeout string `json:"timeout"` | |
| 151 | 151 | } | |
| 152 | 152 | ||
| 153 | type runnerService struct { | ||
| 154 | ID string `json:"id"` | ||
| 155 | Image string `json:"image"` | ||
| 156 | Env map[string]string `json:"env,omitempty"` | ||
| 157 | } | ||
| 158 | |||
| 153 | 159 | type runnerJob struct { | |
| 154 | 160 | ID string `json:"id"` | |
| 155 | 161 | Repo string `json:"repo"` | |
| @@ -200,6 +206,9 @@ type runnerJob struct { | |||
| 200 | 206 | ImageSHA string `json:"image_sha,omitempty"` | |
| 201 | 207 | // Env is the job's declared environment, pinned when the run was queued. | |
| 202 | 208 | Env map[string]string `json:"env,omitempty"` | |
| 209 | // Services are the containers the job asked to run beside it, pinned when the | ||
| 210 | // run was queued. The runner gives the job and these one network for the attempt. | ||
| 211 | Services []runnerService `json:"services,omitempty"` | ||
| 203 | 212 | // Secrets are the values the job declared that this repository has, and Missing | |
| 204 | 213 | // are the names it declared that it does not. A missing name is not a failure: | |
| 205 | 214 | // the variable is left unset and the runner says so at the top of the log. The | |
| @@ -374,6 +383,9 @@ func (s *Server) serveRunner(ch xssh.Channel, user string) { | |||
| 374 | 383 | for _, st := range run.Steps { | |
| 375 | 384 | job.Steps = append(job.Steps, runnerStep{Name: st.Name, Run: st.Run, Timeout: st.Timeout}) | |
| 376 | 385 | } | |
| 386 | for _, svc := range run.Services { | ||
| 387 | job.Services = append(job.Services, runnerService{ID: svc.ID, Image: svc.Image, Env: svc.Env}) | ||
| 388 | } | ||
| 377 | 389 | // A job that acts as a bot gets a key for this run only. The account and | |
| 378 | 390 | // the repository are pinned in the row, so the hook can refuse a write that | |
| 379 | 391 | // the account's role would not allow and the key stops working when the run | |