| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| name: Python Release Build |
| on: |
| pull_request: |
| branches: ["main"] |
| push: |
| tags: ["*-rc*"] |
| branches: ["branch-*"] |
| |
| jobs: |
| generate-license: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions-rs/toolchain@v1 |
| with: |
| profile: minimal |
| toolchain: stable |
| override: true |
| - name: Generate license file |
| run: python ./dev/create_license.py |
| - uses: actions/upload-artifact@v3 |
| with: |
| name: python-wheel-license |
| path: LICENSE.txt |
| |
| build-python-mac-win: |
| needs: [generate-license] |
| name: Mac/Win |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| python-version: ["3.10"] |
| os: [macos-latest, windows-latest] |
| steps: |
| - uses: actions/checkout@v3 |
| |
| - uses: actions/setup-python@v4 |
| with: |
| python-version: ${{ matrix.python-version }} |
| |
| - uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: stable |
| |
| - name: Upgrade pip |
| run: python -m pip install --upgrade pip |
| |
| - name: Install maturin |
| run: pip install maturin==0.15.1 |
| |
| - run: rm LICENSE.txt |
| - name: Download LICENSE.txt |
| uses: actions/download-artifact@v3 |
| with: |
| name: python-wheel-license |
| path: . |
| |
| - name: Install Protoc |
| uses: arduino/setup-protoc@v1 |
| with: |
| version: "3.x" |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| |
| - name: Build Python package |
| run: maturin build --release --strip |
| |
| - name: List Windows wheels |
| if: matrix.os == 'windows-latest' |
| run: dir target\wheels\ |
| # since the runner is dynamic shellcheck (from actionlint) can't infer this is powershell |
| # so we specify it explicitly |
| shell: powershell |
| |
| - name: List Mac wheels |
| if: matrix.os != 'windows-latest' |
| run: find target/wheels/ |
| |
| - name: Archive wheels |
| uses: actions/upload-artifact@v3 |
| with: |
| name: dist |
| path: target/wheels/* |
| |
| build-macos-aarch64: |
| needs: [generate-license] |
| name: Mac arm64 |
| runs-on: macos-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| python-version: ["3.10"] |
| steps: |
| - uses: actions/checkout@v3 |
| |
| - uses: actions/setup-python@v4 |
| with: |
| python-version: ${{ matrix.python-version }} |
| |
| - uses: actions-rs/toolchain@v1 |
| with: |
| toolchain: stable |
| |
| - name: Set up Rust targets |
| run: rustup target add aarch64-apple-darwin |
| |
| - name: Upgrade pip |
| run: python -m pip install --upgrade pip |
| |
| - name: Install maturin |
| run: pip install maturin==0.15.1 |
| |
| - run: rm LICENSE.txt |
| - name: Download LICENSE.txt |
| uses: actions/download-artifact@v3 |
| with: |
| name: python-wheel-license |
| path: . |
| |
| - name: Install Protoc |
| uses: arduino/setup-protoc@v1 |
| with: |
| version: "3.x" |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| |
| - name: Build Python package |
| run: maturin build --release --strip --target aarch64-apple-darwin |
| - name: List Mac wheels |
| run: find target/wheels/ |
| |
| - name: Archive wheels |
| uses: actions/upload-artifact@v3 |
| with: |
| name: dist |
| path: target/wheels/* |
| |
| build-manylinux: |
| needs: [generate-license] |
| name: Manylinux |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| - run: rm LICENSE.txt |
| - name: Download LICENSE.txt |
| uses: actions/download-artifact@v3 |
| with: |
| name: python-wheel-license |
| path: . |
| - run: cat LICENSE.txt |
| - name: Build wheels |
| uses: PyO3/maturin-action@v1 |
| env: |
| RUST_BACKTRACE: 1 |
| with: |
| rust-toolchain: nightly |
| target: x86_64 |
| manylinux: auto |
| rustup-components: rust-std rustfmt # Keep them in one line due to https://github.com/PyO3/maturin-action/issues/153 |
| args: --release --manylinux 2014 --features protoc |
| - name: Archive wheels |
| uses: actions/upload-artifact@v3 |
| with: |
| name: dist |
| path: target/wheels/* |
| |
| build-manylinux-aarch64: |
| needs: [generate-license] |
| name: Manylinux arm64 |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| - run: rm LICENSE.txt |
| - name: Download LICENSE.txt |
| uses: actions/download-artifact@v3 |
| with: |
| name: python-wheel-license |
| path: . |
| - run: cat LICENSE.txt |
| - name: Build wheels |
| uses: PyO3/maturin-action@v1 |
| env: |
| RUST_BACKTRACE: 1 |
| with: |
| rust-toolchain: nightly |
| target: aarch64 |
| # Use manylinux_2_28-cross because the manylinux2014-cross has GCC 4.8.5, which causes the build to fail |
| manylinux: 2_28 |
| rustup-components: rust-std rustfmt # Keep them in one line due to https://github.com/PyO3/maturin-action/issues/153 |
| args: --release --features protoc |
| - name: Archive wheels |
| uses: actions/upload-artifact@v3 |
| with: |
| name: dist |
| path: target/wheels/* |
| |
| build-sdist: |
| needs: [generate-license] |
| name: Source distribution |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| - run: rm LICENSE.txt |
| - name: Download LICENSE.txt |
| uses: actions/download-artifact@v3 |
| with: |
| name: python-wheel-license |
| path: . |
| - run: cat LICENSE.txt |
| - name: Build sdist |
| uses: PyO3/maturin-action@v1 |
| with: |
| rust-toolchain: stable |
| manylinux: auto |
| rustup-components: rust-std rustfmt |
| args: --release --sdist --out dist --features protoc |
| - name: Archive wheels |
| uses: actions/upload-artifact@v3 |
| with: |
| name: dist |
| path: target/wheels/* |
| |
| # NOTE: PyPI publish needs to be done manually for now after release passed the vote |
| # release: |
| # name: Publish in PyPI |
| # needs: [build-manylinux, build-python-mac-win] |
| # runs-on: ubuntu-latest |
| # steps: |
| # - uses: actions/download-artifact@v3 |
| # - name: Publish to PyPI |
| # uses: pypa/gh-action-pypi-publish@master |
| # with: |
| # user: __token__ |
| # password: ${{ secrets.pypi_password }} |