Files
2026-05-12 19:25:14 +02:00

88 lines
3.5 KiB
Makefile

# SMGW PKI · Monorepo runner.
# Run `just` (no args) to list recipes.
set shell := ["bash", "-euo", "pipefail", "-c"]
repo := justfile_directory()
deploy := repo / "deploy"
backend := repo / "backend"
frontend := repo / "frontend"
# Default target — print recipe list.
default:
@just --list --unsorted
# ─── Compose lifecycle ───────────────────────────────────────────────────────
# Bring stack up (attached). Builds on first run.
up *ARGS:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml up {{ARGS}}
# Bring stack up detached.
up-d *ARGS:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml up -d {{ARGS}}
# Stop and remove containers + network. Volumes preserved.
down:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml down
# Rebuild images. `just rebuild backend` rebuilds one service.
build *ARGS:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml build {{ARGS}}
rebuild *ARGS:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml build --no-cache {{ARGS}}
# Tail logs (default: both services). Pass a service to filter.
logs *ARGS:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml logs -f {{ARGS}}
# Reload nginx config without restarting the container.
nginx-reload:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml exec frontend nginx -s reload
# Compose status table.
ps:
docker compose --project-directory {{deploy}} -f {{deploy}}/compose.yaml ps
# ─── Local dev (without Docker) ──────────────────────────────────────────────
# Run the Rust backend locally with dev-auth + CORS for Vite.
dev-backend:
cd {{backend}} && DEV_AUTH=1 CORS_ALLOW_ORIGIN=http://localhost:5173 cargo run
# Run the Vite dev server (expects backend on :8443).
dev-frontend:
cd {{frontend}} && bun run dev
# ─── OpenAPI contract ────────────────────────────────────────────────────────
# Regenerate openapi.json from the backend and the TS client from it.
gen-api:
cd {{backend}} && cargo run --quiet -- --emit-openapi > {{frontend}}/openapi.json
cd {{frontend}} && bun run gen:api
# Fail if the committed openapi.json drifts from the current Rust source.
openapi-diff:
cd {{backend}} && cargo run --quiet -- --emit-openapi > /tmp/smgw-fresh-openapi.json
diff {{frontend}}/openapi.json /tmp/smgw-fresh-openapi.json \
&& echo "openapi.json in sync" \
|| ( echo "drift — run \`just gen-api\`" >&2 ; exit 1 )
# ─── Checks ──────────────────────────────────────────────────────────────────
# Run both side checks (cargo check + bun typecheck).
check:
cd {{backend}} && cargo check
cd {{frontend}} && bun run typecheck
# Run both test suites.
test:
cd {{backend}} && cargo test
cd {{frontend}} && bun run typecheck # placeholder — frontend tests TBD
# Format + lint (best-effort).
fmt:
cd {{backend}} && cargo fmt
cd {{frontend}} && bun x prettier --write 'src/**/*.{ts,tsx,css}' 2>/dev/null || true