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.
169 lines
5.8 KiB
Makefile
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/^## //'
|