This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git


The following commit(s) were added to refs/heads/main by this push:
     new d60e92d  Avoid some checks if artifacts are marked as binary
d60e92d is described below

commit d60e92df6785db2694f64c3ec4446f04e6224bc0
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Jun 23 15:00:38 2025 +0100

    Avoid some checks if artifacts are marked as binary
---
 atr/db/__init__.py            |  4 ++--
 atr/tasks/checks/__init__.py  | 28 ++++++++++++++++++++++++++++
 atr/tasks/checks/license.py   |  6 ++++++
 atr/tasks/checks/rat.py       |  2 ++
 atr/tasks/checks/targz.py     |  2 ++
 atr/tasks/checks/zipformat.py |  2 ++
 6 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/atr/db/__init__.py b/atr/db/__init__.py
index 03d2f1b..45ea068 100644
--- a/atr/db/__init__.py
+++ b/atr/db/__init__.py
@@ -101,12 +101,12 @@ class Query[T]:
     async def get(self, log_query: bool = False) -> T | None:
         self.log_query("get", log_query)
         result = await self.session.execute(self.query)
-        return result.scalar_one_or_none()
+        return result.unique().scalar_one_or_none()
 
     async def demand(self, error: Exception, log_query: bool = False) -> T:
         self.log_query("demand", log_query)
         result = await self.session.execute(self.query)
-        item = result.scalar_one_or_none()
+        item = result.unique().scalar_one_or_none()
         if item is None:
             raise error
         return item
diff --git a/atr/tasks/checks/__init__.py b/atr/tasks/checks/__init__.py
index 22b8237..17ed569 100644
--- a/atr/tasks/checks/__init__.py
+++ b/atr/tasks/checks/__init__.py
@@ -19,6 +19,7 @@ from __future__ import annotations
 
 import dataclasses
 import datetime
+import fnmatch
 import functools
 import pathlib
 from typing import TYPE_CHECKING, Any
@@ -153,6 +154,33 @@ class Recorder:
             abs_path_parts.append(rel_path_part)
         return pathlib.Path(*abs_path_parts)
 
+    async def project(self) -> models.Project:
+        # TODO: Cache project
+        async with db.session() as data:
+            return await data.project(name=self.project_name, 
_release_policy=True).demand(
+                RuntimeError(f"Project {self.project_name} not found")
+            )
+
+    async def primary_path_is_binary(self) -> bool:
+        if self.primary_rel_path is None:
+            return False
+        project = await self.project()
+        if not project.policy_binary_artifact_paths:
+            return False
+        paths = project.policy_binary_artifact_paths
+        slash_path = "/" + self.primary_rel_path
+        return any(fnmatch.fnmatch(slash_path, path) for path in paths)
+
+    async def primary_path_is_source(self) -> bool:
+        if self.primary_rel_path is None:
+            return False
+        project = await self.project()
+        if not project.policy_source_artifact_paths:
+            return False
+        paths = project.policy_source_artifact_paths
+        slash_path = "/" + self.primary_rel_path
+        return any(fnmatch.fnmatch(slash_path, path) for path in paths)
+
     async def clear(self, primary_rel_path: str | None = None, 
member_rel_path: str | None = None) -> None:
         async with db.session() as data:
             stmt = sqlmodel.delete(models.CheckResult).where(
diff --git a/atr/tasks/checks/license.py b/atr/tasks/checks/license.py
index 9063d89..0004b5b 100644
--- a/atr/tasks/checks/license.py
+++ b/atr/tasks/checks/license.py
@@ -126,6 +126,9 @@ async def files(args: checks.FunctionArguments) -> str | 
None:
     recorder = await args.recorder()
     if not (artifact_abs_path := await recorder.abs_path()):
         return None
+    if await recorder.primary_path_is_binary():
+        _LOGGER.info(f"Skipping license files check for {artifact_abs_path} 
(rel: {args.primary_rel_path})")
+        return None
 
     _LOGGER.info(f"Checking license files for {artifact_abs_path} (rel: 
{args.primary_rel_path})")
 
@@ -151,6 +154,9 @@ async def headers(args: checks.FunctionArguments) -> str | 
None:
     recorder = await args.recorder()
     if not (artifact_abs_path := await recorder.abs_path()):
         return None
+    if await recorder.primary_path_is_binary():
+        _LOGGER.info(f"Skipping license headers check for {artifact_abs_path} 
(rel: {args.primary_rel_path})")
+        return None
 
     _LOGGER.info(f"Checking license headers for {artifact_abs_path} (rel: 
{args.primary_rel_path})")
 
diff --git a/atr/tasks/checks/rat.py b/atr/tasks/checks/rat.py
index 46d89a2..169fcb0 100644
--- a/atr/tasks/checks/rat.py
+++ b/atr/tasks/checks/rat.py
@@ -47,6 +47,8 @@ async def check(args: checks.FunctionArguments) -> str | None:
     recorder = await args.recorder()
     if not (artifact_abs_path := await recorder.abs_path()):
         return None
+    if await recorder.primary_path_is_binary():
+        return None
 
     _LOGGER.info(f"Checking RAT licenses for {artifact_abs_path} (rel: 
{args.primary_rel_path})")
 
diff --git a/atr/tasks/checks/targz.py b/atr/tasks/checks/targz.py
index d49ad8a..f0103a1 100644
--- a/atr/tasks/checks/targz.py
+++ b/atr/tasks/checks/targz.py
@@ -76,6 +76,8 @@ async def structure(args: checks.FunctionArguments) -> str | 
None:
     recorder = await args.recorder()
     if not (artifact_abs_path := await recorder.abs_path()):
         return None
+    if await recorder.primary_path_is_binary():
+        return None
 
     filename = artifact_abs_path.name
     expected_root: Final[str] = (
diff --git a/atr/tasks/checks/zipformat.py b/atr/tasks/checks/zipformat.py
index 03b044a..a0167c1 100644
--- a/atr/tasks/checks/zipformat.py
+++ b/atr/tasks/checks/zipformat.py
@@ -51,6 +51,8 @@ async def structure(args: checks.FunctionArguments) -> str | 
None:
     recorder = await args.recorder()
     if not (artifact_abs_path := await recorder.abs_path()):
         return None
+    if await recorder.primary_path_is_binary():
+        return None
 
     _LOGGER.info(f"Checking zip structure for {artifact_abs_path} (rel: 
{args.primary_rel_path})")
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to