diff --git a/Makefile b/Makefile index 75ecc56..cf65954 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,15 @@ .DEFAULT_GOAL := help # --- SETTINGS --- +PYTHON_VERSION = 3.12.7 +PYTHON_VERSION_SHORT = $(shell echo $(PYTHON_VERSION) | cut -d. -f1,2) # Change to 'uv' when ready. RUNNER ?= poetry + +export PYTHON_VERSION +export PYTHON_VERSION_SHORT export RUNNER +export IMAGE_NAME # --- VARIABLES --- CORE_DIR = brain @@ -20,7 +26,11 @@ INSTALL_CMD = $(if $(filter uv,$(RUNNER)),sync,install) ARGS = $(filter-out $@,$(MAKECMDGOALS)) BUMP_CMD = cd $(CORE_DIR) && $(RUNNER) run bump-my-version bump COMPOSE_CMD = docker-compose -DOCKER_CMD = cd $(CORE_DIR) && docker build --build-arg RUNNER=$(RUNNER) -t $(IMAGE_NAME):latest . +DOCKER_CMD = cd $(CORE_DIR) && docker build \ + --build-arg PYTHON_VERSION=$(PYTHON_VERSION) \ + --build-arg PYTHON_VERSION_SHORT=$(PYTHON_VERSION_SHORT) \ + --build-arg RUNNER=$(RUNNER) \ + -t $(IMAGE_NAME):latest . RUNNER_ADD = cd $(CORE_DIR) && $(RUNNER) add RUNNER_HOOKS = cd $(CORE_DIR) && $(RUNNER) run pre-commit install -c ../.pre-commit-config.yaml @@ -35,7 +45,7 @@ T = \033[36m R = \033[0m # --- TARGETS --- -.PHONY: add build check-docker check-runner clean coverage down format help init-env install install-hooks lint logs major minor patch prune ps restart run shell test up update _check_branch +.PHONY: add build build-test check-docker check-runner clean coverage down format help init-dotenv install install-hooks lint logs major minor patch prune ps restart run shell test up update _check_branch _ci-image-name _ci-run-tests # Catch-all for args %: @@ -50,6 +60,16 @@ build: check-docker $(DOCKER_CMD) @echo "โœ… Image $(IMAGE_NAME):latest ready." +build-test: check-docker + @echo "$(T)๐Ÿณ Building test image (with dev deps)...$(R)" + cd $(CORE_DIR) && docker build \ + --build-arg RUNNER=$(RUNNER) \ + --build-arg PYTHON_VERSION=$(PYTHON_VERSION) \ + --build-arg PYTHON_VERSION_SHORT=$(PYTHON_VERSION_SHORT) \ + --target test \ + -t $(IMAGE_NAME):test . + @echo "โœ… Test image $(IMAGE_NAME):test ready." + check-docker: @command -v docker >/dev/null 2>&1 || { echo "$(R)โŒ Docker not installed$(R)"; exit 1; } @docker info >/dev/null 2>&1 || { echo "$(R)โŒ Docker daemon not running$(R)"; exit 1; } @@ -87,12 +107,13 @@ help: @echo "$(G)Setup:$(R)" @echo " $(T)check-docker $(R) Verify Docker is installed and running." @echo " $(T)check-runner $(R) Verify package manager ($(RUNNER))." - @echo " $(T)init-env $(R) Create .env from .env.example with generated secrets." + @echo " $(T)init-dotenv $(R) Create .env from .env.example with generated secrets." @echo " $(T)install $(R) Install ALL dependencies (Prod + Dev)." @echo " $(T)install-hooks $(R) Install git pre-commit hooks." @echo "" @echo "$(G)Docker:$(R)" - @echo " $(T)build $(R) Build the docker image." + @echo " $(T)build $(R) Build the docker image (production)." + @echo " $(T)build-test $(R) Build the docker image (with dev deps for testing)." @echo " $(T)down $(R) Stop and remove containers." @echo " $(T)logs $(R) Follow logs." @echo " $(T)prune $(R) Clean Docker system." @@ -107,13 +128,13 @@ help: @echo " $(T)coverage $(R) Run tests with coverage." @echo " $(T)format $(R) Format code (Ruff)." @echo " $(T)lint $(R) Lint code without fixing." - @echo " $(T)test ... $(R) Run tests." + @echo " $(T)test ... $(R) Run tests (local with $(RUNNER))." @echo " $(T)update $(R) Update dependencies." @echo "" @echo "$(G)Versioning:$(R)" @echo " $(T)major/minor/patch $(R) Bump version." -init-env: +init-dotenv: @echo "$(T)๐Ÿ”‘ Initializing .env file...$(R)" @if [ -f .env ]; then \ echo "$(R)โš ๏ธ .env already exists. Skipping.$(R)"; \ @@ -196,7 +217,7 @@ shell: check-docker test: check-runner @echo "$(T)๐Ÿงช Running tests...$(R)" - $(RUNNER_RUN) pytest -n auto --dist=loadscope $(ARGS) + $(RUNNER_RUN) pytest $(ARGS) up: check-docker @echo "$(T)๐Ÿš€ Starting Agent Media...$(R)" @@ -213,3 +234,11 @@ _check_branch: if [ "$$curr" != "main" ]; then \ echo "โŒ Error: not on the main branch"; exit 1; \ fi + +_ci-image-name: + @echo "IMAGE_NAME=$(IMAGE_NAME)" + +_ci-run-tests: build-test + @echo "$(T)๐Ÿงช Running tests in Docker...$(R)" + docker run --rm $(IMAGE_NAME):test pytest + @echo "โœ… Tests passed."