domain/architecture/system/deployment/nix_darwin/effects.bend relies on unsafe/foreign
raw source on the hub · import 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/effects.bend as Effects
9 imports
import Base import bend-kit-files@0.1.0.0/files.bend as Fs import bend-net-json@0.3.0.0/json.bend as Json import ../../effs/io.bend as X import ../../plan/type.bend as P import ./type.bend as ND import ./ops.bend as NO import ./service/type.bend as Sv import ./service/ops.bend as SvO
Definitions
def dedupe source · line 14 · raw
@xs:List<&2, String> -> List<&2, String>
def unreverse source · line 19 · raw
@xs:List<&2, String> -> @acc:List<&2, String> -> List<&2, String>
Lines of a program's output. Base's String.lines recurses once per character, which overflows the
stack on launchctl list (about 20 KB); this walks the text in a loop, keeping each line reversed.
def lines_go source · line 26 · raw
@s:String -> @+line:String -> @+acc:List<&2, String> -> List<&2, String>
def lines source · line 34 · raw
@s:String -> List<&2, String>
def last_of source · line 37 · raw
@+s:String -> @c:Char -> String
def pid_of source · line 41 · raw
@ls:List<&2, String> -> String
---- the processes V runs: launchctl's pid for each job ----
def pids source · line 49 · raw
@ts:List<&2, String> -> IO(List<&2, String>)
def service_targets source · line 61 · raw
@xs:List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/service/type.Service> -> @+uid:String -> List<&2, String>
A service's launchd target: the user's session at login, the system at boot.
def agent_targets source · line 68 · raw
@xs:List<&2, String> -> @+uid:String -> List<&2, String>
def plist_label source · line 75 · raw
@+f:String -> String
def installed source · line 79 · raw
@fs:List<&2, String> -> List<&2, String>
The launch agents nix-darwin's current generation installed.
def field source · line 88 · raw
@+l:String -> String
---- listening sockets, from lsof -F pcn (one field per line: p<pid>, c<command>, n<address:port>) ----
A socket is "pid<tab>command<tab>address".
def sockets source · line 91 · raw
@ls:List<&2, String> -> @+pid:String -> @+cmd:String -> List<&2, String>
def part source · line 99 · raw
@+x:String -> @n:Nat -> String
def loopback source · line 102 · raw
@+addr:String -> Bool
def holders source · line 106 · raw
@xs:List<&2, String> -> @+port:String -> @+owned:List<&2, String> -> @+tailscale:String -> List<&2, String>
Who holds port besides V's processes and Tailscale's own.
def owned_ports source · line 117 · raw
@xs:List<&2, String> -> @+owned:List<&2, String> -> List<&2, String>
Ports that V's processes listen on.
def undeclared_listeners source · line 125 · raw
@xs:List<&2, String> -> @+allowed:List<&2, String> -> List<&2, String>
"process port" for each socket reachable from other machines whose process is not allowed.
def foreign_agent source · line 136 · raw
@+a:String -> Bool
---- launch agents: launchctl list's third column; macOS's own are left out ----
def undeclared_agents source · line 139 · raw
@ls:List<&2, String> -> @+declared:List<&2, String> -> List<&2, String>
def or_null source · line 149 · raw
@m:Maybe<&2, 0x16458a2db4f36577294543ec2a6d420c/json.Val> -> 0x16458a2db4f36577294543ec2a6d420c/json.Val
---- Tailscale Serve, from tailscale serve status --json:
{"Web": {"<host>:<port>": {"Handlers": {"/": {"Proxy": "http://127.0.0.1:<local>[/path]"}}}}} ----
def at source · line 156 · raw
@v:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @k:String -> 0x16458a2db4f36577294543ec2a6d420c/json.Val
def text source · line 159 · raw
@v:0x16458a2db4f36577294543ec2a6d420c/json.Val -> String
def keys source · line 166 · raw
@v:0x16458a2db4f36577294543ec2a6d420c/json.Val -> List<&2, String>
def url_port source · line 174 · raw
@+w:String -> String
The port of a "host:port" key or a proxy URL.
def proxy source · line 177 · raw
@+web:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @k:String -> String
def proxy_on source · line 181 · raw
@+web:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @ks:List<&2, String> -> @+port:String -> String
What Tailscale serves on an HTTPS port now, "" when nothing.
def serve_step source · line 189 · raw
@s:0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.Serve -> @+web:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @+ours:List<&2, String> -> @+tailscale:String -> @+what:String -> 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step
A serve is current, to be served, or blocked by Tailscale serving its port to something not V's.
def serve_steps source · line 198 · raw
@xs:List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.Serve> -> @+web:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @+ours:List<&2, String> -> @+tailscale:String -> @+what:String -> List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>
def ports source · line 206 · raw
@xs:List<&2, U32> -> List<&2, String>
---- the steps ----
def service_ports source · line 213 · raw
@xs:List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/service/type.Service> -> List<&2, U32>
def serve_ports source · line 220 · raw
@xs:List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.Serve> -> List<&2, U32>
def blocked_by source · line 227 · raw
@+xs:List<&2, String> -> @+what:String -> @+why:String -> List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>
def local_steps source · line 231 · raw
@ps:List<&2, String> -> @+socks:List<&2, String> -> @+owned:List<&2, String> -> @+tailscale:String -> @+what:String -> List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>
Each service's local port is free of processes that are not V's.
def tailscale_process source · line 239 · raw
@on:Bool -> String
def steps source · line 242 · raw
@+what:String -> @+nd:0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> @+installed:List<&2, String> -> @+owned:List<&2, String> -> @+socks:List<&2, String> -> @status:String -> @list:String -> @auto:String -> List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>
def observe source · line 254 · raw
@+what:String -> @+nd:0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> @+uid:String -> @lsof:String -> IO(List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>)
def read_or source · line 264 · raw
@unread:Bool -> @+what:String -> @nd:0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> @uid:String -> @lsof:String -> IO(List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>)
def checks source · line 272 · raw
@+node:String -> @nd:0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> IO(List<&2, 0x240dd78ab0879c4e226cf7dacf530ba1/domain/architecture/system/plan/type.Step>)
The laws that need the Mac as it is, and what Tailscale must serve: a node's checks before a deploy.