From b3c81c07b837b724d855352bf1b7338fea72ec33 Mon Sep 17 00:00:00 2001 From: Hung-I Date: Sun, 24 Mar 2024 14:58:27 +0800 Subject: [PATCH] chore: update CI --- .github/workflows/main.yml | 29 ++++- .github/workflows/pyo3.yml | 229 ++++++++++++++++++++++++++++++------- 2 files changed, 215 insertions(+), 43 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7ffa5ca..aa74e07 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,19 +9,25 @@ env: jobs: build-main: + strategy: + matrix: + featureset: + - flag: "" + - flag: "--all-features" + - flag: "--no-default-features" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build run: | cargo --version - cargo build --verbose + cargo build --verbose ${{ matrix.featureset.flag }} - name: Test - run: cargo test --verbose - - name: Clippy - run: cargo clippy --all-targets --all-features -- -D warnings + run: cargo test ${{ matrix.featureset.flag }} --verbose - name: Check Format run: cargo fmt -- --check + - name: Clippy + run: cargo clippy --all-targets ${{ matrix.featureset.flag }} -- -D warnings build-cli: needs: build-main @@ -42,6 +48,21 @@ jobs: - name: Check Format run: cargo fmt -- --check + build-pyo3: + needs: build-main + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Symlink README + run: | + cd pyo3/ + ln -s ../README.md ./ + - uses: messense/maturin-action@v1 + with: + manylinux: auto + command: build + args: --release --sdist -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + # now Pages.dev do this for us # build-web: # needs: build-main diff --git a/.github/workflows/pyo3.yml b/.github/workflows/pyo3.yml index 1ace9ea..160383b 100644 --- a/.github/workflows/pyo3.yml +++ b/.github/workflows/pyo3.yml @@ -2,80 +2,231 @@ name: PyO3 on: push: + branches: + # - main + - dev + tags: + - v* pull_request: + workflow_dispatch: jobs: + macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: 3.9 + architecture: x64 + - uses: dtolnay/rust-toolchain@stable + - name: Build wheels - x86_64 + uses: PyO3/maturin-action@v1 + with: + target: x86_64 + args: --release -o pyo3/dist --sdist --find-interpreter -m pyo3/Cargo.toml + - name: Install built wheel - x86_64 + run: | + pip install zhconv-rs --no-index --find-links pyo3/dist --force-reinstall + # python -c "import zhconv_rs" + - name: Build wheels - universal2 + uses: PyO3/maturin-action@v1 + with: + target: universal2-apple-darwin + args: --release -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + - name: Install built wheel - universal2 + run: | + pip install zhconv-rs --no-index --find-links pyo3/dist --force-reinstall + python -c "import zhconv_rs" + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: pyo3/dist + + windows: + runs-on: windows-latest + strategy: + matrix: + target: [x64, x86] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: 3.9 + architecture: ${{ matrix.target }} + - uses: dtolnay/rust-toolchain@stable + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + args: --release -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + - name: Install built wheel + run: | + pip install zhconv-rs --no-index --find-links pyo3/dist --force-reinstall + python -c "import zhconv_rs" + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: pyo3/dist + linux: runs-on: ubuntu-latest + strategy: + matrix: + target: [x86_64, i686] steps: - - uses: actions/checkout@v3 - - name: Symlink README + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: 3.9 + architecture: x64 + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + manylinux: auto + args: --release -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + - name: Install built wheel + if: matrix.target == 'x86_64' run: | - cd pyo3/ - ln -s ../README.md ./ - - uses: messense/maturin-action@v1 + pip install zhconv-rs --no-index --find-links pyo3/dist --force-reinstall + python -c "import zhconv_rs" + - name: Upload wheels + uses: actions/upload-artifact@v3 with: + name: wheels + path: pyo3/dist + + linux-cross: + runs-on: ubuntu-latest + strategy: + matrix: + target: [aarch64, armv7, s390x, ppc64le, ppc64] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: 3.9 + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} manylinux: auto - command: build - args: --release --sdist -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + args: --release -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + - uses: uraimo/run-on-arch-action@v2.7.1 + if: matrix.target != 'ppc64' + name: Install built wheel + with: + arch: ${{ matrix.target }} + distro: ubuntu20.04 + githubToken: ${{ github.token }} + install: | + apt-get update + apt-get install -y --no-install-recommends python3 python3-pip + pip3 install -U pip + run: | + pip3 install zhconv-rs --no-index --find-links pyo3/dist/ --force-reinstall + python3 -c "import zhconv_rs" - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: wheels path: pyo3/dist - windows: - runs-on: windows-latest - if: "startsWith(github.ref, 'refs/tags/')" + musllinux: + runs-on: ubuntu-latest + strategy: + matrix: + target: + - x86_64-unknown-linux-musl + - i686-unknown-linux-musl steps: - - uses: actions/checkout@v3 - - name: Symlink README - run: | - cd pyo3/ - ln -s ../README.md ./ - - uses: messense/maturin-action@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 with: - command: build + python-version: 3.11 + architecture: x64 + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + manylinux: musllinux_1_2 args: --release -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + # - name: Install built wheel + # if: matrix.target == 'x86_64-unknown-linux-musl' + # uses: addnab/docker-run-action@v3 + # with: + # image: alpine:latest + # options: -v ${{ github.workspace }}:/io -w /io + # run: | + # apk add py3-pip + # pip3 install -U pip + # pip3 install zhconv-rs --no-index --find-links /io/pyo3/dist --force-reinstall --break-system-packages + # python3 -c "import zhconv_rs" - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: wheels path: pyo3/dist - macos: - runs-on: macos-latest - if: "startsWith(github.ref, 'refs/tags/')" + musllinux-cross: + runs-on: ubuntu-latest + strategy: + matrix: + platform: + - target: aarch64-unknown-linux-musl + arch: aarch64 + - target: armv7-unknown-linux-musleabihf + arch: armv7 steps: - - uses: actions/checkout@v3 - - name: Symlink README - run: | - cd pyo3/ - ln -s ../README.md ./ - - uses: messense/maturin-action@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 with: - command: build - args: --release -o pyo3/dist --universal2 --find-interpreter -m pyo3/Cargo.toml + python-version: 3.11 + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + manylinux: musllinux_1_2 + args: --release -o pyo3/dist --find-interpreter -m pyo3/Cargo.toml + # - uses: uraimo/run-on-arch-action@v2.7.1 + # name: Install built wheel + # with: + # arch: ${{ matrix.platform.arch }} + # distro: alpine_latest + # githubToken: ${{ github.token }} + # install: | + # apk add py3-pip + # pip3 install -U pip + # run: | + # pip3 install zhconv-rs --no-index --find-links pyo3/dist/ --force-reinstall --break-system-packages --break-system-packages + # python3 -c "import zhconv_rs" - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: wheels path: pyo3/dist release: name: Release - environment: pypi runs-on: ubuntu-latest if: "startsWith(github.ref, 'refs/tags/')" - needs: [ macos, windows, linux ] + needs: [ macos, windows, linux, linux-cross, musllinux, musllinux-cross ] steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: wheels + - uses: actions/setup-python@v4 + with: + python-version: 3.9 - name: Publish to PyPI - uses: messense/maturin-action@v1 env: - MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} - with: - command: upload - args: --skip-existing * + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + run: | + pip install --upgrade twine + twine upload --skip-existing * + +# Source: https://github.com/messense/crfs-rs/blob/main/.github/workflows/Python.yml