self_encryption 0.35.0

Self encrypting files (convergent encryption plus obfuscation)
Documentation
name: Build and Publish Python Package

on:
  push:
    tags:
      - 'v*'

# Add top-level permissions block
permissions:
  id-token: write
  contents: read

jobs:
  macos:
    runs-on: macos-latest
    # Add permissions to job
    permissions:
      id-token: write
      contents: read
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
        target: [x86_64, aarch64]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          target: ${{ matrix.target }}
          args: --release --out dist -i python${{ matrix.python-version }}
          sccache: 'true'
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-macos-${{ matrix.target }}-py${{ matrix.python-version }}
          path: dist/*.whl
          if-no-files-found: error

  windows:
    runs-on: windows-latest
    # Add permissions to job
    permissions:
      id-token: write
      contents: read
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
        target: [x64]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
          architecture: ${{ matrix.target }}
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          args: --release --out dist
          sccache: 'true'
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-windows-${{ matrix.target }}-py${{ matrix.python-version }}
          path: dist/*.whl
          if-no-files-found: error

  linux:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    strategy:
      matrix:
        target: [x86_64, i686]
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
          architecture: x64
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        env:
          PYTHON_VERSION: ${{ matrix.python-version }}
        with:
          target: ${{ matrix.target }}
          manylinux: auto
          args: --release --out dist -i python${{ matrix.python-version }}
          sccache: 'true'
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-linux-${{ matrix.target }}-py${{ matrix.python-version }}
          path: dist/*.whl
          if-no-files-found: error

  musllinux:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-musl
          - i686-unknown-linux-musl
          - aarch64-unknown-linux-musl
          - armv7-unknown-linux-musleabihf
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
          architecture: x64
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        env:
          PYO3_CROSS_PYTHON_VERSION: ${{ matrix.python-version }}
          PYO3_CROSS: "1"
        with:
          target: ${{ matrix.target }}
          manylinux: musllinux_1_2
          args: --release --out dist -i python${{ matrix.python-version }}
          sccache: 'true'
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-musllinux-${{ matrix.target }}-py${{ matrix.python-version }}
          path: dist/*.whl
          if-no-files-found: error

  sdist:
    runs-on: ubuntu-latest
    # Add permissions to job
    permissions:
      id-token: write
      contents: read
    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
          path: dist/*.tar.gz
          if-no-files-found: error

  release:
    name: Release
    runs-on: ubuntu-latest
    needs: [macos, windows, linux, musllinux, sdist]
    # Keep existing permissions
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: wheels
          path: dist
          merge-multiple: true
      - name: Display structure of downloaded files
        run: ls -R dist
      - name: Publish to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          packages-dir: dist/
          verbose: true
          print-hash: true