Add start-test.bat for an isolated Docker test stand
Runs a separate compose project (pgames-test) on port 8090 with its own .env.test and data-test/, starts Docker Desktop if needed and generates a sample game to upload. env_file in compose is now overridable via ENV_FILE. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
364b312064
commit
35033fb86c
4 files changed
+98
-2
No files matched your search
@@ -6,3 +6,5 @@ __pycache__/
|
|||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
*.pyc
|
*.pyc
|
||||||
sample.zip
|
sample.zip
|
||||||
|
.env.test
|
||||||
|
data-test/
|
||||||
@@ -49,6 +49,12 @@ games.example.lan {
|
|||||||
|
|
||||||
## Разработка
|
## Разработка
|
||||||
|
|
||||||
|
На Windows тестовый стенд поднимается одной командой: `start-test.bat`.
|
||||||
|
Он запускает отдельный compose-проект `pgames-test` на http://localhost:8090
|
||||||
|
(свой `.env.test`, данные в `data-test\`), генерирует тестовую игру
|
||||||
|
`data-test\sample.zip` и открывает браузер. `start-test.bat stop` — остановить,
|
||||||
|
`reset` — удалить стенд вместе с данными, `logs` — логи бэкенда и воркера.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd backend && pip install -r requirements.txt pytest && python -m pytest
|
cd backend && pip install -r requirements.txt pytest && python -m pytest
|
||||||
cd frontend && npm install && npm run dev # проксирует /api на :8000
|
cd frontend && npm install && npm run dev # проксирует /api на :8000
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ services:
|
|||||||
backend:
|
backend:
|
||||||
build: ./backend
|
build: ./backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file: .env
|
env_file: ${ENV_FILE:-.env}
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql+asyncpg://pgames:${POSTGRES_PASSWORD:-pgames}@db:5432/pgames
|
DATABASE_URL: postgresql+asyncpg://pgames:${POSTGRES_PASSWORD:-pgames}@db:5432/pgames
|
||||||
DATA_DIR: /data
|
DATA_DIR: /data
|
||||||
@@ -34,7 +34,7 @@ services:
|
|||||||
build: ./backend
|
build: ./backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: ["python", "-m", "app.worker"]
|
command: ["python", "-m", "app.worker"]
|
||||||
env_file: .env
|
env_file: ${ENV_FILE:-.env}
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql+asyncpg://pgames:${POSTGRES_PASSWORD:-pgames}@db:5432/pgames
|
DATABASE_URL: postgresql+asyncpg://pgames:${POSTGRES_PASSWORD:-pgames}@db:5432/pgames
|
||||||
DATA_DIR: /data
|
DATA_DIR: /data
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
@echo off
|
||||||
|
rem Test stand in Docker, isolated from a real install: own compose project,
|
||||||
|
rem own .env.test, data in data-test\, port 8090.
|
||||||
|
rem start-test.bat build and start
|
||||||
|
rem start-test.bat stop stop (data is kept)
|
||||||
|
rem start-test.bat reset stop and wipe database and data-test\
|
||||||
|
rem start-test.bat logs follow backend and worker logs
|
||||||
|
setlocal
|
||||||
|
chcp 65001 >nul
|
||||||
|
cd /d "%~dp0"
|
||||||
|
|
||||||
|
set PROJECT=pgames-test
|
||||||
|
set ENV_FILE=.env.test
|
||||||
|
set PORT=8090
|
||||||
|
set COMPOSE=docker compose -p %PROJECT% --env-file %ENV_FILE%
|
||||||
|
|
||||||
|
if not exist %ENV_FILE% (
|
||||||
|
echo Создаю %ENV_FILE% с тестовыми настройками
|
||||||
|
(
|
||||||
|
echo SECRET_KEY=test-stand-%RANDOM%%RANDOM%%RANDOM%
|
||||||
|
echo ADMIN_USERNAME=admin
|
||||||
|
echo ADMIN_PASSWORD=admin
|
||||||
|
echo POSTGRES_PASSWORD=pgames
|
||||||
|
echo HTTP_PORT=%PORT%
|
||||||
|
echo DATA_PATH=./data-test
|
||||||
|
echo WORKER_THREADS=4
|
||||||
|
echo COOKIE_SECURE=false
|
||||||
|
) > %ENV_FILE%
|
||||||
|
)
|
||||||
|
|
||||||
|
call :ensure_docker || exit /b 1
|
||||||
|
|
||||||
|
if /i "%~1"=="stop" (
|
||||||
|
%COMPOSE% down
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
if /i "%~1"=="reset" (
|
||||||
|
%COMPOSE% down -v
|
||||||
|
if exist data-test rmdir /s /q data-test
|
||||||
|
echo Стенд и его данные удалены
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
if /i "%~1"=="logs" (
|
||||||
|
%COMPOSE% logs -f backend worker
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Сборка и запуск контейнеров...
|
||||||
|
%COMPOSE% up -d --build || (
|
||||||
|
echo Не удалось запустить стенд
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Жду готовности http://localhost:%PORT% ...
|
||||||
|
for /l %%i in (1,1,60) do (
|
||||||
|
curl -fs http://localhost:%PORT%/api/health >nul 2>&1 && goto ready
|
||||||
|
timeout /t 2 /nobreak >nul
|
||||||
|
)
|
||||||
|
echo Стенд не ответил за 2 минуты. Логи: start-test.bat logs
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:ready
|
||||||
|
if not exist data-test\sample.zip (
|
||||||
|
echo Генерирую тестовую игру data-test\sample.zip
|
||||||
|
%COMPOSE% exec -T backend python -m tests.make_sample /data/sample.zip >nul
|
||||||
|
)
|
||||||
|
echo.
|
||||||
|
echo Стенд запущен: http://localhost:%PORT%
|
||||||
|
echo Первый вход: admin / admin (потребуется сменить логин и пароль)
|
||||||
|
echo Тестовая игра для загрузки: %CD%\data-test\sample.zip
|
||||||
|
echo Остановить: start-test.bat stop Сбросить: start-test.bat reset
|
||||||
|
start "" http://localhost:%PORT%
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:ensure_docker
|
||||||
|
docker info >nul 2>&1 && exit /b 0
|
||||||
|
if not exist "%ProgramFiles%\Docker\Docker\Docker Desktop.exe" (
|
||||||
|
echo Docker не запущен и Docker Desktop не найден
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
echo Запускаю Docker Desktop...
|
||||||
|
start "" "%ProgramFiles%\Docker\Docker\Docker Desktop.exe"
|
||||||
|
for /l %%i in (1,1,60) do (
|
||||||
|
timeout /t 3 /nobreak >nul
|
||||||
|
docker info >nul 2>&1 && exit /b 0
|
||||||
|
)
|
||||||
|
echo Docker не запустился за 3 минуты
|
||||||
|
exit /b 1
|
||||||
Reference in new issue
Block a user