From db2e8c033ad48d0ac9815838b18e33da084dfdd1 Mon Sep 17 00:00:00 2001 From: Olivier Cazade Date: Thu, 6 Feb 2025 12:27:59 +0100 Subject: [PATCH] Building frontend only once --- .tekton/pipeline-ref.yaml | 53 +++++++++++++++++++++++++++++++++++++ Dockerfile.downstream | 20 ++------------ Dockerfile.front.downstream | 22 +++++++++++++++ 3 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 Dockerfile.front.downstream diff --git a/.tekton/pipeline-ref.yaml b/.tekton/pipeline-ref.yaml index 39c02fad3..acc5e812a 100644 --- a/.tekton/pipeline-ref.yaml +++ b/.tekton/pipeline-ref.yaml @@ -42,6 +42,11 @@ spec: path-context name: dockerfile type: string + - default: "Dockerfile.front.downstream" + description: Path to the frontend Dockerfile inside the context specified by parameter + path-context + name: front-dockerfile + type: string - default: "false" description: Force rebuild image name: rebuild @@ -173,6 +178,52 @@ spec: workspace: git-auth - name: netrc workspace: netrc + - name: build-front-container + params: + - name: IMAGE + value: "$(params.output-image)-front" + - name: DOCKERFILE + value: $(params.front-dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - "COMMIT=$(tasks.clone-repository.results.commit)" + - "BUILDVERSION=$(params.build-version)" + - "DATE=$(tasks.clone-repository.results.commit-timestamp)" + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + - name: PLATFORM + value: "linux/x86_64" + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-remote-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.3@sha256:3070ee1a75e9a5a0a082008e1f9b3d2df7a9508ca107678b2613dc201eb2e279 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" - name: build-container matrix: params: @@ -200,6 +251,7 @@ spec: - "COMMIT=$(tasks.clone-repository.results.commit)" - "BUILDVERSION=$(params.build-version)" - "DATE=$(tasks.clone-repository.results.commit-timestamp)" + - "FRONTBUILD=$(params.output-image)-front" - name: BUILD_ARGS_FILE value: $(params.build-args-file) - name: SOURCE_ARTIFACT @@ -210,6 +262,7 @@ spec: value: "true" runAfter: - prefetch-dependencies + - build-front-container taskRef: params: - name: name diff --git a/Dockerfile.downstream b/Dockerfile.downstream index 2d697ea34..c79690f00 100644 --- a/Dockerfile.downstream +++ b/Dockerfile.downstream @@ -1,23 +1,7 @@ ARG COMMIT +ARG FRONTBUILD -FROM registry.access.redhat.com/ubi9/nodejs-18:1-108.1716477799 as web-builder - -ARG BUILDSCRIPT -WORKDIR /opt/app-root - -COPY --chown=default web/package.json web/package.json -COPY --chown=default web/package-lock.json web/package-lock.json -WORKDIR /opt/app-root/web - -RUN CYPRESS_INSTALL_BINARY=0 node --max-old-space-size=6000 $(which npm) --legacy-peer-deps ci - -WORKDIR /opt/app-root -COPY --chown=default web web -COPY --chown=default mocks mocks - -WORKDIR /opt/app-root/web -RUN npm run format-all -RUN npm run build$BUILDSCRIPT +FROM $FRONTBUILD as web-builder FROM brew.registry.redhat.io/rh-osbs/openshift-golang-builder:v1.23 as go-builder diff --git a/Dockerfile.front.downstream b/Dockerfile.front.downstream new file mode 100644 index 000000000..c249352fe --- /dev/null +++ b/Dockerfile.front.downstream @@ -0,0 +1,22 @@ +FROM registry.access.redhat.com/ubi9/nodejs-18:1-108.1716477799 as web-builder + +ARG BUILDSCRIPT +WORKDIR /opt/app-root + +COPY --chown=default web/package.json web/package.json +COPY --chown=default web/package-lock.json web/package-lock.json +WORKDIR /opt/app-root/web + +RUN CYPRESS_INSTALL_BINARY=0 node --max-old-space-size=6000 $(which npm) --legacy-peer-deps ci + +WORKDIR /opt/app-root +COPY --chown=default web web +COPY --chown=default mocks mocks + +WORKDIR /opt/app-root/web +RUN npm run format-all +RUN npm run build$BUILDSCRIPT + +FROM scratch + +COPY --from=web-builder /opt/app-root/web/dist /opt/app-root/web/dist