Commit bcba2bc
Eric Bower
·
2026-05-07 15:09:00 -0400 EDT
parent f2b4c27
chore: inject env vars
M
main.go
+19,
-4
| ... | ... | @@ -231,6 +231,19 @@ EVENT JSON FIELDS | |
| 231 | 231 | EXAMPLE | |
| 232 | 232 | echo '{"type":"push","name":"myrepo","workspace":"git@github.com:user/myrepo.git"}' | pici runner | |
| 233 | 233 | ||
| 234 | + | ENV VARS IN pico.sh | |
| 235 | + | The runner exports these environment variables for your pico.sh script: | |
| 236 | + | PICO_CI_JOB_ID Unique job identifier (e.g. "a3f2b8c1") | |
| 237 | + | PICO_CI_REPO Repository name (from event "name" field) | |
| 238 | + | PICO_CI_EVENT_TYPE Event type (from event "type" field) | |
| 239 | + | ||
| 240 | + | Note: pico.sh runs with the workspace as its working directory, so | |
| 241 | + | $(pwd) gives you the workspace path directly. | |
| 242 | + | ||
| 243 | + | Use them with defaults so pico.sh works standalone: | |
| 244 | + | JOB_ID="${PICO_CI_JOB_ID:-local}" | |
| 245 | + | REPO="${PICO_CI_REPO:-unknown}" | |
| 246 | + | ||
| 234 | 247 | FLAGS | |
| 235 | 248 | -pk <path> SSH private key for authenticating with pico services | |
| 236 | 249 | -ck <path> SSH certificate public key (required when using SSH certificates) |
| ... | ... | @@ -372,20 +385,22 @@ func (eng *JobEngine) Run(manifest string) error { | |
| 372 | 385 | log := eng.Logger.With("manifest", manifest, "prefix", prefix) | |
| 373 | 386 | log.Debug("starting runner session", "session", prefix+"runner") | |
| 374 | 387 | ||
| 375 | - | evStr := fmt.Sprintf("PICO_CI_EVENT=%s", eng.Ev.Type) | |
| 376 | - | ||
| 377 | 388 | runnerName := prefix + "runner" | |
| 378 | 389 | // Name the runner explicitly. Do NOT set ZMX_SESSION_PREFIX for this | |
| 379 | 390 | // outer zmx run call — it would be prepended to the runner's own name. | |
| 380 | 391 | // The prefix is only for child sessions spawned inside pico.sh (via the | |
| 381 | 392 | // exported env var). | |
| 382 | - | cmdEnv := make([]string, 0, len(os.Environ())+2) | |
| 393 | + | cmdEnv := make([]string, 0, len(os.Environ())+5) | |
| 383 | 394 | for _, e := range os.Environ() { | |
| 384 | 395 | if !strings.HasPrefix(e, "ZMX_SESSION_PREFIX=") { | |
| 385 | 396 | cmdEnv = append(cmdEnv, e) | |
| 386 | 397 | } | |
| 387 | 398 | } | |
| 388 | - | cmdEnv = append(cmdEnv, evStr) | |
| 399 | + | cmdEnv = append(cmdEnv, | |
| 400 | + | fmt.Sprintf("PICO_CI_JOB_ID=%s", eng.JobID), | |
| 401 | + | fmt.Sprintf("PICO_CI_REPO=%s", eng.Ev.Name), | |
| 402 | + | fmt.Sprintf("PICO_CI_EVENT_TYPE=%s", eng.Ev.Type), | |
| 403 | + | ) | |
| 389 | 404 | ||
| 390 | 405 | zmxPrefixStr := fmt.Sprintf("ZMX_SESSION_PREFIX=%s", childPrefix) | |
| 391 | 406 | cmd := exec.Command("zmx", "run", runnerName, "-d", zmxPrefixStr, "bash", manifest) |
M
pico.sh
+6,
-3
| ... | ... | @@ -1,12 +1,15 @@ | |
| 1 | 1 | #!/usr/bin/env bash | |
| 2 | 2 | set -euo pipefail | |
| 3 | 3 | ||
| 4 | - | export ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci.}" | |
| 4 | + | ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci.}" | |
| 5 | + | JOB_ID="${PICO_CI_JOB_ID:-local}" | |
| 6 | + | REPO="${PICO_CI_REPO:-unknown}" | |
| 7 | + | EVENT_TYPE="${PICO_CI_EVENT_TYPE:-manual}" | |
| 5 | 8 | ||
| 6 | - | printf "\x1b[33mrunning ci\x1b[0m\n" | |
| 9 | + | printf "\x1b[33m[%s:%s] running ci (event=%s)\x1b[0m\n" "$REPO" "$JOB_ID" "$EVENT_TYPE" | |
| 7 | 10 | ||
| 8 | 11 | zmx run lint -d docker run -t --rm -v $(pwd):/app -w /app golangci/golangci-lint:v2.11.4 golangci-lint run | |
| 9 | 12 | zmx run test -d docker run -t --rm -v $(pwd):/app -w /app golang:1.26 go test ./... | |
| 10 | 13 | zmx wait "*" | |
| 11 | 14 | ||
| 12 | - | printf "\x1b[32msuccess!\x1b[0m\n" | |
| 15 | + | printf "\x1b[32m[%s:%s] success!\x1b[0m\n" "$REPO" "$JOB_ID" |