Add tooling for svg size checking

also add pre-commit hook to ensure svgs are
compressed on commit

since extensions are accessible via http an .htaccess
is added to the dev-scripts folder for safety.

Bug: T170639
Change-Id: Ibcd5c29340d16c9cffc6e2eb90d33ee89b69874f
This commit is contained in:
jdlrobson 2017-07-13 08:56:30 -07:00
parent f60ca174f1
commit 59a17fd0af
4 changed files with 95 additions and 2 deletions

1
dev-scripts/.htaccess Normal file
View File

@ -0,0 +1 @@
Deny from all

75
dev-scripts/pre-commit Executable file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env bash
# Enable this pre-commit hook by running 'make installhooks'
set -euo pipefail
git-staged-files() {
git diff --cached -C -C -z --name-only --diff-filter=ACMRTUXB "$@"
}
git-is-staged() {
local diff=0
git-staged-files --quiet "$@" 2> /dev/null || diff=$?
[[ diff -eq 1 ]] || return 1
}
map() { IFS= read -rd $'\0' "$@"; }
compress-png() {
git-staged-files \*.png|while map file; do
echo "Compressing $file"
optipng -q -o7 "$file" && advpng -z -4 "$file" && advdef -z -4 "$file" | grep Output
git add "$file"
done
}
compress-svg() {
git-staged-files \*.svg|while map file; do
make nodecheck
echo "Compressing $file"
node_modules/.bin/svgo --config=.svgo.yml "$file"
git add "$file"
done
}
test-whitespace() { git diff --cached --check; }
test-js() {
local err=0
make eslint || err+=1
if git-is-staged \*.js; then
make qunit || err+=1
fi
return $err
}
test-php() {
local err=0
if git-is-staged \*.php; then
make phplint || err+=1
fi
# todo: where is result set?
if git-is-staged 'includes/skins/*.php'; then
make validatehtml > $result || err+=1
fi
return $err
}
main() {
local err=0
compress-png
compress-svg
test-whitespace || err+=1
test-js || err+=1
test-php || err+=1
return $err
}
main "$@"

17
dev-scripts/svg_check.sh Executable file
View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
found=0
for svgfile in `find resources -type f -name "*.svg"`; do
outfile="$svgfile.tmp"
node_modules/.bin/svgo --config .svgo.yml -i $svgfile -o $outfile -q
if [ $(wc -c $svgfile | awk '{print $1}') -gt $(wc -c $outfile | awk '{print $1}') ]; then
echo "File $svgfile is not compressed"
found=$((found + 1))
fi
rm $outfile
done
if [ $found -gt 0 ]; then
echo "Found $found uncompressed SVG files. Please compress the files and re-submit the patch"
exit 1
fi

View File

@ -1,13 +1,13 @@
{
"private": true,
"scripts": {
"test": "grunt test"
"test": "grunt test && dev-scripts/svg_check.sh"
},
"dependencies": {
"svgo": ">=0.4.4"
},
"devDependencies": {
"eslint-config-wikimedia": "0.3.0",
"eslint-config-wikimedia": "0.4.0",
"grunt": "^1.0.1",
"grunt-banana-checker": "^0.5.0",
"grunt-contrib-watch": "^1.0.0",