ci: Import run-eslint script from gnome-shell
Since we dropped the legacy configuration, we run eslint directly instead of via a script. However gnome-shell's variant of the script also has special treatment of merge requests to only consider errors in changed lines. While we strive for zero errors, new errors can appear when we update eslint or change the configuration. Not blocking merge requests due to unrelated eslint errors is a good thing, run eslint through a modified version of the gnome-shell script. https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/90
This commit is contained in:
committed by
Florian Müllner
parent
6675d1c55d
commit
119da3291b
+2
-5
@@ -3,9 +3,6 @@ stages:
|
||||
- source_check
|
||||
- build
|
||||
|
||||
variables:
|
||||
LINT_LOG: "eslint-report.txt"
|
||||
|
||||
.only_default: &only_default
|
||||
only:
|
||||
- branches
|
||||
@@ -24,11 +21,11 @@ eslint:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/extension-ci:v1
|
||||
stage: source_check
|
||||
script:
|
||||
- eslint -o $LINT_LOG --no-color || { cat $LINT_LOG; false; }
|
||||
- ./.gitlab-ci/run-eslint.sh
|
||||
<<: *only_default
|
||||
artifacts:
|
||||
paths:
|
||||
- ${LINT_LOG}
|
||||
- reports
|
||||
when: on_failure
|
||||
|
||||
build-shell-extensions:
|
||||
|
||||
Executable
+78
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
OUTPUT_REGULAR=reports/lint-report.txt
|
||||
OUTPUT_MR=reports/lint-mr-report.txt
|
||||
|
||||
SRCDIR=extensions
|
||||
|
||||
LINE_CHANGES=changed-lines.txt
|
||||
|
||||
is_empty() {
|
||||
(! grep -q . $1)
|
||||
}
|
||||
|
||||
run_eslint() {
|
||||
# ensure output exists even if eslint doesn't report any errors
|
||||
mkdir -p $(dirname $OUTPUT_REGULAR)
|
||||
touch $OUTPUT_REGULAR
|
||||
|
||||
eslint -f unix -o $OUTPUT_REGULAR $SRCDIR
|
||||
}
|
||||
|
||||
list_commit_range_additions() {
|
||||
# Turn raw context-less git-diff into a list of
|
||||
# filename:lineno pairs of new (+) lines
|
||||
git diff -U0 "$@" -- js |
|
||||
awk '
|
||||
BEGIN { file=""; }
|
||||
/^+++ b/ { file=substr($0,7); }
|
||||
/^@@ / {
|
||||
len = split($3,a,",")
|
||||
start=a[1]
|
||||
count=(len > 1) ? a[2] : 1
|
||||
|
||||
for (line=start; line<start+count; line++)
|
||||
printf "%s/%s:%d:\n",ENVIRON["PWD"],file,line;
|
||||
}'
|
||||
}
|
||||
|
||||
copy_matched_lines() {
|
||||
local source=$1
|
||||
local matches=$2
|
||||
local target=$3
|
||||
|
||||
echo -n > $target
|
||||
for l in $(<$matches); do
|
||||
grep $l $source >> $target
|
||||
done
|
||||
}
|
||||
|
||||
# Clean up old files from previous runs
|
||||
rm -f $OUTPUT_REGULAR $OUTPUT_MR $LINE_CHANGES
|
||||
|
||||
if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
|
||||
git fetch $CI_MERGE_REQUEST_PROJECT_URL.git $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
||||
branch_point=$(git merge-base HEAD FETCH_HEAD)
|
||||
commit_range=$branch_point...$CI_COMMIT_SHA
|
||||
|
||||
list_commit_range_additions $commit_range > $LINE_CHANGES
|
||||
|
||||
# Don't bother with running lint when no JS changed
|
||||
if is_empty $LINE_CHANGES; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo Generating lint report
|
||||
run_eslint
|
||||
echo Done.
|
||||
|
||||
# Just show the report and succeed when not testing a MR
|
||||
if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
|
||||
cat $OUTPUT_REGULAR
|
||||
exit 0
|
||||
fi
|
||||
|
||||
copy_matched_lines $OUTPUT_REGULAR $LINE_CHANGES $OUTPUT_MR
|
||||
cat $OUTPUT_MR
|
||||
is_empty $OUTPUT_MR
|
||||
Reference in New Issue
Block a user