项目文件夹

文件
gelei abe3be01b4 feat: 🎸 version 1.0 agentic workflow
Major rewrite of PentestGPT to use an agentic pipeline architecture:
Core Changes: - New event-driven architecture with EventBus for
TUI-agent decoupling - Implemented AgentController with 5-state
lifecycle (IDLE->RUNNING->PAUSED->COMPLETED->ERROR) - Added AgentBackend
interface with ClaudeCodeBackend implementation - Session management
with file-based persistence for resumable pentests - Langfuse
integration for observability and tracing Interface: - New Textual-based
TUI with real-time activity feed - Keyboard shortcuts: F1 help, Ctrl+P
pause, Ctrl+Q quit - Enhanced CLI with --target, --instruction,
--non-interactive, --debug flags Project Structure: - Moved legacy
multi-LLM version (v0.15) to legacy/ directory - New pentestgpt/core/
for agent, controller, events, session modules - New
pentestgpt/interface/ for TUI and CLI components - New
pentestgpt/benchmark/ for xbow benchmark integration - Comprehensive
test suite in tests/ with unit and integration tests DevOps: - Docker
support with Ubuntu 24.04 container - GitHub Actions CI/CD pipeline -
Makefile with dev commands (test, lint, format, typecheck) - Added
xbow-validation-benchmarks as submodule
2025-12-13 00:56:40 +08:00

293 行
8.5 KiB
Makefile

