Files
lanspread/justfile
T
ddidderr 24f573d82a fix(build): exclude generated reports from formatting
Keep the generated security report and archived audit artifacts outside the maintained Markdown formatter set, and run Tombi offline. This makes the repository formatter deterministic without rewriting generated evidence.

Test Plan:
- just fmt
- just --fmt --check
- git diff --check
2026-09-12 12:36:26 +02:00

255 lines
11 KiB
Makefile

export RUSTFLAGS := "-C target-cpu=native"
export WEBKIT_DISABLE_COMPOSITING_MODE := "1"
export DOCKER_CONFIG := env_var_or_default("DOCKER_CONFIG", ".lanspread-peer-cli/docker-config")
set export
default: run
FIXTURE_CATALOG_SOURCE := "crates/lanspread-tauri-deno-ts/src-tauri/game.db"
FIXTURE_CATALOG_ROOT := "crates/lanspread-peer-cli/catalogs"
PRODUCTION_CATALOG_DB := "crates/lanspread-tauri-deno-ts/src-tauri/game.db"
PRODUCTION_MANIFEST_ROOT := "crates/lanspread-tauri-deno-ts/src-tauri/manifests"
CATALOG_CACHE_STAMP := ".lanspread/catalog-cache/production.json"
CATALOG_UNRAR := env_var_or_default("LANSPREAD_UNRAR", "crates/lanspread-tauri-deno-ts/src-tauri/binaries/unrar-x86_64-unknown-linux-gnu")
GAMES_DIR := env_var_or_default("LANSPREAD_GAMES_DIR", "")
CATALOG_FORCE := env_var_or_default("LANSPREAD_CATALOG_FORCE", "0")
TAURI_DEV_CONFIG := '{"bundle":{"resources":{"../../lanspread-peer-cli/catalogs/default/game.db":"game.db","../../lanspread-peer-cli/catalogs/default/manifests/":"manifests/","assets/*":"assets/"}}}'
TAURI_FIXTURE_ENV := "LANSPREAD_USE_FIXTURE_CATALOG=1"
setup:
cargo install tauri-cli
cd crates/lanspread-tauri-deno-ts && deno install --frozen=true
run:
if [ -n "$GAMES_DIR" ]; then \
just run-production "$GAMES_DIR"; \
else \
just run-fixture; \
fi
run-fixture: fixture-catalog-check
{{ TAURI_FIXTURE_ENV }} cargo tauri dev --config crates/lanspread-tauri-deno-ts/src-tauri/tauri.dev.conf.json --release
run-production GAMES_DIR:
just catalog-generate-production "$GAMES_DIR"
just catalog-check-production
cargo tauri dev --config crates/lanspread-tauri-deno-ts/src-tauri/tauri.production.conf.json --release
build:
just build-production "$GAMES_DIR"
build-fixture: fixture-catalog-check
{{ TAURI_FIXTURE_ENV }} cargo tauri build --config crates/lanspread-tauri-deno-ts/src-tauri/tauri.dev.conf.json --no-bundle #-- --profile dev
build-production GAMES_DIR="":
if [ -n "$GAMES_DIR" ]; then \
just catalog-generate-production "$GAMES_DIR"; \
else \
just catalog-check-production; \
fi
cargo tauri build --config crates/lanspread-tauri-deno-ts/src-tauri/tauri.production.conf.json --no-bundle -- --profile production
bundle: catalog-check-production
cargo tauri build --config crates/lanspread-tauri-deno-ts/src-tauri/tauri.production.conf.json -- --profile production
fmt:
cargo +nightly fmt
tombi format --offline
fd -tf -e md -E security-report -E 'SECURITY_AUDIT_*.md' -x prettier --write --prose-wrap always --print-width 80
rumdl check --flavor commonmark --exclude 'security-report/**,SECURITY_AUDIT_*.md' --fix
just --fmt
_fix:
{{ TAURI_FIXTURE_ENV }} TAURI_CONFIG='{{ TAURI_DEV_CONFIG }}' cargo fix --workspace --all-targets --all-features
{{ TAURI_FIXTURE_ENV }} TAURI_CONFIG='{{ TAURI_DEV_CONFIG }}' cargo clippy --workspace --all-targets --all-features --fix
fix: _fix fmt
clippy:
{{ TAURI_FIXTURE_ENV }} TAURI_CONFIG='{{ TAURI_DEV_CONFIG }}' cargo clippy --workspace --all-targets --all-features -- -D warnings
test:
{{ TAURI_FIXTURE_ENV }} TAURI_CONFIG='{{ TAURI_DEV_CONFIG }}' cargo test --workspace --all-targets --all-features
# Regenerate the committed acceptance catalogs from their fixture packages.
fixture-catalogs:
cargo run -p lanspread-compat --bin lanspread-fixture-catalog -- \
--source-catalog-db {{ FIXTURE_CATALOG_SOURCE }} \
--output-dir {{ FIXTURE_CATALOG_ROOT }}/default \
--unrar "$CATALOG_UNRAR" \
--game-root crates/lanspread-peer-cli/fixtures/fixture-alpha/alienswarm \
--game-root crates/lanspread-peer-cli/fixtures/fixture-alpha/bf1942 \
--game-root crates/lanspread-peer-cli/fixtures/fixture-alpha/ggoo \
--game-root crates/lanspread-peer-cli/fixtures/fixture-bravo/bfbc2 \
--game-root crates/lanspread-peer-cli/fixtures/fixture-bravo/cnc4 \
--game-root crates/lanspread-peer-cli/fixtures/fixture-bravo/cnctw \
--game-root crates/lanspread-peer-cli/fixtures/fixture-charlie/cod5 \
--game-root crates/lanspread-peer-cli/fixtures/fixture-charlie/cod6 \
--game-root crates/lanspread-peer-cli/fixtures/fixture-charlie/coh \
--game-root crates/lanspread-peer-cli/fixtures/fixture-persona/css
cargo run -p lanspread-compat --bin lanspread-fixture-catalog -- \
--source-catalog-db {{ FIXTURE_CATALOG_SOURCE }} \
--output-dir {{ FIXTURE_CATALOG_ROOT }}/solid \
--unrar "$CATALOG_UNRAR" \
--game-root crates/lanspread-peer-cli/fixtures/fixture-solid/cnctw
cargo run -p lanspread-compat --bin lanspread-fixture-catalog -- \
--source-catalog-db {{ FIXTURE_CATALOG_SOURCE }} \
--output-dir {{ FIXTURE_CATALOG_ROOT }}/multi \
--unrar "$CATALOG_UNRAR" \
--game-root crates/lanspread-peer-cli/fixtures/fixture-multi/cnctw
cargo run -p lanspread-compat --bin lanspread-fixture-catalog -- \
--source-catalog-db {{ FIXTURE_CATALOG_SOURCE }} \
--output-dir {{ FIXTURE_CATALOG_ROOT }}/unknown \
--unrar "$CATALOG_UNRAR" \
--game-root crates/lanspread-peer-cli/fixtures/fixture-unknown/cod2
fixture-catalog OUTPUT GAME_ROOT:
cargo run -p lanspread-compat --bin lanspread-fixture-catalog -- \
--source-catalog-db {{ FIXTURE_CATALOG_SOURCE }} \
--output-dir "$OUTPUT" \
--unrar "$CATALOG_UNRAR" \
--game-root "$GAME_ROOT"
fixture-download-only-catalog OUTPUT GAME_ID GAME_ROOT:
cargo run -p lanspread-compat --bin lanspread-fixture-catalog -- \
--source-catalog-db {{ FIXTURE_CATALOG_SOURCE }} \
--output-dir "$OUTPUT" \
--unrar "$CATALOG_UNRAR" \
--game-root "$GAME_ROOT" \
--no-stream-install "$GAME_ID"
fixture-catalog-check:
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- check \
--catalog-db {{ FIXTURE_CATALOG_ROOT }}/default/game.db --all
# Check every catalog profile used by the peer-CLI acceptance matrix.
fixture-catalogs-check: fixture-catalog-check
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- check \
--catalog-db {{ FIXTURE_CATALOG_ROOT }}/solid/game.db --all
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- check \
--catalog-db {{ FIXTURE_CATALOG_ROOT }}/multi/game.db --all
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- check \
--catalog-db {{ FIXTURE_CATALOG_ROOT }}/unknown/game.db --all
catalog-check-production:
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- check \
--catalog-db {{ PRODUCTION_CATALOG_DB }} \
--manifests-dir {{ PRODUCTION_MANIFEST_ROOT }} \
--all
# Generate the complete production authority from PACKAGES_DIR/<game_id>/.
catalog-generate-production PACKAGES_DIR:
@if [ "$CATALOG_FORCE" = "1" ] || ! python3 tools/catalog_source_cache.py check \
--stamp {{ CATALOG_CACHE_STAMP }} \
--packages-dir "$PACKAGES_DIR" \
--catalog-db {{ PRODUCTION_CATALOG_DB }} \
--manifests-dir {{ PRODUCTION_MANIFEST_ROOT }} \
--unrar "$CATALOG_UNRAR"; then \
cargo run --release -p lanspread-compat --bin lanspread-catalog-publisher -- generate \
--catalog-db {{ PRODUCTION_CATALOG_DB }} \
--packages-dir "$PACKAGES_DIR" \
--manifests-dir {{ PRODUCTION_MANIFEST_ROOT }} \
--unrar "$CATALOG_UNRAR" \
--all && \
python3 tools/catalog_source_cache.py record \
--stamp {{ CATALOG_CACHE_STAMP }} \
--packages-dir "$PACKAGES_DIR" \
--catalog-db {{ PRODUCTION_CATALOG_DB }} \
--manifests-dir {{ PRODUCTION_MANIFEST_ROOT }} \
--unrar "$CATALOG_UNRAR"; \
else \
echo "catalog generation skipped: source metadata matches {{ CATALOG_CACHE_STAMP }}"; \
fi
# Regenerate one game in an already complete production authority.
catalog-generate-production-game PACKAGES_DIR GAME_ID:
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- generate \
--catalog-db {{ PRODUCTION_CATALOG_DB }} \
--packages-dir "$PACKAGES_DIR" \
--manifests-dir {{ PRODUCTION_MANIFEST_ROOT }} \
--unrar "$CATALOG_UNRAR" \
--game-id "$GAME_ID"
frontend-test:
cd crates/lanspread-tauri-deno-ts && deno test --unstable-sloppy-imports tests
clean:
cargo clean
peer-cli-build:
cargo build -p lanspread-peer-cli
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 "$@"
# macvlan: each peer container gets its own MAC/IP on the real LAN.
# Override on the command line if your LAN differs, e.g.
# just LANSPREAD_PARENT_IFACE=enp4s0 LANSPREAD_SUBNET=10.0.0.0/24 LANSPREAD_GATEWAY=10.0.0.1 peer-cli-net
LANSPREAD_NET := "lanspread"
LANSPREAD_PARENT_IFACE := "eth0"
LANSPREAD_SUBNET := "192.168.1.0/24"
LANSPREAD_GATEWAY := "192.168.1.1"
peer-cli-net:
mkdir -p "$DOCKER_CONFIG"
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"
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" \
lanspread-peer-cli:dev \
--name "$NAME" \
--games-dir /games \
--state-dir /state \
--catalog-db /app/game.db \
--manifests-dir /app/manifests
peer-cli-alpha: peer-cli-net
mkdir -p ".lanspread-peer-cli/alpha/state"
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 \
--name "alpha" \
--games-dir /games \
--state-dir /state \
--catalog-db /app/game.db \
--manifests-dir /app/manifests
peer-cli-bravo: peer-cli-net
mkdir -p ".lanspread-peer-cli/bravo/state"
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 \
--name "bravo" \
--games-dir /games \
--state-dir /state \
--catalog-db /app/game.db \
--manifests-dir /app/manifests
peer-cli-charlie: peer-cli-net
mkdir -p ".lanspread-peer-cli/charlie/state"
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 \
--name "charlie" \
--games-dir /games \
--state-dir /state \
--catalog-db /app/game.db \
--manifests-dir /app/manifests