Gleam + Relm4 foreign node POC over Erlang distribution
1# gleamtk POC — Relm4 foreign node + Gleam controller
2
3cookie := "gleamtk"
4ui_node := "ui@127.0.0.1"
5gleam_node := "gleamtk@127.0.0.1"
6
7# Build the Relm4 foreign node
8build-ui:
9 cd ui && cargo build
10
11# Build the Gleam controller
12build-gleam:
13 cd gleam && gleam build
14
15# Start epmd if needed, then the UI foreign node
16ui: build-ui
17 #!/usr/bin/env bash
18 set -euo pipefail
19 if ! pgrep -x epmd >/dev/null 2>&1; then
20 echo "starting epmd…"
21 epmd -daemon
22 sleep 0.3
23 fi
24 # Prefer nix-shell GTK schema paths when present
25 if command -v pkg-config >/dev/null 2>&1; then
26 _gtk="$(pkg-config --variable=prefix gtk4 2>/dev/null || true)"
27 if [[ -n "${_gtk}" ]]; then
28 export GSETTINGS_SCHEMAS_PATH="${_gtk}/share/gsettings-schemas/$(basename "$(echo ${_gtk}/share/gsettings-schemas/*gtk* 2>/dev/null | awk '{print $1}')"):${GSETTINGS_SCHEMAS_PATH:-}"
29 export XDG_DATA_DIRS="${_gtk}/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
30 fi
31 fi
32 exec ./ui/target/debug/gleamtk-ui \
33 --local {{ui_node}} \
34 --cookie {{cookie}} \
35 --register gui
36
37# Start the Gleam controller (connects to the UI node)
38gleam: build-gleam
39 #!/usr/bin/env bash
40 set -euo pipefail
41 if ! pgrep -x epmd >/dev/null 2>&1; then
42 epmd -daemon
43 sleep 0.3
44 fi
45 cd gleam
46 export ERL_FLAGS="-name {{gleam_node}} -setcookie {{cookie}} -kernel inet_dist_use_interface {127,0,0,1}"
47 exec gleam run -- {{ui_node}}
48
49# Full demo: UI in background, then controller in foreground
50run:
51 #!/usr/bin/env bash
52 set -euo pipefail
53 if ! pgrep -x epmd >/dev/null 2>&1; then
54 epmd -daemon
55 sleep 0.3
56 fi
57 just build-ui
58 just build-gleam
59 ./ui/target/debug/gleamtk-ui --local {{ui_node}} --cookie {{cookie}} &
60 UI_PID=$!
61 trap 'kill $UI_PID 2>/dev/null || true' EXIT
62 sleep 1
63 cd gleam
64 export ERL_FLAGS="-name {{gleam_node}} -setcookie {{cookie}} -kernel inet_dist_use_interface {127,0,0,1}"
65 gleam run -- {{ui_node}}
66
67# Typecheck / compile only
68check: build-ui build-gleam
69
70# Headless distribution smoke (escript ↔ foreign node)
71smoke: build-ui
72 #!/usr/bin/env bash
73 set -euo pipefail
74 if ! pgrep -x epmd >/dev/null 2>&1; then
75 epmd -daemon
76 sleep 0.3
77 fi
78 if pidof gleamtk-ui >/dev/null 2>&1; then
79 kill "$(pidof gleamtk-ui)" || true
80 sleep 0.3
81 fi
82 ./ui/target/debug/gleamtk-ui --local {{ui_node}} --cookie {{cookie}} >/tmp/gleamtk-ui.log 2>&1 &
83 UI_PID=$!
84 trap 'kill $UI_PID 2>/dev/null || true' EXIT
85 sleep 1.5
86 escript scripts/smoke_dist.escript