source/docker: Add regex match for tags
infra/updatebot/pipeline/head This commit looks good Details

Repositories on Docker Hub often have images we do not want to consider
when determining the "latest" version of an application, such as
non=container images, development/testing versions, etc.  To exclude
these, project sources can now define a `version_re` property that
contains a regular expression.  Images that do not match the expression
will be ignored.
master
Dustin 2024-08-27 18:48:09 -05:00
parent 7efde27b48
commit 5f8db2fa47
1 changed files with 11 additions and 2 deletions

View File

@ -79,6 +79,7 @@ class DockerHubSource(BaseSource):
kind: Literal['docker']
namespace: str
repository: str
version_re: str = r'^(?P<version>[0-9]+(\.[0-9]+)*(-[0-9]+)?)$'
def get_latest_version(self) -> str:
session = _get_session()
@ -89,10 +90,18 @@ class DockerHubSource(BaseSource):
r = session.get(url)
data = r.json()
versions = []
regex = re.compile(self.version_re)
for result in data['results']:
if result['name'] == 'latest':
m = regex.match(result['name'])
if not m:
log.debug(
'Skipping tag %s: does not match regex %s',
result['name'],
self.version_re,
)
continue
versions.append((result['last_updated'], result['name']))
version = m.groupdict()['version']
versions.append((result['last_updated'], version))
versions.sort()
return versions[-1][-1]