name: Test and deploy on: push: branches: - master - ci - release/* - feature/* tags: - v* paths-ignore: - README* pull_request: jobs: test_linux: name: Test ${{ matrix.os }} with Python ${{ matrix.python }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-20.04 python: "3.8" - os: ubuntu-20.04 python: "3.9" - os: ubuntu-20.04 python: "3.10" - os: ubuntu-latest python: "3.9" - os: ubuntu-latest python: "pypy-3.8" - os: ubuntu-latest python: "3.9" tesseract5: true env: OS: ${{ matrix.os }} PYTHON: ${{ matrix.python }} steps: - uses: actions/checkout@v3 with: fetch-depth: "0" # 0=all, needed for setuptools-scm to resolve version tags - uses: actions/setup-python@v4 name: Install Python with: python-version: ${{ matrix.python }} - name: Install Tesseract 5 if: matrix.tesseract5 run: | sudo add-apt-repository ppa:alex-p/tesseract-ocr-devel - name: Install common packages run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ curl \ ghostscript \ img2pdf \ libffi-dev \ libsm6 libxext6 libxrender-dev \ pngquant \ poppler-utils \ tesseract-ocr \ tesseract-ocr-deu \ tesseract-ocr-eng \ tesseract-ocr-osd \ unpaper \ zlib1g - name: Install Ubuntu 18.04 packages if: matrix.os == 'ubuntu-18.04' run: | sudo apt-get install -y --no-install-recommends \ libexempi3 - name: Install Ubuntu 20.04 packages if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-latest' run: | sudo apt-get install -y --no-install-recommends \ libexempi8 - name: Install Ubuntu packages for PyPy if: startsWith(matrix.python, 'pypy') run: | sudo apt-get install -y --no-install-recommends \ libxml2-dev \ libxslt1-dev \ pypy3-dev - name: Install Python packages run: | python -m pip install --upgrade pip wheel python -m pip install .[test] - name: Report versions run: | tesseract --version gs --version pngquant --version unpaper --version img2pdf --version - name: Test run: | python -m pytest --cov-report xml --cov=ocrmypdf --cov=tests/ -n0 tests/ - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: files: ./coverage.xml env_vars: OS,PYTHON test_macos: name: Test macOS runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest] python: ["3.9", "3.10"] env: OS: ${{ matrix.os }} PYTHON: ${{ matrix.python }} steps: - uses: actions/checkout@v3 with: fetch-depth: "0" # 0=all, needed for setuptools-scm to resolve version tags - uses: actions/setup-python@v4 name: Install Python with: python-version: ${{ matrix.python }} - name: Install Homebrew deps run: | brew update brew install \ exempi \ ghostscript \ jbig2enc \ openjpeg \ pngquant \ tesseract - name: Install Python packages run: | python -m pip install --upgrade pip wheel python -m pip install .[test] - name: Report versions run: | tesseract --version gs --version pngquant --version img2pdf --version - name: Test run: | python -m pytest --cov-report xml --cov=ocrmypdf --cov=tests/ -n0 tests/ - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: files: ./coverage.xml env_vars: OS,PYTHON test_windows: name: Test Windows runs-on: ${{ matrix.os }} strategy: matrix: os: [windows-latest] python: ["3.9", "3.10"] env: OS: ${{ matrix.os }} PYTHON: ${{ matrix.python }} steps: - uses: actions/checkout@v3 with: fetch-depth: "0" # 0=all, needed for setuptools-scm to resolve version tags - uses: actions/setup-python@v4 name: Install Python with: python-version: ${{ matrix.python }} - name: Install system packages run: | choco install --yes --no-progress --pre tesseract choco install --yes --no-progress --ignore-checksums ghostscript - name: Install Python packages run: | python -m pip install --upgrade pip wheel python -m pip install .[test] - name: Test run: | python -m pytest --cov-report xml --cov=ocrmypdf --cov=tests/ -n0 tests/ - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: files: ./coverage.xml env_vars: OS,PYTHON wheel_sdist_linux: name: Build sdist and wheels runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: "0" # 0=all, needed for setuptools-scm to resolve version tags - uses: actions/setup-python@v4 name: Install Python with: python-version: "3.7" - name: Make wheels and sdist run: | python -m pip install --upgrade pip wheel python setup.py sdist python setup.py bdist_wheel - uses: actions/upload-artifact@v3 with: path: | ./dist/*.whl ./dist/*.tar.gz upload_pypi: name: Deploy artifacts to PyPI needs: [wheel_sdist_linux, test_linux, test_macos, test_windows] runs-on: ubuntu-latest if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') steps: - uses: actions/download-artifact@v3 with: name: artifact path: dist - uses: pypa/gh-action-pypi-publish@master with: user: __token__ password: ${{ secrets.TOKEN_PYPI }} # repository_url: https://test.pypi.org/legacy/ docker: name: Build Docker images needs: [wheel_sdist_linux, test_linux, test_macos, test_windows] runs-on: ubuntu-latest if: github.event_name != 'pull_request' steps: - name: Set image tag to release or branch run: echo "DOCKER_IMAGE_TAG=${GITHUB_REF##*/}" >> $GITHUB_ENV - name: If master, set to latest run: echo 'DOCKER_IMAGE_TAG=latest' >> $GITHUB_ENV if: env.DOCKER_IMAGE_TAG == 'master' - name: Set Docker Hub repository to username run: echo "DOCKER_REPOSITORY=jbarlow83" >> $GITHUB_ENV - name: Set image name run: echo "DOCKER_IMAGE_NAME=ocrmypdf" >> $GITHUB_ENV - uses: actions/checkout@v3 with: fetch-depth: "0" # 0=all, needed for setuptools-scm to resolve version tags - name: Login to Docker Hub uses: docker/login-action@v2 with: username: jbarlow83 password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v2 - name: Print image tag run: echo "Building image ${DOCKER_REPOSITORY}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}" - name: Build run: | docker buildx build \ --push \ --platform linux/arm64/v8,linux/amd64 \ --tag "${DOCKER_REPOSITORY}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}" \ --file .docker/Dockerfile .