# Refer to the following link for help
# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/

name: PyPI Distributions
concurrency: build_and_publish_to_pypi
on:
  release:
    types: [published]

jobs:
  build_wheels:
    name: Build wheels on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # macos-13 is an intel runner, macos-14 is apple silicon
        os: [ubuntu-latest, macos-13, macos-14]

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"

      - name: Install cibuildwheel
        run: |
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

      - name: Build wheels using cibuildwheel
        uses: carlkidcrypto/os-specific-runner@v2.1.1
        with:
          linux: python -m cibuildwheel --output-dir wheelhouse --platform linux;
          
          macos: python -m cibuildwheel --output-dir wheelhouse --platform macos;

      - uses: actions/upload-artifact@v4
        with:
          name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
          path: wheelhouse/*.whl

  build-n-publish-pypi:
    name: Build and Publish To PyPi
    runs-on: ubuntu-latest
    needs: build_wheels

    steps:
      - uses: actions/checkout@v4
      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"
    
      - name: Set up dependencies
        uses: carlkidcrypto/os-specific-runner@v2.1.1
        with:
          linux: sudo apt-get update;
                 sudo apt-get install -y libsnmp-dev libperl-dev;

      - name: Install pypa/build
        run: >-
          python -m
          pip install
          build
          --user

      - name: Build a source tarball
        run: >-
          python -m
          build
          --sdist
          --outdir dist/
          .

      - name: Download Wheels
        uses: actions/download-artifact@v4
        with:
          pattern: cibw-wheels-*
          merge-multiple: true
          path: dist/

      - name: Publish distribution 📦 to Test PyPI
        uses: pypa/gh-action-pypi-publish@release/v1.6
        with:
          print_hash: true
          password: ${{ secrets.PYPI_API_TOKEN }}
