34 lines
1.0 KiB
Bash
34 lines
1.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Example CI script to build and push an image with buildx using registry cache.
|
|
# This script is provider-agnostic and intended to be run inside CI where
|
|
# Docker and buildx are available and authenticated against the registry.
|
|
|
|
REGISTRY=${REGISTRY:-ghcr.io/ORG/REPO}
|
|
IMAGE_TAG=${IMAGE_TAG:-staging}
|
|
CACHE_REF=${CACHE_REF:-${REGISTRY}:cache}
|
|
|
|
echo "Building ${REGISTRY}:${IMAGE_TAG} using registry cache ${CACHE_REF}"
|
|
|
|
docker buildx build \
|
|
--push \
|
|
--tag ${REGISTRY}:${IMAGE_TAG} \
|
|
--cache-from type=registry,ref=${CACHE_REF} \
|
|
--cache-to type=registry,ref=${CACHE_REF},mode=max \
|
|
.
|
|
|
|
echo "Build complete. Image: ${REGISTRY}:${IMAGE_TAG}"
|
|
|
|
# Optional: instruct devs how to run locally with a local cache
|
|
cat <<'EOF'
|
|
Local test with BuildKit and local cache:
|
|
DOCKER_BUILDKIT=1 docker build \
|
|
--tag myapp:staging \
|
|
--cache-to=type=local,dest=/tmp/docker-cache \
|
|
--cache-from=type=local,src=/tmp/docker-cache .
|
|
|
|
Prune local builder cache older than 72 hours:
|
|
docker builder prune --filter "until=72h" --force
|
|
EOF
|