Commit 33aaa49
Eric Bower
·
2026-05-06 22:14:53 -0400 EDT
parent f4ac402
fix: runner cannot be in the zmx session prefix
M
main.go
+22,
-5
| ... | ... | @@ -345,15 +345,31 @@ func (eng *JobEngine) Run() error { | |
| 345 | 345 | } | |
| 346 | 346 | ||
| 347 | 347 | prefix := fmt.Sprintf("ci.%s.%s.", eng.Ev.Name, eng.JobID) | |
| 348 | + | // Child sessions use ".step." sub-prefix so zmx wait "*" inside pico.sh | |
| 349 | + | // matches ci.<name>.<jobID>.step.* but NOT ci.<name>.<jobID>.runner. | |
| 350 | + | // This avoids a deadlock where the runner waits for itself. | |
| 351 | + | childPrefix := prefix + "step." | |
| 348 | 352 | ||
| 349 | 353 | log := eng.Logger.With("manifest", manifest, "prefix", prefix) | |
| 350 | 354 | log.Debug("starting runner session", "session", prefix+"runner") | |
| 351 | 355 | ||
| 352 | 356 | evStr := fmt.Sprintf("PICO_CI_EVENT=%s", eng.Ev.Type) | |
| 353 | - | jobStr := fmt.Sprintf("ZMX_SESSION_PREFIX=%s", prefix) | |
| 357 | + | jobStr := fmt.Sprintf("ZMX_SESSION_PREFIX=%s", childPrefix) | |
| 358 | + | ||
| 359 | + | runnerName := prefix + "runner" | |
| 360 | + | // Name the runner explicitly and don't set ZMX_SESSION_PREFIX for this | |
| 361 | + | // outer zmx run call. The prefix is only for child sessions spawned | |
| 362 | + | // inside pico.sh (via the exported env var). | |
| 363 | + | cmdEnv := make([]string, 0, len(os.Environ())+2) | |
| 364 | + | for _, e := range os.Environ() { | |
| 365 | + | if !strings.HasPrefix(e, "ZMX_SESSION_PREFIX=") { | |
| 366 | + | cmdEnv = append(cmdEnv, e) | |
| 367 | + | } | |
| 368 | + | } | |
| 369 | + | cmdEnv = append(cmdEnv, evStr, jobStr) | |
| 354 | 370 | ||
| 355 | - | cmd := exec.Command("zmx", "run", "runner", "-d", "bash", manifest) | |
| 356 | - | cmd.Env = append(os.Environ(), evStr, jobStr) | |
| 371 | + | cmd := exec.Command("zmx", "run", runnerName, "-d", "bash", manifest) | |
| 372 | + | cmd.Env = cmdEnv | |
| 357 | 373 | cmd.Dir = eng.Wk.GetDir() | |
| 358 | 374 | ||
| 359 | 375 | if err := cmd.Run(); err != nil { |
| ... | ... | @@ -1105,8 +1121,9 @@ func runGC(cfg *Cfg) error { | |
| 1105 | 1121 | // extractJobPrefix extracts the job prefix from a session name. | |
| 1106 | 1122 | // ci.<name>.<jobID>.<step> -> ci.<name>.<jobID>. | |
| 1107 | 1123 | func extractJobPrefix(sessionName string) string { | |
| 1108 | - | // Find the third dot (after ci.<name>.<jobID>) | |
| 1109 | - | // ci.name.jobID.step -> ci.name.jobID. | |
| 1124 | + | // Extract the job key ci.<name>.<jobID> from session names: | |
| 1125 | + | // ci.name.jobID.runner (4 parts) → ci.name.jobID. | |
| 1126 | + | // ci.name.jobID.step.lint (5 parts) → ci.name.jobID. | |
| 1110 | 1127 | parts := strings.Split(sessionName, ".") | |
| 1111 | 1128 | if len(parts) < 4 { | |
| 1112 | 1129 | return "" |
M
pico.sh
+2,
-2
| ... | ... | @@ -1,12 +1,12 @@ | |
| 1 | 1 | #!/usr/bin/env bash | |
| 2 | 2 | set -xeuo pipefail | |
| 3 | 3 | ||
| 4 | - | export ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci-}" | |
| 4 | + | export ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci.}" | |
| 5 | 5 | ||
| 6 | 6 | printf "\x1b[33mrunning ci\x1b[0m\n" | |
| 7 | 7 | ||
| 8 | 8 | zmx run lint -d docker run -t --rm -v $(pwd):/app -w /app golangci/golangci-lint:v2.11.4 golangci-lint run | |
| 9 | 9 | zmx run test -d docker run -t --rm -v $(pwd):/app -w /app golang:1.26 go test ./... | |
| 10 | - | zmx wait lint test | |
| 10 | + | zmx wait "*" | |
| 11 | 11 | ||
| 12 | 12 | printf "\x1b[32msuccess!\x1b[0m\n" |