Docker images #314
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: Docker images | |
on: [push, pull_request, workflow_dispatch] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: ${{ matrix.target }} + ${{ matrix.image }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- "latest" | |
image: | |
# Run slower jobs first to give them a headstart and reduce waiting time | |
- "ubuntu-22.04-jammy-arm64v8" | |
- "ubuntu-22.04-jammy-ppc64le" | |
- "ubuntu-22.04-jammy-s390x" | |
# test image for manylinux-wheel build | |
- "ubuntu-22.04-jammy-amd64" | |
# Then run the remainder | |
- "alpine" | |
- "amazon-2-amd64" | |
- "amazon-2023-amd64" | |
- "arch" | |
- "centos-7-amd64" | |
- "centos-stream-8-amd64" | |
- "centos-stream-9-amd64" | |
- "debian-11-bullseye-amd64" | |
- "debian-12-bookworm-x86" | |
- "debian-12-bookworm-amd64" | |
- "fedora-38-amd64" | |
- "fedora-39-amd64" | |
- "gentoo" | |
- "ubuntu-20.04-focal-amd64" | |
- "ubuntu-22.04-jammy-amd64-valgrind" | |
# has a dependency on the test image | |
- "manylinux2014-wheel-build" | |
- "manylinux_2_28-wheel-build" | |
include: | |
- image: "manylinux2014-wheel-build" | |
test-image: "ubuntu-22.04-jammy-amd64" | |
- image: "manylinux_2_28-wheel-build" | |
test-image: "ubuntu-22.04-jammy-amd64" | |
- image: "ubuntu-22.04-jammy-arm64v8" | |
qemu-arch: "aarch64" | |
- image: "ubuntu-22.04-jammy-ppc64le" | |
qemu-arch: "ppc64le" | |
- image: "ubuntu-22.04-jammy-s390x" | |
qemu-arch: "s390x" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set up QEMU | |
if: "matrix.qemu-arch" | |
run: | | |
docker run --rm --privileged aptman/qus -s -- -p ${{ matrix.qemu-arch }} | |
- name: Prepare build | |
run: | | |
sudo apt-get update && sudo apt-get install -qyy debootstrap | |
if [ "${{ matrix.target }}" = "latest" ]; then | |
if [[ -n "$matrix.test-image" ]]; then | |
git submodule update --remote --init --recursive Pillow | |
else | |
git submodule update --remote Pillow | |
fi | |
(cd Pillow && git checkout main) | |
fi | |
sudo chown -R 1000 $(pwd) | |
- name: Test Image Build | |
if: "matrix.test-image" | |
run: | | |
cd "${{ matrix.test-image }}" | |
make pull || (sudo chmod a+w . && make update && make build BRANCH=main) | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
- name: Build image | |
id: build | |
run: | | |
cd "${{ matrix.image }}" && sudo chmod a+w . && make update | |
if [[ -n "$DOCKER_USERNAME" ]]; then | |
echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin && echo "logged_in=true" >> $GITHUB_OUTPUT | |
fi | |
make build BRANCH=main | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Test image | |
run: | | |
cd "${{ matrix.image }}" | |
make test BRANCH=main | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
- name: Log image size | |
run: | | |
docker images | |
- name: Push image | |
if: "steps.build.outputs.logged_in == 'true' | |
&& github.event_name == 'push' | |
&& github.ref == 'refs/heads/main' | |
&& matrix.target == 'latest'" | |
run: make push-${{ matrix.image }} BRANCH=main | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
- name: Post build | |
if: always() | |
run: sudo chown -R $(id -u) $(pwd) | |
success: | |
needs: build | |
runs-on: ubuntu-latest | |
name: Build successful | |
steps: | |
- name: Success | |
run: echo Build Successful |