From d63cc28f2310e155a8883d5fad3ade1f87394f50 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Mon, 9 Feb 2026 21:48:44 +0100 Subject: [PATCH] ci: Optimize Docker image build by prebuilding client --- .../workflows/build-and-push-docker-image.yml | 26 +++++++++++++++++++ .../build-and-push-docker-nightly-image.yml | 20 ++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/.github/workflows/build-and-push-docker-image.yml b/.github/workflows/build-and-push-docker-image.yml index 07e77cdd..31a7e443 100644 --- a/.github/workflows/build-and-push-docker-image.yml +++ b/.github/workflows/build-and-push-docker-image.yml @@ -12,6 +12,29 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'npm' + + - name: Install client dependencies + run: npm install --omit=dev + working-directory: ./client + + - name: Build client + run: | + DISABLE_ESLINT_PLUGIN=true npm run build + mv dist build + working-directory: ./client + + - name: Update Dockerfile to use prebuilt client + run: | + sed -i '/^FROM node:22 AS client/,/^RUN npm install npm --global.*npm run build$/c\ + FROM node:22 AS client\n\n\ + WORKDIR /app\n\n\ + COPY client/build /app/dist' Dockerfile + - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -40,6 +63,9 @@ jobs: name=ghcr.io/${{ github.repository }} tags: | type=raw,value=${{ steps.set-version.outputs.result }} + labels: | + org.opencontainers.image.licenses=Fair Use License + org.opencontainers.image.url=https://planka.app - name: Build and push Docker image uses: docker/build-push-action@v4 diff --git a/.github/workflows/build-and-push-docker-nightly-image.yml b/.github/workflows/build-and-push-docker-nightly-image.yml index 4a923e05..81a085d1 100644 --- a/.github/workflows/build-and-push-docker-nightly-image.yml +++ b/.github/workflows/build-and-push-docker-nightly-image.yml @@ -32,6 +32,23 @@ jobs: npx --yes genversion --source . --template server/version-template.ejs server/version.js npx --yes genversion --source . --template client/version-template.ejs client/src/version.js + - name: Install client dependencies + run: npm install --omit=dev + working-directory: ./client + + - name: Build client + run: | + DISABLE_ESLINT_PLUGIN=true npm run build + mv dist build + working-directory: ./client + + - name: Update Dockerfile to use prebuilt client + run: | + sed -i '/^FROM node:22 AS client/,/^RUN npm install npm --global.*npm run build$/c\ + FROM node:22 AS client\n\n\ + WORKDIR /app\n\n\ + COPY client/build /app/dist' Dockerfile + - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -53,6 +70,9 @@ jobs: name=ghcr.io/${{ github.repository }} tags: | type=raw,value=nightly + labels: | + org.opencontainers.image.licenses=Fair Use License + org.opencontainers.image.url=https://planka.app - name: Build and push Docker image uses: docker/build-push-action@v4