diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml new file mode 100644 index 0000000..e2b553b --- /dev/null +++ b/.github/workflows/wheels.yml @@ -0,0 +1,80 @@ +name: Build +on: + - push + - pull_request + +jobs: + + wheels: + runs-on: ${{ matrix.os }}-latest + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu + architecture: x86_64 + - os: ubuntu + architecture: aarch64 + - os: macos + architecture: x86_64 + - os: macos + architecture: arm64 + - os: windows + architecture: AMD64 + steps: + - uses: actions/checkout@v4 + - uses: docker/setup-qemu-action@v2 + with: + platforms: arm64 + if: runner.os == 'Linux' && matrix.architecture == 'aarch64' + + - uses: actions/setup-python@v4 + with: + python-version: 3.x + + - name: Build wheels + uses: pypa/cibuildwheel@v2.16.2 + env: + CIBW_SKIP: pp* cp36-* cp37-* cp38-* *-musllinux* + CIBW_ARCHS: ${{ matrix.architecture }} + - uses: actions/upload-artifact@v4 + with: + name: wheel-${{ matrix.os }}-${{ matrix.architecture }} + path: wheelhouse/*.whl + + sdist: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: echo ${{ github.ref }} + - run: python -m pip install build twine + - run: python -m build --sdist + - run: twine check --strict dist/* + - uses: actions/upload-artifact@v4 + with: + name: sdist + path: dist/*.tar.gz + + pypi-publish: + name: Upload release to PyPI + if: | + github.event_name == 'push' && + startsWith(github.ref, 'refs/tags/') + needs: + - wheels + - sdist + runs-on: ubuntu-latest + environment: + name: publish + url: https://pypi.org/p/fluidfft + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + steps: + # retrieve your distributions here + - uses: actions/download-artifact@v4 + with: + path: dist + merge-multiple: true + - run: ls dist + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1