Updated PR workflow to add more checks (#400)

This commit is contained in:
Steven Hall 2021-03-21 18:08:50 -07:00 committed by GitHub
parent fa8ade97fc
commit 4015ffa108
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 128 additions and 37 deletions

View File

@ -1,12 +1,12 @@
on: pull_request
jobs:
check_size:
check_files:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Check file size
run: .github/workflows/scripts/check-size.sh
- name: Check files for compliance
run: .github/workflows/scripts/check-files.sh

125
.github/workflows/scripts/check-files.sh vendored Executable file
View File

@ -0,0 +1,125 @@
#!/bin/sh
set -eu
SIZE_LIMIT=150000
check_size() {
size="$(stat --printf="%s" "$1")"
if [ "$size" -gt "$SIZE_LIMIT" ]; then
echo "File $1 is bigger than specified $SIZE_LIMIT limit"
exit 1
fi
}
check_webp_name() {
shouldname="$(echo "$1" |
iconv --to-code=utf-8 |
sed "s/^\(data\/pix\/\)\?/data\/pix\//" |
tr '[:upper:]' '[:lower:]' |
tr '_ ' '-')"
if [ "$shouldname" != "$1" ]; then
echo "$1 should be named $shouldname."
exit 1
fi
}
check_recipe_name() {
shouldname="$(echo "$1" |
iconv --to-code=utf-8 |
sed "s/^\(src\/\)\?/src\//" |
tr '[:upper:]' '[:lower:]' |
tr '_ ' '-')"
if [ "$shouldname" != "$1" ]; then
echo "$1 should be named $shouldname."
exit 1
fi
}
check_recipe_content() {
awk '
BEGIN {
HAS_TITLE = 0;
HAS_TAGS = 0;
NUM_TAGS = 0;
HAS_INGREDIENTS = 0;
HAS_DIRECTIONS = 0;
}
# First line should be the title
NR == 1 && /^# / {
HAS_TITLE = 1;
next;
}
/^## Ingredients/ {
HAS_INGREDIENTS = 1;
next;
}
/^## Directions/ {
HAS_DIRECTIONS = 1;
next;
}
END {
# Last line should be the tags list
if ($1 == ";tags:") {
HAS_TAGS = 1;
NUM_TAGS = NF - 1;
}
FAIL = 0;
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;
}
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;
}
}
' "$1"
if [ $? -ne 0 ]; then
exit 1;
fi
}
git diff --name-only "$(git merge-base origin/master HEAD)" | while IFS= read -r file; do
case "$file" in
*.webp)
echo "Checking size of $file"
check_size "$file"
check_webp_name "$file"
;;
.github/*.md)
exit 0;
;;
*.md)
check_recipe_name "$file"
check_recipe_content "$file"
;;
esac
done

View File

@ -1,34 +0,0 @@
#!/bin/sh
set -eu
SIZE_LIMIT=150000
check_size() {
local size=$(stat --printf="%s" $1)
if [ "$size" -gt "$SIZE_LIMIT" ]; then
echo "File $1 is bigger than specified $SIZE_LIMIT limit"
exit 1
fi
}
check_md_name() {
shouldname="$(echo "$1" |
iconv --to-code=utf-8 |
sed "s/^\(src\/\)\?/src\//" |
tr '[:upper:]' '[:lower:]' |
tr ' ' '-')"
if [ "$shouldname" != "$1" ]; then
echo "$1 should be named $shouldname."
exit 1
fi
}
git diff --name-only `git merge-base origin/master HEAD` | while IFS= read -r file; do
case "$file" in
*.webp)
echo "Checking size of $file"
check_size $file
;;
*.md) check_md_name "$file" ;;
esac
done