59c3ad4918
- tests/deploy/test_compose_manifests.py — 7 тестов на compose-инварианты (без Docker, только PyYAML) — готовы к включению в CI (#17); - Makefile: dev-up/dev-up-stub/dev-down/dev-logs/dev-verify/dev-verify-stub/ dev-reset/test-netns/test-netns-keep/test-netns-ci/test-manifests/lint-shell, переменные HOST_DIR, DASH_PORT, NETNS_ARGS; dev-up без docker падает с внятным сообщением, а не трейсбеком; - deploy/README.md — таблица артефактов и быстрые команды стенда. Refs #21 Refs #15
94 lines
4.0 KiB
Makefile
94 lines
4.0 KiB
Makefile
PY ?= python3
|
|
VENV ?= .venv
|
|
BIN := $(VENV)/bin
|
|
IMAGE ?= awg-dash:dev
|
|
COMPOSE_DEV := deploy/docker-compose.dev.yml
|
|
COMPOSE_TEST := deploy/docker-compose.test.yml
|
|
COMPOSE_STUB := deploy/docker-compose.stub.yml
|
|
VERIFY := deploy/verify-dev-stand.sh
|
|
COMPOSE ?= docker compose
|
|
# Состояние dev-стенда: bind mount для /config и /data (AC-2 задачи #21).
|
|
HOST_DIR ?= /opt/awg-dash-dev
|
|
# Хост-порт стенда. На dev-хосте 8080 занят другим сервисом — по умолчанию 8180;
|
|
# внутри контейнера приложение всегда на 8080.
|
|
DASH_PORT ?= 8180
|
|
NETNS_ARGS ?=
|
|
VERIFY_ARGS ?=
|
|
MANIFEST_ARGS ?=
|
|
|
|
.PHONY: help venv lint fmt test build dev-up dev-up-stub dev-down dev-logs dev-verify \
|
|
dev-verify-stub dev-reset test-netns test-netns-keep test-netns-ci test-manifests lint-shell
|
|
|
|
help:
|
|
@grep -E '^[a-zA-Z_-]+:' $(MAKEFILE_LIST) | sed 's/:.*//' | sort -u
|
|
|
|
venv:
|
|
$(PY) -m venv $(VENV)
|
|
$(BIN)/pip install -U pip
|
|
$(BIN)/pip install -r requirements-dev.txt
|
|
|
|
lint:
|
|
$(BIN)/ruff check backend
|
|
$(BIN)/mypy backend
|
|
|
|
fmt:
|
|
$(BIN)/ruff format backend
|
|
$(BIN)/ruff check --fix backend
|
|
|
|
test:
|
|
$(BIN)/pytest
|
|
|
|
build:
|
|
@test -f deploy/Dockerfile || { echo 'deploy/Dockerfile ещё нет — задача #18'; exit 1; }
|
|
docker build -f deploy/Dockerfile -t $(IMAGE) .
|
|
|
|
# --- dev/staging стенд (задача #21) ------------------------------------------
|
|
dev-up:
|
|
@test -f $(COMPOSE_DEV) || { echo '$(COMPOSE_DEV) ещё нет — задача #21'; exit 1; }
|
|
@command -v docker >/dev/null 2>&1 || { echo 'нет docker: dev-стенд поднимается на Docker-хосте (см. deploy/dev-stand.md)'; exit 1; }
|
|
AWG_DASH_PORT=$(DASH_PORT) AWG_DASH_HOST_DIR=$(HOST_DIR) $(COMPOSE) -f $(COMPOSE_DEV) up -d --build
|
|
|
|
# Health-заглушка вместо API до мержа #31 — только для проверки плумбинга стенда.
|
|
dev-up-stub:
|
|
@test -f $(COMPOSE_STUB) || { echo '$(COMPOSE_STUB) ещё нет — задача #21'; exit 1; }
|
|
AWG_DASH_PORT=$(DASH_PORT) AWG_DASH_HOST_DIR=$(HOST_DIR) $(COMPOSE) -f $(COMPOSE_DEV) -f $(COMPOSE_STUB) up -d --build
|
|
|
|
dev-down:
|
|
AWG_DASH_HOST_DIR=$(HOST_DIR) $(COMPOSE) -f $(COMPOSE_DEV) down
|
|
|
|
dev-logs:
|
|
AWG_DASH_HOST_DIR=$(HOST_DIR) $(COMPOSE) -f $(COMPOSE_DEV) logs -f --tail=100
|
|
|
|
# Проверка AC #21 на Docker-хосте: health 200 + состояние переживает restart.
|
|
dev-verify:
|
|
AWG_DASH_PORT=$(DASH_PORT) AWG_DASH_HOST_DIR=$(HOST_DIR) bash $(VERIFY) $(VERIFY_ARGS)
|
|
|
|
dev-verify-stub:
|
|
AWG_DASH_PORT=$(DASH_PORT) AWG_DASH_HOST_DIR=$(HOST_DIR) bash $(VERIFY) --stub $(VERIFY_ARGS)
|
|
|
|
# Останавливает стенд; каталоги состояния сохраняются (удалять вручную).
|
|
dev-reset:
|
|
AWG_DASH_HOST_DIR=$(HOST_DIR) $(COMPOSE) -f $(COMPOSE_DEV) down --remove-orphans
|
|
@echo "каталоги состояния сохранены: $(HOST_DIR)/config, $(HOST_DIR)/data (удалять вручную)"
|
|
|
|
# --- netns-стенд (задача #21) ------------------------------------------------
|
|
test-netns:
|
|
@test -d tests/netns || { echo 'tests/netns ещё нет — задача #21'; exit 1; }
|
|
bash tests/netns/run.sh $(NETNS_ARGS)
|
|
|
|
# То же, но топология и логи остаются для отладки (снести: tests/netns/topology.sh down).
|
|
test-netns-keep:
|
|
bash tests/netns/run.sh --keep-topology --keep-logs $(NETNS_ARGS)
|
|
|
|
# Тот же стенд в привилегированном контейнере — путь для CI (#17).
|
|
test-netns-ci:
|
|
AWG_DASH_IMAGE=$(IMAGE) $(COMPOSE) -f $(COMPOSE_TEST) run --rm netns
|
|
|
|
# --- статические проверки манифестов и скриптов ------------------------------
|
|
test-manifests:
|
|
$(PY) tests/deploy/validate_compose.py $(MANIFEST_ARGS)
|
|
|
|
lint-shell:
|
|
@command -v shellcheck >/dev/null 2>&1 || { echo 'shellcheck не установлен (apt-get install shellcheck)'; exit 1; }
|
|
shellcheck -x -S style tests/netns/*.sh deploy/*.sh
|