From 4b709e84859e4c38056d674dcdbe6554a9d23808 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Mon, 24 Jul 2017 18:02:15 +0200 Subject: [PATCH] kube-gen: unify update-codecgen.sh scripts --- hack/.golint_failures | 12 +++ hack/update-codegen.sh | 2 +- hack/verify-codegen.sh | 1 + .../k8s.io/kube-gen/cmd/client-gen/main.go | 64 ++++++---------- .../k8s.io/kube-gen/hack/update-codegen.sh | 75 +++++++++++++++++++ .../k8s.io/kube-gen/hack/verify-codegen.sh | 49 ++++++++++++ .../kube-gen/test/apis/testgroup/register.go | 5 ++ .../test/apis/testgroup/v1/register.go | 5 ++ .../test/clientset/internal/clientset_test.go | 2 +- .../sample-apiserver/hack/update-codegen.sh | 10 +-- 10 files changed, 177 insertions(+), 48 deletions(-) create mode 100755 staging/src/k8s.io/kube-gen/hack/update-codegen.sh create mode 100755 staging/src/k8s.io/kube-gen/hack/verify-codegen.sh diff --git a/hack/.golint_failures b/hack/.golint_failures index 231097d8844..6f06c2e926d 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -779,6 +779,18 @@ staging/src/k8s.io/kube-gen/cmd/informer-gen/generators staging/src/k8s.io/kube-gen/cmd/lister-gen/generators staging/src/k8s.io/kube-gen/test/apis/testgroup staging/src/k8s.io/kube-gen/test/apis/testgroup/v1 +staging/src/k8s.io/kube-gen/test/clientset/internal +staging/src/k8s.io/kube-gen/test/clientset/internal/fake +staging/src/k8s.io/kube-gen/test/clientset/internal/scheme +staging/src/k8s.io/kube-gen/test/clientset/internal/typed/testgroup/internalversion +staging/src/k8s.io/kube-gen/test/clientset/internal/typed/testgroup/internalversion/fake +staging/src/k8s.io/kube-gen/test/clientset/versioned +staging/src/k8s.io/kube-gen/test/clientset/versioned/fake +staging/src/k8s.io/kube-gen/test/clientset/versioned/scheme +staging/src/k8s.io/kube-gen/test/clientset/versioned/typed/testgroup/v1 +staging/src/k8s.io/kube-gen/test/clientset/versioned/typed/testgroup/v1/fake +staging/src/k8s.io/kube-gen/test/informers/externalversions/internalinterfaces +staging/src/k8s.io/kube-gen/test/informers/internalversion/internalinterfaces staging/src/k8s.io/metrics/pkg/apis/custom_metrics staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1alpha1 staging/src/k8s.io/metrics/pkg/apis/metrics diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh index a158d005335..3d35adfff76 100755 --- a/hack/update-codegen.sh +++ b/hack/update-codegen.sh @@ -60,7 +60,6 @@ GV_DIRS_CSV=$(IFS=',';echo "${GV_DIRS[*]// /,}";IFS=$) # This can be called with one flag, --verify-only, so it works for both the # update- and verify- scripts. ${clientgen} "$@" -${clientgen} -t "$@" --output-base "${KUBE_ROOT}/vendor" ${clientgen} --output-base "${KUBE_ROOT}/vendor" --clientset-path="k8s.io/client-go" --clientset-name="kubernetes" --input-base="k8s.io/kubernetes/vendor/k8s.io/api" --input="${GV_DIRS_CSV}" "$@" # Clientgen for federation clientset. ${clientgen} --clientset-name=federation_clientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --input-base="k8s.io/kubernetes/vendor/k8s.io/api" --input="../../../federation/apis/federation/v1beta1","core/v1","extensions/v1beta1","batch/v1","autoscaling/v1" --included-types-overrides="core/v1/Service,core/v1/Namespace,extensions/v1beta1/ReplicaSet,core/v1/Secret,extensions/v1beta1/Ingress,extensions/v1beta1/Deployment,extensions/v1beta1/DaemonSet,core/v1/ConfigMap,core/v1/Event,batch/v1/Job,autoscaling/v1/HorizontalPodAutoscaler" "$@" @@ -123,6 +122,7 @@ ${informergen} \ # You may add additional calls of code generators like set-gen above. # call generation on sub-project for now +KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/kube-gen/hack/update-codegen.sh KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/kube-aggregator/hack/update-codegen.sh KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/sample-apiserver/hack/update-codegen.sh KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/apiextensions-apiserver/hack/update-codegen.sh diff --git a/hack/verify-codegen.sh b/hack/verify-codegen.sh index 167196379ff..0e497fe4ffb 100755 --- a/hack/verify-codegen.sh +++ b/hack/verify-codegen.sh @@ -27,6 +27,7 @@ kube::golang::setup_env # # Note: these must be before the main script call because the later calls the sub-project's # update-codegen.sh scripts. We wouldn't see any error on changes then. +KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/kube-gen/hack/verify-codegen.sh KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/kube-aggregator/hack/verify-codegen.sh KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/sample-apiserver/hack/verify-codegen.sh KUBEGEN_PKG=./vendor/k8s.io/kube-gen vendor/k8s.io/apiextensions-apiserver/hack/verify-codegen.sh diff --git a/staging/src/k8s.io/kube-gen/cmd/client-gen/main.go b/staging/src/k8s.io/kube-gen/cmd/client-gen/main.go index 2d5d5382aa1..bd1e46cea43 100644 --- a/staging/src/k8s.io/kube-gen/cmd/client-gen/main.go +++ b/staging/src/k8s.io/kube-gen/cmd/client-gen/main.go @@ -33,7 +33,6 @@ import ( ) var ( - test = flag.BoolP("test", "t", false, "set this flag to generate the client code for the testdata") inputVersions = flag.StringSlice("input", []string{ "api/", "admissionregistration/", @@ -170,47 +169,30 @@ func main() { "k8s.io/apimachinery/pkg/apimachinery/registered", } - if *test { - arguments.InputDirs = append(dependencies, []string{ - "k8s.io/kube-gen/test/apis/testgroup", - }...) - arguments.CustomArgs = clientgenargs.Args{ - Groups: []types.GroupVersions{{Group: "testgroup", Versions: []types.Version{""}}}, - GroupVersionToInputPath: map[types.GroupVersion]string{ - {Group: "testgroup", Version: ""}: "k8s.io/kube-gen/test/apis/testgroup", - }, - ClientsetName: "test_internalclientset", - ClientsetOutputPath: "k8s.io/kube-gen/test/clientset/internal", - ClientsetOnly: false, - FakeClient: true, - CmdArgs: cmdArgs, - } - } else { - inputPath, groups, gvToPath, err := parseInputVersions() - if err != nil { - glog.Fatalf("Error: %v", err) - } - includedTypesOverrides, err := parseIncludedTypesOverrides() - if err != nil { - glog.Fatalf("Unexpected error: %v", err) - } - glog.V(3).Infof("going to generate clientset from these input paths: %v", inputPath) - arguments.InputDirs = append(inputPath, dependencies...) - - arguments.CustomArgs = clientgenargs.Args{ - Groups: groups, - GroupVersionToInputPath: gvToPath, - ClientsetName: *clientsetName, - ClientsetAPIPath: *clientsetAPIPath, - ClientsetOutputPath: *clientsetPath, - ClientsetOnly: *clientsetOnly, - FakeClient: *fakeClient, - CmdArgs: cmdArgs, - IncludedTypesOverrides: includedTypesOverrides, - } - - glog.V(3).Infof("==arguments: %v\n", arguments) + inputPath, groups, gvToPath, err := parseInputVersions() + if err != nil { + glog.Fatalf("Error: %v", err) } + includedTypesOverrides, err := parseIncludedTypesOverrides() + if err != nil { + glog.Fatalf("Unexpected error: %v", err) + } + glog.V(3).Infof("going to generate clientset from these input paths: %v", inputPath) + arguments.InputDirs = append(inputPath, dependencies...) + + arguments.CustomArgs = clientgenargs.Args{ + Groups: groups, + GroupVersionToInputPath: gvToPath, + ClientsetName: *clientsetName, + ClientsetAPIPath: *clientsetAPIPath, + ClientsetOutputPath: *clientsetPath, + ClientsetOnly: *clientsetOnly, + FakeClient: *fakeClient, + CmdArgs: cmdArgs, + IncludedTypesOverrides: includedTypesOverrides, + } + + glog.V(3).Infof("==arguments: %v\n", arguments) if err := arguments.Execute( generators.NameSystems(), diff --git a/staging/src/k8s.io/kube-gen/hack/update-codegen.sh b/staging/src/k8s.io/kube-gen/hack/update-codegen.sh new file mode 100755 index 00000000000..f2a650d3284 --- /dev/null +++ b/staging/src/k8s.io/kube-gen/hack/update-codegen.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_PACKAGE=k8s.io/kube-gen +SCRIPT_ROOT=$(dirname "${BASH_SOURCE}")/.. +SCRIPT_BASE=${SCRIPT_ROOT}/../.. +KUBEGEN_PKG=${KUBEGEN_PKG:-$(ls -d -1 ./vendor/k8s.io/kube-gen 2>/dev/null || echo "k8s.io/kube-gen")} + +clientgen="${PWD}/client-gen-binary" +listergen="${PWD}/lister-gen" +informergen="${PWD}/informer-gen" +# Register function to be called on EXIT to remove generated binary. +function cleanup { + rm -f "${clientgen:-}" + rm -f "${listergen:-}" + rm -f "${informergen:-}" +} +trap cleanup EXIT + +function generate_group() { + local GROUP_NAME=$1 + local VERSION=$2 + local CLIENT_PKG=${SCRIPT_PACKAGE}/test/clientset + local LISTERS_PKG=${SCRIPT_PACKAGE}/test/listers + local INFORMERS_PKG=${SCRIPT_PACKAGE}/test/informers + local APIS_PKG=${SCRIPT_PACKAGE}/test/apis + local INPUT_APIS=( + ${GROUP_NAME}/ + ${GROUP_NAME}/${VERSION} + ) + + echo "Building client-gen" + go build -o "${clientgen}" ${KUBEGEN_PKG}/cmd/client-gen + + echo "generating clientset for group ${GROUP_NAME} and version ${VERSION} at ${SCRIPT_BASE}/${CLIENT_PKG}" + ${clientgen} --clientset-name="internal" --input-base ${APIS_PKG} --input ${INPUT_APIS[@]} --clientset-path ${CLIENT_PKG} --output-base=${SCRIPT_BASE} + ${clientgen} --clientset-name="versioned" --input-base ${APIS_PKG} --input ${GROUP_NAME}/${VERSION} --clientset-path ${CLIENT_PKG} --output-base=${SCRIPT_BASE} + + echo "Building lister-gen" + go build -o "${listergen}" ${KUBEGEN_PKG}/cmd/lister-gen + + echo "generating listers for group ${GROUP_NAME} and version ${VERSION} at ${SCRIPT_BASE}/${LISTERS_PKG}" + ${listergen} --input-dirs ${APIS_PKG}/${GROUP_NAME} --input-dirs ${APIS_PKG}/${GROUP_NAME}/${VERSION} --output-package ${LISTERS_PKG} --output-base ${SCRIPT_BASE} + + echo "Building informer-gen" + go build -o "${informergen}" ${KUBEGEN_PKG}/cmd/informer-gen + + echo "generating informers for group ${GROUP_NAME} and version ${VERSION} at ${SCRIPT_BASE}/${INFORMERS_PKG}" + ${informergen} \ + --input-dirs ${APIS_PKG}/${GROUP_NAME} --input-dirs ${APIS_PKG}/${GROUP_NAME}/${VERSION} \ + --versioned-clientset-package ${CLIENT_PKG}/versioned \ + --internal-clientset-package ${CLIENT_PKG}/internal \ + --listers-package ${LISTERS_PKG} \ + --output-package ${INFORMERS_PKG} \ + --output-base ${SCRIPT_BASE} +} + +generate_group testgroup v1 diff --git a/staging/src/k8s.io/kube-gen/hack/verify-codegen.sh b/staging/src/k8s.io/kube-gen/hack/verify-codegen.sh new file mode 100755 index 00000000000..7e97fac2fc5 --- /dev/null +++ b/staging/src/k8s.io/kube-gen/hack/verify-codegen.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$(dirname "${BASH_SOURCE}")/.. +SCRIPT_BASE=${SCRIPT_ROOT}/../.. + +DIFFROOT="${SCRIPT_ROOT}/test" +TMP_DIFFROOT="${SCRIPT_ROOT}/_tmp/test" +_tmp="${SCRIPT_ROOT}/_tmp" + +cleanup() { + rm -rf "${_tmp}" +} +trap "cleanup" EXIT SIGINT + +cleanup + +mkdir -p "${TMP_DIFFROOT}" +cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}" + +"${SCRIPT_ROOT}/hack/update-codegen.sh" +echo "diffing ${DIFFROOT} against freshly generated codegen" +ret=0 +diff -Naupr "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$? +cp -a "${TMP_DIFFROOT}"/* "${DIFFROOT}" +if [[ $ret -eq 0 ]] +then + echo "${DIFFROOT} up to date." +else + echo "${DIFFROOT} is out of date. Please run hack/update-codegen.sh" + exit 1 +fi diff --git a/staging/src/k8s.io/kube-gen/test/apis/testgroup/register.go b/staging/src/k8s.io/kube-gen/test/apis/testgroup/register.go index b04486dae75..6a9dc8d429b 100644 --- a/staging/src/k8s.io/kube-gen/test/apis/testgroup/register.go +++ b/staging/src/k8s.io/kube-gen/test/apis/testgroup/register.go @@ -28,6 +28,11 @@ var ( AddToScheme = SchemeBuilder.AddToScheme ) +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + // Adds the list of known types to api.Scheme. func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, diff --git a/staging/src/k8s.io/kube-gen/test/apis/testgroup/v1/register.go b/staging/src/k8s.io/kube-gen/test/apis/testgroup/v1/register.go index dbf299f0dfe..62df7b27052 100644 --- a/staging/src/k8s.io/kube-gen/test/apis/testgroup/v1/register.go +++ b/staging/src/k8s.io/kube-gen/test/apis/testgroup/v1/register.go @@ -39,6 +39,11 @@ func init() { localSchemeBuilder.Register(addKnownTypes) } +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + // Adds the list of known types to api.Scheme. func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, diff --git a/staging/src/k8s.io/kube-gen/test/clientset/internal/clientset_test.go b/staging/src/k8s.io/kube-gen/test/clientset/internal/clientset_test.go index 39cc4d9bcb1..9ee305a29aa 100644 --- a/staging/src/k8s.io/kube-gen/test/clientset/internal/clientset_test.go +++ b/staging/src/k8s.io/kube-gen/test/clientset/internal/clientset_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package test_internalclientset +package internal import ( "testing" diff --git a/staging/src/k8s.io/sample-apiserver/hack/update-codegen.sh b/staging/src/k8s.io/sample-apiserver/hack/update-codegen.sh index 918e9f80f9d..387447a75ee 100755 --- a/staging/src/k8s.io/sample-apiserver/hack/update-codegen.sh +++ b/staging/src/k8s.io/sample-apiserver/hack/update-codegen.sh @@ -40,7 +40,7 @@ function generate_group() { local CLIENT_PKG=${SCRIPT_PACKAGE}/pkg/client local LISTERS_PKG=${CLIENT_PKG}/listers_generated local INFORMERS_PKG=${CLIENT_PKG}/informers_generated - local PREFIX=${SCRIPT_PACKAGE}/pkg/apis + local APIS_PKG=${SCRIPT_PACKAGE}/pkg/apis local INPUT_APIS=( ${GROUP_NAME}/ ${GROUP_NAME}/${VERSION} @@ -50,21 +50,21 @@ function generate_group() { go build -o "${clientgen}" ${KUBEGEN_PKG}/cmd/client-gen echo "generating clientset for group ${GROUP_NAME} and version ${VERSION} at ${SCRIPT_BASE}/${CLIENT_PKG}" - ${clientgen} --input-base ${PREFIX} --input ${INPUT_APIS[@]} --clientset-path ${CLIENT_PKG}/clientset_generated --output-base=${SCRIPT_BASE} - ${clientgen} --clientset-name="clientset" --input-base ${PREFIX} --input ${GROUP_NAME}/${VERSION} --clientset-path ${CLIENT_PKG}/clientset_generated --output-base=${SCRIPT_BASE} + ${clientgen} --input-base ${APIS_PKG} --input ${INPUT_APIS[@]} --clientset-path ${CLIENT_PKG}/clientset_generated --output-base=${SCRIPT_BASE} + ${clientgen} --clientset-name="clientset" --input-base ${APIS_PKG} --input ${GROUP_NAME}/${VERSION} --clientset-path ${CLIENT_PKG}/clientset_generated --output-base=${SCRIPT_BASE} echo "Building lister-gen" go build -o "${listergen}" ${KUBEGEN_PKG}/cmd/lister-gen echo "generating listers for group ${GROUP_NAME} and version ${VERSION} at ${SCRIPT_BASE}/${LISTERS_PKG}" - ${listergen} --input-dirs ${SCRIPT_PACKAGE}/pkg/apis/wardle --input-dirs ${SCRIPT_PACKAGE}/pkg/apis/${GROUP_NAME}/${VERSION} --output-package ${LISTERS_PKG} --output-base ${SCRIPT_BASE} + ${listergen} --input-dirs ${APIS_PKG}/${GROUP_NAME} --input-dirs ${APIS_PKG}/${GROUP_NAME}/${VERSION} --output-package ${LISTERS_PKG} --output-base ${SCRIPT_BASE} echo "Building informer-gen" go build -o "${informergen}" ${KUBEGEN_PKG}/cmd/informer-gen echo "generating informers for group ${GROUP_NAME} and version ${VERSION} at ${SCRIPT_BASE}/${INFORMERS_PKG}" ${informergen} \ - --input-dirs ${SCRIPT_PACKAGE}/pkg/apis/${GROUP_NAME} --input-dirs ${SCRIPT_PACKAGE}/pkg/apis/${GROUP_NAME}/${VERSION} \ + --input-dirs ${APIS_PKG}/${GROUP_NAME} --input-dirs ${APIS_PKG}/${GROUP_NAME}/${VERSION} \ --versioned-clientset-package ${CLIENT_PKG}/clientset_generated/clientset \ --internal-clientset-package ${CLIENT_PKG}/clientset_generated/internalclientset \ --listers-package ${LISTERS_PKG} \