kube-gen: unify update-codecgen.sh scripts

pull/6/head
Dr. Stefan Schimanski 2017-07-24 18:02:15 +02:00
parent 34397721d6
commit 4b709e8485
10 changed files with 177 additions and 48 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(),

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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"

View File

@ -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} \