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]