Cybersecurity-Projects/PROJECTS/encrypted-p2p-chat/justfile

279 lines
7.5 KiB
Makefile

# =============================================================================
# AngelaMos | 2025
# Justfile - Encrypted P2P Chat
# =============================================================================
set dotenv-load
set export
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
# =============================================================================
# Setup
# =============================================================================
[group('setup')]
setup: setup-backend setup-frontend env
@echo "Setup complete!"
[group('setup')]
setup-backend:
@echo "Setting up backend..."
cd backend && uv venv ../.venv
cd backend && uv pip install -e .[dev]
@echo "Backend setup complete!"
[group('setup')]
setup-frontend:
@echo "Setting up frontend..."
cd frontend && npm install
@echo "Frontend setup complete!"
[group('setup')]
env:
@echo "Creating .env files..."
@if [ ! -f .env ]; then cp .env.example .env; echo "Created root .env"; fi
@if [ ! -f frontend/.env ]; then cp frontend/.env.example frontend/.env; echo "Created frontend/.env"; fi
@echo ".env files created! Please update with your values."
# =============================================================================
# Docker Compose (Dev)
# =============================================================================
[group('dev')]
dev: build-dev up-dev
[group('dev')]
build-dev *ARGS:
@echo "Building development Docker images..."
docker compose -f dev.compose.yml build {{ARGS}}
[group('dev')]
up-dev *ARGS:
@echo "Starting development environment..."
docker compose -f dev.compose.yml up {{ARGS}}
[group('dev')]
start-dev *ARGS:
@echo "Starting development environment..."
docker compose -f dev.compose.yml up -d {{ARGS}}
@echo "Development environment started!"
@echo "Frontend: http://localhost:5173"
@echo "Backend: http://localhost:8000"
@echo "Nginx: http://localhost"
[group('dev')]
down-dev *ARGS:
@echo "Stopping development environment..."
docker compose -f dev.compose.yml down {{ARGS}}
[group('dev')]
stop-dev:
docker compose -f dev.compose.yml stop
[group('dev')]
rebuild-dev:
docker compose -f dev.compose.yml build --no-cache
[group('dev')]
logs-dev *SERVICE:
docker compose -f dev.compose.yml logs -f {{SERVICE}}
[group('dev')]
ps-dev:
docker compose -f dev.compose.yml ps
[group('dev')]
shell-dev service='backend':
docker compose -f dev.compose.yml exec -it {{service}} /bin/bash
# =============================================================================
# Docker Compose (Production)
# =============================================================================
[group('prod')]
prod: build-prod up-prod
[group('prod')]
build-prod *ARGS:
@echo "Building production Docker images..."
docker compose build {{ARGS}}
[group('prod')]
up-prod *ARGS:
@echo "Starting production environment..."
docker compose up {{ARGS}}
[group('prod')]
start-prod *ARGS:
@echo "Starting production environment..."
docker compose up -d {{ARGS}}
@echo "Production environment started!"
@echo "Application: http://localhost"
[group('prod')]
down-prod *ARGS:
@echo "Stopping production environment..."
docker compose down {{ARGS}}
[group('prod')]
stop-prod:
docker compose stop
[group('prod')]
rebuild-prod:
docker compose -f build --no-cache
[group('prod')]
logs-prod *SERVICE:
docker compose logs -f {{SERVICE}}
[group('prod')]
ps-prod:
docker compose ps
[group('prod')]
shell-prod service='backend':
docker compose exec -it {{service}} /bin/bash
# =============================================================================
# Testing
# =============================================================================
[group('test')]
test-backend *ARGS:
@echo "Running backend tests..."
cd backend && uv run pytest tests/ -v {{ARGS}}
[group('test')]
test: test-backend
# =============================================================================
# Linting and Formatting
# =============================================================================
[group('lint')]
ruff *ARGS:
cd backend && uv run ruff check . {{ARGS}}
[group('lint')]
ruff-fix:
cd backend && uv run ruff check . --fix
cd backend && uv run ruff format .
[group('lint')]
ruff-format:
cd backend && uv run ruff format .
[group('lint')]
lint: ruff
# =============================================================================
# Type Checking
# =============================================================================
[group('types')]
mypy *ARGS:
cd backend && uv run mypy app {{ARGS}}
[group('types')]
typecheck: mypy
# =============================================================================
# Database (Docker)
# =============================================================================
[group('db')]
migrate *ARGS:
docker compose -f dev.compose.yml exec backend alembic upgrade {{ARGS}}
[group('db')]
migration message:
docker compose -f dev.compose.yml exec backend alembic revision --autogenerate -m "{{message}}"
[group('db')]
rollback:
docker compose -f dev.compose.yml exec backend alembic downgrade -1
[group('db')]
db-history:
docker compose -f dev.compose.yml exec backend alembic history --verbose
[group('db')]
db-current:
docker compose -f dev.compose.yml exec backend alembic current
# =============================================================================
# Database (Local - no Docker)
# =============================================================================
[group('db-local')]
migrate-local *ARGS:
cd backend && uv run alembic upgrade {{ARGS}}
[group('db-local')]
migration-local message:
cd backend && uv run alembic revision --autogenerate -m "{{message}}"
[group('db-local')]
rollback-local:
cd backend && uv run alembic downgrade -1
[group('db-local')]
db-history-local:
cd backend && uv run alembic history --verbose
[group('db-local')]
db-current-local:
cd backend && uv run alembic current
# =============================================================================
# CI / Quality
# =============================================================================
[group('ci')]
ci: lint typecheck test
[group('ci')]
check: ruff mypy
# =============================================================================
# Cleanup
# =============================================================================
[group('util')]
[confirm("Remove all containers, volumes, and build artifacts?")]
clean:
@echo "Cleaning up..."
-docker compose -f dev.compose.yml down -v
-docker compose down -v
-rm -rf frontend/node_modules
-rm -rf frontend/dist
-rm -rf .venv
-rm -rf backend/.venv
-rm -rf backend/__pycache__
-rm -rf backend/.pytest_cache
-rm -rf backend/.mypy_cache
-rm -rf backend/.ruff_cache
@echo "Cleanup complete!"
# =============================================================================
# Utilities
# =============================================================================
[group('util')]
info:
@echo "Project: {{project}}"
@echo "Version: {{version}}"
@echo "OS: {{os()}} ({{arch()}})"