Skip to content

Docker images build and push #128

Docker images build and push

Docker images build and push #128

Workflow file for this run

name: Docker images build and push
on:
push:
tags:
- '*'
schedule:
- cron: "0 0 * * 1" # Every Monday at 00:00
jobs:
prepare_env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: 8.2
coverage: none
- name: Composer install
uses: ramsey/composer-install@v3
with:
dependency-versions: highest
composer-options: "--prefer-dist"
- id: set_date
run: echo "build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT
- id: set_vcs
run: echo "vcs_ref=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- id: set_matrix
run: echo "matrix=$(bin/phpdev export-build `curl -s https://github.com/xdebug/xdebug/releases.atom | grep "<id>.*/[0-9]*\.[0-9]*\.[0-9]*</id>" | sed -E "s/\s*<id>.*\/([0-9]*\.[0-9]*\.[0-9]*)<\/id>/<release>\1<\/release>/" | awk -F '[<>]' '{ print $3; exit }'`)" >> $GITHUB_OUTPUT
outputs:
build_date: ${{ steps.set_date.outputs.build_date }}
vcs_ref: ${{ steps.set_vcs.outputs.vcs_ref }}
builds: ${{ steps.set_matrix.outputs.matrix }}
build:
needs: prepare_env
strategy:
fail-fast: false
matrix:
builds: ${{ fromJson(needs.prepare_env.outputs.builds) }}
name: Build image ${{ matrix.builds.variant }} ${{ matrix.builds.version }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: 8.2
coverage: none
- name: Composer install
uses: ramsey/composer-install@v3
with:
dependency-versions: highest
composer-options: "--prefer-dist"
- name: Scaffold image
run: bin/phpdev scaffold-image ${{ matrix.builds.variant }} ${{ matrix.builds.version }} --directory dist/${{ matrix.builds.variant }}/${{ matrix.builds.version }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build locally
uses: docker/build-push-action@v6
with:
context: dist/${{ matrix.builds.variant }}/${{ matrix.builds.version }}
load: true
pull: true
tags: juliangut/phpdev:test
build-args: |
BUILD_DATE=${{ needs.prepare_env.outputs.build_date }}
VCS_REF=${{ needs.prepare_env.outputs.vcs_ref }}
XDEBUG_VERSION=${{ matrix.builds.xdebug }}
if: ${{ github.ref_type == 'branch' }}
- name: Inspect image
run: docker image inspect juliangut/phpdev:test
if: ${{ github.ref_type == 'branch' }}
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
if: ${{ github.ref_type == 'tag' }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: dist/${{ matrix.builds.variant }}/${{ matrix.builds.version }}
platforms: linux/amd64,linux/arm64
pull: true
push: true
tags: ${{ matrix.builds.tags }}
build-args: |
BUILD_DATE=${{ needs.prepare_env.outputs.build_date }}
VCS_REF=${{ needs.prepare_env.outputs.vcs_ref }}
XDEBUG_VERSION=${{ matrix.builds.xdebug }}
if: ${{ github.ref_type == 'tag' }}
post_build:
if: ${{ github.ref_type == 'tag' }}
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Update Dockerhub description
uses: peter-evans/dockerhub-description@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
short-description: ${{ github.event.repository.description }}
repository: juliangut/phpdev