diff --git a/.github/workflows/publish-vortex.yml b/.github/workflows/publish-vortex.yml deleted file mode 100644 index 5a8cefb917..0000000000 --- a/.github/workflows/publish-vortex.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Publish to PyPI -on: - workflow_call: - -jobs: - macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/cleanup - - uses: ./.github/actions/setup-rust - - uses: ./.github/actions/setup-python - - name: rust-toolchain - shell: bash - run: echo "version=$(cat rust-toolchain.toml | grep channel | awk -F'\"' '{print $2}')" >> $GITHUB_OUTPUT - - name: Build wheels - x86_64 - uses: PyO3/maturin-action@v1 - with: - rust-toolchain: ${{ steps.rust-toolchain.version }} - working-directory: pyvortex - target: x86_64 - args: --release --interpreter python3.11 --sdist - - name: Build wheels - aarch64 - uses: PyO3/maturin-action@v1 - with: - rust-toolchain: ${{ steps.rust-toolchain.version }} - working-directory: pyvortex - target: aarch64 # NB: aarch64 becomes arm64 in the wheel's platform tag. - args: --release --interpreter python3.11 - - name: Build wheels - universal2 - uses: PyO3/maturin-action@v1 - with: - rust-toolchain: ${{ steps.rust-toolchain.version }} - working-directory: pyvortex - target: universal2-apple-darwin - args: --release --interpreter python3.11 - - name: test wheel - run: | - set -ex - source .venv/bin/activate - ls -al target/wheels - - echo removing linux_x86_64 if it exists because PyPI will reject the package if it is present - rm -f target/wheels/*linux_x86_64.whl - - pip install --no-deps --force-reinstall vortex-array --no-index --find-links target/wheels - cd pyvortex/test && pytest - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: osx-wheels - path: target/wheels - linux: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - # maturin-action builds in an isolated container; setting RUSTC_WRAPPER=sccache triggers failure - # because sccache is not installed in the container. - # - # - uses: ./.github/actions/setup-rust - - uses: ./.github/actions/setup-python - - name: rust-toolchain - shell: bash - run: echo "version=$(cat rust-toolchain.toml | grep channel | awk -F'\"' '{print $2}')" >> $GITHUB_OUTPUT - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - rust-toolchain: ${{ steps.rust-toolchain.version }} - working-directory: pyvortex - target: x86_64 - manylinux: auto - args: --release --interpreter python3.11 - - name: test wheel - run: | - set -ex - source .venv/bin/activate - ls -al target/wheels - - echo removing linux_x86_64 if it exists because PyPI will reject the package if it is present - rm -f target/wheels/*linux_x86_64.whl - - pip install --no-deps --force-reinstall vortex-array --no-index --find-links target/wheels - pip install pytest - cd pyvortex/test && pytest - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: linux-wheels - path: target/wheels - release: - runs-on: ubuntu-latest - permissions: - id-token: write # IMPORTANT: mandatory for trusted publishing - needs: [ macos, linux ] - environment: - name: push-to-pypi - url: https://pypi.org/p/vortex-array - steps: - - uses: actions/download-artifact@v4 - with: - # https://github.com/actions/download-artifact?tab=readme-ov-file#download-all-artifacts - # "To download them to the same directory:" - path: dist/ - merge-multiple: true - - name: Display structure of downloaded files - run: ls -R dist/ - - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: - attestations: true - verbose: true diff --git a/.github/workflows/release-plz.yml b/.github/workflows/release-plz.yml index b4c917f4e4..286806bd72 100644 --- a/.github/workflows/release-plz.yml +++ b/.github/workflows/release-plz.yml @@ -32,10 +32,114 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} - release-to-pypi: - name: Release to PyPI + macos: needs: release-plz + if: ${{ needs.release-plz.outputs.releases_created == 'true' }} + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/cleanup + - uses: ./.github/actions/setup-rust + - uses: ./.github/actions/setup-python + - name: rust-toolchain + shell: bash + run: echo "version=$(cat rust-toolchain.toml | grep channel | awk -F'\"' '{print $2}')" >> $GITHUB_OUTPUT + - name: Build wheels - x86_64 + uses: PyO3/maturin-action@v1 + with: + rust-toolchain: ${{ steps.rust-toolchain.version }} + working-directory: pyvortex + target: x86_64 + args: --release --interpreter python3.11 --sdist + - name: Build wheels - aarch64 + uses: PyO3/maturin-action@v1 + with: + rust-toolchain: ${{ steps.rust-toolchain.version }} + working-directory: pyvortex + target: aarch64 # NB: aarch64 becomes arm64 in the wheel's platform tag. + args: --release --interpreter python3.11 + - name: Build wheels - universal2 + uses: PyO3/maturin-action@v1 + with: + rust-toolchain: ${{ steps.rust-toolchain.version }} + working-directory: pyvortex + target: universal2-apple-darwin + args: --release --interpreter python3.11 + - name: test wheel + run: | + set -ex + source .venv/bin/activate + ls -al target/wheels + + echo removing linux_x86_64 if it exists because PyPI will reject the package if it is present + rm -f target/wheels/*linux_x86_64.whl + + pip install --no-deps --force-reinstall vortex-array --no-index --find-links target/wheels + cd pyvortex/test && pytest + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: osx-wheels + path: target/wheels + linux: + needs: release-plz + if: ${{ needs.release-plz.outputs.releases_created == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + # maturin-action builds in an isolated container; setting RUSTC_WRAPPER=sccache triggers failure + # because sccache is not installed in the container. + # + # - uses: ./.github/actions/setup-rust + - uses: ./.github/actions/setup-python + - name: rust-toolchain + shell: bash + run: echo "version=$(cat rust-toolchain.toml | grep channel | awk -F'\"' '{print $2}')" >> $GITHUB_OUTPUT + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + rust-toolchain: ${{ steps.rust-toolchain.version }} + working-directory: pyvortex + target: x86_64 + manylinux: auto + args: --release --interpreter python3.11 + - name: test wheel + run: | + set -ex + source .venv/bin/activate + ls -al target/wheels + + echo removing linux_x86_64 if it exists because PyPI will reject the package if it is present + rm -f target/wheels/*linux_x86_64.whl + + pip install --no-deps --force-reinstall vortex-array --no-index --find-links target/wheels + pip install pytest + cd pyvortex/test && pytest + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: linux-wheels + path: target/wheels + release: + needs: [ release-plz, macos, linux ] + if: ${{ needs.release-plz.outputs.releases_created == 'true' }} + runs-on: ubuntu-latest permissions: id-token: write # IMPORTANT: mandatory for trusted publishing - if: ${{ needs.release-plz.outputs.releases_created == 'true' }} - uses: ./.github/workflows/publish-vortex.yml + environment: + name: push-to-pypi + url: https://pypi.org/p/vortex-array + steps: + - uses: actions/download-artifact@v4 + with: + # https://github.com/actions/download-artifact?tab=readme-ov-file#download-all-artifacts + # "To download them to the same directory:" + path: dist/ + merge-multiple: true + - name: Display structure of downloaded files + run: ls -R dist/ + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + attestations: true + verbose: true