2020-04-04に更新

hugoをgithub-actions上でbuildした際、lastmodの更新がすべての記事に適用される問題を解決した

はじめに

hugoのジェネレートをGitHub-actionsを使って、pushするだけでデプロイできるようにしたのですが、全記事の最終更新日が更新されていたため原因調査をおこないました。

TL;DR

  • gitのcloneを行う際に最新コミットしか取得していなかった
  • actions/checkoutを利用する場合は以下の方法でfetchを行わせ、全履歴を取得しておく
- uses: actions/checkout@v2
  with:
    fetch-depth: 0    # Fetch all history for .GitInfo and .

試したこと

GitHub-actions上とlocalの比較

icon 結果
更新対象記事のみlastmodが更新されていた
すべての記事に対して更新が入っていた
  • ローカル
    • ✅MacOSでのビルド
    • ✅Vagrant内のUbuntu:18.04.4でのビルド
  • CI環境

    • ❎Ubuntu:ubuntu-18.04でのビルド
    • ❎MacOS:latestでのビルド
    • ✅hugoのビルドを省いてデプロイ
    • ❎オプションを外してビルド
    • ❎既存のworkflowを使わずにコマンドでインストール(下記コマンドを実行)

      wget https://github.com/gohugoio/hugo/releases/download/v0.68.3/hugo_0.68.3_Linux-64bit.deb
      sudo apt-get install -y ./hugo_0.68.3_Linux-64bit.deb
      

git周りの確認

  • 参照先のcommitIDが対象コミットのcommitIDになっているか
    • 対象のコミットIDでした
  • git logの結果が正常に表示されているか
    • CI上のログでは、1件しか表示されていなかった

結果

actions/checkout@v2という公式のworkflowを利用してgitのcloneを行っていたのですが、デフォルトでは最新のコミットしか取ってこないようです。
更新日時の参照先が見つけられなくなるため、すべての記事が最新のコミット更新日時を取得しに行ってしまったのだと思います。

# Number of commits to fetch. 0 indicates all history.
# Default: 1
fetch-depth: ''

https://github.com/actions/checkout#usage

すべての履歴をcloneしてくることで、解決しました。
GitHub Actionsのymlファイルでは、以下のように記載するようです。

- uses: actions/checkout@v2
 with:
   fetch-depth: 0    # Fetch all history for .GitInfo and .

https://github.com/peaceiris/actions-hugo#️-create-your-workflow

さいごに

最初はhugoのセットアップに使っているworkflowが悪いのかを疑ってたせいで、結構解決までに時間がかかりました…

今回のような問題を早期発見するために、確認用のStepも入れたほうが良いのかなと思いました。

参考

Originally published at tech-wafter.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

matsu4ki

よわよわなWebエンジニアです。 Java/Ruby/JS触ってます

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント