Skip to content

Commit 0738395

Browse files
committed
Add scripts for updating autogenerated files.
1 parent f650aba commit 0738395

File tree

4 files changed

+137
-1
lines changed

4 files changed

+137
-1
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ all:
4343
verify:
4444
hack/verify-gofmt.sh
4545
hack/verify-boilerplate.sh
46+
hack/verify-codecgen.sh
4647
hack/verify-description.sh
4748
hack/verify-generated-conversions.sh
4849
hack/verify-generated-deep-copies.sh

hack/update-all.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ if $SILENT ; then
4040
echo "Running in the silent mode, run with -v if you want to see script logs."
4141
fi
4242

43-
BASH_TARGETS="generated-conversions
43+
BASH_TARGETS="codecgen
44+
generated-conversions
4445
generated-deep-copies
4546
generated-docs
4647
generated-swagger-docs

hack/update-codecgen.sh

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/bin/bash
2+
3+
# Copyright 2015 The Kubernetes Authors All rights reserved.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
set -o errexit
18+
set -o nounset
19+
set -o pipefail
20+
21+
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
22+
cd "${KUBE_ROOT}"
23+
24+
generated_files=$(
25+
find . -not \( \
26+
\( \
27+
-wholename './output' \
28+
-o -wholename './_output' \
29+
-o -wholename './release' \
30+
-o -wholename './target' \
31+
-o -wholename '*/third_party/*' \
32+
-o -wholename '*/Godeps/*' \
33+
\) -prune \
34+
\) -name '*.generated.go')
35+
36+
for generated_file in ${generated_files}; do
37+
initial_dir=${PWD}
38+
file=${generated_file//\.generated\.go/.go}
39+
# codecgen work only if invoked from directory where the file
40+
# is located.
41+
pushd "$(dirname ${file})" > /dev/null
42+
base_file=$(basename "${file}")
43+
base_generated_file=$(basename "${generated_file}")
44+
# We use '-d 1234' flag to have a deterministic output everytime.
45+
# The constant was just randomly chosen.
46+
codecgen -d 1234 -o "${base_generated_file}" "${base_file}"
47+
# Add boilerplate at the begining of the generated file.
48+
sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp"
49+
cat "${base_generated_file}" >> "${base_generated_file}.tmp"
50+
mv "${base_generated_file}.tmp" "${base_generated_file}"
51+
popd > /dev/null
52+
done

hack/verify-codecgen.sh

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/bin/bash
2+
3+
# Copyright 2015 The Kubernetes Authors All rights reserved.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
set -o errexit
18+
set -o nounset
19+
set -o pipefail
20+
21+
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
22+
source "${KUBE_ROOT}/hack/lib/init.sh"
23+
24+
kube::golang::setup_env
25+
26+
cd "${KUBE_ROOT}"
27+
28+
generated_files=$(
29+
find . -not \( \
30+
\( \
31+
-wholename './output' \
32+
-o -wholename './_output' \
33+
-o -wholename './release' \
34+
-o -wholename './target' \
35+
-o -wholename '*/third_party/*' \
36+
-o -wholename '*/Godeps/*' \
37+
\) -prune \
38+
\) -name '*.generated.go')
39+
40+
# create a nice clean place to put codecgen there
41+
_tmpdir="$(mktemp -d -t codecgen.XXXXXX)"
42+
function cleanup {
43+
echo "Removing ${_tmpdir}"
44+
rm -rf "${_tmpdir}"
45+
}
46+
trap cleanup EXIT
47+
48+
# build codecgen tool
49+
# We make some tricks with GOPATH variable to make it work with Travis.
50+
_gopath=${GOPATH}
51+
export GOPATH="${_tmpdir}"
52+
go get -u github.com/ugorji/go/codec/codecgen 2>/dev/null
53+
go install github.com/ugorji/go/codec/codecgen 2>/dev/null
54+
CODECGEN="${_tmpdir}/bin/codecgen"
55+
export GOPATH=${_gopath}
56+
57+
for generated_file in ${generated_files}; do
58+
initial_dir=${PWD}
59+
file=${generated_file//\.generated\.go/.go}
60+
# codecgen work only if invoked from directory where the file
61+
# is located.
62+
pushd "$(dirname ${file})" > /dev/null
63+
base_file=$(basename "${file}")
64+
base_generated_file=$(basename "${generated_file}")
65+
# We use '-d 1234' flag to have a deterministic output everytime.
66+
# The constant was just randomly chosen.
67+
${CODECGEN} -d 1234 -o "${base_generated_file}.1tmp" "${base_file}"
68+
# Add boilerplate at the begining of the generated file.
69+
sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp"
70+
cat "${base_generated_file}.1tmp" >> "${base_generated_file}.tmp"
71+
rm "${base_generated_file}.1tmp"
72+
ret=0
73+
diff -Naupr -I 'Auto generated by' "${base_generated_file}" "${base_generated_file}.tmp" || ret=$?
74+
if [[ $ret -eq 0 ]]; then
75+
echo "${generated_file} up to date."
76+
else
77+
echo "${generated_file} is out of date. Please run hack/update-codecgen.sh"
78+
exit 1
79+
fi
80+
rm "${base_generated_file}.tmp"
81+
popd > /dev/null
82+
done

0 commit comments

Comments
 (0)