name: CI on: push: branches: - main tags: - '*' pull_request: workflow_dispatch: permissions: contents: read jobs: wheels: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: 3.x - name: Setup caching uses: actions/cache@v4 with: path: | /var/cache/apt ~/.cache/pip ~/.cache/pip-wheel ~/.cache/sccache ~/.cache/cargo-xwin ~/.cargo ~/.osxcross key: cache-ubuntu-maturin-cross-compile - name: Install llvm run: | if ! command -v llvm-dlltool >/dev/null 2>&1; then sudo apt update sudo apt install -y llvm fi shell: bash - name: Install Rust run: | export PATH="~/.cargo/bin:$PATH" if ! command -v rustc >/dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y else rustup update fi shell: bash - name: Install sccache and maturin run: | export PATH="~/.cargo/bin:$PATH" python -m pip install --upgrade pip pip install maturin ziglang if ! command -v sccache >/dev/null 2>&1; then cargo install sccache || pip install sccache fi shell: bash - name: Install xwin run: | export PATH="~/.cargo/bin:$PATH" if ! command -v cargo-xwin >/dev/null 2>&1; then cargo install cargo-xwin || pip install cargo-xwin cargo xwin cache xwin fi shell: bash - name: Install osxcross run: | export PATH="~/.osxcross/bin:$PATH" if ! command -v osxcross >/dev/null 2>&1; then wget https://nextcloud.wimpomp.nl/s/DcrTwoP3SeY7DQF/download -O osxcross.tar.gz tar -xzf osxcross.tar.gz -C ~/ mv ~/osxcross ~/.osxcross fi - name: Build wheels run: | export PATH="~/.cargo/bin:~/.osxcross/bin:$PATH" cd ls -a echo $PATH maturin sdist --out dist rustup default nightly rustup target add x86_64-unknown-linux-gnu --toolchain nightly maturin build --release --out dist --target x86_64-unknown-linux-gnu rustup target add aarch64-unknown-linux-gnu --toolchain nightly maturin build --release --out dist --target aarch64-unknown-linux-gnu --zig rustup target add x86_64-pc-windows-msvc --toolchain nightly maturin build --release --out dist --target x86_64-pc-windows-msvc rustup target add aarch64-pc-windows-msvc --toolchain nightly maturin build --release --out dist --target aarch64-pc-windows-msvc rustup target add x86_64-apple-darwin --toolchain nightly maturin build --release --out dist --target x86_64-apple-darwin --zig rustup target add aarch64-apple-darwin --toolchain nightly maturin build --release --out dist --target aarch64-apple-darwin --zig - name: Upload wheels uses: actions/upload-artifact@v3.2.2 with: path: dist/kmeans-* release: name: Release runs-on: ubuntu-latest if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} needs: [wheels] permissions: # Use to sign the release artifacts id-token: write # Used to upload release artifacts contents: write # Used to generate artifact attestation attestations: write steps: - uses: actions/download-artifact@v4 - name: Generate artifact attestation uses: actions/attest-build-provenance@v2 with: subject-path: 'wheels-*/*' - name: Publish to PyPI if: ${{ startsWith(github.ref, 'refs/tags/') }} uses: PyO3/maturin-action@v1 env: MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} with: command: upload args: --non-interactive --skip-existing wheels-*/*