name: CI on: push: workflow_dispatch: jobs: lint: runs-on: ubuntu-latest name: Linting steps: - name: Checkout uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: '3.x' - name: Run black uses: psf/black@stable with: # > Please note that the --check flag is required so that the # > workflow fails if Black finds files that need to be formatted. options: --check --verbose --skip-string-normalization test: strategy: matrix: python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] runs-on: ubuntu-latest name: 'Python ${{ matrix.python-version }}' steps: - name: Checkout uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: '${{ matrix.python-version }}' cache: pip - name: Install dependencies run: pip install -q -r requirements.txt - name: Run tests run: make test publish_docker: needs: [lint, test] runs-on: ubuntu-latest name: 'Publish: Docker Hub' steps: - name: Checkout uses: actions/checkout@v6 - id: meta name: Docker Hub metadata uses: docker/metadata-action@v6 with: images: '${{ secrets.DOCKERHUB_USERNAME }}/void' flavor: | latest=auto tags: | type=ref,event=branch type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - name: Set up QEMU uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - id: params name: Push? Which platforms? # Building for ARM for every commit not in master is too time-consuming. run: | if ${{ github.ref == 'refs/heads/master' }}; then echo 'push=true' >> "$GITHUB_OUTPUT" echo 'platforms=amd64,armhf,arm64' >> "$GITHUB_OUTPUT" else echo 'push=false' >> "$GITHUB_OUTPUT" echo 'platforms=amd64' >> "$GITHUB_OUTPUT" fi - name: Login to Docker Hub # https://github.com/orgs/community/discussions/163013 if: steps.params.outputs.push == 'true' uses: docker/login-action@v4 with: username: '${{ secrets.DOCKERHUB_USERNAME }}' password: '${{ secrets.DOCKERHUB_TOKEN }}' - name: Build and publish uses: docker/build-push-action@v7 with: # Without context, .dockerignore is not respected? # https://stackoverflow.com/a/74552407/514684 context: . labels: '${{ steps.meta.outputs.labels }}' platforms: '${{ steps.params.outputs.platforms }}' push: '${{ steps.params.outputs.push }}' tags: '${{ steps.meta.outputs.tags }}'