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