Build, test and publish images #214
This file contains 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, test and publish images | |
on: | |
schedule: | |
# chosen by fair dice roll | |
- cron: '42 18 * * 3' | |
push: | |
branches: | |
- main | |
pull_request: | |
types: [opened, synchronize] | |
jobs: | |
test: | |
name: Build and test images | |
runs-on: ubuntu-latest | |
if: ${{ !contains(github.event.commits[0].message, '[skip ci]') && !contains(github.event.commits[0].message, '[ci skip]') }} | |
strategy: | |
matrix: | |
version: [ '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3' ] | |
flavor: [ '', '-apache', '-fpm', '-alpine', '-fpm-alpine' ] | |
include: | |
- version: 'latest' | |
flavor: '' | |
- version: 'alpine' | |
flavor: '' | |
exclude: | |
- version: '5.6' | |
flavor: '-alpine' | |
- version: '5.6' | |
flavor: '-fpm-alpine' | |
- version: '7.0' | |
flavor: '-alpine' | |
- version: '7.0' | |
flavor: '-fpm-alpine' | |
services: | |
registry: | |
image: registry:2 | |
ports: | |
- 5000:5000 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Build image for testing | |
uses: docker/build-push-action@v5 | |
with: | |
cache-from: type=registry,ref=chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
cache-to: type=inline | |
context: . | |
file: ${{ ((contains(matrix.flavor, 'alpine') || matrix.version == 'alpine') && 'Dockerfile.alpine') || 'Dockerfile' }} | |
build-args: | | |
BASE_IMAGE=php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: localhost:5000/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Test image | |
env: | |
REGISTRY: localhost:5000/ | |
VERSION: ${{ matrix.version }}${{ matrix.flavor }} | |
run: 'docker pull localhost:5000/chialab/php:${{ matrix.version }}${{ matrix.flavor }} && make test' | |
- name: Build dev image for testing | |
uses: docker/build-push-action@v5 | |
with: | |
cache-to: type=inline | |
context: ./dev | |
build-args: | | |
BASE_IMAGE=localhost:5000/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: localhost:5000/chialab/php-dev:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Test dev image | |
env: | |
REGISTRY: localhost:5000/ | |
VERSION: ${{ matrix.version }}${{ matrix.flavor }} | |
run: 'docker pull localhost:5000/chialab/php-dev:${{ matrix.version }}${{ matrix.flavor }} && make -C dev test' | |
- name: Build PCOV image for testing | |
if: ${{ matrix.version >= 7.1 }} | |
uses: docker/build-push-action@v5 | |
with: | |
cache-to: type=inline | |
context: ./pcov | |
build-args: | | |
BASE_IMAGE=localhost:5000/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: localhost:5000/chialab/php-pcov:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Test PCOV image | |
if: ${{ matrix.version >= 7.1 }} | |
env: | |
REGISTRY: localhost:5000/ | |
VERSION: ${{ matrix.version }}${{ matrix.flavor }} | |
run: 'docker pull localhost:5000/chialab/php-pcov:${{ matrix.version }}${{ matrix.flavor }} && make -C pcov test' | |
- name: Build xhprof image for testing | |
uses: docker/build-push-action@v5 | |
with: | |
cache-to: type=inline | |
context: ./xhprof | |
build-args: | | |
BASE_IMAGE=localhost:5000/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: localhost:5000/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Test xhprof image | |
env: | |
REGISTRY: localhost:5000/ | |
VERSION: ${{ matrix.version }}${{ matrix.flavor }} | |
run: 'docker pull localhost:5000/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }} && make -C xhprof test' | |
publish: | |
name: Build and publish multi-architecture images | |
runs-on: ubuntu-latest | |
needs: test | |
if: ${{ github.event_name != 'pull_request' && !contains(github.event.commits[0].message, '[skip ci]') && !contains(github.event.commits[0].message, '[ci skip]') }} | |
strategy: | |
matrix: | |
version: [ '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3' ] | |
flavor: [ '', '-apache', '-fpm', '-alpine', '-fpm-alpine' ] | |
include: | |
- version: 'latest' | |
flavor: '' | |
- version: 'alpine' | |
flavor: '' | |
exclude: | |
- version: '5.6' | |
flavor: '-alpine' | |
- version: '5.6' | |
flavor: '-fpm-alpine' | |
- version: '7.0' | |
flavor: '-alpine' | |
- version: '7.0' | |
flavor: '-fpm-alpine' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up QEMU | |
run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
driver-opts: network=host | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build image and push to registry | |
uses: docker/build-push-action@v5 | |
with: | |
platforms: linux/amd64,linux/arm64 | |
cache-from: type=registry,ref=chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
cache-to: type=inline | |
context: . | |
file: ${{ ((contains(matrix.flavor, 'alpine') || matrix.version == 'alpine') && 'Dockerfile.alpine') || 'Dockerfile' }} | |
build-args: | | |
BASE_IMAGE=php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: | | |
chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
ghcr.io/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Build dev image and push to registry | |
uses: docker/build-push-action@v5 | |
with: | |
platforms: linux/amd64,linux/arm64 | |
cache-to: type=inline | |
context: ./dev | |
build-args: | | |
BASE_IMAGE=ghcr.io/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: | | |
chialab/php-dev:${{ matrix.version }}${{ matrix.flavor }} | |
ghcr.io/chialab/php-dev:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Build PCOV image and push to registry | |
if: ${{ matrix.version >= 7.1 }} | |
uses: docker/build-push-action@v5 | |
with: | |
platforms: linux/amd64,linux/arm64 | |
cache-to: type=inline | |
context: ./pcov | |
build-args: | | |
BASE_IMAGE=ghcr.io/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: | | |
chialab/php-pcov:${{ matrix.version }}${{ matrix.flavor }} | |
ghcr.io/chialab/php-pcov:${{ matrix.version }}${{ matrix.flavor }} | |
push: true | |
- name: Build xhprof image (amd64 only) and push to registry | |
uses: docker/build-push-action@v5 | |
with: | |
cache-to: type=inline | |
context: ./xhprof | |
build-args: | | |
BASE_IMAGE=ghcr.io/chialab/php:${{ matrix.version }}${{ matrix.flavor }} | |
tags: | | |
chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }} | |
ghcr.io/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }} | |
push: true |