# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt # This file is meant to be processed with cog. # Running "make prebuild" will bring it up to date. # Based on: # https://github.com/joerick/cibuildwheel/blob/master/examples/github-deploy.yml # To test installing wheels without uploading them to PyPI: # # $ mkdir /tmp/pypi # $ cp dist/* /tmp/pypi # $ python -m pip install piprepo # $ piprepo build /tmp/pypi # $ python -m pip install -v coverage --index-url=file:///tmp/pypi/simple # # Note that cibuildwheel recommends not shipping wheels for pre-release versions # of Python: https://cibuildwheel.readthedocs.io/en/stable/options/#prerelease-pythons # So we don't. name: "Kits" on: push: branches: # Don't build kits all the time, but do if the branch is about kits. - "**/*kit*" workflow_dispatch: repository_dispatch: types: - build-kits defaults: run: shell: bash env: PIP_DISABLE_PIP_VERSION_CHECK: 1 permissions: contents: read concurrency: group: "${{ github.workflow }}-${{ github.ref }}" cancel-in-progress: true jobs: wheels: name: "Build ${{ matrix.os }} ${{ matrix.py }} ${{ matrix.arch }} wheels" runs-on: ${{ matrix.os }}-latest strategy: matrix: include: # To change the matrix, edit the choices, then process this file with cog: # # $ make workflows # # which runs: # # $ python -m pip install cogapp # $ python -m cogapp -crP .github/workflows/kit.yml # # Choices come from the table on https://pypi.org/project/cibuildwheel/ # # [[[cog # #----- vvv Choices for the matrix vvv ----- # # # Operating systems: # oss = ["ubuntu", "macos", "windows"] # # # For each OS, what arch to use with cibuildwheel: # os_archs = { # "ubuntu": ["x86_64", "i686", "aarch64"], # "macos": ["arm64", "x86_64"], # "windows": ["x86", "AMD64"], # } # # PYVERSIONS. Available versions: # # https://github.com/actions/python-versions/blob/main/versions-manifest.json # pys = ["cp37", "cp38", "cp39", "cp310", "cp311"] # # # Some OS/arch combinations need overrides for the Python versions: # os_arch_pys = { # ("macos", "arm64"): ["cp38", "cp39", "cp310"], # } # # #----- ^^^ ---------------------- ^^^ ----- # # import json # for the_os in oss: # for the_arch in os_archs[the_os]: # for the_py in os_arch_pys.get((the_os, the_arch), pys): # them = { # "os": the_os, # "py": the_py, # "arch": the_arch, # } # print(f"- {json.dumps(them)}") # ]]] - {"os": "ubuntu", "py": "cp37", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp38", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp39", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp310", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp311", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp37", "arch": "i686"} - {"os": "ubuntu", "py": "cp38", "arch": "i686"} - {"os": "ubuntu", "py": "cp39", "arch": "i686"} - {"os": "ubuntu", "py": "cp310", "arch": "i686"} - {"os": "ubuntu", "py": "cp311", "arch": "i686"} - {"os": "ubuntu", "py": "cp37", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp38", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp39", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp310", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp311", "arch": "aarch64"} - {"os": "macos", "py": "cp38", "arch": "arm64"} - {"os": "macos", "py": "cp39", "arch": "arm64"} - {"os": "macos", "py": "cp310", "arch": "arm64"} - {"os": "macos", "py": "cp37", "arch": "x86_64"} - {"os": "macos", "py": "cp38", "arch": "x86_64"} - {"os": "macos", "py": "cp39", "arch": "x86_64"} - {"os": "macos", "py": "cp310", "arch": "x86_64"} - {"os": "macos", "py": "cp311", "arch": "x86_64"} - {"os": "windows", "py": "cp37", "arch": "x86"} - {"os": "windows", "py": "cp38", "arch": "x86"} - {"os": "windows", "py": "cp39", "arch": "x86"} - {"os": "windows", "py": "cp310", "arch": "x86"} - {"os": "windows", "py": "cp311", "arch": "x86"} - {"os": "windows", "py": "cp37", "arch": "AMD64"} - {"os": "windows", "py": "cp38", "arch": "AMD64"} - {"os": "windows", "py": "cp39", "arch": "AMD64"} - {"os": "windows", "py": "cp310", "arch": "AMD64"} - {"os": "windows", "py": "cp311", "arch": "AMD64"} # [[[end]]] (checksum: 428e5138336453464dde968cc3149f4f) fail-fast: false steps: - name: Setup QEMU if: matrix.os == 'ubuntu' # uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@8b122486cedac8393e77aa9734c3528886e4a1a8 with: platforms: arm64 - name: "Check out the repo" uses: actions/checkout@v3 - name: "Install Python 3.8" uses: actions/setup-python@v4 with: python-version: "3.8" cache: pip cache-dependency-path: 'requirements/*.pip' - name: "Install tools" run: | python -m pip install --require-hashes -r requirements/kit.pip - name: "Build wheels" env: CIBW_BUILD: ${{ matrix.py }}-* CIBW_ARCHS: ${{ matrix.arch }} CIBW_ENVIRONMENT: PIP_DISABLE_PIP_VERSION_CHECK=1 CIBW_TEST_COMMAND: python -c "from coverage.tracer import CTracer; print('CTracer OK!')" run: | python -m cibuildwheel --output-dir wheelhouse - name: "List wheels" run: | ls -al wheelhouse/ - name: "Upload wheels" uses: actions/upload-artifact@v3 with: name: dist path: wheelhouse/*.whl sdist: name: "Build source distribution" runs-on: ubuntu-latest steps: - name: "Check out the repo" uses: actions/checkout@v3 - name: "Install Python 3.8" uses: actions/setup-python@v4 with: python-version: "3.8" cache: pip cache-dependency-path: 'requirements/*.pip' - name: "Install tools" run: | python -m pip install --require-hashes -r requirements/kit.pip - name: "Build sdist" run: | python -m build - name: "List tarballs" run: | ls -al dist/ - name: "Upload sdist" uses: actions/upload-artifact@v3 with: name: dist path: dist/*.tar.gz pypy: name: "Build PyPy wheel" runs-on: ubuntu-latest steps: - name: "Check out the repo" uses: actions/checkout@v3 - name: "Install PyPy" uses: actions/setup-python@v4 with: # PYVERSIONS python-version: "pypy-3.7" cache: pip cache-dependency-path: 'requirements/*.pip' - name: "Install requirements" run: | pypy3 -m pip install -r requirements/kit.pip - name: "Build wheel" run: | # One wheel works for all PyPy versions. # yes, this is weird syntax: https://github.com/pypa/build/issues/202 pypy3 -m build -w -C="--global-option=--python-tag" -C="--global-option=pp36.pp37.pp38" - name: "List wheels" run: | ls -al dist/ - name: "Upload wheels" uses: actions/upload-artifact@v3 with: name: dist path: dist/*.whl