itamaeのgitリソースでエラーが起きたからメモ

itamaeのgitリソースを実行したところ「deployブランチがすでに存在しているためcheckoutできませんでした」という旨のエラーが出ました。
その原因を調べたのでメモとして残しておきます。

エラーの原因

itamaeでgitリソースを実行するときに以下をともに満たしている場合、deploy branch already existとエラーが発生します。

  • checkoutしているブランチがdeployブランチ以外(masterとか)
  • deployブランチはすでに存在している

コードを見てみるとわかりますが、基本的にdeployブランチにcheckoutした状態で実行しないといけないようです。

gitリソースの挙動

ざっくりいうと以下の順でリモートのソースコードを同期するようです。

  1. deployブランチをdeploy-oldブランチにrename
  2. git fetch(このときrevisionオプションを渡していないと常に最新のソースコードを取得する)
  3. deployブランチを作成してdeployブランチにチェックアウト
  4. deploy-oldブランチを削除

deployブランチ以外のブランチにcheckoutした状態で実行すると、以下の分岐に入らずdeployブランチがrenameされません。
その結果上記エラーが発生してしまいます。

if current_branch == DEPLOY_BRANCH
  run_command_in_repo("git branch -m deploy-old")
  deploy_old_created = true
end

github.com

というわけで、deployブランチにcheckoutしたところ正しく動作しました。
以上、メモでした。