name: Build wheels

on:
  push:
    branches:
      - main
  # Manual run
  workflow_dispatch:

env:
  BUILD_TYPE: Release

jobs:
  # Build wheels for Linux, macOS, and Windows
  build_wheels:
    name: Wheel for ${{ matrix.os }}-${{ matrix.python }}
    runs-on: ${{ matrix.os }}

    strategy:
      # Build the other wheels even if one fails
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python: ['cp310']
        # python: ['cp310', 'pp39']
        include:
          - os: ubuntu-latest
            platform_version: 22.04
            link: static+shared
            toolset: gcc
          - os: macos-latest
            platform_version: 11
            link: static+shared
            toolset: clang
          - os: windows-latest
            platform_version: 2022
            link: static
            toolset: msvc

    steps:
      - name: Checkout repository and submodules
        uses: actions/checkout@v3
        with:
          submodules: true

      # Install boost for Windows and macOS
      - name: Install boost for ${{ matrix.os }}
        uses: MarkusJx/install-boost@v2.4.4
        id: install-boost
        with:
          boost_version: 1.80.0
          platform_version: ${{ matrix.platform_version }}
          link: ${{ matrix.link }}
          toolset: ${{ matrix.toolset }}
          arch: x86
        if: runner.os != 'Linux'

      - name: Build wheels
        uses: pypa/cibuildwheel@v2.11.4
        env:
          CIBW_BUILD: ${{ matrix.python }}-*
          # CIBW_ARCHS: all
          CIBW_ARCHS_LINUX: x86_64
          # CIBW_ARCHS_LINUX: auto
          # CIBW_ARCHS_LINUX: x86_64 i686 aarch64
          CIBW_ARCHS_MACOS: x86_64
          # CIBW_ARCHS_MACOS: x86_64 arm64
          CIBW_ARCHS_WINDOWS: AMD64
          BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
          # Boost_INCLUDE_DIR: ${{ steps.install-boost.outputs.BOOST_ROOT }}/include
          # Boost_LIBRARY_DIRS: ${{ steps.install-boost.outputs.BOOST_ROOT }}/lib
          # CIBW_BEFORE_BUILD_LINUX: echo $BOOST_ROOT
          # CIBW_ENVIRONMENT: BOOST_ROOT='${{ steps.install-boost.outputs.BOOST_ROOT }}'
          CIBW_ENVIRONMENT_WINDOWS: BOOST_ROOT='${{ steps.install-boost.outputs.BOOST_ROOT }}'
          CIBW_ENVIRONMENT_MACOS: BOOST_ROOT='${{ steps.install-boost.outputs.BOOST_ROOT }}'
          # CIBW_ENVIRONMENT_LINUX: BOOST_ROOT=/boost
          # CIBW_ENVIRONMENT_PASS_LINUX: BOOST_ROOT
          CIBW_BEFORE_ALL_LINUX: yum install -y boost-devel
          # CIBW_BEFORE_ALL_LINUX: >
          #   yum install boost-devel
          # CIBW_BEFORE_BUILD_LINUX: echo $BOOST_ROOT
          # CIBW_ENVIRONMENT_LINUX: BOOST_ROOT=/boost
          # CIBW_ENVIRONMENT_PASS_LINUX: BOOST_ROOT

      - name: Show files
        run: ls -lh wheelhouse
        shell: bash

      - name: Verify clean directory
        run: git diff --exit-code
        shell: bash

      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          path: wheelhouse/*.whl