diff --git a/ai.lemonade_server.Lemonade/lemonade-supervisor.sh b/ai.lemonade_server.Lemonade/lemonade-supervisor.sh index 44844c2..2c95096 100755 --- a/ai.lemonade_server.Lemonade/lemonade-supervisor.sh +++ b/ai.lemonade_server.Lemonade/lemonade-supervisor.sh @@ -21,6 +21,11 @@ for d in /app/extensions/backends/*/; do [ -e "$d/lib/xrt" ] && export XILINX_XRT="$d" done +# If the first argument is a command in the PATH, execute it directly +if [ $# -gt 0 ] && type -P "$1" >/dev/null 2>&1; then + exec "$@" +fi + # second launch / deep link: forward to the running app, then exit LOCK="$XDG_RUNTIME_DIR/app/$FLATPAK_ID/supervisor.lock" mkdir -p "$(dirname "$LOCK")" diff --git a/ai.lemonade_server.Lemonade/tests/supervisor/test_smoke.bats b/ai.lemonade_server.Lemonade/tests/supervisor/test_smoke.bats index 565b2ea..3899e8c 100644 --- a/ai.lemonade_server.Lemonade/tests/supervisor/test_smoke.bats +++ b/ai.lemonade_server.Lemonade/tests/supervisor/test_smoke.bats @@ -13,6 +13,7 @@ setup() { export XDG_RUNTIME_DIR="$TMPROOT/run" export FLATPAK_ID="ai.lemonade_server.Lemonade" export LEMONADE_DATA_DIR="$TMPROOT/data" + export PATH="/app/bin:$PATH" mkdir -p "$TMPROOT/run" "$TMPROOT/data" /app/bin unset LEMONADE_FLATPAK_FORCE_BUNDLED LEMONADE_HOST LEMONADE_PORT SUPERVISOR="$BATS_TEST_DIRNAME/../../lemonade-supervisor.sh" @@ -123,3 +124,21 @@ teardown() { wait_file "$TMPROOT/lemond.shutdown" wait "$SUP" 2>/dev/null || true } + +@test "executes a command directly if it is in the PATH" { + cat > /app/bin/some-command < "$TMPROOT/some-command.argv" +EOF + chmod +x /app/bin/some-command + + run "$SUPERVISOR" some-command arg1 arg2 + [ "$status" -eq 0 ] + wait_file "$TMPROOT/some-command.argv" + [ "$(cat "$TMPROOT/some-command.argv")" = "arg1 arg2" ] + + # Verify that lemond/tray/app were NOT started + [ ! -f "$TMPROOT/tray.pid" ] + [ ! -f "$TMPROOT/app.pid" ] + [ ! -f "$TMPROOT/lemond.argv" ] +}