1+ #! /bin/bash
2+
3+ BASE_REF=${1:- main}
4+ GO_VER=$( sed -En ' s/^go (.*)$/\1/p' " go.mod" )
5+ OLDIFS=" ${IFS} "
6+ IFS=' .' MAX_VER=(${GO_VER} )
7+ IFS=" ${OLDIFS} "
8+
9+ if [ ${# MAX_VER[*]} -ne 3 -a ${# MAX_VER[*]} -ne 2 ]; then
10+ echo " Invalid go version: ${GO_VER} "
11+ exit 1
12+ fi
13+
14+ GO_MAJOR=${MAX_VER[0]}
15+ GO_MINOR=${MAX_VER[1]}
16+ GO_PATCH=${MAX_VER[2]}
17+
18+ RETCODE=0
19+
20+ check_version () {
21+ local whole=$1
22+ local file=$2
23+ OLDIFS=" ${IFS} "
24+ IFS=' .' ver=(${whole} )
25+ IFS=" ${OLDIFS} "
26+
27+ if [ ${ver[0]} -gt ${GO_MAJOR} ]; then
28+ echo " ${file} : ${whole} : Bad golang version (expected ${GO_VER} or less)"
29+ return 1
30+ fi
31+ if [ ${ver[1]} -gt ${GO_MINOR} ]; then
32+ echo " ${file} : ${whole} : Bad golang version (expected ${GO_VER} or less)"
33+ return 1
34+ fi
35+
36+ if [ ${# ver[*]} -eq 2 ] ; then
37+ return 0
38+ fi
39+ if [ ${# ver[*]} -ne 3 ] ; then
40+ echo " ${file} : ${whole} : Badly formatted golang version"
41+ return 1
42+ fi
43+
44+ if [ ${ver[1]} -eq ${GO_MINOR} -a ${ver[2]} -gt ${GO_PATCH} ]; then
45+ echo " ${file} : ${whole} : Bad golang version (expected ${GO_VER} or less)"
46+ return 1
47+ fi
48+ return 0
49+ }
50+
51+ echo " Found golang version: ${GO_VER} "
52+
53+ for f in $( find . -name " *.mod" ) ; do
54+ v=$( sed -En ' s/^go (.*)$/\1/p' ${f} )
55+ if [ -z ${v} ]; then
56+ echo " ${f} : Skipping, no version found"
57+ continue
58+ fi
59+ if ! check_version ${v} ${f} ; then
60+ RETCODE=1
61+ fi
62+ old=$( git grep -ohP ' ^go .*$' " ${BASE_REF} " -- " ${f} " )
63+ old=${old# go }
64+ new=$( git grep -ohP ' ^go .*$' " ${f} " )
65+ new=${new# go }
66+ # If ${old} is empty, it means this is a new .mod file
67+ if [ -z " ${old} " ]; then
68+ continue
69+ fi
70+ # Check if patch version remains 0: X.x.0 <-> X.x
71+ if [ " ${new} .0" == " ${old} " -o " ${new} " == " ${old} .0" ]; then
72+ continue
73+ fi
74+ if [ " ${new} " != " ${old} " ]; then
75+ echo " ${f} : ${v} : Updated golang version from ${old} "
76+ RETCODE=1
77+ fi
78+ done
79+
80+ exit ${RETCODE}
0 commit comments