From 2df11cea32664c9c64376d25c0c3ee721352a8d0 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Tue, 19 May 2015 17:47:03 +0200 Subject: [PATCH] Automatically generate conversions --- docs/devel/api_changes.md | 6 +-- hack/update-generated-conversions.sh | 3 -- hack/verify-generated-conversions.sh | 60 ++++++++++++++++++++++++++++ hooks/pre-commit | 12 ++++++ 4 files changed, 73 insertions(+), 8 deletions(-) create mode 100755 hack/verify-generated-conversions.sh diff --git a/docs/devel/api_changes.md b/docs/devel/api_changes.md index 6eff094be66..4627c6dfd65 100644 --- a/docs/devel/api_changes.md +++ b/docs/devel/api_changes.md @@ -251,12 +251,8 @@ Once all the necessary manually written conversions are added, you need to regenerate auto-generated ones. To regenerate them: - run ``` - $ go run cmd/kube-conversion/conversion.go -v -f -n + $ hack/update-generated-conversions.sh ``` - - replace all conversion functions (convert\* functions) in the - `pkg/api//conversion_generated.go` with the contents of \ - - replace arguments of `api.Scheme.AddGeneratedConversionFuncs` in the - `pkg/api//conversion_generated.go` with the contents of \ Unsurprisingly, adding manually written conversion also requires you to add tests to `pkg/api//conversion_test.go`. diff --git a/hack/update-generated-conversions.sh b/hack/update-generated-conversions.sh index 7b0c5ddd675..a0859bae05d 100755 --- a/hack/update-generated-conversions.sh +++ b/hack/update-generated-conversions.sh @@ -14,9 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Script to fetch latest swagger spec. -# Puts the updated spec at swagger-spec/ - set -o errexit set -o nounset set -o pipefail diff --git a/hack/verify-generated-conversions.sh b/hack/verify-generated-conversions.sh new file mode 100755 index 00000000000..e4e535b9786 --- /dev/null +++ b/hack/verify-generated-conversions.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# Copyright 2015 The Kubernetes Authors All rights reserved. +# +# 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 + +KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. +source "${KUBE_ROOT}/hack/lib/init.sh" + +kube::golang::setup_env +"${KUBE_ROOT}/hack/build-go.sh" cmd/kube-conversion + +genconversion=$(kube::util::find-binary "kube-conversion") + +if [[ ! -x "$genconversion" ]]; then + { + echo "It looks as if you don't have a compiled conversion binary" + echo + echo "If you are running from a clone of the git repo, please run" + echo "'./hack/build-go.sh cmd/kube-conversion'." + } >&2 + exit 1 +fi + +APIROOT="${KUBE_ROOT}/pkg/api" +TMP_APIROOT="${KUBE_ROOT}/_tmp/api" +_tmp="${KUBE_ROOT}/_tmp" + +mkdir -p "${_tmp}" +cp -a "${APIROOT}" "${TMP_APIROOT}" + +"${KUBE_ROOT}/hack/update-generated-conversions.sh" +echo "diffing ${APIROOT} against freshly generated conversions" +ret=0 +diff -Naupr -I 'Auto generated by' "${APIROOT}" "${TMP_APIROOT}" || ret=$? +cp -a ${TMP_APIROOT} "${KUBE_ROOT}/pkg" +rm -rf "${_tmp}" +if [[ $ret -eq 0 ]] +then + echo "${APIROOT} up to date." +else + echo "${APIROOT} is out of date. Please run hack/update-generated-conversions.sh" + exit 1 +fi + +# ex: ts=2 sw=2 et filetype=sh diff --git a/hooks/pre-commit b/hooks/pre-commit index 3a240b3d14b..c9ed7693a8d 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -99,4 +99,16 @@ else fi echo "${reset}" +echo -ne "Checking for conversions that need updating... " +if ! hack/verify-generated-conversions.sh > /dev/null; then + echo "${red}ERROR!" + echo "Some conversions functions need regeneration." + echo "To regenerate conversions, run:" + echo " hack/update-generated-conversions.sh" + exit_code=1 +else + echo "${green}OK" +fi +echo "${reset}" + exit $exit_code