Experimental Proxmox / Docker compose tool
compose
proxmox
docker
1set -euo pipefail
2
3app_name=$(awk -F'"' '/^name[[:space:]]*=/ { print $2; exit }' gleam.toml)
4build_dir="build/dev/erlang/$app_name"
5
6rm -rf .elp
7mkdir -p .elp
8for erl_file in "$build_dir"/_gleam_artefacts/*.erl; do
9 [ -e "$erl_file" ] || continue
10 base_name=$(basename "$erl_file")
11 already_in_src=$(find src -name "$base_name" -print -quit)
12 if [ -z "$already_in_src" ]; then
13 ln -sf "$(pwd)/$erl_file" ".elp/$base_name"
14 fi
15done
16
17list_deps() {
18 for dep_dir in build/dev/erlang/*/; do
19 dep_name=$(basename "$dep_dir")
20 [ "$dep_name" = "$app_name" ] && continue
21
22 if [ -d "${dep_dir}_gleam_artefacts" ]; then
23 dep_src_dir=_gleam_artefacts
24 elif find "${dep_dir}src" -maxdepth 1 -iname "*.erl" -print -quit 2>/dev/null | grep -q .; then
25 dep_src_dir=src
26 else
27 continue
28 fi
29
30 jq -n \
31 --arg name "$dep_name" \
32 --arg dir "build/dev/erlang/$dep_name" \
33 --arg src_dir "$dep_src_dir" \
34 '{name: $name, dir: $dir, src_dirs: [$src_dir], include_dirs: ["include"], ebin: "ebin"}'
35 done
36}
37
38jq -n \
39 --arg name "$app_name" \
40 --arg include_dir "$build_dir/include" \
41 --arg ebin_dir "$build_dir/ebin" \
42 --slurpfile deps <(list_deps) \
43 '{
44 apps: [{
45 name: $name,
46 dir: ".",
47 src_dirs: ["src"],
48 extra_src_dirs: [".elp"],
49 include_dirs: [$include_dir],
50 ebin: $ebin_dir
51 }],
52 deps: $deps
53 }' > .elp.build_info
54
55echo "wrote .elp.build_info for app \"$app_name\""