git commit のついでに hugo コマンド実行 #
環境作った ので、
- Emacs で記事作成
- hugo
- git add / git commit
- git push
- サイト公開
の流れはできたけど、hugo コマンドで HTML ファイル生成するのは、サイトに公開する時=git push する時だけなので、
- git 操作する時についでにやってしまいたい
- ついでにやるなら、ファイル更新日時も自動で追加したい
ということで、hook/pre-commit
でやる
pre-commit
自体を修正したいこともあると思うので、_bin/pre-commit
に設置して、hook/pre-commit
実行時にコピーしてくることにした
これで
- Emacs で記事作成
- git add / git commit
- Front Matter の lastmod 更新して、更新したファイルを git add
- hugo コマンドで html 生成
- 生成した html ファイルを git add
- git commit
- git push
- サイト公開
と、一手短くなった
$ cat .git/hook/pre-commit
#!/bin/sh
_MASTER_FILE='_bin/pre-commit'
_HOOK_FILE='.git/hooks/pre-commit'
# .git 以下の pre-commit ファイルを更新する
if [ -e $_MASTER_FILE ];then
# copy pre-commit script
diff -s $_MASTER_FILE $_HOOK_FILE > /dev/null 2>&1
if [ $? -ne 0 ];then
cp -p $_MASTER_FILE $_HOOK_FILE
echo 'update '$_HOOK_FILE
fi
fi
# 更新された *.md の Front Matter に lastmod がある場合は、変更して、あらためて git add
git diff --diff-filter=ACM --cached --name-only | egrep '\.md$' | \
while read f; do
# last modified
cat "$f" | sed "/^---$/,/^---$/s/^lastmod:.*$/lastmod: $(TZ=Asia/Tokyo date "+%Y-%m-%dT%T")+09:00/" > tmp
mv tmp "$f"
# # textlint
# npx textlint --fix "$f"
git add "$f"
done
# hugo で静的ファイル生成 & 不要なファイルを削除して、改めて公開ディレクトリを git add
### hugo
hugo --cleanDestinationDir
git add public