From 0daa1c7e6bb76fc57fba45a71d74b7be0352b9a2 Mon Sep 17 00:00:00 2001 From: Martin Bammer Date: Sat, 26 Oct 2024 08:44:03 +0200 Subject: [PATCH] Update ci.yml --- .github/workflows/ci.yml | 109 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bbba916..77be0fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,34 @@ name: Continuous Integration jobs: + check: + name: Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + - uses: actions-rs/cargo@v1 + with: + command: check + + clippy_check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + components: clippy + override: true + - uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features --all-targets -- -A clippy::unnecessary_wraps + test: name: Run cargo test on ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -23,3 +51,84 @@ jobs: run: | cd scandir cargo test + + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest, macos-14] + + env: + CIBW_BUILD_VERBOSITY: 1 + CIBW_BEFORE_ALL_LINUX: "curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly -y && yum install -y openssl-devel" + CIBW_SKIP: "cp36-* cp37-* pp* *-win32 *-pypy* *-musllinux*" + CIBW_TEST_SKIP: "cp38-macosx_*:arm64" + # Build separate wheels for macOS's different architectures. + CIBW_ARCHS_MACOS: "arm64" + # Build only on Linux architectures that don't need qemu emulation. + CIBW_ARCHS_LINUX: "x86_64" + # Run the test suite after each build. + CIBW_ENVIRONMENT: 'PATH="$PATH:$HOME/.cargo/bin"' + CIBW_TEST_REQUIRES: "pytest" + CIBW_TEST_COMMAND: pytest {package}/tests + + steps: + - uses: actions/checkout@v4 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + + - if: runner.os == 'Windows' + run: | + echo 'PATH=/c/Python38:/c/Python38/Scripts:$PATH' >> $GITHUB_ENV + echo 'RUSTFLAGS=-Ctarget-feature=+crt-static' >> $GITHUB_ENV + echo 'RUSTFLAGS=-Ctarget-feature=+crt-static' >> $GITHUB_ENV + echo 'CIBW_BEFORE_BUILD=python -m pip install --upgrade pip' >> $GITHUB_ENV + + - if: runner.os != 'Linux' + name: Setup env when not using docker + run: | + python -m pip install --upgrade wheel setuptools setuptools-rust + + - uses: PyO3/maturin-action@v1 + with: + working-directory: ./pyscandir + command: build + args: --release + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + cache: pip + cache-dependency-path: ".github/workflows/wheels.yml" + + - name: Install dependencies + run: | + python -m pip install cibuildwheel + python -m pip install -U twine + + - name: Build wheels + run: | + cd pyscandir + maturin build --sdist --interpreter + python -m cibuildwheel --output-dir wheelhouse + + - name: Upload as build artifacts + uses: actions/upload-artifact@v3 + with: + name: wheels + path: target/wheels/*.whl + if-no-files-found: error + + - name: Publish package to TestPyPI + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }} + run: | + twine upload --repository-url https://test.pypi.org/legacy/ --skip-existing target/wheels/*