Skip to content

Commit 7da91a5

Browse files
committed
check-build-and-verify.sh: skip some checks when related files weren't modified.
Now the checks will be run only when the files with the following patterns were modified: - sortpom: pom.xml - enforcer: pom.xml - checkstyle: pom.xml, *.java, *.properties, checkstyle.xml, checkstyle-suppressions.xml - findbugs: pom.xml, *.java, findbugs-filter.xml - pmd: pom.xml, *.java, pmd.xml - unit tests: pom.xml, *.java, *.groovy - license: pom.xml, *.java, *.groovy, license_header.txt - codenarc: pom.xml, *.groovy - jasmine: pom.xml, *.js - rflint: .travis.yml, *.robot - bootlint: .travis.yml *.html - html5validator: .travis.yml *.html Integration tests are executed always. Fix #423
1 parent a502b7e commit 7da91a5

File tree

2 files changed

+139
-48
lines changed

2 files changed

+139
-48
lines changed

src/main/scripts/ci/check-build-and-verify.sh

+135-48
Original file line numberDiff line numberDiff line change
@@ -34,53 +34,140 @@ DANGER_STATUS=
3434

3535
if [ "$RUN_ONLY_INTEGRATION_TESTS" = 'no' ]; then
3636

37-
mvn --batch-mode checkstyle:check -Dcheckstyle.violationSeverity=warning \
38-
>cs.log 2>&1 || CS_STATUS=fail
37+
# TRAVIS_COMMIT_RANGE: The range of commits that were included in the push or
38+
# pull request. (Note that this is empty for builds triggered by the initial
39+
# commit of a new branch.)
40+
if [ -n "${TRAVIS_COMMIT_RANGE:-}" ]; then
41+
echo
42+
echo "INFO: Range of the commits to be checked: $TRAVIS_COMMIT_RANGE"
43+
echo 'INFO: List of the files modified by this commits range:'
44+
git --no-pager diff --name-only $TRAVIS_COMMIT_RANGE -- | sed 's|^| |' || :
45+
46+
MODIFIED_FILES="$(git --no-pager diff --name-only $TRAVIS_COMMIT_RANGE -- 2>/dev/null || :)"
47+
48+
if [ -n "$MODIFIED_FILES" ]; then
49+
AFFECTS_POM_XML="$(echo "$MODIFIED_FILES" | fgrep -xq 'pom.xml' || echo 'no')"
50+
AFFECTS_TRAVIS_CFG="$(echo "$MODIFIED_FILES" | fgrep -xq '.travis.yml' || echo 'no')"
51+
AFFECTS_CS_CFG="$(echo "$MODIFIED_FILES" | egrep -q '(checkstyle\.xml|checkstyle-suppressions\.xml)$' || echo 'no')"
52+
AFFECTS_FB_CFG="$(echo "$MODIFIED_FILES" | grep -q 'findbugs-filter\.xml$' || echo 'no')"
53+
AFFECTS_PMD_XML="$(echo "$MODIFIED_FILES" | grep -q 'pmd\.xml$' || echo 'no')"
54+
AFFECTS_JS_FILES="$(echo "$MODIFIED_FILES" | grep -q '\.js$' || echo 'no')"
55+
AFFECTS_HTML_FILES="$(echo "$MODIFIED_FILES" | grep -q '\.html$' || echo 'no')"
56+
AFFECTS_JAVA_FILES="$(echo "$MODIFIED_FILES" | grep -q '\.java$' || echo 'no')"
57+
AFFECTS_ROBOT_FILES="$(echo "$MODIFIED_FILES" | grep -q '\.robot$' || echo 'no')"
58+
AFFECTS_GROOVY_FILES="$(echo "$MODIFIED_FILES" | grep -q '\.groovy$' || echo 'no')"
59+
AFFECTS_PROPERTIES="$(echo "$MODIFIED_FILES" | grep -q '\.properties$' || echo 'no')"
60+
AFFECTS_LICENSE_HEADER="$(echo "$MODIFIED_FILES" | grep -q 'license_header\.txt$' || echo 'no')"
61+
62+
if [ "$AFFECTS_POM_XML" = 'no' ]; then
63+
POM_STATUS=skip
64+
ENFORCER_STATUS=skip
65+
66+
if [ "$AFFECTS_JAVA_FILES" = 'no' ]; then
67+
[ "$AFFECTS_FB_CFG" != 'no' ] || FINDBUGS_STATUS=skip
68+
[ "$AFFECTS_CS_CFG" != 'no' -o "$AFFECTS_PROPERTIES" != 'no' ] || CS_STATUS=skip
69+
[ "$AFFECTS_PMD_XML" != 'no' ] || PMD_STATUS=skip
70+
71+
if [ "$AFFECTS_GROOVY_FILES" = 'no' ]; then
72+
TEST_STATUS=skip
73+
74+
[ "$AFFECTS_LICENSE_HEADER" != 'no' ] || LICENSE_STATUS=skip
75+
fi
76+
fi
77+
78+
[ "$AFFECTS_GROOVY_FILES" != 'no' ] || CODENARC_STATUS=skip
79+
[ "$AFFECTS_JS_FILES" != 'no' ] || JASMINE_STATUS=skip
80+
fi
81+
82+
if [ "$AFFECTS_TRAVIS_CFG" = 'no' ]; then
83+
if [ "$AFFECTS_HTML_FILES" = 'no' ]; then
84+
BOOTLINT_STATUS=skip
85+
HTML_STATUS=skip
86+
fi
87+
[ "$AFFECTS_ROBOT_FILES" != 'no' ] || RFLINT_STATUS=skip
88+
fi
89+
echo 'INFO: Some checks could be skipped'
90+
else
91+
echo "INFO: Couldn't determine list of modified files."
92+
echo 'INFO: All checks will be performed'
93+
fi
94+
else
95+
echo
96+
echo "INFO: Couldn't determine a range of the commits: \$TRAVIS_COMMIT_RANGE is empty."
97+
echo 'INFO: All checks will be performed'
98+
fi
3999

