name: Build and upload wheels on: workflow_dispatch: schedule: - cron: '0 0 * * 3' push: tags: - '*' jobs: build_sdist: name: Build sdist runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Get history and tags for SCM versioning to work run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.x' - name: Build sdist run: | pip install --upgrade pip pip install wheel build python -m build . -s - name: Test sdist run: | pip install pytest pip install dist/*.tar.gz cd .. pytest kiwi/py/tests -v -W error - name: Store artifacts uses: actions/upload-artifact@v3 with: name: artifact path: dist/* build_wheels: name: Build wheels on ${{ matrix.os }} for ${{ matrix.archs }} using ${{ matrix.manylinux_version }}+ runs-on: ${{ matrix.os }} env: BUILD_COMMIT: main strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] # We build separately 3.7 and 3.8 using manylinux1 manylinux_version: [manylinux1, manylinux2010, manylinux2014] archs: [auto] include: - os: ubuntu-latest archs: aarch64 manylinux_version: manylinux1 - os: ubuntu-latest archs: ppc64le manylinux_version: manylinux1 - os: ubuntu-latest archs: s390x manylinux_version: manylinux1 - os: ubuntu-latest archs: aarch64 manylinux_version: manylinux2010 - os: ubuntu-latest archs: ppc64le manylinux_version: manylinux2010 - os: ubuntu-latest archs: s390x manylinux_version: manylinux2010 - os: ubuntu-latest archs: aarch64 manylinux_version: manylinux2014 - os: ubuntu-latest archs: ppc64le manylinux_version: manylinux2014 - os: ubuntu-latest archs: s390x manylinux_version: manylinux2014 - os: windows-latest archs: ARM64 steps: - name: Checkout uses: actions/checkout@v3 - name: Get history and tags for SCM versioning to work run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.x' - name: Set up QEMU if: runner.os == 'Linux' && matrix.archs != 'auto' uses: docker/setup-qemu-action@v2 with: platforms: all - name: Install cibuildwheel run: | python -m pip install --upgrade pip python -m pip install wheel cibuildwheel - name: Build wheels if: matrix.manylinux_version == 'manylinux1' env: CIBW_BUILD: "cp37-* cp38-*" CIBW_ARCHS_MACOS: x86_64 universal2 arm64 CIBW_ARCHS_LINUX: ${{ matrix.archs }} CIBW_MANYLINUX_X86_64_IMAGE: manylinux1 CIBW_MANYLINUX_I686_IMAGE: manylinux1 CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: pytest {package}/py/tests -v -W error # Do not link against VC2014_1 on Windows KIWI_DISABLE_FH4: 1 run: | python -m cibuildwheel . --output-dir dist - name: Build wheels if: matrix.manylinux_version == 'manylinux2010' env: CIBW_BUILD: "cp39-* cp310-* pp37-* pp38-*" CIBW_ARCHS_MACOS: x86_64 universal2 arm64 CIBW_ARCHS_LINUX: ${{ matrix.archs }} CIBW_MANYLINUX_X86_64_IMAGE: manylinux2010 CIBW_MANYLINUX_I686_IMAGE: manylinux2010 CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: python -m pytest {package}/py/tests -v # Do not link against VC2014_1 on Windows KIWI_DISABLE_FH4: 1 run: | python -m cibuildwheel . --output-dir dist - name: Build wheels if: matrix.manylinux_version == 'manylinux2014' env: CIBW_BUILD: "cp312-* cp311-* pp39-*" CIBW_ARCHS_MACOS: x86_64 universal2 arm64 CIBW_ARCHS_LINUX: ${{ matrix.archs }} CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_MANYLINUX_I686_IMAGE: manylinux2014 CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: python -m pytest {package}/py/tests -v # Do not link against VC2014_1 on Windows KIWI_DISABLE_FH4: 1 run: | python -m cibuildwheel . --output-dir dist - name: Build wheels if: runner.os == 'Windows' && matrix.archs != 'auto' env: CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-*" CIBW_ARCHS_WINDOWS: ${{ matrix.archs }} # It is not yet possible to run ARM64 tests, only cross-compile them. CIBW_TEST_SKIP: "*-win_arm64" CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: python -m pytest {package}/py/tests -v # Do not link against VC2014_1 on Windows. KIWI_DISABLE_FH4: 1 run: | python -m cibuildwheel . --output-dir dist - name: Store artifacts uses: actions/upload-artifact@v3 with: name: artifact path: dist/*.whl publish: if: github.event_name == 'push' needs: [build_wheels, build_sdist] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v3 with: name: artifact path: dist - uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.pypi_password }} # To test: # repository_url: https://test.pypi.org/legacy/ github-release: name: >- Sign the Python 🐍 distribution 📦 with Sigstore and create a GitHub Release runs-on: ubuntu-latest needs: - publish permissions: contents: write id-token: write steps: - name: Download all the dists uses: actions/download-artifact@v3 with: name: artifact path: dist - name: Sign the dists with Sigstore uses: sigstore/gh-action-sigstore-python@v2.1.0 with: password: ${{ secrets.pypi_password }} inputs: >- ./dist/*.tar.gz ./dist/*.whl - name: Create GitHub Release env: GITHUB_TOKEN: ${{ github.token }} run: >- gh release create '${{ github.ref_name }}' --repo '${{ github.repository }}' --generate-notes - name: Upload artifact signatures to GitHub Release env: GITHUB_TOKEN: ${{ github.token }} run: >- gh release upload '${{ github.ref_name }}' dist/** --repo '${{ github.repository }}'