@@ -66,11 +66,15 @@ def validate_unsaved_build_parameters(
6666
6767 platforms = __validate_build_parameters_platforms (environment .platforms )
6868
69+ builder_variant , frontend_variant = __validate_builder_frontend_combination (
70+ environment .builder_variant , environment .frontend_variant
71+ )
72+
6973 return models .UnsavedBuildParameters (
7074 repository = environment .repository ,
7175 platforms = platforms ,
72- builder_variant = environment . builder_variant ,
73- frontend_variant = environment . frontend_variant ,
76+ builder_variant = builder_variant ,
77+ frontend_variant = frontend_variant ,
7478 repository_revision = environment .repository_revision if environment .repository_revision else None ,
7579 context_dir = environment .context_dir if environment .context_dir else None ,
7680 )
@@ -97,11 +101,20 @@ def validate_build_parameters_patch(environment: apispec.BuildParametersPatch) -
97101 if environment .platforms is not None :
98102 platforms = __validate_build_parameters_platforms (environment .platforms )
99103
104+ builder_variant : str | None = None
105+ frontend_variant : str | None = None
106+ if environment .builder_variant is not None and environment .frontend_variant is not None :
107+ builder_variant , frontend_variant = __validate_builder_frontend_combination (
108+ environment .builder_variant , environment .frontend_variant
109+ )
110+ else :
111+ builder_variant , frontend_variant = environment .builder_variant , environment .frontend_variant
112+
100113 return models .BuildParametersPatch (
101114 repository = environment .repository ,
102115 platforms = platforms ,
103- builder_variant = environment . builder_variant ,
104- frontend_variant = environment . frontend_variant ,
116+ builder_variant = builder_variant ,
117+ frontend_variant = frontend_variant ,
105118 repository_revision = environment .repository_revision ,
106119 context_dir = environment .context_dir ,
107120 )
@@ -374,3 +387,14 @@ def __validate_build_parameters_platforms(platforms: list[apispec.BuildPlatform]
374387 )
375388 )
376389 return [models .Platform (item ) for item in platforms_str_list ]
390+
391+
392+ def __validate_builder_frontend_combination (builder_variant : str , frontend_variant : str ) -> tuple [str , str ]:
393+ """Validate the combination of builder and frontend variants."""
394+ combo = (models .BuilderVariant (builder_variant ), models .FrontendVariant (frontend_variant ))
395+ if combo not in models .VALID_BUILDER_FRONTEND_COMBINATIONS :
396+ raise errors .ValidationError (
397+ message = f"Invalid combination: builder '{ builder_variant } ' is not compatible with"
398+ "frontend '{frontend_variant}'"
399+ )
400+ return builder_variant , frontend_variant
0 commit comments