1
0
Fork 0

Add Docker build and cache cleanup steps in CI, prevent redundant builds in Swarm E2E tests

- Updated GitHub workflow to include Docker cache cleanup and image build steps.
- Modified Swarm E2E test logic to skip Docker image build if it already exists, optimizing CI performance.
This commit is contained in:
Joao Gilberto Magalhaes 2026-02-18 16:42:44 -05:00
parent 3fd0fe0d46
commit 3710b08995
2 changed files with 21 additions and 2 deletions

View file

@ -148,6 +148,14 @@ jobs:
export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.local/bin:$PATH"
uv sync --group dev uv sync --group dev
- name: Clean Docker build cache
run: docker builder prune -af
- name: Build Docker image
env:
DOCKER_BUILDKIT: "0"
run: docker build -t byjg/easy-haproxy:local -f deploy/docker/Dockerfile .
- name: Run Swarm E2E tests - name: Run Swarm E2E tests
run: | run: |
export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.local/bin:$PATH"

View file

@ -60,14 +60,25 @@ _cloudflare_config_created = False
def ensure_haproxy_image(): def ensure_haproxy_image():
"""Build byjg/easy-haproxy:local from source at the start of the test session. """Build byjg/easy-haproxy:local from source at the start of the test session.
Always builds on the first call so tests run against the current codebase, If the image already exists (e.g. pre-built by a CI step), the build is
never a stale image left over from a previous session or docker compose run. skipped so that CI can control how/when the image is built without the
pytest session re-triggering a potentially slow or hanging `docker build`.
Subsequent calls within the same session are no-ops (image already built). Subsequent calls within the same session are no-ops (image already built).
""" """
global _swarm_image_built global _swarm_image_built
if _swarm_image_built: if _swarm_image_built:
return return
# Skip build if image already exists (e.g. pre-built in CI)
inspect = subprocess.run(
["docker", "image", "inspect", "byjg/easy-haproxy:local"],
capture_output=True,
)
if inspect.returncode == 0:
print("\n ✓ byjg/easy-haproxy:local already exists, skipping build")
_swarm_image_built = True
return
project_root = BASE_DIR.parent project_root = BASE_DIR.parent
print("\n → Building byjg/easy-haproxy:local from source...") print("\n → Building byjg/easy-haproxy:local from source...")
subprocess.run( subprocess.run(