From 82c7a7aacac95e17ad43f9013b1ad8f2b20e1d58 Mon Sep 17 00:00:00 2001 From: Hari Sekhon Date: Tue, 1 Oct 2019 17:21:36 +0100 Subject: [PATCH] added check_json.sh --- check_json.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 check_json.sh diff --git a/check_json.sh b/check_json.sh new file mode 100755 index 00000000..7dc608b0 --- /dev/null +++ b/check_json.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# vim:ts=4:sts=4:sw=4:et +# +# Author: Hari Sekhon +# Date: 2019-10-01 17:18:03 +0100 (Tue, 01 Oct 2019) +# +# https://github.com/harisekhon/bash-tools +# +# License: see accompanying Hari Sekhon LICENSE file +# +# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help improve or steer this or other code I publish +# +# http://www.linkedin.com/in/harisekhon +# + +set -euo pipefail +[ -n "${DEBUG:-}" ] && set -x +srcdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# shellcheck disable=SC1090 +. "$srcdir/lib/utils.sh" + +filelist="$(find "${1:-.}" -type f -name '*.json' | sort)" + +if [ -z "$filelist" ]; then + return 0 &>/dev/null || + exit 0 +fi + +section "JSON Syntax Checks" + +start_time="$(start_timer)" + +if [ -n "${NOSYNTAXCHECK:-}" ]; then + echo "\$NOSYNTAXCHECK environment variable set, skipping JSON syntax checks" + echo +elif [ -n "${QUICK:-}" ]; then + echo "\$QUICK environment variable set, skipping JSON syntax checks" + echo +else + if ! command -v jsonlint &>/dev/null; then + echo "jsonlint not found in \$PATH, not running JSON syntax checks" + return 0 &>/dev/null || exit 0 + fi + max_len=0 + for x in $filelist; do + if [ ${#x} -gt $max_len ]; then + max_len=${#x} + fi + done + # to account for the semi colon + ((max_len + 1)) + for x in $filelist; do + isExcluded "$x" && continue + printf "%-${max_len}s " "$x:" + set +eo pipefail + output="$(jsonlint "$x")" + # shellcheck disable=SC2181 + if [ $? -eq 0 ]; then + echo "OK" + else + echo "FAILED" + if [ -z "${QUIET:-}" ]; then + echo + echo "$output" + echo + fi + if [ -z "${NOEXIT:-}" ]; then + return 1 &>/dev/null || exit 1 + fi + fi + set -eo pipefail + done + time_taken "$start_time" + section2 "All JSON files passed syntax check" +fi +echo