From bc4b6ac397973bf7414bb7b672a9f939dbbb9112 Mon Sep 17 00:00:00 2001 From: Jeff Grafton Date: Fri, 13 Jan 2017 14:47:06 -0800 Subject: [PATCH] Build release tarballs in bazel and add `make bazel-release` rule --- BUILD.bazel | 10 -- Makefile | 16 ++- build/release-tars/BUILD | 244 +++++++++++++++++++++++++++++++++++++ cluster/BUILD | 27 ++++ cluster/addons/BUILD | 24 ++-- cluster/gce/BUILD | 37 ++++++ cluster/saltbase/BUILD | 87 +++++++++++++ federation/BUILD | 12 ++ federation/develop/BUILD | 16 +++ hack/BUILD | 2 + hack/e2e-internal/BUILD | 16 +++ hack/lib/BUILD | 16 +++ hack/lib/golang.sh | 6 + test/BUILD | 1 + test/kubemark/BUILD | 16 +++ third_party/BUILD | 1 + third_party/htpasswd/BUILD | 16 +++ 17 files changed, 521 insertions(+), 26 deletions(-) create mode 100644 build/release-tars/BUILD create mode 100644 cluster/gce/BUILD create mode 100644 cluster/saltbase/BUILD create mode 100644 federation/develop/BUILD create mode 100644 hack/e2e-internal/BUILD create mode 100644 hack/lib/BUILD create mode 100644 test/kubemark/BUILD create mode 100644 third_party/htpasswd/BUILD diff --git a/BUILD.bazel b/BUILD.bazel index 62975b347285c..b32f3cc2fd919 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -51,13 +51,3 @@ filegroup( ], tags = ["automanaged"], ) - -pkg_tar( - name = "kubernetes-src", - extension = "tar.gz", - files = [ - ":all-srcs", - ], - package_dir = "kubernetes", - strip_prefix = "//", -) diff --git a/Makefile b/Makefile index b3c688ac51471..4b54ff0200b5f 100644 --- a/Makefile +++ b/Makefile @@ -470,7 +470,7 @@ help: endif # Non-dockerized bazel rules. -.PHONY: bazel-build bazel-test +.PHONY: bazel-build bazel-test bazel-release ifeq ($(PRINT_HELP),y) define BAZEL_BUILD_HELP_INFO @@ -500,3 +500,17 @@ else bazel-test: bazel test --test_output=errors //cmd/... //pkg/... //federation/... //plugin/... //build/... //third_party/... //hack/... endif + +ifeq ($(PRINT_HELP),y) +define BAZEL_BUILD_HELP_INFO +# Build release tars with bazel +# +# Example: +# make bazel-release +endef +bazel-release: + @echo "$$BAZEL_BUILD_HELP_INFO" +else +bazel-release: + bazel build //build/release-tars +endif diff --git a/build/release-tars/BUILD b/build/release-tars/BUILD new file mode 100644 index 0000000000000..3eea73c2328d3 --- /dev/null +++ b/build/release-tars/BUILD @@ -0,0 +1,244 @@ +package(default_visibility = ["//visibility:public"]) + +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) + +pkg_tar( + name = "kubernetes-src", + extension = "tar.gz", + files = [ + "//:all-srcs", + ], + package_dir = "kubernetes", + strip_prefix = "//", +) + +# FIXME: this should be configurable/auto-detected +PLATFORM_ARCH_STRING = "linux-amd64" + +# KUBE_CLIENT_TARGETS +CLIENT_TARGETS = [ + "//cmd/kubectl", + "//federation/cmd/kubefed", +] + +# KUBE_NODE_TARGETS +NODE_TARGETS = [ + "//cmd/kube-proxy", + "//cmd/kubelet", +] + +# KUBE_SERVER_TARGETS +# No need to duplicate CLIENT_TARGETS or NODE_TARGETS here, +# since we include them in the actual build rule. +SERVER_TARGETS = [ + "//cmd/hyperkube", + "//cmd/kube-aggregator", + "//cmd/kube-apiserver", + "//cmd/kube-controller-manager", + "//cmd/kube-discovery", + "//cmd/kubeadm", + "//plugin/cmd/kube-scheduler", +] + +# kube::golang::test_targets +TEST_BINARY_TARGETS = [ + "//cmd/gendocs", + "//cmd/genkubedocs", + "//cmd/genman", + "//cmd/genswaggertypedocs", + "//cmd/genyaml", + "//cmd/linkcheck", + "//cmd/mungedocs", + "//examples/k8petstore/web-server/src", + "//federation/cmd/genfeddocs", + "//test/e2e:e2e.test", + "//vendor:github.com/onsi/ginkgo/ginkgo_bin", + "//cmd/kubemark", # TODO: server platforms only + "//test/e2e_node:e2e_node.test", # TODO: server platforms only +] + +TEST_PORTABLE_TARGETS = [ + "//federation/develop:all-srcs", + "//hack:e2e.go", + "//hack:federated-ginkgo-e2e.sh", + "//hack:get-build.sh", + "//hack:ginkgo-e2e.sh", + "//hack/e2e-internal:all-srcs", + "//hack/lib:all-srcs", + "//test/e2e/testing-manifests:all-srcs", + "//test/kubemark:all-srcs", +] + +# Included in node and server tarballs. +LICENSE_TARGETS = [ + "//:Godeps/LICENSES", + ":kubernetes-src.tar.gz", +] + +pkg_tar( + name = "_client-bin", + files = CLIENT_TARGETS, + mode = "0755", + package_dir = "client/bin", + visibility = ["//visibility:private"], +) + +pkg_tar( + name = "kubernetes-client-%s" % PLATFORM_ARCH_STRING, + extension = "tar.gz", + package_dir = "kubernetes", + deps = [ + ":_client-bin", + ], +) + +pkg_tar( + name = "_node-bin", + files = NODE_TARGETS + CLIENT_TARGETS, + mode = "0755", + package_dir = "node/bin", + visibility = ["//visibility:private"], +) + +pkg_tar( + name = "kubernetes-node-%s" % PLATFORM_ARCH_STRING, + extension = "tar.gz", + files = LICENSE_TARGETS, + mode = "0644", + package_dir = "kubernetes", + deps = [ + ":_node-bin", + ], +) + +pkg_tar( + name = "_server-bin", + files = SERVER_TARGETS + NODE_TARGETS + CLIENT_TARGETS + [ + "//build:docker-artifacts", + ], + mode = "0755", + package_dir = "server/bin", + visibility = ["//visibility:private"], +) + +genrule( + name = "dummy", + outs = [".dummy"], + cmd = "touch $@", +) + +# Some of the startup scripts fail if there isn't an addons/ directory in the server tarball. +pkg_tar( + name = "_server-addons", + files = [ + ":.dummy", + ], + package_dir = "addons", + visibility = ["//visibility:private"], +) + +pkg_tar( + name = "kubernetes-server-%s" % PLATFORM_ARCH_STRING, + extension = "tar.gz", + files = LICENSE_TARGETS, + mode = "0644", + package_dir = "kubernetes", + deps = [ + ":_server-addons", + ":_server-bin", + ], +) + +pkg_tar( + name = "_test-bin", + files = TEST_BINARY_TARGETS, + mode = "0755", + package_dir = "platforms/" + PLATFORM_ARCH_STRING.replace("-", "/"), + # TODO: how to make this multiplatform? + visibility = ["//visibility:private"], +) + +pkg_tar( + name = "kubernetes-test", + extension = "tar.gz", + files = TEST_PORTABLE_TARGETS, + package_dir = "kubernetes", + strip_prefix = "//", + deps = [ + # TODO: how to make this multiplatform? + ":_test-bin", + ], +) + +pkg_tar( + name = "_full_server", + files = [ + ":kubernetes-manifests.tar.gz", + ":kubernetes-salt.tar.gz", + ], + package_dir = "server", + visibility = ["//visibility:private"], +) + +pkg_tar( + name = "kubernetes", + extension = "tar.gz", + files = [ + "//:Godeps/LICENSES", + "//:README.md", + "//:Vagrantfile", + "//cluster:all-srcs", + "//docs:all-srcs", + "//examples:all-srcs", + "//third_party/htpasswd:all-srcs", + ], + package_dir = "kubernetes", + strip_prefix = "//", + deps = [ + ":_full_server", + "//federation:release", + ], +) + +pkg_tar( + name = "kubernetes-manifests", + extension = "tar.gz", + deps = [ + "//cluster:manifests", + ], +) + +pkg_tar( + name = "kubernetes-salt", + extension = "tar.gz", + deps = [ + "//cluster/saltbase:salt", + ], +) + +filegroup( + name = "release-tars", + srcs = [ + ":kubernetes.tar.gz", + ":kubernetes-client-%s.tar.gz" % PLATFORM_ARCH_STRING, + ":kubernetes-node-%s.tar.gz" % PLATFORM_ARCH_STRING, + ":kubernetes-server-%s.tar.gz" % PLATFORM_ARCH_STRING, + ":kubernetes-manifests.tar.gz", + ":kubernetes-salt.tar.gz", + ":kubernetes-src.tar.gz", + ":kubernetes-test.tar.gz", + ], +) diff --git a/cluster/BUILD b/cluster/BUILD index ebc128fadc6ba..58250110ef2c5 100644 --- a/cluster/BUILD +++ b/cluster/BUILD @@ -1,5 +1,7 @@ package(default_visibility = ["//visibility:public"]) +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + licenses(["notice"]) filegroup( @@ -14,6 +16,31 @@ filegroup( srcs = [ ":package-srcs", "//cluster/addons:all-srcs", + "//cluster/gce:all-srcs", + "//cluster/saltbase:all-srcs", ], tags = ["automanaged"], ) + +# All of the manifests that are expected to be in a "gci-trusty" +# subdir of the manifests tarball. +pkg_tar( + name = "_manifests-gci-trusty", + package_dir = "gci-trusty", + visibility = ["//visibility:private"], + deps = [ + "//cluster/addons", + "//cluster/gce:gci-trusty-manifests", + "//cluster/saltbase:gci-trusty-salt-manifests", + ], +) + +pkg_tar( + name = "manifests", + mode = "0644", + package_dir = "kubernetes", + deps = [ + ":_manifests-gci-trusty", + "//cluster/saltbase:salt-manifests", + ], +) diff --git a/cluster/addons/BUILD b/cluster/addons/BUILD index 056847cafc15e..cb6b276b11e54 100644 --- a/cluster/addons/BUILD +++ b/cluster/addons/BUILD @@ -4,21 +4,14 @@ load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") filegroup( name = "addon-srcs", - srcs = glob([ - "calico-policy-controller/*", - "cluster-loadbalancing/*", - "cluster-monitoring/*", - "dashboard/*", - "dns/*", - "etcd-empty-dir-cleanup/*", - "fluentd-elasticsearch/*", - "fluentd-gcp/*", - "gci/*", - "node-problem-detector/*", - "podsecuritypolicies/*", - "python-image/*", - "registry/*", - ]), + srcs = glob( + [ + "**/*.json", + "**/*.yaml", + "**/*.yaml.in", + ], + exclude = ["**/*demo*/**"], + ), ) pkg_tar( @@ -27,6 +20,7 @@ pkg_tar( files = [ ":addon-srcs", ], + mode = "0644", strip_prefix = ".", ) diff --git a/cluster/gce/BUILD b/cluster/gce/BUILD new file mode 100644 index 0000000000000..012508fc618a5 --- /dev/null +++ b/cluster/gce/BUILD @@ -0,0 +1,37 @@ +package(default_visibility = ["//visibility:public"]) + +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + +pkg_tar( + name = "gci-trusty-manifests", + files = [ + "container-linux/configure-helper.sh", + "gci/configure-helper.sh", + "gci/health-monitor.sh", + "gci/mounter/mounter", + "trusty/configure-helper.sh", + ], + mode = "0755", + strip_prefix = ".", + # pkg_tar doesn't support renaming the files we add, so instead create symlinks. + symlinks = { + "container-linux-configure-helper.sh": "container-linux/configure-helper.sh", + "gci-configure-helper.sh": "gci/configure-helper.sh", + "health-monitor.sh": "gci/health-monitor.sh", + "gci-mounter": "gci/mounter/mounter", + "trusty-configure-helper.sh": "trusty/configure-helper.sh", + }, +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/cluster/saltbase/BUILD b/cluster/saltbase/BUILD new file mode 100644 index 0000000000000..2ffcf0824bbfe --- /dev/null +++ b/cluster/saltbase/BUILD @@ -0,0 +1,87 @@ +package(default_visibility = ["//visibility:public"]) + +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) + +# TODO(#3579): This is a temporary hack. It gathers up the yaml, +# yaml.in, json files in cluster/addons (minus any demos) and overlays +# them into kube-addons, where we expect them. +# These files are expected in a salt/kube-addons subdirectory. +pkg_tar( + name = "_salt_kube-addons", + package_dir = "salt/kube-addons", + strip_prefix = "/cluster/addons", + visibility = ["//visibility:private"], + deps = [ + "//cluster/addons", + ], +) + +pkg_tar( + name = "salt", + files = glob( + ["**"], + exclude = ["BUILD"], + ), + mode = "0644", + modes = { + "install.sh": "0755", + }, + package_dir = "kubernetes/saltbase", + strip_prefix = ".", + deps = [ + ":_salt_kube-addons", + ], +) + +# The following are used in the kubernetes salt tarball. +pkg_tar( + name = "salt-manifests", + files = [ + "salt/fluentd-gcp/fluentd-gcp.yaml", + "salt/kube-proxy/kube-proxy.manifest", + "salt/kube-registry-proxy/kube-registry-proxy.yaml", + ], + mode = "0644", +) + +pkg_tar( + name = "_kube-admission-controls", + files = glob(["salt/kube-admission-controls/limit-range/**"]), + mode = "0644", + # Maintain limit-range/ subdirectory in tarball + strip_prefix = "./salt/kube-admission-controls/", + visibility = ["//visibility:private"], +) + +pkg_tar( + name = "gci-trusty-salt-manifests", + files = [ + "salt/cluster-autoscaler/cluster-autoscaler.manifest", + "salt/e2e-image-puller/e2e-image-puller.manifest", + "salt/etcd/etcd.manifest", + "salt/kube-addons/kube-addon-manager.yaml", + "salt/kube-apiserver/abac-authz-policy.jsonl", + "salt/kube-apiserver/kube-apiserver.manifest", + "salt/kube-controller-manager/kube-controller-manager.manifest", + "salt/kube-scheduler/kube-scheduler.manifest", + "salt/l7-gcp/glbc.manifest", + "salt/rescheduler/rescheduler.manifest", + ], + mode = "0644", + deps = [ + "_kube-admission-controls", + ], +) diff --git a/federation/BUILD b/federation/BUILD index 2cf445b242492..e82b8a58a89a7 100644 --- a/federation/BUILD +++ b/federation/BUILD @@ -2,6 +2,8 @@ package(default_visibility = ["//visibility:public"]) licenses(["notice"]) +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + filegroup( name = "package-srcs", srcs = glob(["**"]), @@ -23,6 +25,7 @@ filegroup( "//federation/cmd/federation-controller-manager:all-srcs", "//federation/cmd/genfeddocs:all-srcs", "//federation/cmd/kubefed:all-srcs", + "//federation/develop:all-srcs", "//federation/pkg/dnsprovider:all-srcs", "//federation/pkg/federation-controller:all-srcs", "//federation/pkg/kubefed:all-srcs", @@ -30,3 +33,12 @@ filegroup( ], tags = ["automanaged"], ) + +pkg_tar( + name = "release", + files = glob([ + "deploy/**", + "manifests/**", + ]) + ["//federation/cluster:all-srcs"], + package_dir = "federation", +) diff --git a/federation/develop/BUILD b/federation/develop/BUILD new file mode 100644 index 0000000000000..6cc62052bafba --- /dev/null +++ b/federation/develop/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/hack/BUILD b/hack/BUILD index afd55d4377d32..6f40b9fc78760 100644 --- a/hack/BUILD +++ b/hack/BUILD @@ -14,6 +14,8 @@ filegroup( srcs = [ ":package-srcs", "//hack/boilerplate:all-srcs", + "//hack/e2e-internal:all-srcs", + "//hack/lib:all-srcs", ], tags = ["automanaged"], ) diff --git a/hack/e2e-internal/BUILD b/hack/e2e-internal/BUILD new file mode 100644 index 0000000000000..6cc62052bafba --- /dev/null +++ b/hack/e2e-internal/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/hack/lib/BUILD b/hack/lib/BUILD new file mode 100644 index 0000000000000..6cc62052bafba --- /dev/null +++ b/hack/lib/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index eefdc9ba211c0..f74124a6daeb4 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -21,6 +21,7 @@ readonly KUBE_GOPATH="${KUBE_OUTPUT}/go" # The set of server targets that we are only building for Linux # Note: if you are adding something here, you might need to add it to # kube::build::source_targets in build/common.sh as well. +# If you update this list, please also update build/release-tars/BUILD. kube::golang::server_targets() { local targets=( cmd/kube-proxy @@ -40,6 +41,7 @@ readonly KUBE_SERVER_TARGETS=($(kube::golang::server_targets)) readonly KUBE_SERVER_BINARIES=("${KUBE_SERVER_TARGETS[@]##*/}") # The set of server targets that we are only building for Kubernetes nodes +# If you update this list, please also update build/release-tars/BUILD. kube::golang::node_targets() { local targets=( cmd/kube-proxy @@ -122,6 +124,7 @@ else fi # The set of client targets that we are building for all platforms +# If you update this list, please also update build/release-tars/BUILD. readonly KUBE_CLIENT_TARGETS=( cmd/kubectl federation/cmd/kubefed @@ -130,6 +133,7 @@ readonly KUBE_CLIENT_BINARIES=("${KUBE_CLIENT_TARGETS[@]##*/}") readonly KUBE_CLIENT_BINARIES_WIN=("${KUBE_CLIENT_BINARIES[@]/%/.exe}") # The set of test targets that we are building for all platforms +# If you update this list, please also update build/release-tars/BUILD. kube::golang::test_targets() { local targets=( cmd/gendocs @@ -149,6 +153,7 @@ kube::golang::test_targets() { readonly KUBE_TEST_TARGETS=($(kube::golang::test_targets)) readonly KUBE_TEST_BINARIES=("${KUBE_TEST_TARGETS[@]##*/}") readonly KUBE_TEST_BINARIES_WIN=("${KUBE_TEST_BINARIES[@]/%/.exe}") +# If you update this list, please also update build/release-tars/BUILD. readonly KUBE_TEST_PORTABLE=( test/e2e/testing-manifests test/kubemark @@ -164,6 +169,7 @@ readonly KUBE_TEST_PORTABLE=( # Test targets which run on the Kubernetes clusters directly, so we only # need to target server platforms. # These binaries will be distributed in the kubernetes-test tarball. +# If you update this list, please also update build/release-tars/BUILD. readonly KUBE_TEST_SERVER_TARGETS=( cmd/kubemark vendor/github.com/onsi/ginkgo/ginkgo diff --git a/test/BUILD b/test/BUILD index 5063f9bfb3003..ce6ff3c21bae5 100644 --- a/test/BUILD +++ b/test/BUILD @@ -18,6 +18,7 @@ filegroup( "//test/fixtures:all-srcs", "//test/images:all-srcs", "//test/integration:all-srcs", + "//test/kubemark:all-srcs", "//test/list:all-srcs", "//test/soak/cauldron:all-srcs", "//test/soak/serve_hostnames:all-srcs", diff --git a/test/kubemark/BUILD b/test/kubemark/BUILD new file mode 100644 index 0000000000000..6cc62052bafba --- /dev/null +++ b/test/kubemark/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/third_party/BUILD b/third_party/BUILD index 6250e35d4e150..40e69849f73e5 100644 --- a/third_party/BUILD +++ b/third_party/BUILD @@ -20,6 +20,7 @@ filegroup( "//third_party/forked/golang/netutil:all-srcs", "//third_party/forked/golang/reflect:all-srcs", "//third_party/forked/golang/template:all-srcs", + "//third_party/htpasswd:all-srcs", ], tags = ["automanaged"], ) diff --git a/third_party/htpasswd/BUILD b/third_party/htpasswd/BUILD new file mode 100644 index 0000000000000..6cc62052bafba --- /dev/null +++ b/third_party/htpasswd/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +)