Commit bcba2bc

Eric Bower  ·  2026-05-07 15:09:00 -0400 EDT
parent f2b4c27
chore: inject env vars
2 files changed,  +25, -7
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"