Improved the PR check script (#426)

* Improved the PR check script

* Added check to make sure that only lowercase alpha characters and
hyphens are in the tag list

* Brought back the set -eu
pull/435/head
Steven Hall 3 years ago committed by GitHub
parent f9a6b43d56
commit bcef14fb3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -36,13 +36,17 @@ check_recipe_name() {
} }
check_recipe_content() { check_recipe_content() {
awk ' errMsgs="$(awk '
BEGIN { BEGIN {
HAS_TITLE = 0; HAS_TITLE = 0;
HAS_TAGS = 0; HAS_TAGS = 0;
NUM_TAGS = 0; HAS_INVALID_TAGS = 0;
HAS_INGREDIENTS = 0; NUM_TAGS = 0;
HAS_DIRECTIONS = 0; HAS_INGREDIENTS = 0;
HAS_DIRECTIONS = 0;
HAS_CONSECUTIVE_EMPTY_LINES = 0;
CONSECUTIVE_EMPTY_LINES = 0;
} }
# First line should be the title # First line should be the title
@ -51,14 +55,23 @@ check_recipe_content() {
next; next;
} }
/^## Ingredients/ { $0 == "## Ingredients" {
HAS_INGREDIENTS = 1; HAS_INGREDIENTS = 1;
next;
} }
/^## Directions/ { $0 == "## Directions" {
HAS_DIRECTIONS = 1; HAS_DIRECTIONS = 1;
next; }
$0 == "" {
CONSECUTIVE_EMPTY_LINES++
if (CONSECUTIVE_EMPTY_LINES >= 2) {
HAS_CONSECUTIVE_EMPTY_LINES = 1;
}
}
$0 != "" {
CONSECUTIVE_EMPTY_LINES = 0;
} }
END { END {
@ -66,63 +79,75 @@ check_recipe_content() {
if ($1 == ";tags:") { if ($1 == ";tags:") {
HAS_TAGS = 1; HAS_TAGS = 1;
NUM_TAGS = NF - 1; NUM_TAGS = NF - 1;
}
FAIL = 0; # Loop through all the tags
for (i = 2; i <= NF; i++) {
# Make sure that each tag only contains lowercase letters and hyphens
if ($i !~ "^[a-z-]+$") {
HAS_INVALID_TAGS = 1;
break;
}
}
}
if (!HAS_TITLE) { if (!HAS_TITLE) {
print "Recipe does not have a properly formatted title on the first line." print "Recipe does not have a properly formatted title on the first line."
FAIL = 1;
} }
if (!HAS_TAGS) { if (!HAS_TAGS) {
print "Recipe does not have a properly formatted tags on the last line." print "Recipe does not have a properly formatted tags on the last line."
FAIL = 1; } else {
} else if (NUM_TAGS < 2) { if (HAS_INVALID_TAGS) {
print "Recipe only has " NUM_TAGS " tags. Add some more." print "Recipe has invalid tags. Tags must be separated by spaces and contain only lowercase letters or hyphens (-)";
FAIL = 1; }
} else if (NUM_TAGS > 5) {
print "Recipe has " NUM_TAGS " tags which is too many. Remove some tags." if (NUM_TAGS < 2) {
FAIL = 1; print "Recipe only has " NUM_TAGS " tags. Add some more."
} else if (NUM_TAGS > 5) {
print "Recipe has " NUM_TAGS " tags which is too many. Remove some tags."
}
} }
if (!HAS_INGREDIENTS) { if (!HAS_INGREDIENTS) {
print "Recipe does not have an ingredients list." print "Recipe does not have an ingredients list."
FAIL = 1;
} }
if (!HAS_DIRECTIONS) { if (!HAS_DIRECTIONS) {
print "Recipe does not have a directions section." print "Recipe does not have a directions section."
FAIL = 1;
} }
if (FAIL) { if (HAS_CONSECUTIVE_EMPTY_LINES) {
exit 1; print "Recipe has at least 2 consecutive empty lines.";
} }
} }
' "$1" ' "$1")"
if [ $? -ne 0 ]; then if [ -n "$errMsgs" ]; then
echo "$errMsgs"
FAIL=1 FAIL=1
fi fi
} }
git diff --name-only "$(git merge-base origin/master HEAD)" | while IFS= read -r file; do while IFS= read -r file; do
echo "Checking '$file'"
case "$file" in case "$file" in
# Ignore these files
index.md) ;;
.github/*.md) ;;
*.webp) *.webp)
echo "Checking size of $file"
check_size "$file" check_size "$file"
check_webp_name "$file" check_webp_name "$file"
;; ;;
.github/*.md)
# Ignore markdown files in .github
continue;
;;
*.md) *.md)
check_recipe_name "$file" check_recipe_name "$file"
check_recipe_content "$file" check_recipe_content "$file"
;; ;;
esac esac
done # Separate each file for easier reading.
echo ""
done <<EOF
$(git diff --name-only "$(git merge-base origin/master HEAD)")
EOF
exit $FAIL exit $FAIL

Loading…
Cancel
Save