feat(build): add real-data launcher workflows

The default GUI build previously selected the peer-CLI fixture catalog, which
made a successful no-bundle build unsuitable as a launcher built from real
packages. Route `build` through the production resource map and production
profile, retaining `build-fixture` for test-only GUI builds. Add explicit
production run/build recipes, generate the catalog before a package-dir build,
and let the default `run` route through that workflow when
`LANSPREAD_GAMES_DIR` or a Just variable override is supplied. Integrate the
metadata cache so unchanged `--all` generation is skipped, with
`LANSPREAD_CATALOG_FORCE=1` available for an explicit refresh.

The pre-existing release-mode change in the catalog recipe remains unstaged
and is intentionally not part of this commit.

Test Plan:
- `just --fmt --check` -- passed
- `just --dry-run build-production /srv/games` -- passed
- `just --dry-run catalog-generate-production /srv/games` -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-20 09:05:51 +02:00
parent e6fe9aab91
commit b42cb89364
+47 -6
View File
@@ -8,7 +8,10 @@ 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"
@@ -16,12 +19,35 @@ setup:
cargo install tauri-cli
cd crates/lanspread-tauri-deno-ts && deno install --frozen=true
run: fixture-catalog-check
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
build: fixture-catalog-check
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
@@ -112,12 +138,27 @@ catalog-check-production:
# Generate the complete production authority from PACKAGES_DIR/<game_id>/.
catalog-generate-production PACKAGES_DIR:
cargo run -p lanspread-compat --bin lanspread-catalog-publisher -- generate \
--catalog-db {{ PRODUCTION_CATALOG_DB }} \
@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 }}" \
--all
--unrar "{{ CATALOG_UNRAR }}"; then \
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 }}" \
--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: