From 4ca14800e68b475a0ac675681cec05df24a0827a Mon Sep 17 00:00:00 2001 From: Alejandro Ponce Date: Mon, 16 Dec 2024 18:47:15 +0100 Subject: [PATCH 1/2] Avoid caching FE code at docker build The release URL gets cached if we `curl` for the latest release at the `Dockerfile`. To avoid docker caching we need to pass the URL as a build argument everytime we want to build. Which means executing this command and passing the result as a build argument ``` curl -s "https://api.github.com/repos/stacklok/codegate-ui/releases/latest" -H "Authorization: Bearer ***" | grep '"zipball_url":' | cut -d '"' -f 4 ``` --- .github/workflows/image-build.yml | 5 +++-- .github/workflows/image-publish.yml | 6 +++--- Dockerfile | 10 ++++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/image-build.yml b/.github/workflows/image-build.yml index 5129ef0a..7fcfc5f2 100644 --- a/.github/workflows/image-build.yml +++ b/.github/workflows/image-build.yml @@ -23,7 +23,8 @@ jobs: - name: Fetch latest FE commit SHA id: fetch_commit_fe_sha run: | - echo "LATEST_COMMIT_SHA=$(curl -LSsk 'https://api.github.com/repos/stacklok/codegate-ui/commits?per_page=1' -H 'Authorization: Bearer ${{ secrets.GH_CI_TOKEN }}' | jq -r '.[0].sha')" >> $GITHUB_ENV + echo "LATEST_RELEASE=$(curl -s "https://api.github.com/repos/stacklok/codegate-ui/releases/latest" -H "Authorization: Bearer ${{ secrets.GH_CI_TOKEN }}" | grep '"zipball_url":' | cut -d '"' -f 4)" >> $GITHUB_ENV + echo "Fetched LATEST_RELEASE: $LATEST_RELEASE" - name: Test build on x86 id: docker_build uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v5 @@ -38,4 +39,4 @@ jobs: secrets: | gh_token=${{ secrets.GH_CI_TOKEN }} build-args: | - LATEST_COMMIT_SHA=${{ env.LATEST_COMMIT_SHA }} + LATEST_RELEASE=${{ env.LATEST_RELEASE }} diff --git a/.github/workflows/image-publish.yml b/.github/workflows/image-publish.yml index b1ca2800..8967cb68 100644 --- a/.github/workflows/image-publish.yml +++ b/.github/workflows/image-publish.yml @@ -66,8 +66,8 @@ jobs: - name: Fetch latest FE commit SHA id: fetch_commit_fe_sha run: | - echo "LATEST_COMMIT_SHA=$(curl -LSsk 'https://api.github.com/repos/stacklok/codegate-ui/commits?per_page=1' -H 'Authorization: Bearer ${{ secrets.GH_CI_TOKEN }}' | jq -r '.[0].sha')" >> $GITHUB_ENV - echo "Fetched LATEST_COMMIT_SHA: $LATEST_COMMIT_SHA" + echo "LATEST_RELEASE=$(curl -s "https://api.github.com/repos/stacklok/codegate-ui/releases/latest" -H "Authorization: Bearer ${{ secrets.GH_CI_TOKEN }}" | grep '"zipball_url":' | cut -d '"' -f 4)" >> $GITHUB_ENV + echo "Fetched LATEST_RELEASE: $LATEST_RELEASE" - name: Rename to accommodate to image run: mv ./backup_weaviate ./weaviate_backup - name: Download git lfs dependencies @@ -88,7 +88,7 @@ jobs: secrets: | gh_token=${{ secrets.GH_CI_TOKEN }} build-args: | - LATEST_COMMIT_SHA=${{ env.LATEST_COMMIT_SHA }} + LATEST_RELEASE=${{ env.LATEST_RELEASE }} - name: Capture Image Digest id: image-digest run: | diff --git a/Dockerfile b/Dockerfile index 578743e1..c4cd3829 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,11 +32,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ WORKDIR /usr/src/ +# To ensure we always download the latest release of the webapp, we use a build argument. +# This prevents the curl command from being cached by Docker. +ARG LATEST_RELEASE=LATEST +RUN echo "Latest FE release: $LATEST_RELEASE" RUN --mount=type=secret,id=gh_token \ - curl -s -H "Authorization: Bearer $(cat /run/secrets/gh_token)" https://api.github.com/repos/stacklok/codegate-ui/releases/latest \ - | grep '"zipball_url":' \ - | cut -d '"' -f 4 \ - | xargs -n 1 -I {} curl -L -H "Authorization: Bearer $(cat /run/secrets/gh_token)" -o main.zip {} + LATEST_RELEASE=${LATEST_RELEASE} \ + curl -L -H "Authorization: Bearer $(cat /run/secrets/gh_token)" -o main.zip ${LATEST_RELEASE} # Extract the downloaded zip file RUN unzip main.zip From a08275d8ecb277a82002a82d1cb6831bfe77deeb Mon Sep 17 00:00:00 2001 From: Alejandro Ponce Date: Mon, 16 Dec 2024 18:57:33 +0100 Subject: [PATCH 2/2] Avoid empty printing to avoid confussions --- .github/workflows/image-build.yml | 1 - .github/workflows/image-publish.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/image-build.yml b/.github/workflows/image-build.yml index 7fcfc5f2..70c7e698 100644 --- a/.github/workflows/image-build.yml +++ b/.github/workflows/image-build.yml @@ -24,7 +24,6 @@ jobs: id: fetch_commit_fe_sha run: | echo "LATEST_RELEASE=$(curl -s "https://api.github.com/repos/stacklok/codegate-ui/releases/latest" -H "Authorization: Bearer ${{ secrets.GH_CI_TOKEN }}" | grep '"zipball_url":' | cut -d '"' -f 4)" >> $GITHUB_ENV - echo "Fetched LATEST_RELEASE: $LATEST_RELEASE" - name: Test build on x86 id: docker_build uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v5 diff --git a/.github/workflows/image-publish.yml b/.github/workflows/image-publish.yml index 8967cb68..04d1726d 100644 --- a/.github/workflows/image-publish.yml +++ b/.github/workflows/image-publish.yml @@ -67,7 +67,6 @@ jobs: id: fetch_commit_fe_sha run: | echo "LATEST_RELEASE=$(curl -s "https://api.github.com/repos/stacklok/codegate-ui/releases/latest" -H "Authorization: Bearer ${{ secrets.GH_CI_TOKEN }}" | grep '"zipball_url":' | cut -d '"' -f 4)" >> $GITHUB_ENV - echo "Fetched LATEST_RELEASE: $LATEST_RELEASE" - name: Rename to accommodate to image run: mv ./backup_weaviate ./weaviate_backup - name: Download git lfs dependencies