AURORA-1677: Dockerfile fix
This commit is contained in:
parent
fb981cf3b2
commit
ed1ad8437f
@ -1,4 +1,6 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
# Образ для dev и `make check-full`. Контекст сборки — корень репозитория arm-core.
|
# Образ для dev и `make check-full`. Контекст сборки — корень репозитория arm-core.
|
||||||
|
# Библиотека передаётся контекстом statements (make docker-build, STATEMENTS_DIR).
|
||||||
# Платформенные пакеты raisa_* (Nexus) в образ не ставятся — та же логика, что в `make venv`.
|
# Платформенные пакеты raisa_* (Nexus) в образ не ставятся — та же логика, что в `make venv`.
|
||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
|
|
||||||
@ -8,8 +10,9 @@ ENV PYTHONUNBUFFERED=1 \
|
|||||||
WORKDIR /app/api
|
WORKDIR /app/api
|
||||||
|
|
||||||
COPY api/requirements.txt ./requirements.txt
|
COPY api/requirements.txt ./requirements.txt
|
||||||
RUN grep -v '^raisa_' requirements.txt > /tmp/req.txt \
|
RUN --mount=type=bind,from=statements,target=/tmp/statements,rw \
|
||||||
&& pip install --no-cache-dir -r /tmp/req.txt \
|
grep -v '^raisa_' requirements.txt > /tmp/req.txt \
|
||||||
|
&& pip install --no-cache-dir -r /tmp/req.txt /tmp/statements \
|
||||||
&& rm /tmp/req.txt
|
&& rm /tmp/req.txt
|
||||||
|
|
||||||
COPY api/ ./
|
COPY api/ ./
|
||||||
|
|||||||
8
Makefile
8
Makefile
@ -2,6 +2,7 @@
|
|||||||
VENV := api/.venv
|
VENV := api/.venv
|
||||||
BIN := $(CURDIR)/$(VENV)/bin
|
BIN := $(CURDIR)/$(VENV)/bin
|
||||||
STATEMENTS_DIR ?= ../pylib_ai_arm_statements
|
STATEMENTS_DIR ?= ../pylib_ai_arm_statements
|
||||||
|
STATEMENTS_TAG ?= v0.1.1
|
||||||
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
||||||
# DBML относительно api/: и в основном workspace, и в worktree .wt/<срез>/ это соседний docs/
|
# DBML относительно api/: и в основном workspace, и в worktree .wt/<срез>/ это соседний docs/
|
||||||
DBML ?= ../../docs/model/data-model-v5.19.dbml
|
DBML ?= ../../docs/model/data-model-v5.19.dbml
|
||||||
@ -54,7 +55,12 @@ check-infra:
|
|||||||
|
|
||||||
# Сборка образа из корня репозитория (Dockerfile — бэкенд)
|
# Сборка образа из корня репозитория (Dockerfile — бэкенд)
|
||||||
docker-build:
|
docker-build:
|
||||||
docker build -t arm-core .
|
@release=$$(git -C "$(STATEMENTS_DIR)" rev-parse --verify "refs/tags/$(STATEMENTS_TAG)^{commit}") || \
|
||||||
|
{ echo "Ошибка: в библиотеке отсутствует тег $(STATEMENTS_TAG); выполните git fetch --tags в $(STATEMENTS_DIR)" >&2; exit 1; }; \
|
||||||
|
head=$$(git -C "$(STATEMENTS_DIR)" rev-parse HEAD) || exit 1; \
|
||||||
|
[ "$$head" = "$$release" ] || \
|
||||||
|
{ echo "Ошибка: HEAD библиотеки не совпадает с $(STATEMENTS_TAG)" >&2; exit 1; }
|
||||||
|
docker build --build-context "statements=$(STATEMENTS_DIR)" -t arm-core .
|
||||||
|
|
||||||
# Фронт: установка зависимостей (raisa-* без Nexus пропускаются как optionalDependencies), biome, типы, сборка
|
# Фронт: установка зависимостей (raisa-* без Nexus пропускаются как optionalDependencies), biome, типы, сборка
|
||||||
web-check:
|
web-check:
|
||||||
|
|||||||
@ -1073,7 +1073,7 @@ email без учёта регистра проверяет только сер
|
|||||||
| `make dbml-check` | сверка ORM с `../docs/model/data-model-v5.19.dbml` |
|
| `make dbml-check` | сверка ORM с `../docs/model/data-model-v5.19.dbml` |
|
||||||
| `make migration-cycle` | миграции на временной БД: `upgrade head` → `downgrade base` → `upgrade head`, пустой autogenerate |
|
| `make migration-cycle` | миграции на временной БД: `upgrade head` → `downgrade base` → `upgrade head`, пустой autogenerate |
|
||||||
| `make check` | быстрая проверка без Docker: `lint` + `test` |
|
| `make check` | быстрая проверка без Docker: `lint` + `test` |
|
||||||
| `make docker-build` | сборка образа: `docker build -t arm-core .` |
|
| `make docker-build` | сборка образа через BuildKit с библиотекой из `STATEMENTS_DIR` (по умолчанию `../pylib_ai_arm_statements`); другой путь: `make docker-build STATEMENTS_DIR=/путь/к/репозиторию` |
|
||||||
| `make web-check` | фронт: `npm install`, `biome check src`, `tsc --noEmit`, `npm run build` |
|
| `make web-check` | фронт: `npm install`, `biome check src`, `tsc --noEmit`, `npm run build` |
|
||||||
| `make check-infra` | быстрая проверка, что PostgreSQL и NATS из compose доступны (иначе: `make up`) |
|
| `make check-infra` | быстрая проверка, что PostgreSQL и NATS из compose доступны (иначе: `make up`) |
|
||||||
| `make check-full` | полная проверка перед PR: `check` + `dbml-check` + `check-infra` + `test-integration` (в нём цикл миграций) + `e2e` (без профиля `services` пропускается) + `docker-build` + `web-check`; нужна поднятая инфраструктура (`make up`) и Docker |
|
| `make check-full` | полная проверка перед PR: `check` + `dbml-check` + `check-infra` + `test-integration` (в нём цикл миграций) + `e2e` (без профиля `services` пропускается) + `docker-build` + `web-check`; нужна поднятая инфраструктура (`make up`) и Docker |
|
||||||
@ -1235,3 +1235,8 @@ Dockerfile только для локального compose
|
|||||||
- [`../docs/context/09-delivery-plan.md`](../docs/context/09-delivery-plan.md) — план срезов;
|
- [`../docs/context/09-delivery-plan.md`](../docs/context/09-delivery-plan.md) — план срезов;
|
||||||
- [`../docs/contracts/`](../docs/contracts/) — JSON-схемы обмена с сервисами распознавания;
|
- [`../docs/contracts/`](../docs/contracts/) — JSON-схемы обмена с сервисами распознавания;
|
||||||
- `openspec/changes/slice-0-skeleton/` — спецификация и решения Среза 0.
|
- `openspec/changes/slice-0-skeleton/` — спецификация и решения Среза 0.
|
||||||
|
|
||||||
|
Перед локальной сборкой `make docker-build` проверяет совпадение HEAD библиотеки
|
||||||
|
с тегом `STATEMENTS_TAG` (по умолчанию `v0.1.1`). Получить тег:
|
||||||
|
`git -C ../pylib_ai_arm_statements fetch origin --tags`.
|
||||||
|
Незакоммиченные изменения разрешены и попадают в сборку из `STATEMENTS_DIR`.
|
||||||
|
|||||||
@ -11,7 +11,7 @@ DB_SCHEMA=dkb
|
|||||||
SERVER__HOST=127.0.0.1
|
SERVER__HOST=127.0.0.1
|
||||||
SERVER__PORT=8000
|
SERVER__PORT=8000
|
||||||
|
|
||||||
OPENBAO__DATABASE__DATABASE_URL=postgresql+asyncpg://armka:armka@localhost:5431/armka
|
OPENBAO__DATABASE__DATABASE_URL=postgresql+asyncpg://armka:armka@localhost:5432/armka
|
||||||
|
|
||||||
OPENBAO__MINIO__MINIO_URL=localhost:9000
|
OPENBAO__MINIO__MINIO_URL=localhost:9000
|
||||||
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
|
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
|
||||||
|
|||||||
@ -26,7 +26,7 @@ def clean_env(monkeypatch: pytest.MonkeyPatch) -> pytest.MonkeyPatch:
|
|||||||
def test_env_test_is_read(clean_env: pytest.MonkeyPatch) -> None:
|
def test_env_test_is_read(clean_env: pytest.MonkeyPatch) -> None:
|
||||||
""".env.test читается: стандартные порты docker-compose из docs/dev."""
|
""".env.test читается: стандартные порты docker-compose из docs/dev."""
|
||||||
s = Settings(_env_file=API_DIR / ".env.test") # type: ignore[call-arg]
|
s = Settings(_env_file=API_DIR / ".env.test") # type: ignore[call-arg]
|
||||||
assert s.OPENBAO.DATABASE.DATABASE_URL.endswith("localhost:5431/armka")
|
assert s.OPENBAO.DATABASE.DATABASE_URL.endswith("localhost:5432/armka")
|
||||||
assert s.OPENBAO.NATS.NATS_URL == "nats://localhost:4222"
|
assert s.OPENBAO.NATS.NATS_URL == "nats://localhost:4222"
|
||||||
assert s.AUTH_DEV_ISSUER is True
|
assert s.AUTH_DEV_ISSUER is True
|
||||||
assert s.NATS_ENABLED is False
|
assert s.NATS_ENABLED is False
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user