Skip to content

chore: add GitHub Action to create Jira issues on new GitHub issues#511

Merged
jirhiker merged 1 commit into
stagingfrom
BDMS-557-Implement-a-GitHub-Action-that-automatically-creates-a-corresponding-Jira-issue-whenever-a-new-GitHub-Issue-is-opened-in-selected-repositories
Feb 13, 2026
Merged

chore: add GitHub Action to create Jira issues on new GitHub issues#511
jirhiker merged 1 commit into
stagingfrom
BDMS-557-Implement-a-GitHub-Action-that-automatically-creates-a-corresponding-Jira-issue-whenever-a-new-GitHub-Issue-is-opened-in-selected-repositories

Conversation

@jirhiker

Copy link
Copy Markdown
Member

Why

This PR addresses the following problem / context:

  • Use bullet points here

How

Implementation summary - the following was changed / added / removed:

  • Use bullet points here

Notes

Any special considerations, workarounds, or follow-up work to note?

  • Use bullet points here

Copilot AI review requested due to automatic review settings February 13, 2026 22:29
@jirhiker jirhiker merged commit e3456f5 into staging Feb 13, 2026
10 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 35a6e22990

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

"project": {"key": os.environ["JIRA_PROJECT_KEY"]},
"issuetype": {"name": os.environ["JIRA_ISSUE_TYPE"]},
"summary": issue_title,
"description": description,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Send Jira description in ADF for REST API v3

This payload posts to /rest/api/3/issue but sets fields.description to a plain string, which causes issue creation to fail on Jira Cloud instances that require Atlassian Document Format for v3 rich-text fields (the API returns 400 for invalid description shape). Build description as an ADF object (or use v2 if you want plain text) so new GitHub issues consistently create Jira tickets.

Useful? React with 👍 / 👎.

exit 1
fi
echo "jira_key=$JIRA_KEY" >> "$GITHUB_OUTPUT"
echo "jira_browse_url=${JIRA_BASE_URL}/browse/${JIRA_KEY}" >> "$GITHUB_OUTPUT"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Derive browse URL from site base, not API base

The step explicitly supports JIRA_BASE_URL values that already end with /rest/api/3, but jira_browse_url is built directly from JIRA_BASE_URL; in that valid configuration the posted link becomes .../rest/api/3/browse/<KEY>, which does not resolve to the Jira issue page. Normalize to the site root before composing the browse link.

Useful? React with 👍 / 👎.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds a GitHub Actions workflow that automatically creates a Jira issue when a new GitHub issue is opened. The workflow validates Jira configuration, builds a payload from the GitHub issue metadata (including title, body, labels, and optional component/priority mappings), creates the Jira issue via REST API, and comments the Jira ticket link back on the GitHub issue.

Changes:

  • Added a new GitHub Actions workflow that triggers on GitHub issue creation
  • Implemented Jira API integration with configuration validation and error handling
  • Added label-to-component and label-to-priority mapping support
  • Included support for custom field overrides via label mappings

echo "jira_browse_url=${JIRA_BASE_URL}/browse/${JIRA_KEY}" >> "$GITHUB_OUTPUT"

- name: Comment Jira link back on the GitHub issue
uses: actions/github-script@v7

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

The workflow uses actions/github-script@v7, but the existing dependabot_automerge.yml workflow uses actions/github-script@v8. For consistency and to use the latest version, consider updating to v8.

Suggested change
uses: actions/github-script@v7
uses: actions/github-script@v8

Copilot uses AI. Check for mistakes.

jobs:
create-jira-ticket:
runs-on: ubuntu-latest

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

The job does not specify a timeout-minutes value. The existing jira_codex_pr.yml workflow sets timeout-minutes: 60. Consider adding a timeout to prevent the job from running indefinitely if there are issues with the Jira API or network connectivity. A reasonable timeout for this workflow would be 5-10 minutes.

Suggested change
runs-on: ubuntu-latest
runs-on: ubuntu-latest
timeout-minutes: 10

Copilot uses AI. Check for mistakes.
"$API_BASE/issue")

if [ "$HTTP_CODE" != "201" ]; then
echo "Jira issue creation failed. HTTP $HTTP_CODE"

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

When the Jira API call fails, the error message shows the HTTP code and response body, but it doesn't include the request URL or payload that was sent. This makes debugging more difficult. Consider logging the API endpoint URL (without credentials) to help troubleshoot configuration issues.

Suggested change
echo "Jira issue creation failed. HTTP $HTTP_CODE"
echo "Jira issue creation failed. HTTP $HTTP_CODE"
echo "Request URL: $API_BASE/issue"
echo "Request payload:"
cat jira-payload.json
echo "Response body:"

Copilot uses AI. Check for mistakes.
Comment on lines +121 to +125
JIRA_BASE_URL="${JIRA_BASE_URL%/}"
case "$JIRA_BASE_URL" in
*/rest/api/3) API_BASE="$JIRA_BASE_URL" ;;
*) API_BASE="$JIRA_BASE_URL/rest/api/3" ;;
esac

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

The JIRA_BASE_URL is not validated to ensure it starts with http:// or https:// before being used. The existing jira_codex_pr.yml workflow includes validation to ensure the URL has a proper scheme. Consider adding the same validation here to prevent configuration errors.

Copilot uses AI. Check for mistakes.
exit 1
fi

JIRA_KEY="$(jq -r '.key // empty' jira-response.json)"

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

The workflow uses jq to parse the Jira API response (line 143) but doesn't ensure jq is installed. The existing jira_codex_pr.yml workflow includes a step to ensure jq is available. Consider adding the same check here or verifying that jq is pre-installed on ubuntu-latest runners.

