# mdsrc — 開発タスク
# format は uvx で ruff のバージョンを固定して実行する（環境差を排除）。

# ruff のピン留めバージョン（更新時はここだけ変える。py314 対応版＝0.15+ 目安）
RUFF_VERSION := 0.15.18

# lint/format/test の対象
SRC := src tests

.PHONY: help sync format format-check lint test check dist publish changelog changelog-unreleased changelog-release build run-hello run-app run tutorials clean

help:  ## このヘルプを表示
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
		awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-12s\033[0m %s\n", $$1, $$2}'

sync:  ## 依存をインストール
	@uv sync

format:  ## コード整形（自動修正）
	uvx ruff@$(RUFF_VERSION) format $(SRC)
	uvx ruff@$(RUFF_VERSION) check --fix $(SRC)

format-check:  ## 整形確認のみ（CI 向け・書き換えない）
	uvx ruff@$(RUFF_VERSION) format --check $(SRC)
	uvx ruff@$(RUFF_VERSION) check $(SRC)

lint:  ## lint のみ
	uvx ruff@$(RUFF_VERSION) check $(SRC)

test:  ## テストを実行
	@uv run pytest

check: format-check test  ## 一括検証（format 確認 + test）

# パッケージング（PyPI 配布物）。注: mdsrc の `build` は tutorials 変換に使うため、
# パッケージのビルドは `dist` を使う（名前衝突の回避）。
dist:  ## 配布物 (sdist+wheel) を dist/ にビルドし twine check
	rm -rf dist
	uv build
	uvx twine@6 check dist/*

publish: dist  ## 手動公開（非常用。正路は CI の Trusted Publishing）
	uv publish

# CHANGELOG.md を conventional commits から生成（生成後に手で整えてよい＝CHANGELOG が正本）。
changelog:  ## CHANGELOG.md を git-cliff で生成
	uvx --from 'git-cliff>=2,<3' git-cliff -o CHANGELOG.md

changelog-unreleased:  ## 次リリース分（未タグ）の変更をプレビュー表示
	uvx --from 'git-cliff>=2,<3' git-cliff --unreleased

# リリース直前に未タグ分を VERSION の節へ確定する（例: make changelog-release VERSION=v0.2.0）。
# 実行後 CHANGELOG.md をコミット → git tag VERSION を打つ。CI がこの節を Release 本文に流す。
changelog-release:  ## CHANGELOG を VERSION で確定（make changelog-release VERSION=v0.2.0）
	uvx --from 'git-cliff>=2,<3' git-cliff --tag $(VERSION) -o CHANGELOG.md

build:  ## tutorials/ 配下を *.py に変換（実行はしない）
	@uv run mdsrc build tutorials

run-hello:  ## 単一ファイル例（python hello.py 相当）
	@uv run mdsrc run tutorials/hello.py.md

run-app:  ## ディレクトリ例（python dir/ 相当、__main__.py を実行）
	@uv run mdsrc run tutorials/app/

run: run-hello run-app  ## サンプルをまとめて実行

tutorials: run  ## run のエイリアス

clean:  ## 生成された *.py と各種キャッシュを削除
	find tutorials -name '*.py' -delete
	rm -rf .pytest_cache .ruff_cache **/__pycache__
