blob: 826a90b93c4af74fdd551ea32f98386c536b9d94 [file] [log] [blame]
Jan Schär3cebdfd2025-05-12 09:11:33 +00001load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
2load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
Serge Bazanskie0c06172023-09-19 12:28:16 +00003load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
Jan Schär371faac2025-07-17 14:02:58 +02004load("//build/platforms:def.bzl", "multiplatform_transition_filegroup")
Serge Bazanski394b67e2023-07-19 17:34:34 +02005load(":defs.bzl", "buildkind")
6
7buildkind(
8 name = "buildkind",
9 build_setting_default = "full",
10)
11
12# True if user requested a lite build via --//metropolis/cli/metroctl:buildkind=lite .
13config_setting(
14 name = "buildkind_lite",
15 flag_values = {
16 ":buildkind": "lite",
17 },
18)
Lorenz Brun6adf8842021-10-05 13:39:11 +020019
Jan Schär3cebdfd2025-05-12 09:11:33 +000020# By default, the architecture for node binaries is inherited from the metroctl
21# binary, but it can be changed with this flag.
22# Example: --//metropolis/cli/metroctl:node_arch=x86_64
23string_flag(
24 name = "node_arch",
25 build_setting_default = "",
26 values = [
27 "",
28 "x86_64",
29 "aarch64",
30 ],
31 visibility = ["//visibility:public"],
32)
33
34config_setting(
35 name = "node_arch_x86_64",
36 flag_values = {":node_arch": "x86_64"},
37)
38
39config_setting(
40 name = "node_arch_aarch64",
41 flag_values = {":node_arch": "aarch64"},
42)
43
44config_setting(
45 name = "node_arch_inherit_x86_64",
46 constraint_values = ["@platforms//cpu:x86_64"],
47 flag_values = {":node_arch": ""},
48)
49
50config_setting(
51 name = "node_arch_inherit_aarch64",
52 constraint_values = ["@platforms//cpu:aarch64"],
53 flag_values = {":node_arch": ""},
54)
55
Lorenz Brun6adf8842021-10-05 13:39:11 +020056go_library(
Lorenz Brund13c1c62022-03-30 19:58:58 +020057 name = "metroctl_lib",
Lorenz Brune6573102021-11-02 14:15:37 +010058 srcs = [
Tim Windelschmidtf0ec0f62023-07-17 13:43:38 +020059 "cmd_certs.go",
Serge Bazanskibeec27c2024-10-31 12:27:08 +000060 "cmd_cluster.go",
Serge Bazanskib701df92024-10-31 14:15:33 +000061 "cmd_cluster_configure.go",
Serge Bazanskibeec27c2024-10-31 12:27:08 +000062 "cmd_cluster_takeownership.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010063 "cmd_install.go",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +010064 "cmd_install_ssh.go",
Tim Windelschmidt7006caf2024-02-27 16:49:39 +010065 "cmd_install_usb.go",
Serge Bazanski7d1a0de2023-07-05 01:17:15 +020066 "cmd_k8s_configure.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010067 "cmd_k8scredplugin.go",
68 "cmd_node.go",
69 "cmd_node_approve.go",
Serge Bazanskib91938f2023-03-29 14:31:22 +020070 "cmd_node_logs.go",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +000071 "cmd_node_metrics.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010072 "cmd_node_set.go",
Lorenz Brune6573102021-11-02 14:15:37 +010073 "main.go",
Mateusz Zalegad5f2f7a2022-07-05 18:48:56 +020074 "rpc.go",
Serge Bazanskicfbbbdb2023-03-22 17:48:08 +010075 "table_node.go",
Lorenz Brune6573102021-11-02 14:15:37 +010076 ],
Lorenz Brun6adf8842021-10-05 13:39:11 +020077 importpath = "source.monogon.dev/metropolis/cli/metroctl",
78 visibility = ["//visibility:private"],
Lorenz Brune6573102021-11-02 14:15:37 +010079 deps = [
Serge Bazanskie0c06172023-09-19 12:28:16 +000080 "//go/clitable",
Serge Bazanskica8d9512024-09-12 14:20:57 +020081 "//go/logging",
Jan Schära9b060b2024-08-07 10:42:29 +020082 "//metropolis/cli/flagdefs",
Lorenz Brund13c1c62022-03-30 19:58:58 +020083 "//metropolis/cli/metroctl/core",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +000084 "//metropolis/node",
Jan Schär0f8ce4c2025-09-04 13:27:50 +020085 "//metropolis/node/allocs",
Lorenz Brund13c1c62022-03-30 19:58:58 +020086 "//metropolis/node/core/rpc",
Serge Bazanski925ec3d2024-02-05 14:38:20 +010087 "//metropolis/node/core/rpc/resolver",
Lorenz Brund13c1c62022-03-30 19:58:58 +020088 "//metropolis/proto/api",
Serge Bazanskida114862023-03-29 17:46:42 +020089 "//metropolis/proto/common",
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020090 "//osbase/logtree",
91 "//osbase/logtree/proto",
Jan Schär0175d7a2025-03-26 12:57:23 +000092 "//osbase/net/sshtakeover",
Jan Schär5fdca562025-04-14 11:33:29 +000093 "//osbase/oci",
Jan Schär62cecde2025-04-16 15:24:04 +000094 "//osbase/oci/registry",
Jan Schärc1b6df42025-03-20 08:52:18 +000095 "//osbase/structfs",
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010096 "//version",
Lorenz Brund13c1c62022-03-30 19:58:58 +020097 "@com_github_adrg_xdg//:xdg",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +010098 "@com_github_schollz_progressbar_v3//:progressbar",
Lorenz Brund13c1c62022-03-30 19:58:58 +020099 "@com_github_spf13_cobra//:cobra",
Tim Windelschmidt156248b2025-01-10 00:27:45 +0100100 "@io_bazel_rules_go//go/runfiles",
Lorenz Brund13c1c62022-03-30 19:58:58 +0200101 "@io_k8s_apimachinery//pkg/apis/meta/v1:meta",
Lorenz Brun20d1dd12022-07-01 12:21:42 +0000102 "@io_k8s_client_go//pkg/apis/clientauthentication/v1:clientauthentication",
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +0100103 "@io_k8s_utils//ptr",
Tim Windelschmidt3325b4b2024-07-15 19:19:49 +0200104 "@org_golang_google_grpc//:grpc",
Timon Stampflib9701c32024-12-15 17:50:01 +0100105 "@org_golang_google_protobuf//encoding/prototext",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100106 "@org_golang_google_protobuf//proto",
Serge Bazanskib701df92024-10-31 14:15:33 +0000107 "@org_golang_google_protobuf//types/known/fieldmaskpb",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100108 "@org_golang_x_crypto//ssh",
109 "@org_golang_x_crypto//ssh/agent",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +0000110 "@org_golang_x_net//proxy",
Lorenz Brun9ce40712024-02-13 21:54:46 +0100111 "@org_golang_x_sync//semaphore",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100112 "@org_golang_x_term//:term",
Lorenz Brune6573102021-11-02 14:15:37 +0100113 ],
Lorenz Brun6adf8842021-10-05 13:39:11 +0200114)
115
Jan Schär3cebdfd2025-05-12 09:11:33 +0000116platform_transition_filegroup(
117 name = "node_arch_deps",
118 srcs = [
119 "//metropolis/cli/takeover",
120 "//metropolis/installer:kernel",
121 "//metropolis/node:oci_image",
122 ],
123 target_platform = select(
124 {
125 ":node_arch_x86_64": "//build/platforms:linux_x86_64",
126 ":node_arch_aarch64": "//build/platforms:linux_aarch64",
127 ":node_arch_inherit_x86_64": "//build/platforms:linux_x86_64",
128 ":node_arch_inherit_aarch64": "//build/platforms:linux_aarch64",
129 },
130 no_match_error = """
131 Metropolis Node does not support this architecture.
132 Specify a supported architecture with the node_arch flag.""",
133 ),
134 visibility = ["//visibility:private"],
135)
136
Lorenz Brun6adf8842021-10-05 13:39:11 +0200137go_binary(
138 name = "metroctl",
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200139 data = select({
140 ":buildkind_lite": [],
Jan Schär3cebdfd2025-05-12 09:11:33 +0000141 "//conditions:default": [":node_arch_deps"],
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200142 }),
Lorenz Brund13c1c62022-03-30 19:58:58 +0200143 embed = [":metroctl_lib"],
Lorenz Brun6adf8842021-10-05 13:39:11 +0200144 visibility = ["//visibility:public"],
145)
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200146
147# metroctl_lite is the same binary as normal metroctl, but without any data
148# dependencies.
149go_binary(
150 name = "metroctl_lite",
151 data = [],
152 embed = [":metroctl_lib"],
153 visibility = ["//metropolis:__subpackages__"],
154)
Jan Schär371faac2025-07-17 14:02:58 +0200155
156config_setting(
157 name = "race_enabled",
158 flag_values = {"@io_bazel_rules_go//go/config:race": "True"},
159)
160
161# This target serves as a test that metroctl can be built for all listed
162# platforms.
163multiplatform_transition_filegroup(
164 name = "metroctl_lite_all_platforms",
165 srcs = [":metroctl_lite"],
166 platforms = [
167 "//build/platforms:linux_x86_64",
168 "//build/platforms:linux_aarch64",
169 "@io_bazel_rules_go//go/toolchain:darwin_amd64",
170 "@io_bazel_rules_go//go/toolchain:darwin_arm64",
171 "@io_bazel_rules_go//go/toolchain:windows_amd64",
172 "@io_bazel_rules_go//go/toolchain:windows_arm64",
173 ],
174 target_compatible_with = select({
175 # We can't build this with race enabled because
176 # we don't have a C toolchain for all platforms.
177 ":race_enabled": ["@platforms//:incompatible"],
178 "//conditions:default": [],
179 }),
180)