# dagstack/plugin-system-python: Makefile for codegen + dev workflows.
#
# Главное:
#   make emit  — пересоздать src/dagstack/plugin_system/_generated/ из spec'а.
# CI gate:
#   make emit && git diff --exit-code src/dagstack/plugin_system/_generated/

SPEC_DIR := spec
GENERATED_DIR := src/dagstack/plugin_system/_generated

.PHONY: help emit emit-check sync test lint

help:
	@echo "Targets:"
	@echo "  emit         — regenerate $(GENERATED_DIR)/ from $(SPEC_DIR)/."
	@echo "  emit-check   — smoke: emit в tmpdir, сверить с текущим (CI gate)."
	@echo "  sync         — uv sync --group dev (deps + spec submodule)."
	@echo "  test         — uv run pytest."
	@echo "  lint         — uv run pre-commit run --all-files."

# Re-emit generated Python types from spec/ кодгеном.
# Удаляет старый _generated/ перед re-emit, чтобы не остались orphan файлы
# от удалённых kinds.
emit: $(SPEC_DIR)/emitters/python_pydantic.py
	@if [ ! -d "$(SPEC_DIR)" ]; then \
		echo "ERROR: $(SPEC_DIR)/ not found. Run: git submodule update --init --recursive"; \
		exit 1; \
	fi
	rm -rf $(GENERATED_DIR)
	mkdir -p $(GENERATED_DIR)
	uv run python $(SPEC_DIR)/emitters/python_pydantic.py --output $(GENERATED_DIR)
	# `__init__.py` чтобы _generated был обычным package'ом (не PEP 420 namespace).
	touch $(GENERATED_DIR)/__init__.py
	@for d in $$(find $(GENERATED_DIR) -mindepth 1 -type d); do touch $$d/__init__.py; done
	@echo "Done. _generated/ ready. CI gate: git diff --exit-code $(GENERATED_DIR)"

# Smoke-проверка emit'а (для CI без записи).
emit-check:
	uv run python $(SPEC_DIR)/emitters/python_pydantic.py --check

sync:
	git submodule update --init --recursive
	uv sync --group dev

test:
	uv run pytest

lint:
	uv run pre-commit run --all-files
