From 2ccc0c6f0bd672187a6565e46f325fd941199b15 Mon Sep 17 00:00:00 2001 From: Jiayu Liu Date: Mon, 3 Jan 2022 23:20:58 +0800 Subject: [PATCH] setup workflow --- .github/workflows/build.yml | 127 ++++++++++++++++++++++++++++++++++++ .github/workflows/test.yaml | 62 ++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..fd289f8 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,127 @@ +# 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: + push: + tags: + - "*-rc*" + +jobs: + generate-license: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - 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@v2 + 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@v2 + + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2021-10-23 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install maturin==0.11.5 + + - run: rm LICENSE.txt + - name: Download LICENSE.txt + uses: actions/download-artifact@v2 + with: + name: python-wheel-license + path: python + + - name: Build Python package + run: maturin build --release --no-sdist --strip + + - name: List Windows wheels + if: matrix.os == 'windows-latest' + run: dir target\wheels\ + + - name: List Mac wheels + if: matrix.os != 'windows-latest' + run: find target/wheels/ + + - name: Archive wheels + uses: actions/upload-artifact@v2 + with: + name: dist + path: target/wheels/* + + build-manylinux: + needs: [generate-license] + name: Manylinux + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: rm LICENSE.txt + - name: Download LICENSE.txt + uses: actions/download-artifact@v2 + with: + name: python-wheel-license + path: python + - run: cat LICENSE.txt + - name: Build wheels + run: | + export RUSTFLAGS='-C target-cpu=skylake' + docker run --rm -v $(pwd)/..:/io \ + --workdir /io/python \ + konstin2/maturin:v0.11.2 \ + build --release --manylinux 2010 + - name: Archive wheels + uses: actions/upload-artifact@v2 + 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@v2 + # - name: Publish to PyPI + # uses: pypa/gh-action-pypi-publish@master + # with: + # user: __token__ + # password: ${{ secrets.pypi_password }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..c9b1a82 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,62 @@ +# 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 test +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup Rust toolchain + run: | + rustup toolchain install nightly-2021-10-23 + rustup default nightly-2021-10-23 + rustup component add rustfmt + - name: Cache Cargo + uses: actions/cache@v2 + with: + path: /home/runner/.cargo + key: cargo-maturin-cache- + - name: Cache Rust dependencies + uses: actions/cache@v2 + with: + path: /home/runner/target + key: target-maturin-cache- + - uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Create Virtualenv + run: | + python -m venv venv + source venv/bin/activate + pip install -r requirements.txt + - name: Run Linters + run: | + source venv/bin/activate + flake8 python --ignore=E501 + black --line-length 79 --diff --check python + - name: Run tests + run: | + source venv/bin/activate + cd python + maturin develop + RUST_BACKTRACE=1 pytest -v . + env: + CARGO_HOME: "/home/runner/.cargo" + CARGO_TARGET_DIR: "/home/runner/target"