From b2214ae6bedfa12e87bd8ffc79926f01d39db378 Mon Sep 17 00:00:00 2001 From: Vivus Ignis Date: Tue, 7 Oct 2025 16:16:12 +0200 Subject: [PATCH 1/6] images info for release notes --- .../github/release_notes/__init__.py | 7 +- .../deployment_platform/__init__.py | 98 +++++++++++++++++ .../deployment_platform/ali_cloud.py | 9 ++ .../amazon_web_services.py | 6 ++ .../deployment_platform/azure.py | 42 ++++++++ .../deployment_platform/google_cloud.py | 22 ++++ .../deployment_platform/openstack.py | 23 ++++ .../openstack_baremetal.py | 6 ++ .../github/release_notes/helpers.py | 48 +++++++++ .../github/release_notes/sections.py | 102 +++++++++++++++++- 10 files changed, 360 insertions(+), 3 deletions(-) create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/__init__.py create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/azure.py create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/openstack.py create mode 100644 src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py diff --git a/src/gardenlinux/github/release_notes/__init__.py b/src/gardenlinux/github/release_notes/__init__.py index e977bc96..f69b36e0 100644 --- a/src/gardenlinux/github/release_notes/__init__.py +++ b/src/gardenlinux/github/release_notes/__init__.py @@ -1,7 +1,8 @@ -from .helpers import get_package_list +from .helpers import download_all_metadata_files, get_package_list from .sections import ( release_notes_changes_section, release_notes_compare_package_versions_section, + release_notes_image_ids_section, release_notes_software_components_section, ) @@ -19,7 +20,9 @@ def create_github_release_notes(gardenlinux_version, commitish): gardenlinux_version, package_list ) - # TODO: image ids + metadata_files = download_all_metadata_files(gardenlinux_version, commitish) + + output += release_notes_image_ids_section(metadata_files) output += "\n" output += "## Kernel Module Build Container (kmodbuild)" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/__init__.py b/src/gardenlinux/github/release_notes/deployment_platform/__init__.py new file mode 100644 index 00000000..4af7712b --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/__init__.py @@ -0,0 +1,98 @@ +from gardenlinux.constants import GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME + + +class DeploymentPlatform(): + artifacts_bucket_name = GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME + + def full_name(self): + return "Generic Deployment Platform" + + def published_images_by_regions(self, image_metadata): + published_image_metadata = image_metadata["published_image_metadata"] + flavor_name = image_metadata["s3_key"].split("/")[-1] + + regions = [] + for pset in published_image_metadata: + for p in published_image_metadata[pset]: + regions.append({"region": p["region_id"], "image_id": p["image_id"]}) + + return {"flavor": flavor_name, "regions": regions} + + def image_extension(self): + return "raw" + + def artifact_for_flavor(self, flavor): + base_url = f"https://{self.__class__.artifacts_bucket_name}.s3.amazonaws.com/objects" + filename = f"{flavor}.{self.image_extension()}" + download_url = f"{base_url}/{flavor}/{filename}" + return f"[{filename}]({download_url})" + + def region_details(self): + """ + Generate the detailed region information for the collapsible section + """ + details = "" + + match self.published_images_by_regions(): + case {"regions": regions}: + for region in regions: + match region: + case { + "region": region_name, + "image_id": image_id, + "image_name": image_name, + }: + details += f"**{region_name}:** {image_id} ({image_name})
" + case {"region": region_name, "image_id": image_id}: + details += f"**{region_name}:** {image_id}
" + case {"details": details_dict}: + for key, value in details_dict.items(): + details += f"**{key.replace('_', ' ').title()}:** {value}
" + case { + "gallery_images": gallery_images, + "marketplace_images": marketplace_images, + }: + if gallery_images: + details += "**Gallery Images:**
" + for img in gallery_images: + details += f"• {img['hyper_v_generation']} ({img['azure_cloud']}): {img['image_id']}
" + if marketplace_images: + details += "**Marketplace Images:**
" + for img in marketplace_images: + details += f"• {img['hyper_v_generation']}: {img['urn']}
" + case {"gallery_images": gallery_images}: + details += "**Gallery Images:**
" + for img in gallery_images: + details += f"• {img['hyper_v_generation']} ({img['azure_cloud']}): {img['image_id']}
" + case {"marketplace_images": marketplace_images}: + details += "**Marketplace Images:**
" + for img in marketplace_images: + details += f"• {img['hyper_v_generation']}: {img['urn']}
" + + return details + + def summary_text(self): + """ + Generate the summary text for the collapsible section + """ + match self.published_images_by_regions(): + case {"regions": regions}: + count = len(regions) + return f"{count} regions" + case {"details": _}: + return "Global availability" + case { + "gallery_images": gallery_images, + "marketplace_images": marketplace_images, + }: + gallery_count = len(gallery_images) + marketplace_count = len(marketplace_images) + return f"{gallery_count} gallery + {marketplace_count} marketplace images" + case {"gallery_images": gallery_images}: + gallery_count = len(gallery_images) + return f"{gallery_count} gallery images" + case {"marketplace_images": marketplace_images}: + marketplace_count = len(marketplace_images) + return f"{marketplace_count} marketplace images" + case _: + return "Details available" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py b/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py new file mode 100644 index 00000000..ab2374fc --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py @@ -0,0 +1,9 @@ +from . import DeploymentPlatform + + +class AliCloud(DeploymentPlatform): + def full_name(self): + return "Alibaba Cloud" + + def image_extension(self): + return "qcow2" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py b/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py new file mode 100644 index 00000000..34427e78 --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py @@ -0,0 +1,6 @@ +from . import DeploymentPlatform + + +class AmazonWebServices(DeploymentPlatform): + def full_name(self): + return "Amazon Web Services" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/azure.py b/src/gardenlinux/github/release_notes/deployment_platform/azure.py new file mode 100644 index 00000000..00aae1c3 --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/azure.py @@ -0,0 +1,42 @@ +from . import DeploymentPlatform + + +class Azure(DeploymentPlatform): + def full_name(self): + return "Microsoft Azure" + + def image_extension(self): + return "vhd" + + def published_images_by_regions(self, image_metadata): + published_image_metadata = image_metadata["published_image_metadata"] + flavor_name = image_metadata["s3_key"].split("/")[-1] + + gallery_images = [] + marketplace_images = [] + + for pset in published_image_metadata: + if pset == "published_gallery_images": + for gallery_image in published_image_metadata[pset]: + gallery_images.append( + { + "hyper_v_generation": gallery_image["hyper_v_generation"], + "azure_cloud": gallery_image["azure_cloud"], + "image_id": gallery_image["community_gallery_image_id"], + } + ) + + if pset == "published_marketplace_images": + for market_image in published_image_metadata[pset]: + marketplace_images.append( + { + "hyper_v_generation": market_image["hyper_v_generation"], + "urn": market_image["urn"], + } + ) + + return { + "flavor": flavor_name, + "gallery_images": gallery_images, + "marketplace_images": marketplace_images, + } diff --git a/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py b/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py new file mode 100644 index 00000000..76b82e76 --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py @@ -0,0 +1,22 @@ +from . import DeploymentPlatform + + +class GoogleCloud(DeploymentPlatform): + def full_name(self): + return "Google Cloud Platform" + + def image_extension(self): + return "gcpimage.tar.gz" + + def published_images_by_regions(self, image_metadata): + published_image_metadata = image_metadata["published_image_metadata"] + flavor_name = image_metadata["s3_key"].split("/")[-1] + + details = {} + if "gcp_image_name" in published_image_metadata: + details["image_name"] = published_image_metadata["gcp_image_name"] + if "gcp_project_name" in published_image_metadata: + details["project"] = published_image_metadata["gcp_project_name"] + details["availability"] = "Global (all regions)" + + return {"flavor": flavor_name, "details": details} diff --git a/src/gardenlinux/github/release_notes/deployment_platform/openstack.py b/src/gardenlinux/github/release_notes/deployment_platform/openstack.py new file mode 100644 index 00000000..35873676 --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/openstack.py @@ -0,0 +1,23 @@ +from . import DeploymentPlatform + + +class OpenStack(DeploymentPlatform): + def full_name(self): + return "OpenStack" + + def published_images_by_regions(self, image_metadata): + published_image_metadata = image_metadata["published_image_metadata"] + flavor_name = image_metadata["s3_key"].split("/")[-1] + + regions = [] + if "published_openstack_images" in published_image_metadata: + for image in published_image_metadata["published_openstack_images"]: + regions.append( + { + "region": image["region_name"], + "image_id": image["image_id"], + "image_name": image["image_name"], + } + ) + + return {"flavor": flavor_name, "regions": regions} diff --git a/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py b/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py new file mode 100644 index 00000000..1f153c45 --- /dev/null +++ b/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py @@ -0,0 +1,6 @@ +from .openstack import OpenStack + + +class OpenStackBareMetal(OpenStack): + def full_name(self): + return "OpenStack Baremetal" diff --git a/src/gardenlinux/github/release_notes/helpers.py b/src/gardenlinux/github/release_notes/helpers.py index 78a8f344..91438879 100644 --- a/src/gardenlinux/github/release_notes/helpers.py +++ b/src/gardenlinux/github/release_notes/helpers.py @@ -116,3 +116,51 @@ def download_metadata_file( s3_artifacts.bucket.download_file( release_object.key, artifacts_dir.joinpath(f"{cname}.s3_metadata.yaml") ) + + +def get_variant_from_flavor(flavor_name): + """ + Determine the variant from a flavor name by checking for variant suffixes. + Returns the variant key (e.g., 'legacy', 'usi', 'tpm2_trustedboot'). + """ + match flavor_name: + case name if "_usi" in name: + return "usi" + case name if "_tpm2_trustedboot" in name: + return "tpm2_trustedboot" + case _: + return "legacy" + + +def get_platform_display_name(platform, clouds): + """ + Get the display name for a platform. + """ + match platform: + case "ali" | "openstackbaremetal" | "openstack" | "azure" | "gcp" | "aws": + return clouds[platform] + case _: + return platform.upper() + + +def get_platform_release_note_data(metadata, platform): + """ + Get the appropriate cloud release note data based on platform. + Returns the structured data dictionary. + """ + match platform: + case "ali": + return _ali_release_note(metadata) + case "aws": + return _aws_release_note(metadata) + case "gcp": + return _gcp_release_note(metadata) + case "azure": + return _azure_release_note(metadata) + case "openstack": + return _openstack_release_note(metadata) + case "openstackbaremetal": + return _openstackbaremetal_release_note(metadata) + case _: + LOGGER.error(f"unknown platform {platform}") + return None diff --git a/src/gardenlinux/github/release_notes/sections.py b/src/gardenlinux/github/release_notes/sections.py index fbfa21e2..fccf2450 100644 --- a/src/gardenlinux/github/release_notes/sections.py +++ b/src/gardenlinux/github/release_notes/sections.py @@ -2,14 +2,38 @@ import textwrap import requests +import yaml +from yaml import SafeLoader from gardenlinux.constants import GLVD_BASE_URL, REQUESTS_TIMEOUTS from gardenlinux.logger import LoggerSetup -from .helpers import compare_apt_repo_versions +from .deployment_platform.ali_cloud import AliCloud +from .deployment_platform.amazon_web_services import AmazonWebServices +from .deployment_platform.azure import Azure +from .deployment_platform.google_cloud import GoogleCloud +from .deployment_platform.openstack import OpenStack +from .deployment_platform.openstack_baremetal import OpenStackBareMetal +from .helpers import compare_apt_repo_versions, get_variant_from_flavor LOGGER = LoggerSetup.get_logger("gardenlinux.github.release_notes", "INFO") +IMAGE_IDS_VARIANT_ORDER = ["legacy", "usi", "tpm2_trustedboot"] +IMAGE_IDS_VARIANT_TABLE_NAMES = {"legacy": "Default", "usi": "USI", "tpm2_trustedboot": "TPM2"} +IMAGE_IDS_VARIANT_NAMES = { + "legacy": "Default", + "usi": "USI (Unified System Image)", + "tpm2_trustedboot": "TPM2 Trusted Boot", +} +PLATFORMS = { + "ali": AliCloud(), + "aws": AmazonWebServices(), + "gcp": GoogleCloud(), + "azure": Azure(), + "openstack": OpenStack(), + "openstackbaremetal": OpenStackBareMetal(), +} + def release_notes_changes_section(gardenlinux_version): """ @@ -110,3 +134,79 @@ def release_notes_compare_package_versions_section(gardenlinux_version, package_ f"Unexpected version number format {gardenlinux_version}, expected format (major is int).(patch is int)" ) return output + + +def generate_table_format(grouped_data): + """ + Generate the table format with collapsible region details + """ + output = "| Variant | Platform | Architecture | Flavor | Regions & Image IDs | Download Links |\n" + output += "|---------|----------|--------------|--------|---------------------|----------------|\n" + + for variant in IMAGE_IDS_VARIANT_ORDER: + if variant not in grouped_data: + continue + + for platform in sorted(grouped_data[variant].keys()): + for arch in sorted(grouped_data[variant][platform].keys()): + for metadata in grouped_data[variant][platform][arch]: + data = PLATFORMS[platform].published_images_by_regions(metadata) + if data is None: + continue + + details_content = PLATFORMS[platform].region_details() + summary_text = PLATFORMS[platform].summary_text() + + download_link = PLATFORMS[platform].artifact_for_flavor(data['flavor']) + + variant_display = IMAGE_IDS_VARIANT_TABLE_NAMES[variant] + output += (f"| {variant_display} " + f"| {PLATFORMS[platform].full_name()} " + f"| {arch} " + f"| `{data['flavor']}` " + f"|
{summary_text}
{details_content}
" + f"|
Download
{download_link}
" + "|\n") + + return output + + +def release_notes_image_ids_section(metadata_files): + """ + Groups metadata files by image variant, then platform, then architecture + """ + # Group metadata by variant, platform, and architecture + grouped_data = {} + + for metadata_file_path in metadata_files: + with open(metadata_file_path) as f: + metadata = yaml.load(f, Loader=SafeLoader) + + published_image_metadata = metadata["published_image_metadata"] + # Skip if no publishing metadata found + if published_image_metadata is None: + continue + + platform = metadata["platform"] + arch = metadata["architecture"] + + # Determine variant from flavor name + flavor_name = metadata["s3_key"].split("/")[-1] + variant = get_variant_from_flavor(flavor_name) + + if variant not in grouped_data: + grouped_data[variant] = {} + if platform not in grouped_data[variant]: + grouped_data[variant][platform] = {} + if arch not in grouped_data[variant][platform]: + grouped_data[variant][platform][arch] = [] + + grouped_data[variant][platform][arch].append(metadata) + + output = "## Published Images\n\n" + + output += "
\n📊 Table View\n\n" + output += generate_table_format(grouped_data) + output += "\n
\n\n" + + return output From 5b10c9d319508cfaf616f02c42afef46d3a7f4da Mon Sep 17 00:00:00 2001 From: Vivus Ignis Date: Wed, 8 Oct 2025 13:00:38 +0200 Subject: [PATCH 2/6] working deployment platform classes --- src/gardenlinux/github/__main__.py | 3 +- .../github/release_notes/__init__.py | 4 +- .../deployment_platform/__init__.py | 18 +- .../deployment_platform/ali_cloud.py | 3 + .../amazon_web_services.py | 14 + .../deployment_platform/azure.py | 3 + .../deployment_platform/google_cloud.py | 3 + .../deployment_platform/openstack.py | 3 + .../openstack_baremetal.py | 3 + .../github/release_notes/helpers.py | 4 +- .../github/release_notes/sections.py | 89 +- .../github_release_notes_1877.3.md | 1208 +++++++++++++++++ test-data/release_notes/glvd_1877.3.json | 193 +++ tests/github/test_create_github_release.py | 5 +- .../test_create_github_release_notes.py | 78 +- 15 files changed, 1615 insertions(+), 16 deletions(-) create mode 100644 test-data/release_notes/github_release_notes_1877.3.md create mode 100644 test-data/release_notes/glvd_1877.3.json diff --git a/src/gardenlinux/github/__main__.py b/src/gardenlinux/github/__main__.py index 9ded0bce..de2a6f63 100644 --- a/src/gardenlinux/github/__main__.py +++ b/src/gardenlinux/github/__main__.py @@ -1,5 +1,6 @@ import argparse +from gardenlinux.constants import GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME from gardenlinux.logger import LoggerSetup from .release import create_github_release, upload_to_github_release_page, write_to_release_id_file @@ -30,7 +31,7 @@ def main(): args = parser.parse_args() if args.command == "create": - body = create_github_release_notes(args.tag, args.commit) + body = create_github_release_notes(args.tag, args.commit, GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME) if args.dry_run: print("Dry Run ...") print("This release would be created:") diff --git a/src/gardenlinux/github/release_notes/__init__.py b/src/gardenlinux/github/release_notes/__init__.py index f69b36e0..2a9804f9 100644 --- a/src/gardenlinux/github/release_notes/__init__.py +++ b/src/gardenlinux/github/release_notes/__init__.py @@ -7,7 +7,7 @@ ) -def create_github_release_notes(gardenlinux_version, commitish): +def create_github_release_notes(gardenlinux_version, commitish, releases_s3_bucket_name): package_list = get_package_list(gardenlinux_version) output = "" @@ -20,7 +20,7 @@ def create_github_release_notes(gardenlinux_version, commitish): gardenlinux_version, package_list ) - metadata_files = download_all_metadata_files(gardenlinux_version, commitish) + metadata_files = download_all_metadata_files(gardenlinux_version, commitish, releases_s3_bucket_name) output += release_notes_image_ids_section(metadata_files) diff --git a/src/gardenlinux/github/release_notes/deployment_platform/__init__.py b/src/gardenlinux/github/release_notes/deployment_platform/__init__.py index 4af7712b..0c859ec9 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/__init__.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/__init__.py @@ -4,6 +4,9 @@ class DeploymentPlatform(): artifacts_bucket_name = GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME + def short_name(self): + return "generic" + def full_name(self): return "Generic Deployment Platform" @@ -21,19 +24,22 @@ def published_images_by_regions(self, image_metadata): def image_extension(self): return "raw" - def artifact_for_flavor(self, flavor): + def artifact_for_flavor(self, flavor, markdown_format=True): base_url = f"https://{self.__class__.artifacts_bucket_name}.s3.amazonaws.com/objects" filename = f"{flavor}.{self.image_extension()}" download_url = f"{base_url}/{flavor}/{filename}" - return f"[{filename}]({download_url})" + if markdown_format: + return f"[{filename}]({download_url})" + else: + return download_url - def region_details(self): + def region_details(self, image_metadata): """ Generate the detailed region information for the collapsible section """ details = "" - match self.published_images_by_regions(): + match self.published_images_by_regions(image_metadata): case {"regions": regions}: for region in regions: match region: @@ -71,11 +77,11 @@ def region_details(self): return details - def summary_text(self): + def summary_text(self, image_metadata): """ Generate the summary text for the collapsible section """ - match self.published_images_by_regions(): + match self.published_images_by_regions(image_metadata): case {"regions": regions}: count = len(regions) return f"{count} regions" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py b/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py index ab2374fc..a9d38c08 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/ali_cloud.py @@ -2,6 +2,9 @@ class AliCloud(DeploymentPlatform): + def short_name(self): + return "ali" + def full_name(self): return "Alibaba Cloud" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py b/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py index 34427e78..4353fe80 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/amazon_web_services.py @@ -2,5 +2,19 @@ class AmazonWebServices(DeploymentPlatform): + def short_name(self): + return "aws" + def full_name(self): return "Amazon Web Services" + + def published_images_by_regions(self, image_metadata): + published_image_metadata = image_metadata["published_image_metadata"] + flavor_name = image_metadata["s3_key"].split("/")[-1] + + regions = [] + for pset in published_image_metadata: + for p in published_image_metadata[pset]: + regions.append({"region": p["aws_region_id"], "image_id": p["ami_id"]}) + + return {"flavor": flavor_name, "regions": regions} diff --git a/src/gardenlinux/github/release_notes/deployment_platform/azure.py b/src/gardenlinux/github/release_notes/deployment_platform/azure.py index 00aae1c3..ee416658 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/azure.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/azure.py @@ -2,6 +2,9 @@ class Azure(DeploymentPlatform): + def short_name(self): + return "azure" + def full_name(self): return "Microsoft Azure" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py b/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py index 76b82e76..f42457c7 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/google_cloud.py @@ -2,6 +2,9 @@ class GoogleCloud(DeploymentPlatform): + def short_name(self): + return "gcp" + def full_name(self): return "Google Cloud Platform" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/openstack.py b/src/gardenlinux/github/release_notes/deployment_platform/openstack.py index 35873676..06cdd9c2 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/openstack.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/openstack.py @@ -2,6 +2,9 @@ class OpenStack(DeploymentPlatform): + def short_name(self): + return "openstack" + def full_name(self): return "OpenStack" diff --git a/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py b/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py index 1f153c45..ddef8fd7 100644 --- a/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py +++ b/src/gardenlinux/github/release_notes/deployment_platform/openstack_baremetal.py @@ -2,5 +2,8 @@ class OpenStackBareMetal(OpenStack): + def short_name(self): + return "openstackbaremetal" + def full_name(self): return "OpenStack Baremetal" diff --git a/src/gardenlinux/github/release_notes/helpers.py b/src/gardenlinux/github/release_notes/helpers.py index 91438879..911ee7c6 100644 --- a/src/gardenlinux/github/release_notes/helpers.py +++ b/src/gardenlinux/github/release_notes/helpers.py @@ -49,7 +49,7 @@ def compare_apt_repo_versions(previous_version, current_version): return output -def download_all_metadata_files(version, commitish): +def download_all_metadata_files(version, commitish, s3_bucket_name): repo = Repo(".") commit = repo.commit(commitish) flavors_data = commit.tree["flavors.yaml"].data_stream.read().decode("utf-8") @@ -60,7 +60,7 @@ def download_all_metadata_files(version, commitish): shutil.rmtree(local_dest_path) local_dest_path.mkdir(mode=0o755, exist_ok=False) - s3_artifacts = S3Artifacts(GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME) + s3_artifacts = S3Artifacts(s3_bucket_name) commitish_short = commitish[:8] diff --git a/src/gardenlinux/github/release_notes/sections.py b/src/gardenlinux/github/release_notes/sections.py index fccf2450..40e2a02d 100644 --- a/src/gardenlinux/github/release_notes/sections.py +++ b/src/gardenlinux/github/release_notes/sections.py @@ -154,8 +154,8 @@ def generate_table_format(grouped_data): if data is None: continue - details_content = PLATFORMS[platform].region_details() - summary_text = PLATFORMS[platform].summary_text() + details_content = PLATFORMS[platform].region_details(metadata) + summary_text = PLATFORMS[platform].summary_text(metadata) download_link = PLATFORMS[platform].artifact_for_flavor(data['flavor']) @@ -165,12 +165,90 @@ def generate_table_format(grouped_data): f"| {arch} " f"| `{data['flavor']}` " f"|
{summary_text}
{details_content}
" - f"|
Download
{download_link}
" + f"|
Download
{download_link}
" "|\n") return output +def generate_detailed_format(grouped_data): + """ + Generate the old detailed format with YAML + """ + output = "" + + for variant in IMAGE_IDS_VARIANT_ORDER: + if variant not in grouped_data: + continue + + output += ( + f"
\nVariant - {IMAGE_IDS_VARIANT_NAMES[variant]}\n\n" + ) + output += f"### Variant - {IMAGE_IDS_VARIANT_NAMES[variant]}\n\n" + + for platform in sorted(grouped_data[variant].keys()): + platform_long_name = PLATFORMS[platform].full_name() + platform_short_name = PLATFORMS[platform].short_name().upper() + output += f"
\n{platform_short_name} - {platform_long_name}\n\n" + output += f"#### {platform_short_name} - {platform_long_name}\n\n" + + for arch in sorted(grouped_data[variant][platform].keys()): + output += f"
\n{arch}\n\n" + output += f"##### {arch}\n\n" + output += "```\n" + + # Process all metadata for this variant/platform/architecture + for metadata in grouped_data[variant][platform][arch]: + data = PLATFORMS[platform].published_images_by_regions(metadata) + if data is None: + continue + + output += f"- flavor: {data['flavor']}\n" + + download_url = PLATFORMS[platform].artifact_for_flavor(data['flavor'], markdown_format=False) + output += f" download_url: {download_url}\n" + + if "regions" in data: + output += " regions:\n" + for region in data["regions"]: + if "image_name" in region: + output += f" - region: {region['region']}\n" + output += f" image_id: {region['image_id']}\n" + output += f" image_name: {region['image_name']}\n" + else: + output += f" - region: {region['region']}\n" + output += f" image_id: {region['image_id']}\n" + elif "details" in data and platform != "gcp": + output += " details:\n" + for key, value in data["details"].items(): + output += f" {key}: {value}\n" + elif platform == "gcp" and "details" in data: + # For GCP, move details up to same level as flavor + for key, value in data["details"].items(): + output += f" {key}: {value}\n" + elif "gallery_images" in data or "marketplace_images" in data: + if data.get("gallery_images"): + output += " gallery_images:\n" + for img in data["gallery_images"]: + output += f" - hyper_v_generation: {img['hyper_v_generation']}\n" + output += f" azure_cloud: {img['azure_cloud']}\n" + output += f" image_id: {img['image_id']}\n" + if data.get("marketplace_images"): + output += " marketplace_images:\n" + for img in data["marketplace_images"]: + output += f" - hyper_v_generation: {img['hyper_v_generation']}\n" + output += f" urn: {img['urn']}\n" + + output += "```\n\n" + output += "
\n\n" + + output += "
\n\n" + + output += "
\n\n" + + return output + + def release_notes_image_ids_section(metadata_files): """ Groups metadata files by image variant, then platform, then architecture @@ -209,4 +287,9 @@ def release_notes_image_ids_section(metadata_files): output += generate_table_format(grouped_data) output += "\n\n\n" + # Old format + output += "
\n📝 Detailed View\n\n" + output += generate_detailed_format(grouped_data) + output += "\n
\n\n" + return output diff --git a/test-data/release_notes/github_release_notes_1877.3.md b/test-data/release_notes/github_release_notes_1877.3.md new file mode 100644 index 00000000..ac22830f --- /dev/null +++ b/test-data/release_notes/github_release_notes_1877.3.md @@ -0,0 +1,1208 @@ +## Changes +The following packages have been upgraded, to address the mentioned CVEs: +- upgrade 'gnutls28' from `3.8.9-2` to `3.8.9-3gl0+bp1877` + - CVE-2025-32988 + - CVE-2025-32989 + - CVE-2025-32990 + - CVE-2025-6395 +- upgrade 'sqlite3' from `3.46.1-4` to `3.46.1-7gl0+bp1877` + - CVE-2025-6965 +- upgrade 'dpkg' from `1.22.18` to `1.22.21gl0+bp1877` + - CVE-2025-6297 +- upgrade 'linux' from `6.12.40-2gl0` to `6.12.44-3gl0` + - CVE-2025-38676 + - CVE-2025-38683 + - CVE-2025-38684 + - CVE-2025-38686 + - CVE-2025-38687 + - CVE-2025-38688 + - CVE-2025-38691 + - CVE-2025-38692 + - CVE-2025-38695 + - CVE-2025-38696 + - CVE-2025-38699 + - CVE-2025-38700 + - CVE-2025-38701 + - CVE-2025-38704 + - CVE-2025-38708 + - CVE-2025-38709 + - CVE-2025-38710 + - CVE-2025-38711 + - CVE-2025-38717 + - CVE-2025-38718 + - CVE-2025-38721 + - CVE-2025-38722 + - CVE-2025-38724 + - CVE-2025-38726 + - CVE-2025-38727 + - CVE-2025-38728 + - CVE-2025-38730 + - CVE-2025-38601 + - CVE-2025-38604 + - CVE-2025-38608 + - CVE-2025-38609 + - CVE-2025-38610 + - CVE-2025-38614 + - CVE-2022-50031 + - CVE-2022-50083 + - CVE-2023-53137 + - CVE-2025-37744 + - CVE-2025-38500 + - CVE-2025-38501 + - CVE-2025-38732 + - CVE-2025-38734 + - CVE-2025-38735 + - CVE-2025-38737 + - CVE-2025-39673 + - CVE-2025-39676 + - CVE-2025-39681 + - CVE-2025-39682 + - CVE-2025-39683 + - CVE-2025-39684 + - CVE-2025-39685 + - CVE-2025-39686 + - CVE-2025-39689 + - CVE-2025-39691 + - CVE-2025-39692 + - CVE-2025-39695 + - CVE-2025-39697 + - CVE-2025-39698 + - CVE-2025-39700 + - CVE-2025-39701 + - CVE-2025-39702 + - CVE-2025-39703 + - CVE-2025-39718 + - CVE-2025-39720 + - CVE-2025-39721 + - CVE-2025-39722 + - CVE-2025-39724 + - CVE-2025-39727 + - CVE-2025-39730 + - CVE-2025-39732 + - CVE-2025-21884 + - CVE-2025-38335 + - CVE-2025-38351 + - CVE-2025-38553 + - CVE-2025-38559 + - CVE-2025-38560 + - CVE-2025-38561 + - CVE-2025-38562 + - CVE-2025-38563 + - CVE-2025-38565 + - CVE-2025-38566 + - CVE-2025-38568 + - CVE-2025-38569 + - CVE-2025-38571 + - CVE-2025-38572 + - CVE-2025-38574 + - CVE-2025-38581 + - CVE-2025-38582 + - CVE-2025-38583 + - CVE-2025-38586 + - CVE-2025-38587 + - CVE-2025-38588 + - CVE-2025-38590 + - CVE-2025-38593 + - CVE-2025-38616 + - CVE-2025-38617 + - CVE-2025-38618 + - CVE-2025-38622 + - CVE-2025-38624 + - CVE-2025-38625 + - CVE-2025-38628 + - CVE-2025-38631 + - CVE-2025-38632 + - CVE-2025-38634 + - CVE-2025-38635 + - CVE-2025-38639 + - CVE-2025-38640 + - CVE-2025-38644 + - CVE-2025-38645 + - CVE-2025-38646 + - CVE-2025-38653 + - CVE-2025-38659 + - CVE-2025-38660 + - CVE-2025-38666 + - CVE-2025-38668 + - CVE-2025-38670 + - CVE-2025-38675 + - CVE-2025-39736 + - CVE-2025-39737 + - CVE-2025-39738 + - CVE-2025-39739 + - CVE-2025-39742 + - CVE-2025-39744 + - CVE-2025-39746 + - CVE-2025-39748 + - CVE-2025-39749 + - CVE-2025-39750 + - CVE-2025-39752 + - CVE-2025-39753 + - CVE-2025-39754 + - CVE-2025-39756 + - CVE-2025-39758 + - CVE-2025-39759 + - CVE-2025-39761 + - CVE-2025-39763 + - CVE-2025-39766 + - CVE-2025-39770 + - CVE-2025-39773 + - CVE-2025-39776 + - CVE-2025-39779 + - CVE-2025-39780 + - CVE-2025-39782 + - CVE-2025-39783 + - CVE-2025-39787 + - CVE-2025-39788 + - CVE-2025-39790 + - CVE-2025-39791 +- upgrade 'iputils' from `3:20240905-3` to `3:20250605-1gl0~bp1877` + - CVE-2025-47268 + +## Software Component Versions +``` +containerd 2.1.4-0gl1+bp1877 +curl 8.14.1-2gl0+bp1877 +libc-bin 2.41-7 +linux-image-amd64 6.12.44-3gl0 +openssh-server 1:10.0p1-5gl0 +openssl 3.5.0-1gl0 +runc 1.3.0-1gl0+bp1877 +systemd 257.5-2gl0 +``` + +## Changes in Package Versions Compared to 1877.2 +| Package | 1877.2 | 1877.3 | +|---------|--------------------|-------------------| +|bpftool | 7.5.0+6.12.40-2gl0 | 7.5.0+6.12.44-3gl0 | +|bpftool-dbgsym | 7.5.0+6.12.40-2gl0 | 7.5.0+6.12.44-3gl0 | +|dpkg | 1.22.18 | 1.22.21gl0+bp1877 | +|dpkg-dbgsym | - | 1.22.21gl0+bp1877 | +|dpkg-dev | 1.22.18 | 1.22.21gl0+bp1877 | +|dselect | - | 1.22.21gl0+bp1877 | +|dselect-dbgsym | - | 1.22.21gl0+bp1877 | +|gnutls-bin | - | 3.8.9-3gl0+bp1877 | +|gnutls-bin-dbgsym | - | 3.8.9-3gl0+bp1877 | +|gnutls-doc | - | 3.8.9-3gl0+bp1877 | +|golang-github-opencontainers-runc-dev | 1.1.15+ds1-2gl1+bp1877 | 1.3.0-1gl0+bp1877 | +|hyperv-daemons | 6.12.40-2gl0 | 6.12.44-3gl0 | +|hyperv-daemons-dbgsym | 6.12.40-2gl0 | 6.12.44-3gl0 | +|intel-sdsi | 6.12.40-2gl0 | 6.12.44-3gl0 | +|intel-sdsi-dbgsym | 6.12.40-2gl0 | 6.12.44-3gl0 | +|iputils-arping | 3:20240905-3 | 3:20250605-1gl0~bp1877 | +|iputils-arping-dbgsym | - | 3:20250605-1gl0~bp1877 | +|iputils-clockdiff | - | 3:20250605-1gl0~bp1877 | +|iputils-clockdiff-dbgsym | - | 3:20250605-1gl0~bp1877 | +|iputils-ping | 3:20240905-3 | 3:20250605-1gl0~bp1877 | +|iputils-ping-dbgsym | - | 3:20250605-1gl0~bp1877 | +|iputils-tracepath | 3:20240905-3 | 3:20250605-1gl0~bp1877 | +|iputils-tracepath-dbgsym | - | 3:20250605-1gl0~bp1877 | +|lemon | - | 3.46.1-7gl0+bp1877 | +|lemon-dbgsym | - | 3.46.1-7gl0+bp1877 | +|libcpupower-dev | 6.12.40-2gl0 | 6.12.44-3gl0 | +|libcpupower1 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|libcpupower1-dbgsym | 6.12.40-2gl0 | 6.12.44-3gl0 | +|libdpkg-dev | - | 1.22.21gl0+bp1877 | +|libdpkg-perl | 1.22.18 | 1.22.21gl0+bp1877 | +|libgnutls-dane0t64 | 3.8.9-2 | 3.8.9-3gl0+bp1877 | +|libgnutls-dane0t64-dbgsym | - | 3.8.9-3gl0+bp1877 | +|libgnutls-openssl27t64 | 3.8.9-2 | 3.8.9-3gl0+bp1877 | +|libgnutls-openssl27t64-dbgsym | - | 3.8.9-3gl0+bp1877 | +|libgnutls28-dev | 3.8.9-2 | 3.8.9-3gl0+bp1877 | +|libgnutls30t64 | 3.8.9-2 | 3.8.9-3gl0+bp1877 | +|libgnutls30t64-dbgsym | - | 3.8.9-3gl0+bp1877 | +|libmd-dev | - | 1.1.0-2+b1 | +|libsqlite3-0 | 3.46.1-4 | 3.46.1-7gl0+bp1877 | +|libsqlite3-0-dbgsym | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-dev | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-ext-csv | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-ext-csv-dbgsym | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-ext-icu | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-ext-icu-dbgsym | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-tcl | - | 3.46.1-7gl0+bp1877 | +|libsqlite3-tcl-dbgsym | - | 3.46.1-7gl0+bp1877 | +|linux-base | 4.11 | 4.12gl0+bp1877 | +|linux-bpf-dev | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-config-6.12 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-cpupower | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-cpupower-dbgsym | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-headers-6.12.40-amd64 | 6.12.40-2gl0 | - | +|linux-headers-6.12.40-cloud-amd64 | 6.12.40-2gl0 | - | +|linux-headers-6.12.40-common | 6.12.40-2gl0 | - | +|linux-headers-6.12.40-firecracker-amd64 | 6.12.40-2gl0 | - | +|linux-headers-6.12.44-amd64 | - | 6.12.44-3gl0 | +|linux-headers-6.12.44-cloud-amd64 | - | 6.12.44-3gl0 | +|linux-headers-6.12.44-common | - | 6.12.44-3gl0 | +|linux-headers-6.12.44-firecracker-amd64 | - | 6.12.44-3gl0 | +|linux-headers-amd64 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-headers-cloud-amd64 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-headers-firecracker-amd64 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-image-6.12.40-amd64 | 6.12.40-2gl0 | - | +|linux-image-6.12.40-amd64-dbg | 6.12.40-2gl0 | - | +|linux-image-6.12.40-cloud-amd64 | 6.12.40-2gl0 | - | +|linux-image-6.12.40-cloud-amd64-dbg | 6.12.40-2gl0 | - | +|linux-image-6.12.40-firecracker-amd64 | 6.12.40-2gl0 | - | +|linux-image-6.12.40-firecracker-amd64-dbg | 6.12.40-2gl0 | - | +|linux-image-6.12.44-amd64 | - | 6.12.44-3gl0 | +|linux-image-6.12.44-amd64-dbg | - | 6.12.44-3gl0 | +|linux-image-6.12.44-cloud-amd64 | - | 6.12.44-3gl0 | +|linux-image-6.12.44-cloud-amd64-dbg | - | 6.12.44-3gl0 | +|linux-image-6.12.44-firecracker-amd64 | - | 6.12.44-3gl0 | +|linux-image-6.12.44-firecracker-amd64-dbg | - | 6.12.44-3gl0 | +|linux-image-amd64 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-image-amd64-dbg | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-image-cloud-amd64 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-image-cloud-amd64-dbg | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-image-firecracker-amd64 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-image-firecracker-amd64-dbg | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-kbuild-6.12.40 | 6.12.40-2gl0 | - | +|linux-kbuild-6.12.40-dbgsym | 6.12.40-2gl0 | - | +|linux-kbuild-6.12.44 | - | 6.12.44-3gl0 | +|linux-kbuild-6.12.44-dbgsym | - | 6.12.44-3gl0 | +|linux-libc-dev | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-source | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-source-6.12 | 6.12.40-2gl0 | 6.12.44-3gl0 | +|linux-support-6.12.40 | 6.12.40-2gl0 | - | +|linux-support-6.12.44 | - | 6.12.44-3gl0 | +|linux-sysctl-defaults | 4.11 | 4.12gl0+bp1877 | +|rtla | 6.12.40-2gl0 | 6.12.44-3gl0 | +|rtla-dbgsym | 6.12.40-2gl0 | 6.12.44-3gl0 | +|runc | 1.1.15+ds1-2gl1+bp1877 | 1.3.0-1gl0+bp1877 | +|runc-dbgsym | 1.1.15+ds1-2gl1+bp1877 | 1.3.0-1gl0+bp1877 | +|sqlite3 | - | 3.46.1-7gl0+bp1877 | +|sqlite3-dbgsym | - | 3.46.1-7gl0+bp1877 | +|sqlite3-doc | - | 3.46.1-7gl0+bp1877 | +|sqlite3-tools | - | 3.46.1-7gl0+bp1877 | +|sqlite3-tools-dbgsym | - | 3.46.1-7gl0+bp1877 | +|usbip | 2.0+6.12.40-2gl0 | 2.0+6.12.44-3gl0 | +|usbip-dbgsym | 2.0+6.12.40-2gl0 | 2.0+6.12.44-3gl0 | +## Published Images + +
+📊 Table View + +| Variant | Platform | Architecture | Flavor | Regions & Image IDs | Download Links | +|---------|----------|--------------|--------|---------------------|----------------| +| Default | Alibaba Cloud | amd64 | `ali-gardener_prod-amd64-1877.3-75df9f40` |
28 regions
**cn-qingdao:** m-m5efm8l2bltkbloui235
**cn-beijing:** m-2zee5ebi20ltzy5et7in
**cn-zhangjiakou:** m-8vbddy2wfex9nb29afcy
**cn-huhehaote:** m-hp3bx14og6cw9thujw1d
**cn-wulanchabu:** m-0jlh1iq2f3bryb5okjdk
**cn-hangzhou:** m-bp13aseh5a2wn0s5rdz6
**cn-shanghai:** m-uf61jbe9n8a9291h4u21
**cn-nanjing:** m-gc77bfbctuzphl2bpk0o
**cn-shenzhen:** m-wz9gio8m5ey0foj0g4xx
**cn-heyuan:** m-f8zdn54v0blnsafxb1t5
**cn-guangzhou:** m-7xv0q5feffsxxyttxdy9
**cn-fuzhou:** m-gw07bfbctuzphl2bpk0p
**cn-wuhan-lr:** m-n4a1u2avlb9pq0u5bdms
**cn-chengdu:** m-2vc5saul2saa2z57h216
**cn-hongkong:** m-j6c4zk6mwb2673iq5wrz
**ap-northeast-1:** m-6weibwo3vrt7ar7nelc9
**ap-northeast-2:** m-mj73oldn06th2vy0ymhv
**ap-southeast-1:** m-t4ngrf81d0fohwq493pw
**ap-southeast-3:** m-8psd64gzc1eru0qld7cc
**ap-southeast-6:** m-5tsdd6k3z1vvdyyio7zn
**ap-southeast-5:** m-k1aj4usnhqcssa2fpy0c
**ap-southeast-7:** m-0jo6uwekvn0gnwhwnq3s
**us-east-1:** m-0xi8netpfc2fdwfstz3c
**us-west-1:** m-rj9gwpx907qv6p6x8w45
**na-south-1:** m-4hfi34x77oaeznwuulq6
**eu-west-1:** m-d7o2ny5xc0m3kacxjbem
**me-east-1:** m-eb39mgohcec6gaynet9l
**eu-central-1:** m-gw86dlqmpaugljiykx91
|
Download
[ali-gardener_prod-amd64-1877.3-75df9f40.qcow2](https://gardenlinux-github-releases.s3.amazonaws.com/objects/ali-gardener_prod-amd64-1877.3-75df9f40/ali-gardener_prod-amd64-1877.3-75df9f40.qcow2)
| +| Default | Amazon Web Services | amd64 | `aws-gardener_prod-amd64-1877.3-75df9f40` |
21 regions
**ap-south-1:** ami-00c6adf1de4dd746a
**eu-north-1:** ami-07ad3940828172b90
**eu-west-3:** ami-071f4f48679d86638
**eu-south-1:** ami-0b10af1a19df9f038
**eu-west-2:** ami-0e2b7fe07573b71cd
**eu-west-1:** ami-01c547eb85d61da61
**ap-northeast-3:** ami-0dad917ede94cd3c7
**ap-northeast-2:** ami-0ecbeaf40d4643016
**ap-northeast-1:** ami-0b7225242babad11c
**me-central-1:** ami-0d298e552bf051bc7
**ca-central-1:** ami-0af8422162c8f056e
**sa-east-1:** ami-05d885175e942fc80
**ap-southeast-1:** ami-0a9802680adf7e430
**ap-southeast-2:** ami-07ed6f1e62fbd6d66
**us-east-1:** ami-055a0ce37433fcdee
**us-east-2:** ami-07e9069631850755a
**us-west-1:** ami-08c18abab76066f71
**us-west-2:** ami-00eca0475f90a1f8c
**eu-central-1:** ami-0198822fa7d539f8c
**cn-north-1:** ami-093c993faaca89b4d
**cn-northwest-1:** ami-05e1cc73d997d67b7
|
Download
[aws-gardener_prod-amd64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod-amd64-1877.3-75df9f40/aws-gardener_prod-amd64-1877.3-75df9f40.raw)
| +| Default | Amazon Web Services | arm64 | `aws-gardener_prod-arm64-1877.3-75df9f40` |
21 regions
**ap-south-1:** ami-00cd00c30d19609a2
**eu-north-1:** ami-0a969a1a1c4726831
**eu-west-3:** ami-0b579f6c70b7c4fe6
**eu-south-1:** ami-06c38608e2e7223d3
**eu-west-2:** ami-005c7058c3923b2eb
**eu-west-1:** ami-0395c3cd38a0a5cd6
**ap-northeast-3:** ami-0db3697cea87a5104
**ap-northeast-2:** ami-084444f62c7c580fb
**ap-northeast-1:** ami-017237dd9abeae8dd
**me-central-1:** ami-08efdb3153d0cd184
**ca-central-1:** ami-05b535ae9418fee3d
**sa-east-1:** ami-036ded98bad763e3c
**ap-southeast-1:** ami-03fcefb2fd18519d0
**ap-southeast-2:** ami-040f9d0caa5d79e84
**us-east-1:** ami-04110d6a1970e748c
**us-east-2:** ami-0c8dc664a21d5ca08
**us-west-1:** ami-0ddc462d075935666
**us-west-2:** ami-0e67c2546e54fed06
**eu-central-1:** ami-06a2a1e7da947b192
**cn-north-1:** ami-0b3755339496a3158
**cn-northwest-1:** ami-06fc0f74b500d2d82
|
Download
[aws-gardener_prod-arm64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod-arm64-1877.3-75df9f40/aws-gardener_prod-arm64-1877.3-75df9f40.raw)
| +| Default | Microsoft Azure | amd64 | `azure-gardener_prod-amd64-1877.3-75df9f40` |
4 gallery + 0 marketplace images
**Gallery Images:**
• V1 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme/Versions/1877.3.0
• V2 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-gen2/Versions/1877.3.0
• V1 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme/Versions/1877.3.0
• V2 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-gen2/Versions/1877.3.0
|
Download
[azure-gardener_prod-amd64-1877.3-75df9f40.vhd](https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod-amd64-1877.3-75df9f40/azure-gardener_prod-amd64-1877.3-75df9f40.vhd)
| +| Default | Microsoft Azure | arm64 | `azure-gardener_prod-arm64-1877.3-75df9f40` |
2 gallery + 0 marketplace images
**Gallery Images:**
• V2 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-arm64-gen2/Versions/1877.3.0
• V2 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-arm64-gen2/Versions/1877.3.0
|
Download
[azure-gardener_prod-arm64-1877.3-75df9f40.vhd](https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod-arm64-1877.3-75df9f40/azure-gardener_prod-arm64-1877.3-75df9f40.vhd)
| +| Default | Google Cloud Platform | amd64 | `gcp-gardener_prod-amd64-1877.3-75df9f40` |
Global availability
**Image Name:** gardenlinux-gcp-ff804026cbe7b5f2d6f729e4-1877-3-75df9f40
**Project:** sap-se-gcp-gardenlinux
**Availability:** Global (all regions)
|
Download
[gcp-gardener_prod-amd64-1877.3-75df9f40.gcpimage.tar.gz](https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod-amd64-1877.3-75df9f40/gcp-gardener_prod-amd64-1877.3-75df9f40.gcpimage.tar.gz)
| +| Default | Google Cloud Platform | arm64 | `gcp-gardener_prod-arm64-1877.3-75df9f40` |
Global availability
**Image Name:** gardenlinux-gcp-c8504d3c3e67cf2fc7c3408c-1877-3-75df9f40
**Project:** sap-se-gcp-gardenlinux
**Availability:** Global (all regions)
|
Download
[gcp-gardener_prod-arm64-1877.3-75df9f40.gcpimage.tar.gz](https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod-arm64-1877.3-75df9f40/gcp-gardener_prod-arm64-1877.3-75df9f40.gcpimage.tar.gz)
| +| Default | OpenStack | amd64 | `openstack-gardener_prod-amd64-1877.3-75df9f40` |
15 regions
**eu-de-1:** ed3b4c3d-941f-456a-a551-bd52b8397443 (gardenlinux-1877.3)
**eu-de-2:** 5ea6fb4f-20fc-43b8-8ffe-af8da6d61d6a (gardenlinux-1877.3)
**eu-nl-1:** ac9b5d43-ff53-494d-8adf-2249c324a9db (gardenlinux-1877.3)
**la-br-1:** 404f22a3-9822-4696-a60f-8566eedb93e3 (gardenlinux-1877.3)
**na-ca-1:** b69b72f3-574a-4f76-b4eb-ac9185ea2681 (gardenlinux-1877.3)
**na-us-1:** 40e99366-f13b-402a-a264-e7e4773ab8ba (gardenlinux-1877.3)
**na-us-2:** c50200c6-95fd-4a97-bef2-90b2d6afa3d3 (gardenlinux-1877.3)
**na-us-3:** d5b1d8c0-3420-4a82-931d-0506a6b8f166 (gardenlinux-1877.3)
**ap-ae-1:** 81c26cb7-c515-4610-949a-92c275640325 (gardenlinux-1877.3)
**ap-au-1:** 2d6e3edd-5596-41e6-a640-4b1b8e7310e7 (gardenlinux-1877.3)
**ap-cn-1:** 3564b5ef-9b37-4926-bb23-5655cf90de69 (gardenlinux-1877.3)
**ap-jp-1:** 2ff61187-f004-4317-bd4c-a17d93b475bc (gardenlinux-1877.3)
**ap-jp-2:** 2bc58951-9bf7-445b-a6e4-f634c7522d9b (gardenlinux-1877.3)
**ap-sa-1:** e4a4aa92-335a-454b-83bb-643cb918cf6a (gardenlinux-1877.3)
**ap-sa-2:** d3ac5df8-ce38-4a23-b611-dfef6b7a0db9 (gardenlinux-1877.3)
|
Download
[openstack-gardener_prod-amd64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/openstack-gardener_prod-amd64-1877.3-75df9f40/openstack-gardener_prod-amd64-1877.3-75df9f40.raw)
| +| Default | OpenStack Baremetal | amd64 | `openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40` |
15 regions
**eu-de-1:** 01c3ab26-5b93-4655-a743-1fef60f64b53 (gardenlinux-1877.3-baremetal)
**eu-de-2:** 7488d07b-65f1-4b85-8df8-13244b895d71 (gardenlinux-1877.3-baremetal)
**eu-nl-1:** 1926a818-55d5-49e1-9af8-eab8450705eb (gardenlinux-1877.3-baremetal)
**la-br-1:** 6fda686d-d2f7-4018-ab4c-1250e898197a (gardenlinux-1877.3-baremetal)
**na-ca-1:** a032ecc1-3bee-4d65-9f68-3e3f99e2c291 (gardenlinux-1877.3-baremetal)
**na-us-1:** d663d5f1-1b44-41af-9039-e36cc64a5920 (gardenlinux-1877.3-baremetal)
**na-us-2:** 818bbfdd-4ee4-49ee-8294-dc3a3c66971f (gardenlinux-1877.3-baremetal)
**na-us-3:** b154b48b-050f-48d6-997f-b6c2756079a6 (gardenlinux-1877.3-baremetal)
**ap-ae-1:** 5992e19c-2ca2-47be-ae55-50e2fd26b662 (gardenlinux-1877.3-baremetal)
**ap-au-1:** 986403a6-e254-4689-8f81-e32dc33c9b64 (gardenlinux-1877.3-baremetal)
**ap-cn-1:** 0c794890-a690-4881-b0c2-39a939b020e2 (gardenlinux-1877.3-baremetal)
**ap-jp-1:** f5be2c30-8e8e-4713-9e34-eb0a18922af5 (gardenlinux-1877.3-baremetal)
**ap-jp-2:** 8edb20a7-f0f2-47f2-9112-faa2569c3893 (gardenlinux-1877.3-baremetal)
**ap-sa-1:** dc12514b-b0a8-40dd-b756-a4d27421029c (gardenlinux-1877.3-baremetal)
**ap-sa-2:** 617f5ae7-91fd-4149-b783-7a3701a5f420 (gardenlinux-1877.3-baremetal)
|
Download
[openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40/openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40.raw)
| +| USI | Amazon Web Services | amd64 | `aws-gardener_prod_usi-amd64-1877.3-75df9f40` |
21 regions
**ap-south-1:** ami-0e904b4c264dbe923
**eu-north-1:** ami-016f506d46abb5c06
**eu-west-3:** ami-052404d8a97e9ec57
**eu-south-1:** ami-002193c185fb2d939
**eu-west-2:** ami-0225bc62c7d291107
**eu-west-1:** ami-0f737c34ae9ccfe10
**ap-northeast-3:** ami-0ecf19a78a7259c02
**ap-northeast-2:** ami-029152bf0a15cf306
**ap-northeast-1:** ami-0bf003b58ed636124
**me-central-1:** ami-0546ca7d7c2e00077
**ca-central-1:** ami-0a0081cbd4b479d33
**sa-east-1:** ami-086d3b7282338bcd1
**ap-southeast-1:** ami-04973efd023e5883f
**ap-southeast-2:** ami-00389783d0b7ef01b
**us-east-1:** ami-0f5c28bbc45608e9b
**us-east-2:** ami-08c7494a2a00b74e5
**us-west-1:** ami-0e2290963849dba62
**us-west-2:** ami-0fb86d519a38da40f
**eu-central-1:** ami-0c6394e4fdbefe8c0
**cn-north-1:** ami-0b4c979b27a0a7714
**cn-northwest-1:** ami-0cab977e76e274599
|
Download
[aws-gardener_prod_usi-amd64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_usi-amd64-1877.3-75df9f40/aws-gardener_prod_usi-amd64-1877.3-75df9f40.raw)
| +| USI | Amazon Web Services | arm64 | `aws-gardener_prod_usi-arm64-1877.3-75df9f40` |
21 regions
**ap-south-1:** ami-029f2b705d69f9d50
**eu-north-1:** ami-0b1a9e403ea563206
**eu-west-3:** ami-067465814788be84a
**eu-south-1:** ami-092d7cf152ef6df29
**eu-west-2:** ami-0441298c8ae55a62b
**eu-west-1:** ami-012e58abe02f904c1
**ap-northeast-3:** ami-08c18c5f1aa7e9fba
**ap-northeast-2:** ami-0277ca365657bd9c2
**ap-northeast-1:** ami-006a3f35202f6edd4
**me-central-1:** ami-0aa9e8af8c777e400
**ca-central-1:** ami-0f8225fd2d6009961
**sa-east-1:** ami-0e945c537aef91eff
**ap-southeast-1:** ami-0f30b29a4428f7cea
**ap-southeast-2:** ami-0129e3a207e3e6f9d
**us-east-1:** ami-0cc9f69e3a7594e7b
**us-east-2:** ami-046243dad95d56f2a
**us-west-1:** ami-03ae03953c81a43c1
**us-west-2:** ami-0cbe1dbfeda64dc9b
**eu-central-1:** ami-0dd2780bfcddbda6b
**cn-north-1:** ami-0d993477d25affb3c
**cn-northwest-1:** ami-0a7fe5959bb23fab8
|
Download
[aws-gardener_prod_usi-arm64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_usi-arm64-1877.3-75df9f40/aws-gardener_prod_usi-arm64-1877.3-75df9f40.raw)
| +| USI | Microsoft Azure | amd64 | `azure-gardener_prod_usi-amd64-1877.3-75df9f40` |
2 gallery + 0 marketplace images
**Gallery Images:**
• V2 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-gen2-usi/Versions/1877.3.0
• V2 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-gen2-usi/Versions/1877.3.0
|
Download
[azure-gardener_prod_usi-amd64-1877.3-75df9f40.vhd](https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_usi-amd64-1877.3-75df9f40/azure-gardener_prod_usi-amd64-1877.3-75df9f40.vhd)
| +| USI | Microsoft Azure | arm64 | `azure-gardener_prod_usi-arm64-1877.3-75df9f40` |
2 gallery + 0 marketplace images
**Gallery Images:**
• V2 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-arm64-gen2-usi/Versions/1877.3.0
• V2 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-arm64-gen2-usi/Versions/1877.3.0
|
Download
[azure-gardener_prod_usi-arm64-1877.3-75df9f40.vhd](https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_usi-arm64-1877.3-75df9f40/azure-gardener_prod_usi-arm64-1877.3-75df9f40.vhd)
| +| USI | Google Cloud Platform | amd64 | `gcp-gardener_prod_usi-amd64-1877.3-75df9f40` |
Global availability
**Image Name:** gardenlinux-gcp-51db8a4be084c3b640095f4b-1877-3-75df9f40
**Project:** sap-se-gcp-gardenlinux
**Availability:** Global (all regions)
|
Download
[gcp-gardener_prod_usi-amd64-1877.3-75df9f40.gcpimage.tar.gz](https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_usi-amd64-1877.3-75df9f40/gcp-gardener_prod_usi-amd64-1877.3-75df9f40.gcpimage.tar.gz)
| +| USI | Google Cloud Platform | arm64 | `gcp-gardener_prod_usi-arm64-1877.3-75df9f40` |
Global availability
**Image Name:** gardenlinux-gcp-c00f1e20ffeed4d8b80a76b9-1877-3-75df9f40
**Project:** sap-se-gcp-gardenlinux
**Availability:** Global (all regions)
|
Download
[gcp-gardener_prod_usi-arm64-1877.3-75df9f40.gcpimage.tar.gz](https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_usi-arm64-1877.3-75df9f40/gcp-gardener_prod_usi-arm64-1877.3-75df9f40.gcpimage.tar.gz)
| +| USI | OpenStack | amd64 | `openstack-gardener_prod_usi-amd64-1877.3-75df9f40` |
15 regions
**eu-de-1:** 15fc38b3-1cee-4c0a-829a-ef1f7faa1920 (gardenlinux-1877.3)
**eu-de-2:** c4e8e8e5-8c92-4c73-b21b-333087e7b092 (gardenlinux-1877.3)
**eu-nl-1:** e6f9e054-0613-4204-98c7-84676680418a (gardenlinux-1877.3)
**la-br-1:** 04416634-2eaf-44a1-a653-b1ae36bf0e0e (gardenlinux-1877.3)
**na-ca-1:** b548d8fd-0e6b-4cb6-9cd1-68b258df00cc (gardenlinux-1877.3)
**na-us-1:** 0a97e9af-a1f3-4ae4-bf44-98c432aa436c (gardenlinux-1877.3)
**na-us-2:** b1705d73-3f67-427c-8ade-5e245a857338 (gardenlinux-1877.3)
**na-us-3:** da3234f1-307c-431e-80bb-9e51dd75673d (gardenlinux-1877.3)
**ap-ae-1:** 16f24b39-b9ba-4756-8dcd-82473182f1e4 (gardenlinux-1877.3)
**ap-au-1:** 49de0ff1-2c7e-439d-a065-07c837fe48a8 (gardenlinux-1877.3)
**ap-cn-1:** 23a94a40-1e9a-4f4b-b2b6-4c167493fbb0 (gardenlinux-1877.3)
**ap-jp-1:** 1558417d-14bb-413e-9194-88b2bc5f18aa (gardenlinux-1877.3)
**ap-jp-2:** 8d39ad55-2f09-490e-8fa7-0bdf5c854ed7 (gardenlinux-1877.3)
**ap-sa-1:** 62be0147-062a-4375-b142-278a811e9754 (gardenlinux-1877.3)
**ap-sa-2:** 510d1ff1-4fc6-49ec-ad2f-a0985217dd14 (gardenlinux-1877.3)
|
Download
[openstack-gardener_prod_usi-amd64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/openstack-gardener_prod_usi-amd64-1877.3-75df9f40/openstack-gardener_prod_usi-amd64-1877.3-75df9f40.raw)
| +| TPM2 | Amazon Web Services | amd64 | `aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40` |
19 regions
**ap-south-1:** ami-0052561d7bccfe6b7
**eu-north-1:** ami-06623180935c63669
**eu-west-3:** ami-026632e35fe37f9f4
**eu-south-1:** ami-0b60116fac38c2556
**eu-west-2:** ami-0ecd844859adf35c5
**eu-west-1:** ami-0313333df0acd7eb0
**ap-northeast-3:** ami-04e53edbd6ce18fc6
**ap-northeast-2:** ami-0ae03e19777874cef
**ap-northeast-1:** ami-079e68ce96cc03e78
**me-central-1:** ami-01e368d192a479934
**ca-central-1:** ami-02cabce931cafcf1f
**sa-east-1:** ami-075d5fa3b98620e15
**ap-southeast-1:** ami-0a26b478c0a210190
**ap-southeast-2:** ami-0f226413240aec4aa
**us-east-1:** ami-07dea60f619226e1b
**us-east-2:** ami-0e8e852987ee840c3
**us-west-1:** ami-0d9314ee5a439ab29
**us-west-2:** ami-04dc4614abf1649ab
**eu-central-1:** ami-005f7dab618420a91
|
Download
[aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40/aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.raw)
| +| TPM2 | Amazon Web Services | arm64 | `aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40` |
19 regions
**ap-south-1:** ami-035b751a08f528e47
**eu-north-1:** ami-04c60d1feb092d00f
**eu-west-3:** ami-0443172a73fe4fb27
**eu-south-1:** ami-02f8a867d02227542
**eu-west-2:** ami-06a900dd59c84620d
**eu-west-1:** ami-056a9d8447a991bff
**ap-northeast-3:** ami-0769caf50f7b7fb6f
**ap-northeast-2:** ami-06ad8c60e1093b543
**ap-northeast-1:** ami-0b8313d62dfeec78b
**me-central-1:** ami-0fa388dcaca7b3baf
**ca-central-1:** ami-02e7a07f60a5e0411
**sa-east-1:** ami-000ca39b22f2a695c
**ap-southeast-1:** ami-04f521cff21b58f50
**ap-southeast-2:** ami-02f5afcce42276457
**us-east-1:** ami-0a25256d5aaf8fdd7
**us-east-2:** ami-07bcfed39a329b612
**us-west-1:** ami-0b2e93f36b5a8bff2
**us-west-2:** ami-063f4f34958917b5c
**eu-central-1:** ami-0b15b442dd5e90d50
|
Download
[aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.raw](https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40/aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.raw)
| +| TPM2 | Microsoft Azure | amd64 | `azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40` |
2 gallery + 0 marketplace images
**Gallery Images:**
• V2 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-gen2-usi-secureboot/Versions/1877.3.0
• V2 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-gen2-usi-secureboot/Versions/1877.3.0
|
Download
[azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.vhd](https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40/azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.vhd)
| +| TPM2 | Microsoft Azure | arm64 | `azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40` |
2 gallery + 0 marketplace images
**Gallery Images:**
• V2 (public): /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-arm64-gen2-usi-secureboot/Versions/1877.3.0
• V2 (china): /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-arm64-gen2-usi-secureboot/Versions/1877.3.0
|
Download
[azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.vhd](https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40/azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.vhd)
| +| TPM2 | Google Cloud Platform | amd64 | `gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40` |
Global availability
**Image Name:** gardenlinux-gcp-b4636aa3660a8d166531aab9-1877-3-75df9f40
**Project:** sap-se-gcp-gardenlinux
**Availability:** Global (all regions)
|
Download
[gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.gcpimage.tar.gz](https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40/gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.gcpimage.tar.gz)
| +| TPM2 | Google Cloud Platform | arm64 | `gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40` |
Global availability
**Image Name:** gardenlinux-gcp-63fd9d7dd465420fd4e499ab-1877-3-75df9f40
**Project:** sap-se-gcp-gardenlinux
**Availability:** Global (all regions)
|
Download
[gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.gcpimage.tar.gz](https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40/gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.gcpimage.tar.gz)
| + +
+ +
+📝 Detailed View + +
+Variant - Default + +### Variant - Default + +
+ALI - Alibaba Cloud + +#### ALI - Alibaba Cloud + +
+amd64 + +##### amd64 + +``` +- flavor: ali-gardener_prod-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/ali-gardener_prod-amd64-1877.3-75df9f40/ali-gardener_prod-amd64-1877.3-75df9f40.qcow2 + regions: + - region: cn-qingdao + image_id: m-m5efm8l2bltkbloui235 + - region: cn-beijing + image_id: m-2zee5ebi20ltzy5et7in + - region: cn-zhangjiakou + image_id: m-8vbddy2wfex9nb29afcy + - region: cn-huhehaote + image_id: m-hp3bx14og6cw9thujw1d + - region: cn-wulanchabu + image_id: m-0jlh1iq2f3bryb5okjdk + - region: cn-hangzhou + image_id: m-bp13aseh5a2wn0s5rdz6 + - region: cn-shanghai + image_id: m-uf61jbe9n8a9291h4u21 + - region: cn-nanjing + image_id: m-gc77bfbctuzphl2bpk0o + - region: cn-shenzhen + image_id: m-wz9gio8m5ey0foj0g4xx + - region: cn-heyuan + image_id: m-f8zdn54v0blnsafxb1t5 + - region: cn-guangzhou + image_id: m-7xv0q5feffsxxyttxdy9 + - region: cn-fuzhou + image_id: m-gw07bfbctuzphl2bpk0p + - region: cn-wuhan-lr + image_id: m-n4a1u2avlb9pq0u5bdms + - region: cn-chengdu + image_id: m-2vc5saul2saa2z57h216 + - region: cn-hongkong + image_id: m-j6c4zk6mwb2673iq5wrz + - region: ap-northeast-1 + image_id: m-6weibwo3vrt7ar7nelc9 + - region: ap-northeast-2 + image_id: m-mj73oldn06th2vy0ymhv + - region: ap-southeast-1 + image_id: m-t4ngrf81d0fohwq493pw + - region: ap-southeast-3 + image_id: m-8psd64gzc1eru0qld7cc + - region: ap-southeast-6 + image_id: m-5tsdd6k3z1vvdyyio7zn + - region: ap-southeast-5 + image_id: m-k1aj4usnhqcssa2fpy0c + - region: ap-southeast-7 + image_id: m-0jo6uwekvn0gnwhwnq3s + - region: us-east-1 + image_id: m-0xi8netpfc2fdwfstz3c + - region: us-west-1 + image_id: m-rj9gwpx907qv6p6x8w45 + - region: na-south-1 + image_id: m-4hfi34x77oaeznwuulq6 + - region: eu-west-1 + image_id: m-d7o2ny5xc0m3kacxjbem + - region: me-east-1 + image_id: m-eb39mgohcec6gaynet9l + - region: eu-central-1 + image_id: m-gw86dlqmpaugljiykx91 +``` + +
+ +
+ +
+AWS - Amazon Web Services + +#### AWS - Amazon Web Services + +
+amd64 + +##### amd64 + +``` +- flavor: aws-gardener_prod-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod-amd64-1877.3-75df9f40/aws-gardener_prod-amd64-1877.3-75df9f40.raw + regions: + - region: ap-south-1 + image_id: ami-00c6adf1de4dd746a + - region: eu-north-1 + image_id: ami-07ad3940828172b90 + - region: eu-west-3 + image_id: ami-071f4f48679d86638 + - region: eu-south-1 + image_id: ami-0b10af1a19df9f038 + - region: eu-west-2 + image_id: ami-0e2b7fe07573b71cd + - region: eu-west-1 + image_id: ami-01c547eb85d61da61 + - region: ap-northeast-3 + image_id: ami-0dad917ede94cd3c7 + - region: ap-northeast-2 + image_id: ami-0ecbeaf40d4643016 + - region: ap-northeast-1 + image_id: ami-0b7225242babad11c + - region: me-central-1 + image_id: ami-0d298e552bf051bc7 + - region: ca-central-1 + image_id: ami-0af8422162c8f056e + - region: sa-east-1 + image_id: ami-05d885175e942fc80 + - region: ap-southeast-1 + image_id: ami-0a9802680adf7e430 + - region: ap-southeast-2 + image_id: ami-07ed6f1e62fbd6d66 + - region: us-east-1 + image_id: ami-055a0ce37433fcdee + - region: us-east-2 + image_id: ami-07e9069631850755a + - region: us-west-1 + image_id: ami-08c18abab76066f71 + - region: us-west-2 + image_id: ami-00eca0475f90a1f8c + - region: eu-central-1 + image_id: ami-0198822fa7d539f8c + - region: cn-north-1 + image_id: ami-093c993faaca89b4d + - region: cn-northwest-1 + image_id: ami-05e1cc73d997d67b7 +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: aws-gardener_prod-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod-arm64-1877.3-75df9f40/aws-gardener_prod-arm64-1877.3-75df9f40.raw + regions: + - region: ap-south-1 + image_id: ami-00cd00c30d19609a2 + - region: eu-north-1 + image_id: ami-0a969a1a1c4726831 + - region: eu-west-3 + image_id: ami-0b579f6c70b7c4fe6 + - region: eu-south-1 + image_id: ami-06c38608e2e7223d3 + - region: eu-west-2 + image_id: ami-005c7058c3923b2eb + - region: eu-west-1 + image_id: ami-0395c3cd38a0a5cd6 + - region: ap-northeast-3 + image_id: ami-0db3697cea87a5104 + - region: ap-northeast-2 + image_id: ami-084444f62c7c580fb + - region: ap-northeast-1 + image_id: ami-017237dd9abeae8dd + - region: me-central-1 + image_id: ami-08efdb3153d0cd184 + - region: ca-central-1 + image_id: ami-05b535ae9418fee3d + - region: sa-east-1 + image_id: ami-036ded98bad763e3c + - region: ap-southeast-1 + image_id: ami-03fcefb2fd18519d0 + - region: ap-southeast-2 + image_id: ami-040f9d0caa5d79e84 + - region: us-east-1 + image_id: ami-04110d6a1970e748c + - region: us-east-2 + image_id: ami-0c8dc664a21d5ca08 + - region: us-west-1 + image_id: ami-0ddc462d075935666 + - region: us-west-2 + image_id: ami-0e67c2546e54fed06 + - region: eu-central-1 + image_id: ami-06a2a1e7da947b192 + - region: cn-north-1 + image_id: ami-0b3755339496a3158 + - region: cn-northwest-1 + image_id: ami-06fc0f74b500d2d82 +``` + +
+ +
+ +
+AZURE - Microsoft Azure + +#### AZURE - Microsoft Azure + +
+amd64 + +##### amd64 + +``` +- flavor: azure-gardener_prod-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod-amd64-1877.3-75df9f40/azure-gardener_prod-amd64-1877.3-75df9f40.vhd + gallery_images: + - hyper_v_generation: V1 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-gen2/Versions/1877.3.0 + - hyper_v_generation: V1 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-gen2/Versions/1877.3.0 +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: azure-gardener_prod-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod-arm64-1877.3-75df9f40/azure-gardener_prod-arm64-1877.3-75df9f40.vhd + gallery_images: + - hyper_v_generation: V2 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-arm64-gen2/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-arm64-gen2/Versions/1877.3.0 +``` + +
+ +
+ +
+GCP - Google Cloud Platform + +#### GCP - Google Cloud Platform + +
+amd64 + +##### amd64 + +``` +- flavor: gcp-gardener_prod-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod-amd64-1877.3-75df9f40/gcp-gardener_prod-amd64-1877.3-75df9f40.gcpimage.tar.gz + image_name: gardenlinux-gcp-ff804026cbe7b5f2d6f729e4-1877-3-75df9f40 + project: sap-se-gcp-gardenlinux + availability: Global (all regions) +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: gcp-gardener_prod-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod-arm64-1877.3-75df9f40/gcp-gardener_prod-arm64-1877.3-75df9f40.gcpimage.tar.gz + image_name: gardenlinux-gcp-c8504d3c3e67cf2fc7c3408c-1877-3-75df9f40 + project: sap-se-gcp-gardenlinux + availability: Global (all regions) +``` + +
+ +
+ +
+OPENSTACK - OpenStack + +#### OPENSTACK - OpenStack + +
+amd64 + +##### amd64 + +``` +- flavor: openstack-gardener_prod-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/openstack-gardener_prod-amd64-1877.3-75df9f40/openstack-gardener_prod-amd64-1877.3-75df9f40.raw + regions: + - region: eu-de-1 + image_id: ed3b4c3d-941f-456a-a551-bd52b8397443 + image_name: gardenlinux-1877.3 + - region: eu-de-2 + image_id: 5ea6fb4f-20fc-43b8-8ffe-af8da6d61d6a + image_name: gardenlinux-1877.3 + - region: eu-nl-1 + image_id: ac9b5d43-ff53-494d-8adf-2249c324a9db + image_name: gardenlinux-1877.3 + - region: la-br-1 + image_id: 404f22a3-9822-4696-a60f-8566eedb93e3 + image_name: gardenlinux-1877.3 + - region: na-ca-1 + image_id: b69b72f3-574a-4f76-b4eb-ac9185ea2681 + image_name: gardenlinux-1877.3 + - region: na-us-1 + image_id: 40e99366-f13b-402a-a264-e7e4773ab8ba + image_name: gardenlinux-1877.3 + - region: na-us-2 + image_id: c50200c6-95fd-4a97-bef2-90b2d6afa3d3 + image_name: gardenlinux-1877.3 + - region: na-us-3 + image_id: d5b1d8c0-3420-4a82-931d-0506a6b8f166 + image_name: gardenlinux-1877.3 + - region: ap-ae-1 + image_id: 81c26cb7-c515-4610-949a-92c275640325 + image_name: gardenlinux-1877.3 + - region: ap-au-1 + image_id: 2d6e3edd-5596-41e6-a640-4b1b8e7310e7 + image_name: gardenlinux-1877.3 + - region: ap-cn-1 + image_id: 3564b5ef-9b37-4926-bb23-5655cf90de69 + image_name: gardenlinux-1877.3 + - region: ap-jp-1 + image_id: 2ff61187-f004-4317-bd4c-a17d93b475bc + image_name: gardenlinux-1877.3 + - region: ap-jp-2 + image_id: 2bc58951-9bf7-445b-a6e4-f634c7522d9b + image_name: gardenlinux-1877.3 + - region: ap-sa-1 + image_id: e4a4aa92-335a-454b-83bb-643cb918cf6a + image_name: gardenlinux-1877.3 + - region: ap-sa-2 + image_id: d3ac5df8-ce38-4a23-b611-dfef6b7a0db9 + image_name: gardenlinux-1877.3 +``` + +
+ +
+ +
+OPENSTACKBAREMETAL - OpenStack Baremetal + +#### OPENSTACKBAREMETAL - OpenStack Baremetal + +
+amd64 + +##### amd64 + +``` +- flavor: openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40/openstackbaremetal-gardener_prod-amd64-1877.3-75df9f40.raw + regions: + - region: eu-de-1 + image_id: 01c3ab26-5b93-4655-a743-1fef60f64b53 + image_name: gardenlinux-1877.3-baremetal + - region: eu-de-2 + image_id: 7488d07b-65f1-4b85-8df8-13244b895d71 + image_name: gardenlinux-1877.3-baremetal + - region: eu-nl-1 + image_id: 1926a818-55d5-49e1-9af8-eab8450705eb + image_name: gardenlinux-1877.3-baremetal + - region: la-br-1 + image_id: 6fda686d-d2f7-4018-ab4c-1250e898197a + image_name: gardenlinux-1877.3-baremetal + - region: na-ca-1 + image_id: a032ecc1-3bee-4d65-9f68-3e3f99e2c291 + image_name: gardenlinux-1877.3-baremetal + - region: na-us-1 + image_id: d663d5f1-1b44-41af-9039-e36cc64a5920 + image_name: gardenlinux-1877.3-baremetal + - region: na-us-2 + image_id: 818bbfdd-4ee4-49ee-8294-dc3a3c66971f + image_name: gardenlinux-1877.3-baremetal + - region: na-us-3 + image_id: b154b48b-050f-48d6-997f-b6c2756079a6 + image_name: gardenlinux-1877.3-baremetal + - region: ap-ae-1 + image_id: 5992e19c-2ca2-47be-ae55-50e2fd26b662 + image_name: gardenlinux-1877.3-baremetal + - region: ap-au-1 + image_id: 986403a6-e254-4689-8f81-e32dc33c9b64 + image_name: gardenlinux-1877.3-baremetal + - region: ap-cn-1 + image_id: 0c794890-a690-4881-b0c2-39a939b020e2 + image_name: gardenlinux-1877.3-baremetal + - region: ap-jp-1 + image_id: f5be2c30-8e8e-4713-9e34-eb0a18922af5 + image_name: gardenlinux-1877.3-baremetal + - region: ap-jp-2 + image_id: 8edb20a7-f0f2-47f2-9112-faa2569c3893 + image_name: gardenlinux-1877.3-baremetal + - region: ap-sa-1 + image_id: dc12514b-b0a8-40dd-b756-a4d27421029c + image_name: gardenlinux-1877.3-baremetal + - region: ap-sa-2 + image_id: 617f5ae7-91fd-4149-b783-7a3701a5f420 + image_name: gardenlinux-1877.3-baremetal +``` + +
+ +
+ +
+ +
+Variant - USI (Unified System Image) + +### Variant - USI (Unified System Image) + +
+AWS - Amazon Web Services + +#### AWS - Amazon Web Services + +
+amd64 + +##### amd64 + +``` +- flavor: aws-gardener_prod_usi-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_usi-amd64-1877.3-75df9f40/aws-gardener_prod_usi-amd64-1877.3-75df9f40.raw + regions: + - region: ap-south-1 + image_id: ami-0e904b4c264dbe923 + - region: eu-north-1 + image_id: ami-016f506d46abb5c06 + - region: eu-west-3 + image_id: ami-052404d8a97e9ec57 + - region: eu-south-1 + image_id: ami-002193c185fb2d939 + - region: eu-west-2 + image_id: ami-0225bc62c7d291107 + - region: eu-west-1 + image_id: ami-0f737c34ae9ccfe10 + - region: ap-northeast-3 + image_id: ami-0ecf19a78a7259c02 + - region: ap-northeast-2 + image_id: ami-029152bf0a15cf306 + - region: ap-northeast-1 + image_id: ami-0bf003b58ed636124 + - region: me-central-1 + image_id: ami-0546ca7d7c2e00077 + - region: ca-central-1 + image_id: ami-0a0081cbd4b479d33 + - region: sa-east-1 + image_id: ami-086d3b7282338bcd1 + - region: ap-southeast-1 + image_id: ami-04973efd023e5883f + - region: ap-southeast-2 + image_id: ami-00389783d0b7ef01b + - region: us-east-1 + image_id: ami-0f5c28bbc45608e9b + - region: us-east-2 + image_id: ami-08c7494a2a00b74e5 + - region: us-west-1 + image_id: ami-0e2290963849dba62 + - region: us-west-2 + image_id: ami-0fb86d519a38da40f + - region: eu-central-1 + image_id: ami-0c6394e4fdbefe8c0 + - region: cn-north-1 + image_id: ami-0b4c979b27a0a7714 + - region: cn-northwest-1 + image_id: ami-0cab977e76e274599 +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: aws-gardener_prod_usi-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_usi-arm64-1877.3-75df9f40/aws-gardener_prod_usi-arm64-1877.3-75df9f40.raw + regions: + - region: ap-south-1 + image_id: ami-029f2b705d69f9d50 + - region: eu-north-1 + image_id: ami-0b1a9e403ea563206 + - region: eu-west-3 + image_id: ami-067465814788be84a + - region: eu-south-1 + image_id: ami-092d7cf152ef6df29 + - region: eu-west-2 + image_id: ami-0441298c8ae55a62b + - region: eu-west-1 + image_id: ami-012e58abe02f904c1 + - region: ap-northeast-3 + image_id: ami-08c18c5f1aa7e9fba + - region: ap-northeast-2 + image_id: ami-0277ca365657bd9c2 + - region: ap-northeast-1 + image_id: ami-006a3f35202f6edd4 + - region: me-central-1 + image_id: ami-0aa9e8af8c777e400 + - region: ca-central-1 + image_id: ami-0f8225fd2d6009961 + - region: sa-east-1 + image_id: ami-0e945c537aef91eff + - region: ap-southeast-1 + image_id: ami-0f30b29a4428f7cea + - region: ap-southeast-2 + image_id: ami-0129e3a207e3e6f9d + - region: us-east-1 + image_id: ami-0cc9f69e3a7594e7b + - region: us-east-2 + image_id: ami-046243dad95d56f2a + - region: us-west-1 + image_id: ami-03ae03953c81a43c1 + - region: us-west-2 + image_id: ami-0cbe1dbfeda64dc9b + - region: eu-central-1 + image_id: ami-0dd2780bfcddbda6b + - region: cn-north-1 + image_id: ami-0d993477d25affb3c + - region: cn-northwest-1 + image_id: ami-0a7fe5959bb23fab8 +``` + +
+ +
+ +
+AZURE - Microsoft Azure + +#### AZURE - Microsoft Azure + +
+amd64 + +##### amd64 + +``` +- flavor: azure-gardener_prod_usi-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_usi-amd64-1877.3-75df9f40/azure-gardener_prod_usi-amd64-1877.3-75df9f40.vhd + gallery_images: + - hyper_v_generation: V2 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-gen2-usi/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-gen2-usi/Versions/1877.3.0 +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: azure-gardener_prod_usi-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_usi-arm64-1877.3-75df9f40/azure-gardener_prod_usi-arm64-1877.3-75df9f40.vhd + gallery_images: + - hyper_v_generation: V2 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-arm64-gen2-usi/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-arm64-gen2-usi/Versions/1877.3.0 +``` + +
+ +
+ +
+GCP - Google Cloud Platform + +#### GCP - Google Cloud Platform + +
+amd64 + +##### amd64 + +``` +- flavor: gcp-gardener_prod_usi-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_usi-amd64-1877.3-75df9f40/gcp-gardener_prod_usi-amd64-1877.3-75df9f40.gcpimage.tar.gz + image_name: gardenlinux-gcp-51db8a4be084c3b640095f4b-1877-3-75df9f40 + project: sap-se-gcp-gardenlinux + availability: Global (all regions) +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: gcp-gardener_prod_usi-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_usi-arm64-1877.3-75df9f40/gcp-gardener_prod_usi-arm64-1877.3-75df9f40.gcpimage.tar.gz + image_name: gardenlinux-gcp-c00f1e20ffeed4d8b80a76b9-1877-3-75df9f40 + project: sap-se-gcp-gardenlinux + availability: Global (all regions) +``` + +
+ +
+ +
+OPENSTACK - OpenStack + +#### OPENSTACK - OpenStack + +
+amd64 + +##### amd64 + +``` +- flavor: openstack-gardener_prod_usi-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/openstack-gardener_prod_usi-amd64-1877.3-75df9f40/openstack-gardener_prod_usi-amd64-1877.3-75df9f40.raw + regions: + - region: eu-de-1 + image_id: 15fc38b3-1cee-4c0a-829a-ef1f7faa1920 + image_name: gardenlinux-1877.3 + - region: eu-de-2 + image_id: c4e8e8e5-8c92-4c73-b21b-333087e7b092 + image_name: gardenlinux-1877.3 + - region: eu-nl-1 + image_id: e6f9e054-0613-4204-98c7-84676680418a + image_name: gardenlinux-1877.3 + - region: la-br-1 + image_id: 04416634-2eaf-44a1-a653-b1ae36bf0e0e + image_name: gardenlinux-1877.3 + - region: na-ca-1 + image_id: b548d8fd-0e6b-4cb6-9cd1-68b258df00cc + image_name: gardenlinux-1877.3 + - region: na-us-1 + image_id: 0a97e9af-a1f3-4ae4-bf44-98c432aa436c + image_name: gardenlinux-1877.3 + - region: na-us-2 + image_id: b1705d73-3f67-427c-8ade-5e245a857338 + image_name: gardenlinux-1877.3 + - region: na-us-3 + image_id: da3234f1-307c-431e-80bb-9e51dd75673d + image_name: gardenlinux-1877.3 + - region: ap-ae-1 + image_id: 16f24b39-b9ba-4756-8dcd-82473182f1e4 + image_name: gardenlinux-1877.3 + - region: ap-au-1 + image_id: 49de0ff1-2c7e-439d-a065-07c837fe48a8 + image_name: gardenlinux-1877.3 + - region: ap-cn-1 + image_id: 23a94a40-1e9a-4f4b-b2b6-4c167493fbb0 + image_name: gardenlinux-1877.3 + - region: ap-jp-1 + image_id: 1558417d-14bb-413e-9194-88b2bc5f18aa + image_name: gardenlinux-1877.3 + - region: ap-jp-2 + image_id: 8d39ad55-2f09-490e-8fa7-0bdf5c854ed7 + image_name: gardenlinux-1877.3 + - region: ap-sa-1 + image_id: 62be0147-062a-4375-b142-278a811e9754 + image_name: gardenlinux-1877.3 + - region: ap-sa-2 + image_id: 510d1ff1-4fc6-49ec-ad2f-a0985217dd14 + image_name: gardenlinux-1877.3 +``` + +
+ +
+ +
+ +
+Variant - TPM2 Trusted Boot + +### Variant - TPM2 Trusted Boot + +
+AWS - Amazon Web Services + +#### AWS - Amazon Web Services + +
+amd64 + +##### amd64 + +``` +- flavor: aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40/aws-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.raw + regions: + - region: ap-south-1 + image_id: ami-0052561d7bccfe6b7 + - region: eu-north-1 + image_id: ami-06623180935c63669 + - region: eu-west-3 + image_id: ami-026632e35fe37f9f4 + - region: eu-south-1 + image_id: ami-0b60116fac38c2556 + - region: eu-west-2 + image_id: ami-0ecd844859adf35c5 + - region: eu-west-1 + image_id: ami-0313333df0acd7eb0 + - region: ap-northeast-3 + image_id: ami-04e53edbd6ce18fc6 + - region: ap-northeast-2 + image_id: ami-0ae03e19777874cef + - region: ap-northeast-1 + image_id: ami-079e68ce96cc03e78 + - region: me-central-1 + image_id: ami-01e368d192a479934 + - region: ca-central-1 + image_id: ami-02cabce931cafcf1f + - region: sa-east-1 + image_id: ami-075d5fa3b98620e15 + - region: ap-southeast-1 + image_id: ami-0a26b478c0a210190 + - region: ap-southeast-2 + image_id: ami-0f226413240aec4aa + - region: us-east-1 + image_id: ami-07dea60f619226e1b + - region: us-east-2 + image_id: ami-0e8e852987ee840c3 + - region: us-west-1 + image_id: ami-0d9314ee5a439ab29 + - region: us-west-2 + image_id: ami-04dc4614abf1649ab + - region: eu-central-1 + image_id: ami-005f7dab618420a91 +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40/aws-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.raw + regions: + - region: ap-south-1 + image_id: ami-035b751a08f528e47 + - region: eu-north-1 + image_id: ami-04c60d1feb092d00f + - region: eu-west-3 + image_id: ami-0443172a73fe4fb27 + - region: eu-south-1 + image_id: ami-02f8a867d02227542 + - region: eu-west-2 + image_id: ami-06a900dd59c84620d + - region: eu-west-1 + image_id: ami-056a9d8447a991bff + - region: ap-northeast-3 + image_id: ami-0769caf50f7b7fb6f + - region: ap-northeast-2 + image_id: ami-06ad8c60e1093b543 + - region: ap-northeast-1 + image_id: ami-0b8313d62dfeec78b + - region: me-central-1 + image_id: ami-0fa388dcaca7b3baf + - region: ca-central-1 + image_id: ami-02e7a07f60a5e0411 + - region: sa-east-1 + image_id: ami-000ca39b22f2a695c + - region: ap-southeast-1 + image_id: ami-04f521cff21b58f50 + - region: ap-southeast-2 + image_id: ami-02f5afcce42276457 + - region: us-east-1 + image_id: ami-0a25256d5aaf8fdd7 + - region: us-east-2 + image_id: ami-07bcfed39a329b612 + - region: us-west-1 + image_id: ami-0b2e93f36b5a8bff2 + - region: us-west-2 + image_id: ami-063f4f34958917b5c + - region: eu-central-1 + image_id: ami-0b15b442dd5e90d50 +``` + +
+ +
+ +
+AZURE - Microsoft Azure + +#### AZURE - Microsoft Azure + +
+amd64 + +##### amd64 + +``` +- flavor: azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40/azure-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.vhd + gallery_images: + - hyper_v_generation: V2 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-gen2-usi-secureboot/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-gen2-usi-secureboot/Versions/1877.3.0 +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40/azure-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.vhd + gallery_images: + - hyper_v_generation: V2 + azure_cloud: public + image_id: /CommunityGalleries/gardenlinux-13e998fe-534d-4b0a-8a27-f16a73aef620/Images/gardenlinux-nvme-arm64-gen2-usi-secureboot/Versions/1877.3.0 + - hyper_v_generation: V2 + azure_cloud: china + image_id: /CommunityGalleries/gardenlinux-8e6518fb-9ae0-4f66-abfd-9a06997e2492/Images/gardenlinux-nvme-arm64-gen2-usi-secureboot/Versions/1877.3.0 +``` + +
+ +
+ +
+GCP - Google Cloud Platform + +#### GCP - Google Cloud Platform + +
+amd64 + +##### amd64 + +``` +- flavor: gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40/gcp-gardener_prod_tpm2_trustedboot-amd64-1877.3-75df9f40.gcpimage.tar.gz + image_name: gardenlinux-gcp-b4636aa3660a8d166531aab9-1877-3-75df9f40 + project: sap-se-gcp-gardenlinux + availability: Global (all regions) +``` + +
+ +
+arm64 + +##### arm64 + +``` +- flavor: gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40 + download_url: https://gardenlinux-github-releases.s3.amazonaws.com/objects/gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40/gcp-gardener_prod_tpm2_trustedboot-arm64-1877.3-75df9f40.gcpimage.tar.gz + image_name: gardenlinux-gcp-63fd9d7dd465420fd4e499ab-1877-3-75df9f40 + project: sap-se-gcp-gardenlinux + availability: Global (all regions) +``` + +
+ +
+ +
+ + +
+ + +## Kernel Module Build Container (kmodbuild) +``` +ghcr.io/gardenlinux/gardenlinux/kmodbuild:1877.3 +``` diff --git a/test-data/release_notes/glvd_1877.3.json b/test-data/release_notes/glvd_1877.3.json new file mode 100644 index 00000000..d739cdb8 --- /dev/null +++ b/test-data/release_notes/glvd_1877.3.json @@ -0,0 +1,193 @@ +{ + "version": "1877.3", + "packageList": [ + { + "sourcePackageName": "gnutls28", + "oldVersion": "3.8.9-2", + "newVersion": "3.8.9-3gl0+bp1877", + "fixedCves": [ + "CVE-2025-32988", + "CVE-2025-32989", + "CVE-2025-32990", + "CVE-2025-6395" + ] + }, + { + "sourcePackageName": "sqlite3", + "oldVersion": "3.46.1-4", + "newVersion": "3.46.1-7gl0+bp1877", + "fixedCves": [ + "CVE-2025-6965" + ] + }, + { + "sourcePackageName": "dpkg", + "oldVersion": "1.22.18", + "newVersion": "1.22.21gl0+bp1877", + "fixedCves": [ + "CVE-2025-6297" + ] + }, + { + "sourcePackageName": "linux", + "oldVersion": "6.12.40-2gl0", + "newVersion": "6.12.44-3gl0", + "fixedCves": [ + "CVE-2025-38676", + "CVE-2025-38683", + "CVE-2025-38684", + "CVE-2025-38686", + "CVE-2025-38687", + "CVE-2025-38688", + "CVE-2025-38691", + "CVE-2025-38692", + "CVE-2025-38695", + "CVE-2025-38696", + "CVE-2025-38699", + "CVE-2025-38700", + "CVE-2025-38701", + "CVE-2025-38704", + "CVE-2025-38708", + "CVE-2025-38709", + "CVE-2025-38710", + "CVE-2025-38711", + "CVE-2025-38717", + "CVE-2025-38718", + "CVE-2025-38721", + "CVE-2025-38722", + "CVE-2025-38724", + "CVE-2025-38726", + "CVE-2025-38727", + "CVE-2025-38728", + "CVE-2025-38730", + "CVE-2025-38601", + "CVE-2025-38604", + "CVE-2025-38608", + "CVE-2025-38609", + "CVE-2025-38610", + "CVE-2025-38614", + "CVE-2022-50031", + "CVE-2022-50083", + "CVE-2023-53137", + "CVE-2025-37744", + "CVE-2025-38500", + "CVE-2025-38501", + "CVE-2025-38732", + "CVE-2025-38734", + "CVE-2025-38735", + "CVE-2025-38737", + "CVE-2025-39673", + "CVE-2025-39676", + "CVE-2025-39681", + "CVE-2025-39682", + "CVE-2025-39683", + "CVE-2025-39684", + "CVE-2025-39685", + "CVE-2025-39686", + "CVE-2025-39689", + "CVE-2025-39691", + "CVE-2025-39692", + "CVE-2025-39695", + "CVE-2025-39697", + "CVE-2025-39698", + "CVE-2025-39700", + "CVE-2025-39701", + "CVE-2025-39702", + "CVE-2025-39703", + "CVE-2025-39718", + "CVE-2025-39720", + "CVE-2025-39721", + "CVE-2025-39722", + "CVE-2025-39724", + "CVE-2025-39727", + "CVE-2025-39730", + "CVE-2025-39732", + "CVE-2025-21884", + "CVE-2025-38335", + "CVE-2025-38351", + "CVE-2025-38553", + "CVE-2025-38559", + "CVE-2025-38560", + "CVE-2025-38561", + "CVE-2025-38562", + "CVE-2025-38563", + "CVE-2025-38565", + "CVE-2025-38566", + "CVE-2025-38568", + "CVE-2025-38569", + "CVE-2025-38571", + "CVE-2025-38572", + "CVE-2025-38574", + "CVE-2025-38581", + "CVE-2025-38582", + "CVE-2025-38583", + "CVE-2025-38586", + "CVE-2025-38587", + "CVE-2025-38588", + "CVE-2025-38590", + "CVE-2025-38593", + "CVE-2025-38616", + "CVE-2025-38617", + "CVE-2025-38618", + "CVE-2025-38622", + "CVE-2025-38624", + "CVE-2025-38625", + "CVE-2025-38628", + "CVE-2025-38631", + "CVE-2025-38632", + "CVE-2025-38634", + "CVE-2025-38635", + "CVE-2025-38639", + "CVE-2025-38640", + "CVE-2025-38644", + "CVE-2025-38645", + "CVE-2025-38646", + "CVE-2025-38653", + "CVE-2025-38659", + "CVE-2025-38660", + "CVE-2025-38666", + "CVE-2025-38668", + "CVE-2025-38670", + "CVE-2025-38675", + "CVE-2025-39736", + "CVE-2025-39737", + "CVE-2025-39738", + "CVE-2025-39739", + "CVE-2025-39742", + "CVE-2025-39744", + "CVE-2025-39746", + "CVE-2025-39748", + "CVE-2025-39749", + "CVE-2025-39750", + "CVE-2025-39752", + "CVE-2025-39753", + "CVE-2025-39754", + "CVE-2025-39756", + "CVE-2025-39758", + "CVE-2025-39759", + "CVE-2025-39761", + "CVE-2025-39763", + "CVE-2025-39766", + "CVE-2025-39770", + "CVE-2025-39773", + "CVE-2025-39776", + "CVE-2025-39779", + "CVE-2025-39780", + "CVE-2025-39782", + "CVE-2025-39783", + "CVE-2025-39787", + "CVE-2025-39788", + "CVE-2025-39790", + "CVE-2025-39791" + ] + }, + { + "sourcePackageName": "iputils", + "oldVersion": "3:20240905-3", + "newVersion": "3:20250605-1gl0~bp1877", + "fixedCves": [ + "CVE-2025-47268" + ] + } + ] +} diff --git a/tests/github/test_create_github_release.py b/tests/github/test_create_github_release.py index 3e11a2af..a2919a60 100644 --- a/tests/github/test_create_github_release.py +++ b/tests/github/test_create_github_release.py @@ -4,7 +4,10 @@ from gardenlinux.github.release import create_github_release, write_to_release_id_file -from ..constants import TEST_GARDENLINUX_COMMIT, TEST_GARDENLINUX_RELEASE +from ..constants import ( + TEST_GARDENLINUX_COMMIT, + TEST_GARDENLINUX_RELEASE, +) def test_create_github_release_needs_github_token(): diff --git a/tests/github/test_create_github_release_notes.py b/tests/github/test_create_github_release_notes.py index 1a36fb26..c956b624 100644 --- a/tests/github/test_create_github_release_notes.py +++ b/tests/github/test_create_github_release_notes.py @@ -1,12 +1,28 @@ +import pytest import requests_mock +from git import Repo +from moto import mock_aws from gardenlinux.constants import GLVD_BASE_URL from gardenlinux.github.release_notes import ( release_notes_changes_section, release_notes_compare_package_versions_section, ) +from gardenlinux.github.release_notes.deployment_platform import DeploymentPlatform +from gardenlinux.github.release_notes.helpers import get_variant_from_flavor -from ..constants import TEST_GARDENLINUX_RELEASE +from ..constants import ( + RELEASE_NOTES_S3_ARTIFACTS_DIR, + RELEASE_NOTES_TEST_DATA_DIR, + TEST_GARDENLINUX_COMMIT, + TEST_GARDENLINUX_RELEASE, +) + +TEST_FLAVORS = [("foo_bar_baz", "legacy"), + ("aws-gardener_prod_trustedboot_tpm2-amd64", "legacy"), + ("openstack-gardener_prod_tpm2_trustedboot-arm64", "tpm2_trustedboot"), + ("azure-gardener_prod_usi-amd64", "usi"), + ("", "legacy")] def test_release_notes_changes_section_empty_packagelist(): @@ -37,3 +53,63 @@ def test_release_notes_compare_package_versions_section_semver_is_not_recognized def test_release_notes_compare_package_versions_section_unrecognizable_version(): assert release_notes_compare_package_versions_section("garden.linux", []) == "" + + +@pytest.mark.parametrize("flavor", TEST_FLAVORS) +def test_get_variant_from_flavor(flavor): + assert get_variant_from_flavor(flavor[0]) == flavor[1] + + +def test_default_get_file_extension_for_deployment_platform(): + assert DeploymentPlatform().image_extension() == "raw" + + +@mock_aws +def test_github_release_page(monkeypatch, downloads_dir, release_s3_bucket): + + class SubmoduleAsRepo(Repo): + """This will fake a git submodule as a git repository object.""" + def __new__(cls, *args, **kwargs): + print('In SubmoduleAsRepo.__new__') + r = super().__new__(Repo) + r.__init__(*args, **kwargs) + print(f'{r=}') + + maybe_gl_submodule = [submodule for submodule in r.submodules if submodule.name.endswith("/gardenlinux")] + if not maybe_gl_submodule: + return r + else: + gl = maybe_gl_submodule[0] + print(f'{gl=}') + + sr = gl.module() + print(f'{sr=}') + sr.remotes.origin.pull("main") + print('git pull done') + return sr + + monkeypatch.setattr("gardenlinux.github.release_notes.helpers.Repo", SubmoduleAsRepo) + import gardenlinux.github + + release_fixture_path = RELEASE_NOTES_TEST_DATA_DIR / f"github_release_notes_{TEST_GARDENLINUX_RELEASE}.md" + glvd_response_fixture_path = RELEASE_NOTES_TEST_DATA_DIR / f"glvd_{TEST_GARDENLINUX_RELEASE}.json" + + with requests_mock.Mocker(real_http=True) as m: + for yaml_file in RELEASE_NOTES_S3_ARTIFACTS_DIR.glob("*.yaml"): + filename = yaml_file.name + base = filename[:-len(".s3_metadata.yaml")] + key = f"meta/singles/{base}-{TEST_GARDENLINUX_RELEASE}-{TEST_GARDENLINUX_COMMIT}" + release_s3_bucket.upload_file(str(yaml_file), key) + + m.get( + f"{GLVD_BASE_URL}/patchReleaseNotes/{TEST_GARDENLINUX_RELEASE}", + text=glvd_response_fixture_path.read_text(), + status_code=200 + ) + generated_release_notes = gardenlinux.github.release_notes.create_github_release_notes( + TEST_GARDENLINUX_RELEASE, + TEST_GARDENLINUX_COMMIT, + release_s3_bucket.name + ) + + assert generated_release_notes == release_fixture_path.read_text() From 583a5478b6b7d35f48b96b1b33d8aba6339803e1 Mon Sep 17 00:00:00 2001 From: Vivus Ignis Date: Wed, 8 Oct 2025 13:54:08 +0200 Subject: [PATCH 3/6] removing unused code --- .../github/release_notes/helpers.py | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/src/gardenlinux/github/release_notes/helpers.py b/src/gardenlinux/github/release_notes/helpers.py index 911ee7c6..de8c6c9c 100644 --- a/src/gardenlinux/github/release_notes/helpers.py +++ b/src/gardenlinux/github/release_notes/helpers.py @@ -9,7 +9,6 @@ from gardenlinux.apt import DebsrcFile, GardenLinuxRepo from gardenlinux.apt.package_repo_info import compare_repo from gardenlinux.constants import ( - GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME, GL_DEB_REPO_BASE_URL, IMAGE_VARIANTS, REQUESTS_TIMEOUTS, @@ -130,37 +129,3 @@ def get_variant_from_flavor(flavor_name): return "tpm2_trustedboot" case _: return "legacy" - - -def get_platform_display_name(platform, clouds): - """ - Get the display name for a platform. - """ - match platform: - case "ali" | "openstackbaremetal" | "openstack" | "azure" | "gcp" | "aws": - return clouds[platform] - case _: - return platform.upper() - - -def get_platform_release_note_data(metadata, platform): - """ - Get the appropriate cloud release note data based on platform. - Returns the structured data dictionary. - """ - match platform: - case "ali": - return _ali_release_note(metadata) - case "aws": - return _aws_release_note(metadata) - case "gcp": - return _gcp_release_note(metadata) - case "azure": - return _azure_release_note(metadata) - case "openstack": - return _openstack_release_note(metadata) - case "openstackbaremetal": - return _openstackbaremetal_release_note(metadata) - case _: - LOGGER.error(f"unknown platform {platform}") - return None From f3a3b378efa48e9540031eb94689850bf1597357 Mon Sep 17 00:00:00 2001 From: Vivus Ignis Date: Wed, 8 Oct 2025 13:54:42 +0200 Subject: [PATCH 4/6] gitignore update --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 955a202f..3bc2923b 100644 --- a/.gitignore +++ b/.gitignore @@ -169,3 +169,5 @@ bandit-report.json # zot test-data/zot + +s3_downloads/ From f33a40a58e12aa4c056b9d519033da3bd0a886ea Mon Sep 17 00:00:00 2001 From: Vivus Ignis Date: Wed, 8 Oct 2025 14:10:48 +0200 Subject: [PATCH 5/6] cleanup; tests for github cli --- .../test_create_github_release_notes.py | 5 -- tests/github/test_github_script.py | 80 +++++++++++++++++++ 2 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 tests/github/test_github_script.py diff --git a/tests/github/test_create_github_release_notes.py b/tests/github/test_create_github_release_notes.py index c956b624..a900082e 100644 --- a/tests/github/test_create_github_release_notes.py +++ b/tests/github/test_create_github_release_notes.py @@ -70,22 +70,17 @@ def test_github_release_page(monkeypatch, downloads_dir, release_s3_bucket): class SubmoduleAsRepo(Repo): """This will fake a git submodule as a git repository object.""" def __new__(cls, *args, **kwargs): - print('In SubmoduleAsRepo.__new__') r = super().__new__(Repo) r.__init__(*args, **kwargs) - print(f'{r=}') maybe_gl_submodule = [submodule for submodule in r.submodules if submodule.name.endswith("/gardenlinux")] if not maybe_gl_submodule: return r else: gl = maybe_gl_submodule[0] - print(f'{gl=}') sr = gl.module() - print(f'{sr=}') sr.remotes.origin.pull("main") - print('git pull done') return sr monkeypatch.setattr("gardenlinux.github.release_notes.helpers.Repo", SubmoduleAsRepo) diff --git a/tests/github/test_github_script.py b/tests/github/test_github_script.py new file mode 100644 index 00000000..c94885a4 --- /dev/null +++ b/tests/github/test_github_script.py @@ -0,0 +1,80 @@ +import sys + +import pytest + +import gardenlinux.github.__main__ as gh +from gardenlinux.constants import GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME + +from ..constants import TEST_GARDENLINUX_COMMIT, TEST_GARDENLINUX_RELEASE + + +def test_script_parse_args_wrong_command(monkeypatch, capfd): + monkeypatch.setattr(sys, "argv", ["gh", "rejoice"]) + + with pytest.raises(SystemExit): + gh.main() + captured = capfd.readouterr() + + assert "argument command: invalid choice: 'rejoice'" in captured.err, "Expected help message printed" + + +def test_script_parse_args_create_command_required_args(monkeypatch, capfd): + monkeypatch.setattr(sys, "argv", ["gh", "create", "--owner", "gardenlinux", "--repo", "gardenlinux"]) + + with pytest.raises(SystemExit): + gh.main() + captured = capfd.readouterr() + + assert "the following arguments are required: --tag, --commit" in captured.err, \ + "Expected help message on missing arguments for 'create' command" + + +def test_script_parse_args_upload_command_required_args(monkeypatch, capfd): + monkeypatch.setattr(sys, "argv", ["gh", "upload", "--owner", "gardenlinux", "--repo", "gardenlinux"]) + + with pytest.raises(SystemExit): + gh.main() + captured = capfd.readouterr() + + assert "the following arguments are required: --release_id, --file_path" in captured.err, \ + "Expected help message on missing arguments for 'upload' command" + + +def test_script_create_dry_run(monkeypatch, capfd): + + monkeypatch.setattr(sys, "argv", ["gh", "create", "--owner", "gardenlinux", "--repo", + "gardenlinux", "--tag", TEST_GARDENLINUX_RELEASE, "--commit", TEST_GARDENLINUX_COMMIT, "--dry-run"]) + monkeypatch.setattr("gardenlinux.github.__main__.create_github_release_notes", + lambda tag, commit, bucket: f"{tag} {commit} {bucket}") + + gh.main() + captured = capfd.readouterr() + + assert captured.out == f"Dry Run ...\nThis release would be created:\n{TEST_GARDENLINUX_RELEASE} {TEST_GARDENLINUX_COMMIT} {GARDENLINUX_GITHUB_RELEASE_BUCKET_NAME}\n", \ + "Expected dry-run create to return generated release notes text" + + +def test_script_create(monkeypatch, caplog): + monkeypatch.setattr(sys, "argv", ["gh", "create", "--owner", "gardenlinux", "--repo", + "gardenlinux", "--tag", TEST_GARDENLINUX_RELEASE, "--commit", TEST_GARDENLINUX_COMMIT]) + monkeypatch.setattr("gardenlinux.github.__main__.create_github_release_notes", + lambda tag, commit, bucket: f"{tag} {commit} {bucket}") + monkeypatch.setattr("gardenlinux.github.__main__.create_github_release", + lambda a1, a2, a3, a4, a5, a6: TEST_GARDENLINUX_RELEASE) + + gh.main() + + assert any(f"Release created with ID: {TEST_GARDENLINUX_RELEASE}" in record.message for record in caplog.records), \ + "Expected a release creation confirmation log entry" + + +def test_script_upload_dry_run(monkeypatch, capfd): + monkeypatch.setattr(sys, "argv", ["gh", "upload", "--owner", "gardenlinux", "--repo", + "gardenlinux", "--release_id", TEST_GARDENLINUX_RELEASE, "--file_path", "foo", "--dry-run"]) + monkeypatch.setattr("gardenlinux.github.__main__.upload_to_github_release_page", + lambda a1, a2, a3, a4, dry_run: print(f"dry-run: {dry_run}")) + + gh.main() + captured = capfd.readouterr() + + assert captured.out == "dry-run: True\n" From 880f5387e17efb4bbc79c8dbbe22cb03ac48715f Mon Sep 17 00:00:00 2001 From: Vivus Ignis Date: Wed, 8 Oct 2025 14:11:22 +0200 Subject: [PATCH 6/6] gitignore update --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3bc2923b..5569953a 100644 --- a/.gitignore +++ b/.gitignore @@ -171,3 +171,4 @@ bandit-report.json test-data/zot s3_downloads/ +.github_release_id