-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpre-commit
executable file
·148 lines (138 loc) · 4.21 KB
/
pre-commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
# pre-commit git hook to check the validity of a puppet manifest
#
# Prerequisites:
# gem install puppet-lint puppet
#
# Install:
# /path/to/repo/.git/hooks/pre-comit
#
# Make sure puppet-lint is already installed and in your path:
# gem install puppet-lint
#
# Make sure metadata-json-lint is also installed and in your path:
# gem install metadata-json-lint
#
# Authors:
#
# Jerald Sheets -- Based on the work of
# Ronny Roethof &
# Mattias Geniar <[email protected]>
# Setting up Colors to make the output more Dynamic
# Reset
Color_Off='\033[0m' # Text Reset
# Regular Colors
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White
# Bold High Intensity
BBlack='\033[1;90m' # Black
RRed='\033[1;91m' # Red
GGreen='\033[1;92m' # Green
YYellow='\033[1;93m' # Yellow
IBlue='\033[1;94m' # Blue
PPurple='\033[1;95m' # Purple
CCyan='\033[1;96m' # Cyan
WWhite='\033[1;97m' # White
printf "${GGreen}### Checking puppet syntax, for science! ###${Color_Off}\n"
for FILE in `git diff --name-only --cached | grep -E '\.(pp)'`
do
# Only check new/modified Files that end in *.pp extension
if [[ -f ${FILE} && ${FILE} == *.pp ]]
then
puppet-lint \
--no-80chars-check \
--no-autoloader_layout-check \
--no-nested_classes_or_defines-check \
--with-filename ${FILE}
# Set us up to bail if we receive any syntax errors
if [[ $? -ne 0 ]]
then
syntax_is_bad=1
else
printf "${Yellow}${FILE} looks good!${Color_Off}\n"
fi
fi
done
echo ""
printf "${GGreen}### Checking if puppet manifests are valid ###${Color_Off}\n"
# validating the whole manifest takes too long. uncomment this
# if you want to test the whole shebang.
# for FILE in `find . -name "*.pp"`
# for FILE in `git diff --name-only --cached | grep -E '\.(pp|erb)'`
for FILE in `git diff --name-only --cached | grep -E '\.(pp)'`
do
if [[ -f ${FILE} && ${FILE} == *.pp ]]
then
puppet parser validate ${FILE}
if [[ $? -ne 0 ]]
then
printf "${RRed}ERROR: puppet parser failed at: ${FILE}${Color_Off}\n"
syntax_is_bad=1
else
printf "${GGreen}OK:${Color_Off} ${FILE} looks valid!!\n"
fi
fi
done
echo ""
printf "${GGreen}### Checking if ruby template syntax is valid ###${Color_Off}\n"
for FILE in `git diff --name-only --cached | grep -E '\.(erb)'`
do
if [[ -f ${FILE} ]]
then
erb -P -x -T '-' ${FILE} | ruby -c
if [[ $? -ne 0 ]]
then
printf "${RRed}ERROR:i${Color_Off} ruby template parser failed at: ${FILE}\n"
syntax_is_bad=1
else
printf "${Ggreen}OK:${Color_Off} ${FILE} looks like a valid ruby template.\n"
fi
fi
done
echo ""
printf "${GGreen}### Checking metadata.json syntax and style. ###${Color_Off}\n"
for FILE in `git diff --name-only --cached |grep -E 'metadata.json'`
do
if [[ -f ${FILE} ]]
then
metadata-json-lint ${FILE}
# Set us up to bail if we receive any syntax errors
if [[ $? -ne 0 ]]
then
syntax_is_bad=1
else
printf "${Yellow}${FILE} looks good!${Color_Off}\n"
fi
fi
done
echo ""
printf "${GGreen}### Checking yaml for validity and weirdnesses. ###${Color_Off}\n"
for FILE in `git diff --name-only --cached | grep -E '\.(yaml)'`
do
if [[ -f ${FILE} ]]
then
yamllint ${FILE}
# Set us up to bail if we receive any syntax errors
if [[ $? -ne 0 ]]
then
syntax_is_bad=1
else
printf "${Yellow}${FILE} looks good!${Color_Off}\n"
fi
fi
done
echo ""
if [[ $syntax_is_bad -eq 1 ]]
then
printf "${RRed}FATAL: ${Red}Syntax is bad. See above errors${Color_Off}\n"
printf "${Red}Bailing${Color_Off}\n"
exit 1
else
printf "${GGreen}Everything looks good.${Color_Off}\n"
fi