verify-generated-files-remake.sh 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. #!/usr/bin/env bash
  2. # Copyright 2017 The Kubernetes Authors.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. set -o errexit
  16. set -o nounset
  17. set -o pipefail
  18. KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
  19. source "${KUBE_ROOT}/hack/lib/init.sh"
  20. kube::util::ensure_clean_working_dir
  21. _tmpdir="$(kube::realpath "$(mktemp -d -t verify-generated-files.XXXXXX)")"
  22. kube::util::trap_add "rm -rf ${_tmpdir}" EXIT
  23. _tmp_gopath="${_tmpdir}/go"
  24. _tmp_kuberoot="${_tmp_gopath}/src/k8s.io/kubernetes"
  25. mkdir -p "${_tmp_kuberoot}/.."
  26. cp -a "${KUBE_ROOT}" "${_tmp_kuberoot}/.."
  27. cd "${_tmp_kuberoot}"
  28. # clean out anything from the temp dir that's not checked in
  29. git clean -ffxd
  30. # $1 = filename pattern as in "zz_generated.$1.go"
  31. function find_genfiles() {
  32. find . \
  33. \( \
  34. -not \( \
  35. \( \
  36. -path ./_\* -o \
  37. -path ./.\* \
  38. \) -prune \
  39. \) \
  40. \) -name "zz_generated.$1.go"
  41. }
  42. # $1 = filename pattern as in "zz_generated.$1.go"
  43. # $2 timestamp file
  44. function newer() {
  45. find_genfiles "$1" | while read -r F; do
  46. if [[ "${F}" -nt "$2" ]]; then
  47. echo "${F}"
  48. fi
  49. done
  50. }
  51. # $1 = filename pattern as in "zz_generated.$1.go"
  52. # $2 timestamp file
  53. function older() {
  54. find_genfiles "$1" | while read -r F; do
  55. if [[ "$2" -nt "${F}" ]]; then
  56. echo "${F}"
  57. fi
  58. done
  59. }
  60. function assert_clean() {
  61. make generated_files >/dev/null
  62. touch "${STAMP}"
  63. make generated_files >/dev/null
  64. X="$(newer deepcopy "${STAMP}")"
  65. if [[ -n "${X}" ]]; then
  66. echo "Generated files changed on back-to-back 'make' runs:"
  67. echo " ${X}" | tr '\n' ' '
  68. echo ""
  69. return 1
  70. fi
  71. true
  72. }
  73. STAMP=/tmp/stamp.$RANDOM
  74. #
  75. # Test when we touch a file in a package that needs codegen.
  76. #
  77. assert_clean
  78. DIR=staging/src/k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1
  79. touch "${DIR}/types.go"
  80. touch "${STAMP}"
  81. make generated_files >/dev/null
  82. X="$(newer deepcopy "${STAMP}")"
  83. if [[ -z "${X}" || ${X} != "./${DIR}/zz_generated.deepcopy.go" ]]; then
  84. echo "Wrong generated deepcopy files changed after touching src file:"
  85. echo " ${X:-(none)}" | tr '\n' ' '
  86. echo ""
  87. exit 1
  88. fi
  89. X="$(newer defaults "${STAMP}")"
  90. if [[ -z "${X}" || ${X} != "./${DIR}/zz_generated.defaults.go" ]]; then
  91. echo "Wrong generated defaults files changed after touching src file:"
  92. echo " ${X:-(none)}" | tr '\n' ' '
  93. echo ""
  94. exit 1
  95. fi
  96. X="$(newer conversion "${STAMP}")"
  97. if [[ -z "${X}" || ${X} != "./${DIR}/zz_generated.conversion.go" ]]; then
  98. echo "Wrong generated conversion files changed after touching src file:"
  99. echo " ${X:-(none)}" | tr '\n' ' '
  100. echo ""
  101. exit 1
  102. fi
  103. #
  104. # Test when the codegen tool itself changes: deepcopy
  105. #
  106. assert_clean
  107. touch staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go
  108. touch "${STAMP}"
  109. make generated_files >/dev/null
  110. X="$(older deepcopy "${STAMP}")"
  111. if [[ -n "${X}" ]]; then
  112. echo "Generated deepcopy files did not change after touching code-generator file:"
  113. echo " ${X}" | tr '\n' ' '
  114. echo ""
  115. exit 1
  116. fi
  117. assert_clean
  118. touch staging/src/k8s.io/code-generator/cmd/deepcopy-gen/
  119. touch "${STAMP}"
  120. make generated_files >/dev/null
  121. X="$(older deepcopy "${STAMP}")"
  122. if [[ -n "${X}" ]]; then
  123. echo "Generated deepcopy files did not change after touching code-generator dir:"
  124. echo " ${X}" | tr '\n' ' '
  125. echo ""
  126. exit 1
  127. fi
  128. assert_clean
  129. touch vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go
  130. touch "${STAMP}"
  131. make generated_files >/dev/null
  132. X="$(older deepcopy "${STAMP}")"
  133. if [[ -n "${X}" ]]; then
  134. echo "Generated deepcopy files did not change after touching code-generator dep file:"
  135. echo " ${X}" | tr '\n' ' '
  136. echo ""
  137. exit 1
  138. fi
  139. assert_clean
  140. touch vendor/k8s.io/gengo/examples/deepcopy-gen/generators/
  141. touch "${STAMP}"
  142. make generated_files >/dev/null
  143. X="$(older deepcopy "${STAMP}")"
  144. if [[ -n "${X}" ]]; then
  145. echo "Generated deepcopy files did not change after touching code-generator dep dir:"
  146. echo " ${X}" | tr '\n' ' '
  147. echo ""
  148. exit 1
  149. fi
  150. #
  151. # Test when the codegen tool itself changes: defaults
  152. #
  153. assert_clean
  154. touch staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go
  155. touch "${STAMP}"
  156. make generated_files >/dev/null
  157. X="$(older defaults "${STAMP}")"
  158. if [[ -n "${X}" ]]; then
  159. echo "Generated defaults files did not change after touching code-generator file:"
  160. echo " ${X}" | tr '\n' ' '
  161. echo ""
  162. exit 1
  163. fi
  164. assert_clean
  165. touch staging/src/k8s.io/code-generator/cmd/defaulter-gen/
  166. touch "${STAMP}"
  167. make generated_files >/dev/null
  168. X="$(older defaults "${STAMP}")"
  169. if [[ -n "${X}" ]]; then
  170. echo "Generated defaults files did not change after touching code-generator dir:"
  171. echo " ${X}" | tr '\n' ' '
  172. echo ""
  173. exit 1
  174. fi
  175. assert_clean
  176. touch vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go
  177. touch "${STAMP}"
  178. make generated_files >/dev/null
  179. X="$(older defaults "${STAMP}")"
  180. if [[ -n "${X}" ]]; then
  181. echo "Generated defaults files did not change after touching code-generator dep file:"
  182. echo " ${X}" | tr '\n' ' '
  183. echo ""
  184. exit 1
  185. fi
  186. assert_clean
  187. touch vendor/k8s.io/gengo/examples/defaulter-gen/generators/
  188. touch "${STAMP}"
  189. make generated_files >/dev/null
  190. X="$(older defaults "${STAMP}")"
  191. if [[ -n "${X}" ]]; then
  192. echo "Generated defaults files did not change after touching code-generator dep dir:"
  193. echo " ${X}" | tr '\n' ' '
  194. echo ""
  195. exit 1
  196. fi
  197. #
  198. # Test when the codegen tool itself changes: conversion
  199. #
  200. assert_clean
  201. touch staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go
  202. touch "${STAMP}"
  203. make generated_files >/dev/null
  204. X="$(older conversion "${STAMP}")"
  205. if [[ -n "${X}" ]]; then
  206. echo "Generated conversion files did not change after touching code-generator file:"
  207. echo " ${X}" | tr '\n' ' '
  208. echo ""
  209. exit 1
  210. fi
  211. assert_clean
  212. touch staging/src/k8s.io/code-generator/cmd/conversion-gen/
  213. touch "${STAMP}"
  214. make generated_files >/dev/null
  215. X="$(older conversion "${STAMP}")"
  216. if [[ -n "${X}" ]]; then
  217. echo "Generated conversion files did not change after touching code-generator dir:"
  218. echo " ${X}" | tr '\n' ' '
  219. echo ""
  220. exit 1
  221. fi
  222. assert_clean
  223. touch vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go
  224. touch "${STAMP}"
  225. make generated_files >/dev/null
  226. X="$(older conversion "${STAMP}")"
  227. if [[ -n "${X}" ]]; then
  228. echo "Generated conversion files did not change after touching code-generator dep file:"
  229. echo " ${X}" | tr '\n' ' '
  230. echo ""
  231. exit 1
  232. fi
  233. assert_clean
  234. touch vendor/k8s.io/code-generator/cmd/conversion-gen/generators/
  235. touch "${STAMP}"
  236. make generated_files >/dev/null
  237. X="$(older conversion "${STAMP}")"
  238. if [[ -n "${X}" ]]; then
  239. echo "Generated conversion files did not change after touching code-generator dep dir:"
  240. echo " ${X}" | tr '\n' ' '
  241. echo ""
  242. exit 1
  243. fi
  244. #
  245. # Test when we touch a file in a package that needs codegen.
  246. #
  247. assert_clean
  248. touch "staging/src/k8s.io/api/core/v1/types.go"
  249. touch "${STAMP}"
  250. make generated_files >/dev/null
  251. X="$(newer openapi "${STAMP}")"
  252. if [[ -z "${X}" || ${X} != "./pkg/generated/openapi/zz_generated.openapi.go" ]]; then
  253. echo "Wrong generated openapi files changed after touching src file:"
  254. echo " ${X:-(none)}" | tr '\n' ' '
  255. echo ""
  256. exit 1
  257. fi
  258. #
  259. # Test when the codegen tool itself changes: openapi
  260. #
  261. assert_clean
  262. touch vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go
  263. touch "${STAMP}"
  264. make generated_files >/dev/null
  265. X="$(older openapi "${STAMP}")"
  266. if [[ -n "${X}" ]]; then
  267. echo "Generated openapi files did not change after touching code-generator file:"
  268. echo " ${X}" | tr '\n' ' '
  269. echo ""
  270. exit 1
  271. fi
  272. assert_clean
  273. touch vendor/k8s.io/kube-openapi/cmd/openapi-gen/
  274. touch "${STAMP}"
  275. make generated_files >/dev/null
  276. X="$(older openapi "${STAMP}")"
  277. if [[ -n "${X}" ]]; then
  278. echo "Generated openapi files did not change after touching code-generator dir:"
  279. echo " ${X}" | tr '\n' ' '
  280. echo ""
  281. exit 1
  282. fi
  283. assert_clean
  284. touch vendor/k8s.io/kube-openapi/pkg/generators/openapi.go
  285. touch "${STAMP}"
  286. make generated_files >/dev/null
  287. X="$(older openapi "${STAMP}")"
  288. if [[ -n "${X}" ]]; then
  289. echo "Generated openapi files did not change after touching code-generator dep file:"
  290. echo " ${X}" | tr '\n' ' '
  291. echo ""
  292. exit 1
  293. fi
  294. assert_clean
  295. touch vendor/k8s.io/kube-openapi/pkg/generators
  296. touch "${STAMP}"
  297. make generated_files >/dev/null
  298. X="$(older openapi "${STAMP}")"
  299. if [[ -n "${X}" ]]; then
  300. echo "Generated openapi files did not change after touching code-generator dep dir:"
  301. echo " ${X}" | tr '\n' ' '
  302. echo ""
  303. exit 1
  304. fi