feat(world): жизненный цикл передан Airflow

- Зачем:
  - Compose должен поднимать инфраструктуру, а Airflow — владеть прикладным миром.
- Что:
  - добавлены даги создания и пересоздания мира с явными состояниями позиции;
  - цели make переведены на REST API Airflow, старые одноразовые службы удалены;
  - добавлена ограниченная учётная запись ClickHouse для прикладного DDL.
- Проверка:
  - `make lint`, `make config-test`, `bash -n scripts/run-dag.sh infra/airflow/init.sh`;
  - `make lint` и `make typecheck` в `generator/`;
  - холодный `make up`, повторный `make up`, `make rebuild-storage` и сценарий оборванной очистки;
  - `make smoke`, `make check-clickhouse`, `make check-services`.
This commit is contained in:
ddadmin committed 2026-08-21 23:01:11 +03:00
1 parent 0340b060f2
commit fc5244cc67
14 files changed
+619 -338

No files matched your search

+17
View File
@@ -57,6 +57,23 @@ jq -e '
((.environment // {}) | has("_PIP_ADDITIONAL_REQUIREMENTS") | not)
)
' >/dev/null <<<"$config_json"
jq -e '
.services as $services |
["kafka-init", "clickhouse-init", "world-init", "world-snapshots"] |
all(. as $name | $services | has($name) | not)
' >/dev/null <<<"$config_json"
jq -e '
.services.generator as $generator |
((($generator.depends_on // {}) | has("kafka-init")) | not) and
((($generator.depends_on // {}) | has("clickhouse-init")) | not)
' >/dev/null <<<"$config_json"
jq -e '
.services["airflow-scheduler"] as $service |
($service.environment.CLICKHOUSE_LIFECYCLE_PASSWORD | length > 0) and
any($service.volumes[]; .target == "/opt/airflow/world/generator" and .read_only) and
any($service.volumes[]; .target == "/opt/airflow/world/data" and .read_only) and
any($service.volumes[]; .target == "/opt/airflow/world/.dockerignore" and .read_only)
' >/dev/null <<<"$config_json"
jq -e '
.services["airflow-init"] as $service |
($service.environment.AIRFLOW__CORE__SIMPLE_AUTH_MANAGER_PASSWORDS_FILE ==