causasv 0.8.9

Causal feature attribution via Asymmetric Shapley Values (ASV) over DAGs — Rust + Python
Documentation
name: Release

on:
  push:
    tags: ['v*']
  workflow_dispatch:

permissions:
  contents: write   # required for GitHub Release creation

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2

      - name: Test
        run: cargo test

      - name: Publish to crates.io
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        run: |
          set +e
          out=$(cargo publish 2>&1)
          ec=$?
          echo "$out"
          [ $ec -eq 0 ] || echo "$out" | grep -q "already exists"

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v3
        with:
          generate_release_notes: true

  # ── Python wheels ─────────────────────────────────────────────────────────────

  linux-wheels:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # aarch64 disabled: maturin can't find Python interpreters inside the
        # manylinux container under QEMU emulation (fails even with
        # docker/setup-qemu-action set up) -- see tasks/todo.md for follow-up.
        target: [x86_64]
    steps:
      - uses: actions/checkout@v7
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: py
          target: ${{ matrix.target }}
          command: build
          args: --release --out ../dist
          manylinux: auto
      - uses: actions/upload-artifact@v7
        with:
          name: linux-wheels-${{ matrix.target }}
          path: dist

  macos-wheels:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v7
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: py
          target: universal2-apple-darwin
          command: build
          args: --release --out ../dist
      - uses: actions/upload-artifact@v7
        with:
          name: macos-wheels
          path: dist

  windows-wheels:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v7
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: py
          command: build
          args: --release --out ../dist
      - uses: actions/upload-artifact@v7
        with:
          name: windows-wheels
          path: dist

  sdist:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: py
          command: sdist
          args: --out ../dist
      - uses: actions/upload-artifact@v7
        with:
          name: sdist
          path: dist

  publish-pypi:
    needs: [linux-wheels, macos-wheels, windows-wheels, sdist]
    runs-on: ubuntu-latest
    environment:
      name: pypi
      url: https://pypi.org/p/causasv
    permissions:
      id-token: write   # Trusted Publisher (OIDC) — no token secret needed
    steps:
      - uses: actions/download-artifact@v8
        with:
          merge-multiple: true
          path: dist
      - uses: pypa/gh-action-pypi-publish@release/v1