Skip to main content

pytest-mergify

Find the pytest tests that pass and fail on the same code, and quarantine them so they stop failing your CI. Requires a Mergify account (set MERGIFY_TOKEN in CI); free for open source. Why tests go flaky in pytest, and how to fix them: mergify.com/learn/flaky-tests/pytest.

Pytest plugin for Mergify Test Engine.

More information at https://mergify.com

Features

  • Test tracing — Sends OpenTelemetry traces for every test to Mergify's API
  • Flaky test detection — Intelligently reruns tests to detect flakiness with budget constraints
  • Test quarantine — Quarantines failing tests so they don't block CI
  • Test skip — Skips the tests a team chose in Mergify not to run, with the reason
  • Test selection — Runs first the tests a merge-queue bisection step failed in the step above, and stops as soon as one fails again

Installation

Install the package alongside pytest (>= 7.0):

pip install pytest-mergify

The plugin is auto-discovered by pytest — no manual registration required.

It ships as compiled wheels, with no source distribution, for CPython 3.10 or later on:

Platform Requirement
Linux x86_64 / aarch64 (glibc) glibc 2.28 or newer — Debian 10+, Ubuntu 20.04+, RHEL 8+ and its rebuilds, Amazon Linux 2023
Linux x86_64 / aarch64 (musl) Alpine
macOS arm64 —
macOS x86_64 (Intel) Best effort: published, but not tested before a release
Windows x64 —

Elsewhere, and on glibc older than 2.28, no wheel of the release matches: pip installs an older release instead, or fails.

Configuration

Set the MERGIFY_TOKEN environment variable with your Mergify API token.

The plugin activates automatically when running in CI (detected via the CI environment variable). To enable outside CI, set MERGIFY_CI_ENABLE=true.

Environment Variables

Variable Description Default
MERGIFY_TOKEN Mergify API authentication token (required)
MERGIFY_API_URL Mergify API endpoint https://api.mergify.com
MERGIFY_CI_ENABLE Force-enable outside CI false
MERGIFY_CI_DEBUG Print spans to console instead of uploading false
MERGIFY_TRACEPARENT W3C distributed trace context —
MERGIFY_TEST_JOB_NAME Mergify test job name —
MERGIFY_FAIL_FIRST_ENABLE Set to false to never run first what a merge-queue bisection step of this job failed before true
MERGIFY_TEST_RETRY_ENABLE Set to false to have this job retry no failing test, whatever the repository sets true

The names these replace, PYTEST_MERGIFY_ENABLE and PYTEST_MERGIFY_DEBUG, are deprecated: they still work when the new name is not set, and the plugin says which one to switch to at the end of the session.

For detailed documentation, see the official guide.

Bisection steps: failures first

When Mergify's merge queue splits a failed batch, each bisection step only needs to tell whether it is red. The plugin asks Mergify whether the current run is such a step and, if so, runs first the tests this job failed in the run the step was split from (Fail First). They run before every other test; if one of them fails again, the step is red whatever the rest does, so the run stops there (exit code 1, the remaining tests not run) and the queue can split again without waiting for the suite. If they all pass, the rest of the suite runs as usual. No test is ever skipped, so a green step still comes from a full suite. A test a retry rescued, or a quarantined failure, does not stop the run.

It is on by default: there is nothing to configure, the plugin uses the token and job identity it already has, and Mergify decides. A job that must always run its suite in its usual order turns it off:

      - name: Run tests
        run: pytest
        env:
          MERGIFY_TOKEN: ${{ secrets.MERGIFY_TOKEN }}
          MERGIFY_FAIL_FIRST_ENABLE: "false"

Such a job never queries the endpoint; everything else the plugin does — test tracing, flaky detection, quarantine — is unaffected either way. Only a recognised no (false, no, off, 0) turns it off. MERGIFY_TEST_SELECTION_ENABLE, its former name, is still read while the new one is unset or empty, and the summary at the end of the run says to switch.

It only ever asks in a build of a merge-queue batch, the only builds a bisection step can be: on GitHub Actions, the event of the draft pull request the queue opened; on any other build, the queue's git note on the branch, one git ls-remote against origin that runs while the tests are being collected. Every other build asks nothing and sends nothing. Of a batch's builds, only those below a failed batch, and not retrying their own checks, ask: the others cannot be a bisection step, and send their results only when the batch holds two pull requests or more, so a bisection step may read them, or when they failed. A build where git cannot answer (no origin, credentials the test step does not hold) asks, as it would without this.

Every other situation — a run that is not a bisection step, an unreachable API, an answer from a newer Mergify this plugin does not understand — runs the full suite in its usual order. It is also enabled per organization on Mergify's side: until yours has it, every run is served the full suite, says nothing about it, and still sends its results, which show what Fail First would do there.

