# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

# Based on:
# https://github.com/joerick/cibuildwheel/blob/master/examples/github-deploy.yml

name: "Kits"

on:
  push:
    branches:
      # Don't build kits all the time, but do if the branch is about kits.
      - "**/*kit*"
  workflow_dispatch:

defaults:
  run:
    shell: bash

env:
  PIP_DISABLE_PIP_VERSION_CHECK: 1

jobs:
  wheels:
    name: "Build wheels on ${{ matrix.os }}"
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            cibw_arch: x86_64 i686 aarch64
          - os: windows-latest
            cibw_arch: x86 AMD64
          - os: macos-latest
            cibw_arch: x86_64
      fail-fast: false

    steps:
      - name: Setup QEMU
        if: matrix.os == 'ubuntu-latest'
        uses: docker/setup-qemu-action@v1
        with:
          platforms: arm64

      - name: "Check out the repo"
        uses: actions/checkout@v2

      - name: "Install Python 3.8"
        uses: actions/setup-python@v2
        with:
          python-version: "3.8"

      - name: "Install tools"
        run: |
          python -m pip install -r requirements/kit.pip

      - name: "Build wheels"
        env:
          # Don't build wheels for PyPy.
          CIBW_SKIP: pp*
          CIBW_ARCHS: ${{ matrix.cibw_arch }}
        run: |
          python -m cibuildwheel --output-dir wheelhouse
          ls -al wheelhouse/

      - name: "Upload wheels"
        uses: actions/upload-artifact@v2
        with:
          name: dist
          path: wheelhouse/*.whl

  sdist:
    name: "Build source distribution"
    runs-on: ubuntu-latest
    steps:
      - name: "Check out the repo"
        uses: actions/checkout@v2

      - name: "Install Python 3.8"
        uses: actions/setup-python@v2
        with:
          python-version: "3.8"

      - name: "Install tools"
        run: |
          python -m pip install -r requirements/kit.pip

      - name: "Build sdist"
        run: |
          python -m build
          ls -al dist/

      - name: "Upload sdist"
        uses: actions/upload-artifact@v2
        with:
          name: dist
          path: dist/*.tar.gz

  pypy:
    name: "Build PyPy wheels"
    runs-on: ubuntu-latest
    steps:
      - name: "Check out the repo"
        uses: actions/checkout@v2

      - name: "Install PyPy"
        uses: actions/setup-python@v2
        with:
          python-version: "pypy3"

      - name: "Install requirements"
        run: |
          pypy3 -m pip install -r requirements/kit.pip

      - name: "Build wheels"
        run: |
          # 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"
          pypy3 -m build -w -C="--global-option=--python-tag" -C="--global-option=pp37"
          pypy3 -m build -w -C="--global-option=--python-tag" -C="--global-option=pp38"
          ls -al dist/

      - name: "Upload wheels"
        uses: actions/upload-artifact@v2
        with:
          name: dist
          path: dist/*.whl

  prerel:
    name: "Build ${{ matrix.python-version }} wheels on ${{ matrix.os }}"
    if: ${{ false }}  # disable for now, since there are no pre-rel Python versions.
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - windows-latest
          - macos-latest
        python-version:
          - "3.10.0-rc.2"
      fail-fast: false

    steps:
      - name: "Check out the repo"
        uses: actions/checkout@v2

      - name: "Install Python ${{ matrix.python-version }}"
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}

      - name: "Install wheel tools"
        run: |
          python -m pip install -r requirements/kit.pip

      - name: "Build wheel"
        run: |
          python -m build

      - name: "Convert to manylinux wheel"
        if: runner.os == 'Linux'
        run: |
          ls -la dist/
          auditwheel show dist/*.whl
          auditwheel repair dist/*.whl
          ls -la wheelhouse/
          auditwheel show wheelhouse/*.whl
          rm dist/*.whl
          mv wheelhouse/*.whl dist/
          ls -al dist/

      - name: "Upload wheels"
        uses: actions/upload-artifact@v2
        with:
          name: dist
          path: dist/*.whl