40-
mvn --batch-mode pmd:check \
41-
>pmd.log 2>&1 || PMD_STATUS=fail
100+
if [ "$CS_STATUS" != 'skip' ]; then
101+
mvn --batch-mode checkstyle:check -Dcheckstyle.violationSeverity=warning \
102+
>cs.log 2>&1 || CS_STATUS=fail
103+
fi
42104

43-
mvn --batch-mode codenarc:codenarc -Dcodenarc.maxPriority1Violations=0 -Dcodenarc.maxPriority2Violations=0 -Dcodenarc.maxPriority3Violations=0 \
44-
>codenarc.log 2>&1 || CODENARC_STATUS=fail
105+
if [ "$PMD_STATUS" != 'skip' ]; then
106+
mvn --batch-mode pmd:check \
107+
>pmd.log 2>&1 || PMD_STATUS=fail
108+
fi
45109

46-
mvn --batch-mode license:check \
47-
>license.log 2>&1 || LICENSE_STATUS=fail
110+
if [ "$CODENARC_STATUS" != 'skip' ]; then
111+
mvn --batch-mode codenarc:codenarc -Dcodenarc.maxPriority1Violations=0 -Dcodenarc.maxPriority2Violations=0 -Dcodenarc.maxPriority3Violations=0 \
112+
>codenarc.log 2>&1 || CODENARC_STATUS=fail
113+
fi
48114

49-
mvn --batch-mode sortpom:verify -Dsort.verifyFail=stop \
50-
>pom.log || POM_STATUS=fail
115+
if [ "$LICENSE_STATUS" != 'skip' ]; then
116+
mvn --batch-mode license:check \
117+
>license.log 2>&1 || LICENSE_STATUS=fail
118+
fi
51119

52-
find src -type f -name '*.html' | xargs bootlint \
53-
>bootlint.log 2>&1 || BOOTLINT_STATUS=fail
120+
if [ "$POM_STATUS" != 'skip' ]; then
121+
mvn --batch-mode sortpom:verify -Dsort.verifyFail=stop \
122+
>pom.log || POM_STATUS=fail
123+
fi
54124

