Commit f4ac402

Eric Bower  ·  2026-05-06 21:13:13 -0400 EDT
parent 9aad8f0
chore: cleanup
3 files changed,  +49, -8
M event.json
+1, -1
1@@ -1 +1 @@
2-{"type":"git.push","name":"pico","workspace":"/home/erock/dev/pico/"}
3+{"type":"git.push","name":"pici","workspace":"/home/erock/dev/pici/"}
M main.go
+36, -7
 1@@ -146,6 +146,10 @@ func main() {
 2 			os.Exit(1)
 3 		}
 4 	case "monitor":
 5+		if flag.Arg(1) == "--help" || flag.Arg(1) == "help" {
 6+			printMonitorHelp()
 7+			return
 8+		}
 9 		cfg.Logger.Debug("starting monitor")
10 		if err := runMonitor(cfg); err != nil {
11 			cfg.Logger.Error("monitor failed", "err", err)
12@@ -161,6 +165,33 @@ func main() {
13 	}
14 }
15 
16+func printMonitorHelp() {
17+	fmt.Println(`pici monitor — poll ci.* zmx sessions, stage artifacts, publish status.
18+
19+USAGE
20+  pici monitor [flags]
21+  pici monitor --human | ssh pipe.pico.sh "pub build.status -b=false"
22+
23+OUTPUT MODES
24+  Default (JSONL):  One JSON object per line to stdout, suitable for piping.
25+    pici monitor > status.jsonl
26+    pici monitor | while read -r line; do curl -sd"$line" $WEBHOOK; done
27+
28+  --human:          Selfci-style progress output for terminal viewing.
29+    pici monitor --human --status-filter all
30+    [2/3] 🚀 running: myrepo (1m23s)
31+    [3/3] ✅ success: myrepo (2m34s)
32+
33+FLAGS
34+  -pk <path>               SSH private key for authenticating with pico services
35+  -ck <path>               SSH certificate public key
36+  -artifact-dir <path>     Local directory to stage artifacts (default: /tmp/pici-artifacts)
37+  -monitor-interval <dur>  Poll interval (default: 5s)
38+  -status-filter <filter>  "terminal" (default) or "all"
39+  -human                   Human-readable output instead of JSONL
40+  -log-level <level>       Log level: debug, info, warn, error (default: info)`)
41+}
42+
43 func printRunnerHelp() {
44 	fmt.Println(`pici runner — execute a CI job from an event JSON payload.
45 
46@@ -179,15 +210,13 @@ EXAMPLE
47   echo '{"type":"push","name":"myrepo","workspace":"git@github.com:user/myrepo.git"}' | pici runner
48 
49 FLAGS
50-  -pk <path>        SSH private key for authenticating with pico services
51-  -ck <path>        SSH certificate public key (required when using SSH certificates)
52+  -pk <path>       SSH private key for authenticating with pico services
53+  -ck <path>       SSH certificate public key (required when using SSH certificates)
54+  -event <json>    Event JSON string (alternative to reading from stdin)
55   -artifact-dir <path>  Local directory to stage artifacts (default: /tmp/pici-artifacts)
56-  -event <json>      Event JSON string (alternative to reading from stdin)
57-  -monitor-interval <dur>  Interval for monitoring zmx sessions (default: 5s)
58   -log-level <level>   Log level: debug, info, warn, error (default: info)
59-  -structured          Use structured key=value log output
60-  -status-filter <filter>  Status output filter: terminal (default) or all
61-  -human                   Human-readable output instead of JSONL / slog`)
62+  -human           Human-readable output (default: enabled for runner)`)
63+
64 }
65 
66 func RunRunner(cfg *Cfg) error {
A pico.sh
+12, -0
 1@@ -0,0 +1,12 @@
 2+#!/usr/bin/env bash
 3+set -xeuo pipefail
 4+
 5+export ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci-}"
 6+
 7+printf "\x1b[33mrunning ci\x1b[0m\n"
 8+
 9+zmx run lint -d docker run -t --rm -v $(pwd):/app -w /app golangci/golangci-lint:v2.11.4 golangci-lint run
10+zmx run test -d docker run -t --rm -v $(pwd):/app -w /app golang:1.26 go test ./...
11+zmx wait lint test
12+
13+printf "\x1b[32msuccess!\x1b[0m\n"