diff --git a/.github/workflows/dockerize.yml b/.github/workflows/dockerize.yml index 1b5473cc..0dc9a27e 100644 --- a/.github/workflows/dockerize.yml +++ b/.github/workflows/dockerize.yml @@ -73,7 +73,7 @@ jobs: run: rm -rf /opt/hostedtoolcache - name: 📦 Build and Push Docker Image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 if: (matrix.image == 'local' && github.event_name == 'workflow_dispatch') && github.event.inputs.khoj == 'true' || (matrix.image == 'local' && github.event_name == 'push') with: context: . @@ -86,9 +86,11 @@ jobs: build-args: | VERSION=${{ steps.hatch.outputs.version }} PORT=42110 + cache-from: type=gha,scope=${{ matrix.image }} + cache-to: type=gha,mode=max,scope=${{ matrix.image }} - name: 📦️⛅️ Build and Push Cloud Docker Image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 if: (matrix.image == 'cloud' && github.event_name == 'workflow_dispatch') && github.event.inputs.khoj-cloud == 'true' || (matrix.image == 'cloud' && github.event_name == 'push') with: context: . @@ -101,3 +103,5 @@ jobs: build-args: | VERSION=${{ steps.hatch.outputs.version }} PORT=42110 + cache-from: type=gha,scope=${{ matrix.image }} + cache-to: type=gha,mode=max,scope=${{ matrix.image }} diff --git a/Dockerfile b/Dockerfile index 597e3d47..fab572cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,10 +38,13 @@ FROM node:20-alpine AS web-app # Set build optimization env vars ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -COPY src/interface/web /app/src/interface/web WORKDIR /app/src/interface/web -RUN yarn install --frozen-lockfile && \ - yarn build +# Install dependencies first (cache layer) +COPY src/interface/web/package.json src/interface/web/yarn.lock ./ +RUN yarn install --frozen-lockfile +# Copy source and build +COPY src/interface/web/. ./ +RUN yarn build # Merge the Server and Web App into a Single Image FROM base diff --git a/prod.Dockerfile b/prod.Dockerfile index 82948445..21468c91 100644 --- a/prod.Dockerfile +++ b/prod.Dockerfile @@ -38,10 +38,13 @@ FROM node:20-alpine AS web-app # Set build optimization env vars ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -COPY src/interface/web /app/src/interface/web WORKDIR /app/src/interface/web -RUN yarn install --frozen-lockfile && \ - yarn build +# Install dependencies first (cache layer) +COPY src/interface/web/package.json src/interface/web/yarn.lock ./ +RUN yarn install --frozen-lockfile +# Copy source and build +COPY src/interface/web/. ./ +RUN yarn build # Merge the Server and Web App into a Single Image FROM base