This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 6026c1e81c9 Fix uv.lock-conflict notifier hitting GitHub GraphQL with
trailing slash (#66539)
6026c1e81c9 is described below
commit 6026c1e81c9991cc22bf4c4a62ef9cac48988980
Author: Jarek Potiuk <[email protected]>
AuthorDate: Thu May 7 13:50:38 2026 +0200
Fix uv.lock-conflict notifier hitting GitHub GraphQL with trailing slash
(#66539)
The notify_uv_lock_conflicts.py script created an httpx.Client with
`base_url=GRAPHQL_URL` and posted to a relative path of "". httpx
normalises `base_url` to end with `/`, so the resolved URL became
`https://api.github.com/graphql/` — which GitHub's GraphQL API
rejects with 404, breaking the workflow's main run.
Drop the `base_url=` and pass the full URL to `.post()` directly so
the trailing slash never gets added.
Failure observed in
https://github.com/apache/airflow/actions/runs/25492428820/job/74803563077
---
scripts/ci/notify_uv_lock_conflicts.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/scripts/ci/notify_uv_lock_conflicts.py
b/scripts/ci/notify_uv_lock_conflicts.py
index 84002266544..d22614b079a 100644
--- a/scripts/ci/notify_uv_lock_conflicts.py
+++ b/scripts/ci/notify_uv_lock_conflicts.py
@@ -145,8 +145,11 @@ class Stats:
class GitHubGraphQL:
def __init__(self, token: str) -> None:
+ # NOTE: do not use `base_url=GRAPHQL_URL` — httpx normalises base_url
to
+ # end with `/`, so a relative POST to `""` resolves to
+ # https://api.github.com/graphql/ (trailing slash), which GitHub
+ # rejects with 404. Pass the full URL to .post() directly instead.
self._http = httpx.Client(
- base_url=GRAPHQL_URL,
headers={
"Authorization": f"Bearer {token}",
"Accept": "application/vnd.github+json",
@@ -161,7 +164,7 @@ class GitHubGraphQL:
self._http.close()
def call(self, query: str, variables: dict[str, Any]) -> dict[str, Any]:
- r = self._http.post("", json={"query": query, "variables": variables})
+ r = self._http.post(GRAPHQL_URL, json={"query": query, "variables":
variables})
r.raise_for_status()
data = r.json()
if "errors" in data: