name: Backend Tests on: push: branches-ignore: - 'translations**' paths: - 'src/**' - 'pyproject.toml' - 'uv.lock' - 'docker/compose/docker-compose.ci-test.yml' - '.github/workflows/ci-backend.yml' pull_request: branches-ignore: - 'translations**' paths: - 'src/**' - 'pyproject.toml' - 'uv.lock' - 'docker/compose/docker-compose.ci-test.yml' - '.github/workflows/ci-backend.yml' workflow_dispatch: concurrency: group: backend-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: DEFAULT_UV_VERSION: "0.9.x" NLTK_DATA: "/usr/share/nltk_data" jobs: test: name: "Python ${{ matrix.python-version }}" runs-on: ubuntu-24.04 strategy: matrix: python-version: ['3.10', '3.11', '3.12'] fail-fast: false steps: - name: Checkout uses: actions/checkout@v6 - name: Start containers run: | docker compose --file docker/compose/docker-compose.ci-test.yml pull --quiet docker compose --file docker/compose/docker-compose.ci-test.yml up --detach - name: Set up Python id: setup-python uses: actions/setup-python@v6 with: python-version: "${{ matrix.python-version }}" - name: Install uv uses: astral-sh/setup-uv@v7 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: true python-version: ${{ steps.setup-python.outputs.python-version }} - name: Install system dependencies run: | sudo apt-get update -qq sudo apt-get install -qq --no-install-recommends \ unpaper tesseract-ocr imagemagick ghostscript libzbar0 poppler-utils - name: Configure ImageMagick run: | sudo cp docker/rootfs/etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-6/policy.xml - name: Install Python dependencies run: | uv sync \ --python ${{ steps.setup-python.outputs.python-version }} \ --group testing \ --frozen - name: List installed Python dependencies run: | uv pip list - name: Install NLTK data run: | uv run python -m nltk.downloader punkt punkt_tab snowball_data stopwords -d ${{ env.NLTK_DATA }} - name: Run tests env: NLTK_DATA: ${{ env.NLTK_DATA }} PAPERLESS_CI_TEST: 1 PAPERLESS_MAIL_TEST_HOST: ${{ secrets.TEST_MAIL_HOST }} PAPERLESS_MAIL_TEST_USER: ${{ secrets.TEST_MAIL_USER }} PAPERLESS_MAIL_TEST_PASSWD: ${{ secrets.TEST_MAIL_PASSWD }} run: | uv run \ --python ${{ steps.setup-python.outputs.python-version }} \ --dev \ --frozen \ pytest - name: Upload test results to Codecov if: always() uses: codecov/codecov-action@v5 with: flags: backend,backend-python-${{ matrix.python-version }} files: junit.xml report_type: test_results - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: flags: backend,backend-python-${{ matrix.python-version }} files: coverage.xml report_type: coverage - name: Stop containers if: always() run: | docker compose --file docker/compose/docker-compose.ci-test.yml logs docker compose --file docker/compose/docker-compose.ci-test.yml down