From f0d9482bc8a18ca7f517a2567d78b977fba27170 Mon Sep 17 00:00:00 2001 From: Julia McGhee Date: Sat, 21 Mar 2026 20:24:02 +0000 Subject: [PATCH] Fix Docker build for harness workspace dependency on @homelab/db Switch harness Dockerfile to pnpm with repo root build context so workspace:^ dependency on @homelab/db resolves. Use .dockercontext marker file to opt individual apps into root context builds while keeping web/api on their local app context. --- .gitea/workflows/ci.yaml | 8 +++++++- .gitea/workflows/deploy-preview.yaml | 8 +++++++- .gitea/workflows/deploy-production.yaml | 8 +++++++- apps/harness/.dockercontext | 1 + apps/harness/Dockerfile | 24 +++++++++++++++--------- 5 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 apps/harness/.dockercontext diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 02eca46..f5fb948 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -51,9 +51,15 @@ jobs: if echo "$CHANGED" | grep -qE "^(apps/${app}/|packages/)"; then echo "Building $app..." pnpm turbo build --filter=@homelab/${app} + if [ -f "apps/${app}/.dockercontext" ]; then + CONTEXT="." + else + CONTEXT="apps/${app}" + fi docker build \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ - apps/${app} + -f apps/${app}/Dockerfile \ + $CONTEXT fi done diff --git a/.gitea/workflows/deploy-preview.yaml b/.gitea/workflows/deploy-preview.yaml index 18e6a76..6f29087 100644 --- a/.gitea/workflows/deploy-preview.yaml +++ b/.gitea/workflows/deploy-preview.yaml @@ -29,9 +29,15 @@ jobs: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.coreworlds.io -u lazorgurl --password-stdin IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}" for app in "${APPS[@]}"; do + if [ -f "apps/${app}/.dockercontext" ]; then + CONTEXT="." + else + CONTEXT="apps/${app}" + fi docker build \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ - apps/${app} + -f apps/${app}/Dockerfile \ + $CONTEXT docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} done diff --git a/.gitea/workflows/deploy-production.yaml b/.gitea/workflows/deploy-production.yaml index f1b06cb..774efde 100644 --- a/.gitea/workflows/deploy-production.yaml +++ b/.gitea/workflows/deploy-production.yaml @@ -46,10 +46,16 @@ jobs: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.coreworlds.io -u lazorgurl --password-stdin IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}" for app in "${APPS[@]}"; do + if [ -f "apps/${app}/.dockercontext" ]; then + CONTEXT="." + else + CONTEXT="apps/${app}" + fi docker build \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:latest \ - apps/${app} + -f apps/${app}/Dockerfile \ + $CONTEXT docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:latest done diff --git a/apps/harness/.dockercontext b/apps/harness/.dockercontext new file mode 100644 index 0000000..d8649da --- /dev/null +++ b/apps/harness/.dockercontext @@ -0,0 +1 @@ +root diff --git a/apps/harness/Dockerfile b/apps/harness/Dockerfile index 8163846..87d6a00 100644 --- a/apps/harness/Dockerfile +++ b/apps/harness/Dockerfile @@ -1,16 +1,23 @@ FROM node:20-alpine AS base +RUN corepack enable && corepack prepare pnpm@latest --activate FROM base AS deps RUN apk add --no-cache libc6-compat WORKDIR /app -COPY package.json ./ -RUN npm install + +# Copy workspace root config + relevant package.jsons for install +COPY pnpm-workspace.yaml pnpm-lock.yaml package.json ./ +COPY packages/db/package.json ./packages/db/package.json +COPY apps/harness/package.json ./apps/harness/package.json + +RUN pnpm install --frozen-lockfile --filter @homelab/harness... FROM base AS builder WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules -COPY . . -RUN npm run build +COPY --from=deps /app ./ +COPY packages/db ./packages/db +COPY apps/harness ./apps/harness +RUN pnpm --filter @homelab/harness build FROM base AS runner WORKDIR /app @@ -30,11 +37,10 @@ RUN adduser --system --uid 1001 nextjs # Workspace directory for git worktrees (ephemeral) RUN mkdir -p /data/harness && chown nextjs:nodejs /data/harness -COPY --from=builder /app/public ./public -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +COPY --from=builder /app/apps/harness/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/apps/harness/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/apps/harness/.next/static ./.next/static USER nextjs EXPOSE 3100 ENV PORT=3100 CMD ["node", "server.js"] -# trigger rebuild 7