# This file was autogenerated by maturin v1.6.0 using: # maturin generate-ci github -o ../../.github/workflows/release_pyton_pytest.yml --pytest # # Then adapted to the project # name: CI on: push: branches: - main tags: - '*' pull_request: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} cancel-in-progress: true permissions: contents: read jobs: linux: runs-on: ${{ matrix.platform.runner }} strategy: matrix: platform: - runner: ubuntu-latest target: x86_64 #- runner: self-hosted-arm64 # target: aarch64 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.8' # On linux we don't use graalvm/setup-graalvm@v1.2.5 action to install graalvm because it will install it # on the runner machine and on linux the build will happen inside a manylinux docker. # Instead, we use a script to install graalvm inside the docker container # the script is launched by setting the before-script-linux config option of the maturin action - name: Build wheels uses: PyO3/maturin-action@v1 with: command: build #working-directory: "bindings/extractous-python" # dont use working dir with docker fails to reapply permission on target dir args: --manifest-path bindings/extractous-python/Cargo.toml --release --out bindings/extractous-python/dist -i python3.8 --compatibility manylinux_2_28 sccache: 'false' target: ${{ matrix.platform.target }} container: quay.io/pypa/manylinux_2_28_${{ matrix.platform.target }}:latest before-script-linux: .github/workflows/install-graalvm-sdkman.sh 23.0.1-graalce docker-options: "-e JAVA_HOME=/root/.sdkman/candidates/java/23.0.1-graalce -e GRAALVM_HOME=/root/.sdkman/candidates/java/23.0.1-graalce" #docker-options: "--mount type=bind,source=/opt/hostedtoolcache,target=/opt/hostedtoolcache -e JAVA_HOME -e GRAALVM_HOME" # On linux we don't need to patch the wheel as the RPATH is set by the rustc compiler - name: Upload wheels uses: actions/upload-artifact@v4 with: name: wheels-linux-${{ matrix.platform.target }} path: bindings/extractous-python/dist - name: pytest if: ${{ startsWith(matrix.platform.target, 'x86_64') }} shell: bash run: | set -e sudo apt install tesseract-ocr tesseract-ocr-deu tesseract-ocr-ara python3 -m venv .venv source .venv/bin/activate pip install extractous --find-links bindings/extractous-python/dist --no-index --force-reinstall pip install pytest scikit-learn lxml cd bindings/extractous-python pytest -s - name: pytest if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'ppc64' }} uses: uraimo/run-on-arch-action@v2 with: arch: ${{ matrix.platform.target }} distro: ubuntu22.04 githubToken: ${{ github.token }} install: | apt-get update apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-ara apt-get install -y --no-install-recommends python3 python3-pip pip3 install -U pip pytest scikit-learn lxml run: | set -e pip3 install extractous --find-links bindings/extractous-python/dist --no-index --force-reinstall cd bindings/extractous-python pytest -s windows: runs-on: ${{ matrix.platform.runner }} strategy: matrix: platform: - runner: windows-latest target: x64 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.8' architecture: ${{ matrix.platform.target }} - uses: graalvm/setup-graalvm@v1.2.5 with: java-version: '23' distribution: 'graalvm-community' set-java-home: 'true' - name: Build wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} working-directory: "bindings/extractous-python" args: --release --out dist --find-interpreter sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v4 with: name: wheels-windows-${{ matrix.platform.target }} path: bindings/extractous-python/dist - name: pytest if: ${{ !startsWith(matrix.platform.target, 'aarch64') }} run: | python -m venv .venv .venv\Scripts\activate.bat pip install extractous --find-links bindings/extractous-python/dist --no-index --force-reinstall pip install pytest scikit-learn lxml cd bindings\extractous-python pytest -s . macos: runs-on: ${{ matrix.platform.runner }} strategy: matrix: platform: - runner: macos-13 target: x86_64 - runner: macos-14 target: aarch64 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.8' # - uses: graalvm/setup-graalvm@v1.2.5 # with: # java-version: '23' # distribution: 'liberica' # set-java-home: 'true' # - name: Install graalvm # run: | # set -e # bash .github/workflows/install-graalvm-sdkman-macos.sh 24.1.1.r23-nik - name: Build wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} working-directory: "bindings/extractous-python" args: --release --out dist --find-interpreter sccache: 'true' - name: Patch wheel lib run: | set -e python3 -m venv .venv source .venv/bin/activate pip install wheel bash .github/workflows/patch-wheel-lib-macos.sh bindings/extractous-python/dist - name: Upload wheels uses: actions/upload-artifact@v4 with: name: wheels-macos-${{ matrix.platform.target }} path: bindings/extractous-python/dist - name: pytest run: | set -e brew install tesseract tesseract-lang python3 -m venv .venv source .venv/bin/activate pip install extractous --find-links bindings/extractous-python/dist --no-index --force-reinstall pip install pytest scikit-learn lxml cd bindings/extractous-python pytest -s sdist: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build sdist uses: PyO3/maturin-action@v1 with: working-directory: "bindings/extractous-python" command: sdist args: --out dist - name: Upload sdist uses: actions/upload-artifact@v4 with: name: wheels-sdist path: bindings/extractous-python/dist # Follows the guide on https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ # We use 2 actions one to publish on PyPi on tag pushes to main brnach and the other to publish on TestPyPi on any push publish-to-testpypi: name: Publish to TestPyPI # publish to TestPyPI on any push needs: [linux, macos, windows, sdist] runs-on: ubuntu-latest environment: name: testpypi url: https://pypi.org/p/extractous permissions: contents: read id-token: write # IMPORTANT: mandatory for trusted publishing steps: - uses: actions/download-artifact@v4 with: pattern: wheels-* merge-multiple: true path: bindings/extractous-python/dist - name: Publish to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/ skip-existing: true packages-dir: bindings/extractous-python/dist publish-to-pypi: name: Publish to PyPI # only publish to PyPI on tag pushes if: "startsWith(github.ref, 'refs/tags/')" needs: [linux, macos, windows, sdist] runs-on: ubuntu-latest environment: name: pypi url: https://pypi.org/p/extractous permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - uses: actions/download-artifact@v4 with: pattern: wheels-* merge-multiple: true path: bindings/extractous-python/dist - name: Publish to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: skip-existing: true packages-dir: bindings/extractous-python/dist