Jelajahi Sumber

[CI] Run shellcheck and shfmt (#2454)

* [CI] Run shellcheck and shfmt

Cf. https://github.com/FreshRSS/FreshRSS/pull/2436#discussion_r305640019

* rename

* no need for disable anymore

* also remove leftover indentation flags even if it makes no difference to syntax checking

* define colors and reset before exit for local use
Frans de Jonge 6 tahun lalu
induk
melakukan
ad92518fe4

+ 1 - 0
.travis.yml

@@ -16,6 +16,7 @@ script:
   - phpenv rehash
   - find . -not -path "./lib/JSON.php" -name \*.php -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null 2>php-l-results
   - if [ -s php-l-results ]; then cat php-l-results; exit 1; fi
+  - bash tests/shellchecks.sh
   - |
     if [[ $VALIDATE_STANDARD == yes ]]; then
       COMPOSER_BIN=$(composer global config --absolute bin-dir)

+ 7 - 4
Docker/entrypoint.sh

@@ -1,15 +1,18 @@
 #!/bin/sh
 
-php -f ./cli/prepare.php > /dev/null
+php -f ./cli/prepare.php >/dev/null
 
 chown -R :www-data .
 chmod -R g+r . && chmod -R g+w ./data/
 
-find /etc/php*/ -name php.ini -exec sed -r -i "\#^;?date.timezone#s#^.*#date.timezone = $TZ#" {} \;
+find /etc/php*/ -name php.ini -exec sed -r -i "\\#^;?date.timezone#s#^.*#date.timezone = $TZ#" {} \;
 
 if [ -n "$CRON_MIN" ]; then
-	(echo "export TZ=$TZ" ; echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR") > /var/www/FreshRSS/Docker/env.txt
-	crontab -l | sed -r "\#FreshRSS#s#^[^ ]+ #$CRON_MIN #" | crontab -
+	(
+		echo "export TZ=$TZ"
+		echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR"
+	) >/var/www/FreshRSS/Docker/env.txt
+	crontab -l | sed -r "\\#FreshRSS#s#^[^ ]+ #$CRON_MIN #" | crontab -
 fi
 
 exec "$@"

+ 2 - 3
Docker/hooks/build

@@ -1,11 +1,10 @@
 #!/bin/bash
 
 cd ..
-FRESHRSS_VERSION=`grep "'FRESHRSS_VERSION'" constants.php | cut -d "'" -f4`
+FRESHRSS_VERSION=$(grep "'FRESHRSS_VERSION'" constants.php | cut -d "'" -f4)
 echo "$FRESHRSS_VERSION"
 
-if [[ "$DOCKERFILE_PATH" == *-ARM ]]
-then
+if [[ $DOCKERFILE_PATH == *-ARM ]]; then
 	#TODO: Add --squash --platform arm options when Docker Hub deamon supports them
 	docker build \
 		--build-arg FRESHRSS_VERSION="$FRESHRSS_VERSION" \

+ 1 - 2
Docker/hooks/pre_build

@@ -1,7 +1,6 @@
 #!/bin/bash
 
-if [[ "$DOCKERFILE_PATH" == *-ARM ]]
-then
+if [[ $DOCKERFILE_PATH == *-ARM ]]; then
 	# https://github.com/balena-io/qemu
 	# Download a local copy of QEMU on Docker Hub build machine
 	curl -LSs 'https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz' | tar -xzv --strip-components=1 --wildcards '*/qemu-*'

+ 1 - 0
p/themes/Ansum/sass.sh

@@ -1 +1,2 @@
+#!/bin/sh
 sass --watch ansum.scss:ansum.css

+ 1 - 0
p/themes/Mapco/sass.sh

@@ -1 +1,2 @@
+#!/bin/sh
 sass --watch mapco.scss:mapco.css

+ 29 - 0
tests/shellchecks.sh

@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# Based on https://github.com/koreader/koreader/blob/master/.ci/helper_shellchecks.sh
+
+ANSI_RED="\\033[31;1m"
+ANSI_GREEN="\\033[32;1m"
+ANSI_RESET="\\033[0m"
+
+mapfile -t shellscript_locations < <({ git grep -lE '^#!(/usr)?/bin/(env )?(bash|sh)' && git ls-files ./*.sh; } | sort | uniq)
+
+SHELLSCRIPT_ERROR=0
+
+for shellscript in "${shellscript_locations[@]}"; do
+	echo -e "${ANSI_GREEN}Running shellcheck on ${shellscript}"
+	shellcheck "${shellscript}" || SHELLSCRIPT_ERROR=1
+	echo -e "${ANSI_GREEN}Running shfmt on ${shellscript}"
+	if ! shfmt "${shellscript}" >/dev/null 2>&1; then
+		echo -e "${ANSI_RED}Warning: ${shellscript} contains the following problem:"
+		shfmt "${shellscript}" || SHELLSCRIPT_ERROR=1
+		continue
+	fi
+	if [ "$(cat "${shellscript}")" != "$(shfmt "${shellscript}")" ]; then
+		echo -e "${ANSI_RED}Warning: ${shellscript} does not abide by coding style, diff for expected style:"
+		shfmt "${shellscript}" | diff "${shellscript}" - || SHELLSCRIPT_ERROR=1
+	fi
+done
+
+echo -ne "${ANSI_RESET}"
+
+exit "${SHELLSCRIPT_ERROR}"