# RackPeek Development Commands # Run `just` or `just --list` to see available recipes. # Environment Variables # --------------------- # Add .dotnet/tools to PATH for Playwright CLI export PATH := env_var('HOME') + "/.dotnet/tools:" + env_var_or_default('PATH', '') # Variables # --------- _dotnet := "dotnet" _dockerfile := "RackPeek.Web/Dockerfile" _image := "rackpeek:ci" _setup_guide := "docs/development/dev-setup.md" # ─── Helpers/Private ──────────────────────────────────────────────────────── [doc("Check if dotnet is installed, show setup guide redirect if not found.")] [private] _check-dotnet: @command -v {{ _dotnet }} >/dev/null 2>&1 || (echo "dotnet not found. See {{ _setup_guide }} for setup instructions." && exit 1) # ─── Default ──────────────────────────────────────────────────────────────── [default] [doc("List all recipes with documentation")] [private] default: @just --list --justfile {{ justfile() }} # ─── Build ────────────────────────────────────────────────────────────────── [doc("Build the full solution (Debug)")] [group("build")] build: _check-dotnet {{ _dotnet }} build RackPeek.sln [doc("Build the full solution in Release mode")] [group("build")] build-release: _check-dotnet {{ _dotnet }} build RackPeek.sln -c Release [doc("Publish CLI as self-contained single-file binary")] [group("build")] build-cli runtime="linux-x64": _check-dotnet {{ _dotnet }} publish RackPeek/RackPeek.csproj -c Release -r {{ runtime }} \ --self-contained true \ -p:PublishSingleFile=true [doc("Build Web Docker image (required before E2E tests)")] [group("build")] build-web: docker build -t {{ _image }} -f {{ _dockerfile }} . # ─── Test ─────────────────────────────────────────────────────────────────── [doc("Run CLI tests (fast; no Docker required)")] [group("test")] test-cli: _check-dotnet {{ _dotnet }} test Tests/Tests.csproj [doc("Install Playwright + browsers for E2E (first-time only)")] [group("test")] e2e-setup: _check-dotnet cd Tests.E2e && {{ _dotnet }} tool install --global Microsoft.Playwright.CLI cd Tests.E2e && {{ _dotnet }} build cd Tests.E2e && playwright install [doc("Run E2E tests (depends on build-web; run e2e-setup once)")] [group("test")] test-e2e: _check-dotnet build-web cd Tests.E2e && {{ _dotnet }} test [doc("Run CLI + E2E tests (rebuilds Web image)")] [group("test")] test-all: _check-dotnet build-web e2e-setup test-cli test-e2e [doc("Run full test suite (alias for test-all; matches CI / pre-PR checklist)")] [group("test")] ci: test-all # ─── Demo ─────────────────────────────────────────────────────────────────── [doc("Generate CLI demo with VHS (needs: vhs, imagemagick, chrome)")] [group("demo")] build-cli-demo: cd vhs && vhs ./rpk.tape [doc("Capture Web UI demo as GIF (needs: Chrome, ImageMagick)")] [group("demo")] build-web-demo: cd vhs && chmod +x webui_capture.sh && ./webui_capture.sh # ─── Release ──────────────────────────────────────────────────────────────── [doc("Build and push multi-arch Docker image to registry")] [group("release")] docker-push version: docker buildx build \ --platform linux/amd64,linux/arm64 \ -f {{ _dockerfile }} \ -t aptacode/rackpeek:{{ version }} \ -t aptacode/rackpeek:latest \ --push . # ─── Run ──────────────────────────────────────────────────────────────────── [doc("Run the docker container")] [group("run")] run-docker: _check-dotnet docker build -t {{ _image }} -f {{ _dockerfile }} . docker run -d -p 8080:8080 {{ _image }} [doc("Use the locally built CLI")] [group("run")] rpk *args: _check-dotnet ./RackPeek/bin/Debug/net10.0/RackPeek {{ args }} # ─── Utility ──────────────────────────────────────────────────────────────── [doc("Clean build artifacts (bin, obj)")] [group("utility")] clean: _check-dotnet {{ _dotnet }} clean RackPeek.sln