Gleam + Relm4 foreign node POC over Erlang distribution
0

Configure Feed

Select the types of activity you want to include in your feed.

gleamtk / justfile
2.6 kB 86 lines
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