~/bend-docscommunity

domain/architecture/system/deployment/nix_darwin/effects.bend relies on unsafe/foreign

raw source on the hub · import 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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:0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/deployment/nix_darwin/type.Serve -> @+web:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @+ours:List<&2, String> -> @+tailscale:String -> @+what:String -> 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/deployment/nix_darwin/type.Serve> -> @+web:0x16458a2db4f36577294543ec2a6d420c/json.Val -> @+ours:List<&2, String> -> @+tailscale:String -> @+what:String -> List<&2, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/deployment/nix_darwin/service/type.Service> -> List<&2, U32>

def serve_ports source · line 220 · raw

@xs:List<&2, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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:0x635d6b0e0ec6a1b1f1319bf06aa496d9/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, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/plan/type.Step>

def observe source · line 254 · raw

@+what:String -> @+nd:0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> @+uid:String -> @lsof:String -> IO(List<&2, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/plan/type.Step>)

def read_or source · line 264 · raw

@unread:Bool -> @+what:String -> @nd:0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> @uid:String -> @lsof:String -> IO(List<&2, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/plan/type.Step>)

def checks source · line 272 · raw

@+node:String -> @nd:0x635d6b0e0ec6a1b1f1319bf06aa496d9/domain/architecture/system/deployment/nix_darwin/type.NixDarwin -> IO(List<&2, 0x635d6b0e0ec6a1b1f1319bf06aa496d9/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.