PHP Docker Image CI for Sylius #45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: PHP Docker Image CI for Sylius | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: [ main ] | |
| paths: | |
| - 'php/**' | |
| - 'WORKSPACE' | |
| schedule: | |
| - cron: '0 20 * * 5' | |
| concurrency: | |
| group: sylius_php_build | |
| cancel-in-progress: false | |
| jobs: | |
| build: | |
| name: "Sylius PHP - ${{ matrix.php }}-${{ matrix.distro }}" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php: [ "7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4", "8.5" ] | |
| distro: [ "alpine" ] | |
| steps: | |
| - uses: actions/checkout@v4.1.0 | |
| - name: Generate UUID | |
| id: generate-uuid | |
| run: | | |
| UUID=$(cat /proc/sys/kernel/random/uuid) | |
| echo "UUID=${UUID}" >> $GITHUB_OUTPUT | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Docker meta | |
| id: meta | |
| uses: docker/metadata-action@v5.0.0 | |
| with: | |
| images: ${{ vars.DOCKER_PHP_REPOSITORY_NAME }} | |
| tags: | | |
| type=raw,value=${{ matrix.php }}-${{ matrix.distro }} | |
| labels: | | |
| org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} | |
| org.opencontainers.image.description=Sylius PHP ${{ matrix.php }} Docker image | |
| org.opencontainers.image.licenses=MIT | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3.0.0 | |
| - name: Cache Docker layers | |
| uses: actions/cache@v4 | |
| with: | |
| path: /tmp/.buildx-cache | |
| key: "${{ runner.os }}-php-${{ matrix.php }}-${{ matrix.distro }}-buildx-cache-${{ vars.CACHE_VERSION }}-${{ steps.generate-uuid.outputs.uuid }}" | |
| # https://github.com/actions/cache/issues/109#issuecomment-558771281 | |
| # https://github.community/t/always-save-new-cache-for-incremental-builds/172791 | |
| restore-keys: "${{ runner.os }}-php-${{ matrix.php }}-${{ matrix.distro }}-buildx-cache-${{ vars.CACHE_VERSION }}-" | |
| - name: Docker Login | |
| uses: docker/login-action@v3.0.0 | |
| with: | |
| registry: ${{ secrets.DOCKER_REGISTRY }} | |
| username: ${{ secrets.DOCKER_REPOSITORY_LOGIN }} | |
| password: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }} | |
| logout: true | |
| - name: Build multiplatform | |
| uses: docker/build-push-action@v5.0.0 | |
| with: | |
| file: ./php/Dockerfile | |
| context: ./php | |
| build-args: "PHP_SHORT_VERSION=${{ matrix.php }}" | |
| platforms: linux/amd64,linux/arm64 | |
| push: false | |
| pull: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| cache-from: type=local,src=/tmp/.buildx-cache | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new | |
| - name: Build linux/amd64 to tar | |
| uses: docker/build-push-action@v5.0.0 | |
| with: | |
| file: ./php/Dockerfile | |
| context: ./php | |
| build-args: "PHP_SHORT_VERSION=${{ matrix.php }}" | |
| platforms: linux/amd64 | |
| push: false | |
| pull: false | |
| tags: ${{ steps.meta.outputs.tags }} | |
| cache-from: type=local,src=/tmp/.buildx-cache-new | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new-amd64 | |
| outputs: type=docker,dest=./external/image-amd64.tar | |
| - name: Build linux/arm64 to tar | |
| uses: docker/build-push-action@v5.0.0 | |
| with: | |
| file: ./php/Dockerfile | |
| context: ./php | |
| build-args: "PHP_SHORT_VERSION=${{ matrix.php }}" | |
| platforms: linux/arm64 | |
| push: false | |
| pull: false | |
| tags: ${{ steps.meta.outputs.tags }} | |
| cache-from: type=local,src=/tmp/.buildx-cache-new | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new-arm64 | |
| outputs: type=docker,dest=./external/image-arm64.tar | |
| - name: Mount Bazel cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: "~/.cache/bazel" | |
| key: "${{ runner.os }}-php-${{ matrix.php }}-${{ matrix.distro }}-bazel-cache-${{ vars.CACHE_VERSION }}-${{ steps.generate-uuid.outputs.uuid }}" | |
| restore-keys: "${{ runner.os }}-php-${{ matrix.php }}-${{ matrix.distro }}-bazel-cache-${{ vars.CACHE_VERSION }}-" | |
| - name: Setup PHP for Bazel | |
| run: | | |
| set -ex | |
| cat > php/php-version.bzl <<EOF | |
| PHP_VERSION = "${{ matrix.php }}" | |
| EOF | |
| - name: Bazel build and test | |
| run: | | |
| set -ex | |
| targets=$(bazel query 'attr(visibility, "//visibility:public", //php:*)' | sort) | |
| bazel build --curses=no ${targets} | |
| bazel test --curses=no --test_output=errors ${targets} | |
| - name: Push | |
| uses: docker/build-push-action@v5.0.0 | |
| with: | |
| file: ./php/Dockerfile | |
| context: ./php | |
| build-args: "PHP_SHORT_VERSION=${{ matrix.php }}" | |
| platforms: linux/amd64,linux/arm64 | |
| push: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }} | |
| pull: false | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| cache-from: type=local,src=/tmp/.buildx-cache-new | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new | |
| - name: Move cache | |
| run: | | |
| rm -rf /tmp/.buildx-cache | |
| mv /tmp/.buildx-cache-new /tmp/.buildx-cache | |
| build-xdebug: | |
| needs: build | |
| name: "Sylius PHP with Xdebug - ${{ matrix.php }}-${{ matrix.distro }}" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php: [ "7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4", "8.5" ] | |
| distro: [ "alpine" ] | |
| steps: | |
| - uses: actions/checkout@v4.1.0 | |
| - name: Generate UUID | |
| id: generate-uuid | |
| run: | | |
| UUID=$(cat /proc/sys/kernel/random/uuid) | |
| echo "UUID=${UUID}" >> $GITHUB_OUTPUT | |
| - name: Set up QEMU | |
| id: qemu | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Available platforms | |
| run: echo ${{ steps.qemu.outputs.platforms }} | |
| - name: Docker meta | |
| id: meta | |
| uses: docker/metadata-action@v5.0.0 | |
| with: | |
| images: ${{ vars.DOCKER_PHP_REPOSITORY_NAME }} | |
| tags: | | |
| type=raw,value=${{ matrix.php }}-xdebug-${{ matrix.distro }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3.0.0 | |
| - name: Cache Docker layers | |
| uses: actions/cache@v4 | |
| with: | |
| path: /tmp/.buildx-cache | |
| key: "${{ runner.os }}-php-xdebug-${{ matrix.php }}-${{ matrix.distro }}-buildx-cache-${{ vars.CACHE_VERSION }}-${{ steps.generate-uuid.outputs.uuid }}" | |
| # https://github.com/actions/cache/issues/109#issuecomment-558771281 | |
| # https://github.community/t/always-save-new-cache-for-incremental-builds/172791 | |
| restore-keys: "${{ runner.os }}-php-xdebug-${{ matrix.php }}-${{ matrix.distro }}-buildx-cache-${{ vars.CACHE_VERSION }}-" | |
| - name: Docker Login | |
| uses: docker/login-action@v3.0.0 | |
| with: | |
| registry: ${{ secrets.DOCKER_REGISTRY }} | |
| username: ${{ secrets.DOCKER_REPOSITORY_LOGIN }} | |
| password: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }} | |
| logout: true | |
| - name: Prepare variable names for Docker build | |
| id: docker-build-variable-names | |
| run: | | |
| PHP_VERSION="${{ matrix.php }}" | |
| PHP_XDEBUG_VERSION_VARIABLE=XDEBUG_VERSION_PHP_${PHP_VERSION//./_} | |
| echo "XDEBUG_VERSION=$(jq -r --arg PHP_XDEBUG_VERSION_VARIABLE "$PHP_XDEBUG_VERSION_VARIABLE" '.[$PHP_XDEBUG_VERSION_VARIABLE]' <<< '${{ toJSON(vars) }}')" >> $GITHUB_ENV | |
| - name: Build and push | |
| uses: docker/build-push-action@v5.0.0 | |
| with: | |
| file: ./php/xdebug.Dockerfile | |
| context: ./php | |
| build-args: | | |
| "IMAGE_NAME=${{ vars.DOCKER_PHP_REPOSITORY_NAME }}" | |
| "IMAGE_TAG=${{ matrix.php }}-${{ matrix.distro }}" | |
| "XDEBUG_VERSION=${{ env.XDEBUG_VERSION }}" | |
| platforms: linux/amd64,linux/arm64 | |
| push: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }} | |
| pull: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| cache-from: type=local,src=/tmp/.buildx-cache | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new | |
| - name: Move cache | |
| run: | | |
| rm -rf /tmp/.buildx-cache | |
| mv /tmp/.buildx-cache-new /tmp/.buildx-cache | |
| build-fixuid: | |
| needs: build-xdebug | |
| name: "Sylius PHP with boxboat/fixuid - ${{ matrix.php }}-${{ matrix.version }}" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php: [ "7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4", "8.5" ] | |
| version: [ "alpine", "xdebug-alpine" ] | |
| steps: | |
| - uses: actions/checkout@v4.1.0 | |
| - name: Generate UUID | |
| id: generate-uuid | |
| run: | | |
| UUID=$(cat /proc/sys/kernel/random/uuid) | |
| echo "UUID=${UUID}" >> $GITHUB_OUTPUT | |
| - name: Set up QEMU | |
| id: qemu | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Docker meta | |
| id: meta | |
| uses: docker/metadata-action@v5.0.0 | |
| with: | |
| images: ${{ vars.DOCKER_PHP_REPOSITORY_NAME }} | |
| tags: | | |
| type=raw,value=${{ matrix.php }}-fixuid-${{ matrix.version }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3.0.0 | |
| - name: Cache Docker layers | |
| uses: actions/cache@v4 | |
| with: | |
| path: /tmp/.buildx-cache | |
| key: "${{ runner.os }}-php-fixuid-${{ matrix.php }}-${{ matrix.version }}-buildx-cache-${{ vars.CACHE_VERSION }}-${{ steps.generate-uuid.outputs.uuid }}" | |
| # https://github.com/actions/cache/issues/109#issuecomment-558771281 | |
| # https://github.community/t/always-save-new-cache-for-incremental-builds/172791 | |
| restore-keys: "${{ runner.os }}-php-fixuid-${{ matrix.php }}-${{ matrix.version }}-buildx-cache-${{ vars.CACHE_VERSION }}-" | |
| - name: Docker Login | |
| uses: docker/login-action@v3.0.0 | |
| with: | |
| registry: ${{ secrets.DOCKER_REGISTRY }} | |
| username: ${{ secrets.DOCKER_REPOSITORY_LOGIN }} | |
| password: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }} | |
| logout: true | |
| - name: Build and push | |
| uses: docker/build-push-action@v5.0.0 | |
| with: | |
| file: ./php-fixuid/Dockerfile | |
| context: ./php-fixuid | |
| build-args: | | |
| "IMAGE_NAME=${{ vars.DOCKER_PHP_REPOSITORY_NAME }}" | |
| "IMAGE_TAG=${{ matrix.php }}-${{ matrix.version }}" | |
| platforms: linux/amd64,linux/arm64 | |
| push: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }} | |
| pull: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| cache-from: type=local,src=/tmp/.buildx-cache | |
| cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new | |
| - name: Move cache | |
| run: | | |
| rm -rf /tmp/.buildx-cache | |
| mv /tmp/.buildx-cache-new /tmp/.buildx-cache |