327 lines
8.3 KiB
Makefile
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!"
|