diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 938cf5b..879231c 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -81,31 +81,8 @@ jobs: fi done - # ========== Frontend Build ========== - - name: Install web dependencies - shell: bash - run: bun install - working-directory: web - - - name: Build web frontend - shell: bash - run: bun run build - working-directory: web - env: - # API URL is relative (/api) since frontend and backend are on same domain - VITE_API_URL: /api - - - name: Verify frontend build output - shell: bash - run: | - if [ ! -d "web/dist/client" ]; then - echo "::error::Frontend build output not found at web/dist/client" - exit 1 - fi - echo "Frontend build successful, files ready for Docker image" - ls -la web/dist/client - # ========== Docker Build and Push ========== + # Note: Frontend is now built inside Docker using multi-stage build - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/pacman-server/Dockerfile b/pacman-server/Dockerfile index 60c38b5..be7a96d 100644 --- a/pacman-server/Dockerfile +++ b/pacman-server/Dockerfile @@ -9,7 +9,21 @@ FROM chef AS planner COPY . . RUN cargo chef prepare --bin pacman-server --recipe-path recipe.json -# -- Builder stage -- +# -- Frontend builder stage -- +FROM oven/bun:1 AS frontend-builder +WORKDIR /app + +# Copy frontend package files first for layer caching +COPY web/package.json web/bun.lock* ./ +RUN bun install --frozen-lockfile + +# Copy all frontend source including public directory (contains WASM files) +COPY web/ ./ + +# Build the frontend (Vite will copy public/ contents to dist/client/) +RUN bun run build + +# -- Backend builder stage -- FROM chef AS builder COPY --from=planner /app/recipe.json recipe.json RUN cargo chef cook --release --bin pacman-server --recipe-path recipe.json @@ -26,9 +40,8 @@ FROM debian:bookworm-slim AS runtime WORKDIR /app COPY --from=builder /app/target/release/pacman-server /usr/local/bin/pacman-server -# Copy frontend static files (built by GitHub Actions) -# These files should be in web/dist/client/ in the build context -COPY web/dist/client /app/static +# Copy frontend static files from frontend-builder stage +COPY --from=frontend-builder /app/dist/client /app/static # Install runtime dependencies RUN apt-get update && apt-get install -y --no-install-recommends \