justfile 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # RackPeek Development Commands
  2. # Run `just` or `just --list` to see available recipes.
  3. # Environment Variables
  4. # ---------------------
  5. # Add .dotnet/tools to PATH for Playwright CLI
  6. export PATH := env_var('HOME') + "/.dotnet/tools:" + env_var_or_default('PATH', '')
  7. # Variables
  8. # ---------
  9. _dotnet := "dotnet"
  10. _dockerfile := "RackPeek.Web/Dockerfile"
  11. _image := "rackpeek:ci"
  12. _setup_guide := "docs/development/dev-setup.md"
  13. # ─── Helpers/Private ────────────────────────────────────────────────────────
  14. [doc("Check if dotnet is installed, show setup guide redirect if not found.")]
  15. [private]
  16. _check-dotnet:
  17. @command -v {{ _dotnet }} >/dev/null 2>&1 || (echo "dotnet not found. See {{ _setup_guide }} for setup instructions." && exit 1)
  18. # ─── Default ────────────────────────────────────────────────────────────────
  19. [default]
  20. [doc("List all recipes with documentation")]
  21. [private]
  22. default:
  23. @just --list --justfile {{ justfile() }}
  24. # ─── Build ──────────────────────────────────────────────────────────────────
  25. [doc("Build the full solution (Debug)")]
  26. [group("build")]
  27. build: _check-dotnet
  28. {{ _dotnet }} build RackPeek.sln
  29. [doc("Build the full solution in Release mode")]
  30. [group("build")]
  31. build-release: _check-dotnet
  32. {{ _dotnet }} build RackPeek.sln -c Release
  33. [doc("Publish CLI as self-contained single-file binary")]
  34. [group("build")]
  35. build-cli runtime="linux-x64": _check-dotnet
  36. {{ _dotnet }} publish RackPeek/RackPeek.csproj -c Release -r {{ runtime }} \
  37. --self-contained true \
  38. -p:PublishSingleFile=true
  39. [doc("Build Web Docker image (required before E2E tests)")]
  40. [group("build")]
  41. build-web:
  42. docker build -t {{ _image }} -f {{ _dockerfile }} .
  43. # ─── Test ───────────────────────────────────────────────────────────────────
  44. [doc("Run CLI tests (fast; no Docker required)")]
  45. [group("test")]
  46. test-cli: _check-dotnet
  47. {{ _dotnet }} test Tests/Tests.csproj
  48. [doc("Install Playwright + browsers for E2E (first-time only)")]
  49. [group("test")]
  50. e2e-setup: _check-dotnet
  51. cd Tests.E2e && {{ _dotnet }} tool install --global Microsoft.Playwright.CLI
  52. cd Tests.E2e && {{ _dotnet }} build
  53. cd Tests.E2e && playwright install
  54. [doc("Run E2E tests (depends on build-web; run e2e-setup once)")]
  55. [group("test")]
  56. test-e2e: _check-dotnet build-web
  57. cd Tests.E2e && {{ _dotnet }} test
  58. [doc("Run CLI + E2E tests (rebuilds Web image)")]
  59. [group("test")]
  60. test-all: _check-dotnet build-web e2e-setup test-cli test-e2e
  61. [doc("Run full test suite (alias for test-all; matches CI / pre-PR checklist)")]
  62. [group("test")]
  63. ci: test-all
  64. # ─── Demo ───────────────────────────────────────────────────────────────────
  65. [doc("Generate CLI demo with VHS (needs: vhs, imagemagick, chrome)")]
  66. [group("demo")]
  67. build-cli-demo:
  68. cd vhs && vhs ./rpk.tape
  69. [doc("Capture Web UI demo as GIF (needs: Chrome, ImageMagick)")]
  70. [group("demo")]
  71. build-web-demo:
  72. cd vhs && chmod +x webui_capture.sh && ./webui_capture.sh
  73. # ─── Release ────────────────────────────────────────────────────────────────
  74. [doc("Build and push multi-arch Docker image to registry")]
  75. [group("release")]
  76. docker-push version:
  77. docker buildx build \
  78. --platform linux/amd64,linux/arm64 \
  79. -f {{ _dockerfile }} \
  80. -t aptacode/rackpeek:{{ version }} \
  81. -t aptacode/rackpeek:latest \
  82. --push .
  83. # ─── Run ────────────────────────────────────────────────────────────────────
  84. [doc("Run the docker container")]
  85. [group("run")]
  86. run-docker: _check-dotnet
  87. docker build -t {{ _image }} -f {{ _dockerfile }} .
  88. docker run -d -p 8080:8080 {{ _image }}
  89. [doc("Use the locally built CLI")]
  90. [group("run")]
  91. rpk *args: _check-dotnet
  92. ./RackPeek/bin/Debug/net10.0/RackPeek {{ args }}
  93. # ─── Utility ────────────────────────────────────────────────────────────────
  94. [doc("Clean build artifacts (bin, obj)")]
  95. [group("utility")]
  96. clean: _check-dotnet
  97. {{ _dotnet }} clean RackPeek.sln