Ajout et configuration d’un environnement de développement conteneurisé (devcontainer) avec support multi-langages (Go, Rust, Python), intégration d’outils LLM locaux/cloud (LM Studio, Claude Pro), et refonte des outils MCP : suppression du module sandbox, correction de la gestion des chemins projet dans jj.py, ajout d’une fonction jj_new_tool, et structuration du Makefile pour le build multiplateforme. Mise à jour des scripts (docker-entrypoint.sh, setup-devcontainer.sh), du README.md et de bin/jj-ai-commit.sh pour automatiser la génération de messages de commit à partir des résumés des fichiers modifiés.
168 lines
5.7 KiB
Makefile
168 lines
5.7 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
|
|
push: $(OCI_ARCHIVE)
|
|
skopeo copy \
|
|
--dest-tls-verify=true \
|
|
--multi-arch all \
|
|
oci-archive:$(OCI_ARCHIVE) \
|
|
docker://$(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/^## //'
|