Rerunning the job now reads the current title from the Gitea API instead of the stale pull_request event payload.
Co-authored-by: Cursor <cursoragent@cursor.com>
Close and release the HTTP response in a finally block per SDK guidance, and add unit tests for success and read-failure cleanup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add fast unit tests for lazy-import helpers and injected-client connect paths that integration tests miss, and raise the coverage floor to 100%.
Co-authored-by: Cursor <cursoragent@cursor.com>
Clarify that unit and integration jobs skip the floor check because they only produce partial coverage.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unit and integration jobs each produce partial coverage; pytest-cov reads fail_under from pyproject.toml unless overridden with --cov-fail-under=0.
Co-authored-by: Cursor <cursoragent@cursor.com>
Configure fail_under in pyproject.toml and read it in the coverage-report workflow so the threshold stays in one place.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gitea artifact download is unreliable with v3 actions, so the report job re-runs both suites on one runner after parallel test gates pass.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace hardcoded semver examples with stable placeholders and point readers to pyproject.toml for the current version.
Co-authored-by: Cursor <cursoragent@cursor.com>
@@ -148,6 +148,15 @@ uv run pytest -v # full suite (requires Doc
Integration tests are marked with `@pytest.mark.integration` and require Docker (testcontainers). Run unit tests alone for quick local feedback.
CI runs unit and integration tests in parallel with coverage, then merges `.coverage` artifacts in a follow-up job (via [christopherhx/gitea-\*-artifact@v4](https://github.com/christopherHX/gitea-upload-artifact) for Gitea 1.26 compatibility). Combined coverage must be at least **90%**; the floor is set by [`fail_under` in `pyproject.toml`](pyproject.toml#L45-L48) and enforced after merging unit and integration coverage, not on unit-only runs.
To check coverage locally (requires Docker for the full suite):
```bash
uv run pytest --cov=python_repositories --cov-report=
uv run coverage report
```
`pre-commit` is included in the dev dependency group. `uv sync` installs the CLI, but git does not run hooks until you install them with `pre-commit install` (one time per clone). After that, commits run the checks defined in [`.pre-commit-config.yaml`](.pre-commit-config.yaml) (ruff, mypy, pyupgrade, prettier, and general file hygiene).
To run all hooks manually without committing:
@@ -173,9 +182,9 @@ Docs-, CI-, and test-only PRs do not need a prefix and will not trigger a releas
| `[minor]` or `[feat]` | minor | `1.2.3` → `1.3.0` |
| `[major]` or `[breaking]` | major | `1.2.3` → `2.0.0` |
| _(none)_ | no release | docs / CI / deps only |
Example titles:
@@ -189,4 +198,4 @@ Release notes are generated from commits since the previous tag (see [`scripts/c
### Manual release
You can still push a `v*.*.*` tag manually; `publish.yml` will build and publish. The current baseline version is **0.3.1**.
You can still push a `v*.*.*` tag manually; `publish.yml` will build and publish. The current released version is in [`pyproject.toml`](pyproject.toml) (and on the latest `v*.*.*` tag).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.