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