Build #3084
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: Build | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| release: | |
| types: [created] | |
| schedule: | |
| - cron: '0 0 * * *' | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| name: Build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| flavour: [debian, alpine] | |
| php: ['8.2', '8.3', '8.4'] | |
| outputs: | |
| push: ${{ steps.version.outputs.push }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Determine the version | |
| id: version | |
| run: | | |
| DOCKER_IMAGE=jakzal/phpqa | |
| VERSION=master | |
| LATEST_PHP_VERSION="8.4" | |
| LATEST_FLAVOUR="debian" | |
| # jakzal/phpqa:phpX.X-debian, jakzal/phpqa:phpX.X | |
| TAGS="${DOCKER_IMAGE}:php${PHP_VERSION}-${IMAGE_FLAVOUR}" | |
| if [[ $IMAGE_FLAVOUR == "$LATEST_FLAVOUR" ]]; then | |
| TAGS="$TAGS,${DOCKER_IMAGE}:php${PHP_VERSION}" | |
| fi | |
| # jakzal/phpqa:alpine, jakzal/phpqa:debian, jakzal/phpqa:latest | |
| if [[ $PHP_VERSION == "$LATEST_PHP_VERSION" ]]; then | |
| TAGS="$TAGS,${DOCKER_IMAGE}:${IMAGE_FLAVOUR}" | |
| if [[ $IMAGE_FLAVOUR == "$LATEST_FLAVOUR" ]]; then | |
| TAGS="$TAGS,${DOCKER_IMAGE}:latest" | |
| fi | |
| fi | |
| # jakzal/phpqa:1.55.1, jakzal/phpqa:1.55 | |
| # jakzal/phpqa:1.55.1-phpX.X, jakzal/phpqa:1.55-phpX.X | |
| # jakzal/phpqa:1.55.1-alpine, jakzal/phpqa:1.55-alpine | |
| # jakzal/phpqa:1.55.1-phpX.X-alpine, jakzal/phpqa:1.55-phpX.X-alpine | |
| if [[ $GITHUB_REF == refs/tags/* ]]; then | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| MINOR_VERSION=${VERSION%.*} | |
| TAGS="$TAGS,${DOCKER_IMAGE}:${VERSION}-php${PHP_VERSION}-${IMAGE_FLAVOUR},${DOCKER_IMAGE}:${MINOR_VERSION}-php${PHP_VERSION}-${IMAGE_FLAVOUR}" | |
| if [[ $IMAGE_FLAVOUR == "$LATEST_FLAVOUR" ]]; then | |
| TAGS="$TAGS,${DOCKER_IMAGE}:${VERSION}-php${PHP_VERSION},${DOCKER_IMAGE}:${MINOR_VERSION}-php${PHP_VERSION}" | |
| fi | |
| if [[ $PHP_VERSION == "$LATEST_PHP_VERSION" ]]; then | |
| TAGS="$TAGS,${DOCKER_IMAGE}:${VERSION}-${IMAGE_FLAVOUR},${DOCKER_IMAGE}:${MINOR_VERSION}-${IMAGE_FLAVOUR}" | |
| if [[ $IMAGE_FLAVOUR == "$LATEST_FLAVOUR" ]]; then | |
| TAGS="$TAGS,${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE}:${MINOR_VERSION}" | |
| fi | |
| fi | |
| fi | |
| echo "Version: $VERSION" | |
| echo "Docker tags: $TAGS" | |
| echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
| echo "tags=${TAGS}" >> $GITHUB_OUTPUT | |
| echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT | |
| echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT | |
| echo "push=${{ (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master') && github.repository_owner == 'jakzal' }}" >> $GITHUB_OUTPUT | |
| env: | |
| PHP_VERSION: ${{ matrix.php }} | |
| IMAGE_FLAVOUR: ${{ matrix.flavour }} | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to DockerHub | |
| if: steps.version.outputs.push == 'true' | |
| uses: docker/login-action@v3 | |
| with: | |
| username: jakzal | |
| password: ${{ secrets.DOCKER_HUB_TOKEN }} | |
| - name: Build | |
| uses: docker/build-push-action@v5 | |
| with: | |
| platforms: linux/amd64,linux/arm64 | |
| tags: ${{ steps.version.outputs.tags }} | |
| build-args: | | |
| PHP_VERSION=${{ matrix.php }} | |
| INSTALLATION_DATE=${{ steps.version.outputs.date }} | |
| FLAVOUR=${{ matrix.flavour }} | |
| secrets: | | |
| "composer.auth={""github-oauth"":{""github.com"":""${{ secrets.GITHUB_TOKEN }}""} }" | |
| "phive.auth=<auth xmlns=""https://phar.io/auth""><domain host=""api.github.com"" type=""token"" credentials=""${{ secrets.GITHUB_TOKEN }}"" /></auth>" | |
| labels: | | |
| org.opencontainers.image.source=${{ github.event.repository.html_url }} | |
| org.opencontainers.image.created=${{ steps.version.outputs.created }} | |
| org.opencontainers.image.revision=${{ github.sha }} | |
| cache-from: type=gha,scope=${{ github.workflow }}-${{ matrix.php }}-${{ matrix.flavour }} | |
| cache-to: type=gha,scope=${{ github.workflow }}-${{ matrix.php }}-${{ matrix.flavour }},mode=max | |
| - name: Load | |
| uses: docker/build-push-action@v5 | |
| with: | |
| load: true | |
| platforms: linux/amd64 | |
| tags: ${{ steps.version.outputs.tags }} | |
| build-args: | | |
| PHP_VERSION=${{ matrix.php }} | |
| INSTALLATION_DATE=${{ steps.version.outputs.date }} | |
| FLAVOUR=${{ matrix.flavour }} | |
| cache-from: type=gha,scope=${{ github.workflow }}-${{ matrix.php }}-${{ matrix.flavour }} | |
| - name: Test | |
| run: | | |
| echo "::group::Images" | |
| docker images | |
| echo "::endgroup::" | |
| echo "::group::$BUILD_TAG" | |
| docker inspect $BUILD_TAG | |
| echo "::endgroup::" | |
| echo "::group::PHP Version $PHP_VERSION" | |
| docker run --rm --pull never $BUILD_TAG php -v | grep 'PHP '$PHP_VERSION | |
| echo "::endgroup::" | |
| echo "::group::Tests" | |
| docker run --rm --pull never $BUILD_TAG php /tools/toolbox test | |
| echo "::endgroup::" | |
| echo "::group::Tools" | |
| docker run --rm --pull never $BUILD_TAG | |
| echo "::endgroup::" | |
| env: | |
| PHP_VERSION: ${{ matrix.php }} | |
| BUILD_TAG: jakzal/phpqa:php${{ matrix.php }}-${{ matrix.flavour }} | |
| - name: Push | |
| uses: docker/build-push-action@v5 | |
| if: steps.version.outputs.push == 'true' | |
| with: | |
| push: ${{ steps.version.outputs.push }} | |
| platforms: linux/amd64,linux/arm64 | |
| tags: ${{ steps.version.outputs.tags }} | |
| build-args: | | |
| PHP_VERSION=${{ matrix.php }} | |
| INSTALLATION_DATE=${{ steps.version.outputs.date }} | |
| FLAVOUR=${{ matrix.flavour }} | |
| labels: | | |
| org.opencontainers.image.source=${{ github.event.repository.html_url }} | |
| org.opencontainers.image.created=${{ steps.version.outputs.created }} | |
| org.opencontainers.image.revision=${{ github.sha }} | |
| cache-from: type=gha,scope=${{ github.workflow }}-${{ matrix.php }}-${{ matrix.flavour }} | |
| verify: | |
| runs-on: ubuntu-latest | |
| name: Verify | |
| needs: build | |
| if: needs.build.outputs.push == 'true' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| flavour: [debian, alpine] | |
| php: ['8.2', '8.3', '8.4'] | |
| platform: ['linux/arm64','linux/amd64'] | |
| include: | |
| - platform: 'linux/arm64' | |
| needs-qemu: true | |
| steps: | |
| - name: Set up QEMU | |
| if: ${{ matrix.needs-qemu == true }} | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Test if pushed | |
| run: | | |
| echo "::group::Tests" | |
| docker run --rm --platform=${{ matrix.platform }} $BUILD_TAG php /tools/toolbox test | |
| echo "::endgroup::" | |
| env: | |
| BUILD_TAG: jakzal/phpqa:php${{ matrix.php }}-${{ matrix.flavour }} |