243 lines
6.4 KiB
Makefile
243 lines
6.4 KiB
Makefile
# =============================================================================
|
|
# ©AngelaMos | 2026
|
|
# justfile
|
|
# =============================================================================
|
|
|
|
set shell := ["bash", "-uc"]
|
|
set windows-shell := ["powershell.exe", "-NoLogo", "-Command"]
|
|
|
|
project := file_name(justfile_directory())
|
|
version := `git describe --tags --always 2>/dev/null || echo "dev"`
|
|
|
|
# =============================================================================
|
|
# Default
|
|
# =============================================================================
|
|
|
|
default:
|
|
@just --list --unsorted
|
|
|
|
# =============================================================================
|
|
# Frontend (React + Vite + Biome + Stylelint)
|
|
# =============================================================================
|
|
|
|
[group('frontend')]
|
|
fe-install:
|
|
cd frontend && pnpm install --frozen-lockfile
|
|
|
|
[group('frontend')]
|
|
fe-dev:
|
|
cd frontend && pnpm dev
|
|
|
|
[group('frontend')]
|
|
fe-build:
|
|
cd frontend && pnpm build
|
|
|
|
[group('frontend')]
|
|
fe-preview:
|
|
cd frontend && pnpm preview
|
|
|
|
[group('frontend')]
|
|
biome *ARGS:
|
|
cd frontend && pnpm biome check . {{ARGS}}
|
|
|
|
[group('frontend')]
|
|
biome-fix:
|
|
cd frontend && pnpm biome check --write .
|
|
|
|
[group('frontend')]
|
|
stylelint *ARGS:
|
|
cd frontend && pnpm stylelint '**/*.scss' {{ARGS}}
|
|
|
|
[group('frontend')]
|
|
stylelint-fix:
|
|
cd frontend && pnpm stylelint '**/*.scss' --fix
|
|
|
|
[group('frontend')]
|
|
tsc *ARGS:
|
|
cd frontend && pnpm tsc --noEmit {{ARGS}}
|
|
|
|
# =============================================================================
|
|
# Backend (Go + golangci-lint + air)
|
|
# =============================================================================
|
|
|
|
[group('backend')]
|
|
be-tidy:
|
|
cd backend && go mod tidy
|
|
|
|
[group('backend')]
|
|
be-vet:
|
|
cd backend && go vet ./...
|
|
|
|
[group('backend')]
|
|
be-lint *ARGS:
|
|
cd backend && golangci-lint run --timeout=5m {{ARGS}}
|
|
|
|
[group('backend')]
|
|
be-lint-fix:
|
|
cd backend && golangci-lint run --timeout=5m --fix
|
|
|
|
[group('backend')]
|
|
be-test *ARGS:
|
|
cd backend && go test -race ./... {{ARGS}}
|
|
|
|
[group('backend')]
|
|
be-test-int *ARGS:
|
|
cd backend && go test -race -tags=integration ./... {{ARGS}}
|
|
|
|
[group('backend')]
|
|
be-cover:
|
|
cd backend && go test -race -coverprofile=coverage.out ./... && go tool cover -html=coverage.out -o coverage.html
|
|
|
|
[group('backend')]
|
|
be-run:
|
|
cd backend && go run ./cmd/canary
|
|
|
|
[group('backend')]
|
|
be-build:
|
|
cd backend && CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o bin/canary ./cmd/canary
|
|
|
|
[group('backend')]
|
|
be-air:
|
|
cd backend && air -c .air.toml
|
|
|
|
# =============================================================================
|
|
# Combined lint + test (CI gate)
|
|
# =============================================================================
|
|
|
|
[group('lint')]
|
|
lint: be-lint biome stylelint tsc
|
|
|
|
[group('lint')]
|
|
test: be-test
|
|
|
|
[group('lint')]
|
|
ci: lint test
|
|
|
|
# =============================================================================
|
|
# Docker Compose (Production)
|
|
# =============================================================================
|
|
|
|
[group('compose')]
|
|
up *ARGS:
|
|
docker compose --env-file .env up {{ARGS}}
|
|
|
|
[group('compose')]
|
|
start *ARGS:
|
|
docker compose --env-file .env up -d {{ARGS}}
|
|
|
|
[group('compose')]
|
|
down *ARGS:
|
|
docker compose --env-file .env down {{ARGS}}
|
|
|
|
[group('compose')]
|
|
stop:
|
|
docker compose --env-file .env stop
|
|
|
|
[group('compose')]
|
|
build *ARGS:
|
|
docker compose --env-file .env build {{ARGS}}
|
|
|
|
[group('compose')]
|
|
rebuild:
|
|
docker compose --env-file .env build --no-cache
|
|
|
|
[group('compose')]
|
|
logs *SERVICE:
|
|
docker compose --env-file .env logs -f {{SERVICE}}
|
|
|
|
[group('compose')]
|
|
ps:
|
|
docker compose --env-file .env ps
|
|
|
|
# =============================================================================
|
|
# Docker Compose (Production + Cloudflare Tunnel)
|
|
# =============================================================================
|
|
|
|
[group('tunnel')]
|
|
redeploy: (tunnel-down "--remove-orphans") build (tunnel-start "--remove-orphans")
|
|
|
|
[group('tunnel')]
|
|
tunnel-up *ARGS:
|
|
docker compose --env-file .env -f compose.yml -f cloudflared.compose.yml up {{ARGS}}
|
|
|
|
[group('tunnel')]
|
|
tunnel-start *ARGS:
|
|
docker compose --env-file .env -f compose.yml -f cloudflared.compose.yml up -d {{ARGS}}
|
|
|
|
[group('tunnel')]
|
|
tunnel-down *ARGS:
|
|
docker compose --env-file .env -f compose.yml -f cloudflared.compose.yml down {{ARGS}}
|
|
|
|
[group('tunnel')]
|
|
tunnel-build *ARGS:
|
|
docker compose --env-file .env -f compose.yml -f cloudflared.compose.yml build {{ARGS}}
|
|
|
|
[group('tunnel')]
|
|
tunnel-rebuild:
|
|
docker compose --env-file .env -f compose.yml -f cloudflared.compose.yml build --no-cache
|
|
|
|
[group('tunnel')]
|
|
tunnel-logs:
|
|
docker compose --env-file .env -f compose.yml -f cloudflared.compose.yml logs -f cloudflared
|
|
|
|
# =============================================================================
|
|
# Docker Compose (Development)
|
|
# =============================================================================
|
|
|
|
[group('dev')]
|
|
dev-up *ARGS:
|
|
docker compose --env-file .env.development -f dev.compose.yml up {{ARGS}}
|
|
|
|
[group('dev')]
|
|
dev-start *ARGS:
|
|
docker compose --env-file .env.development -f dev.compose.yml up -d {{ARGS}}
|
|
|
|
[group('dev')]
|
|
dev-down *ARGS:
|
|
docker compose --env-file .env.development -f dev.compose.yml down {{ARGS}}
|
|
|
|
[group('dev')]
|
|
dev-stop:
|
|
docker compose --env-file .env.development -f dev.compose.yml stop
|
|
|
|
[group('dev')]
|
|
dev-build *ARGS:
|
|
docker compose --env-file .env.development -f dev.compose.yml build {{ARGS}}
|
|
|
|
[group('dev')]
|
|
dev-rebuild:
|
|
docker compose --env-file .env.development -f dev.compose.yml build --no-cache
|
|
|
|
[group('dev')]
|
|
dev-logs *SERVICE:
|
|
docker compose --env-file .env.development -f dev.compose.yml logs -f {{SERVICE}}
|
|
|
|
[group('dev')]
|
|
dev-ps:
|
|
docker compose --env-file .env.development -f dev.compose.yml ps
|
|
|
|
# =============================================================================
|
|
# Utilities
|
|
# =============================================================================
|
|
|
|
[group('util')]
|
|
init:
|
|
bash scripts/init.sh
|
|
|
|
[group('util')]
|
|
ports:
|
|
bash scripts/randomize-ports.sh
|
|
|
|
[group('util')]
|
|
info:
|
|
@echo "Project: {{project}}"
|
|
@echo "Version: {{version}}"
|
|
@echo "OS: {{os()}} ({{arch()}})"
|
|
@echo "Module: $(head -1 backend/go.mod | cut -d' ' -f2)"
|
|
|
|
[group('util')]
|
|
clean:
|
|
-rm -rf frontend/.biome_cache frontend/dist frontend/.vite frontend/.vite-temp
|
|
-rm -rf backend/bin backend/tmp backend/coverage.out backend/coverage.html
|
|
@echo "Build caches cleaned."
|