diff --git a/oci/mock-rock/image.yaml b/oci/mock-rock/image.yaml index af89ca6e..75e22f84 100644 --- a/oci/mock-rock/image.yaml +++ b/oci/mock-rock/image.yaml @@ -14,7 +14,7 @@ upload: directory: mock_rock/1.0 release: 1.0-22.04: - end-of-life: "2025-05-01T00:00:00Z" + end-of-life: "2024-05-01T00:00:00Z" risks: - candidate - edge diff --git a/src/image/prepare_single_image_build_matrix.py b/src/image/prepare_single_image_build_matrix.py index b2657354..f94dfa6a 100755 --- a/src/image/prepare_single_image_build_matrix.py +++ b/src/image/prepare_single_image_build_matrix.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import argparse +from datetime import datetime, timezone import glob import json import os @@ -59,8 +60,10 @@ def validate_image_trigger(data: dict) -> None: builds = image_trigger.get("upload", []) release_to = "true" if "release" in image_trigger else "" + + img_number = 0 # inject some extra metadata into the matrix data - for img_number, _ in enumerate(builds): + while img_number < len(builds): builds[img_number]["name"] = args.oci_path.rstrip("/").split("/")[-1] builds[img_number]["path"] = args.oci_path builds[img_number]["revision"] = img_number + int(args.next_revision) @@ -103,13 +106,23 @@ def validate_image_trigger(data: dict) -> None: # set an output as a marker for later knowing if we need to release if "release" in builds[img_number]: - release_to = "true" - # the workflow GH matrix has a problem parsing nested JSON dicts - # so let's remove this field since we don't need it for the builds - builds[img_number]["release"] = "true" + min_eol = datetime.strptime(min( + v["end-of-life"] for v in builds[img_number]["release"].values() + ), "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc) + if min_eol < datetime.now(timezone.utc): + print("Track skipped because it reached its end of life") + del builds[img_number] + continue + else: + release_to = "true" + # the workflow GH matrix has a problem parsing nested JSON dicts + # so let's remove this field since we don't need it for the builds + builds[img_number]["release"] = "true" else: builds[img_number]["release"] = "" + img_number += 1 + matrix = {"include": builds} print(f"{args.oci_path} - build matrix:\n{json.dumps(matrix, indent=4)}") with open(os.environ["GITHUB_OUTPUT"], "a") as gh_out: diff --git a/src/image/utils/schema/triggers.py b/src/image/utils/schema/triggers.py index 49e928ae..74fcf487 100644 --- a/src/image/utils/schema/triggers.py +++ b/src/image/utils/schema/triggers.py @@ -1,6 +1,6 @@ import pydantic -from datetime import datetime, timezone +from datetime import datetime from typing import Dict, List, Literal, Optional @@ -25,13 +25,6 @@ class ImageUploadReleaseSchema(pydantic.BaseModel): class Config: extra = pydantic.Extra.forbid - @pydantic.validator("end_of_life") - def ensure_still_supported(cls, v: datetime) -> datetime: - """ensure that the end of life isn't reached.""" - if v < datetime.now(timezone.utc): - raise ImageReachedEol("This track has reached its end of life") - return v - class ImageUploadSchema(pydantic.BaseModel): """Schema of each upload within the image.yaml files.""" @@ -58,7 +51,7 @@ class Config: extra = pydantic.Extra.forbid @pydantic.validator("stable", "candidate", "beta", "edge", pre=True) - def _check_risks(cls, values: List) -> str: + def _check_risks(cls, values: List) -> List: """There must be at least one risk specified.""" error = "At least one risk must be specified per track." if not any(values): @@ -66,13 +59,6 @@ def _check_risks(cls, values: List) -> str: return values - @pydantic.validator("end_of_life") - def ensure_still_supported(cls, v: datetime) -> datetime: - """ensure that the end of life isn't reached.""" - if v < datetime.now(timezone.utc): - raise ImageReachedEol("This track has reached its end of life") - return v - class ImageSchema(pydantic.BaseModel): """Validates the schema of the image.yaml files."""