From 86fd88c950a4fff1c662fa6e1cdc8883208a2a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 19 Feb 2026 14:24:39 +0100 Subject: [PATCH 01/36] feat: Allow filtering by platform on workflow call --- .github/workflows/build_images.yaml | 5 ++++ .../workflows/build_images/build_images.py | 27 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 73f1953e..7514b79b 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -18,6 +18,10 @@ on: type: string description: Flavor name/s | one (alone), several (separated by commas) default: "*" + platforms: + type: string + description: Platforms to build for, formatted as os/arch (e.g. linux/amd64). Can be a single platform, a comma-separated list, or * for all + default: "*" secrets: type: string description: Secrets to pass to the image @@ -115,6 +119,7 @@ jobs: vars: | repo_name="${{ github.repository }}" flavors="${{ inputs.flavors }}" + platforms="${{ inputs.platforms }}" auth_strategy="${{ inputs.auth_strategy }}" snapshots_registry="${{ vars.DOCKER_REGISTRY_SNAPSHOTS }}" releases_registry="${{ vars.DOCKER_REGISTRY_RELEASES }}" diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index fc9078a5..05b8c71d 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -52,6 +52,7 @@ def __init__(self, **kwargs) -> None: self._workflow_run_url = self.vars.get('workflow_run_url', None) self._service_path = self.vars.get('service_path', '') self._flavors = self.vars.get('flavors', 'default') + self._platforms = self.vars.get('platforms', '') self._container_structure_filename = self.vars.get( 'container_structure_filename', None ) @@ -123,6 +124,10 @@ def workflow_run_url(self): def flavors(self): return self._flavors + @property + def platforms(self): + return self._platforms + @property def service_path(self): return self._service_path @@ -251,7 +256,6 @@ def filter_flavors(self): self._flavors = final_flavors_list - def filter_auto_build(self): logger.info( 'Publishing all flavors with auto build enabled:', @@ -359,6 +363,22 @@ async def compile_images_for_all_flavors(self): dockerfile, extra_registries,\ extra_tags, platforms = self.get_flavor_data(flavor) + platforms_to_build = [] + if self.check_if_build_all_platforms(): + platforms_to_build = platforms + else: + allowed_platforms = self.platforms.replace(' ', '').split(',') + + # Get the platforms to build for this flavor by checking the intersection + platforms_to_build = list(set(platforms) & set(allowed_platforms)) + + if len(platforms_to_build) == 0: + logger.warning( + f"No matching platforms to build for flavor {flavor}. " + f"Skipping..." + ) + continue + # Set the build arguments for the current flavor build_args_list = [ dagger.BuildArg(name=key, value=value) @@ -424,7 +444,7 @@ async def compile_images_for_all_flavors(self): secrets, dockerfile, image, - platforms + platforms_to_build ) image_tag = image.split(":")[1] @@ -450,6 +470,9 @@ async def compile_images_for_all_flavors(self): return results_list + def check_if_build_all_platforms(self): + return self.platforms == '*' + def get_flavor_data(self, flavor): flavor_data = self.config.images[flavor] From 01189e04a3de7d005748a6d39f39e4d367272d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Mon, 23 Feb 2026 12:35:45 +0100 Subject: [PATCH 02/36] fix: Add info log --- firestarter/workflows/build_images/build_images.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 05b8c71d..6eabc761 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -372,6 +372,10 @@ async def compile_images_for_all_flavors(self): # Get the platforms to build for this flavor by checking the intersection platforms_to_build = list(set(platforms) & set(allowed_platforms)) + logger.info( + f"Building flavor {flavor} for platforms: {platforms_to_build}" + ) + if len(platforms_to_build) == 0: logger.warning( f"No matching platforms to build for flavor {flavor}. " From ec97de0e2294781e4a11e01ea4c70977aa4c8a7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Mon, 23 Feb 2026 12:53:40 +0100 Subject: [PATCH 03/36] test: Debug logs --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 6eabc761..c8389dad 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -373,7 +373,7 @@ async def compile_images_for_all_flavors(self): platforms_to_build = list(set(platforms) & set(allowed_platforms)) logger.info( - f"Building flavor {flavor} for platforms: {platforms_to_build}" + f">>>>>>>>>>>>>>> Date: Mon, 23 Feb 2026 13:00:16 +0100 Subject: [PATCH 04/36] fix: Removed test logs --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index c8389dad..6eabc761 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -373,7 +373,7 @@ async def compile_images_for_all_flavors(self): platforms_to_build = list(set(platforms) & set(allowed_platforms)) logger.info( - f">>>>>>>>>>>>>>> Date: Mon, 23 Feb 2026 13:29:20 +0100 Subject: [PATCH 05/36] fix: Tests --- firestarter/tests/test_build_images_functionality.py | 1 + 1 file changed, 1 insertion(+) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index 4ba9a975..ddb4e795 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -25,6 +25,7 @@ "releases_registry": "xxxx.azurecr.io", "snapshots_registry_creds": "test_snapshots_creds", "releases_registry_creds": "test_releases_creds", + "platforms": "linux/amd64,linux/arm64", } secrets = {} config_file_path = f"{os.path.dirname(os.path.realpath(__file__))}/fixtures/build_images.yaml" From c4f7d6bf7f7625f373690cf9014eb46f8d076028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Mon, 23 Feb 2026 14:57:34 +0100 Subject: [PATCH 06/36] fix: Made it so all platforms are built by default --- firestarter/workflows/build_images/build_images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 6eabc761..d2fef264 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -52,7 +52,7 @@ def __init__(self, **kwargs) -> None: self._workflow_run_url = self.vars.get('workflow_run_url', None) self._service_path = self.vars.get('service_path', '') self._flavors = self.vars.get('flavors', 'default') - self._platforms = self.vars.get('platforms', '') + self._platforms = self.vars.get('platforms', '*') self._container_structure_filename = self.vars.get( 'container_structure_filename', None ) From 6830720c1c165061c99e0402a32b1ae3988b2a0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Mon, 23 Feb 2026 15:12:24 +0100 Subject: [PATCH 07/36] fix: Support platforms both with and without the linux/ prefix --- firestarter/workflows/build_images/build_images.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index d2fef264..a60790e7 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -368,9 +368,15 @@ async def compile_images_for_all_flavors(self): platforms_to_build = platforms else: allowed_platforms = self.platforms.replace(' ', '').split(',') + unique_normalized_allowed_platforms = { + p.replace('linux/', '') for p in allowed_platforms + } # Get the platforms to build for this flavor by checking the intersection - platforms_to_build = list(set(platforms) & set(allowed_platforms)) + platforms_to_build = [ + platform for platform in platforms + if platform.replace('linux/', '') in unique_normalized_allowed_platforms + ] logger.info( f"Building flavor {flavor} for platforms: {platforms_to_build}" From 5b32741e9a459b576848dd5e8a0011f8a24bf4b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 09:08:58 +0100 Subject: [PATCH 08/36] fix: Also trim platforms when checking for wildcards --- firestarter/workflows/build_images/build_images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index a60790e7..d94e56ef 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -481,7 +481,7 @@ async def compile_images_for_all_flavors(self): return results_list def check_if_build_all_platforms(self): - return self.platforms == '*' + return self.platforms.replace(' ', '') == '*' def get_flavor_data(self, flavor): flavor_data = self.config.images[flavor] From 41617b3ff9b62bf606a6308458aaf9b468ab4794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 09:22:54 +0100 Subject: [PATCH 09/36] fix: Add error when no image is built --- firestarter/workflows/build_images/build_images.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index d94e56ef..106dd60b 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -474,6 +474,11 @@ async def compile_images_for_all_flavors(self): "workflow_run_url": self.workflow_run_url }) + if len(results_list) == 0: + raise Exception( + "No images were built. Please check the flavor and platform filters." + ) + yaml.default_flow_style = False with open(os.path.join("/tmp", self.output_results), "w") as f: yaml.dump(results_list, f) From 22cfed21975ae8092c1909ce102fe568251742d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 09:29:21 +0100 Subject: [PATCH 10/36] fix: Improved error message --- firestarter/workflows/build_images/build_images.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 106dd60b..82134e28 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -475,9 +475,11 @@ async def compile_images_for_all_flavors(self): }) if len(results_list) == 0: - raise Exception( - "No images were built. Please check the flavor and platform filters." + error_message = ( + f"No images were built. " + f"Please check the workflow filters are correct." ) + raise Exception(error_message) yaml.default_flow_style = False with open(os.path.join("/tmp", self.output_results), "w") as f: From 0245f6edc7029963694d3cd981509b7536f639b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 10:00:41 +0100 Subject: [PATCH 11/36] fix: Renamed normalized platforms variable --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 82134e28..7b32e813 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -368,14 +368,14 @@ async def compile_images_for_all_flavors(self): platforms_to_build = platforms else: allowed_platforms = self.platforms.replace(' ', '').split(',') - unique_normalized_allowed_platforms = { + normalized_allowed_platforms = { p.replace('linux/', '') for p in allowed_platforms } # Get the platforms to build for this flavor by checking the intersection platforms_to_build = [ platform for platform in platforms - if platform.replace('linux/', '') in unique_normalized_allowed_platforms + if platform.replace('linux/', '') in normalized_allowed_platforms ] logger.info( From 4c766ba8c51579980717dcd753b238443d4f793c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 10:44:21 +0100 Subject: [PATCH 12/36] fix: Added test for platform filters --- .../tests/test_build_images_functionality.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index ddb4e795..230d6112 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -427,6 +427,53 @@ async def test_compile_images_for_all_flavors(mocker) -> None: assert result[7]["repository"] == "repo3" assert result[7]["image_tag"] == "flavor3-custom-tag" +@pytest.mark.asyncio +async def test_compile_images_filtering_by_platform(mocker) -> None: + mocker.patch("dagger.Config") + mocker.patch("dagger.Connection") + mocker.patch.object(builder, "compile_image_and_publish") + + dagger_config_mock = dagger.Config + dagger_connection_mock = dagger.Connection + + builder._flavors = "flavor1, flavor3" + builder._platforms = "linux/amd64" + builder.filter_flavors() + + result = await builder.compile_images_for_all_flavors() + + assert len(result) == 4 + assert result[0]["flavor"] == "flavor1" + assert result[0]["repository"] == "xxx/yyy" + assert result[0]["image_tag"] == "aaaaaaa_flavor1" + assert result[1]["flavor"] == "flavor1" + assert result[1]["repository"] == "xxx/yyy" + assert result[1]["image_tag"] == "flavor1-custom-tag" + assert result[2]["flavor"] == "flavor1" + assert result[2]["repository"] == "repo1" + assert result[2]["image_tag"] == "aaaaaaa_flavor1" + assert result[3]["flavor"] == "flavor1" + assert result[3]["repository"] == "repo1" + assert result[3]["image_tag"] == "flavor1-custom-tag" + + builder._platforms = "arm64" + + result = await builder.compile_images_for_all_flavors() + + assert len(result) == 4 + assert result[0]["flavor"] == "flavor3" + assert result[0]["repository"] == "repository3" + assert result[0]["image_tag"] == "aaaaaaa_flavor3" + assert result[1]["flavor"] == "flavor3" + assert result[1]["repository"] == "repository3" + assert result[1]["image_tag"] == "flavor3-custom-tag" + assert result[2]["flavor"] == "flavor3" + assert result[2]["repository"] == "repo3" + assert result[2]["image_tag"] == "aaaaaaa_flavor3" + assert result[3]["flavor"] == "flavor3" + assert result[3]["repository"] == "repo3" + assert result[3]["image_tag"] == "flavor3-custom-tag" + # The object correctly returns the flavor data of a chosen flavor, # as written in fixtures/build_images.yaml def test_get_flavor_data() -> None: From c433a65d67a51b3d161ac92a54a8eb4945f5be38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 10:48:25 +0100 Subject: [PATCH 13/36] fix: Platform filter test --- .../tests/test_build_images_functionality.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index 230d6112..3d452adf 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -442,7 +442,7 @@ async def test_compile_images_filtering_by_platform(mocker) -> None: result = await builder.compile_images_for_all_flavors() - assert len(result) == 4 + assert len(result) == 8 assert result[0]["flavor"] == "flavor1" assert result[0]["repository"] == "xxx/yyy" assert result[0]["image_tag"] == "aaaaaaa_flavor1" @@ -455,6 +455,18 @@ async def test_compile_images_filtering_by_platform(mocker) -> None: assert result[3]["flavor"] == "flavor1" assert result[3]["repository"] == "repo1" assert result[3]["image_tag"] == "flavor1-custom-tag" + assert result[4]["flavor"] == "flavor3" + assert result[4]["repository"] == "repository3" + assert result[4]["image_tag"] == "aaaaaaa_flavor3" + assert result[5]["flavor"] == "flavor3" + assert result[5]["repository"] == "repository3" + assert result[5]["image_tag"] == "flavor3-custom-tag" + assert result[6]["flavor"] == "flavor3" + assert result[6]["repository"] == "repo3" + assert result[6]["image_tag"] == "aaaaaaa_flavor3" + assert result[7]["flavor"] == "flavor3" + assert result[7]["repository"] == "repo3" + assert result[7]["image_tag"] == "flavor3-custom-tag" builder._platforms = "arm64" From 510e7eaee0ef639b8402d0da6e512fc22540fe76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 11:03:13 +0100 Subject: [PATCH 14/36] fix: Simplified tests --- .../tests/test_build_images_functionality.py | 48 ++++--------------- 1 file changed, 9 insertions(+), 39 deletions(-) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index 3d452adf..2565fafd 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -441,50 +441,20 @@ async def test_compile_images_filtering_by_platform(mocker) -> None: builder.filter_flavors() result = await builder.compile_images_for_all_flavors() - - assert len(result) == 8 - assert result[0]["flavor"] == "flavor1" - assert result[0]["repository"] == "xxx/yyy" - assert result[0]["image_tag"] == "aaaaaaa_flavor1" - assert result[1]["flavor"] == "flavor1" - assert result[1]["repository"] == "xxx/yyy" - assert result[1]["image_tag"] == "flavor1-custom-tag" - assert result[2]["flavor"] == "flavor1" - assert result[2]["repository"] == "repo1" - assert result[2]["image_tag"] == "aaaaaaa_flavor1" - assert result[3]["flavor"] == "flavor1" - assert result[3]["repository"] == "repo1" - assert result[3]["image_tag"] == "flavor1-custom-tag" - assert result[4]["flavor"] == "flavor3" - assert result[4]["repository"] == "repository3" - assert result[4]["image_tag"] == "aaaaaaa_flavor3" - assert result[5]["flavor"] == "flavor3" - assert result[5]["repository"] == "repository3" - assert result[5]["image_tag"] == "flavor3-custom-tag" - assert result[6]["flavor"] == "flavor3" - assert result[6]["repository"] == "repo3" - assert result[6]["image_tag"] == "aaaaaaa_flavor3" - assert result[7]["flavor"] == "flavor3" - assert result[7]["repository"] == "repo3" - assert result[7]["image_tag"] == "flavor3-custom-tag" + built_flavors = set([image["flavor"] for image in result]) + assert built_flavors == {"flavor1", "flavor3"} builder._platforms = "arm64" result = await builder.compile_images_for_all_flavors() + built_flavors = set([image["flavor"] for image in result]) + assert built_flavors == {"flavor3"} + + builder._platforms = "*" - assert len(result) == 4 - assert result[0]["flavor"] == "flavor3" - assert result[0]["repository"] == "repository3" - assert result[0]["image_tag"] == "aaaaaaa_flavor3" - assert result[1]["flavor"] == "flavor3" - assert result[1]["repository"] == "repository3" - assert result[1]["image_tag"] == "flavor3-custom-tag" - assert result[2]["flavor"] == "flavor3" - assert result[2]["repository"] == "repo3" - assert result[2]["image_tag"] == "aaaaaaa_flavor3" - assert result[3]["flavor"] == "flavor3" - assert result[3]["repository"] == "repo3" - assert result[3]["image_tag"] == "flavor3-custom-tag" + result = await builder.compile_images_for_all_flavors() + built_flavors = set([image["flavor"] for image in result]) + assert built_flavors == {"flavor1", "flavor3"} # The object correctly returns the flavor data of a chosen flavor, # as written in fixtures/build_images.yaml From 80af883eda6626e36754922d10b2eb61129b05f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 12:33:47 +0100 Subject: [PATCH 15/36] fix: Validate platforms var --- .../workflows/build_images/build_images.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 7b32e813..d5f7acb9 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -52,7 +52,9 @@ def __init__(self, **kwargs) -> None: self._workflow_run_url = self.vars.get('workflow_run_url', None) self._service_path = self.vars.get('service_path', '') self._flavors = self.vars.get('flavors', 'default') - self._platforms = self.vars.get('platforms', '*') + self._platforms = self.validate_platforms( + self.vars.get('platforms', '*') + ) self._container_structure_filename = self.vars.get( 'container_structure_filename', None ) @@ -490,6 +492,22 @@ async def compile_images_for_all_flavors(self): def check_if_build_all_platforms(self): return self.platforms.replace(' ', '') == '*' + def validate_platforms(self, platforms): + if platforms.replace(' ', '') == '*': + return platforms + + platform_list = platforms.replace(' ', '').split(',') + + for platform in platform_list: + if not re.match(r'^(linux/)?(amd64|arm64)$', platform): + raise ValueError( + f"Invalid platform: {platform}. " + f"Valid platforms follow the regex: '^(linux/)?(amd64|arm64)$'. " + f"You can also use '*' to build for all platforms." + ) + + return platforms + def get_flavor_data(self, flavor): flavor_data = self.config.images[flavor] From c6f791d3cfce4a3f3c7045b401030dd87f9eb391 Mon Sep 17 00:00:00 2001 From: juanjosevazquezgil <123170708+juanjosevazquezgil@users.noreply.github.com> Date: Tue, 24 Feb 2026 13:28:57 +0100 Subject: [PATCH 16/36] Update firestarter/workflows/build_images/build_images.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index d5f7acb9..63f1bb2d 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -502,8 +502,8 @@ def validate_platforms(self, platforms): if not re.match(r'^(linux/)?(amd64|arm64)$', platform): raise ValueError( f"Invalid platform: {platform}. " - f"Valid platforms follow the regex: '^(linux/)?(amd64|arm64)$'. " - f"You can also use '*' to build for all platforms." + "Valid platforms are: linux/amd64, linux/arm64, amd64, arm64, " + "or '*'. Whitespace around comma-separated entries is ignored." ) return platforms From 34b1143eac6a4f93574d406c2447525405ce0464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 13:57:16 +0100 Subject: [PATCH 17/36] fix: Update validation function to return trimmed platforms --- firestarter/workflows/build_images/build_images.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 63f1bb2d..d6f31630 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -493,10 +493,11 @@ def check_if_build_all_platforms(self): return self.platforms.replace(' ', '') == '*' def validate_platforms(self, platforms): - if platforms.replace(' ', '') == '*': + trimmed_platforms = platforms.replace(' ', '') + if trimmed_platforms == '*': return platforms - platform_list = platforms.replace(' ', '').split(',') + platform_list = trimmed_platforms.split(',') for platform in platform_list: if not re.match(r'^(linux/)?(amd64|arm64)$', platform): @@ -506,7 +507,7 @@ def validate_platforms(self, platforms): "or '*'. Whitespace around comma-separated entries is ignored." ) - return platforms + return trimmed_platforms def get_flavor_data(self, flavor): flavor_data = self.config.images[flavor] From ef6735903c1877c43945ba112cd71c3371b315e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 14:36:27 +0100 Subject: [PATCH 18/36] fix: Improve tests --- .../tests/test_build_images_functionality.py | 23 ++++++++++++++++--- .../workflows/build_images/build_images.py | 14 +++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index 2565fafd..5731e49d 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -437,25 +437,42 @@ async def test_compile_images_filtering_by_platform(mocker) -> None: dagger_connection_mock = dagger.Connection builder._flavors = "flavor1, flavor3" - builder._platforms = "linux/amd64" + builder._platforms = builder.validate_platforms("linux/amd64") builder.filter_flavors() result = await builder.compile_images_for_all_flavors() built_flavors = set([image["flavor"] for image in result]) assert built_flavors == {"flavor1", "flavor3"} - builder._platforms = "arm64" + builder._platforms = builder.validate_platforms("arm64") result = await builder.compile_images_for_all_flavors() built_flavors = set([image["flavor"] for image in result]) assert built_flavors == {"flavor3"} - builder._platforms = "*" + builder._platforms = builder.validate_platforms("*") result = await builder.compile_images_for_all_flavors() built_flavors = set([image["flavor"] for image in result]) assert built_flavors == {"flavor1", "flavor3"} +def test_validate_platforms() -> None: + all_valid_platforms = "linux/amd64 , linux/arm64,arm64 , amd64" + returned_platforms = builder.validate_platforms(all_valid_platforms) + assert returned_platforms == all_valid_platforms.replace(" ", "") + + some_valid_platforms = " linux/amd64, arm64 " + returned_platforms = builder.validate_platforms(some_valid_platforms) + assert returned_platforms == some_valid_platforms.replace(" ", "") + + invalid_platforms = "platform_doesnt_exist, test" + with pytest.raises(ValueError, match="Invalid platform(s): platform_doesnt_exist, test."): + builder.validate_platforms(invalid_platforms) + + no_platforms = ",,,," + with pytest.raises(ValueError, match="Invalid platform(s):"): + builder.validate_platforms(no_platforms) + # The object correctly returns the flavor data of a chosen flavor, # as written in fixtures/build_images.yaml def test_get_flavor_data() -> None: diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index d6f31630..1c980ae0 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -499,13 +499,17 @@ def validate_platforms(self, platforms): platform_list = trimmed_platforms.split(',') + invalid_platforms = [] for platform in platform_list: if not re.match(r'^(linux/)?(amd64|arm64)$', platform): - raise ValueError( - f"Invalid platform: {platform}. " - "Valid platforms are: linux/amd64, linux/arm64, amd64, arm64, " - "or '*'. Whitespace around comma-separated entries is ignored." - ) + invalid_platforms.append(platform) + + if invalid_platforms: + raise ValueError( + f"Invalid platform(s): {invalid_platforms.join(', ')}. " + "Valid platforms are: linux/amd64, linux/arm64, amd64, arm64, " + "or '*'. Whitespace around comma-separated entries is ignored." + ) return trimmed_platforms From 6e4ceaf312dbdb0dd20bf9be9bdadfb180ecdbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 14:38:17 +0100 Subject: [PATCH 19/36] fix: join statement --- firestarter/workflows/build_images/build_images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 1c980ae0..ddb7b5ef 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -506,7 +506,7 @@ def validate_platforms(self, platforms): if invalid_platforms: raise ValueError( - f"Invalid platform(s): {invalid_platforms.join(', ')}. " + f"Invalid platform(s): {', '.join(invalid_platforms)}. " "Valid platforms are: linux/amd64, linux/arm64, amd64, arm64, " "or '*'. Whitespace around comma-separated entries is ignored." ) From 4a26bba4a9ac6d3497ba59bbb484aee76a49ae3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 14:44:05 +0100 Subject: [PATCH 20/36] fix: Error matching logic --- firestarter/tests/test_build_images_functionality.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index 5731e49d..135bb623 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -10,6 +10,7 @@ import subprocess from mock_classes import DaggerContextMock, DaggerImageMock import os +import re import docker import json import requests @@ -466,11 +467,11 @@ def test_validate_platforms() -> None: assert returned_platforms == some_valid_platforms.replace(" ", "") invalid_platforms = "platform_doesnt_exist, test" - with pytest.raises(ValueError, match="Invalid platform(s): platform_doesnt_exist, test."): + with pytest.raises(ValueError, match=re.escape("Invalid platform(s): platform_doesnt_exist, test.")): builder.validate_platforms(invalid_platforms) no_platforms = ",,,," - with pytest.raises(ValueError, match="Invalid platform(s):"): + with pytest.raises(ValueError, match=re.escape("Invalid platform(s):")): builder.validate_platforms(no_platforms) # The object correctly returns the flavor data of a chosen flavor, From 2bbff3edba6ef4cc86eae2dae4e25305b458d8ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Tue, 24 Feb 2026 15:05:03 +0100 Subject: [PATCH 21/36] fix: Add runs_on input --- .github/workflows/build_images.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 7514b79b..24c79d1c 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -38,6 +38,10 @@ on: type: string description: Git reference from where to pull the workflows_repo default: v2 + runs_on: + type: string + description: Runner image name to run the job on + default: '' secrets: FS_CHECKS_PEM_FILE: required: false @@ -59,7 +63,7 @@ jobs: build-images: env: GH_TOKEN: ${{ secrets.GITHUB_DOCKER_REGISTRY_CREDS || github.token }} - runs-on: ${{ fromJSON(vars.BUILD_DOCKER_IMAGES_RUNS_ON || '["ubuntu-24.04"]') }} + runs-on: ${{ fromJSON(inputs.runs_on || '["ubuntu-24.04"]') }} steps: - name: Configure Azure Credentials uses: azure/login@v2 From 8e859b06f466a5b6a897b3ac27668b3bc7470eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 12:11:32 +0100 Subject: [PATCH 22/36] fix: Made error into warning --- firestarter/workflows/build_images/build_images.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index ddb7b5ef..4257ae5f 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -477,11 +477,10 @@ async def compile_images_for_all_flavors(self): }) if len(results_list) == 0: - error_message = ( + logger.warning( f"No images were built. " f"Please check the workflow filters are correct." ) - raise Exception(error_message) yaml.default_flow_style = False with open(os.path.join("/tmp", self.output_results), "w") as f: From 8ef5aca7bfd2e261b81c00497ceaa3c9dcbfbbab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 12:16:02 +0100 Subject: [PATCH 23/36] fix: Add ::warning:: command to warning log --- firestarter/workflows/build_images/build_images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 4257ae5f..c50151fa 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -478,7 +478,7 @@ async def compile_images_for_all_flavors(self): if len(results_list) == 0: logger.warning( - f"No images were built. " + f"::warning::No images were built. " f"Please check the workflow filters are correct." ) From 6ee905580c7f4dc60a848776ec7faf4476218935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 12:46:05 +0100 Subject: [PATCH 24/36] fix: Don't update check run summary or upload artifacts --- .github/workflows/build_images.yaml | 30 +++++++++---------- .../workflows/build_images/build_images.py | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 24c79d1c..c8f43162 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -138,19 +138,19 @@ jobs: releases_registry_creds="${{ secrets.DOCKER_REGISTRY_RELEASES_CREDS }}" secrets: ${{ inputs.secrets }} - - uses: actions/upload-artifact@v4 - with: - name: build-images-results - path: /tmp/build_images_results.yaml + # - uses: actions/upload-artifact@v4 + # with: + # name: build-images-results + # path: /tmp/build_images_results.yaml - - name: Update Check Run Summary - id: update-check-run-summary - if: always() - uses: prefapp/action-build-images-summary@v1 - with: - conclusion: ${{ steps.build-images.outcome }} - token: ${{ steps.get-gh-app-token.outputs.token }} - summary_path: '/tmp/build_images_results.yaml' - check_run_name: ${{ inputs.check_run_name }} - ref: ${{ inputs.from }} - op: 'complete-check-run' + # - name: Update Check Run Summary + # id: update-check-run-summary + # if: always() + # uses: prefapp/action-build-images-summary@v1 + # with: + # conclusion: ${{ steps.build-images.outcome }} + # token: ${{ steps.get-gh-app-token.outputs.token }} + # summary_path: '/tmp/build_images_results.yaml' + # check_run_name: ${{ inputs.check_run_name }} + # ref: ${{ inputs.from }} + # op: 'complete-check-run' diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index c50151fa..4257ae5f 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -478,7 +478,7 @@ async def compile_images_for_all_flavors(self): if len(results_list) == 0: logger.warning( - f"::warning::No images were built. " + f"No images were built. " f"Please check the workflow filters are correct." ) From 518e8c155e154d7d597224190b17cfa2227c98cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 12:55:22 +0100 Subject: [PATCH 25/36] test: info with ::warning:: --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 4257ae5f..69845725 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -477,8 +477,8 @@ async def compile_images_for_all_flavors(self): }) if len(results_list) == 0: - logger.warning( - f"No images were built. " + logger.info( + f"::warning::No images were built. " f"Please check the workflow filters are correct." ) From 42b804393f7222898426895ef493aac6fe41d8c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 13:00:12 +0100 Subject: [PATCH 26/36] fix: Reverted changes --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 69845725..4257ae5f 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -477,8 +477,8 @@ async def compile_images_for_all_flavors(self): }) if len(results_list) == 0: - logger.info( - f"::warning::No images were built. " + logger.warning( + f"No images were built. " f"Please check the workflow filters are correct." ) From 23ce2ec948fd00c2e053a29e285eb7b65734aa57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 13:09:02 +0100 Subject: [PATCH 27/36] test: Print warning --- firestarter/workflows/build_images/build_images.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 4257ae5f..367fb7ae 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -477,10 +477,13 @@ async def compile_images_for_all_flavors(self): }) if len(results_list) == 0: - logger.warning( + print( + f"::warning title=BuildImages Warning::{e}" f"No images were built. " f"Please check the workflow filters are correct." ) + # logger.warning( + # ) yaml.default_flow_style = False with open(os.path.join("/tmp", self.output_results), "w") as f: From 7c9989a26b9828074d70be8b70f84a8a0978dc0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 13:12:00 +0100 Subject: [PATCH 28/36] fix: Unset variable --- firestarter/workflows/build_images/build_images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 367fb7ae..dc3efab6 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -478,7 +478,7 @@ async def compile_images_for_all_flavors(self): if len(results_list) == 0: print( - f"::warning title=BuildImages Warning::{e}" + f"::warning title=BuildImages Warning::" f"No images were built. " f"Please check the workflow filters are correct." ) From ed1ff9bfec6539f6eb4f8cbf6f0ce4b676081719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 13:20:32 +0100 Subject: [PATCH 29/36] fix: Restore upload artifact functionality --- .github/workflows/build_images.yaml | 30 +++++++++---------- .../workflows/build_images/build_images.py | 9 +++--- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index c8f43162..24c79d1c 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -138,19 +138,19 @@ jobs: releases_registry_creds="${{ secrets.DOCKER_REGISTRY_RELEASES_CREDS }}" secrets: ${{ inputs.secrets }} - # - uses: actions/upload-artifact@v4 - # with: - # name: build-images-results - # path: /tmp/build_images_results.yaml + - uses: actions/upload-artifact@v4 + with: + name: build-images-results + path: /tmp/build_images_results.yaml - # - name: Update Check Run Summary - # id: update-check-run-summary - # if: always() - # uses: prefapp/action-build-images-summary@v1 - # with: - # conclusion: ${{ steps.build-images.outcome }} - # token: ${{ steps.get-gh-app-token.outputs.token }} - # summary_path: '/tmp/build_images_results.yaml' - # check_run_name: ${{ inputs.check_run_name }} - # ref: ${{ inputs.from }} - # op: 'complete-check-run' + - name: Update Check Run Summary + id: update-check-run-summary + if: always() + uses: prefapp/action-build-images-summary@v1 + with: + conclusion: ${{ steps.build-images.outcome }} + token: ${{ steps.get-gh-app-token.outputs.token }} + summary_path: '/tmp/build_images_results.yaml' + check_run_name: ${{ inputs.check_run_name }} + ref: ${{ inputs.from }} + op: 'complete-check-run' diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index dc3efab6..20f45f28 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -385,9 +385,10 @@ async def compile_images_for_all_flavors(self): ) if len(platforms_to_build) == 0: - logger.warning( - f"No matching platforms to build for flavor {flavor}. " - f"Skipping..." + print( + f"::warning title=BuildImages Warning::" + f"No images were built. " + f"Please check the workflow filters are correct." ) continue @@ -482,8 +483,6 @@ async def compile_images_for_all_flavors(self): f"No images were built. " f"Please check the workflow filters are correct." ) - # logger.warning( - # ) yaml.default_flow_style = False with open(os.path.join("/tmp", self.output_results), "w") as f: From dc1494257aa49ad9f8787d107f5e79d8ba139b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 13:22:25 +0100 Subject: [PATCH 30/36] fix: Duplicated error message --- firestarter/workflows/build_images/build_images.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 20f45f28..34a75b71 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -387,8 +387,8 @@ async def compile_images_for_all_flavors(self): if len(platforms_to_build) == 0: print( f"::warning title=BuildImages Warning::" - f"No images were built. " - f"Please check the workflow filters are correct." + f"No matching platforms to build for flavor {flavor}. " + f"Skipping..." ) continue From afeaef3fe64488c13dbaca2171826ada09ba570f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 13:54:25 +0100 Subject: [PATCH 31/36] fix: Return trimmed_platforms instead of platforms --- firestarter/workflows/build_images/build_images.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firestarter/workflows/build_images/build_images.py b/firestarter/workflows/build_images/build_images.py index 34a75b71..eaecd753 100644 --- a/firestarter/workflows/build_images/build_images.py +++ b/firestarter/workflows/build_images/build_images.py @@ -496,7 +496,7 @@ def check_if_build_all_platforms(self): def validate_platforms(self, platforms): trimmed_platforms = platforms.replace(' ', '') if trimmed_platforms == '*': - return platforms + return trimmed_platforms platform_list = trimmed_platforms.split(',') From fa9a2c508f5ad3c9bb3203b967c6d8586cbc727d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 14:05:04 +0100 Subject: [PATCH 32/36] fix: Updated platforms field docs --- .github/workflows/build_images.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 24c79d1c..554c9081 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -20,7 +20,7 @@ on: default: "*" platforms: type: string - description: Platforms to build for, formatted as os/arch (e.g. linux/amd64). Can be a single platform, a comma-separated list, or * for all + description: Platforms to build for, formatted as JSON list of strings in the format os/arch (e.g. ["linux/amd64"]), or the string `*` for all default: "*" secrets: type: string From 40d4b109bc949047eeb37431738abe6427149664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 14:10:32 +0100 Subject: [PATCH 33/36] fix: Updated platforms field docs --- .github/workflows/build_images.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 554c9081..36e7a6c2 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -20,7 +20,7 @@ on: default: "*" platforms: type: string - description: Platforms to build for, formatted as JSON list of strings in the format os/arch (e.g. ["linux/amd64"]), or the string `*` for all + description: Platforms to build for, formatted as JSON list of strings in the format os/arch (e.g. ["linux/amd64"]) or just arch (e.g. ["amd64"]), or the string `*` for all default: "*" secrets: type: string From 310e329c3bbbfc2b0a21878c274e128b92683bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 15:11:30 +0100 Subject: [PATCH 34/36] fix: Reverted changes to platforms docs --- .github/workflows/build_images.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 36e7a6c2..24c79d1c 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -20,7 +20,7 @@ on: default: "*" platforms: type: string - description: Platforms to build for, formatted as JSON list of strings in the format os/arch (e.g. ["linux/amd64"]) or just arch (e.g. ["amd64"]), or the string `*` for all + description: Platforms to build for, formatted as os/arch (e.g. linux/amd64). Can be a single platform, a comma-separated list, or * for all default: "*" secrets: type: string From 7faa23f236160fea91d65782372333f59375b049 Mon Sep 17 00:00:00 2001 From: juanjosevazquezgil <123170708+juanjosevazquezgil@users.noreply.github.com> Date: Thu, 26 Feb 2026 15:12:00 +0100 Subject: [PATCH 35/36] Update .github/workflows/build_images.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/build_images.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yaml b/.github/workflows/build_images.yaml index 24c79d1c..90145033 100644 --- a/.github/workflows/build_images.yaml +++ b/.github/workflows/build_images.yaml @@ -40,7 +40,7 @@ on: default: v2 runs_on: type: string - description: Runner image name to run the job on + description: Runner labels to run the job on, formatted as a JSON array (e.g. '["ubuntu-24.04"]' or '["self-hosted", "linux"]') default: '' secrets: FS_CHECKS_PEM_FILE: From 457ea1b23e6fbc9b83725deaf10d9a914fea2502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20V=C3=A1zquez=20Gil?= Date: Thu, 26 Feb 2026 15:18:46 +0100 Subject: [PATCH 36/36] fix: Add test for check_if_build_all_platforms function --- firestarter/tests/test_build_images_functionality.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/firestarter/tests/test_build_images_functionality.py b/firestarter/tests/test_build_images_functionality.py index 135bb623..4f9aeb54 100644 --- a/firestarter/tests/test_build_images_functionality.py +++ b/firestarter/tests/test_build_images_functionality.py @@ -474,6 +474,13 @@ def test_validate_platforms() -> None: with pytest.raises(ValueError, match=re.escape("Invalid platform(s):")): builder.validate_platforms(no_platforms) +def test_check_if_build_all_platforms(): + builder._platforms = '*' + assert builder.check_if_build_all_platforms() == True + + builder._platforms = 'linux/amd64' + assert builder.check_if_build_all_platforms() == False + # The object correctly returns the flavor data of a chosen flavor, # as written in fixtures/build_images.yaml def test_get_flavor_data() -> None: