Build release tarballs in bazel and add `make bazel-release` rule

pull/6/head
Jeff Grafton 2017-01-13 14:47:06 -08:00
parent 14dd0d3bef
commit bc4b6ac397
17 changed files with 521 additions and 26 deletions

View File

@ -51,13 +51,3 @@ filegroup(
], ],
tags = ["automanaged"], tags = ["automanaged"],
) )
pkg_tar(
name = "kubernetes-src",
extension = "tar.gz",
files = [
":all-srcs",
],
package_dir = "kubernetes",
strip_prefix = "//",
)

View File

@ -470,7 +470,7 @@ help:
endif endif
# Non-dockerized bazel rules. # Non-dockerized bazel rules.
.PHONY: bazel-build bazel-test .PHONY: bazel-build bazel-test bazel-release
ifeq ($(PRINT_HELP),y) ifeq ($(PRINT_HELP),y)
define BAZEL_BUILD_HELP_INFO define BAZEL_BUILD_HELP_INFO
@ -500,3 +500,17 @@ else
bazel-test: bazel-test:
bazel test --test_output=errors //cmd/... //pkg/... //federation/... //plugin/... //build/... //third_party/... //hack/... bazel test --test_output=errors //cmd/... //pkg/... //federation/... //plugin/... //build/... //third_party/... //hack/...
endif 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

244
build/release-tars/BUILD Normal file
View File

@ -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",
],
)

View File

@ -1,5 +1,7 @@
package(default_visibility = ["//visibility:public"]) package(default_visibility = ["//visibility:public"])
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
licenses(["notice"]) licenses(["notice"])
filegroup( filegroup(
@ -14,6 +16,31 @@ filegroup(
srcs = [ srcs = [
":package-srcs", ":package-srcs",
"//cluster/addons:all-srcs", "//cluster/addons:all-srcs",
"//cluster/gce:all-srcs",
"//cluster/saltbase:all-srcs",
], ],
tags = ["automanaged"], 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",
],
)

View File

@ -4,21 +4,14 @@ load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
filegroup( filegroup(
name = "addon-srcs", name = "addon-srcs",
srcs = glob([ srcs = glob(
"calico-policy-controller/*", [
"cluster-loadbalancing/*", "**/*.json",
"cluster-monitoring/*", "**/*.yaml",
"dashboard/*", "**/*.yaml.in",
"dns/*", ],
"etcd-empty-dir-cleanup/*", exclude = ["**/*demo*/**"],
"fluentd-elasticsearch/*", ),
"fluentd-gcp/*",
"gci/*",
"node-problem-detector/*",
"podsecuritypolicies/*",
"python-image/*",
"registry/*",
]),
) )
pkg_tar( pkg_tar(
@ -27,6 +20,7 @@ pkg_tar(
files = [ files = [
":addon-srcs", ":addon-srcs",
], ],
mode = "0644",
strip_prefix = ".", strip_prefix = ".",
) )

37
cluster/gce/BUILD Normal file
View File

@ -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"],
)

87
cluster/saltbase/BUILD Normal file
View File

@ -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",
],
)

View File

@ -2,6 +2,8 @@ package(default_visibility = ["//visibility:public"])
licenses(["notice"]) licenses(["notice"])
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
filegroup( filegroup(
name = "package-srcs", name = "package-srcs",
srcs = glob(["**"]), srcs = glob(["**"]),
@ -23,6 +25,7 @@ filegroup(
"//federation/cmd/federation-controller-manager:all-srcs", "//federation/cmd/federation-controller-manager:all-srcs",
"//federation/cmd/genfeddocs:all-srcs", "//federation/cmd/genfeddocs:all-srcs",
"//federation/cmd/kubefed:all-srcs", "//federation/cmd/kubefed:all-srcs",
"//federation/develop:all-srcs",
"//federation/pkg/dnsprovider:all-srcs", "//federation/pkg/dnsprovider:all-srcs",
"//federation/pkg/federation-controller:all-srcs", "//federation/pkg/federation-controller:all-srcs",
"//federation/pkg/kubefed:all-srcs", "//federation/pkg/kubefed:all-srcs",
@ -30,3 +33,12 @@ filegroup(
], ],
tags = ["automanaged"], tags = ["automanaged"],
) )
pkg_tar(
name = "release",
files = glob([
"deploy/**",
"manifests/**",
]) + ["//federation/cluster:all-srcs"],
package_dir = "federation",
)

16
federation/develop/BUILD Normal file
View File

@ -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"],
)

View File

