BUILD 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package(default_visibility = ["//visibility:public"])
  2. load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
  3. load("@io_k8s_repo_infra//defs:pkg.bzl", "pkg_tar")
  4. load(":code_generation_test.bzl", "code_generation_test_suite")
  5. load(":container.bzl", "multi_arch_container", "multi_arch_container_push")
  6. load(":platforms.bzl", "SERVER_PLATFORMS", "for_platforms")
  7. code_generation_test_suite(
  8. name = "code_generation_tests",
  9. )
  10. filegroup(
  11. name = "package-srcs",
  12. srcs = glob(["**"]),
  13. tags = ["automanaged"],
  14. )
  15. filegroup(
  16. name = "all-srcs",
  17. srcs = [
  18. ":package-srcs",
  19. "//build/release-tars:all-srcs",
  20. "//build/visible_to:all-srcs",
  21. ],
  22. tags = ["automanaged"],
  23. )
  24. # This list should roughly match kube::build::get_docker_wrapped_binaries()
  25. # in build/common.sh.
  26. DOCKERIZED_BINARIES = {
  27. "kube-apiserver": {
  28. "base": "@debian-base-{ARCH}//image",
  29. "target": "//cmd/kube-apiserver:kube-apiserver",
  30. },
  31. "kube-controller-manager": {
  32. "base": "@debian-base-{ARCH}//image",
  33. "target": "//cmd/kube-controller-manager:kube-controller-manager",
  34. },
  35. "kube-scheduler": {
  36. "base": "@debian-base-{ARCH}//image",
  37. "target": "//cmd/kube-scheduler:kube-scheduler",
  38. },
  39. "kube-proxy": {
  40. "base": "@debian-iptables-{ARCH}//image",
  41. "target": "//cmd/kube-proxy:kube-proxy",
  42. },
  43. }
  44. [pkg_tar(
  45. name = "%s-data-%s.tar" % (binary, arch),
  46. srcs = select({"@io_bazel_rules_go//go/platform:" + arch: ["//cmd/" + binary]}),
  47. mode = "0755",
  48. package_dir = "/usr/bin",
  49. visibility = ["//visibility:private"],
  50. ) for binary in DOCKERIZED_BINARIES.keys() for arch in SERVER_PLATFORMS["linux"]]
  51. # When pushing to gcr.io, we want to use an arch, since the archless name is now used for a
  52. # manifest list. Bazel doesn't support manifest lists (yet), so we can't do that either.
  53. [multi_arch_container(
  54. name = binary,
  55. architectures = SERVER_PLATFORMS["linux"],
  56. base = meta["base"],
  57. cmd = ["/usr/bin/" + binary],
  58. # Since the multi_arch_container macro replaces the {ARCH} format string,
  59. # we need to escape the stamping vars.
  60. docker_push_tags = ["{{STABLE_DOCKER_PUSH_REGISTRY}}/%s-{ARCH}:{{STABLE_DOCKER_TAG}}" % binary],
  61. docker_tags = ["{{STABLE_DOCKER_REGISTRY}}/%s-{ARCH}:{{STABLE_DOCKER_TAG}}" % binary],
  62. stamp = True,
  63. symlinks = {
  64. # Some cluster startup scripts expect to find the binaries in /usr/local/bin,
  65. # but the debs install the binaries into /usr/bin.
  66. "/usr/local/bin/" + binary: "/usr/bin/" + binary,
  67. },
  68. tags = ["manual"],
  69. tars = select(for_platforms(
  70. for_server = [":%s-data-{ARCH}.tar" % binary],
  71. only_os = "linux",
  72. )),
  73. visibility = ["//visibility:private"],
  74. ) for binary, meta in DOCKERIZED_BINARIES.items()]
  75. # Also roll up all images into a single bundle to push with one target.
  76. multi_arch_container_push(
  77. name = "server-images",
  78. architectures = SERVER_PLATFORMS["linux"],
  79. docker_tags_images = {
  80. "{{STABLE_DOCKER_PUSH_REGISTRY}}/%s-{ARCH}:{{STABLE_DOCKER_TAG}}" % binary: "%s-internal" % binary
  81. for binary in DOCKERIZED_BINARIES.keys()
  82. },
  83. tags = ["manual"],
  84. )
  85. [genrule(
  86. name = binary + "_docker_tag",
  87. srcs = [meta["target"]],
  88. outs = [binary + ".docker_tag"],
  89. cmd = "grep ^STABLE_DOCKER_TAG bazel-out/stable-status.txt | awk '{print $$2}' >$@",
  90. stamp = 1,
  91. ) for binary, meta in DOCKERIZED_BINARIES.items()]
  92. genrule(
  93. name = "os_package_version",
  94. outs = ["version"],
  95. cmd = """
  96. grep ^STABLE_BUILD_SCM_REVISION bazel-out/stable-status.txt \
  97. | awk '{print $$2}' \
  98. | sed -e 's/^v//' -Ee 's/-([a-z]+)/~\\1/' -e 's/-/+/g' \
  99. >$@
  100. """,
  101. stamp = 1,
  102. )
  103. release_filegroup(
  104. name = "docker-artifacts",
  105. srcs = [":%s.tar" % binary for binary in DOCKERIZED_BINARIES.keys()] +
  106. [":%s.docker_tag" % binary for binary in DOCKERIZED_BINARIES.keys()],
  107. )
  108. # KUBE_CLIENT_TARGETS
  109. release_filegroup(
  110. name = "client-targets",
  111. conditioned_srcs = for_platforms(for_client = [
  112. "//cmd/kubectl",
  113. ]),
  114. )
  115. # KUBE_NODE_TARGETS
  116. release_filegroup(
  117. name = "node-targets",
  118. conditioned_srcs = for_platforms(for_node = [
  119. "//cmd/kube-proxy",
  120. "//cmd/kubeadm",
  121. "//cmd/kubelet",
  122. ]),
  123. )
  124. # KUBE_SERVER_TARGETS
  125. # No need to duplicate CLIENT_TARGETS or NODE_TARGETS here,
  126. # since we include them in the actual build rule.
  127. release_filegroup(
  128. name = "server-targets",
  129. conditioned_srcs = for_platforms(for_server = [
  130. "//cluster/gce/gci/mounter",
  131. "//cmd/kube-apiserver",
  132. "//cmd/kube-controller-manager",
  133. "//cmd/kube-scheduler",
  134. ]),
  135. )
  136. # kube::golang::test_targets
  137. filegroup(
  138. name = "test-targets",
  139. srcs = select(for_platforms(
  140. for_server = [
  141. "//cmd/kubemark",
  142. "//test/e2e_node:e2e_node.test_binary",
  143. ],
  144. for_test = [
  145. "//cmd/gendocs",
  146. "//cmd/genkubedocs",
  147. "//cmd/genman",
  148. "//cmd/genswaggertypedocs",
  149. "//cmd/genyaml",
  150. "//cmd/linkcheck",
  151. "//test/e2e:e2e.test_binary",
  152. "//vendor/github.com/onsi/ginkgo/ginkgo",
  153. "//cluster/images/conformance/go-runner",
  154. ],
  155. )),
  156. )
  157. # KUBE_TEST_PORTABLE
  158. filegroup(
  159. name = "test-portable-targets",
  160. srcs = [
  161. "//hack:get-build.sh",
  162. "//hack:ginkgo-e2e.sh",
  163. "//hack/e2e-internal:all-srcs",
  164. "//hack/lib:all-srcs",
  165. "//test/e2e/testing-manifests:all-srcs",
  166. "//test/kubemark:all-srcs",
  167. ],
  168. )