From 59daebbd38937863593d33bfe3ebec157d5eaa2e Mon Sep 17 00:00:00 2001 From: jaakko Date: Mon, 13 Apr 2026 13:27:50 +0300 Subject: [PATCH] Template pipeline: docker-compose.yml ja .dockerignore mukaan generointiin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jokainen generoitu projekti sisältää nyt: - Dockerfile (oli jo) - docker-compose.yml (uusi: build + portti 8000 + named volume) - .dockerignore (uusi: .venv, __pycache__, *.db, .git) Testattu: docker compose build + kontin käynnistys + API-kutsu OK. --- network-poc/frontend/src/pages/index.astro | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/network-poc/frontend/src/pages/index.astro b/network-poc/frontend/src/pages/index.astro index 63ebcf9..7e1671a 100644 --- a/network-poc/frontend/src/pages/index.astro +++ b/network-poc/frontend/src/pages/index.astro @@ -1337,6 +1337,15 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_ return `FROM python:3.12-slim\nCOPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv\nENV UV_CACHE_DIR=/tmp/uv-cache\nWORKDIR /app\nCOPY pyproject.toml .\nRUN uv sync\nCOPY *.py .\nRUN useradd -m appuser && chown -R appuser:appuser /app /tmp/uv-cache\nUSER appuser\nEXPOSE 8000\nCMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]\n`; } + function tmplDockerCompose(spec) { + const name = (spec.project_name || 'app').toLowerCase().replace(/[^a-z0-9-]/g, '-'); + return `services:\n app:\n build: .\n container_name: ${name}\n ports:\n - "8000:8000"\n volumes:\n - app-data:/app/data\n restart: unless-stopped\n\nvolumes:\n app-data:\n`; + } + + function tmplDockerignore() { + return `.venv\n__pycache__\n*.pyc\n*.db\n.pytest_cache\n.git\n`; + } + function tmplGenerate(spec) { return { 'models.py': tmplModels(spec), @@ -1345,6 +1354,8 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_ 'test_main.py': tmplTests(spec), 'pyproject.toml': tmplPyproject(spec), 'Dockerfile': tmplDockerfile(), + 'docker-compose.yml': tmplDockerCompose(spec), + '.dockerignore': tmplDockerignore(), }; } @@ -1385,7 +1396,7 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_ // === Vaihe 3: Koodigenerointi templateista === const files = tmplGenerate(spec); const fileOrder = Object.keys(files); - const agentMap = { 'models.py': 'data', 'schemas.py': 'coder', 'main.py': 'coder', 'test_main.py': 'qa', 'pyproject.toml': 'coder', 'Dockerfile': 'tester' }; + const agentMap = { 'models.py': 'data', 'schemas.py': 'coder', 'main.py': 'coder', 'test_main.py': 'qa', 'pyproject.toml': 'coder', 'Dockerfile': 'tester', 'docker-compose.yml': 'tester', '.dockerignore': 'tester' }; const agentNames = { data: 'Data Engineer', coder: 'Coder', qa: 'QA', tester: 'DevOps' }; for (let i = 0; i < fileOrder.length; i++) {