This is an automated email from the ASF dual-hosted git repository.
arm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
The following commit(s) were added to refs/heads/main by this push:
new 5ceec42 Make Maven check use the CDN URLs instead of the search.maven
api
5ceec42 is described below
commit 5ceec42de55fbcb2af85083592a152ef0de8a8d8
Author: Alastair McFarlane <[email protected]>
AuthorDate: Mon Jan 19 17:54:33 2026 +0000
Make Maven check use the CDN URLs instead of the search.maven api
---
atr/models/sql.py | 5 ++--
atr/storage/writers/distributions.py | 46 ++++++++++++++++++++++++++++++------
2 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/atr/models/sql.py b/atr/models/sql.py
index 444c134..3e71d2d 100644
--- a/atr/models/sql.py
+++ b/atr/models/sql.py
@@ -121,8 +121,9 @@ class DistributionPlatform(enum.Enum):
MAVEN = DistributionPlatformValue(
name="Maven Central",
gh_slug="maven",
-
template_url="https://search.maven.org/solrsearch/select?q=g:{owner_namespace}+AND+a:{package}+AND+v:{version}&core=gav&rows=20&wt=json",
- # Java ASF projects use staging URLs along the lines of
+
template_url="https://repo1.maven.org/maven2/{owner_namespace}/{package}/maven-metadata.xml",
+ # Below is the old template using the maven search API - but the index
isn't updated quickly enough for us
+ #
template_url="https://search.maven.org/solrsearch/select?q=g:{owner_namespace}+AND+a:{package}+AND+v:{version}&core=gav&rows=20&wt=json",
template_staging_url="https://repository.apache.org:4443/repository/maven-staging/{owner_namespace}/{package}/maven-metadata.xml",
#
https://repository.apache.org/content/repositories/orgapachePROJECT-NNNN/
# There's no JSON, but each individual package has maven-metadata.xml
diff --git a/atr/storage/writers/distributions.py
b/atr/storage/writers/distributions.py
index 4569b1c..d620592 100644
--- a/atr/storage/writers/distributions.py
+++ b/atr/storage/writers/distributions.py
@@ -197,8 +197,13 @@ class CommitteeMember(CommitteeParticipant):
dd: distribution.Data,
) -> tuple[sql.Distribution, bool, distribution.Metadata]:
template_url = await self.__template_url(dd, staging)
-
- if dd.platform == sql.DistributionPlatform.MAVEN and staging:
+ api_url = template_url.format(
+ owner_namespace=dd.owner_namespace,
+ package=dd.package,
+ version=dd.version,
+ )
+ if dd.platform == sql.DistributionPlatform.MAVEN:
+ # We do this here because the CDNs break the namespace up into a /
delimited URL
owner = (dd.owner_namespace or "").replace(".", "/")
api_url = template_url.format(
owner_namespace=owner,
@@ -207,11 +212,6 @@ class CommitteeMember(CommitteeParticipant):
)
api_oc = await self.__json_from_maven_xml(api_url, dd.version)
else:
- api_url = template_url.format(
- owner_namespace=dd.owner_namespace,
- package=dd.package,
- version=dd.version,
- )
api_oc = await self.__json_from_distribution_platform(api_url,
dd.platform, dd.version)
match api_oc:
case outcome.Result(result):
@@ -347,6 +347,38 @@ class CommitteeMember(CommitteeParticipant):
return outcome.Error(e)
return outcome.Result(result)
+ async def __json_from_maven_cdn(
+ self, api_url: str, group_id: str, artifact_id: str, version: str
+ ) -> outcome.Outcome[basic.JSON]:
+ import datetime
+
+ try:
+ async with aiohttp.ClientSession() as session:
+ async with session.get(api_url) as response:
+ response.raise_for_status()
+
+ # Use current time as timestamp since we're just validating the
package exists
+ timestamp_ms = int(datetime.datetime.now(datetime.UTC).timestamp()
* 1000)
+
+ # Convert to dict matching MavenResponse structure
+ result_dict = {
+ "response": {
+ "start": 0,
+ "docs": [
+ {
+ "g": group_id,
+ "a": artifact_id,
+ "v": version,
+ "timestamp": timestamp_ms,
+ }
+ ],
+ }
+ }
+ result = basic.as_json(result_dict)
+ return outcome.Result(result)
+ except aiohttp.ClientError as e:
+ return outcome.Error(e)
+
async def __json_from_maven_xml(self, api_url: str, version: str) ->
outcome.Outcome[basic.JSON]:
import datetime
import xml.etree.ElementTree as ET
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]