From ddec79ca2d98b2eb517a02efe2bdcff968e00586 Mon Sep 17 00:00:00 2001 From: Georgi Chulkov Date: Tue, 4 Aug 2026 13:57:03 +0200 Subject: [PATCH] Add support to `publishing_group` to S3 artifacts handling --- src/gardenlinux/s3/s3_artifacts.py | 9 ++++++ tests/s3/test_main.py | 2 +- tests/s3/test_s3_artifacts.py | 46 ++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/gardenlinux/s3/s3_artifacts.py b/src/gardenlinux/s3/s3_artifacts.py index d1bc0d57..3788294e 100644 --- a/src/gardenlinux/s3/s3_artifacts.py +++ b/src/gardenlinux/s3/s3_artifacts.py @@ -150,6 +150,7 @@ def upload_from_directory( feature_set_list = cname_object.feature_set_list release_timestamp = stat(release_file).st_ctime requirements_file = artifacts_dir.joinpath(f"{base_name}.requirements") + publishing_group = "" require_uefi = None secureboot = None tpm2 = None @@ -161,6 +162,11 @@ def upload_from_directory( if requirements_config.has_option(UNNAMED_SECTION, "arch"): arch = requirements_config.get(UNNAMED_SECTION, "arch") + if requirements_config.has_option(UNNAMED_SECTION, "publishing_group"): + publishing_group = requirements_config.get( + UNNAMED_SECTION, "publishing_group" + ) + if requirements_config.has_option(UNNAMED_SECTION, "uefi"): require_uefi = requirements_config.getboolean(UNNAMED_SECTION, "uefi") @@ -220,6 +226,9 @@ def upload_from_directory( if platform_variant is not None: metadata["platform_variant"] = platform_variant + if publishing_group: + metadata["publishing_group"] = publishing_group + base_name_length = len(base_name) for artifact in artifacts_dir.iterdir(): diff --git a/tests/s3/test_main.py b/tests/s3/test_main.py index 0d116bf5..7fa100ff 100644 --- a/tests/s3/test_main.py +++ b/tests/s3/test_main.py @@ -106,4 +106,4 @@ def test_main_with_expected_result( "^(.*)(md5sum|sha256sum)\\: .+$", "\\1\\2: {\\2}", result, flags=re.M ) - assert result == S3_METADATA + assert S3_METADATA == result diff --git a/tests/s3/test_s3_artifacts.py b/tests/s3/test_s3_artifacts.py index 2d5eda59..9983c46f 100644 --- a/tests/s3/test_s3_artifacts.py +++ b/tests/s3/test_s3_artifacts.py @@ -302,3 +302,49 @@ def test_upload_directory_with_requirements_override(s3_setup: S3Env) -> None: metadata = yaml.safe_load(meta_obj.get()["Body"].read()) assert metadata["require_uefi"] is False assert metadata["secureboot"] is True + + +def test_upload_directory_with_publishing_group(s3_setup: S3Env) -> None: + """A publishing_group value in the .requirements file is copied into the metadata.""" + # Arrange + env = s3_setup + (env.tmp_path / f"{env.cname}.release").write_text(RELEASE_DATA) + (env.tmp_path / f"{env.cname}.requirements").write_text( + "arch = amd64\npublishing_group = container\n" + ) + (env.tmp_path / f"{env.cname}-artifact").write_bytes(b"abc") + + # Act + artifacts = S3Artifacts(env.bucket_name) + artifacts.upload_from_directory(env.cname, env.tmp_path) + + # Assert + bucket = env.s3.Bucket(env.bucket_name) + meta_obj = next( + o for o in bucket.objects.all() if o.key == f"meta/singles/{env.cname}" + ) + metadata = yaml.safe_load(meta_obj.get()["Body"].read()) + assert metadata["publishing_group"] == "container" + + +def test_upload_directory_without_publishing_group(s3_setup: S3Env) -> None: + """An empty or absent publishing_group is not emitted, marking a standalone build.""" + # Arrange + env = s3_setup + (env.tmp_path / f"{env.cname}.release").write_text(RELEASE_DATA) + (env.tmp_path / f"{env.cname}.requirements").write_text( + "arch = amd64\npublishing_group = \n" + ) + (env.tmp_path / f"{env.cname}-artifact").write_bytes(b"abc") + + # Act + artifacts = S3Artifacts(env.bucket_name) + artifacts.upload_from_directory(env.cname, env.tmp_path) + + # Assert + bucket = env.s3.Bucket(env.bucket_name) + meta_obj = next( + o for o in bucket.objects.all() if o.key == f"meta/singles/{env.cname}" + ) + metadata = yaml.safe_load(meta_obj.get()["Body"].read()) + assert "publishing_group" not in metadata