@@ -4,11 +4,50 @@ cp /action/problem-matcher.json /github/workflow/problem-matcher.json
4
4
5
5
git clone --depth 1 -b 2.3.0 https://github.com/WordPress/WordPress-Coding-Standards.git ~ /wpcs
6
6
7
+ INPUT_ONLY_CHANGED_FILES=${INPUT_ONLY_CHANGED_FILES:- ${INPUT_ONLY_CHANGED_LINES:- " false" } }
8
+
9
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
10
+ if [ " ${GITHUB_EVENT_NAME} " = " pull_request" ]; then
11
+ COMPARE_FROM=origin/${GITHUB_BASE_REF}
12
+ COMPARE_TO=origin/${GITHUB_HEAD_REF}
13
+
14
+ COMPARE_FROM_REF=$( git merge-base " ${COMPARE_FROM} " " ${COMPARE_TO} " )
15
+ COMPARE_TO_REF=${COMPARE_TO}
16
+ else
17
+ COMPARE_FROM=" HEAD^"
18
+ COMPARE_TO=" HEAD"
19
+ COMPARE_FROM_REF=" HEAD^"
20
+ COMPARE_TO_REF=" HEAD"
21
+ fi
22
+ echo " Will only check changed files (${COMPARE_FROM_REF} -> ${COMPARE_TO_REF} )"
23
+ set +e
24
+ CHANGED_FILES=$( git diff --name-only --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " | xargs -rt ls -1d 2> /dev/null)
25
+ set -e
26
+ echo " Will check files:"
27
+ echo " ${CHANGED_FILES} "
28
+ else
29
+ echo " Will check all files"
30
+ fi
31
+
7
32
if [ " ${INPUT_STANDARD} " = " WordPress-VIP-Go" ] || [ " ${INPUT_STANDARD} " = " WordPressVIPMinimum" ]; then
8
33
echo " Setting up VIPCS"
9
34
git clone --depth 1 -b 2.3.3 https://github.com/Automattic/VIP-Coding-Standards.git ${HOME} /vipcs
10
35
git clone https://github.com/sirbrillig/phpcs-variable-analysis ${HOME} /variable-analysis
11
- ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /vipcs,${HOME} /variable-analysis"
36
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
37
+ if [ " ${INPUT_ONLY_CHANGED_LINES} " = " true" ]; then
38
+ step1=$( git diff -U0 --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " )
39
+ step2=$( echo " ${step1} " | diff-lines)
40
+ step3=$( echo " ${step2} " | grep -ve ' :-' )
41
+ step4=$( echo " ${step3} " | sed ' s/:+.*//' ) # On some platforms, sed needs to have + escaped. This isn't the case for Alpine sed.
42
+ set +e
43
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /vipcs,${HOME} /variable-analysis" | filter-by-changed-lines " ${step4} "
44
+ set -e
45
+ else
46
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /vipcs,${HOME} /variable-analysis"
47
+ fi
48
+ else
49
+ ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /vipcs,${HOME} /variable-analysis"
50
+ fi
12
51
elif [ " ${INPUT_STANDARD} " = " 10up-Default" ]; then
13
52
echo " Setting up 10up-Default"
14
53
git clone https://github.com/10up/phpcs-composer ${HOME} /10up
@@ -18,13 +57,55 @@ elif [ "${INPUT_STANDARD}" = "10up-Default" ]; then
18
57
git clone https://github.com/PHPCSStandards/PHPCSUtils ${HOME} /phpcsutils
19
58
git clone https://github.com/Automattic/VIP-Coding-Standards ${HOME} /vipcs
20
59
git clone https://github.com/sirbrillig/phpcs-variable-analysis ${HOME} /variable-analysis
21
- ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /10up/10up-Default,${HOME} /phpcompatwp/PHPCompatibilityWP,${HOME} /phpcompat/PHPCompatibility,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieSodiumCompat,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieRandomCompat,${HOME} /phpcsutils/PHPCSUtils,${HOME} /vipcs,${HOME} /variable-analysis"
60
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
61
+ if [ " ${INPUT_ONLY_CHANGED_LINES} " = " true" ]; then
62
+ step1=$( git diff -U0 --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " )
63
+ step2=$( echo " ${step1} " | diff-lines)
64
+ step3=$( echo " ${step2} " | grep -ve ' :-' )
65
+ step4=$( echo " ${step3} " | sed ' s/:+.*//' ) # On some platforms, sed needs to have + escaped. This isn't the case for Alpine sed.
66
+ set +e
67
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /10up/10up-Default,${HOME} /phpcompatwp/PHPCompatibilityWP,${HOME} /phpcompat/PHPCompatibility,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieSodiumCompat,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieRandomCompat,${HOME} /phpcsutils/PHPCSUtils,${HOME} /vipcs,${HOME} /variable-analysis" | filter-by-changed-lines " ${step4} "
68
+ set -e
69
+ else
70
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /10up/10up-Default,${HOME} /phpcompatwp/PHPCompatibilityWP,${HOME} /phpcompat/PHPCompatibility,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieSodiumCompat,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieRandomCompat,${HOME} /phpcsutils/PHPCSUtils,${HOME} /vipcs,${HOME} /variable-analysis"
71
+ fi
72
+ else
73
+ ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /10up/10up-Default,${HOME} /phpcompatwp/PHPCompatibilityWP,${HOME} /phpcompat/PHPCompatibility,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieSodiumCompat,${HOME} /phpcompat-paragonie/PHPCompatibilityParagonieRandomCompat,${HOME} /phpcsutils/PHPCSUtils,${HOME} /vipcs,${HOME} /variable-analysis"
74
+ fi
22
75
elif [ -z " ${INPUT_STANDARD_REPO} " ] || [ " ${INPUT_STANDARD_REPO} " = " false" ]; then
23
- ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths ~ /wpcs
76
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
77
+ if [ " ${INPUT_ONLY_CHANGED_LINES} " = " true" ]; then
78
+ step1=$( git diff -U0 --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " )
79
+ step2=$( echo " ${step1} " | diff-lines)
80
+ step3=$( echo " ${step2} " | grep -ve ' :-' )
81
+ step4=$( echo " ${step3} " | sed ' s/:+.*//' ) # On some platforms, sed needs to have + escaped. This isn't the case for Alpine sed.
82
+ set +e
83
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths ~ /wpcs | filter-by-changed-lines " ${step4} "
84
+ set -e
85
+ else
86
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths ~ /wpcs
87
+ fi
88
+ else
89
+ ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths ~ /wpcs
90
+ fi
24
91
else
25
92
echo " Standard repository: ${INPUT_STANDARD_REPO} "
26
93
git clone -b ${INPUT_REPO_BRANCH} ${INPUT_STANDARD_REPO} ${HOME} /cs
27
- ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /cs"
94
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
95
+ if [ " ${INPUT_ONLY_CHANGED_LINES} " = " true" ]; then
96
+ step1=$( git diff -U0 --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " )
97
+ step2=$( echo " ${step1} " | diff-lines)
98
+ step3=$( echo " ${step2} " | grep -ve ' :-' )
99
+ step4=$( echo " ${step3} " | sed ' s/:+.*//' ) # On some platforms, sed needs to have + escaped. This isn't the case for Alpine sed.
100
+ set +e
101
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /cs" | filter-by-changed-lines " ${step4} "
102
+ set -e
103
+ else
104
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /cs"
105
+ fi
106
+ else
107
+ ${INPUT_PHPCS_BIN_PATH} --config-set installed_paths " ${HOME} /wpcs,${HOME} /cs"
108
+ fi
28
109
fi
29
110
30
111
if [ -z " ${INPUT_EXCLUDES} " ]; then
53
134
fi
54
135
55
136
if [ " ${HAS_CONFIG} " = true ] && [ " ${INPUT_USE_LOCAL_CONFIG} " = " true" ] ; then
56
- ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle ${INPUT_EXTRA_ARGS}
137
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
138
+ if [ " ${INPUT_ONLY_CHANGED_LINES} " = " true" ]; then
139
+ step1=$( git diff -U0 --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " )
140
+ step2=$( echo " ${step1} " | diff-lines)
141
+ step3=$( echo " ${step2} " | grep -ve ' :-' )
142
+ step4=$( echo " ${step3} " | sed ' s/:+.*//' ) # On some platforms, sed needs to have + escaped. This isn't the case for Alpine sed.
143
+ set +e
144
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle ${INPUT_EXTRA_ARGS} | filter-by-changed-lines " ${step4} "
145
+ set -e
146
+ else
147
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle ${INPUT_EXTRA_ARGS}
148
+ fi
149
+ else
150
+ ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle ${INPUT_EXTRA_ARGS}
151
+ fi
57
152
else
58
- ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle --standard=${INPUT_STANDARD} --ignore=${EXCLUDES} --extensions=php ${INPUT_PATHS} ${INPUT_EXTRA_ARGS}
153
+ if [ " ${INPUT_ONLY_CHANGED_FILES} " = " true" ]; then
154
+ if [ " ${INPUT_ONLY_CHANGED_LINES} " = " true" ]; then
155
+ step1=$( git diff -U0 --diff-filter=d " ${COMPARE_FROM_REF} " " ${COMPARE_TO_REF} " )
156
+ step2=$( echo " ${step1} " | diff-lines)
157
+ step3=$( echo " ${step2} " | grep -ve ' :-' )
158
+ step4=$( echo " ${step3} " | sed ' s/:+.*//' ) # On some platforms, sed needs to have + escaped. This isn't the case for Alpine sed.
159
+ set +e
160
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle --standard=${INPUT_STANDARD} --ignore=${EXCLUDES} --extensions=php ${INPUT_PATHS} ${INPUT_EXTRA_ARGS} | filter-by-changed-lines " ${step4} "
161
+ set -e
162
+ else
163
+ echo " ${CHANGED_FILES} " | xargs -rt ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle --standard=${INPUT_STANDARD} --ignore=${EXCLUDES} --extensions=php ${INPUT_PATHS} ${INPUT_EXTRA_ARGS}
164
+ fi
165
+ else
166
+ ${INPUT_PHPCS_BIN_PATH} ${WARNING_FLAG} --report=checkstyle --standard=${INPUT_STANDARD} --ignore=${EXCLUDES} --extensions=php ${INPUT_PATHS} ${INPUT_EXTRA_ARGS}
167
+ fi
59
168
fi
60
169
61
170
status=$?
0 commit comments