From 07383950c311e8dde23de909b5f4e2b617243bd2 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Mon, 12 Oct 2015 11:52:24 +0200 Subject: [PATCH] Add scripts for updating autogenerated files. --- Makefile | 1 + hack/update-all.sh | 3 +- hack/update-codecgen.sh | 52 ++++++++++++++++++++++++++ hack/verify-codecgen.sh | 82 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 137 insertions(+), 1 deletion(-) create mode 100755 hack/update-codecgen.sh create mode 100755 hack/verify-codecgen.sh diff --git a/Makefile b/Makefile index 88d6bfe4f0c50..b9e5bd5806791 100644 --- a/Makefile +++ b/Makefile @@ -43,6 +43,7 @@ all: verify: hack/verify-gofmt.sh hack/verify-boilerplate.sh + hack/verify-codecgen.sh hack/verify-description.sh hack/verify-generated-conversions.sh hack/verify-generated-deep-copies.sh diff --git a/hack/update-all.sh b/hack/update-all.sh index db7d59d66736c..7c88b392fa57e 100755 --- a/hack/update-all.sh +++ b/hack/update-all.sh @@ -40,7 +40,8 @@ if $SILENT ; then echo "Running in the silent mode, run with -v if you want to see script logs." fi -BASH_TARGETS="generated-conversions +BASH_TARGETS="codecgen + generated-conversions generated-deep-copies generated-docs generated-swagger-docs diff --git a/hack/update-codecgen.sh b/hack/update-codecgen.sh new file mode 100755 index 0000000000000..f2e741176338c --- /dev/null +++ b/hack/update-codecgen.sh @@ -0,0 +1,52 @@ +#!/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}")/.. +cd "${KUBE_ROOT}" + +generated_files=$( + find . -not \( \ + \( \ + -wholename './output' \ + -o -wholename './_output' \ + -o -wholename './release' \ + -o -wholename './target' \ + -o -wholename '*/third_party/*' \ + -o -wholename '*/Godeps/*' \ + \) -prune \ + \) -name '*.generated.go') + +for generated_file in ${generated_files}; do + initial_dir=${PWD} + file=${generated_file//\.generated\.go/.go} + # codecgen work only if invoked from directory where the file + # is located. + pushd "$(dirname ${file})" > /dev/null + base_file=$(basename "${file}") + base_generated_file=$(basename "${generated_file}") + # We use '-d 1234' flag to have a deterministic output everytime. + # The constant was just randomly chosen. + codecgen -d 1234 -o "${base_generated_file}" "${base_file}" + # Add boilerplate at the begining of the generated file. + sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp" + cat "${base_generated_file}" >> "${base_generated_file}.tmp" + mv "${base_generated_file}.tmp" "${base_generated_file}" + popd > /dev/null +done diff --git a/hack/verify-codecgen.sh b/hack/verify-codecgen.sh new file mode 100755 index 0000000000000..0ac250a69f5ea --- /dev/null +++ b/hack/verify-codecgen.sh @@ -0,0 +1,82 @@ +#!/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 + +cd "${KUBE_ROOT}" + +generated_files=$( + find . -not \( \ + \( \ + -wholename './output' \ + -o -wholename './_output' \ + -o -wholename './release' \ + -o -wholename './target' \ + -o -wholename '*/third_party/*' \ + -o -wholename '*/Godeps/*' \ + \) -prune \ + \) -name '*.generated.go') + +# create a nice clean place to put codecgen there +_tmpdir="$(mktemp -d -t codecgen.XXXXXX)" +function cleanup { + echo "Removing ${_tmpdir}" + rm -rf "${_tmpdir}" +} +trap cleanup EXIT + +# build codecgen tool +# We make some tricks with GOPATH variable to make it work with Travis. +_gopath=${GOPATH} +export GOPATH="${_tmpdir}" +go get -u github.com/ugorji/go/codec/codecgen 2>/dev/null +go install github.com/ugorji/go/codec/codecgen 2>/dev/null +CODECGEN="${_tmpdir}/bin/codecgen" +export GOPATH=${_gopath} + +for generated_file in ${generated_files}; do + initial_dir=${PWD} + file=${generated_file//\.generated\.go/.go} + # codecgen work only if invoked from directory where the file + # is located. + pushd "$(dirname ${file})" > /dev/null + base_file=$(basename "${file}") + base_generated_file=$(basename "${generated_file}") + # We use '-d 1234' flag to have a deterministic output everytime. + # The constant was just randomly chosen. + ${CODECGEN} -d 1234 -o "${base_generated_file}.1tmp" "${base_file}" + # Add boilerplate at the begining of the generated file. + sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp" + cat "${base_generated_file}.1tmp" >> "${base_generated_file}.tmp" + rm "${base_generated_file}.1tmp" + ret=0 + diff -Naupr -I 'Auto generated by' "${base_generated_file}" "${base_generated_file}.tmp" || ret=$? + if [[ $ret -eq 0 ]]; then + echo "${generated_file} up to date." + else + echo "${generated_file} is out of date. Please run hack/update-codecgen.sh" + exit 1 + fi + rm "${base_generated_file}.tmp" + popd > /dev/null +done