Skip to content

Commit 094ddbf

Browse files
committed
caching
1 parent c86129f commit 094ddbf

File tree

2 files changed

+105
-15
lines changed

2 files changed

+105
-15
lines changed

.github/workflows/backend-ci.yml

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ on:
1515
- 'docker-compose.ci.yaml'
1616
workflow_dispatch:
1717

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+
1825
jobs:
1926
integration:
2027
name: Integration Tests
@@ -23,6 +30,47 @@ jobs:
2330
steps:
2431
- uses: actions/checkout@v6
2532

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+
2674
- name: Set up uv
2775
uses: astral-sh/setup-uv@v7
2876
with:
@@ -94,6 +142,47 @@ jobs:
94142
steps:
95143
- uses: actions/checkout@v6
96144

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+
97186
- name: Set up uv
98187
uses: astral-sh/setup-uv@v7
99188
with:

docker-compose.ci.yaml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ services:
3333
- ci-network
3434
healthcheck:
3535
test: mongosh --eval 'db.runCommand("ping").ok' --quiet
36-
interval: 5s
37-
timeout: 5s
38-
retries: 10
39-
start_period: 10s
36+
interval: 2s
37+
timeout: 3s
38+
retries: 15
39+
start_period: 5s
4040

4141
redis:
4242
image: redis:7-alpine
@@ -48,9 +48,10 @@ services:
4848
- ci-network
4949
healthcheck:
5050
test: ["CMD", "redis-cli", "ping"]
51-
interval: 5s
52-
timeout: 3s
53-
retries: 5
51+
interval: 2s
52+
timeout: 2s
53+
retries: 10
54+
start_period: 2s
5455

5556
# KRaft mode Kafka - no Zookeeper needed, much simpler
5657
kafka:
@@ -82,10 +83,10 @@ services:
8283
- ci-network
8384
healthcheck:
8485
test: kafka-broker-api-versions.sh --bootstrap-server localhost:9092 || exit 1
85-
interval: 5s
86-
timeout: 10s
87-
retries: 15
88-
start_period: 20s
86+
interval: 2s
87+
timeout: 5s
88+
retries: 30
89+
start_period: 8s
8990

9091
schema-registry:
9192
image: confluentinc/cp-schema-registry:7.5.0
@@ -104,10 +105,10 @@ services:
104105
- ci-network
105106
healthcheck:
106107
test: curl -f http://localhost:8081/config || exit 1
107-
interval: 5s
108-
timeout: 5s
109-
retries: 10
110-
start_period: 15s
108+
interval: 2s
109+
timeout: 3s
110+
retries: 20
111+
start_period: 3s
111112

112113
# =============================================================================
113114
# APPLICATION SERVICES (profile: full - only for E2E tests)

0 commit comments

Comments
 (0)