55-
rflint --error=all --ignore TooFewKeywordSteps --ignore TooManyTestSteps --configure LineTooLong:130 src/test/robotframework \
56-
>rflint.log 2>&1 || RFLINT_STATUS=fail
125+
if [ "$BOOTLINT_STATUS" != 'skip' ]; then
126+
find src -type f -name '*.html' | xargs bootlint \
127+
>bootlint.log 2>&1 || BOOTLINT_STATUS=fail
128+
fi
57129

58-
mvn --batch-mode jasmine:test \
59-
>jasmine.log 2>&1 || JASMINE_STATUS=fail
130+
if [ "$RFLINT_STATUS" != 'skip' ]; then
131+
rflint --error=all --ignore TooFewKeywordSteps --ignore TooManyTestSteps --configure LineTooLong:130 src/test/robotframework \
132+
>rflint.log 2>&1 || RFLINT_STATUS=fail
133+
fi
60134

61-
# FIXME: add check for src/main/config/nginx/503.*html
62-
# TODO: remove ignoring of error about alt attribute after resolving #314
63-
# TODO: remove ignoring of error about document language when it will be resolved in upstream
64-
html5validator \
65-
--root src/main/webapp/WEB-INF/views \
66-
--ignore-re 'Attribute “(th|sec|togglz|xmlns):[a-z]+” not allowed' \
67-
'Attribute “(th|sec|togglz):[a-z]+” is not serializable' \
68-
'Attribute with the local name “xmlns:[a-z]+” is not serializable' \
69-
'An "img" element must have an "alt" attribute' \
70-
'The first child "option" element of a "select" element with a "required" attribute' \
71-
'This document appears to be written in (Danish|Lithuanian)' \
72-
--show-warnings \
73-
>validator.log 2>&1 || HTML_STATUS=fail
135+
if [ "$JASMINE_STATUS" != 'skip' ]; then
136+
mvn --batch-mode jasmine:test \
137+
>jasmine.log 2>&1 || JASMINE_STATUS=fail
138+
fi
74139

75-
mvn --batch-mode enforcer:enforce \
76-
>enforcer.log 2>&1 || ENFORCER_STATUS=fail
140+
if [ "$HTML_STATUS" != 'skip' ]; then
141+
# FIXME: add check for src/main/config/nginx/503.*html
142+
# TODO: remove ignoring of error about alt attribute after resolving #314
143+
# TODO: remove ignoring of error about document language when it will be resolved in upstream
144+
html5validator \
145+
--root src/main/webapp/WEB-INF/views \
146+
--ignore-re 'Attribute “(th|sec|togglz|xmlns):[a-z]+” not allowed' \
147+
'Attribute “(th|sec|togglz):[a-z]+” is not serializable' \
148+
'Attribute with the local name “xmlns:[a-z]+” is not serializable' \
149+
'An "img" element must have an "alt" attribute' \
150+
'The first child "option" element of a "select" element with a "required" attribute' \
151+
'This document appears to be written in (Danish|Lithuanian)' \
152+
--show-warnings \
153+
>validator.log 2>&1 || HTML_STATUS=fail
154+
fi
77155

78-
mvn --batch-mode test -Denforcer.skip=true -Dmaven.resources.skip=true -DskipMinify=true -DdisableXmlReport=false \
79-
>test.log 2>&1 || TEST_STATUS=fail
156+
if [ "$ENFORCER_STATUS" != 'skip' ]; then
157+
mvn --batch-mode enforcer:enforce \
158+
>enforcer.log 2>&1 || ENFORCER_STATUS=fail
159+
fi
80160

81-
# run after tests for getting compiled sources
82-
mvn --batch-mode findbugs:check \
83-
>findbugs.log 2>&1 || FINDBUGS_STATUS=fail
161+
if [ "$TEST_STATUS" != 'skip' ]; then
162+
mvn --batch-mode test -Denforcer.skip=true -Dmaven.resources.skip=true -DskipMinify=true -DdisableXmlReport=false \
163+
>test.log 2>&1 || TEST_STATUS=fail
164+
fi
165+
166+
if [ "$FINDBUGS_STATUS" != 'skip' ]; then
167+
# run after tests for getting compiled sources
168+
mvn --batch-mode findbugs:check \
169+
>findbugs.log 2>&1 || FINDBUGS_STATUS=fail
170+
fi
84171
fi
85172

