Files
PMOCrazycoder/Makefile
Eric Coissac 6556c84e29 Refactor devcontainer setup with MCP servers and dynamic config
Ajout d'une configuration DevContainer complète avec MCP Servers (LSP multi-langages, GitHub/Gitea), scripts de setup automatisés (crazycoder-setup.sh, setup-devcontainer.sh), et optimisation de l’image Docker (rustup/cargo-binstall, nettoyage des artefacts). Mise à jour du README avec documentation MCP et gestion dynamique des variables d’environnement (.env généré automatiquement selon la forge détectée). Simplification des entrypoints et postStartCommand pour une initialisation plus fiable.
2026-03-11 22:19:21 +01:00

169 lines
5.8 KiB
Makefile

# =============================================================================
# Image identity
# =============================================================================
IMAGE_NAME := pmocrazycoder
IMAGE_TAG := latest
# =============================================================================
# Registry
# =============================================================================
REGISTRY := niepce.petite-maison-orange.fr/public
# =============================================================================
# Build platforms
# =============================================================================
PLATFORMS := linux/amd64,linux/arm64
# =============================================================================
# Derived image identifiers
# =============================================================================
FULL_IMAGE := $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
OCI_ARCHIVE := $(IMAGE_NAME)-$(IMAGE_TAG).oci.tar
# =============================================================================
# Docker buildx builder
# =============================================================================
BUILDER := $(IMAGE_NAME)-builder
# =============================================================================
# OCI image annotations (injected via --build-arg)
# =============================================================================
OCI_VERSION := $(IMAGE_TAG)
OCI_CREATED := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
OCI_REVISION := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
# =============================================================================
# Build context
# =============================================================================
PROJECT_DIR := $(shell pwd)
BUILD_CONTEXT := .
DOCKERFILE := Dockerfile
BUILD_ARGS := \
--build-arg OCI_VERSION=$(OCI_VERSION) \
--build-arg OCI_CREATED=$(OCI_CREATED) \
--build-arg OCI_REVISION=$(OCI_REVISION)
# =============================================================================
# Dev container
# =============================================================================
WORKSPACE := /workspace
CONTAINER_NAME := ai-dev-container
MCP_LOG := $(WORKSPACE)/.ai_index/mcp.log
# =============================================================================
# Targets
# =============================================================================
.PHONY: all build build-multiplatform push run run-mcp \
init-index mcp-list embeddings update-graph \
restart-mcp bootstrap clean clean-builder help
## all : Build multi-platform image, push to registry
all: build-multiplatform push
## build : Build for the native platform and load into the local Docker daemon
build:
docker build $(BUILD_ARGS) \
--tag $(FULL_IMAGE) \
--file $(DOCKERFILE) \
$(BUILD_CONTEXT)
## build-multiplatform : Build for $(PLATFORMS) and export as a local OCI archive
build-multiplatform: .builder-ready
docker buildx build $(BUILD_ARGS) \
--builder $(BUILDER) \
--platform $(PLATFORMS) \
--tag $(FULL_IMAGE) \
--file $(DOCKERFILE) \
--provenance=false \
--output type=oci,dest=$(OCI_ARCHIVE) \
$(BUILD_CONTEXT)
# Create the buildx builder with docker-container driver (once)
.builder-ready:
docker buildx inspect $(BUILDER) > /dev/null 2>&1 \
|| docker buildx create --name $(BUILDER) --driver docker-container --bootstrap
touch .builder-ready
## push : Push the OCI archive to the registry using skopeo, then pull locally
push: $(OCI_ARCHIVE)
skopeo copy \
--dest-tls-verify=true \
--multi-arch all \
oci-archive:$(OCI_ARCHIVE) \
docker://$(FULL_IMAGE)
docker pull $(FULL_IMAGE)
# Ensure the OCI archive exists before pushing
$(OCI_ARCHIVE):
$(MAKE) build-multiplatform
## run : Run interactive container with mounted project
run:
docker run -v $(PROJECT_DIR):$(WORKSPACE) -it --rm $(FULL_IMAGE)
## run-mcp : Run container with MCP server in background
run-mcp:
docker run -v $(PROJECT_DIR):$(WORKSPACE) -it --rm $(FULL_IMAGE) bash
## init-index : Initialize .ai_index directory structure
init-index:
@echo "[MAKE] Initializing .ai_index..."
mkdir -p $(PROJECT_DIR)/.ai_index/ast
mkdir -p $(PROJECT_DIR)/.ai_index/embeddings
@if [ ! -f $(PROJECT_DIR)/.ai_index/graph.db ]; then \
sqlite3 $(PROJECT_DIR)/.ai_index/graph.db "VACUUM;"; \
fi
## mcp-list : Run MCP list_imports tool
mcp-list:
@echo "[MAKE] Running MCP list_imports.py..."
python3 $(PROJECT_DIR)/opt/dev-tools/list_imports.py --project $(WORKSPACE)
## embeddings : Generate embeddings
embeddings:
@echo "[MAKE] Generating embeddings..."
python3 $(PROJECT_DIR)/opt/dev-tools/generate_embeddings.py --project $(WORKSPACE)
## update-graph : Update dependency graph
update-graph:
@echo "[MAKE] Updating dependency graph..."
python3 $(PROJECT_DIR)/opt/dev-tools/update_graph.py --project $(WORKSPACE)
## restart-mcp : Restart MCP server inside running container
restart-mcp:
docker exec -it $(CONTAINER_NAME) bash -c "\
pkill -f mcp-server; \
/opt/bin/mcp-server --project $(WORKSPACE) > $(MCP_LOG) 2>&1 & \
"
## bootstrap : Build container and init index
bootstrap: build init-index
@echo "[MAKE] Bootstrap complete. Run 'make run' to start the container."
## clean : Remove OCI archive, local image and generated files
clean: clean-builder
docker rmi --force $(FULL_IMAGE) 2>/dev/null || true
rm -f $(OCI_ARCHIVE)
rm -f $(PROJECT_DIR)/.ai_index/*.log
rm -rf $(PROJECT_DIR)/.ai_index/ast/*
rm -rf $(PROJECT_DIR)/.ai_index/embeddings/*
## clean-builder : Remove the buildx builder
clean-builder:
docker buildx rm $(BUILDER) 2>/dev/null || true
rm -f .builder-ready
## help : Show this help
help:
@grep -E '^## ' $(MAKEFILE_LIST) | sed 's/^## //'