blob: b280aea8b8bc891fdd407c7d0693c4a031f6755b [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",
Lorenz Brund13c1c62022-03-30 19:58:58 +020085 "//metropolis/node/core/rpc",
Serge Bazanski925ec3d2024-02-05 14:38:20 +010086 "//metropolis/node/core/rpc/resolver",
Lorenz Brund13c1c62022-03-30 19:58:58 +020087 "//metropolis/proto/api",
Serge Bazanskida114862023-03-29 17:46:42 +020088 "//metropolis/proto/common",
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020089 "//osbase/logtree",
90 "//osbase/logtree/proto",
Jan Schär0175d7a2025-03-26 12:57:23 +000091 "//osbase/net/sshtakeover",
Jan Schär5fdca562025-04-14 11:33:29 +000092 "//osbase/oci",
Jan Schär62cecde2025-04-16 15:24:04 +000093 "//osbase/oci/registry",
Jan Schärc1b6df42025-03-20 08:52:18 +000094 "//osbase/structfs",
Serge Bazanski0ccc85b2023-11-20 12:59:20 +010095 "//version",
Lorenz Brund13c1c62022-03-30 19:58:58 +020096 "@com_github_adrg_xdg//:xdg",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +010097 "@com_github_schollz_progressbar_v3//:progressbar",
Lorenz Brund13c1c62022-03-30 19:58:58 +020098 "@com_github_spf13_cobra//:cobra",
Tim Windelschmidt156248b2025-01-10 00:27:45 +010099 "@io_bazel_rules_go//go/runfiles",
Lorenz Brund13c1c62022-03-30 19:58:58 +0200100 "@io_k8s_apimachinery//pkg/apis/meta/v1:meta",
Lorenz Brun20d1dd12022-07-01 12:21:42 +0000101 "@io_k8s_client_go//pkg/apis/clientauthentication/v1:clientauthentication",
Tim Windelschmidtd77e26e2024-12-02 18:23:10 +0100102 "@io_k8s_utils//ptr",
Tim Windelschmidt3325b4b2024-07-15 19:19:49 +0200103 "@org_golang_google_grpc//:grpc",
Timon Stampflib9701c32024-12-15 17:50:01 +0100104 "@org_golang_google_protobuf//encoding/prototext",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100105 "@org_golang_google_protobuf//proto",
Serge Bazanskib701df92024-10-31 14:15:33 +0000106 "@org_golang_google_protobuf//types/known/fieldmaskpb",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100107 "@org_golang_x_crypto//ssh",
108 "@org_golang_x_crypto//ssh/agent",
Serge Bazanskia3e38cf2024-07-31 14:40:04 +0000109 "@org_golang_x_net//proxy",
Lorenz Brun9ce40712024-02-13 21:54:46 +0100110 "@org_golang_x_sync//semaphore",
Tim Windelschmidt7a1b27d2024-02-22 23:54:58 +0100111 "@org_golang_x_term//:term",
Lorenz Brune6573102021-11-02 14:15:37 +0100112 ],
Lorenz Brun6adf8842021-10-05 13:39:11 +0200113)
114
Jan Schär3cebdfd2025-05-12 09:11:33 +0000115platform_transition_filegroup(
116 name = "node_arch_deps",
117 srcs = [
118 "//metropolis/cli/takeover",
119 "//metropolis/installer:kernel",
120 "//metropolis/node:oci_image",
121 ],
122 target_platform = select(
123 {
124 ":node_arch_x86_64": "//build/platforms:linux_x86_64",
125 ":node_arch_aarch64": "//build/platforms:linux_aarch64",
126 ":node_arch_inherit_x86_64": "//build/platforms:linux_x86_64",
127 ":node_arch_inherit_aarch64": "//build/platforms:linux_aarch64",
128 },
129 no_match_error = """
130 Metropolis Node does not support this architecture.
131 Specify a supported architecture with the node_arch flag.""",
132 ),
133 visibility = ["//visibility:private"],
134)
135
Lorenz Brun6adf8842021-10-05 13:39:11 +0200136go_binary(
137 name = "metroctl",
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200138 data = select({
139 ":buildkind_lite": [],
Jan Schär3cebdfd2025-05-12 09:11:33 +0000140 "//conditions:default": [":node_arch_deps"],
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200141 }),
Lorenz Brund13c1c62022-03-30 19:58:58 +0200142 embed = [":metroctl_lib"],
Lorenz Brun6adf8842021-10-05 13:39:11 +0200143 visibility = ["//visibility:public"],
144)
Tim Windelschmidt6120f382024-09-03 16:31:10 +0200145
146# metroctl_lite is the same binary as normal metroctl, but without any data
147# dependencies.
148go_binary(
149 name = "metroctl_lite",
150 data = [],
151 embed = [":metroctl_lib"],
152 visibility = ["//metropolis:__subpackages__"],
153)
Jan Schär371faac2025-07-17 14:02:58 +0200154
155config_setting(
156 name = "race_enabled",
157 flag_values = {"@io_bazel_rules_go//go/config:race": "True"},
158)
159
160# This target serves as a test that metroctl can be built for all listed
161# platforms.
162multiplatform_transition_filegroup(
163 name = "metroctl_lite_all_platforms",
164 srcs = [":metroctl_lite"],
165 platforms = [
166 "//build/platforms:linux_x86_64",
167 "//build/platforms:linux_aarch64",
168 "@io_bazel_rules_go//go/toolchain:darwin_amd64",
169 "@io_bazel_rules_go//go/toolchain:darwin_arm64",
170 "@io_bazel_rules_go//go/toolchain:windows_amd64",
171 "@io_bazel_rules_go//go/toolchain:windows_arm64",
172 ],
173 target_compatible_with = select({
174 # We can't build this with race enabled because
175 # we don't have a C toolchain for all platforms.
176 ":race_enabled": ["@platforms//:incompatible"],
177 "//conditions:default": [],
178 }),
179)