mirror of
https://github.com/trailofbits/buttercup
synced 2026-06-21 14:11:39 +00:00
77e92f5fca
Local SigNoz/Langfuse use a lot of resources that make local testing much more resource heavy (e.g. clickhouse is quite big). Instead, just assume users who wants this will deploy these resources separately elsewhere. This also has the advantage that each CRS deployment/un-deployment does not recreate the observability tools as well. The resources in minikube will be only for the real CRS functionalities and deploying and un-deploying the system will be faster.
207 lines
7.3 KiB
Makefile
207 lines
7.3 KiB
Makefile
# Makefile for Trail of Bits AIxCC Finals CRS
|
|
|
|
.PHONY: help setup-local setup-azure validate deploy test undeploy install-cscope lint lint-component clean-local wait-crs check-crs crs-instance-id status send-integration-task
|
|
|
|
# Default target
|
|
help:
|
|
@echo "Trail of Bits AIxCC Finals CRS - Available Commands:"
|
|
@echo ""
|
|
@echo "Setup:"
|
|
@echo " setup-local - Automated local development setup"
|
|
@echo " setup-azure - Automated production AKS setup"
|
|
@echo " validate - Validate current setup and configuration"
|
|
@echo ""
|
|
@echo "Deployment:"
|
|
@echo " deploy - Deploy to current environment (local or azure)"
|
|
@echo ""
|
|
@echo "Status:"
|
|
@echo " status - Check the status of the deployment"
|
|
@echo " crs-instance-id - Get the CRS instance ID"
|
|
@echo " download-artifacts - Download submitted artifacts from the CRS"
|
|
@echo ""
|
|
@echo "Testing:"
|
|
@echo " send-integration-task - Run integration-test task"
|
|
@echo " send-libpng-task - Run libpng task"
|
|
@echo ""
|
|
@echo "Development:"
|
|
@echo " install-cscope - Install cscope tool"
|
|
@echo " lint - Lint all Python code"
|
|
@echo " lint-component - Lint specific component (e.g., make lint-component COMPONENT=orchestrator)"
|
|
@echo ""
|
|
@echo "Cleanup:"
|
|
@echo " undeploy - Remove deployment and clean up resources"
|
|
@echo " clean-local - Delete Minikube cluster and remove local config"
|
|
|
|
# Setup targets
|
|
setup-local:
|
|
@echo "Setting up local development environment..."
|
|
./scripts/setup-local.sh
|
|
|
|
setup-azure:
|
|
@echo "Setting up production AKS environment..."
|
|
./scripts/setup-azure.sh
|
|
|
|
validate:
|
|
@echo "Validating setup..."
|
|
./scripts/validate-setup.sh
|
|
|
|
wait-crs:
|
|
@echo "Waiting for CRS deployment to be ready..."
|
|
@if ! kubectl get namespace $${BUTTERCUP_NAMESPACE:-crs} >/dev/null 2>&1; then \
|
|
echo "Error: CRS namespace not found. Deploy first with 'make deploy'."; \
|
|
exit 1; \
|
|
fi
|
|
@while true; do \
|
|
PENDING=$$(kubectl get pods -n $${BUTTERCUP_NAMESPACE:-crs} --no-headers 2>/dev/null | grep -v 'Completed' | grep -v 'Running' | wc -l); \
|
|
if [ "$$PENDING" -eq 0 ]; then \
|
|
echo "All CRS pods are running."; \
|
|
break; \
|
|
else \
|
|
echo "$$PENDING pods are not yet running. Waiting..."; \
|
|
sleep 5; \
|
|
fi \
|
|
done
|
|
|
|
check-crs:
|
|
@if ! kubectl get namespace $${BUTTERCUP_NAMESPACE:-crs} >/dev/null 2>&1; then \
|
|
echo "Error: CRS namespace not found. Deploy first with 'make deploy'."; \
|
|
exit 1; \
|
|
fi
|
|
@PENDING=$$(kubectl get pods -n $${BUTTERCUP_NAMESPACE:-crs} --no-headers 2>/dev/null | grep -v 'Completed' | grep -v 'Running' | wc -l); \
|
|
if [ "$$PENDING" -eq 0 ]; then \
|
|
echo "All CRS pods up and running."; \
|
|
else \
|
|
echo "$$PENDING pods are not yet running."; \
|
|
fi
|
|
|
|
|
|
crs-instance-id:
|
|
@echo "Getting CRS instance ID..."
|
|
@if ! kubectl get namespace $${BUTTERCUP_NAMESPACE:-crs} >/dev/null 2>&1; then \
|
|
echo "Error: CRS namespace not found. Deploy first with 'make deploy'."; \
|
|
exit 1; \
|
|
fi
|
|
echo "CRS instance ID: $$(kubectl get configmap -n $${BUTTERCUP_NAMESPACE:-crs} crs-instance-id -o jsonpath='{.data.crs-instance-id}')"
|
|
|
|
deploy:
|
|
@echo "Deploying environment..."
|
|
@if [ ! -f deployment/env ]; then \
|
|
echo "Error: Configuration file not found. Run 'make setup-local' or `make setup-azure` first."; \
|
|
exit 1; \
|
|
fi
|
|
@if [ ! -f external/buttercup-cscope/configure.ac ]; then \
|
|
echo "Error: The git submodules have not been initialized. Run 'git submodule update --init --recursive' first."; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Deployment configuration:"
|
|
@grep 'CLUSTER_TYPE=' deployment/env || echo "CLUSTER_TYPE not set"
|
|
@grep 'K8S_VALUES_TEMPLATE' deployment/env || echo "K8S_VALUES_TEMPLATE not set"
|
|
@if [ "$${FORCE:-false}" != "true" ]; then \
|
|
echo "Are you sure you want to deploy with these settings? Type 'yes' to continue:"; \
|
|
read ans; \
|
|
ans_lc=$$(echo "$$ans" | tr '[:upper:]' '[:lower:]'); \
|
|
if [ "$$ans_lc" != "yes" ] && [ "$$ans_lc" != "y" ]; then \
|
|
echo "Aborted by user."; \
|
|
exit 1; \
|
|
fi; \
|
|
fi
|
|
cd deployment && make up
|
|
make crs-instance-id
|
|
make wait-crs
|
|
|
|
status:
|
|
@echo "----------PODS------------"
|
|
@kubectl get pods -n $${BUTTERCUP_NAMESPACE:-crs}
|
|
@echo "----------SERVICES--------"
|
|
@kubectl get services -n $${BUTTERCUP_NAMESPACE:-crs}
|
|
@make --no-print-directory check-crs
|
|
|
|
download-artifacts:
|
|
@echo "Downloading artifacts from the CRS..."
|
|
@if ! kubectl get namespace $${BUTTERCUP_NAMESPACE:-crs} >/dev/null 2>&1; then \
|
|
echo "Error: CRS namespace not found. Deploy first with 'make deploy'."; \
|
|
exit 1; \
|
|
fi
|
|
./scripts/download_artifacts.sh
|
|
|
|
# Testing targets
|
|
send-integration-task:
|
|
@echo "Running integration test task..."
|
|
@if ! kubectl get namespace $${BUTTERCUP_NAMESPACE:-crs} >/dev/null 2>&1; then \
|
|
echo "Error: CRS namespace not found. Deploy first with 'make deploy'."; \
|
|
exit 1; \
|
|
fi
|
|
kubectl port-forward -n $${BUTTERCUP_NAMESPACE:-crs} service/buttercup-ui 31323:1323 &
|
|
@sleep 3
|
|
./orchestrator/scripts/task_integration_test.sh
|
|
pkill -f "kubectl port-forward" || true
|
|
exit 0
|
|
|
|
send-libpng-task:
|
|
@echo "Running libpng task..."
|
|
@if ! kubectl get namespace $${BUTTERCUP_NAMESPACE:-crs} >/dev/null 2>&1; then \
|
|
echo "Error: CRS namespace not found. Deploy first with 'make deploy'."; \
|
|
exit 1; \
|
|
fi
|
|
kubectl port-forward -n $${BUTTERCUP_NAMESPACE:-crs} service/buttercup-ui 31323:1323 &
|
|
@sleep 3
|
|
./orchestrator/scripts/task_crs.sh
|
|
pkill -f "kubectl port-forward" || true
|
|
exit 0
|
|
|
|
# Development targets
|
|
lint:
|
|
@echo "Linting all Python code..."
|
|
@set -e; for component in common orchestrator fuzzer fuzzer_runner program-model seed-gen patcher; do \
|
|
make --no-print-directory lint-component COMPONENT=$$component; \
|
|
done
|
|
|
|
# Note: common, patcher, orchestrator, program-model, seed-gen run mypy
|
|
lint-component:
|
|
@if [ -z "$(COMPONENT)" ]; then \
|
|
echo "Error: COMPONENT not specified. Usage: make lint-component COMPONENT=<component>"; \
|
|
echo "Available components: common, fuzzer, orchestrator, patcher, program-model, seed-gen"; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Linting $(COMPONENT)..."
|
|
@cd $(COMPONENT) && uv sync -q --all-extras && uv run ruff format --check && uv run ruff check
|
|
@if [ "$(COMPONENT)" = "common" ] || [ "$(COMPONENT)" = "patcher" ] || [ "$(COMPONENT)" = "orchestrator" ] || [ "$(COMPONENT)" = "program-model" ] || [ "$(COMPONENT)" = "seed-gen" ] || [ "$(COMPONENT)" = "fuzzer" ]; then \
|
|
cd $(COMPONENT) && uv run mypy; \
|
|
fi
|
|
|
|
reformat:
|
|
@echo "Reformatting all Python code..."
|
|
@for component in common orchestrator fuzzer fuzzer_runner program-model seed-gen patcher; do \
|
|
make --no-print-directory reformat-component COMPONENT=$$component; \
|
|
done
|
|
|
|
reformat-component:
|
|
@if [ -z "$(COMPONENT)" ]; then \
|
|
echo "Error: COMPONENT not specified. Usage: make reformat-component COMPONENT=<component>"; \
|
|
echo "Available components: common, fuzzer, orchestrator, patcher, program-model, seed-gen"; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Reformatting $(COMPONENT)..."
|
|
@cd $(COMPONENT) && uv sync -q --all-extras && uv run ruff format && uv run ruff check --fix
|
|
|
|
# Cleanup targets
|
|
undeploy:
|
|
@echo "Cleaning up deployment..."
|
|
cd deployment && make down
|
|
|
|
undeploy-k8s:
|
|
@echo "Cleaning up kubernetes resources..."
|
|
cd deployment && make down-k8s
|
|
|
|
clean-local:
|
|
@echo "Cleaning up local environment..."
|
|
minikube delete || true
|
|
rm -f deployment/env
|
|
|
|
# Additional targets migrated from justfile
|
|
install-cscope:
|
|
cd external/buttercup-cscope/ && autoreconf -i -s && ./configure && make && sudo make install
|
|
|
|
web-ui:
|
|
@./scripts/web_ui.sh
|