@ -14,6 +14,8 @@ filegroup(
srcs = [ srcs = [
":package-srcs", ":package-srcs",
"//hack/boilerplate:all-srcs", "//hack/boilerplate:all-srcs",
"//hack/e2e-internal:all-srcs",
"//hack/lib:all-srcs",
], ],
tags = ["automanaged"], tags = ["automanaged"],
) )

16
hack/e2e-internal/BUILD Normal file
View File

@ -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"],
)

16
hack/lib/BUILD Normal file
View File

@ -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"],
)

View File

@ -21,6 +21,7 @@ readonly KUBE_GOPATH="${KUBE_OUTPUT}/go"
# The set of server targets that we are only building for Linux # 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 # Note: if you are adding something here, you might need to add it to
# kube::build::source_targets in build/common.sh as well. # 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() { kube::golang::server_targets() {
local targets=( local targets=(
cmd/kube-proxy cmd/kube-proxy
@ -40,6 +41,7 @@ readonly KUBE_SERVER_TARGETS=($(kube::golang::server_targets))
readonly KUBE_SERVER_BINARIES=("${KUBE_SERVER_TARGETS[@]##*/}") readonly KUBE_SERVER_BINARIES=("${KUBE_SERVER_TARGETS[@]##*/}")
# The set of server targets that we are only building for Kubernetes nodes # 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() { kube::golang::node_targets() {
local targets=( local targets=(
cmd/kube-proxy cmd/kube-proxy
@ -122,6 +124,7 @@ else
fi fi
# The set of client targets that we are building for all platforms # 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=( readonly KUBE_CLIENT_TARGETS=(
cmd/kubectl cmd/kubectl
federation/cmd/kubefed federation/cmd/kubefed
@ -130,6 +133,7 @@ readonly KUBE_CLIENT_BINARIES=("${KUBE_CLIENT_TARGETS[@]##*/}")
readonly KUBE_CLIENT_BINARIES_WIN=("${KUBE_CLIENT_BINARIES[@]/%/.exe}") readonly KUBE_CLIENT_BINARIES_WIN=("${KUBE_CLIENT_BINARIES[@]/%/.exe}")
# The set of test targets that we are building for all platforms # 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() { kube::golang::test_targets() {
local targets=( local targets=(
cmd/gendocs cmd/gendocs
@ -149,6 +153,7 @@ kube::golang::test_targets() {
readonly KUBE_TEST_TARGETS=($(kube::golang::test_targets)) readonly KUBE_TEST_TARGETS=($(kube::golang::test_targets))
readonly KUBE_TEST_BINARIES=("${KUBE_TEST_TARGETS[@]##*/}") readonly KUBE_TEST_BINARIES=("${KUBE_TEST_TARGETS[@]##*/}")
readonly KUBE_TEST_BINARIES_WIN=("${KUBE_TEST_BINARIES[@]/%/.exe}") 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=( readonly KUBE_TEST_PORTABLE=(
test/e2e/testing-manifests test/e2e/testing-manifests
test/kubemark test/kubemark
@ -164,6 +169,7 @@ readonly KUBE_TEST_PORTABLE=(
# Test targets which run on the Kubernetes clusters directly, so we only # Test targets which run on the Kubernetes clusters directly, so we only
# need to target server platforms. # need to target server platforms.
# These binaries will be distributed in the kubernetes-test tarball. # 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=( readonly KUBE_TEST_SERVER_TARGETS=(
cmd/kubemark cmd/kubemark
vendor/github.com/onsi/ginkgo/ginkgo vendor/github.com/onsi/ginkgo/ginkgo

View File

@ -18,6 +18,7 @@ filegroup(
"//test/fixtures:all-srcs", "//test/fixtures:all-srcs",
"//test/images:all-srcs", "//test/images:all-srcs",
"//test/integration:all-srcs", "//test/integration:all-srcs",
"//test/kubemark:all-srcs",
"//test/list:all-srcs", "//test/list:all-srcs",
"//test/soak/cauldron:all-srcs", "//test/soak/cauldron:all-srcs",
"//test/soak/serve_hostnames:all-srcs", "//test/soak/serve_hostnames:all-srcs",

16
test/kubemark/BUILD Normal file
View File

@ -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"],
)

1
third_party/BUILD vendored
View File

@ -20,6 +20,7 @@ filegroup(
"//third_party/forked/golang/netutil:all-srcs", "//third_party/forked/golang/netutil:all-srcs",
"//third_party/forked/golang/reflect:all-srcs", "//third_party/forked/golang/reflect:all-srcs",
"//third_party/forked/golang/template:all-srcs", "//third_party/forked/golang/template:all-srcs",
"//third_party/htpasswd:all-srcs",
], ],
tags = ["automanaged"], tags = ["automanaged"],
) )

16
third_party/htpasswd/BUILD vendored Normal file
View File

@ -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"],
)