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).
This commit is contained in:
Graham McIntire 2026-01-14 10:03:57 -06:00
parent 813dafb46b
commit c448b3dcfa
No known key found for this signature in database

View file

@ -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 \