From c448b3dcfa545e1b2fd1390f460dbb843ba4f7eb Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Wed, 14 Jan 2026 10:03:57 -0600 Subject: [PATCH] Optimize CI build performance - build amd64 only for main branch The multi-architecture builds (amd64 + arm64) were taking 15-20+ minutes due to QEMU emulation for ARM64 cross-compilation. This is too slow for regular development iteration. Changes: - Main branch builds: amd64 only (much faster, ~3-5 minutes) - Tagged releases: Still build multi-arch (amd64 + arm64) - Added Docker layer caching to speed up subsequent builds - Cache stored in registry for persistence across CI runs The 'latest' tag will be amd64-only from main branch. Users needing ARM64 should use a specific version tag (e.g., v0.1.0). --- .gitlab-ci.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a677312..c336042 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,7 @@ build:test: - main - tags -# Build and push for main branch (multi-architecture) +# Build and push for main branch (amd64 only for speed) build:main: stage: build image: docker:24-dind @@ -64,13 +64,14 @@ build:main: - docker:24-dind before_script: - echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin - # Enable buildx for multi-arch - - docker buildx create --driver docker-container --name multiarch-builder --use || docker buildx use multiarch-builder + - docker buildx create --driver docker-container --name builder --use || docker buildx use builder - docker buildx inspect --bootstrap script: - | docker buildx build \ - --platform linux/amd64,linux/arm64 \ + --platform linux/amd64 \ + --cache-from type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache \ + --cache-to type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache,mode=max \ --tag $REGISTRY/$IMAGE_NAME:latest \ --tag $REGISTRY/$IMAGE_NAME:main-$CI_COMMIT_SHORT_SHA \ --push \ @@ -82,7 +83,8 @@ build:main: only: - main -# Release build for tags (multi-architecture) +# Release build for tags (multi-architecture with caching) +# Note: Multi-arch builds are slow (~15-20 min) due to QEMU emulation for ARM64 release:multiarch: stage: release image: docker:24-dind @@ -90,7 +92,6 @@ release:multiarch: - docker:24-dind before_script: - echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin - # Enable buildx for multi-arch - docker buildx create --driver docker-container --name multiarch-builder --use || docker buildx use multiarch-builder - docker buildx inspect --bootstrap script: @@ -99,6 +100,8 @@ release:multiarch: docker buildx build \ --platform linux/amd64,linux/arm64 \ + --cache-from type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache \ + --cache-to type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache,mode=max \ --tag $REGISTRY/$IMAGE_NAME:$VERSION \ --tag $REGISTRY/$IMAGE_NAME:$CI_COMMIT_TAG \ --tag $REGISTRY/$IMAGE_NAME:latest \