Skip to content

ci(mergify): don't check Python 3.9 tests - #299

Merged
mergify[bot] merged 1 commit into
mainfrom
devs/sileht/sqlparse-0.6/don-t-check-python-3-9-tests--2e80afa6
Aug 27, 2026
Merged

ci(mergify): don't check Python 3.9 tests#299
mergify[bot] merged 1 commit into
mainfrom
devs/sileht/sqlparse-0.6/don-t-check-python-3-9-tests--2e80afa6

Conversation

@sileht

@sileht sileht commented Aug 27, 2026

Copy link
Copy Markdown
Member

Mergify reads its configuration from the default branch, so a pull
request that removes 3.9 from the CI matrix would still be gated on a
Test with Python 3.9 check run that no longer exists, and could never
merge. Drop the requirement first, on its own, exactly like #142 did
before 3.8 was dropped in #140.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01XkWQRxh5pfi2Fbuv3Z9wen

Mergify reads its configuration from the default branch, so a pull
request that removes 3.9 from the CI matrix would still be gated on a
`Test with Python 3.9` check run that no longer exists, and could never
merge. Drop the requirement first, on its own, exactly like #142 did
before 3.8 was dropped in #140.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XkWQRxh5pfi2Fbuv3Z9wen
Change-Id: I2e80afa6a0e70ac049da3512f43185a57a744e50
Copilot AI lite review requested due to automatic review settings August 27, 2026 15:17
@sileht

sileht commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

This pull request is part of a Mergify stack:

# Pull Request Link
1 ci(mergify): don't check Python 3.9 tests #299 👈
2 chore: drop Python 3.9 support #300
3 chore(deps): bump sqlparse to 0.6.0 #301

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Mergify merge protections to stop requiring a CI check run for Python 3.9, preventing PRs from being blocked by a non-existent “Test with Python 3.9” status after the CI matrix is updated on a branch (since Mergify reads config from the default branch).

Changes:

  • Remove the check-success=Test with Python 3.9 requirement from the shared check_runs anchor used by merge protections and PR rules.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@mergify
mergify Bot requested a review from a team August 27, 2026 15:19
@mergify

mergify Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Merge Protections

🟢 All 7 merge protections satisfied — ready to merge.

Show 7 satisfied protections

🟢 📃 Configuration Change Requirements

Mergify configuration change

  • check-success = Configuration changed

🟢 🤖 Continuous Integration

  • all of:
    • check-success=Test with Python 3.10
    • check-success=Test with Python 3.11
    • check-success=Test with Python 3.12
    • check-success=Test with Python 3.9
    • check-success=semgrep

🟢 👀 Review Requirements

  • any of:
    • #approved-reviews-by>=1
    • author = dependabot[bot]

🟢 Enforce conventional commit

Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/

  • title ~= ^(fix|feat|internal|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?!?:

🟢 🔎 Reviews

  • #changes-requested-reviews-by = 0
  • #review-requested = 0
  • #review-threads-unresolved = 0

🟢 📕 PR description

  • body ~= (?ms:.{48,})

🟢 🚦 Auto-queue

When all merge protections are satisfied, this pull request will be queued automatically.

@mergify
mergify Bot deployed to Mergify Merge Protections August 27, 2026 15:19 Active
@sileht
sileht marked this pull request as ready for review August 27, 2026 15:19
@mergify

mergify Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • Entered queue2026-08-27 15:23 UTC · Rule: default · triggered by merge protections
  • Checks skipped · PR is already up-to-date
  • Merged2026-08-27 15:24 UTC · at 27948d3709ed8eb38eec3b8ca7cf2388431755f6 · squash

This pull request spent 49 seconds in the queue, including 10 seconds running CI.

Required conditions to merge

@mergify
mergify Bot merged commit fd8289d into main Aug 27, 2026
9 checks passed
@mergify
mergify Bot deleted the devs/sileht/sqlparse-0.6/don-t-check-python-3-9-tests--2e80afa6 branch August 27, 2026 15:24
@mergify mergify Bot added queued and removed queued labels Aug 27, 2026
@mergify mergify Bot mentioned this pull request Aug 28, 2026
44 tasks
mergify Bot pushed a commit that referenced this pull request Aug 28, 2026
Python 3.9 has been end-of-life since October 2025 and no known consumer
of sql-compare is still on it: the monorepo `engine` and `shadow-office`
both declare `requires-python = "~=3.14.0"`. Dropping it unblocks
dependencies that already require 3.10, starting with sqlparse 0.6.0.

This also removes the CI workaround that existed only for 3.9. Poetry
2.4.1 needs Python >=3.10, so the job installed it under a pinned 3.12
and pointed it at the matrix interpreter with `poetry env use`. With a
3.10 floor a single `setup-python` is enough. Without `poetry env use`,
though, poetry picks its interpreter off PATH, and every matrix version
satisfies `python = "^3.10"` - so a wrong pick would test one version
three times and stay green. The added assertion makes that fail loudly
instead.

`[tool.ruff] target-version` is dropped so ruff infers it from
`requires-python`. It said "py312" while the floor was 3.9 and would
have said it while the floor is 3.10; with `preview = true` and `UP`
selected, that makes ruff raise UP040/UP046 with fixes that emit PEP 695
syntax (`type X = int`, `class Box[T]`), which is a SyntaxError on the
3.10 and 3.11 legs. Inferring keeps the two in sync permanently.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XkWQRxh5pfi2Fbuv3Z9wen

Depends-On: #299
mergify Bot pushed a commit that referenced this pull request Sep 3, 2026
The two matrix legs added in the previous commit are advisory on their
own. `.mergify.yml`'s `&CheckRuns` anchor is this repository's only merge
gate: `branches/main/protection` returns no `required_status_checks`, and
none of the eleven active rulesets carries one. So a red 3.13 or 3.14 leg
would land silently.

The ordering mirrors #299 -> #300 but not the reasoning, which is worth
stating rather than assuming symmetric. Removing a check needed its own
pull request first because Mergify reads its configuration from the
default branch: a pull request deleting the job would still have been
gated on a check that no longer reported, and could never merge. Adding
one has no such deadlock. Both pull requests here are evaluated against
main's configuration, which does not name the new checks, so a single
atomic commit would have merged just as well.

What the split actually buys is revertability. If a new leg turns out to
be red on main, reverting this commit alone unblocks the repository while
keeping the coverage the previous commit added; an atomic change would
have to give up both.

Two consequences worth knowing, neither of which ordering can avoid.

Because main's configuration does not require the new checks until this
lands, nothing forces either pull request of this stack to be green on
3.13 or 3.14. Both run the full five-leg matrix on their own head, so the
legs are observable, but they have to be looked at before this one is
merged rather than assumed.

Every pull request already open when this lands keeps the check-run set
from its last CI run, and no `pull_request` event fires when the base
moves. `check-success=Test with Python 3.13` can therefore never go true
on it, and `auto_merge_conditions: true` folds the success conditions
into the queue conditions, so it cannot enter the queue to be rebased out
either. Each one needs a push, a rebase or a close/reopen to pick up the
new legs.

Longer term, this list is a hand-maintained mirror of the job names and
will want the same ceremony at 3.15. The monorepo and mergify-cli both
replaced it with one aggregate job (`all-greens` / `ci-gate`) behind a
single `check-success`, which is worth adopting here on its own. Note
that `check-success~=^Test with Python ` is not a shortcut for it:
check-success is a list attribute and `~=` matches any element, so one
green leg would satisfy it while another fails.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKmEnjRuAM4NcTYxRXG3BA

Depends-On: #310
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants