git commit のついでに hugo コマンド実行

git commit のついでに hugo コマンド実行 #

環境作った ので、

  1. Emacs で記事作成
  2. hugo
  3. git add / git commit
  4. git push
  5. サイト公開

の流れはできたけど、hugo コマンドで HTML ファイル生成するのは、サイトに公開する時=git push する時だけなので、

  • git 操作する時についでにやってしまいたい
  • ついでにやるなら、ファイル更新日時も自動で追加したい

ということで、hook/pre-commit でやる

pre-commit 自体を修正したいこともあると思うので、_bin/pre-commit に設置して、hook/pre-commit 実行時にコピーしてくることにした

これで

  1. Emacs で記事作成
  2. git add / git commit
    1. Front Matter の lastmod 更新して、更新したファイルを git add
    2. hugo コマンドで html 生成
    3. 生成した html ファイルを git add
    4. git commit
  3. git push
  4. サイト公開

と、一手短くなった

$ 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

See Also

Copyright © 髭。/ Hugo + hugo-book