name: CIBW

on:
  workflow_dispatch:
  pull_request:
    branches:
    - master
    - stable
    - v*

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build-wasm-emscripten:
    name: Pyodide wheel
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
        fetch-depth: 0

    - uses: pypa/cibuildwheel@v3.3
      env:
        PYODIDE_BUILD_EXPORTS: whole_archive
      with:
        package-dir: tests
        only: cp312-pyodide_wasm32

  build-ios:
    name: iOS wheel ${{ matrix.runs-on }}
    runs-on: ${{ matrix.runs-on }}
    strategy:
      fail-fast: false
      matrix:
        runs-on: [macos-14, macos-15-intel]
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
        fetch-depth: 0

    # We have to uninstall first because GH is now using a local tap to build cmake<4, iOS needs cmake>=4
    - run: brew uninstall cmake && brew install cmake

    - uses: pypa/cibuildwheel@v3.3
      env:
        CIBW_PLATFORM: ios
        CIBW_SKIP: cp314-*  # https://github.com/pypa/cibuildwheel/issues/2494
      with:
        package-dir: tests

  build-android:
    name: Android wheel ${{ matrix.runs-on }}
    runs-on: ${{ matrix.runs-on }}
    strategy:
      fail-fast: false
      matrix:
        runs-on: [macos-latest, macos-15-intel, ubuntu-latest]
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
        fetch-depth: 0

    # GitHub Actions can't currently run the Android emulator on macOS.
    - name: Skip Android tests on macOS
      if: contains(matrix.runs-on, 'macos')
      run: echo "CIBW_TEST_COMMAND=" >> "$GITHUB_ENV"

    # Temporarily disable Android tests on ubuntu-latest due to emulator issues.
    # See https://github.com/pybind/pybind11/pull/5914.
    - name: "NOTE: Android tests are disabled on ubuntu-latest"
      if: contains(matrix.runs-on, 'ubuntu')
      run: |
        echo "CIBW_TEST_COMMAND=" >> "$GITHUB_ENV"
        echo '::warning::Android cibuildwheel tests are disabled on ubuntu-latest (CIBW_TEST_COMMAND is empty). See PR 5914.'

    # https://github.blog/changelog/2024-04-02-github-actions-hardware-accelerated-android-virtualization-now-available/
    - name: Enable KVM for Android emulator
      if: contains(matrix.runs-on, 'ubuntu')
      run: |
        echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
        sudo udevadm control --reload-rules
        sudo udevadm trigger --name-match=kvm

    - run: pipx install patchelf

    - uses: pypa/cibuildwheel@v3.3
      env:
        CIBW_PLATFORM: android
      with:
        package-dir: tests
