diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml new file mode 100644 index 000000000..0faa72bcd --- /dev/null +++ b/.github/workflows/cibuildwheel.yml @@ -0,0 +1,80 @@ +name: Wheels + +on: + pull_request: + push: + tags: + - "v*" + +jobs: + build_bdist: + name: "Build ${{ matrix.os }} (${{ matrix.arch }}) wheels" + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: ["ubuntu-latest", "macos-latest"] + arch: ["x86_64", "arm64"] + exclude: + - os: ubuntu-latest + arch: arm64 + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: "Building ${{ matrix.os }} (${{ matrix.arch }}) wheels" + uses: pypa/cibuildwheel@v2.15.0 + env: + # Skips pypy and musllinux for now. + CIBW_SKIP: "pp* cp36-* cp37-* *-musllinux*" + CIBW_ARCHS: ${{ matrix.arch }} + CIBW_BUILD_FRONTEND: build + CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 + CIBW_BEFORE_BUILD_LINUX: yum install -y hdf5-devel netcdf-devel + CIBW_BEFORE_BUILD_MACOS: brew install hdf5 netcdf + CIBW_TEST_SKIP: "*_arm64" + CIBW_TEST_REQUIRES: pytest cython + CIBW_TEST_COMMAND: > + python -c "import netCDF4; print(f'netCDF4 v{netCDF4.__version__}')" && + cd {project}/test && python run_all.py + + - uses: actions/upload-artifact@v3 + with: + name: pypi-artifacts + path: ${{ github.workspace }}/wheelhouse/*.whl + + + show-artifacts: + needs: [build_bdist] + name: "Show artifacts" + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v3 + with: + name: pypi-artifacts + path: ${{ github.workspace }}/dist + + - shell: bash + run: | + ls -l ${{ github.workspace }}/dist + + + publish-artifacts-pypi: + needs: [build_bdist] + name: "Publish to PyPI" + runs-on: ubuntu-latest + # upload to PyPI for every tag starting with 'v' + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') + steps: + - uses: actions/download-artifact@v3 + with: + name: pypi-artifacts + path: ${{ github.workspace }}/dist + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_PASSWORD }} + print_hash: true