m/cli/metroctl: add multiplatform metroctl target
This adds a target which builds metroctl for multiple platforms. Because
this target will be built with "bazel test //...", we no longer need to
explicitly test building metroctl for various platforms in CI.
Building fails with --config=race; I added a target_compatible_with so
the target is skipped in this case.
Change-Id: Ib747233bc8442af5f947d35289d36ddd147b7953
Reviewed-on: https://review.monogon.dev/c/monogon/+/4439
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/build/platforms/def.bzl b/build/platforms/def.bzl
new file mode 100644
index 0000000..2e4796a
--- /dev/null
+++ b/build/platforms/def.bzl
@@ -0,0 +1,36 @@
+def _multiplatform_transition_impl(_, attr):
+ return [
+ {"//command_line_option:platforms": str(platform)}
+ for platform in attr.platforms
+ ]
+
+_multiplatform_transition = transition(
+ implementation = _multiplatform_transition_impl,
+ inputs = [],
+ outputs = ["//command_line_option:platforms"],
+)
+
+def _multiplatform_transition_filegroup_impl(ctx):
+ files = [src[DefaultInfo].files for src in ctx.attr.srcs]
+ runfiles = ctx.runfiles().merge_all([src[DefaultInfo].default_runfiles for src in ctx.attr.srcs])
+ return [DefaultInfo(
+ files = depset(transitive = files),
+ runfiles = runfiles,
+ )]
+
+multiplatform_transition_filegroup = rule(
+ _multiplatform_transition_filegroup_impl,
+ attrs = {
+ "platforms": attr.label_list(
+ providers = [platform_common.PlatformInfo],
+ mandatory = True,
+ doc = "The target platforms to transition the srcs.",
+ ),
+ "srcs": attr.label_list(
+ cfg = _multiplatform_transition,
+ mandatory = True,
+ doc = "The input to be transitioned to the target platforms.",
+ ),
+ },
+ doc = "Transitions the srcs to use the provided platforms. The filegroup will contain artifacts for all target platforms.",
+)