Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Documentation
url: https://github.com/raintree-ai/docpull#readme
url: https://github.com/raintree-technology/docpull#readme
about: Check the README for usage instructions and examples
- name: Discussions
url: https://github.com/raintree-ai/docpull/discussions
url: https://github.com/raintree-technology/docpull/discussions
about: Ask questions and share ideas
38 changes: 22 additions & 16 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

env:
MISE_LOCKED: "1"
UV_VERSION: "0.11.6"

jobs:
benchmark:
if: github.event_name != 'schedule' || github.event.schedule == '17 4 * * 3'
Expand All @@ -29,21 +33,22 @@ jobs:
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: "3.11"
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Sync dependencies
run: uv sync --locked --extra dev

- name: Run 10k-page benchmark
env:
DOCPULL_BENCHMARK_10K: "1"
run: |
PYTHONPATH=src python -m pytest -v -s tests/benchmarks/test_10k_pages.py \
uv run --locked python -m pytest -v -s tests/benchmarks/test_10k_pages.py \
| tee benchmark.log

- name: Surface report in summary
Expand Down Expand Up @@ -74,19 +79,20 @@ jobs:
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: "3.11"
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Sync dependencies
run: uv sync --locked --extra dev

- name: Run public contract smoke tests
run: |
PYTHONPATH=src python -m pytest -q \
uv run --locked python -m pytest -q \
tests/test_surface_contract.py \
tests/test_public_feature_smoke.py \
tests/test_output_contract.py \
Expand Down
124 changes: 69 additions & 55 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,151 +14,165 @@ concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

env:
MISE_LOCKED: "1"
UV_VERSION: "0.11.6"

jobs:
metrics-fresh:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false

- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Check metrics freshness
env:
METRICS_MAX_AGE_HOURS: "168"
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
python .github/scripts/check_metrics_fresh.py || {
uv run --locked python .github/scripts/check_metrics_fresh.py || {
echo "::warning::Metrics are stale; run the scheduled Update metrics workflow after merge."
}
else
python .github/scripts/check_metrics_fresh.py
uv run --locked python .github/scripts/check_metrics_fresh.py
fi

test:
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
MISE_PYTHON_VERSION: ${{ matrix.python-version }}
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
python-version: ["3.10.20", "3.11.15", "3.12.13", "3.13.14", "3.14.6"]
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: ${{ matrix.python-version }}
cache: pip
cache-dependency-path: pyproject.toml
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[all,dev]"
- name: Sync dependencies
run: uv sync --locked --all-extras

- name: Run tests
if: matrix.python-version != '3.11'
run: python -m pytest -q
if: matrix.python-version != '3.11.15'
run: uv run --locked --all-extras python -m pytest -q

- name: Run tests with coverage
if: matrix.python-version == '3.11'
run: python -m pytest --cov=docpull --cov-report=xml --cov-report=term -q
if: matrix.python-version == '3.11.15'
run: uv run --locked --all-extras python -m pytest --cov=docpull --cov-report=xml --cov-report=term -q

- name: Upload coverage XML
if: matrix.python-version == '3.11'
if: matrix.python-version == '3.11.15'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: coverage-xml
path: coverage.xml

lint:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: "3.11"
cache: pip
cache-dependency-path: pyproject.toml
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[all,dev]"
- name: Sync dependencies
run: uv sync --locked --all-extras

- name: Check generated release metadata
run: python scripts/sync_release_metadata.py --check
run: uv run --locked python scripts/sync_release_metadata.py --check

- name: Check generated contract schemas
run: uv run --locked python scripts/generate_contract_schemas.py --check

- name: Run ruff
run: python -m ruff check .
run: uv run --locked python -m ruff check .

- name: Check formatting
run: python -m ruff format --check .
run: uv run --locked python -m ruff format --check .

- name: Run pre-commit
run: python -m pre_commit run --all-files --show-diff-on-failure
run: uv run --locked python -m pre_commit run --all-files --show-diff-on-failure

typecheck:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: "3.11"
cache: pip
cache-dependency-path: pyproject.toml
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[all,dev]"
- name: Sync dependencies
run: uv sync --locked --all-extras

- name: Run mypy
run: python -m mypy src
run: uv run --locked python -m mypy src

package:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: "3.11"
cache: pip
cache-dependency-path: |
pyproject.toml
requirements-release.txt

- name: Install pinned release tooling
run: python -m pip install -r requirements-release.txt
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Build wheel and sdist
run: python scripts/build_release.py --verify-reproducible
run: uv run --locked --with-requirements requirements-release.txt python scripts/build_release.py --verify-reproducible

- name: Verify wheel and sdist metadata
run: python -m twine check dist/*
run: uv run --locked --with-requirements requirements-release.txt python -m twine check dist/*

- name: Smoke install built wheel
run: |
python -m venv .pkg-smoke
.pkg-smoke/bin/python -m pip install --upgrade pip
.pkg-smoke/bin/python -m pip install dist/*.whl
uv venv .pkg-smoke
uv pip install --python .pkg-smoke/bin/python dist/*.whl
.pkg-smoke/bin/docpull --version
.pkg-smoke/bin/python -c "import docpull; print(docpull.__version__)"
9 changes: 9 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
name: CodeQL

env:
MISE_LOCKED: "1"

on:
workflow_dispatch:
pull_request:
Expand All @@ -22,6 +25,7 @@ jobs:
analyze:
name: analyze (${{ matrix.language }})
runs-on: ubuntu-24.04
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
Expand All @@ -36,6 +40,11 @@ jobs:
with:
persist-credentials: false

- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
version: 2026.7.1
install: true
cache: true
- name: Initialize CodeQL
uses: github/codeql-action/init@b22c66273205240d86582638b860f9b25772b4d3
with:
Expand Down
23 changes: 13 additions & 10 deletions .github/workflows/live-typed-packs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ concurrency:
group: live-typed-packs
cancel-in-progress: false

env:
MISE_LOCKED: "1"
UV_VERSION: "0.11.6"

jobs:
live-typed-packs:
runs-on: ubuntu-24.04
Expand All @@ -22,25 +26,24 @@ jobs:
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
- uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
python-version: "3.11"
cache: pip
cache-dependency-path: pyproject.toml
version: 2026.7.1
install: true
cache: true
- name: Install uv
run: python -m pip install "uv==$UV_VERSION"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Sync dependencies
run: uv sync --locked --extra dev

- name: Run free live typed-pack smokes
env:
DOCPULL_LIVE_TYPED_PACKS: "1"
run: |
set +e
mkdir -p live-reports
python -m pytest tests/test_typed_knowledge_packs.py::test_live_typed_pack_smokes -q \
uv run --locked python -m pytest tests/test_typed_knowledge_packs.py::test_live_typed_pack_smokes -q \
| tee live-reports/live-typed-packs.log
status=${PIPESTATUS[0]}
python - "$status" <<'PY'
Expand Down
Loading
Loading