This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 53e43f29130 Speed up CI image restores with zstd-compressed stashes 
(#73997)
53e43f29130 is described below

commit 53e43f291303e43018ac51a0f21236514ae62485
Author: Yossi Eliaz <[email protected]>
AuthorDate: Thu Oct 1 19:31:58 2026 +0300

    Speed up CI image restores with zstd-compressed stashes (#73997)
    
    Every CI-image consumer downloads the stash as a zlib-6 zip and inflates
    about 8 GB before docker image load can start, and the producer spends
    135-200 s zipping it. Compressing the tar once with zstd and storing it
    without zlib removes the inflate and moves about 12% fewer bytes, so
    restore+load per consumer drops by about 50 s and the producer gets
    faster too.
    
    The file keeps its name and stash key because docker image load detects
    zstd by content: consumers on any branch, including release branches
    whose Breeze only accepts ci-image-save-v3-*.tar, load it unchanged.
---
 .github/workflows/ci-image-build.yml | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/.github/workflows/ci-image-build.yml 
b/.github/workflows/ci-image-build.yml
index 7817fd211c3..1541337bc5c 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -321,12 +321,18 @@ jobs:
           docker rmi "${CACHE_FROM_IMAGE}"
         shell: bash
         if: always() && env.CACHE_FROM_IMAGE != ''
+      # zstd stands in for the stash's zlib (compression-level 0 below), which 
every consumer inflates.
+      # The .tar name, which every Breeze expects, stays: docker image load 
detects zstd by content.
       - name: "Export CI docker image ${{ env.PYTHON_MAJOR_MINOR_VERSION }}"
         env:
           PLATFORM: ${{ inputs.platform }}
           COMMIT_FILE: "/mnt/ci-image-commit-${{ 
env.PYTHON_MAJOR_MINOR_VERSION }}.txt"
         run: |
           breeze ci-image save --platform "${PLATFORM}" --image-file-dir "/mnt"
+          for image_file in 
/mnt/ci-image-save-*-"${PYTHON_MAJOR_MINOR_VERSION}".tar; do
+            zstd -6 -T0 --rm -o "${image_file}.zst" "${image_file}"
+            mv "${image_file}.zst" "${image_file}"
+          done
           git rev-parse HEAD > "${COMMIT_FILE}"
         shell: bash
         if: inputs.upload-image-artifact == 'true' && 
steps.stashed-image.outputs.reusable != 'true'
@@ -336,6 +342,7 @@ jobs:
           key: ci-image-save-v3-${{ inputs.platform }}-${{ 
env.PYTHON_MAJOR_MINOR_VERSION }}
           path: "/mnt/ci-image-save-*-${{ env.PYTHON_MAJOR_MINOR_VERSION 
}}.tar"
           if-no-files-found: 'error'
+          compression-level: '0'
           retention-days: '2'
         if: inputs.upload-image-artifact == 'true' && inputs.image-stash-ref 
== ''
       # The per-branch stash above is written by every build on this branch, 
so an image built
@@ -350,6 +357,7 @@ jobs:
             -${{ inputs.image-stash-ref }}"
           path: "/mnt/ci-image-save-*-${{ env.PYTHON_MAJOR_MINOR_VERSION 
}}.tar"
           if-no-files-found: 'error'
+          compression-level: '0'
           retention-days: '6'
         if: >
           inputs.upload-image-artifact == 'true' && inputs.image-stash-ref != 
'' &&

Reply via email to