Properly set tag for the flannel-cni-plugin image based on package version #100

Merged
stepchenkoas merged 2 commits from update into master 2025-04-12 22:10:48 +03:00
2 changed files with 22 additions and 12 deletions

View File

@ -15,7 +15,7 @@ from pathlib import Path
import requests
import tomli
import yaml
from jinja2 import Template
from jinja2 import Environment, BaseLoader
logger = logging.getLogger(__name__)
@ -23,6 +23,12 @@ ORG_DIR = Path("org")
PKG_VERSIONS: dict | None = None
# Jinja2 custom fail filter
def fail(message: str):
raise ValueError(message)
JINJA_ENV = Environment(loader=BaseLoader())
JINJA_ENV.filters['fail'] = fail
@dataclass
class Image:
@ -94,12 +100,10 @@ def api_get_source_package_version(branch: str, package_name: str) -> str:
params = {"branch": branch, "name": package_name}
response = requests.get(api_url, params)
if response.status_code != 200:
print(response)
api_url = "https://rdb.altlinux.org/api/site/package_versions"
params = {"arch": "x86_64", "package_type": "source", "name": package_name}
response = requests.get(api_url, params)
if response.status_code != 200:
print(response)
raise RuntimeError(
f"failed to retrieve source package version: source package {package_name!r}, branch {branch!r} "
)
@ -121,7 +125,6 @@ def api_get_source_package_version_from_task(task_id: str, package_name: str):
api_url = f"https://rdb.altlinux.org/api/task/packages/{task_id}"
response = requests.get(api_url)
if response.status_code != 200:
print(response)
raise RuntimeError(
f"failed to retrieve source package version from task: source package {package_name!r}, task_id {task_id}"
)
@ -155,8 +158,7 @@ class Tags:
package_name = image.source_packages[0]
if re.search("{%.*%}", package_name):
package_name = Template(package_name).render(branch=branch).strip()
print(f"{package_name=}")
package_name = JINJA_ENV.from_string(package_name).render(branch=branch).strip()
if re.search("{{.*}}", package_name):
if PKG_VERSIONS is None:
@ -174,7 +176,7 @@ class Tags:
f"invalid version for image {image.canonical_name!r}: {PKG_VERSIONS[image.canonical_name]!r}"
)
package_name = Template(package_name).render(
package_name = JINJA_ENV.from_string(package_name).render(
version=PKG_VERSIONS[image.canonical_name]
)
@ -204,13 +206,13 @@ class Tags:
if image.version_template is not None:
if isinstance(image.version_template, str):
version_tag = (
Template(image.version_template).render(version=version).strip()
JINJA_ENV.from_string(image.version_template).render(version=version).strip()
)
tags.append(version_tag)
elif isinstance(image.version_template, list):
for v in image.version_template:
version_tag = (
Template(v).render(version=version).strip()
JINJA_ENV.from_string(v).render(version=version).strip()
)
tags.append(version_tag)
else:
@ -225,7 +227,7 @@ class Tags:
if not isinstance(image.version_template, str):
raise RuntimeError(f"expected type for version_template: 'str', got '{type(image.version_template)}' for image {image}")
version = (
Template(image.version_template).render(version=version).strip()
JINJA_ENV.from_string(image.version_template).render(version=version).strip()
)
tags = [version]
tags.append("latest")
@ -406,7 +408,7 @@ class DockerBuilder:
else:
registry = ""
alt_image = "alt"
rendered = Template(template).render(
rendered = JINJA_ENV.from_string(template).render(
alt_image=alt_image,
branch=self.branch,
install_packages=install_packages,

View File

@ -1,6 +1,14 @@
---
is_versioned: true
version_template: v{{ version.rsplit('.', 1) | first }}-flannel{{ version.rsplit('.', 1) | last }}
version_template: >-
{%- set version_parts = version.split('.') -%}
{%- if version_parts | length == 3 -%}
v{{ version }}
{%- elif version_parts | length == 4 -%}
v{{ version.rsplit('.', 1) | first }}-flannel{{ version.rsplit('.', 1) | last }}
{%- else -%}
{{ "Invalid version format: must have 3 or 4 parts" | fail }}
{%- endif %}
source_packages:
- cni-plugin-flannel
...