| Jan Schär | 3cebdfd | 2025-05-12 09:11:33 +0000 | [diff] [blame] | 1 | load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") |
| 2 | load("@bazel_skylib//rules:common_settings.bzl", "string_flag") |
| Serge Bazanski | e0c0617 | 2023-09-19 12:28:16 +0000 | [diff] [blame] | 3 | load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") |
| Jan Schär | 371faac | 2025-07-17 14:02:58 +0200 | [diff] [blame] | 4 | load("//build/platforms:def.bzl", "multiplatform_transition_filegroup") |
| Serge Bazanski | 394b67e | 2023-07-19 17:34:34 +0200 | [diff] [blame] | 5 | load(":defs.bzl", "buildkind") |
| 6 | |
| 7 | buildkind( |
| 8 | name = "buildkind", |
| 9 | build_setting_default = "full", |
| 10 | ) |
| 11 | |
| 12 | # True if user requested a lite build via --//metropolis/cli/metroctl:buildkind=lite . |
| 13 | config_setting( |
| 14 | name = "buildkind_lite", |
| 15 | flag_values = { |
| 16 | ":buildkind": "lite", |
| 17 | }, |
| 18 | ) |
| Lorenz Brun | 6adf884 | 2021-10-05 13:39:11 +0200 | [diff] [blame] | 19 | |
| Jan Schär | 3cebdfd | 2025-05-12 09:11:33 +0000 | [diff] [blame] | 20 | # 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 |
| 23 | string_flag( |
| 24 | name = "node_arch", |
| 25 | build_setting_default = "", |
| 26 | values = [ |
| 27 | "", |
| 28 | "x86_64", |
| 29 | "aarch64", |
| 30 | ], |
| 31 | visibility = ["//visibility:public"], |
| 32 | ) |
| 33 | |
| 34 | config_setting( |
| 35 | name = "node_arch_x86_64", |
| 36 | flag_values = {":node_arch": "x86_64"}, |
| 37 | ) |
| 38 | |
| 39 | config_setting( |
| 40 | name = "node_arch_aarch64", |
| 41 | flag_values = {":node_arch": "aarch64"}, |
| 42 | ) |
| 43 | |
| 44 | config_setting( |
| 45 | name = "node_arch_inherit_x86_64", |
| 46 | constraint_values = ["@platforms//cpu:x86_64"], |
| 47 | flag_values = {":node_arch": ""}, |
| 48 | ) |
| 49 | |
| 50 | config_setting( |
| 51 | name = "node_arch_inherit_aarch64", |
| 52 | constraint_values = ["@platforms//cpu:aarch64"], |
| 53 | flag_values = {":node_arch": ""}, |
| 54 | ) |
| 55 | |
| Lorenz Brun | 6adf884 | 2021-10-05 13:39:11 +0200 | [diff] [blame] | 56 | go_library( |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 57 | name = "metroctl_lib", |
| Lorenz Brun | e657310 | 2021-11-02 14:15:37 +0100 | [diff] [blame] | 58 | srcs = [ |
| Tim Windelschmidt | f0ec0f6 | 2023-07-17 13:43:38 +0200 | [diff] [blame] | 59 | "cmd_certs.go", |
| Serge Bazanski | beec27c | 2024-10-31 12:27:08 +0000 | [diff] [blame] | 60 | "cmd_cluster.go", |
| Serge Bazanski | b701df9 | 2024-10-31 14:15:33 +0000 | [diff] [blame] | 61 | "cmd_cluster_configure.go", |
| Serge Bazanski | beec27c | 2024-10-31 12:27:08 +0000 | [diff] [blame] | 62 | "cmd_cluster_takeownership.go", |
| Serge Bazanski | cfbbbdb | 2023-03-22 17:48:08 +0100 | [diff] [blame] | 63 | "cmd_install.go", |
| Tim Windelschmidt | 7a1b27d | 2024-02-22 23:54:58 +0100 | [diff] [blame] | 64 | "cmd_install_ssh.go", |
| Tim Windelschmidt | 7006caf | 2024-02-27 16:49:39 +0100 | [diff] [blame] | 65 | "cmd_install_usb.go", |
| Serge Bazanski | 7d1a0de | 2023-07-05 01:17:15 +0200 | [diff] [blame] | 66 | "cmd_k8s_configure.go", |
| Serge Bazanski | cfbbbdb | 2023-03-22 17:48:08 +0100 | [diff] [blame] | 67 | "cmd_k8scredplugin.go", |
| 68 | "cmd_node.go", |
| 69 | "cmd_node_approve.go", |
| Serge Bazanski | b91938f | 2023-03-29 14:31:22 +0200 | [diff] [blame] | 70 | "cmd_node_logs.go", |
| Serge Bazanski | a3e38cf | 2024-07-31 14:40:04 +0000 | [diff] [blame] | 71 | "cmd_node_metrics.go", |
| Serge Bazanski | cfbbbdb | 2023-03-22 17:48:08 +0100 | [diff] [blame] | 72 | "cmd_node_set.go", |
| Lorenz Brun | e657310 | 2021-11-02 14:15:37 +0100 | [diff] [blame] | 73 | "main.go", |
| Mateusz Zalega | d5f2f7a | 2022-07-05 18:48:56 +0200 | [diff] [blame] | 74 | "rpc.go", |
| Serge Bazanski | cfbbbdb | 2023-03-22 17:48:08 +0100 | [diff] [blame] | 75 | "table_node.go", |
| Lorenz Brun | e657310 | 2021-11-02 14:15:37 +0100 | [diff] [blame] | 76 | ], |
| Lorenz Brun | 6adf884 | 2021-10-05 13:39:11 +0200 | [diff] [blame] | 77 | importpath = "source.monogon.dev/metropolis/cli/metroctl", |
| 78 | visibility = ["//visibility:private"], |
| Lorenz Brun | e657310 | 2021-11-02 14:15:37 +0100 | [diff] [blame] | 79 | deps = [ |
| Serge Bazanski | e0c0617 | 2023-09-19 12:28:16 +0000 | [diff] [blame] | 80 | "//go/clitable", |
| Serge Bazanski | ca8d951 | 2024-09-12 14:20:57 +0200 | [diff] [blame] | 81 | "//go/logging", |
| Jan Schär | a9b060b | 2024-08-07 10:42:29 +0200 | [diff] [blame] | 82 | "//metropolis/cli/flagdefs", |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 83 | "//metropolis/cli/metroctl/core", |
| Serge Bazanski | a3e38cf | 2024-07-31 14:40:04 +0000 | [diff] [blame] | 84 | "//metropolis/node", |
| Jan Schär | 0f8ce4c | 2025-09-04 13:27:50 +0200 | [diff] [blame] | 85 | "//metropolis/node/allocs", |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 86 | "//metropolis/node/core/rpc", |
| Serge Bazanski | 925ec3d | 2024-02-05 14:38:20 +0100 | [diff] [blame] | 87 | "//metropolis/node/core/rpc/resolver", |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 88 | "//metropolis/proto/api", |
| Serge Bazanski | da11486 | 2023-03-29 17:46:42 +0200 | [diff] [blame] | 89 | "//metropolis/proto/common", |
| Tim Windelschmidt | 9f21f53 | 2024-05-07 15:14:20 +0200 | [diff] [blame] | 90 | "//osbase/logtree", |
| 91 | "//osbase/logtree/proto", |
| Jan Schär | 0175d7a | 2025-03-26 12:57:23 +0000 | [diff] [blame] | 92 | "//osbase/net/sshtakeover", |
| Jan Schär | 5fdca56 | 2025-04-14 11:33:29 +0000 | [diff] [blame] | 93 | "//osbase/oci", |
| Jan Schär | 62cecde | 2025-04-16 15:24:04 +0000 | [diff] [blame] | 94 | "//osbase/oci/registry", |
| Jan Schär | c1b6df4 | 2025-03-20 08:52:18 +0000 | [diff] [blame] | 95 | "//osbase/structfs", |
| Serge Bazanski | 0ccc85b | 2023-11-20 12:59:20 +0100 | [diff] [blame] | 96 | "//version", |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 97 | "@com_github_adrg_xdg//:xdg", |
| Tim Windelschmidt | 7a1b27d | 2024-02-22 23:54:58 +0100 | [diff] [blame] | 98 | "@com_github_schollz_progressbar_v3//:progressbar", |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 99 | "@com_github_spf13_cobra//:cobra", |
| Tim Windelschmidt | 156248b | 2025-01-10 00:27:45 +0100 | [diff] [blame] | 100 | "@io_bazel_rules_go//go/runfiles", |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 101 | "@io_k8s_apimachinery//pkg/apis/meta/v1:meta", |
| Lorenz Brun | 20d1dd1 | 2022-07-01 12:21:42 +0000 | [diff] [blame] | 102 | "@io_k8s_client_go//pkg/apis/clientauthentication/v1:clientauthentication", |
| Tim Windelschmidt | d77e26e | 2024-12-02 18:23:10 +0100 | [diff] [blame] | 103 | "@io_k8s_utils//ptr", |
| Tim Windelschmidt | 3325b4b | 2024-07-15 19:19:49 +0200 | [diff] [blame] | 104 | "@org_golang_google_grpc//:grpc", |
| Timon Stampfli | b9701c3 | 2024-12-15 17:50:01 +0100 | [diff] [blame] | 105 | "@org_golang_google_protobuf//encoding/prototext", |
| Tim Windelschmidt | 7a1b27d | 2024-02-22 23:54:58 +0100 | [diff] [blame] | 106 | "@org_golang_google_protobuf//proto", |
| Serge Bazanski | b701df9 | 2024-10-31 14:15:33 +0000 | [diff] [blame] | 107 | "@org_golang_google_protobuf//types/known/fieldmaskpb", |
| Tim Windelschmidt | 7a1b27d | 2024-02-22 23:54:58 +0100 | [diff] [blame] | 108 | "@org_golang_x_crypto//ssh", |
| 109 | "@org_golang_x_crypto//ssh/agent", |
| Serge Bazanski | a3e38cf | 2024-07-31 14:40:04 +0000 | [diff] [blame] | 110 | "@org_golang_x_net//proxy", |
| Lorenz Brun | 9ce4071 | 2024-02-13 21:54:46 +0100 | [diff] [blame] | 111 | "@org_golang_x_sync//semaphore", |
| Tim Windelschmidt | 7a1b27d | 2024-02-22 23:54:58 +0100 | [diff] [blame] | 112 | "@org_golang_x_term//:term", |
| Lorenz Brun | e657310 | 2021-11-02 14:15:37 +0100 | [diff] [blame] | 113 | ], |
| Lorenz Brun | 6adf884 | 2021-10-05 13:39:11 +0200 | [diff] [blame] | 114 | ) |
| 115 | |
| Jan Schär | 3cebdfd | 2025-05-12 09:11:33 +0000 | [diff] [blame] | 116 | platform_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 Brun | 6adf884 | 2021-10-05 13:39:11 +0200 | [diff] [blame] | 137 | go_binary( |
| 138 | name = "metroctl", |
| Tim Windelschmidt | 6120f38 | 2024-09-03 16:31:10 +0200 | [diff] [blame] | 139 | data = select({ |
| 140 | ":buildkind_lite": [], |
| Jan Schär | 3cebdfd | 2025-05-12 09:11:33 +0000 | [diff] [blame] | 141 | "//conditions:default": [":node_arch_deps"], |
| Tim Windelschmidt | 6120f38 | 2024-09-03 16:31:10 +0200 | [diff] [blame] | 142 | }), |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 143 | embed = [":metroctl_lib"], |
| Lorenz Brun | 6adf884 | 2021-10-05 13:39:11 +0200 | [diff] [blame] | 144 | visibility = ["//visibility:public"], |
| 145 | ) |
| Tim Windelschmidt | 6120f38 | 2024-09-03 16:31:10 +0200 | [diff] [blame] | 146 | |
| 147 | # metroctl_lite is the same binary as normal metroctl, but without any data |
| 148 | # dependencies. |
| 149 | go_binary( |
| 150 | name = "metroctl_lite", |
| 151 | data = [], |
| 152 | embed = [":metroctl_lib"], |
| 153 | visibility = ["//metropolis:__subpackages__"], |
| 154 | ) |
| Jan Schär | 371faac | 2025-07-17 14:02:58 +0200 | [diff] [blame] | 155 | |
| 156 | config_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. |
| 163 | multiplatform_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 | ) |