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