Login
Hex Artifact Content
Login

Artifact 4352c7dbcb9ae8df65d48e11eaaa961bfc3abd78c05d7740e592a79a59f13b87:

Attachment "run-ci.md" to tech note [51f68a2d75] added by opus-ocx2 2026-10-20 06:06:09.
0000: 43 49 20 6f 66 20 61 20 62 72 61 6e 63 68 3a 20  CI of a branch: 
0010: 61 20 73 65 73 73 69 6f 6e 20 67 69 76 65 6e 20  a session given 
0020: 65 61 63 68 20 63 68 65 63 6b 2d 69 6e 20 6f 6e  each check-in on
0030: 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 69 74   the branches it
0040: 73 20 60 63 68 65 63 6b 69 6e 73 60 0a 6e 61 6d  s `checkins`.nam
0050: 65 73 2c 20 65 61 63 68 20 73 74 61 72 74 69 6e  es, each startin
0060: 67 20 61 20 70 72 6f 63 65 73 73 20 6f 66 20 69  g a process of i
0070: 74 73 20 6f 77 6e 2c 20 77 68 69 63 68 20 73 65  ts own, which se
0080: 6e 64 73 20 61 20 62 75 69 6c 64 20 6f 66 20 74  nds a build of t
0090: 68 61 74 0a 63 68 65 63 6b 2d 69 6e 2c 20 62 79  hat.check-in, by
00a0: 20 69 74 73 20 68 61 73 68 20 69 6e 20 66 75 6c   its hash in ful
00b0: 6c 2c 20 66 72 6f 6d 20 60 72 75 6e 2f 62 75 69  l, from `run/bui
00c0: 6c 64 60 2c 20 61 73 20 61 20 72 65 70 6c 79 20  ld`, as a reply 
00d0: 74 6f 20 74 68 69 73 20 72 75 6e 2e 20 49 74 0a  to this run. It.
00e0: 72 75 6e 73 20 6e 6f 20 63 68 65 63 6b 2d 69 6e  runs no check-in
00f0: 27 73 20 63 6f 64 65 3a 20 65 61 63 68 20 62 75  's code: each bu
0100: 69 6c 64 27 73 20 6e 6f 64 65 20 77 72 69 74 65  ild's node write
0110: 73 20 60 63 69 60 20 70 61 73 73 20 6f 72 20 66  s `ci` pass or f
0120: 61 69 6c 20 6f 6e 20 69 74 73 0a 63 68 65 63 6b  ail on its.check
0130: 2d 69 6e 20 61 6e 64 20 70 6f 73 74 73 20 74 68  -in and posts th
0140: 65 20 65 6e 64 20 6f 66 20 77 68 61 74 20 74 68  e end of what th
0150: 65 20 63 68 65 63 6b 20 70 72 69 6e 74 65 64 20  e check printed 
0160: 62 65 73 69 64 65 20 69 74 2e 20 63 72 65 61 74  beside it. creat
0170: 65 20 61 64 64 73 0a 74 68 65 20 6e 6f 64 65 20  e adds.the node 
0180: 61 6e 64 20 74 68 65 20 6f 62 6a 65 63 74 69 76  and the objectiv
0190: 65 3b 20 60 2d 2d 75 73 65 72 60 20 6e 61 6d 65  e; `--user` name
01a0: 73 20 74 68 65 20 73 65 73 73 69 6f 6e 27 73 20  s the session's 
01b0: 75 73 65 72 2c 20 6f 6e 65 20 68 6f 6c 64 69 6e  user, one holdin
01c0: 67 0a 67 69 6f 32 34 20 61 6e 64 20 60 52 60 2c  g.gio24 and `R`,
01d0: 20 6d 61 64 65 20 6f 6e 63 65 20 6f 6e 20 46 6f   made once on Fo
01e0: 73 73 69 6c 27 73 20 55 73 65 72 73 20 70 61 67  ssil's Users pag
01f0: 65 3b 20 61 6e 64 20 60 2d 2d 66 69 65 6c 64 73  e; and `--fields
0200: 0a 27 7b 22 70 72 6f 63 65 73 73 22 3a 20 7b 22  .'{"process": {"
0210: 63 68 65 63 6b 69 6e 73 22 3a 20 5b 22 42 52 41  checkins": ["BRA
0220: 4e 43 48 22 5d 7d 7d 27 60 20 6e 61 6d 65 73 20  NCH"]}}'` names 
0230: 74 68 65 20 62 72 61 6e 63 68 65 73 3a 20 63 72  the branches: cr
0240: 65 61 74 65 20 6d 65 72 67 65 73 0a 69 74 20 69  eate merges.it i
0250: 6e 74 6f 20 74 68 65 20 62 6c 6f 63 6b 20 6f 62  nto the block ob
0260: 6a 65 63 74 20 62 79 20 6f 62 6a 65 63 74 2c 20  ject by object, 
0270: 73 6f 20 69 74 73 20 60 63 68 65 63 6b 69 6e 73  so its `checkins
0280: 60 20 72 65 70 6c 61 63 65 73 20 60 74 72 75 6e  ` replaces `trun
0290: 6b 60 20 61 6e 64 0a 74 68 65 20 72 65 73 74 20  k` and.the rest 
02a0: 6f 66 20 60 70 72 6f 63 65 73 73 60 20 73 74 61  of `process` sta
02b0: 79 73 2e 0a 0a 60 60 60 6a 73 6f 6e 0a 7b 0a 20  ys...```json.{. 
02c0: 20 22 77 6f 72 6b 73 70 61 63 65 22 3a 20 5b 0a   "workspace": [.
02d0: 20 20 20 20 7b 22 73 74 65 70 22 3a 20 22 64 69      {"step": "di
02e0: 72 65 63 74 6f 72 79 22 2c 20 22 61 74 22 3a 20  rectory", "at": 
02f0: 22 24 24 72 6f 6f 74 24 24 2f 24 24 75 73 65 72  "$$root$$/$$user
0300: 24 24 2f 70 72 6f 6a 65 63 74 73 2f 24 24 70 72  $$/projects/$$pr
0310: 6f 6a 65 63 74 24 24 2f 24 24 72 75 6e 24 24 22  oject$$/$$run$$"
0320: 7d 2c 0a 20 20 20 20 7b 22 73 74 65 70 22 3a 20  },.    {"step": 
0330: 22 70 61 73 73 77 6f 72 64 22 7d 2c 0a 20 20 20  "password"},.   
0340: 20 7b 22 73 74 65 70 22 3a 20 22 63 6c 6f 6e 65   {"step": "clone
0350: 22 2c 20 22 69 6e 74 6f 22 3a 20 22 24 24 77 6f  ", "into": "$$wo
0360: 72 6b 73 70 61 63 65 24 24 2f 63 6c 6f 6e 65 22  rkspace$$/clone"
0370: 7d 2c 0a 20 20 20 20 7b 22 73 74 65 70 22 3a 20  },.    {"step": 
0380: 22 63 68 65 63 6b 6f 75 74 22 2c 20 22 6f 66 22  "checkout", "of"
0390: 3a 20 22 74 72 75 6e 6b 22 2c 20 22 69 6e 74 6f  : "trunk", "into
03a0: 22 3a 20 22 24 24 77 6f 72 6b 73 70 61 63 65 24  ": "$$workspace$
03b0: 24 2f 74 72 65 65 22 7d 0a 20 20 5d 2c 0a 20 20  $/tree"}.  ],.  
03c0: 22 73 61 6e 64 62 6f 78 22 3a 20 7b 0a 20 20 20  "sandbox": {.   
03d0: 20 22 75 69 64 22 3a 20 31 30 30 30 2c 20 22 67   "uid": 1000, "g
03e0: 69 64 22 3a 20 31 30 30 30 2c 20 22 63 61 70 61  id": 1000, "capa
03f0: 62 69 6c 69 74 69 65 73 22 3a 20 5b 5d 2c 20 22  bilities": [], "
0400: 6e 65 74 77 6f 72 6b 22 3a 20 74 72 75 65 2c 0a  network": true,.
0410: 20 20 20 20 22 6f 77 6e 5f 73 65 73 73 69 6f 6e      "own_session
0420: 22 3a 20 74 72 75 65 2c 20 22 65 6e 64 73 5f 77  ": true, "ends_w
0430: 69 74 68 5f 6e 6f 64 65 22 3a 20 74 72 75 65 2c  ith_node": true,
0440: 0a 20 20 20 20 22 72 65 61 64 5f 6f 6e 6c 79 22  .    "read_only"
0450: 3a 20 5b 22 2f 75 73 72 22 2c 20 22 2f 62 69 6e  : ["/usr", "/bin
0460: 22 2c 20 22 2f 73 62 69 6e 22 2c 20 22 2f 6c 69  ", "/sbin", "/li
0470: 62 22 2c 20 22 2f 6c 69 62 36 34 22 2c 20 22 2f  b", "/lib64", "/
0480: 65 74 63 2f 72 65 73 6f 6c 76 2e 63 6f 6e 66 22  etc/resolv.conf"
0490: 2c 20 22 2f 65 74 63 2f 68 6f 73 74 73 22 2c 0a  , "/etc/hosts",.
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 22 2f 65 74 63 2f 6e 73 73 77 69 74 63 68    "/etc/nsswitch
04c0: 2e 63 6f 6e 66 22 2c 20 22 2f 65 74 63 2f 73 73  .conf", "/etc/ss
04d0: 6c 2f 63 65 72 74 73 22 2c 20 22 24 24 72 65 6c  l/certs", "$$rel
04e0: 65 61 73 65 24 24 22 5d 2c 0a 20 20 20 20 22 72  ease$$"],.    "r
04f0: 65 61 64 5f 77 72 69 74 65 22 3a 20 5b 22 24 24  ead_write": ["$$
0500: 77 6f 72 6b 73 70 61 63 65 24 24 22 5d 2c 0a 20  workspace$$"],. 
0510: 20 20 20 22 68 6f 6d 65 73 22 3a 20 5b 5d 2c 0a     "homes": [],.
0520: 20 20 20 20 22 66 69 6c 65 73 22 3a 20 5b 7b 22      "files": [{"
0530: 61 74 22 3a 20 22 2f 65 74 63 2f 70 61 73 73 77  at": "/etc/passw
0540: 64 22 2c 20 22 74 65 78 74 22 3a 20 22 24 24 75  d", "text": "$$u
0550: 73 65 72 24 24 3a 78 3a 31 30 30 30 3a 31 30 30  ser$$:x:1000:100
0560: 30 3a 3a 24 24 77 6f 72 6b 73 70 61 63 65 24 24  0::$$workspace$$
0570: 3a 2f 62 69 6e 2f 73 68 5c 6e 22 7d 5d 2c 0a 20  :/bin/sh\n"}],. 
0580: 20 20 20 22 70 72 6f 63 22 3a 20 22 2f 70 72 6f     "proc": "/pro
0590: 63 22 2c 20 22 64 65 76 22 3a 20 22 2f 64 65 76  c", "dev": "/dev
05a0: 22 2c 20 22 74 6d 70 22 3a 20 22 2f 74 6d 70 22  ", "tmp": "/tmp"
05b0: 0a 20 20 7d 2c 0a 20 20 22 70 72 6f 63 65 73 73  .  },.  "process
05c0: 22 3a 20 7b 0a 20 20 20 20 22 63 6f 6d 6d 61 6e  ": {.    "comman
05d0: 64 22 3a 20 5b 22 73 68 22 2c 20 22 2d 63 22 2c  d": ["sh", "-c",
05e0: 20 22 72 65 61 64 20 2d 72 20 66 69 72 73 74 3b   "read -r first;
05f0: 20 72 65 61 64 20 2d 72 20 67 69 76 65 6e 20 7c   read -r given |
0600: 7c 20 65 78 69 74 20 30 3b 20 68 3d 24 28 70 72  | exit 0; h=$(pr
0610: 69 6e 74 66 20 25 73 20 5c 22 24 67 69 76 65 6e  intf %s \"$given
0620: 5c 22 20 7c 20 73 65 64 20 2d 6e 20 27 73 2f 2e  \" | sed -n 's/.
0630: 2a 5c 22 63 68 65 63 6b 69 6e 5c 22 3a 5c 22 5c  *\"checkin\":\"\
0640: 5c 28 5b 30 2d 39 61 2d 66 5d 2a 5c 5c 29 5c 22  \([0-9a-f]*\\)\"
0650: 2e 2a 2f 5c 5c 31 2f 70 27 29 3b 20 65 78 65 63  .*/\\1/p'); exec
0660: 20 6f 63 78 32 20 63 72 65 61 74 65 20 5c 22 42   ocx2 create \"B
0670: 75 69 6c 64 20 24 68 3a 20 69 74 20 70 61 73 73  uild $h: it pass
0680: 65 73 20 77 68 65 6e 20 69 74 73 20 63 68 65 63  es when its chec
0690: 6b 20 65 78 69 74 73 20 30 2e 5c 22 20 2d 2d 70  k exits 0.\" --p
06a0: 61 74 74 65 72 6e 20 72 75 6e 2f 62 75 69 6c 64  attern run/build
06b0: 20 2d 2d 74 6f 20 5c 22 24 31 5c 22 20 2d 2d 6f   --to \"$1\" --o
06c0: 66 20 5c 22 24 68 5c 22 22 2c 20 22 63 69 22 2c  f \"$h\"", "ci",
06d0: 20 22 24 24 72 75 6e 24 24 22 5d 2c 0a 20 20 20   "$$run$$"],.   
06e0: 20 22 63 77 64 22 3a 20 22 24 24 74 72 65 65 24   "cwd": "$$tree$
06f0: 24 22 2c 0a 20 20 20 20 22 73 65 73 73 69 6f 6e  $",.    "session
0700: 22 3a 20 74 72 75 65 2c 20 22 63 68 65 63 6b 69  ": true, "checki
0710: 6e 73 22 3a 20 5b 22 74 72 75 6e 6b 22 5d 2c 20  ns": ["trunk"], 
0720: 22 64 65 6c 69 76 65 72 69 65 73 22 3a 20 22 73  "deliveries": "s
0730: 74 61 72 74 22 2c 0a 20 20 20 20 22 65 6e 76 22  tart",.    "env"
0740: 3a 20 7b 22 48 4f 4d 45 22 3a 20 22 24 24 77 6f  : {"HOME": "$$wo
0750: 72 6b 73 70 61 63 65 24 24 22 2c 20 22 55 53 45  rkspace$$", "USE
0760: 52 22 3a 20 22 24 24 75 73 65 72 24 24 22 2c 20  R": "$$user$$", 
0770: 22 50 41 54 48 22 3a 20 22 24 24 72 65 6c 65 61  "PATH": "$$relea
0780: 73 65 24 24 3a 2f 75 73 72 2f 62 69 6e 3a 2f 62  se$$:/usr/bin:/b
0790: 69 6e 22 7d 0a 20 20 7d 0a 7d 0a 60 60 60 0a     in"}.  }.}.```.