|
15 | 15 | - 'docker-compose.ci.yaml' |
16 | 16 | workflow_dispatch: |
17 | 17 |
|
| 18 | +# Pin image versions for cache key consistency |
| 19 | +env: |
| 20 | + MONGO_IMAGE: mongo:8.0 |
| 21 | + REDIS_IMAGE: redis:7-alpine |
| 22 | + KAFKA_IMAGE: bitnami/kafka:3.6 |
| 23 | + SCHEMA_REGISTRY_IMAGE: confluentinc/cp-schema-registry:7.5.0 |
| 24 | + |
18 | 25 | jobs: |
19 | 26 | integration: |
20 | 27 | name: Integration Tests |
|
23 | 30 | steps: |
24 | 31 | - uses: actions/checkout@v6 |
25 | 32 |
|
| 33 | + # ========== DOCKER IMAGE CACHING ========== |
| 34 | + - name: Cache Docker images |
| 35 | + uses: actions/cache@v5 |
| 36 | + id: docker-cache |
| 37 | + with: |
| 38 | + path: /tmp/docker-cache |
| 39 | + key: docker-${{ runner.os }}-${{ env.MONGO_IMAGE }}-${{ env.REDIS_IMAGE }}-${{ env.KAFKA_IMAGE }}-${{ env.SCHEMA_REGISTRY_IMAGE }} |
| 40 | + |
| 41 | + - name: Load cached Docker images |
| 42 | + if: steps.docker-cache.outputs.cache-hit == 'true' |
| 43 | + run: | |
| 44 | + echo "Loading cached images..." |
| 45 | + for f in /tmp/docker-cache/*.tar.zst; do |
| 46 | + zstd -d -c "$f" | docker load & |
| 47 | + done |
| 48 | + wait |
| 49 | + docker images |
| 50 | +
|
| 51 | + - name: Pull and save Docker images |
| 52 | + if: steps.docker-cache.outputs.cache-hit != 'true' |
| 53 | + run: | |
| 54 | + mkdir -p /tmp/docker-cache |
| 55 | +
|
| 56 | + echo "Pulling images in parallel..." |
| 57 | + docker pull $MONGO_IMAGE & |
| 58 | + docker pull $REDIS_IMAGE & |
| 59 | + docker pull $KAFKA_IMAGE & |
| 60 | + docker pull $SCHEMA_REGISTRY_IMAGE & |
| 61 | + wait |
| 62 | +
|
| 63 | + echo "Saving images with zstd compression..." |
| 64 | + docker save $MONGO_IMAGE | zstd -T0 -3 > /tmp/docker-cache/mongo.tar.zst & |
| 65 | + docker save $REDIS_IMAGE | zstd -T0 -3 > /tmp/docker-cache/redis.tar.zst & |
| 66 | + docker save $KAFKA_IMAGE | zstd -T0 -3 > /tmp/docker-cache/kafka.tar.zst & |
| 67 | + docker save $SCHEMA_REGISTRY_IMAGE | zstd -T0 -3 > /tmp/docker-cache/schema-registry.tar.zst & |
| 68 | + wait |
| 69 | +
|
| 70 | + echo "Cache size:" |
| 71 | + du -sh /tmp/docker-cache/ |
| 72 | + # ========================================== |
| 73 | + |
26 | 74 | - name: Set up uv |
27 | 75 | uses: astral-sh/setup-uv@v7 |
28 | 76 | with: |
@@ -94,6 +142,47 @@ jobs: |
94 | 142 | steps: |
95 | 143 | - uses: actions/checkout@v6 |
96 | 144 |
|
| 145 | + # ========== DOCKER IMAGE CACHING ========== |
| 146 | + - name: Cache Docker images |
| 147 | + uses: actions/cache@v5 |
| 148 | + id: docker-cache |
| 149 | + with: |
| 150 | + path: /tmp/docker-cache |
| 151 | + key: docker-${{ runner.os }}-${{ env.MONGO_IMAGE }}-${{ env.REDIS_IMAGE }}-${{ env.KAFKA_IMAGE }}-${{ env.SCHEMA_REGISTRY_IMAGE }} |
| 152 | + |
| 153 | + - name: Load cached Docker images |
| 154 | + if: steps.docker-cache.outputs.cache-hit == 'true' |
| 155 | + run: | |
| 156 | + echo "Loading cached images..." |
| 157 | + for f in /tmp/docker-cache/*.tar.zst; do |
| 158 | + zstd -d -c "$f" | docker load & |
| 159 | + done |
| 160 | + wait |
| 161 | + docker images |
| 162 | +
|
| 163 | + - name: Pull and save Docker images |
| 164 | + if: steps.docker-cache.outputs.cache-hit != 'true' |
| 165 | + run: | |
| 166 | + mkdir -p /tmp/docker-cache |
| 167 | +
|
| 168 | + echo "Pulling images in parallel..." |
| 169 | + docker pull $MONGO_IMAGE & |
| 170 | + docker pull $REDIS_IMAGE & |
| 171 | + docker pull $KAFKA_IMAGE & |
| 172 | + docker pull $SCHEMA_REGISTRY_IMAGE & |
| 173 | + wait |
| 174 | +
|
| 175 | + echo "Saving images with zstd compression..." |
| 176 | + docker save $MONGO_IMAGE | zstd -T0 -3 > /tmp/docker-cache/mongo.tar.zst & |
| 177 | + docker save $REDIS_IMAGE | zstd -T0 -3 > /tmp/docker-cache/redis.tar.zst & |
| 178 | + docker save $KAFKA_IMAGE | zstd -T0 -3 > /tmp/docker-cache/kafka.tar.zst & |
| 179 | + docker save $SCHEMA_REGISTRY_IMAGE | zstd -T0 -3 > /tmp/docker-cache/schema-registry.tar.zst & |
| 180 | + wait |
| 181 | +
|
| 182 | + echo "Cache size:" |
| 183 | + du -sh /tmp/docker-cache/ |
| 184 | + # ========================================== |
| 185 | + |
97 | 186 | - name: Set up uv |
98 | 187 | uses: astral-sh/setup-uv@v7 |
99 | 188 | with: |
|
0 commit comments