diff --git a/.gazelcfg.json b/.gazelcfg.json index b2c47d3603..43b0558395 100644 --- a/.gazelcfg.json +++ b/.gazelcfg.json @@ -15,5 +15,6 @@ "_vendor" ], "AddSourcesRules": true, - "VendorMultipleBuildFiles": true + "VendorMultipleBuildFiles": true, + "K8sOpenAPIGen": true } diff --git a/hack/update-bazel.sh b/hack/update-bazel.sh index 80d2dfcdb0..a32f90c640 100755 --- a/hack/update-bazel.sh +++ b/hack/update-bazel.sh @@ -20,7 +20,11 @@ set -o pipefail export KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. source "${KUBE_ROOT}/hack/lib/init.sh" -go get gopkg.in/mikedanese/gazel.v16/gazel +# Remove generated files prior to running gazel. +# TODO(spxtr): Remove this line once Bazel is the only way to build. +rm -f "${KUBE_ROOT}/pkg/generated/openapi/zz_generated.openapi.go" + +go get -u gopkg.in/mikedanese/gazel.v16/gazel for path in ${GOPATH//:/ }; do if [[ -e "${path}/bin/gazel" ]]; then diff --git a/hack/verify-bazel.sh b/hack/verify-bazel.sh index 41d38fb8b6..e69a907133 100755 --- a/hack/verify-bazel.sh +++ b/hack/verify-bazel.sh @@ -22,6 +22,10 @@ source "${KUBE_ROOT}/hack/lib/init.sh" go get gopkg.in/mikedanese/gazel.v16/gazel +# Remove generated files prior to running gazel. +# TODO(spxtr): Remove this line once Bazel is the only way to build. +rm -f "${KUBE_ROOT}/pkg/generated/openapi/zz_generated.openapi.go" + for path in ${GOPATH//:/ }; do if [[ -e "${path}/bin/gazel" ]]; then gazel="${path}/bin/gazel" @@ -33,6 +37,7 @@ if [[ -z "${gazel:-}" ]]; then exit 1 fi + if ! "${gazel}" -validate -print-diff -root="$(kube::realpath ${KUBE_ROOT})" ; then echo echo "Run ./hack/update-bazel.sh" diff --git a/pkg/generated/openapi/BUILD b/pkg/generated/openapi/BUILD index 6610a8b930..f5cc8297b8 100644 --- a/pkg/generated/openapi/BUILD +++ b/pkg/generated/openapi/BUILD @@ -1,25 +1,50 @@ package(default_visibility = ["//visibility:public"]) +load("//pkg/generated/openapi:def.bzl", "openapi_library") + licenses(["notice"]) -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( +openapi_library( name = "go_default_library", - srcs = [ - "doc.go", - "zz_generated.openapi.go", + srcs = ["doc.go"], + openapi_targets = [ + "cmd/libs/go2idl/client-gen/test_apis/testgroup/v1", + "federation/apis/federation/v1beta1", + "pkg/api/v1", + "pkg/apis/abac/v0", + "pkg/apis/abac/v1beta1", + "pkg/apis/apps/v1beta1", + "pkg/apis/authentication/v1", + "pkg/apis/authentication/v1beta1", + "pkg/apis/authorization/v1", + "pkg/apis/authorization/v1beta1", + "pkg/apis/autoscaling/v1", + "pkg/apis/autoscaling/v2alpha1", + "pkg/apis/batch/v1", + "pkg/apis/batch/v2alpha1", + "pkg/apis/certificates/v1beta1", + "pkg/apis/componentconfig/v1alpha1", + "pkg/apis/extensions/v1beta1", + "pkg/apis/imagepolicy/v1alpha1", + "pkg/apis/policy/v1beta1", + "pkg/apis/rbac/v1alpha1", + "pkg/apis/rbac/v1beta1", + "pkg/apis/settings/v1alpha1", + "pkg/apis/storage/v1", + "pkg/apis/storage/v1beta1", + "pkg/version", + "vendor/k8s.io/metrics/pkg/apis/custom_metrics/v1alpha1", + "vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1", ], tags = ["automanaged"], - deps = [ - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/openapi:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", + vendor_targets = [ + "k8s.io/apimachinery/pkg/api/resource", + "k8s.io/apimachinery/pkg/apis/meta/v1", + "k8s.io/apimachinery/pkg/runtime", + "k8s.io/apimachinery/pkg/util/intstr", + "k8s.io/apimachinery/pkg/version", + "k8s.io/apiserver/pkg/apis/example/v1", + "k8s.io/client-go/pkg/api/v1", ], ) diff --git a/pkg/generated/openapi/def.bzl b/pkg/generated/openapi/def.bzl new file mode 100644 index 0000000000..b7919d7762 --- /dev/null +++ b/pkg/generated/openapi/def.bzl @@ -0,0 +1,31 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_kubernetes_build//defs:go.bzl", "go_genrule") + +def openapi_library(name, tags, srcs, openapi_targets=[], vendor_targets=[]): + deps = [ + "//vendor/github.com/go-openapi/spec:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/openapi:go_default_library", + ] + ["//%s:go_default_library" % target for target in openapi_targets] + ["//vendor/%s:go_default_library" % target for target in vendor_targets] + go_library( + name=name, + tags=tags, + srcs=srcs + [":zz_generated.openapi"], + deps=deps, + ) + go_genrule( + name = "zz_generated.openapi", + srcs = srcs + ["//hack/boilerplate:boilerplate.go.txt"], + outs = ["zz_generated.openapi.go"], + cmd = " ".join([ + "$(location //cmd/libs/go2idl/openapi-gen)", + "--v 1", + "--logtostderr", + "--go-header-file $(location //hack/boilerplate:boilerplate.go.txt)", + "--output-file-base zz_generated.openapi", + "--output-package k8s.io/kubernetes/pkg/generated/openapi", + "--input-dirs " + ",".join(["k8s.io/kubernetes/" + target for target in openapi_targets] + ["k8s.io/kubernetes/vendor/" + target for target in vendor_targets]), + "&& cp pkg/generated/openapi/zz_generated.openapi.go $(GENDIR)/pkg/generated/openapi", + ]), + go_deps = deps, + tools = ["//cmd/libs/go2idl/openapi-gen"], +)