/
Al
/
TESamples
Обзор
Документация
Войти
/
Al
/
TESamples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Makefile
186 строк
7 KB
Александр Седых
added guide-not-framework.md, fixed problem
13 май 2026, 14:04
13 май 2026, 14:04
fdd9cf0
Код
Авторство
О чём код?
# ============================================================= # TokenExchange — task runner (GNU Make) # # На Windows: использовать через WSL или установить GNU Make # (например, choco install make). Альтернатива — выполнять команды # `docker compose ...` напрямую (см. README.md). # ============================================================= .DEFAULT_GOAL := help SHELL := /usr/bin/env bash COMPOSE := docker compose COMPOSE_OBS := docker compose -f docker-compose.yml -f docker-compose.observability.yml COMPOSE_FO := docker compose -f docker-compose.yml -f docker-compose.failover.yml COMPOSE_FULL:= docker compose -f docker-compose.yml -f docker-compose.observability.yml -f docker-compose.failover.yml COMPOSE_DOCS:= docker compose -f docker-compose.docs.yml # ---------- Helpers ---------- .PHONY: help help: ## Показать список целей @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_.-]+:.*?## / {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) # ---------- Lifecycle: compose ---------- .PHONY: up up: ## Поднять стек (Postgres + Keycloak в dev-режиме) $(COMPOSE) up -d .PHONY: down down: ## Остановить стек (volumes сохраняются) $(COMPOSE) down .PHONY: down-v down-v: ## Остановить и удалить volumes (для чистого старта, см. S17) $(COMPOSE) down -v .PHONY: restart restart: down up ## Перезапустить стек .PHONY: logs logs: ## Хвост логов всех сервисов $(COMPOSE) logs -f --tail=100 .PHONY: ps ps: ## Статус контейнеров $(COMPOSE) ps .PHONY: pull pull: ## Подтянуть актуальные образы (по pinned-тегам) $(COMPOSE) pull # ---------- Phase 4: Observability overlay ---------- .PHONY: up-obs up-obs: ## Поднять стек с observability (OTel/Jaeger/Prometheus/Grafana) $(COMPOSE_OBS) up -d --build .PHONY: down-obs down-obs: ## Остановить весь стек включая observability (volumes сохраняются) $(COMPOSE_OBS) down .PHONY: down-obs-v down-obs-v: ## Остановить и удалить volumes (включая prometheus/grafana data) $(COMPOSE_OBS) down -v .PHONY: ps-obs ps-obs: ## Статус контейнеров включая observability $(COMPOSE_OBS) ps # ---------- Phase 5: Failover overlay ---------- .PHONY: up-failover up-failover: ## Поднять стек с failover-оверлеем (Toxiproxy + multi-issuer) $(COMPOSE_FO) up -d --build .PHONY: up-full up-full: ## Поднять стек: base + observability + failover $(COMPOSE_FULL) up -d --build .PHONY: down-full down-full: ## Остановить полный стек (volumes сохраняются) $(COMPOSE_FULL) down .PHONY: down-full-v down-full-v: ## Остановить и удалить volumes полного стека $(COMPOSE_FULL) down -v .PHONY: scenario-01 scenario-01: ## Chaos S6/FR-06.5: primary realm disconnect (Toxiproxy) bash chaos/scenarios/01-primary-realm-disconnect.sh .PHONY: scenario-03 scenario-03: ## Chaos S5/FR-05.4: mass revoke через Keycloak admin API + Redis pub/sub bash chaos/scenarios/03-mass-revoke.sh .PHONY: lifecycle-18 lifecycle-18: ## Phase 8 / S18 / FR-15.1: user_at expired, user_rt valid bash chaos/scenarios/lifecycle-18-user-at-expired-rt-valid.sh .PHONY: lifecycle-26 lifecycle-26: ## Phase 8 / S26 / FR-15.9: clock skew observability bash chaos/scenarios/lifecycle-26-clock-skew.sh .PHONY: lifecycle-all lifecycle-all: lifecycle-18 lifecycle-26 ## Все реализованные lifecycle-сценарии Phase 8 (S18, S26) .PHONY: scenario-all scenario-all: scenario-01 scenario-03 lifecycle-18 lifecycle-26 ## Все chaos + lifecycle сценарии # ---------- Documentation site (mkdocs-material) ---------- .PHONY: docs docs: ## Поднять MkDocs live-reload (http://localhost:8000) $(COMPOSE_DOCS) up .PHONY: docs-d docs-d: ## MkDocs в фоне $(COMPOSE_DOCS) up -d @echo "Docs: http://localhost:$${DOCS_PORT:-8000}" .PHONY: docs-down docs-down: ## Остановить MkDocs $(COMPOSE_DOCS) down .PHONY: docs-build docs-build: ## Build статики mkdocs → ./site/ docker run --rm -v "$$(pwd):/docs" squidfunk/mkdocs-material:9.5.44 build --clean @echo "Static site: ./site/index.html" # ---------- Phase 1+: заглушки, реализуются в последующих фазах ---------- .PHONY: seed seed: ## (Фаза 1) Тестовые пользователи / клиенты — уже импортируются realm-export'ом @echo "[noop] FR-12: seed выполняется декларативно через realm-export. См. keycloak/realms/*.json" .PHONY: smoke smoke: ## (Фаза 1) Smoke-проверка TE-flow (FR-12.7) — лог init-контейнера @echo "Прогон smoke-проверки (init-контейнер выполняется автоматически при make up)." @echo "Для повторного прогона:" @echo " $(COMPOSE) up --no-deps --force-recreate keycloak-init" @$(COMPOSE) up --no-deps --force-recreate keycloak-init .PHONY: te-curl te-curl: ## Ручная проверка TE-flow через curl (с хоста) bash scripts/te-curl.sh .PHONY: test test: ## Unit + integration (Spring Boot tests, Phase 9 — minimum) @echo "Unit/IT тесты — мини-набор. Полные Testcontainers — отдельная подфаза." @echo "Сейчас прогон через Maven внутри docker:" docker run --rm -v "$$(pwd)/apps/spring:/work" -w /work \ maven:3.9-eclipse-temurin-21 mvn -B test || true .PHONY: vanilla vanilla: ## Запустить vanilla demo (фреймворк-независимый TE-client) $(COMPOSE) run --rm vanilla-demo .PHONY: vanilla-build vanilla-build: ## Собрать vanilla demo (Maven, на хосте) cd apps/vanilla && mvn -B clean package -DskipTests .PHONY: e2e e2e: ## End-to-end S5/S16/S18/S26 (требует поднятого стека) docker run --rm --network tokenexchange_default \ -v "$$(pwd)/chaos:/chaos:ro" \ -v "$$(pwd)/tests:/tests:ro" \ alpine:3.20 sh -c '\ apk add --no-cache --quiet bash curl jq && \ KC=http://keycloak:8080 \ BFF_JAVA=http://bff-agent:8080 \ BFF_PY=http://bff-agent-py:8080 \ bash /tests/e2e/run-all.sh' .PHONY: load load: ## k6 burst-singleflight (S3 / FR-04.1) @command -v k6 >/dev/null 2>&1 || { echo "k6 не установлен — см. https://k6.io/docs/getting-started/installation/"; exit 1; } k6 run tests/load/burst-singleflight.js -e BFF_URL=http://localhost:$${BFF_PORT:-8081} .PHONY: scenario-all scenario-all: ## (Фаза 5) Прогнать все chaos-сценарии @echo "[stub] Заглушка: scenario-all реализуется в Фазе 5 — см. PLAN.md §7" .PHONY: lifecycle-all lifecycle-all: ## (Фаза 8) Прогнать все сценарии истечения S18–S26 (FR-15) @echo "[stub] Заглушка: lifecycle-all реализуется в Фазе 8 — см. FR-15, S18–S26"