refactor(make): корень — про стенд, генератор — за своей дверью
- Зачем: - корневые цели смешивали два уровня: пять из шестнадцати начинались с cd generator. - цель, названная общерепозиторной, охватывала 31 файл Python из 34: даги и Superset не видел ни линт, ни типы. - Что: - lint, typecheck, test, docs и inventory переехали в новый generator/Makefile. - корневой lint заведён по коду стенда — dags и infra/superset — с явными путями и закреплённой версией ruff. - заведён корневой ruff.toml: тот же список правил, target-version по младшему Python в образах стенда. - цели корня сгруппированы по использованию, осталось двенадцать. - два файла дагов переформатированы под новую проверку. - карта проверок, оба README, спека генератора и AGENTS.md приведены к двум дверям. - Проверка: - make lint; make config-test — зелёные. - make -C generator lint; typecheck; test — зелёные, 407 тестов. - ruff check --show-files: из корня ровно три файла стенда, из generator/ — только его. - цена корневого lint замерена (0,4 с) и вписана в карту проверок. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Цели генератора. Дверь у него своя, потому что своя и сущность: пакет с
|
||||
# собственными `pyproject.toml`, `uv.lock` и образом, заменяемый целиком
|
||||
# (спека генератора, раздел 1). Отсюда и короткие имена — каталог уже сказал,
|
||||
# о ком речь, и суффикс `-generator` был бы вторым разом про то же.
|
||||
.PHONY: lint typecheck test docs inventory
|
||||
|
||||
# --- Проверки ---
|
||||
|
||||
lint:
|
||||
uv run ruff check
|
||||
uv run ruff format --check
|
||||
|
||||
typecheck:
|
||||
uv run ty check
|
||||
|
||||
test:
|
||||
uv run pytest
|
||||
|
||||
# --- Сборка из кода ---
|
||||
|
||||
docs:
|
||||
uv run python -m clickstream_generator.schema_doc \
|
||||
../docs/formats/clickstream-event.md
|
||||
|
||||
inventory:
|
||||
uv run python -m clickstream_generator.inventory \
|
||||
../data/world-inventory.json
|
||||
+7
-2
@@ -92,12 +92,17 @@ D0 живёт предыстория, поэтому любой день соб
|
||||
|
||||
Проиграть день — [быстрый старт](../README.md#как-позвать-генератор) и `--help`.
|
||||
|
||||
Из корня репозитория:
|
||||
Из этого каталога — цели генератора живут здесь, а не в корне:
|
||||
|
||||
- `make test` — тесты генератора;
|
||||
- `make lint` — ruff: проверка и формат;
|
||||
- `make typecheck` — ty: проверка типов;
|
||||
- `make docs` — пересобрать описание выгрузки.
|
||||
- `make docs` — пересобрать описание выгрузки;
|
||||
- `make inventory` — пересобрать опись мира.
|
||||
|
||||
В корне репозитория `make lint` тоже есть, но он про код стенда — даги и
|
||||
Superset. Одноимённые цели за разными дверями охватывают разное:
|
||||
[карта проверок](../docs/architecture/testing.md).
|
||||
|
||||
Python и зависимости — через `uv`, версии закреплены в `uv.lock`: на этом
|
||||
держится обещание побайтовой воспроизводимости (спека, раздел 2).
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
пересчитывается он и обычным `sha256sum` по сыгранному в файл дню (как
|
||||
именно — в README репозитория).
|
||||
|
||||
Собирается опись из корня репозитория целью `make inventory`, а свежесть её
|
||||
Собирается опись из каталога генератора целью `make inventory`, а свежесть её
|
||||
сторожит тест — как и у «описания выгрузки».
|
||||
"""
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
содержание берётся из контракта (`schema`), правится только там; свежесть
|
||||
документа сторожит тест.
|
||||
|
||||
Запуск — из корня репозитория целью `make docs`.
|
||||
Запуск — из каталога генератора целью `make docs`.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
@@ -18,7 +18,7 @@ PREAMBLE = """# Описание выгрузки: событие кликстр
|
||||
|
||||
Документ собран из контракта схемы генератора
|
||||
(`generator/src/clickstream_generator/schema.py`). Руками не править —
|
||||
пересобрать: `make docs`.
|
||||
пересобрать: `make docs` из каталога `generator/`.
|
||||
|
||||
Одно событие — одна строка: хит по образцу облачной выгрузки Яндекс Метрики.
|
||||
Многозначное лежит в параллельных массивах, плюс одно сырое JSON-поле
|
||||
|
||||
Reference in New Issue
Block a user