Skip to content

Commit 22d8ffd

Browse files
committed
Add support for publishing_group per ADR0037
1 parent 2a27700 commit 22d8ffd

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

src/gardenlinux/s3/s3_artifacts.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ def upload_from_directory(
153153
require_uefi = None
154154
secureboot = None
155155
tpm2 = None
156+
publishing_group = None
156157

157158
if requirements_file.exists():
158159
requirements_config = ConfigParser(allow_unnamed_section=True)
@@ -172,6 +173,11 @@ def upload_from_directory(
172173
if requirements_config.has_option(UNNAMED_SECTION, "tpm2"):
173174
tpm2 = requirements_config.getboolean(UNNAMED_SECTION, "tpm2")
174175

176+
if requirements_config.has_option(UNNAMED_SECTION, "publishing_group"):
177+
publishing_group = requirements_config.get(
178+
UNNAMED_SECTION, "publishing_group"
179+
)
180+
175181
if arch is None:
176182
raise RuntimeError(
177183
"Architecture could not be determined from release or requirements file"
@@ -220,6 +226,9 @@ def upload_from_directory(
220226
if platform_variant is not None:
221227
metadata["platform_variant"] = platform_variant
222228

229+
if publishing_group:
230+
metadata["publishing_group"] = publishing_group
231+
223232
base_name_length = len(base_name)
224233

225234
for artifact in artifacts_dir.iterdir():

tests/s3/test_s3_artifacts.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,3 +302,49 @@ def test_upload_directory_with_requirements_override(s3_setup: S3Env) -> None:
302302
metadata = yaml.safe_load(meta_obj.get()["Body"].read())
303303
assert metadata["require_uefi"] is False
304304
assert metadata["secureboot"] is True
305+
306+
307+
def test_upload_directory_with_publishing_group(s3_setup: S3Env) -> None:
308+
"""A publishing_group value in the .requirements file is copied into the metadata."""
309+
# Arrange
310+
env = s3_setup
311+
(env.tmp_path / f"{env.cname}.release").write_text(RELEASE_DATA)
312+
(env.tmp_path / f"{env.cname}.requirements").write_text(
313+
"arch = amd64\npublishing_group = container\n"
314+
)
315+
(env.tmp_path / f"{env.cname}-artifact").write_bytes(b"abc")
316+
317+
# Act
318+
artifacts = S3Artifacts(env.bucket_name)
319+
artifacts.upload_from_directory(env.cname, env.tmp_path)
320+
321+
# Assert
322+
bucket = env.s3.Bucket(env.bucket_name)
323+
meta_obj = next(
324+
o for o in bucket.objects.all() if o.key == f"meta/singles/{env.cname}"
325+
)
326+
metadata = yaml.safe_load(meta_obj.get()["Body"].read())
327+
assert metadata["publishing_group"] == "container"
328+
329+
330+
def test_upload_directory_without_publishing_group(s3_setup: S3Env) -> None:
331+
"""An empty or absent publishing_group is not emitted, marking a standalone build."""
332+
# Arrange
333+
env = s3_setup
334+
(env.tmp_path / f"{env.cname}.release").write_text(RELEASE_DATA)
335+
(env.tmp_path / f"{env.cname}.requirements").write_text(
336+
"arch = amd64\npublishing_group = \n"
337+
)
338+
(env.tmp_path / f"{env.cname}-artifact").write_bytes(b"abc")
339+
340+
# Act
341+
artifacts = S3Artifacts(env.bucket_name)
342+
artifacts.upload_from_directory(env.cname, env.tmp_path)
343+
344+
# Assert
345+
bucket = env.s3.Bucket(env.bucket_name)
346+
meta_obj = next(
347+
o for o in bucket.objects.all() if o.key == f"meta/singles/{env.cname}"
348+
)
349+
metadata = yaml.safe_load(meta_obj.get()["Body"].read())
350+
assert "publishing_group" not in metadata

0 commit comments

Comments
 (0)