diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0b95e1..86fbe71 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,7 @@ jobs: runs-on: ubuntu-latest outputs: build-image: ${{ steps.build-meta.outputs.tags }} + prisma-build-image: ${{ steps.build-prisma-meta.outputs.tags }} steps: - name: Checkout code uses: actions/checkout@v4 @@ -47,6 +48,34 @@ jobs: cache-from: type=gha cache-to: type=gha + test-migrations: + runs-on: ubuntu-latest + needs: + - build + env: + COMPOSE_FILE: docker-compose.yml:docker-compose.ci.yml + DOCKER_APP_IMAGE: ${{ needs.build.outputs.build-image }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Compose + uses: docker/setup-compose-action@v1 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Test migrations + run: | + cp env.example .env + docker compose pull --quiet db prisma + docker compose up -d --wait db + docker compose run --rm prisma migrate deploy + test: runs-on: ubuntu-latest needs: @@ -107,6 +136,7 @@ jobs: needs: - build - test + - test-migrations steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/Dockerfile b/Dockerfile index ed669be..4dc0c75 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,13 @@ FROM python:3.13-slim AS reqs WORKDIR /app -RUN apt-get update -y && apt-get upgrade -y \ - && rm -rf /var/lib/apt/lists/ +RUN apt-get update -y && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + nodejs \ + npm \ + openssl && \ + rm -rf /var/lib/apt/lists/ COPY pyproject.toml pyproject.toml @@ -14,14 +19,21 @@ ENV PATH=/venv/bin:$PATH RUN python -m pip install -U setuptools RUN pip install -q . +FROM reqs AS prisma +COPY package*.json ./ +RUN npm install + FROM reqs AS app COPY willa willa +COPY pyproject.toml pyproject.toml +RUN pip install -e . COPY README.rst README.rst COPY CHANGELOG.rst CHANGELOG.rst +COPY prisma prisma COPY public public COPY chainlit.md chainlit.md COPY .chainlit .chainlit -RUN pip install -e . +COPY --from=prisma /app/node_modules node_modules ENV VIRTUAL_ENV=/venv CMD ["chainlit", "run", "/app/willa/web/app.py", "-h", "--host", "0.0.0.0"] diff --git a/Dockerfile.prisma b/Dockerfile.prisma deleted file mode 100644 index b7a1fdb..0000000 --- a/Dockerfile.prisma +++ /dev/null @@ -1,15 +0,0 @@ -FROM node:24-slim AS prisma - -RUN mkdir -p /app - -WORKDIR /app - -RUN apt-get update -y && apt-get install -y openssl \ - && rm -rf /var/lib/apt/lists/* - -COPY prisma /app - -RUN npm install - -ENTRYPOINT [ "npx", "prisma" ] -CMD [ "studio" ] diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index c8dc7bf..9f950fe 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -1,14 +1,30 @@ services: - db: !reset app: build: !reset + image: ${DOCKER_APP_IMAGE} depends_on: !reset ports: !reset + volumes: !reset environment: CHAT_BACKEND: ollama DEFAULT_STORAGE_DIR: /tmp EMBED_BACKEND: ollama + + db: + ports: !reset + volumes: !override + - postgres:/var/lib/postgresql/data + + prisma: + image: ${DOCKER_APP_IMAGE} + build: !reset volumes: !reset + ports: !reset + profiles: !reset + ollama: !reset - prisma: !reset + localstack: !reset + +volumes: + postgres: diff --git a/docker-compose.yml b/docker-compose.yml index 86f1069..0a75855 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,8 +4,8 @@ services: restart: always environment: &dbconfig POSTGRES_DB: ${POSTGRES_DB:-willa} - POSTGRES_USER: ${POSTGRES_USER:-root} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-root} + POSTGRES_USER: ${POSTGRES_USER:-willa} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-willa} DATABASE_URL: ${DATABASE_URL:-postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db/${POSTGRES_DB}} ports: - 5432:5432 @@ -52,9 +52,9 @@ services: prisma: profiles: - prisma - build: - context: . - dockerfile: Dockerfile.prisma + build: . + entrypoint: ['npx', 'prisma'] + command: ['studio'] restart: always environment: *dbconfig ports: @@ -62,6 +62,8 @@ services: depends_on: db: condition: service_healthy + volumes: + - ./prisma:/app/prisma:rw localstack: profiles: diff --git a/env.example b/env.example index 4267c85..731262d 100644 --- a/env.example +++ b/env.example @@ -5,8 +5,8 @@ OLLAMA_URL=http://ollama:11434 CHAT_BACKEND=ollama CHAT_MODEL=gemma3n:e4b CHAT_TEMPERATURE=0.7 -POSTGRES_USER=root -POSTGRES_PASSWORD=root +POSTGRES_USER=willa +POSTGRES_PASSWORD=willa POSTGRES_DB=willa POSTGRES_PORT=5432 CHAINLIT_AUTH_SECRET="output of chainlit create secret" diff --git a/prisma/package.json b/package.json similarity index 100% rename from prisma/package.json rename to package.json