Skip to content

Commit 627dc6a

Browse files
committed
Docker: Use docker buildx bake instead of extracting stuff from the Docker Compose file to build. Add a retry in case of intermittent apt failures.
1 parent 6e4fb0b commit 627dc6a

File tree

1 file changed

+18
-38
lines changed

1 file changed

+18
-38
lines changed

.github/workflows/build-brev-tutorial-docker-images.yml

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -100,42 +100,22 @@ jobs:
100100
username: ${{ github.actor }}
101101
password: ${{ secrets.GITHUB_TOKEN }}
102102

103-
- name: Extract metadata from Docker Compose
104-
id: compose-config
105-
run: |
106-
# This uses jq which is pre-installed on GitHub Actions runners
107-
COMPOSE_DIR="${{ matrix.tutorial }}/brev"
108-
cd "$COMPOSE_DIR"
109-
110-
# `docker compose config` outputs the resolved configuration
111-
# Extract context and dockerfile for the 'base' service
112-
CONTEXT=$(docker compose config --format json | jq -r '.services.base.build.context // "."')
113-
DOCKERFILE=$(docker compose config --format json | jq -r '.services.base.build.dockerfile // "Dockerfile"')
114-
115-
# Resolve paths relative to the docker-compose.yml location
116-
# Then convert to paths relative to the repo root
117-
CONTEXT_ABS=$(realpath -m "$CONTEXT")
118-
CONTEXT_REL=$(realpath -m --relative-to="${GITHUB_WORKSPACE}" "$CONTEXT_ABS")
119-
120-
# Dockerfile path is relative to the context in docker-compose
121-
# For build-push-action, it should be relative to the repo root
122-
DOCKERFILE_ABS=$(realpath -m "$CONTEXT/$DOCKERFILE")
123-
DOCKERFILE_REL=$(realpath -m --relative-to="${GITHUB_WORKSPACE}" "$DOCKERFILE_ABS")
124-
125-
echo "context=${CONTEXT_REL}" >> $GITHUB_OUTPUT
126-
echo "dockerfile=${DOCKERFILE_REL}" >> $GITHUB_OUTPUT
127-
echo "Using context: ${CONTEXT_REL}, dockerfile: ${DOCKERFILE_REL}"
128-
129-
- name: Build and push Docker image
130-
uses: docker/build-push-action@v6
103+
- name: Build and push Docker image (with retry)
104+
uses: nick-fields/retry@v3
105+
env:
106+
DOCKER_BUILDKIT: 1
131107
with:
132-
context: ${{ steps.compose-config.outputs.context }}
133-
file: ${{ steps.compose-config.outputs.dockerfile }}
134-
build-args: |
135-
GIT_BRANCH_NAME=${{ env.GIT_BRANCH_NAME }}
136-
tags: |
137-
${{ steps.set-image.outputs.image_name }}:${{ env.GIT_BRANCH_NAME }}-latest
138-
${{ steps.set-image.outputs.image_name }}:${{ env.GIT_BRANCH_NAME }}-git-${{ env.GIT_SHORT_SHA }}
139-
push: true
140-
cache-from: type=registry,ref=${{ steps.set-image.outputs.image_name }}:buildcache
141-
cache-to: type=registry,ref=${{ steps.set-image.outputs.image_name }}:buildcache,mode=max
108+
timeout_minutes: 60
109+
max_attempts: 3
110+
retry_wait_seconds: 30
111+
command: |
112+
docker buildx bake \
113+
--set "base.args.GIT_BRANCH_NAME=${{ env.GIT_BRANCH_NAME }}" \
114+
--set "base.output=type=registry" \
115+
--set "base.tags=${{ steps.set-image.outputs.image_name }}:${{ env.GIT_BRANCH_NAME }}-latest" \
116+
--set "base.tags=${{ steps.set-image.outputs.image_name }}:${{ env.GIT_BRANCH_NAME }}-git-${{ env.GIT_SHORT_SHA }}" \
117+
--set "base.cache-from=type=registry,ref=${{ steps.set-image.outputs.image_name }}:buildcache" \
118+
--set "base.cache-to=type=registry,ref=${{ steps.set-image.outputs.image_name }}:buildcache,mode=max" \
119+
--set "base.platform=linux/amd64" \
120+
-f ${{ matrix.tutorial }}/brev/docker-compose.yml \
121+
base

0 commit comments

Comments
 (0)