Skip to content

Build Docker Image #134

Build Docker Image

Build Docker Image #134

name: Build Docker Image
on:
push:
workflow_dispatch:
env:
REGISTRY: ghcr.io
REGISTRY_IMAGE_NAME: ghcr.io/${{ github.repository }}
jobs:
build-and-push-amd64:
strategy:
fail-fast: false
matrix:
phpversion:
# - '8.4'
- '8.5'
- '8.5-frankenphp'
- '8.5-www'
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Login to GHCR
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and Push Docker Image
run: |
docker pull ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-amd64 || true
docker build \
--provenance=false \
--cache-from "${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-amd64" \
-f ${{ matrix.phpversion }}/Dockerfile \
-t ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-amd64 .
docker push ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-amd64
build-and-push-arm64:
strategy:
fail-fast: false
matrix:
phpversion:
# - '8.4'
- '8.5'
- '8.5-frankenphp'
- '8.5-www'
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Login to GHCR
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and Push Docker Image
run: |
docker pull ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-arm64 || true
docker build \
--provenance=false \
--cache-from "${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-arm64" \
-f ${{ matrix.phpversion }}/Dockerfile \
-t ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-arm64 .
docker push ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-arm64
create-multiarch-manifests:
if: ${{ !cancelled() }}
needs: [build-and-push-amd64, build-and-push-arm64]
strategy:
fail-fast: false
matrix:
phpversion:
# - '8.4'
- '8.5'
- '8.5-frankenphp'
- '8.5-www'
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Login to GHCR
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Check if arch images exist
id: check-images
run: |
AMD64_EXISTS=false
ARM64_EXISTS=false
if docker manifest inspect ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-amd64 > /dev/null 2>&1; then
AMD64_EXISTS=true
fi
if docker manifest inspect ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-arm64 > /dev/null 2>&1; then
ARM64_EXISTS=true
fi
echo "amd64=$AMD64_EXISTS" >> $GITHUB_OUTPUT
echo "arm64=$ARM64_EXISTS" >> $GITHUB_OUTPUT
- name: Create ${{ matrix.phpversion }} manifest and push
if: steps.check-images.outputs.amd64 == 'true' && steps.check-images.outputs.arm64 == 'true'
run: |
docker manifest create \
${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }} \
--amend ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-amd64 \
--amend ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}-arm64
docker manifest push ${{ env.REGISTRY_IMAGE_NAME }}:${{ matrix.phpversion }}