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
30 changes: 30 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: CI

on:
push:
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
with:
python-version: "3.12"
- name: Install project and test tools
run: python -m pip install --disable-pip-version-check -e '.[dev]'
- name: Lint
run: python -m ruff check src tests scripts
- name: Tests
run: PYTHONPATH=src python -m pytest
- name: Compile Python sources
run: python -m compileall -q src tests scripts
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ python3.12 -m venv .venv

Tests cover company/product normalization, blocking, exact matches, identifier/brand conflicts, rejection memory, idempotent/conflicting mappings, survivorship, transitive false-merge protection, metric math and the deterministic 10,000-record benchmark.

CI additionally runs `ruff` and `compileall`; it uses only synthetic records and does not connect to 1C or a master-data system.

## Limitations

- The benchmark is synthetic/easy and its quality metrics are not a production claim.
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ requires-python=">=3.11"
description="Explainable entity-resolution engine for companies/products with normalization, blocking, conflict-aware scoring, remembered review decisions, canonical mappings and provenance."

[project.optional-dependencies]
dev=["pytest>=8,<9"]
dev=["pytest>=8,<9", "ruff>=0.12,<1"]

[tool.pytest.ini_options]
testpaths=["tests"]
Expand Down