From f3cee0391dee14abd069231787142c23a4ebe328 Mon Sep 17 00:00:00 2001 From: WT-MM Date: Tue, 12 Nov 2024 20:08:51 +0000 Subject: [PATCH] update publish workflow --- .github/workflows/publish.yml | 143 +++++++++++++++++++++++++++++++--- 1 file changed, 133 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 944c8ba..9cf4918 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Publish Python Packages +name: Publish Python and Rust Packages on: release: @@ -14,10 +14,13 @@ concurrency: cancel-in-progress: true jobs: - publish-python: + build-wheels: + strategy: + matrix: + os: [ubuntu-latest] + name: Build and publish Python package (${{ matrix.os }}) timeout-minutes: 10 - name: Build and publish Python package - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - name: Checkout code @@ -28,18 +31,138 @@ jobs: with: python-version: "3.10" - - name: Install system dependencies - run: | - sudo apt-get update - sudo apt-get install -y libudev-dev pkg-config + - name: Set up Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable - name: Install dependencies run: | python -m pip install --upgrade pip - pip install build wheel + pip install cibuildwheel + shell: bash - name: Build package - run: python -m build --sdist --outdir dist/ . + env: + CIBW_SKIP: "pp* *-musllinux*" # Skip PyPy and musllinux builds + CIBW_BEFORE_ALL_LINUX: | + yum install -y libudev-devel pkgconfig + CIBW_BEFORE_ALL_MACOS: | + brew install openssl pkg-config + CIBW_BEFORE_BUILD: | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + source $HOME/.cargo/env + pip install setuptools-rust + CIBW_ENVIRONMENT: | + PATH="/usr/local/bin:$HOME/.cargo/bin:$PATH" + CARGO_NET_GIT_FETCH_WITH_CLI=true + run: | + cibuildwheel --output-dir dist + + - name: Upload wheel artifacts + uses: actions/upload-artifact@v3 + with: + name: wheels-${{ matrix.os }} + path: | + dist/*.whl + + build-source-dist: + name: Build and publish Python package (source distribution) + timeout-minutes: 10 + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.11" + + - name: Set up Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install build + shell: bash + + - name: Build source distribution + run: | + python -m build --sdist --outdir dist + + - name: Upload source distribution + uses: actions/upload-artifact@v3 + with: + name: source-dist + path: | + dist/*.tar.gz + + publish-wheels: + needs: [build-wheels, build-source-dist] + name: Publish Python wheels + timeout-minutes: 10 + runs-on: ubuntu-latest + + steps: + - name: Download all wheels + uses: actions/download-artifact@v3 + with: + path: dist + + - name: Move wheels to dist directory + run: | + mkdir -p final_dist + find dist -name "*.whl" -exec mv {} final_dist/ \; + find dist -name "*.tar.gz" -exec mv {} final_dist/ \; - name: Publish package uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: final_dist/ + + publish-rust: + name: Build and publish Rust package + timeout-minutes: 10 + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libudev-dev pkg-config + + - name: Cache Cargo registry + uses: actions/cache@v2 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry + restore-keys: | + ${{ runner.os }}-cargo-registry + + - name: Cache Cargo index + uses: actions/cache@v2 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index + restore-keys: | + ${{ runner.os }}-cargo-index + + - name: Publish imu and hexmove packages to crates.io + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + run: | + cargo publish -p imu + cargo publish -p hexmove