Copilot uses AI. Check for mistakes.
Comment on lines +95 to +99
fields = {
"project": {"key": os.environ["JIRA_PROJECT_KEY"]},
"issuetype": {"name": os.environ["JIRA_ISSUE_TYPE"]},
"summary": issue_title,
"description": description,

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

The Jira Cloud REST API v3 expects the 'description' field to be in Atlassian Document Format (ADF), not plain text. The current implementation sends a plain text string, which will likely cause the API request to fail with a 400 error. The description should be formatted as ADF JSON. For example: {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": "your text here"}]}]}.

Suggested change
fields = {
"project": {"key": os.environ["JIRA_PROJECT_KEY"]},
"issuetype": {"name": os.environ["JIRA_ISSUE_TYPE"]},
"summary": issue_title,
"description": description,
adf_description = {
"type": "doc",
"version": 1,
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": description,
}
],
}
],
}
fields = {
"project": {"key": os.environ["JIRA_PROJECT_KEY"]},
"issuetype": {"name": os.environ["JIRA_ISSUE_TYPE"]},
"summary": issue_title,
"description": adf_description,

Copilot uses AI. Check for mistakes.
exit 1
fi
echo "jira_key=$JIRA_KEY" >> "$GITHUB_OUTPUT"
echo "jira_browse_url=${JIRA_BASE_URL}/browse/${JIRA_KEY}" >> "$GITHUB_OUTPUT"

Copilot AI Feb 13, 2026

Copy link

Choose a reason for hiding this comment

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

The jira_browse_url uses JIRA_BASE_URL which may include '/rest/api/3' suffix based on the normalization logic in lines 121-125. This would result in an incorrect browse URL like 'https://domain.atlassian.net/rest/api/3/browse/KEY-123' instead of 'https://domain.atlassian.net/browse/KEY-123'. The browse URL should be constructed from the original base URL before the '/rest/api/3' suffix is added.

Copilot uses AI. Check for mistakes.
github-actions Bot pushed a commit that referenced this pull request Jun 22, 2026
Bumps the uv-non-major group with 26 updates:

| Package | From | To |
| --- | --- | --- |
| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.0` |
| [fastapi](https://github.com/fastapi/fastapi) | `0.136.3` | `0.138.0`
|
| [fastapi-pagination](https://github.com/uriyyo/fastapi-pagination) |
`0.15.14` | `0.15.15` |
| [google-auth](https://github.com/googleapis/google-cloud-python) |
`2.53.0` | `2.55.0` |
|
[google-cloud-storage](https://github.com/googleapis/google-cloud-python)
| `3.11.0` | `3.12.0` |
| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` |
`3.5.2` |
| [numpy](https://github.com/numpy/numpy) | `2.4.6` | `2.5.0` |
| [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers) |
`9.0.32` | `9.0.33` |
| [python-multipart](https://github.com/Kludex/python-multipart) |
`0.0.31` | `0.0.32` |
| [scramp](https://github.com/tlocke/scramp) | `1.4.8` | `1.4.9` |
| [sentry-sdk[fastapi]](https://github.com/getsentry/sentry-python) |
`2.62.0` | `2.63.0` |
| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.50` |
`2.0.51` |
| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |
| [babel](https://github.com/python-babel/babel) | `2.17.0` | `2.18.0` |
| [dateparser](https://github.com/scrapinghub/dateparser) | `1.3.0` |
`1.4.1` |
| [filelock](https://github.com/tox-dev/py-filelock) | `3.18.0` |
`3.29.4` |
| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) |
`4.0.0` | `4.2.0` |
|
[opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python)
| `1.39.1` | `1.42.1` |
|
[opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python)
| `1.39.1` | `1.42.1` |
|
[opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python)
| `0.60b1` | `0.63b1` |
| [pygeofilter](https://github.com/geopython/pygeofilter) | `0.3.3` |
`0.4.0` |
| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |
| [regex](https://github.com/mrabarnett/mrab-regex) | `2026.2.19` |
`2026.5.9` |
| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.62.0` |
`2.63.0` |
| [tzlocal](https://github.com/regebro/tzlocal) | `5.3.1` | `5.4.3` |
| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |

Updates `anyio` from 4.13.0 to 4.14.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/agronholm/anyio/releases">anyio's
releases</a>.</em></p>
<blockquote>
<h2>4.14.0</h2>
<ul>
<li>
<p>Added support for Python 3.15</p>
</li>
<li>
<p>Added an asynchronous implementation of the <code>itertools</code>
module (<a
href="https://redirect.github.com/agronholm/anyio/issues/998">#998</a>;
PR by <a href="https://github.com/11kkw"><code>@​11kkw</code></a>)</p>
</li>
<li>
<p>Added the <code>local_port</code> parameter to
<code>connect_tcp()</code> to allow binding to a specific local port
before connecting (<a
href="https://redirect.github.com/agronholm/anyio/issues/1067">#1067</a>;
PR by <a
href="https://github.com/nullwiz"><code>@​nullwiz</code></a>)</p>
</li>
<li>
<p>Added support for custom capacity limiters in async path and file I/O
functions and classes</p>
</li>
<li>
<p>Added the <code>create_task()</code> task group method for easier
asyncio migration (returns a <code>TaskHandle</code>) (<a
href="https://redirect.github.com/agronholm/anyio/pull/1098">#1098</a>)</p>
</li>
<li>
<p>Changed <code>TaskGroup.start_soon()</code> to return a
<code>TaskHandle</code></p>
</li>
<li>
<p>Added an option for <code>TaskGroup.start()</code> to return a
<code>TaskHandle</code> (which then contains the start value in the
<code>start_value</code> property)</p>
</li>
<li>
<p>Added the <code>cancel()</code> convenience method to
<code>TaskGroup</code> as a shortcut for cancelling the task group's
cancel scope</p>
</li>
<li>
<p>Improved the error message when a known backend is not installed to
suggest the install command (<a
href="https://redirect.github.com/agronholm/anyio/pull/1115">#1115</a>;
PR by <a
href="https://github.com/EmmanuelNiyonshuti"><code>@​EmmanuelNiyonshuti</code></a>)</p>
</li>
<li>
<p>Improved <code>anyio.Path</code> to preserve subclass types by
returning <code>Self</code> in methods that return path objects (<a
href="https://redirect.github.com/agronholm/anyio/issues/1130">#1130</a>;
PR by <a
href="https://github.com/EmmanuelNiyonshuti"><code>@​EmmanuelNiyonshuti</code></a>)</p>
</li>
<li>
<p>Changed the parameter type annotation in
<code>anyio.Path.write_bytes()</code> to accept any
<code>ReadableBuffer</code>, thus allowing it to accept
<code>bytearray</code> and <code>memoryview</code> to match
<code>pathlib.Path.write_bytes()</code> (<a
href="https://redirect.github.com/agronholm/anyio/issues/1135">#1135</a>;
PR by <a href="https://github.com/SAY-5"><code>@​SAY-5</code></a>)</p>
</li>
<li>
<p>Changed several type annotations to only accept callables returning
coroutine-like objects instead of arbitrary awaitables:</p>
<ul>
<li><code>TaskGroup.start_soon()</code></li>
<li><code>TaskGroup.start()</code></li>
<li><code>anyio.from_thread.run()</code></li>
</ul>
<p>This reverts an earlier change from v3.7.0 which was made in error.
(<a
href="https://redirect.github.com/agronholm/anyio/pull/1153">#1153</a>)</p>
</li>
<li>
<p>Changed <code>anyio.run</code> to support callables returning
arbitrary awaitables at runtime on all backends. Previously, this only
worked on asyncio (<a
href="https://redirect.github.com/agronholm/anyio/pull/1171">#1171</a>;
PR by <a
href="https://github.com/gschaffner"><code>@​gschaffner</code></a>)</p>
</li>
<li>
<p>Changed several classes (and their subclasses) to have
<code>__slots__</code> (with <code>__weakref__</code>):</p>
<ul>
<li><code>anyio.CancelScope</code></li>
<li><code>anyio.CapacityLimiter</code></li>
<li><code>anyio.Condition</code></li>
<li><code>anyio.Event</code></li>
<li><code>anyio.Lock</code></li>
<li><code>anyio.ResourceGuard</code></li>
<li><code>anyio.Semaphore</code></li>
</ul>
</li>
<li>
<p>Fixed cancellation exception escaping a cancel scope when triggered
via <code>check_cancelled()</code> in a worker thread (<a
href="https://redirect.github.com/agronholm/anyio/issues/1113">#1113</a>)</p>
</li>
<li>
<p>Fixed <code>TaskGroup</code> raising <code>AttributeError</code>
instead of a clear error when entered more than once (<a
href="https://redirect.github.com/agronholm/anyio/issues/1109">#1109</a>;
PR by <a href="https://github.com/bahtya"><code>@​bahtya</code></a>)</p>
</li>
<li>
<p>Fixed lost type information when passing arguments to
<code>lru_cache</code> (<a
href="https://redirect.github.com/agronholm/anyio/pull/1104">#1104</a>;
PR by <a
href="https://github.com/Graeme22"><code>@​Graeme22</code></a>)</p>
</li>
<li>
<p>Fixed test resumption after <code>KeyboardInterrupt</code> in async
generator fixtures on the asyncio backend (<a
href="https://redirect.github.com/agronholm/anyio/issues/1060">#1060</a>;
PR by <a
href="https://github.com/EmmanuelNiyonshuti"><code>@​EmmanuelNiyonshuti</code></a>)</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/agronholm/anyio/commit/ffe91331adb912c5d150f5d373f7cd28a0e96a62"><code>ffe9133</code></a>
Bumped up the version</li>
<li><a
href="https://github.com/agronholm/anyio/commit/f8b9f011e548c2c1c3e9abb0287bb1048ab3dca8"><code>f8b9f01</code></a>
Fixed asyncio lock waiter deadlocks after cancellation (<a
href="https://redirect.github.com/agronholm/anyio/issues/1145">#1145</a>)</li>
<li><a
href="https://github.com/agronholm/anyio/commit/d517ee1d41080073cc244d8adebf822a08b762de"><code>d517ee1</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/agronholm/anyio/issues/1176">#1176</a>)</li>
<li><a
href="https://github.com/agronholm/anyio/commit/550b68e1acaf82b1503b0e99fbc7f964cd07fe49"><code>550b68e</code></a>
Make <code>anyio.run</code> support <code>Awaitable</code> at runtime on
all backends (<a
href="https://redirect.github.com/agronholm/anyio/issues/1171">#1171</a>)</li>
<li><a
href="https://github.com/agronholm/anyio/commit/29a5e04e0f171af9db3a9d0556ed47f91d88d183"><code>29a5e04</code></a>
Fixed FastAPI test run</li>
<li><a
href="https://github.com/agronholm/anyio/commit/4d752ac37e693840036367d58ee6caf19d78e9ba"><code>4d752ac</code></a>
Updated downstream test setups for FastAPI and Anthropic MCP</li>
<li><a
href="https://github.com/agronholm/anyio/commit/ebdc9508a3860e23be805985e1b5a67f60b581eb"><code>ebdc950</code></a>
Added task handle support to start() and start_soon() (<a
href="https://redirect.github.com/agronholm/anyio/issues/1153">#1153</a>)</li>
<li><a
href="https://github.com/agronholm/anyio/commit/f32bfb89a7fb71fc24a1fc575f402b6a9f13cda0"><code>f32bfb8</code></a>
Fixed test suite compatibility issues with Pytest 9.1.0</li>
<li><a
href="https://github.com/agronholm/anyio/commit/85f7e8eada1ed4f077e4760f0c3d20d67452dcb8"><code>85f7e8e</code></a>
Added <code>__slots__</code> to several classes</li>
<li><a
href="https://github.com/agronholm/anyio/commit/b7ea84c275fde6420ea242844bc7fb0fee6132f7"><code>b7ea84c</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/agronholm/anyio/issues/1165">#1165</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/agronholm/anyio/compare/4.13.0...4.14.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `fastapi` from 0.136.3 to 0.138.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastapi/fastapi/releases">fastapi's
releases</a>.</em></p>
<blockquote>
<h2>0.138.0</h2>
<h3>Features</h3>
<ul>
<li>✨ Add support for <code>app.frontend(&quot;/&quot;,
directory=&quot;dist&quot;)</code> and
<code>router.frontend(&quot;/&quot;, directory=&quot;dist&quot;)</code>.
PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15800">#15800</a>
by <a href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.
<ul>
<li>Read the docs: <a
href="https://fastapi.tiangolo.com/tutorial/frontend/">Frontend</a>.</li>
</ul>
</li>
</ul>
<h3>Docs</h3>
<ul>
<li>📝 Fix typo in release notes. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15807">#15807</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>📝 Add <code>app.frontend()</code> instructions to Agent Library
Skill. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15805">#15805</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>📝 Update release notes link. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15802">#15802</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>✏️ Update white space characters in bigger apps. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15801">#15801</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>✏️ Fix grammar, typos, and broken links in docs. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15694">#15694</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Enable Hindi docs translations. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15554">#15554</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>🐛 Fix failing test, update format for raised errors. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15804">#15804</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>👷 Fix test-alls-green. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15803">#15803</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔧 Enable checking <code>release-notes.md</code> for typos. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15796">#15796</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
<li>📝 Tweak wording about deploying to FastAPI Cloud. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15793">#15793</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔨 Use <code>gpt-5.5</code> model in <code>translate.py</code>,
specify <code>-chat</code> to avoid warnings. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15792">#15792</a>
by <a
href="https://github.com/YuriiMotov"><code>@​YuriiMotov</code></a>.</li>
</ul>
<h2>0.137.2</h2>
<h3>Features</h3>
<ul>
<li>✨ Add <code>iter_route_contexts()</code> for advanced use cases that
used to use <code>router.routes</code> (e.g. Jupyverse). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15785">#15785</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Fix broken Markdown in Korean custom response docs. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15774">#15774</a>
by <a href="https://github.com/kooqooo"><code>@​kooqooo</code></a>.</li>
<li>🌐 Update translations for fr (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15761">#15761</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for zh-hant (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15760">#15760</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for de (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15759">#15759</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for ko (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15757">#15757</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for uk (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15756">#15756</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for zh (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15755">#15755</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for tr (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15754">#15754</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for pt (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15753">#15753</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for es (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15752">#15752</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for ja (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15751">#15751</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🌐 Update translations for ru (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15758">#15758</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>🔧 Update sponsors: add BairesDev. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15787">#15787</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
<li>🔨 Update sponsors script to simplify previews. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/15786">#15786</a>
by <a
href="https://github.com/tiangolo"><code>@​tiangolo</code></a>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastapi/fastapi/commit/4b83b0d409009c8de9df4070fe163838b1a700c7"><code>4b83b0d</code></a>
🔖 Release version 0.138.0 (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15808">#15808</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/041cb0cdfa2d0f705d14ed07c2c2e0f92ef5f32c"><code>041cb0c</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/10393846ede7a2947cec594d15a43f813001cab4"><code>1039384</code></a>
📝 Fix typo in release notes (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15807">#15807</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/0303491b69ff84a4632c0314e6db4df74f2f93f9"><code>0303491</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/190f6e2033c8b886b25027be284d8c8c1893f28c"><code>190f6e2</code></a>
📝 Add Frontend instructions to Agent Library Skill (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15805">#15805</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/17945e5ab7f25234340c152a40d232a98857e079"><code>17945e5</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/2260afaf433103c8104b34d256cf0b96b058823b"><code>2260afa</code></a>
🐛 Fix failing test, update format for raised errors (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15804">#15804</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/0cd5001d0ef80a07e2d775c5c75522391a3e06d7"><code>0cd5001</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/7cb1ab6264bc03319832f553730b511192a0c0d3"><code>7cb1ab6</code></a>
👷 Fix test-alls-green (<a
href="https://redirect.github.com/fastapi/fastapi/issues/15803">#15803</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/9c7eceb00ff6e1d37980954418f7c9dab30a4cd5"><code>9c7eceb</code></a>
📝 Update release notes</li>
<li>Additional commits viewable in <a
href="https://github.com/fastapi/fastapi/compare/0.136.3...0.138.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `fastapi-pagination` from 0.15.14 to 0.15.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uriyyo/fastapi-pagination/releases">fastapi-pagination's
releases</a>.</em></p>
<blockquote>
<h2>0.15.15</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix compatibility issue with fastapi <code>0.137.0</code> <a
href="https://redirect.github.com/uriyyo/fastapi-pagination/pull/1930">#1930</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uriyyo/fastapi-pagination/compare/0.15.14...0.15.15">https://github.com/uriyyo/fastapi-pagination/compare/0.15.14...0.15.15</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/4b0654fc99e5d14da8db26366b434ed8dd8011bc"><code>4b0654f</code></a>
Bump to next version [no ci]</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/3236a449e468a610c80d89bd09632258113d6974"><code>3236a44</code></a>
Fix compatibility issue with fastapi 0.137.0 (<a
href="https://redirect.github.com/uriyyo/fastapi-pagination/issues/1930">#1930</a>)</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/1f6709233fe3aaac66248c28cb500e2ff54a8dd1"><code>1f67092</code></a>
Merge pull request <a
href="https://redirect.github.com/uriyyo/fastapi-pagination/issues/1921">#1921</a>
from uriyyo/dependabot/uv/peewee-4.0.7</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/86752ddffcaea2a90a5f7a65175044f0926d0f62"><code>86752dd</code></a>
Bump peewee from 4.0.6 to 4.0.7</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/cba49a03801f3d47cb47bfdc57355195173c35fc"><code>cba49a0</code></a>
Merge pull request <a
href="https://redirect.github.com/uriyyo/fastapi-pagination/issues/1920">#1920</a>
from uriyyo/dependabot/uv/ruff-0.15.17</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/5071a70a0016efc6c8a7064ca9a336dc16861e41"><code>5071a70</code></a>
Bump ruff from 0.15.16 to 0.15.17</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/c4671adc5c6a421efe030bf89748156c5867b125"><code>c4671ad</code></a>
Merge pull request <a
href="https://redirect.github.com/uriyyo/fastapi-pagination/issues/1919">#1919</a>
from uriyyo/dependabot/uv/ty-0.0.48</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/a6534ec1d360010e90ff2f5befa96e07db07a430"><code>a6534ec</code></a>
Bump ty from 0.0.46 to 0.0.48</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/e21fd47f6b359b0a230387335331cac6d2f26b69"><code>e21fd47</code></a>
Merge pull request <a
href="https://redirect.github.com/uriyyo/fastapi-pagination/issues/1918">#1918</a>
from uriyyo/dependabot/uv/faker-40.23.0</li>
<li><a
href="https://github.com/uriyyo/fastapi-pagination/commit/8b12f5abaa0f9d769240a02d5eef0d5051bc633a"><code>8b12f5a</code></a>
Bump faker from 40.22.0 to 40.23.0</li>
<li>Additional commits viewable in <a
href="https://github.com/uriyyo/fastapi-pagination/compare/0.15.14...0.15.15">compare
view</a></li>
</ul>
</details>
<br />

Updates `google-auth` from 2.53.0 to 2.55.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/google-cloud-python/releases">google-auth's
releases</a>.</em></p>
<blockquote>
<h2>google-auth: v2.55.0</h2>
<h2><a
href="https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.54.0...google-auth-v2.55.0">v2.55.0</a>
(2026-06-15)</h2>
<h3>Features</h3>
<ul>
<li>make RAB feature production ready (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17390">#17390</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/af193931">af193931</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>run async background boundary refresh on detached session (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17441">#17441</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/56cbea85">56cbea85</a>)</li>
</ul>
<h2>google-auth: v2.54.0</h2>
<h2><a
href="https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.53.0...google-auth-v2.54.0">v2.54.0</a>
(2026-06-11)</h2>
<h3>Features</h3>
<ul>
<li>implement regional access boundary support for standalone JWT and
async service accounts (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17025">#17025</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/35af6168">35af6168</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p>configure mTLS for impersonated credentials (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17404">#17404</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/57269d56">57269d56</a>)</p>
</li>
<li>
<p>fail-fast on missing ECP config file to avoid 30s hang (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17377">#17377</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/e0961270">e0961270</a>)</p>
</li>
<li>
<p>Rename the &amp;<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/39">#39</a>;seed&amp;<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/39">#39</a>;
argument for setting an initial regional access boundary for clarity (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17186">#17186</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/e5c8cf92">e5c8cf92</a>)</p>
</li>
<li>
<p>update incorrect urls in setup.py to point at monorepo vs splitrepo
(<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17237">#17237</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/eaed04ba">eaed04ba</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/08a8f9013af8ec0d5e82b7e5d428caded2f41156"><code>08a8f90</code></a>
chore: librarian release pull request: 20260615T173024Z (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17468">#17468</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/305f5bdd7e083fef33cb59dca581fbf3b7908a03"><code>305f5bd</code></a>
test(auth): assert quota project header injection in google-auth tests
(<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17448">#17448</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/af193931e4e38c4b59751edb8e915ae3388b8524"><code>af19393</code></a>
feat(auth): make RAB feature production ready (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17390">#17390</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/00ec9bfd967546809e84114be1c63f9482ad90b2"><code>00ec9bf</code></a>
chore: release bigframes v2.43.0 (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17460">#17460</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/f4945bd33f385c8ad7fcf71c03e677c28bba2378"><code>f4945bd</code></a>
tests: fix compatibility with pytest 9.1.0 (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17465">#17465</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/56cbea8509c66889485b43f2d98d60210eae81bc"><code>56cbea8</code></a>
fix(rab): run async background boundary refresh on detached session (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17441">#17441</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/b50cf1aed2d5376a26c8d8e375e414e577fa27f3"><code>b50cf1a</code></a>
chore(google-auth): drop python 3.7 EOL false positives and refactor
metrics ...</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/145034a345eb3e14ea3f23dfcafa3d2409a09067"><code>145034a</code></a>
fix: preserve aliases on cast columns and fix star selection in sqlglot
(<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/173">#173</a>...</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/dd59d3623c0af8c3ae683b0ea808b1992a917071"><code>dd59d36</code></a>
chore: address pandas 3 failure and remove inherently flaky system test
(<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17452">#17452</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/4d3447d567f7e0f6d5793f1dc55da87b437de231"><code>4d3447d</code></a>
chore: skip sqlalchemy-bigquery test to unblock CI (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17288">#17288</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.53.0...google-auth-v2.55.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google-cloud-storage` from 3.11.0 to 3.12.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/google-cloud-python/releases">google-cloud-storage's
releases</a>.</em></p>
<blockquote>
<h2>google-cloud-storage: v3.12.0</h2>
<h2><a
href="https://github.com/googleapis/google-cloud-python/compare/google-cloud-storage-v3.11.0...google-cloud-storage-v3.12.0">v3.12.0</a>
(2026-06-11)</h2>
<h3>Features</h3>
<ul>
<li>
<p>full object checksum: implement rolling checksum and verification in
reads resumption strategy (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17262">#17262</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/2361ba6e">2361ba6e</a>)</p>
</li>
<li>
<p>Enable full object checksum PR 1/3 : parse finalize_time and server
crc32c in async object stream (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17261">#17261</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/72c7a272">72c7a272</a>)</p>
</li>
<li>
<p>full object checksum: integrate full-object checksum in
AsyncMultiRangeDownloader (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17263">#17263</a>)
(<a
href="https://github.com/googleapis/google-cloud-python/commit/b6a85e49">b6a85e49</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md">google-cloud-storage's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v3.11.0...google-cloud-documentai-v3.12.0">3.12.0</a>
(2026-03-23)</h2>
<h3>Features</h3>
<ul>
<li>Add a field for upgrading previous processor version when fine
tuning (<a
href="https://github.com/googleapis/google-cloud-python/commit/ee7dd7dc168ecf943440cef38efff348e8eff095">ee7dd7dc168ecf943440cef38efff348e8eff095</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/654701257c6ed4c329729d32965faba4a79627e1"><code>6547012</code></a>
chore: librarian release pull request: 20260611T192009Z (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17432">#17432</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/2e75c78cdd09d4472ed412a2e925196effaea9fd"><code>2e75c78</code></a>
feat: update API sources and regenerate (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17431">#17431</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/f59c2b2aa61316cf04b650933036ef50f6a1f08c"><code>f59c2b2</code></a>
fix: bump pyarrow from 15.0.2 to 23.0.1 in /packages/bigframes (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17386">#17386</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/dd823f5edeef2550c52baf7e66ef306bd0a93707"><code>dd823f5</code></a>
chore(bigtable): add bigtable samples (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17240">#17240</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/7d230af033a12f527b84baa3647e113c6e8c3d01"><code>7d230af</code></a>
chore(deps): bump pyspark from 3.5.1 to 3.5.2 in /packages/bigframes (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17400">#17400</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/57269d567227655e16a2c518e29129c31ebe65be"><code>57269d5</code></a>
fix(auth): configure mTLS for impersonated credentials (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17404">#17404</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/59fe7cf83c123102baf5439af4acd6218d7ce01b"><code>59fe7cf</code></a>
feat: update API sources and regenerate (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17413">#17413</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/ca02afce77af166d9e69cd65caf94fe5db505b30"><code>ca02afc</code></a>
feat(google/developers/knowledge/v1): add google-developer-knowledge (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17417">#17417</a>)</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/3a90cc8e867c8a2d2f8060858fde9eda94f80a54"><code>3a90cc8</code></a>
fix(bigframes): improve error message when unescaped <code>{</code> are
found in SQL cel...</li>
<li><a
href="https://github.com/googleapis/google-cloud-python/commit/384724c2d4c955e15274e9824bcdb93c685b79f6"><code>384724c</code></a>
feat: support row_range in sample_row_keys method (<a
href="https://redirect.github.com/googleapis/google-cloud-python/issues/17330">#17330</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/google-cloud-python/compare/google-cloud-storage-v3.11.0...google-cloud-storage-v3.12.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `greenlet` from 3.5.1 to 3.5.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst">greenlet's
changelog</a>.</em></p>
<blockquote>
<h1>3.5.2 (2026-06-17)</h1>
<ul>
<li>The minimum supported version of Python 3.15 is now 3.15b2.</li>
<li>Fix some garbage-collection related crashes on free-threaded Python
3.15. Thanks to Kumar Aditya in <code>PR
[#511](https://github.com/python-greenlet/greenlet/issues/511)
&lt;https://github.com/python-greenlet/greenlet/pull/511&gt;</code>_.</li>
<li>Improve garbage collection of greenlets. This mostly applies to
Python 3.15. Thanks to Kumar Aditya in <code>PR
[#512](https://github.com/python-greenlet/greenlet/issues/512)
&lt;https://github.com/python-greenlet/greenlet/pull/512&gt;</code>_.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/0b64e9c851ae7bd8fc9b73d98031168237ee71db"><code>0b64e9c</code></a>
Preparing release 3.5.2</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/3e28d276d01e74882f4cff1a4b54aed47153d617"><code>3e28d27</code></a>
Add change note for <a
href="https://redirect.github.com/python-greenlet/greenlet/issues/512">#512</a>
[skip ci]</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/6563c5e909a84c037c3d03e46851cd3016525a35"><code>6563c5e</code></a>
Merge pull request <a
href="https://redirect.github.com/python-greenlet/greenlet/issues/512">#512</a>
from kumaraditya303/ft-mem</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/ab6eff60766e8954d890eef064ee2e1dd7c8b262"><code>ab6eff6</code></a>
add ignore for win 3.10</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/41f5349a0f1b69ce180c90acb9a4cf2c84d612e7"><code>41f5349</code></a>
revert back to fails_leakcheck_on_py314_or_less</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/b0aac05734e9e41d4a592e0c913846990a9c7c24"><code>b0aac05</code></a>
set fail-fast=false and if condition correctly</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/2f87f316613d401bbf1b1653595654654e572550"><code>2f87f31</code></a>
rename to ignores_leakcheck_on_py314_or_less</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/28bbde3de939acefe8e9d72fb179115b81392a87"><code>28bbde3</code></a>
add comments</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/35206b8dc536cfe92c09509432b4a301b5fede5f"><code>35206b8</code></a>
fix test and restrict tp_is_gc &lt; 3.15</li>
<li><a
href="https://github.com/python-greenlet/greenlet/commit/abdbab55b03334700fd264e523ac75926daba043"><code>abdbab5</code></a>
fix gil enabled</li>
<li>Additional commits viewable in <a
href="https://github.com/python-greenlet/greenlet/compare/3.5.1...3.5.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `numpy` from 2.4.6 to 2.5.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/numpy/numpy/releases">numpy's
releases</a>.</em></p>
<blockquote>
<h2>v2.5.0 (June 21, 2026)</h2>
<h1>NumPy 2.5.0 Release Notes</h1>
<p>Numpy 2.5.0 is a transitional release. It drops support for Python
3.11,
marking the end of distutils, and expires a large number of deprecations
made
in the 2.0.x release. It also improves free threading and brings sorting
into
compliance with the array-api standard with the addition of descending
sorts.
There is also a fair amount of preparation for Python 3.15, which will
be
supported starting with the first rc.</p>
<p>This release supports Python versions 3.12-3.14.</p>
<h2>Highlights</h2>
<ul>
<li>Distutils has been removed,</li>
<li>Many expired deprecations, see below,</li>
<li>Many new deprecations, see below,</li>
<li>Many static typing improvements.</li>
<li>Improved support for free threading,</li>
<li>Support for descending sorts,</li>
</ul>
<p>See New Features below for other additions.</p>
<h2>Deprecations</h2>
<ul>
<li>
<p><code>numpy.char.chararray</code> is deprecated. Use an
<code>ndarray</code> with a string or bytes dtype instead.</p>
<p>(<a
href="https://redirect.github.com/numpy/numpy/pull/30605">gh-30605</a>)</p>
</li>
<li>
<p><code>numpy.take</code> now correctly checks if the result can be
cast to the provided
<code>out=out</code> under the same-kind rule. A
<code>DeprecationWarning</code> is given now
when this check fails. Previously, <code>take</code> incorrectly checked
if <code>out</code>
could be cast to the result (the wrong direction). This deprecation also
affects <code>compress</code> and possibly other functions. (Future
versions of NumPy
may tighten the casting check further.)</p>
<p>(<a
href="https://redirect.github.com/numpy/numpy/pull/30615">gh-30615</a>)</p>
</li>
<li>
<p>The <code>numpy.char.[as]array</code> functions are deprecated. Use
an
<code>numpy.[as]array</code> with a string or bytes dtype instead.</p>
<p>(<a
href="https://redirect.github.com/numpy/numpy/pull/30802">gh-30802</a>)</p>
</li>
<li>
<p>Setting the dtype attribute is deprecated because mutating an array
is unsafe
if an array is shared, especially by multiple threads. As an
alternative,
you can create a view with a new dtype via
<code>array.view(dtype=new_dtype)</code>.</p>
<p>(<a
href="https://redirect.github.com/numpy/numpy/pull/29244">gh-29244</a>)</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/numpy/numpy/commit/6910b28fc12f4c3e821f315e24c51a6a2d89ba49"><code>6910b28</code></a>
Merge pull request <a
href="https://redirect.github.com/numpy/numpy/issues/31706">#31706</a>
from charris/prepare-2.5.0-release</li>
<li><a
href="https://github.com/numpy/numpy/commit/e0acd2bef5dc193eeec3b2d6b7ea9fc30fd7e263"><code>e0acd2b</code></a>
REL: Prepare for the NumPy 2.5.0 release.</li>
<li><a
href="https://github.com/numpy/numpy/commit/8d928b715af39e403441e243df45a25db9d79ce3"><code>8d928b7</code></a>
Merge pull request <a
href="https://redirect.github.com/numpy/numpy/issues/31704">#31704</a>
from charris/backport-31649</li>
<li><a
href="https://github.com/numpy/numpy/commit/c2055ba2aabbfc31164297dd7ecb9b3a001262f6"><code>c2055ba</code></a>
MAINT: update openblas to 0.3.33.112.0 (<a
href="https://redirect.github.com/numpy/numpy/issues/31649">#31649</a>)</li>
<li><a
href="https://github.com/numpy/numpy/commit/ce17c81376e5d1195a22610a1f4bc79795c18911"><code>ce17c81</code></a>
Merge pull request <a
href="https://redirect.github.com/numpy/numpy/issues/31703">#31703</a>
from charris/backport-31609</li>
<li><a
href="https://github.com/numpy/numpy/commit/3de6203f44832dc5580d4cec30691f0fa10add87"><code>3de6203</code></a>
BUG: fix StringDType distinct-allocator bugs and add tests (<a
href="https://redirect.github.com/numpy/numpy/issues/31609">#31609</a>)</li>
<li><a
href="https://github.com/numpy/numpy/commit/c723971cf2dc71f0a9db851a72e47a2548f7bda6"><code>c723971</code></a>
Merge pull request <a
href="https://redirect.github.com/numpy/numpy/issues/31700">#31700</a>
from charris/backport-31694</li>
<li><a
href="https://github.com/numpy/numpy/commit/64513b250beb6b180449be76407352f33e5ee209"><code>64513b2</code></a>
MAINT: Bump pypa/cibuildwheel from 3.4.1 to 4.1.0</li>
<li><a
href="https://github.com/numpy/numpy/commit/04707f0dfb2de64883564be66623cb3705045a49"><code>04707f0</code></a>
Merge pull request <a
href="https://redirect.github.com/numpy/numpy/issues/31698">#31698</a>
from charris/try-fix-emscripten</li>
<li><a
href="https://github.com/numpy/numpy/commit/5cf0686152a721c66eda84cacb6d0b49cab394c4"><code>5cf0686</code></a>
MAINT: Try to fix emscripten wheel build.</li>
<li>Additional commits viewable in <a
href="https://github.com/numpy/numpy/compare/v2.4.6...v2.5.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `phonenumbers` from 9.0.32 to 9.0.33
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/daviddrysdale/python-phonenumbers/commit/0efec901889d8ca3fb8a4f894f4e13f4019cc75c"><code>0efec90</code></a>
Fix lint</li>
<li><a
href="https://github.com/daviddrysdale/python-phonenumbers/commit/6400333057df59b6a17eb79ecd3e8bf9ac03cd2a"><code>6400333</code></a>
Prep for 9.0.33 release</li>
<li><a
href="https://github.com/daviddrysdale/python-phonenumbers/commit/44199927677187f2b0c100efd198785ee891cd7d"><code>4419992</code></a>
Generated files for metadata</li>
<li><a
href="https://github.com/daviddrysdale/python-phonenumbers/commit/2e01d60f951ee0986faba2b4d0c77ae51bf522a6"><code>2e01d60</code></a>
Merge metadata changes from upstream 9.0.33</li>
<li><a
href="https://github.com/daviddrysdale/python-phonenumbers/commit/bdee3ff7c793343e180a06f5183d01466d3d17a4"><code>bdee3ff</code></a>
Merge code changes from upstream v9.0.33</li>
<li>See full diff in <a
href="https://github.com/daviddrysdale/python-phonenumbers/compare/v9.0.32...v9.0.33">compare
view</a></li>
</ul>
</details>
<br />

Updates `python-multipart` from 0.0.31 to 0.0.32
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/python-multipart/releases">python-multipart's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.0.32</h2>
<h2>What's Changed</h2>
<ul>
<li>Replace per-byte partial-boundary scan with rfind lookbehind by <a
href="https://github.com/Kludex"><code>@​Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/python-multipart/pull/300">Kludex/python-multipart#300</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32">https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md">python-multipart's
changelog</a>.</em></p>
<blockquote>
<h2>0.0.32 (2026-06-04)</h2>
<ul>
<li>Speed up partial-boundary scanning for CR/LF-dense part data <a
href="https://redirect.github.com/Kludex/python-multipart/pull/300">#300</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6"><code>238ead6</code></a>
Version 0.0.32 (<a
href="https://redirect.github.com/Kludex/python-multipart/issues/302">#302</a>)</li>
<li><a
href="https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af"><code>8672979</code></a>
Replace per-byte partial-boundary scan with rfind lookbehind (<a
href="https://redirect.github.com/Kludex/python-multipart/issues/300">#300</a>)</li>
<li><a
href="https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df"><code>8190779</code></a>
Bump the python-packages group with 7 updates (<a
href="https://redirect.github.com/Kludex/python-multipart/issues/301">#301</a>)</li>
<li><a
href="https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44"><code>0d3c086</code></a>
Use uv package ecosystem for Dependabot (<a
href="https://redirect.github.com/Kludex/python-multipart/issues/299">#299</a>)</li>
<li>See full diff in <a
href="https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32">compare
view</a></li>
</ul>
</details>
<br />

Updates `scramp` from 1.4.8 to 1.4.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/tlocke/scramp/commits">compare view</a></li>
</ul>
</details>
<br />

Updates `sentry-sdk[fastapi]` from 2.62.0 to 2.63.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-python/releases">sentry-sdk[fastapi]'s
releases</a>.</em></p>
<blockquote>
<h2>2.63.0</h2>
<h3>Bug Fixes 🐛</h3>
<h4>Fastapi</h4>
<ul>
<li>Prevent double wrapping of sync handlers on FastAPI &gt;= 0.137 by
<a href="https://github.com/jhonny-on"><code>@​jhonny-on</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6569">#6569</a></li>
<li>Use effective_route_context path for prefixed routers by <a
href="https://github.com/ericapisani"><code>@​ericapisani</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6572">#6572</a></li>
</ul>
<h4>Other</h4>
<ul>
<li>(asgi) Gate query string and client IP behind send_default_pii by <a
href="https://github.com/ericapisani"><code>@​ericapisani</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6501">#6501</a></li>
<li>(serializer) Avoid creating reference cycles on every call by <a
href="https://github.com/Malkiz223"><code>@​Malkiz223</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6563">#6563</a></li>
<li>(user) Set <code>user.ip_address</code> on telemetry if present by
<a href="https://github.com/sentrivana"><code>@​sentrivana</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6555">#6555</a></li>
<li>Remove 0000 trace_id fallbacks by <a
href="https://github.com/sl0thentr0py"><code>@​sl0thentr0py</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6570">#6570</a></li>
<li>MANIFEST.in: Graft tests directory. by <a
href="https://github.com/charlesroelli"><code>@​charlesroelli</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6237">#6237</a></li>
</ul>
<h3>Internal Changes 🔧</h3>
<ul>
<li>(fastapi) Verify request info capture with POST endpoints by <a
href="https://github.com/alexander-alderman-webb"><code>@​alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6287">#6287</a></li>
<li>(starlette) Verify request info capture with POST endpoints by <a
href="https://github.com/alexander-alderman-webb"><code>@​alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6269">#6269</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md">sentry-sdk[fastapi]'s
changelog</a>.</em></p>
<blockquote>
<h2>2.63.0</h2>
<h3>Bug Fixes 🐛</h3>
<h4>Fastapi</h4>
<ul>
<li>Prevent double wrapping of sync handlers on FastAPI &gt;= 0.137 by
<a href="https://github.com/jhonny-on"><code>@​jhonny-on</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6569">#6569</a></li>
<li>Use effective_route_context path for prefixed routers by <a
href="https://github.com/ericapisani"><code>@​ericapisani</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6572">#6572</a></li>
</ul>
<h4>Other</h4>
<ul>
<li>(asgi) Gate query string and client IP behind send_default_pii by <a
href="https://github.com/ericapisani"><code>@​ericapisani</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6501">#6501</a></li>
<li>(serializer) Avoid creating reference cycles on every call by <a
href="https://github.com/Malkiz223"><code>@​Malkiz223</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6563">#6563</a></li>
<li>(user) Set <code>user.ip_address</code> on telemetry if present by
<a href="https://github.com/sentrivana"><code>@​sentrivana</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/6555">#6555</a></li>
<li>Remove 0000 trace_id fallbacks by <a
href="https://github.com/sl0thentr0py"><code>@​sl0thentr0py</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6570">#6570</a></li>
<li>MANIFEST.in: Graft tests directory. by <a
href="https://github.com/charlesroelli"><code>@​charlesroelli</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6237">#6237</a></li>
</ul>
<h3>Internal Changes 🔧</h3>
<ul>
<li>(fastapi) Verify request info capture with POST endpoints by <a
href="https://github.com/alexander-alderman-webb"><code>@​alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6287">#6287</a></li>
<li>(starlette) Verify request info capture with POST endpoints by <a
href="https://github.com/alexander-alderman-webb"><code>@​alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/6269">#6269</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/getsentry/sentry-python/commit/44b008a336bd9c64bf54ab8318bffbf9cc015bd1"><code>44b008a</code></a>
update changelog</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/0b2af511fd1b28208b8f8860c68efcab85e81970"><code>0b2af51</code></a>
Update CHANGELOG.md</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/250caadc80033e975e7b4746ee1411bcf7fa98f3"><code>250caad</code></a>
release: 2.63.0</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/72a57de789777a7b0b836ef1225463478cb7df6a"><code>72a57de</code></a>
fix(flask): Set user data on scope at request start (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/6566">#6566</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/6a4c3a1cb84a94b30ff1c0648e127dcf80bd83f8"><code>6a4c3a1</code></a>
fix: Remove 0000 trace_id fallbacks (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/6570">#6570</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/1df9835e485a346f670ca5615106536a20212795"><code>1df9835</code></a>
feat(falcon): Set name and source on request span when streaming (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/6562">#6562</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/77874bdb80039de5521830a88b133015e3c0b7a0"><code>77874bd</code></a>
test(falcon): Support span streaming (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/6561">#6561</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/6bcfb9cf7e8e00a009bcd5ba4e1cb00f3fffe2d9"><code>6bcfb9c</code></a>
fix(fastapi): Prevent double wrapping of sync handlers on FastAPI &gt;=
0.137 (#...</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/72d972c176a1d41a8179b6666ca723de665399b5"><code>72d972c</code></a>
fix(fastapi): use effective_route_context path for prefixed routers (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/6572">#6572</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/cc802f6fcedcbd50f76afe2fc902d4d21b6691d6"><code>cc802f6</code></a>
feat(chalice): Add span streaming support to Chalice integration (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/6503">#6503</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-python/compare/2.62.0...2.63.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `sqlalchemy` from 2.0.50 to 2.0.51
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sqlalchemy/sqlalchemy/releases">sqlalchemy's
releases</a>.</em></p>
<blockquote>
<h1>2.0.51</h1>
<p>Released: June 15, 2026</p>
<h2>orm</h2>
<ul>
<li>
<p><strong>[orm] [bug]</strong> Fixed issue where
<code>_orm.subqueryload()</code> combined with
<code>PropComparator.of_type()</code> and
<code>PropComparator.and_()</code> would
silently drop the additional filter criteria, causing all related
objects
to be loaded instead of only those matching the filter.  The
<code>LoaderCriteriaOption</code> was being constructed against the base
entity rather than the effective entity indicated by
<code>PropComparator.of_type()</code>. Pull request courtesy Arya
Rizky.</p>
<p>References: <a
href="https://www.sqlalchemy.org/trac/ticket/13207">#13207</a></p>
</li>
<li>
<p><strong>[orm] [bug]</strong> Fixed bug where a failure during
<code>tpc_prepare()</code> within
<code>_orm.Session.commit()</code> for a two-phase session would raise
<code>IllegalStateChangeError</code> instead of the original database
exception. The internal <code>_prepare_impl()</code> method's error
handler
was unable to invoke <code>_orm.SessionTransaction.rollback()</code> due
to a state-change guard, preventing proper cleanup and masking the
underlying error.</p>
<p>References: <a
href="https://www.sqlalchemy.org/trac/ticket/13356">#13356</a></p>
</li>
</ul>
<h2>engine</h2>
<ul>
<li>
<p><strong>[engine] [bug]</strong> Fixed issue where
<code>Result.freeze()</code> would lose track of ambiguous
column names present in the original <code>CursorResult</code>, causing
key-based access on the thawed result to silently return a value instead
of
raising <code>InvalidRequestError</code>.  The
<code>SimpleResultMetaData</code> now accepts and propagates ambiguous
key
information so that frozen, thawed, and pickled results raise
consistently
for duplicate column names.  Pull request courtesy Saurabh Kohli.</p>
<p>References: <a
href="https://www.sqlalchemy.org/trac/ticket/9427">#9427</a></p>
</li>
</ul>
<h2>sql</h2>
<ul>
<li>
<p><strong>[sql] [bug]</strong> Fixed issue where
<code>_sql.StatementLambdaElement</code> would proxy
attribute access through the cached &quot;expected&quot; expression
rather than the
resolved expression, causing stale closure-bound parameter values to be
used when a lambda statement was extended with non-lambda criteria such
as
an additional <code>.where()</code> clause.  Courtesy cjc0013.</p>
<p>References: <a
href="https://www.sqlalchemy.org/trac/ticket/10827">#10827</a></p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/sqlalchemy/sqlalchemy/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest` from 9.0.3 to 9.1.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest/releases">pytest's
releases</a>.</em></p>
<blockquote>
<h2>9.1.1</h2>
<h1>pytest 9.1.1 (2026-06-19)</h1>
<h2>Bug fixes</h2>
<ul>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14220">#14220</a>:
Fixed a logic bug in <code>pytest.RaisesGroup</code> which would might
cause it to display incorrect &quot;It matches <!-- raw HTML omitted
-->FooError()<!-- raw HTML omitted --> which was paired with <!-- raw
HTML omitted -->BarError<!-- raw HTML omitted -->&quot; messages.</li>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14591">#14591</a>:
Fixed a regression in pytest 9.1.0 which caused overriding a
parametrized fixture with an indirect <!-- raw HTML omitted --><a
href="https://github.com/pytest"><code>@​pytest</code></a>.mark.parametrize<!--
raw HTML omitted --> to fail with &quot;duplicate parametrization of
'&lt;fixture name&gt;'&quot;.</li>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14606">#14606</a>:
Fixed <code>list-item</code> typing errors from mypy in
<code>@pytest.mark.parametrize &lt;pytest.mark.parametrize
ref&gt;</code> <code>argvalues</code> parameter.</li>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14608">#14608</a>:
Fixed a regression in pytest 9.1.0 where <code>conftest.py</code> files
located in <code>&lt;invocation dir&gt;/test*</code> were no longer
loaded as initial conftests when invoked without arguments.
This could cause certain hooks (like <code>pytest_addoption</code>) in
these files to not fire.</li>
</ul>
<h2>9.1.0</h2>
<h1>pytest 9.1.0 (2026-06-13)</h1>
<h2>Removals and backward incompatible breaking changes</h2>
<ul>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14533">#14533</a>:
When using <code>--doctest-modules</code>, autouse fixtures with
<code>module</code>, <code>package</code> or <code>session</code> scope
that are defined inline in Python test modules (not plugins or
conftests) will now possibly execute twice.</p>
<p>If this is undesirable, move the fixture definition to a
<code>conftest.py</code> file if possible.</p>
<p>Technical explanation for those interested:
When using <!-- raw HTML omitted -->--doctest-modules<!-- raw HTML
omitted -->, pytest possibly collects Python modules twice, once as
<code>pytest.Module</code> and once as a <code>DoctestModule</code>
(depending on the configuration).
Due to improvements in pytest's fixture implementation, if e.g. the
<code>DoctestModule</code> collects a fixture, it is now visible to it
only, and not to the <code>Module</code>.
This means that both need to register the fixtures independently.</p>
</li>
</ul>
<h2>Deprecations (removal in next major release)</h2>
<ul>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/10819">#10819</a>:
Added a deprecation warning for class-scoped fixtures defined as
instance methods (without <code>@classmethod</code>). Such fixtures set
attributes on a different instance than the test methods use, leading to
unexpected behavior. Use <code>@classmethod</code> decorator instead --
by <code>yastcher</code>.</p>
<p>See <code>10819</code> and <code>14011</code>.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12882">#12882</a>:
Calling <code>request.getfixturevalue()
&lt;pytest.FixtureRequest.getfixturevalue&gt;</code> during teardown to
request a fixture that was not already requested is now deprecated and
will become an error in pytest 10.</p>
<p>See <code>dynamic-fixture-request-during-teardown</code> for
details.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/13409">#13409</a>:
Using non-<code>~collections.abc.Collection</code> iterables (such as
generators, iterators, or custom iterable objects) for the
<code>argvalues</code> parameter in <code>@pytest.mark.parametrize
&lt;pytest.mark.parametrize ref&gt;</code> and
<code>metafunc.parametrize &lt;pytest.Metafunc.parametrize&gt;</code> is
now deprecated.</p>
<p>These iterables get exhausted after the first iteration,
leading to tests getting unexpectedly skipped in cases such as running
<code>pytest.main()</code> multiple times,
using class-level parametrize decorators,
or collecting tests multiple times.</p>
<p>See <code>parametrize-iterators</code> for details and
suggestions.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/13946">#13946</a>:
The private <code>config.inicfg</code> attribute is now deprecated.
Use <code>config.getini() &lt;pytest.Config.getini&gt;</code> to access
configuration values instead.</p>
<p>See <code>config-inicfg</code> for more details.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14004">#14004</a>:
Passing <code>baseid</code> to <code>~pytest.FixtureDef</code> or
<code>nodeid</code> strings to fixture registration APIs is now
deprecated. These are internal pytest APIs that are used by some
plugins.</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447"><code>cf470ec</code></a>
Prepare release version 9.1.1</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690"><code>e0c8ce6</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14625">#14625</a>
from pytest-dev/patchback/backports/9.1.x/a07c31a97...</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757"><code>1b82d16</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14624">#14624</a>
from pytest-dev/patchback/backports/9.1.x/b375b79ec...</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53"><code>501c4bc</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14596">#14596</a>
from bluetech/doc-classmethod</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca"><code>b61f588</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14622">#14622</a>
from chrisburr/fix-14608-initial-conftest-test-subdir</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a"><code>9a567e0</code></a>
[automated] Update plugin list (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14617">#14617</a>)
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14618">#14618</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384"><code>ef8b299</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14620">#14620</a>
from pytest-dev/patchback/backports/9.1.x/680f9f3ed...</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc"><code>66abd07</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14220">#14220</a>
from bysiber/fix-stale-iexp-raisesgroup</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5"><code>79fbf93</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14612">#14612</a>
from pytest-dev/patchback/backports/9.1.x/974ed48b6...</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c"><code>0d312eb</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14611">#14611</a>
from bluetech/parametrize-argvalues-typing</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `babel` from 2.17.0 to 2.18.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-babel/babel/releases">babel's
releases</a>.</em></p>
<blockquote>
<h2>v2.18.0</h2>
<p>Happy 2026! Like last year's release (ahem...), this one too is being
made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪
We'll aspire for a less glacial release cycle for 2.19. 😁</p>
<p>Please see <a
href="https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/CHANGES.rst">CHANGELOG.rst</a>
for the detailed change log.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0">https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-babel/babel/blob/master/CHANGES.rst">babel's
changelog</a>.</em></p>
<blockquote>
<h2>Version 2.18.0</h2>
<p>Happy 2026! This release is, coincidentally, also being made from
FOSDEM.</p>
<p>We will aspire for a slightly less glacial release cadence in this
year;
there are interesting features in the pipeline.</p>
<p>Features</p>
<pre><code>
* Core: Add `babel.core.get_cldr_version()` by @akx in :gh:`1242`
* Core: Use CLDR 47 by @tomasr8 in :gh:`1210`
* Core: Use canonical IANA zone names in zone_territories by @akx in
:gh:`1220`
* Messages: Improve extract performance via ignoring directories early
during os.walk by @akx in :gh:`968`
* Messages: Merge in per-format keywords and auto_comments by @akx in
:gh:`1243`
* Messages: Update keywords for extraction of dpgettext and dnpgettext
by @mardiros in :gh:`1235`
* Messages: Validate all plurals in Python format checker by @tomasr8 in
:gh:`1188`
* Time: Use standard library `timezone` instead of `FixedOffsetTimezone`
by @akx in :gh:`1203`
<p>Bugfixes<br />
</code></pre></p>
<ul>
<li>Core: Fix formatting for &quot;Empty locale identifier&quot;
exception added in <a
href="https://redirect.github.com/python-babel/babel/issues/1164">#1164</a>
by <a href="https://github.com/akx"><code>@​akx</code></a> in
:gh:<code>1184</code></li>
<li>Core: Improve handling of no-inheritance-marker in timezone data by
<a href="https://github.com/akx"><code>@​akx</code></a> in
:gh:<code>1194</code></li>
<li>Core: Make the number pattern regular expression more efficient by
<a href="https://github.com/akx"><code>@​akx</code></a> in
:gh:<code>1213</code></li>
<li>Messages: Keep translator comments next to the translation function
call by <a href="https://github.com/akx"><code>@​akx</code></a> in
:gh:<code>1196</code></li>
<li>Numbers: Fix KeyError that occurred when formatting compact
currencies of exactly one thousand in several locales by <a
href="https://github.com/bartbroere"><code>@​bartbroere</code></a> in
:gh:<code>1246</code></li>
</ul>
<p>Other improvements</p>
<pre><code>
* Core: Avoid unnecessary uses of `map()` by @akx in :gh:`1180`
* Messages: Have init-catalog create directories too by @akx in
:gh:`1244`
* Messages: Optimizations for read_po by @akx in :gh:`1200`
* Messages: Use pathlib.Path() in catalog frontend;…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants