proofmode 0.9.0

Capture, share, and preserve verifiable photos and videos
Documentation
name: Python Package

on:
  push:
    branches: [ main, develop ]
    tags: [ 'v*' ]
  pull_request:
    branches: [ main ]

permissions:
  contents: read

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: true
    
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install maturin pytest pytest-asyncio
    
    - name: Build package
      run: |
        maturin develop --features python,sequoia-openpgp,polars,c2pa
    
    - name: Run tests
      run: |
        pytest python/tests -v

  linux:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [x86_64, i686, aarch64, armv7]
    steps:
    - uses: actions/checkout@v4
    
    - name: Setup Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.10'
    
    - name: Build wheels
      uses: PyO3/maturin-action@v1
      with:
        target: ${{ matrix.target }}
        args: --release --features python,sequoia-openpgp,polars,c2pa --out dist
        manylinux: auto
    
    - name: Upload wheels
      uses: actions/upload-artifact@v4
      with:
        name: wheels-linux-${{ matrix.target }}
        path: dist

  windows:
    runs-on: windows-latest
    strategy:
      matrix:
        target: [x64, x86]
    steps:
    - uses: actions/checkout@v4
    
    - name: Setup Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.10'
        architecture: ${{ matrix.target }}
    
    - name: Build wheels
      uses: PyO3/maturin-action@v1
      with:
        target: ${{ matrix.target }}
        args: --release --features python,sequoia-openpgp,polars,c2pa --out dist
    
    - name: Upload wheels
      uses: actions/upload-artifact@v4
      with:
        name: wheels-windows-${{ matrix.target }}
        path: dist

  macos:
    runs-on: macos-latest
    strategy:
      matrix:
        target: [x86_64, aarch64]
    steps:
    - uses: actions/checkout@v4
    
    - name: Setup Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.10'
    
    - name: Build wheels
      uses: PyO3/maturin-action@v1
      with:
        target: ${{ matrix.target }}
        args: --release --features python,sequoia-openpgp,polars,c2pa --out dist
    
    - name: Upload wheels
      uses: actions/upload-artifact@v4
      with:
        name: wheels-macos-${{ matrix.target }}
        path: dist

  sdist:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    
    - name: Build sdist
      uses: PyO3/maturin-action@v1
      with:
        command: sdist
        args: --out dist
    
    - name: Upload sdist
      uses: actions/upload-artifact@v4
      with:
        name: wheels-sdist
        path: dist

  release:
    name: Release
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')
    needs: [linux, windows, macos, sdist]
    steps:
    - uses: actions/download-artifact@v4
    
    - name: Publish to PyPI
      uses: PyO3/maturin-action@v1
      env:
        MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
      with:
        command: upload
        args: --non-interactive --skip-existing wheels-*/*