Commit bcba2bc
Eric Bower
·
2026-05-07 15:09:00 -0400 EDT
parent f2b4c27
chore: inject env vars
M
main.go
+19,
-4
1@@ -231,6 +231,19 @@ EVENT JSON FIELDS
2 EXAMPLE
3 echo '{"type":"push","name":"myrepo","workspace":"git@github.com:user/myrepo.git"}' | pici runner
4
5+ENV VARS IN pico.sh
6+ The runner exports these environment variables for your pico.sh script:
7+ PICO_CI_JOB_ID Unique job identifier (e.g. "a3f2b8c1")
8+ PICO_CI_REPO Repository name (from event "name" field)
9+ PICO_CI_EVENT_TYPE Event type (from event "type" field)
10+
11+ Note: pico.sh runs with the workspace as its working directory, so
12+ $(pwd) gives you the workspace path directly.
13+
14+ Use them with defaults so pico.sh works standalone:
15+ JOB_ID="${PICO_CI_JOB_ID:-local}"
16+ REPO="${PICO_CI_REPO:-unknown}"
17+
18 FLAGS
19 -pk <path> SSH private key for authenticating with pico services
20 -ck <path> SSH certificate public key (required when using SSH certificates)
21@@ -372,20 +385,22 @@ func (eng *JobEngine) Run(manifest string) error {
22 log := eng.Logger.With("manifest", manifest, "prefix", prefix)
23 log.Debug("starting runner session", "session", prefix+"runner")
24
25- evStr := fmt.Sprintf("PICO_CI_EVENT=%s", eng.Ev.Type)
26-
27 runnerName := prefix + "runner"
28 // Name the runner explicitly. Do NOT set ZMX_SESSION_PREFIX for this
29 // outer zmx run call — it would be prepended to the runner's own name.
30 // The prefix is only for child sessions spawned inside pico.sh (via the
31 // exported env var).
32- cmdEnv := make([]string, 0, len(os.Environ())+2)
33+ cmdEnv := make([]string, 0, len(os.Environ())+5)
34 for _, e := range os.Environ() {
35 if !strings.HasPrefix(e, "ZMX_SESSION_PREFIX=") {
36 cmdEnv = append(cmdEnv, e)
37 }
38 }
39- cmdEnv = append(cmdEnv, evStr)
40+ cmdEnv = append(cmdEnv,
41+ fmt.Sprintf("PICO_CI_JOB_ID=%s", eng.JobID),
42+ fmt.Sprintf("PICO_CI_REPO=%s", eng.Ev.Name),
43+ fmt.Sprintf("PICO_CI_EVENT_TYPE=%s", eng.Ev.Type),
44+ )
45
46 zmxPrefixStr := fmt.Sprintf("ZMX_SESSION_PREFIX=%s", childPrefix)
47 cmd := exec.Command("zmx", "run", runnerName, "-d", zmxPrefixStr, "bash", manifest)
M
pico.sh
+6,
-3
1@@ -1,12 +1,15 @@
2 #!/usr/bin/env bash
3 set -euo pipefail
4
5-export ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci.}"
6+ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci.}"
7+JOB_ID="${PICO_CI_JOB_ID:-local}"
8+REPO="${PICO_CI_REPO:-unknown}"
9+EVENT_TYPE="${PICO_CI_EVENT_TYPE:-manual}"
10
11-printf "\x1b[33mrunning ci\x1b[0m\n"
12+printf "\x1b[33m[%s:%s] running ci (event=%s)\x1b[0m\n" "$REPO" "$JOB_ID" "$EVENT_TYPE"
13
14 zmx run lint -d docker run -t --rm -v $(pwd):/app -w /app golangci/golangci-lint:v2.11.4 golangci-lint run
15 zmx run test -d docker run -t --rm -v $(pwd):/app -w /app golang:1.26 go test ./...
16 zmx wait "*"
17
18-printf "\x1b[32msuccess!\x1b[0m\n"
19+printf "\x1b[32m[%s:%s] success!\x1b[0m\n" "$REPO" "$JOB_ID"