86173
mvn --batch-mode verify -Denforcer.skip=true -DskipUnitTests=true \
@@ -121,18 +208,18 @@ fi
121208
echo
122209

123210
if [ "$RUN_ONLY_INTEGRATION_TESTS" = 'no' ]; then
124-
print_log cs.log 'Run CheckStyle'
125-
print_log pmd.log 'Run PMD'
126-
print_log codenarc.log 'Run CodeNarc'
127-
print_log license.log 'Check license headers'
128-
print_log pom.log 'Check sorting of pom.xml'
129-
print_log bootlint.log 'Run bootlint'
130-
print_log rflint.log 'Run robot framework lint'
131-
print_log jasmine.log 'Run JavaScript unit tests'
132-
print_log validator.log 'Run html5validator'
133-
print_log enforcer.log 'Run maven-enforcer-plugin'
211+
[ "$CS_STATUS" = 'skip' ] || print_log cs.log 'Run CheckStyle'
212+
[ "$PMD_STATUS" = 'skip' ] || print_log pmd.log 'Run PMD'
213+
[ "$CODENARC_STATUS" = 'skip' ] || print_log codenarc.log 'Run CodeNarc'
214+
[ "$LICENSE_STATUS" = 'skip' ] || print_log license.log 'Check license headers'
215+
[ "$POM_STATUS" = 'skip' ] || print_log pom.log 'Check sorting of pom.xml'
216+
[ "$BOOTLINT_STATUS" = 'skip' ] || print_log bootlint.log 'Run bootlint'
217+
[ "$RFLINT_STATUS" = 'skip' ] || print_log rflint.log 'Run robot framework lint'
218+
[ "$JASMINE_STATUS" = 'skip' ] || print_log jasmine.log 'Run JavaScript unit tests'
219+
[ "$HTML_STATUS" = 'skip' ] || print_log validator.log 'Run html5validator'
220+
[ "$ENFORCER_STATUS" = 'skip' ] || print_log enforcer.log 'Run maven-enforcer-plugin'
134221
print_log test.log 'Run unit tests'
135-
print_log findbugs.log 'Run FindBugs'
222+
[ "$FINDBUGS_STATUS" = 'skip' ] || print_log findbugs.log 'Run FindBugs'
136223
fi
137224

138225
print_log verify.log 'Run integration tests'
@@ -151,6 +238,6 @@ fi
151238

152239
rm -f cs.log pmd.log codenarc.log license.log pom.log bootlint.log rflint.log jasmine.log validator.log enforcer.log test.log findbugs.log verify-raw.log verify.log danger.log
153240

154-
if [ -n "$CS_STATUS$PMD_STATUS$CODENARC_STATUS$LICENSE_STATUS$POM_STATUS$BOOTLINT_STATUS$RFLINT_STATUS$JASMINE_STATUS$HTML_STATUS$ENFORCER_STATUS$TEST_STATUS$FINDBUGS_STATUS$VERIFY_STATUS$DANGER_STATUS" ]; then
241+
if echo "$CS_STATUS$PMD_STATUS$CODENARC_STATUS$LICENSE_STATUS$POM_STATUS$BOOTLINT_STATUS$RFLINT_STATUS$JASMINE_STATUS$HTML_STATUS$ENFORCER_STATUS$TEST_STATUS$FINDBUGS_STATUS$VERIFY_STATUS$DANGER_STATUS" | fgrep -qs 'fail'; then
155242
exit 1
156243
fi

src/main/scripts/ci/common.sh

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
print_status() {
22
# $1 is empty if check has succeeded
33
# $1 equals to 'fail' if check has failed
4+
# $1 equals to 'skip' if check has skipped
45
local result="$1"
56
local msg="$2"
67

@@ -10,6 +11,9 @@ print_status() {
1011
if [ "$result" = 'fail' ]; then
1112
status='FAIL'
1213
color=31
14+
elif [ "$result" = 'skip' ]; then
15+
status='SKIP'
16+
color=33
1317
fi
1418
printf "* %s... \033[1;%dm%s\033[0m\n" "$msg" "$color" "$status"
1519
}

0 commit comments

Comments
 (0)