Cybersecurity-Projects/PROJECTS/advanced/ai-threat-detection/justfile

327 lines
8.3 KiB
Makefile

# =============================================================================
# AngelaMos | 2026
# Justfile - AngelusVigil AI Threat Detection
# =============================================================================
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
# =============================================================================
# Linting and Formatting
# =============================================================================
[group('lint')]
ruff *ARGS:
cd backend && uv run ruff check app/ cli/ ml/ tests/ {{ARGS}}
[group('lint')]
ruff-fix:
cd backend && uv run ruff check app/ cli/ ml/ tests/ --fix
[group('lint')]
yapf *ARGS:
cd backend && uv run yapf -rip app/ cli/ ml/ tests/ {{ARGS}}
[group('lint')]
pylint *ARGS:
cd backend && uv run pylint app cli ml {{ARGS}}
[group('lint')]
lint: ruff pylint
# =============================================================================
# Type Checking
# =============================================================================
[group('types')]
mypy *ARGS:
cd backend && uv run mypy app/ cli/ ml/ {{ARGS}}
[group('types')]
typecheck: mypy
# =============================================================================
# Testing
# =============================================================================
[group('test')]
pytest *ARGS:
cd backend && uv run pytest tests/ {{ARGS}}
[group('test')]
test: pytest
[group('test')]
test-v *ARGS:
cd backend && uv run pytest tests/ -v {{ARGS}}
[group('test')]
test-cov:
cd backend && uv run pytest tests/ --cov=app --cov=cli --cov=ml --cov-report=term-missing --cov-report=html
# =============================================================================
# CI / Quality
# =============================================================================
[group('ci')]
ci: lint typecheck test
[group('ci')]
check: ruff mypy
# =============================================================================
# Docker Compose (Production)
# =============================================================================
[group('docker')]
up *ARGS:
docker compose up {{ARGS}}
[group('docker')]
start *ARGS:
docker compose up -d {{ARGS}}
[group('docker')]
down *ARGS:
docker compose down {{ARGS}}
[group('docker')]
stop:
docker compose stop
[group('docker')]
build *ARGS:
docker compose build {{ARGS}}
[group('docker')]
rebuild:
docker compose build --no-cache
[group('docker')]
logs *SERVICE:
docker compose logs -f {{SERVICE}}
[group('docker')]
ps:
docker compose ps
[group('docker')]
shell service='backend':
docker compose exec -it {{service}} /bin/bash
# =============================================================================
# Docker Compose (Dev)
# =============================================================================
[group('dev')]
dev-up *ARGS:
docker compose -f dev.compose.yml up {{ARGS}}
[group('dev')]
dev-start *ARGS:
docker compose -f dev.compose.yml up -d {{ARGS}}
[group('dev')]
dev-down *ARGS:
docker compose -f dev.compose.yml down {{ARGS}}
[group('dev')]
dev-stop:
docker compose -f dev.compose.yml stop
[group('dev')]
dev-build *ARGS:
docker compose -f dev.compose.yml build {{ARGS}}
[group('dev')]
dev-rebuild:
docker compose -f dev.compose.yml build --no-cache
[group('dev')]
dev-logs *SERVICE:
docker compose -f dev.compose.yml logs -f {{SERVICE}}
[group('dev')]
dev-ps:
docker compose -f dev.compose.yml ps
[group('dev')]
dev-shell service='backend':
docker compose -f dev.compose.yml exec -it {{service}} /bin/bash
# =============================================================================
# Database (Docker)
# =============================================================================
[group('db')]
migrate *ARGS:
docker compose exec backend uv run alembic upgrade {{ARGS}}
[group('db')]
migration message:
docker compose exec backend uv run alembic revision --autogenerate -m "{{message}}"
[group('db')]
rollback:
docker compose exec backend uv run alembic downgrade -1
[group('db')]
db-history:
docker compose exec backend uv run alembic history --verbose
[group('db')]
db-current:
docker compose exec backend uv run 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
# =============================================================================
# AngelusVigil CLI
# =============================================================================
[group('vigil')]
serve *ARGS:
cd backend && uv run python -m app {{ARGS}}
[group('vigil')]
vigil-config:
cd backend && uv run vigil config
[group('vigil')]
vigil-health:
curl -sf http://localhost:8000/health | python -m json.tool
[group('vigil')]
vigil-train *ARGS:
cd backend && uv run vigil train {{ARGS}}
[group('vigil')]
vigil-replay *ARGS:
cd backend && uv run vigil replay {{ARGS}}
[group('vigil')]
vigil-download-csic:
cd backend && uv run python -m ml.download_csic
[group('vigil')]
vigil-status:
curl -sf http://localhost:8000/models/status | python -m json.tool
# =============================================================================
# Setup
# =============================================================================
[group('setup')]
setup: setup-backend env
@echo "Setup complete!"
[group('setup')]
setup-backend:
@echo "Setting up backend..."
cd backend && uv sync --all-groups
@echo "Backend setup complete (with dev + ml deps)!"
[group('setup')]
env:
@echo "Creating .env file..."
@if [ ! -f .env ]; then cp .env.example .env; echo "Created .env from example"; fi
@echo ".env ready! Please update with your values."
# =============================================================================
# Utilities
# =============================================================================
[group('util')]
info:
@echo "Project: {{project}}"
@echo "Version: {{version}}"
@echo "OS: {{os()}} ({{arch()}})"
[group('util')]
clean:
-rm -rf backend/.mypy_cache
-rm -rf backend/.pytest_cache
-rm -rf backend/.ruff_cache
-rm -rf backend/htmlcov
-rm -rf backend/.coverage
@echo "Cache directories cleaned"
# =============================================================================
# Dev-Log (target app for realistic log generation)
# =============================================================================
[group('devlog')]
devlog-up *ARGS:
cd dev-log && docker compose up -d {{ARGS}}
[group('devlog')]
devlog-down *ARGS:
cd dev-log && docker compose down {{ARGS}}
[group('devlog')]
devlog-build:
cd dev-log && docker compose build
[group('devlog')]
devlog-logs:
cd dev-log && docker compose logs -f
[group('devlog')]
devlog-simulate mode='mixed' count='100' delay='0.1':
python dev-log/simulate.py {{mode}} -n {{count}} -d {{delay}}
[group('devlog')]
devlog-normal count='200':
python dev-log/simulate.py normal -n {{count}} -d 0.05
[group('devlog')]
devlog-attack count='50':
python dev-log/simulate.py mixed -n {{count}} -d 0.1
[group('util')]
[confirm("Remove all containers, volumes, and build artifacts?")]
nuke:
@echo "Nuking everything..."
-docker compose -f dev.compose.yml down -v
-docker compose down -v
-rm -rf backend/.venv
-rm -rf backend/__pycache__
-rm -rf backend/.pytest_cache
-rm -rf backend/.mypy_cache
-rm -rf backend/.ruff_cache
@echo "Nuke complete!"