# PentestGPT Makefile
# Usage: make [target]
.PHONY: help install config connect start stop shell logs clean-docker
.PHONY: dev-install test test-cov test-verbose lint format typecheck clean build
.PHONY: ci ci-quick ci-full
# Default target
help:
@echo "PentestGPT Commands"
@echo "==================="
@echo ""
@echo "Docker Workflow (Primary Usage):"
@echo " make install Install dependencies (uv sync) and build Docker image"
@echo " make config Configure authentication (interactive)"
@echo " Options: OpenRouter, Anthropic API, Manual Login"
@echo " make connect Connect to container (main entry point)"
@echo " make start Start container in background"
@echo " make stop Stop container (keeps config)"
@echo " make shell Open new shell in running container"
@echo " make logs View container logs"
@echo " make clean-docker Remove everything including config"
@echo ""
@echo "Development:"
@echo " make dev-install Install dev dependencies locally"
@echo " make test Run all tests"
@echo " make lint Run linter (ruff)"
@echo " make format Format code (ruff)"
@echo " make typecheck Run type checker (mypy)"
@echo " make check Run all checks (lint + typecheck)"
@echo " make ci Run full CI simulation (lint, format, typecheck, test, build)"
@echo " make ci-quick Run quick CI (skip build step)"
@echo " make ci-full Run CI with Docker tests (requires Docker)"
@echo " make clean Clean build artifacts"
# ============================================================================
# Docker Workflow (Primary Usage)
# ============================================================================
# Build the Docker image and install local dependencies
install:
@echo "Installing local dependencies with uv..."
uv sync
@echo "Building PentestGPT Docker image..."
docker compose build --no-cache
# Configure authentication (interactive menu)
config:
@chmod +x scripts/config.sh
@./scripts/config.sh
# Connect to the running container (main entry point)
# Handles different auth modes automatically based on .env.auth
connect:
@if [ "$$(docker ps -q -f name=pentestgpt)" ]; then \
echo "Attaching to running container..."; \
docker attach pentestgpt; \
else \
echo "Starting new container..."; \
if [ -f .env.auth ]; then \
docker compose --env-file .env.auth up -d && docker attach pentestgpt; \
else \
docker compose up -d && docker attach pentestgpt; \
fi; \
fi
# Start container in background
start:
@if [ -f .env.auth ]; then \
docker compose --env-file .env.auth up -d; \
else \
docker compose up -d; \
fi
# Stop and remove container (keeps config volume)
stop:
docker compose down
# Execute command in running container
shell:
docker exec -it pentestgpt /bin/bash
# View container logs
logs:
docker compose logs -f
# Clean up everything including volumes and auth config
clean-docker:
docker compose down -v
docker rmi pentestgpt:latest 2>/dev/null || true
rm -f .env.auth
# ============================================================================
# Local Development Setup
# ============================================================================
dev-install:
uv sync
# ============================================================================
# Testing
# ============================================================================
test:
uv run pytest tests/ -v --ignore=tests/docker/
test-all:
uv run pytest tests/ -v
test-cov:
uv run pytest tests/ -v --ignore=tests/docker/ --cov=pentestgpt --cov-report=term-missing --cov-report=html
test-verbose:
uv run pytest tests/ -vvs --ignore=tests/docker/
# Test by category
test-unit:
uv run pytest tests/unit/ -v
test-integration:
uv run pytest tests/integration/ -v
test-docker:
uv run pytest tests/docker/ -v -m docker
test-fast:
uv run pytest tests/ -v -m "not slow and not docker" --ignore=tests/docker/
# Run specific test files
test-session:
uv run pytest tests/unit/test_session.py -v
test-events:
uv run pytest tests/unit/test_events.py -v
test-controller:
uv run pytest tests/integration/test_controller.py -v
test-backend:
uv run pytest tests/unit/test_backend_interface.py -v
test-config:
uv run pytest tests/unit/test_config.py -v
test-benchmark:
uv run pytest tests/unit/test_benchmark_registry.py tests/integration/test_benchmark_cli.py -v
# ============================================================================
# Code Quality
# ============================================================================
lint:
uv run ruff check pentestgpt/ tests/
lint-fix:
uv run ruff check --fix pentestgpt/ tests/
format:
uv run ruff format pentestgpt/ tests/
format-check:
uv run ruff format --check pentestgpt/ tests/
typecheck:
uv run mypy pentestgpt/
check: lint typecheck
@echo "All checks passed!"
# ============================================================================
# CI Simulation (End-to-End)
# ============================================================================
# Full CI simulation - mirrors GitHub Actions workflow exactly
ci:
@echo "=========================================="
@echo "Running full CI simulation..."
@echo "=========================================="
@echo ""
@echo "[1/5] Lint check (ruff check)..."
uv run ruff check pentestgpt/ tests/
@echo ""
@echo "[2/5] Format check (ruff format --check)..."
uv run ruff format --check pentestgpt/ tests/
@echo ""
@echo "[3/5] Type check (mypy)..."
uv run mypy pentestgpt/
@echo ""
@echo "[4/5] Running tests..."
uv run pytest tests/ -v --ignore=tests/docker/
@echo ""
@echo "[5/5] Building package..."
uv build
@echo ""
@echo "=========================================="
@echo "CI simulation completed successfully!"
@echo "=========================================="
# Quick CI - skip build step (faster iteration)
ci-quick:
@echo "=========================================="
@echo "Running quick CI simulation..."
@echo "=========================================="
@echo ""
@echo "[1/4] Lint check (ruff check)..."
uv run ruff check pentestgpt/ tests/
@echo ""
@echo "[2/4] Format check (ruff format --check)..."
uv run ruff format --check pentestgpt/ tests/
@echo ""
@echo "[3/4] Type check (mypy)..."
uv run mypy pentestgpt/
@echo ""
@echo "[4/4] Running tests..."
uv run pytest tests/ -v --ignore=tests/docker/
@echo ""
@echo "=========================================="
@echo "Quick CI simulation completed successfully!"
@echo "=========================================="
# Full CI with Docker tests (requires Docker)
ci-full:
@echo "=========================================="
@echo "Running full CI simulation with Docker..."
@echo "=========================================="
@echo ""
@echo "[1/7] Lint check (ruff check)..."
uv run ruff check pentestgpt/ tests/
@echo ""
@echo "[2/7] Format check (ruff format --check)..."
uv run ruff format --check pentestgpt/ tests/
@echo ""
@echo "[3/7] Type check (mypy)..."
uv run mypy pentestgpt/
@echo ""
@echo "[4/7] Running tests..."
uv run pytest tests/ -v --ignore=tests/docker/
@echo ""
@echo "[5/7] Validating docker-compose config..."
docker compose config
@echo ""
@echo "[6/7] Building Docker image..."
docker compose build
@echo ""
@echo "[7/7] Running Docker tests..."
uv run pytest tests/docker/ -v -m docker
@echo ""
@echo "[8/8] Building package..."
uv build
@echo ""
@echo "=========================================="
@echo "Full CI with Docker completed successfully!"
@echo "=========================================="
# ============================================================================
# Build
# ============================================================================
build:
uv build
clean:
rm -rf dist/
rm -rf build/
rm -rf *.egg-info/
rm -rf .pytest_cache/
rm -rf .mypy_cache/
rm -rf .ruff_cache/
rm -rf htmlcov/
rm -rf .coverage
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true
# ============================================================================
# Local Development
# ============================================================================
# Run the TUI locally (for development)
run:
uv run pentestgpt --target example.com
# Run in debug mode
run-debug:
uv run pentestgpt --target example.com --debug
# Run in raw mode (no TUI, streaming output for debugging)
run-raw:
uv run pentestgpt --target example.com --raw
# Watch for changes and run tests
watch:
uv run ptw tests/ -- -v