Build, test and push container images #330
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, test and push container images | |
| on: | |
| push: | |
| branches: | |
| - 'master' | |
| pull_request: | |
| branches: | |
| - 'master' | |
| schedule: | |
| - cron: '48 23 * * 6' | |
| workflow_dispatch: | |
| env: | |
| FEDORA_VERSION: 42 | |
| jobs: | |
| build-test-and-push: | |
| name: Build, test and push | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| include: | |
| - arch: amd64 | |
| toxenv: py36,py39,py310,py311,py312,py313,py314,py315,py314t,py315t,pypy,pypy39,pypy310,pypy311 | |
| - arch: arm64 | |
| toxenv: py312 | |
| - arch: ppc64le | |
| toxenv: py39,py311 | |
| - arch: s390x | |
| toxenv: py39,py310,py312 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build image for testing | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| platforms: linux/${{ matrix.arch }} | |
| load: true | |
| tags: | | |
| fedorapython/fedora-python-tox:${{ matrix.arch }} | |
| - name: Test local project | |
| env: | |
| TOXENV: ${{ matrix.toxenv }} | |
| run: | | |
| docker run --rm --platform linux/${{ matrix.arch }} -v $PWD/example_project:/src -w /src -e TOXENV fedorapython/fedora-python-tox:${{ matrix.arch }} | |
| - name: Test remote project | |
| env: | |
| TOXENV: ${{ matrix.toxenv }} | |
| run: | | |
| docker run --rm --platform linux/${{ matrix.arch }} -e TOXENV -e GIT_URL=https://github.com/frenzymadness/python-tox-example.git fedorapython/fedora-python-tox:${{ matrix.arch }} | |
| - name: Test parallel run | |
| env: | |
| TOXENV: ${{ matrix.toxenv }} | |
| run: | | |
| docker run --rm --platform linux/${{ matrix.arch }} -v $PWD/example_project:/src -w /src -e TOXENV -e TOX_PARAMS="-p auto" fedorapython/fedora-python-tox:${{ matrix.arch }} | |
| - name: Test dnf install and wheel build | |
| env: | |
| TOXENV: ${{ matrix.toxenv }} | |
| run: | | |
| docker run --rm --platform linux/${{ matrix.arch }} -e DNF_INSTALL="libffi-devel 'pkgconfig(libgit2) >= 1.9' /usr/bin/cowsay" fedorapython/fedora-python-tox:${{ matrix.arch }} sh -c "/run_tests.sh; pip install -I --no-deps --compile --no-binary :all: cffi pygit2~=1.17.0 && cowsay DONE" | |
| - name: Test external project with WORKDIR | |
| run: | | |
| docker run --rm --platform linux/${{ matrix.arch }} -e TOXENV=py3 -e GIT_URL=https://github.com/frenzymadness/nflxprofile.git -e WORKDIR=python fedorapython/fedora-python-tox:${{ matrix.arch }} | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| if: github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build and push platform-specific images | |
| uses: docker/build-push-action@v6 | |
| if: github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| with: | |
| context: . | |
| platforms: linux/${{ matrix.arch }} | |
| push: true | |
| tags: | | |
| fedorapython/fedora-python-tox:${{ matrix.arch }} | |
| fedorapython/fedora-python-tox:${{ matrix.arch }}-f${{ env.FEDORA_VERSION }} | |
| release: | |
| name: Create multi-platform manifests | |
| if: github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| needs: build-test-and-push | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Create and push multi-platform manifest for :latest | |
| run: | | |
| docker buildx imagetools create -t fedorapython/fedora-python-tox:latest \ | |
| fedorapython/fedora-python-tox:amd64 \ | |
| fedorapython/fedora-python-tox:arm64 \ | |
| fedorapython/fedora-python-tox:ppc64le \ | |
| fedorapython/fedora-python-tox:s390x | |
| - name: Create and push multi-platform manifest for :f${{ env.FEDORA_VERSION }} | |
| run: | | |
| docker buildx imagetools create -t fedorapython/fedora-python-tox:f${{ env.FEDORA_VERSION }} \ | |
| fedorapython/fedora-python-tox:amd64-f${{ env.FEDORA_VERSION }} \ | |
| fedorapython/fedora-python-tox:arm64-f${{ env.FEDORA_VERSION }} \ | |
| fedorapython/fedora-python-tox:ppc64le-f${{ env.FEDORA_VERSION }} \ | |
| fedorapython/fedora-python-tox:s390x-f${{ env.FEDORA_VERSION }} | |
| - name: Verify :latest manifest | |
| run: | | |
| docker buildx imagetools inspect fedorapython/fedora-python-tox:latest | |
| - name: Verify :f${{ env.FEDORA_VERSION }} manifest | |
| run: | | |
| docker buildx imagetools inspect fedorapython/fedora-python-tox:f${{ env.FEDORA_VERSION }} | |
| description_update: | |
| name: Update Dockerhub description | |
| if: github.event_name == 'push' | |
| needs: release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Update Dockerhub description | |
| uses: peter-evans/dockerhub-description@v4 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| repository: fedorapython/fedora-python-tox |