From 74c5412232dc11fce51d2d41bc1f92680d724242 Mon Sep 17 00:00:00 2001 From: ddidderr Date: Sat, 12 Sep 2026 12:14:18 +0200 Subject: [PATCH] fix(build): pass peer CLI inputs as shell data Peer CLI scenarios, container names, and macvlan overrides were rendered into shell source by Just before execution. Quoting the rendered text did not stop command substitution or quote breaking. Enable positional arguments for the variadic scenario recipe and consume all caller-controlled values through exported shell variables. This preserves the existing recipe interface, including multiple scenario arguments and network overrides, while keeping their contents out of shell syntax. Test Plan: - `just --fmt --check` -- passed. - `just --dry-run --no-deps peer-cli-tests S1 '$(printf SCENARIO_PROBE)' 'space value'` -- rendered only `"$@"`. - `just --dry-run --no-deps peer-cli-run '$(printf NAME_PROBE)'` -- rendered only quoted `$NAME` uses. - `just --dry-run --no-deps LANSPREAD_NET='$(printf NET_PROBE)' peer-cli-net` -- rendered only quoted network variables. - `git diff --cached --check` -- passed. --- justfile | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/justfile b/justfile index 59ab90d..c3b012d 100644 --- a/justfile +++ b/justfile @@ -184,8 +184,9 @@ peer-cli-image: fixture-catalogs-check mkdir -p "$DOCKER_CONFIG" docker build -f crates/lanspread-peer-cli/Dockerfile -t lanspread-peer-cli:dev . +[positional-arguments] peer-cli-tests *SCENARIOS: peer-cli-image - python3 crates/lanspread-peer-cli/scripts/run_extended_scenarios.py {{ SCENARIOS }} + python3 crates/lanspread-peer-cli/scripts/run_extended_scenarios.py "$@" # macvlan: each peer container gets its own MAC/IP on the real LAN. # Override on the command line if your LAN differs, e.g. @@ -197,20 +198,20 @@ LANSPREAD_GATEWAY := "192.168.1.1" peer-cli-net: mkdir -p "$DOCKER_CONFIG" - docker network inspect {{ LANSPREAD_NET }} >/dev/null 2>&1 || \ + docker network inspect "$LANSPREAD_NET" >/dev/null 2>&1 || \ docker network create -d macvlan \ - --subnet={{ LANSPREAD_SUBNET }} \ - --gateway={{ LANSPREAD_GATEWAY }} \ - -o parent={{ LANSPREAD_PARENT_IFACE }} \ - {{ LANSPREAD_NET }} + --subnet="$LANSPREAD_SUBNET" \ + --gateway="$LANSPREAD_GATEWAY" \ + -o parent="$LANSPREAD_PARENT_IFACE" \ + "$LANSPREAD_NET" peer-cli-run NAME: peer-cli-net - mkdir -p ".lanspread-peer-cli/{{ NAME }}/state" ".lanspread-peer-cli/{{ NAME }}/games" - docker run --rm --init --network {{ LANSPREAD_NET }} --name "lanspread-peer-cli-{{ NAME }}" -i \ - -v "$PWD/.lanspread-peer-cli/{{ NAME }}/state:/state" \ - -v "$PWD/.lanspread-peer-cli/{{ NAME }}/games:/games" \ + mkdir -p ".lanspread-peer-cli/$NAME/state" ".lanspread-peer-cli/$NAME/games" + docker run --rm --init --network "$LANSPREAD_NET" --name "lanspread-peer-cli-$NAME" -i \ + -v "$PWD/.lanspread-peer-cli/$NAME/state:/state" \ + -v "$PWD/.lanspread-peer-cli/$NAME/games:/games" \ lanspread-peer-cli:dev \ - --name "{{ NAME }}" \ + --name "$NAME" \ --games-dir /games \ --state-dir /state \ --catalog-db /app/game.db \ @@ -218,7 +219,7 @@ peer-cli-run NAME: peer-cli-net peer-cli-alpha: peer-cli-net mkdir -p ".lanspread-peer-cli/alpha/state" - docker run --rm --init --network lanspread --name "lanspread-peer-cli-alpha" -i \ + docker run --rm --init --network "$LANSPREAD_NET" --name "lanspread-peer-cli-alpha" -i \ -v "$PWD/.lanspread-peer-cli/alpha/state:/state" \ -v "$PWD/crates/lanspread-peer-cli/fixtures/fixture-alpha:/games:ro" \ lanspread-peer-cli:dev \ @@ -230,7 +231,7 @@ peer-cli-alpha: peer-cli-net peer-cli-bravo: peer-cli-net mkdir -p ".lanspread-peer-cli/bravo/state" - docker run --rm --init --network lanspread --name "lanspread-peer-cli-bravo" -i \ + docker run --rm --init --network "$LANSPREAD_NET" --name "lanspread-peer-cli-bravo" -i \ -v "$PWD/.lanspread-peer-cli/bravo/state:/state" \ -v "$PWD/crates/lanspread-peer-cli/fixtures/fixture-bravo:/games:ro" \ lanspread-peer-cli:dev \ @@ -242,7 +243,7 @@ peer-cli-bravo: peer-cli-net peer-cli-charlie: peer-cli-net mkdir -p ".lanspread-peer-cli/charlie/state" - docker run --rm --init --network lanspread --name "lanspread-peer-cli-charlie" -i \ + docker run --rm --init --network "$LANSPREAD_NET" --name "lanspread-peer-cli-charlie" -i \ -v "$PWD/.lanspread-peer-cli/charlie/state:/state" \ -v "$PWD/crates/lanspread-peer-cli/fixtures/fixture-charlie:/games:ro" \ lanspread-peer-cli:dev \