Fix Docker build for harness workspace dependency on @homelab/db
Some checks failed
CI / lint-and-test (push) Successful in 29s
CI / build (push) Has been cancelled
Deploy Production / deploy (push) Has been cancelled

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.
This commit is contained in:
Julia McGhee
2026-03-21 20:24:02 +00:00
parent 3fe75a8e04
commit f0d9482bc8
5 changed files with 37 additions and 12 deletions

View File

@@ -51,9 +51,15 @@ jobs:
if echo "$CHANGED" | grep -qE "^(apps/${app}/|packages/)"; then if echo "$CHANGED" | grep -qE "^(apps/${app}/|packages/)"; then
echo "Building $app..." echo "Building $app..."
pnpm turbo build --filter=@homelab/${app} pnpm turbo build --filter=@homelab/${app}
if [ -f "apps/${app}/.dockercontext" ]; then
CONTEXT="."
else
CONTEXT="apps/${app}"
fi
docker build \ docker build \
-t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \
apps/${app} -f apps/${app}/Dockerfile \
$CONTEXT
fi fi
done done

View File

@@ -29,9 +29,15 @@ jobs:
echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.coreworlds.io -u lazorgurl --password-stdin echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.coreworlds.io -u lazorgurl --password-stdin
IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}" IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}"
for app in "${APPS[@]}"; do for app in "${APPS[@]}"; do
if [ -f "apps/${app}/.dockercontext" ]; then
CONTEXT="."
else
CONTEXT="apps/${app}"
fi
docker build \ docker build \
-t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ -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 }} docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }}
done done

View File

@@ -46,10 +46,16 @@ jobs:
echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.coreworlds.io -u lazorgurl --password-stdin echo "${{ secrets.REGISTRY_TOKEN }}" | docker login gitea.coreworlds.io -u lazorgurl --password-stdin
IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}" IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}"
for app in "${APPS[@]}"; do for app in "${APPS[@]}"; do
if [ -f "apps/${app}/.dockercontext" ]; then
CONTEXT="."
else
CONTEXT="apps/${app}"
fi
docker build \ docker build \
-t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \
-t gitea.coreworlds.io/lazorgurl/homelab-${app}:latest \ -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}:${{ gitea.sha }}
docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:latest docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:latest
done done

View File

@@ -0,0 +1 @@
root

View File

@@ -1,16 +1,23 @@
FROM node:20-alpine AS base FROM node:20-alpine AS base
RUN corepack enable && corepack prepare pnpm@latest --activate
FROM base AS deps FROM base AS deps
RUN apk add --no-cache libc6-compat RUN apk add --no-cache libc6-compat
WORKDIR /app 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 FROM base AS builder
WORKDIR /app WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app ./
COPY . . COPY packages/db ./packages/db
RUN npm run build COPY apps/harness ./apps/harness
RUN pnpm --filter @homelab/harness build
FROM base AS runner FROM base AS runner
WORKDIR /app WORKDIR /app
@@ -30,11 +37,10 @@ RUN adduser --system --uid 1001 nextjs
# Workspace directory for git worktrees (ephemeral) # Workspace directory for git worktrees (ephemeral)
RUN mkdir -p /data/harness && chown nextjs:nodejs /data/harness RUN mkdir -p /data/harness && chown nextjs:nodejs /data/harness
COPY --from=builder /app/public ./public COPY --from=builder /app/apps/harness/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/apps/harness/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/apps/harness/.next/static ./.next/static
USER nextjs USER nextjs
EXPOSE 3100 EXPOSE 3100
ENV PORT=3100 ENV PORT=3100
CMD ["node", "server.js"] CMD ["node", "server.js"]
# trigger rebuild 7