Under pytest-xdist this works with the load (the default with -n) and worksteal schedulers; with loadgroup, tests marked xdist_group still run before them. With loadscope and loadfile, xdist schedules whole modules or classes by size, so those tests do not run first: the run still stops once they have all run and one failed again. Workers on a remote gateway (--tx ssh=…) run to the end.

An opted-in job also tells Mergify what it concluded when its session ends — which tests failed, how many ran — in one small request sent before the test results are uploaded. That is what the next bisection step of the job is answered from, seconds after this one finished, without waiting for the results to be processed. If that request fails, the run's own result is untouched: the terminal says so, and the next step simply runs its full suite in its usual order.

Development

Prerequisites

  • Python >= 3.10
  • uv

Setup

uv sync

Running Tests

uv run poe test

uv run poe build builds the wheel into dist/; when one is there, poe test runs against it rather than the project's own install, which is how CI builds the extension once for every Python version. Every uv-driven build of the extension uses Cargo's dev profile.

Linting

uv run poe lint

License

Proprietary. Use is governed by the Mergify Terms of Service.

Metadata

Release files for pytest-mergify 2026.11.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for pytest-mergify 2026.11.8
File Actions
pytest_mergify-2026.11.8-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details for pytest_mergify-2026.11.8-cp310-abi3-win_amd64.whl
pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details for pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_x86_64.whl
pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details for pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_aarch64.whl
pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64 Details for pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_x86_64.whl
pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64 Details for pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_aarch64.whl
pytest_mergify-2026.11.8-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details for pytest_mergify-2026.11.8-cp310-abi3-macosx_11_0_arm64.whl
pytest_mergify-2026.11.8-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details for pytest_mergify-2026.11.8-cp310-abi3-macosx_10_12_x86_64.whl

Total release size: 28.6 MB

Release files / pytest_mergify-2026.11.8-cp310-abi3-win_amd64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-win_amd64.whl
Size 3.9 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
e57300bca5578e15f24ec09dbacf7f28cb8240ea38f67fbf12f10ab2a1233896
BLAKE2b-256 checksum
How to use checksums
1ff755ce8a0a0c8b28a7b1ec7e516cd122e9667c4aa73be4566ccf13277f67d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Release files / pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_x86_64.whl
Size 4.3 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
f8a001c11103f7c5c19749a57eb62f4258427dd3ab15144f666b1b1c178ae606
BLAKE2b-256 checksum
How to use checksums
00869c08e7ced82466c69f6e699c12d8ddd25aa7560deb1d699510589ca5ec1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Release files / pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-musllinux_1_2_aarch64.whl
Size 4.1 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
d73c15c96fe74404480497ab5aabb72acf7be15eadd453c7c89dc78cb002b4b5
BLAKE2b-256 checksum
How to use checksums
8c6ebdea5d7ffe16b871a3b7e5d9097f9b1a90d2003a2ff1b780796891b8147c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Release files / pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_x86_64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_x86_64.whl
Size 4.3 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
4784c041184666ef52f0133c732661f8dd61e4ea307b4809dabe31c54e3f5c9c
BLAKE2b-256 checksum
How to use checksums
d057e11527fc117ff4c0752ab16ad72164c43b163a3969414d5de363ec6d9bde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Release files / pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_aarch64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-manylinux_2_28_aarch64.whl
Size 4.1 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
d67aa49f65b9809208f7be6eb221a6ca6a084508b4dae4b5dde2970b5edd1ea4
BLAKE2b-256 checksum
How to use checksums
a8a7f17d89ae786ec915c16daa15b6d661fadf26905efeb6cb12b96eac6e1929
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Release files / pytest_mergify-2026.11.8-cp310-abi3-macosx_11_0_arm64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-macosx_11_0_arm64.whl
Size 3.9 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f437c2ec27371ffa69d86abbd1d3b2e098ad95fcba6edfe28425b4de13f6b0fb
BLAKE2b-256 checksum
How to use checksums
1a96193b584d28d197dc02971551bd9fa42e3b3868ef6ffb1ef185f43d61039e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Release files / pytest_mergify-2026.11.8-cp310-abi3-macosx_10_12_x86_64.whl

Download URL pytest_mergify-2026.11.8-cp310-abi3-macosx_10_12_x86_64.whl
Size 4.1 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b0866d2d8c93f9798cced9e3d9383d8363aca9b32cc55a54a19cf01b4de45861
BLAKE2b-256 checksum
How to use checksums
af68e4d8bdef8149c233dc4245a1159eb26ead6e4f757c111851a11762ee18ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

Security for pytest-mergify 2026.11.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 7 files in this release have been uploaded with provenance metadata.

Select from 7 files

Attestation for pytest_mergify-2026.11.8-cp310-abi3-win_amd64.whl

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2026.11.8 This release

7 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page