blob: 826a90b93c4af74fdd551ea32f98386c536b9d94 [file] [log] [blame]
load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("//build/platforms:def.bzl", "multiplatform_transition_filegroup")
load(":defs.bzl", "buildkind")
buildkind(
name = "buildkind",
build_setting_default = "full",
)
# True if user requested a lite build via --//metropolis/cli/metroctl:buildkind=lite .
config_setting(
name = "buildkind_lite",
flag_values = {
":buildkind": "lite",
},
)
# By default, the architecture for node binaries is inherited from the metroctl
# binary, but it can be changed with this flag.
# Example: --//metropolis/cli/metroctl:node_arch=x86_64
string_flag(
name = "node_arch",
build_setting_default = "",
values = [
"",
"x86_64",
"aarch64",
],
visibility = ["//visibility:public"],
)
config_setting(
name = "node_arch_x86_64",
flag_values = {":node_arch": "x86_64"},
)
config_setting(
name = "node_arch_aarch64",
flag_values = {":node_arch": "aarch64"},
)
config_setting(
name = "node_arch_inherit_x86_64",
constraint_values = ["@platforms//cpu:x86_64"],
flag_values = {":node_arch": ""},
)
config_setting(
name = "node_arch_inherit_aarch64",
constraint_values = ["@platforms//cpu:aarch64"],
flag_values = {":node_arch": ""},
)
go_library(
name = "metroctl_lib",
srcs = [
"cmd_certs.go",
"cmd_cluster.go",
"cmd_cluster_configure.go",
"cmd_cluster_takeownership.go",
"cmd_install.go",
"cmd_install_ssh.go",
"cmd_install_usb.go",
"cmd_k8s_configure.go",
"cmd_k8scredplugin.go",
"cmd_node.go",
"cmd_node_approve.go",
"cmd_node_logs.go",
"cmd_node_metrics.go",
"cmd_node_set.go",
"main.go",
"rpc.go",
"table_node.go",
],
importpath = "source.monogon.dev/metropolis/cli/metroctl",
visibility = ["//visibility:private"],
deps = [
"//go/clitable",
"//go/logging",
"//metropolis/cli/flagdefs",
"//metropolis/cli/metroctl/core",
"//metropolis/node",
"//metropolis/node/allocs",
"//metropolis/node/core/rpc",
"//metropolis/node/core/rpc/resolver",
"//metropolis/proto/api",
"//metropolis/proto/common",
"//osbase/logtree",
"//osbase/logtree/proto",
"//osbase/net/sshtakeover",
"//osbase/oci",
"//osbase/oci/registry",
"//osbase/structfs",
"//version",
"@com_github_adrg_xdg//:xdg",
"@com_github_schollz_progressbar_v3//:progressbar",
"@com_github_spf13_cobra//:cobra",
"@io_bazel_rules_go//go/runfiles",
"@io_k8s_apimachinery//pkg/apis/meta/v1:meta",
"@io_k8s_client_go//pkg/apis/clientauthentication/v1:clientauthentication",
"@io_k8s_utils//ptr",
"@org_golang_google_grpc//:grpc",
"@org_golang_google_protobuf//encoding/prototext",
"@org_golang_google_protobuf//proto",
"@org_golang_google_protobuf//types/known/fieldmaskpb",
"@org_golang_x_crypto//ssh",
"@org_golang_x_crypto//ssh/agent",
"@org_golang_x_net//proxy",
"@org_golang_x_sync//semaphore",
"@org_golang_x_term//:term",
],
)
platform_transition_filegroup(
name = "node_arch_deps",
srcs = [
"//metropolis/cli/takeover",
"//metropolis/installer:kernel",
"//metropolis/node:oci_image",
],
target_platform = select(
{
":node_arch_x86_64": "//build/platforms:linux_x86_64",
":node_arch_aarch64": "//build/platforms:linux_aarch64",
":node_arch_inherit_x86_64": "//build/platforms:linux_x86_64",
":node_arch_inherit_aarch64": "//build/platforms:linux_aarch64",
},
no_match_error = """
Metropolis Node does not support this architecture.
Specify a supported architecture with the node_arch flag.""",
),
visibility = ["//visibility:private"],
)
go_binary(
name = "metroctl",
data = select({
":buildkind_lite": [],
"//conditions:default": [":node_arch_deps"],
}),
embed = [":metroctl_lib"],
visibility = ["//visibility:public"],
)
# metroctl_lite is the same binary as normal metroctl, but without any data
# dependencies.
go_binary(
name = "metroctl_lite",
data = [],
embed = [":metroctl_lib"],
visibility = ["//metropolis:__subpackages__"],
)
config_setting(
name = "race_enabled",
flag_values = {"@io_bazel_rules_go//go/config:race": "True"},
)
# This target serves as a test that metroctl can be built for all listed
# platforms.
multiplatform_transition_filegroup(
name = "metroctl_lite_all_platforms",
srcs = [":metroctl_lite"],
platforms = [
"//build/platforms:linux_x86_64",
"//build/platforms:linux_aarch64",
"@io_bazel_rules_go//go/toolchain:darwin_amd64",
"@io_bazel_rules_go//go/toolchain:darwin_arm64",
"@io_bazel_rules_go//go/toolchain:windows_amd64",
"@io_bazel_rules_go//go/toolchain:windows_arm64",
],
target_compatible_with = select({
# We can't build this with race enabled because
# we don't have a C toolchain for all platforms.
":race_enabled": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)