前に、GitHub Actionsを使ってContentfulが更新されたら自動でデプロイするっていう記事を書いたのですが、これだとなんでもかんでもmasterからデプロイしちゃいます。
僕的には最新のtagにcheckoutして、その時の状態でデプロイされたらいいのになぁと思ってたので色々試したのでメモがてら書こうと思います。
やったこと
actions/checkout
を実行したあとに、gitコマンドを使って最新タグを取得してcheckoutするようにしました。
git describe
コマンドを使い、最新のtagを取得するようにしています。
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v2
- name: Checkout Latest tag # ← ここから4行を追加
run: |
git fetch --prune --unshallow
git checkout $(git describe --tags --abbrev=0)
...
ハマった点
actions/checkout
はshallow cloneしています。
# shallow cloneの例
git clone --depth 1 git@github.com:<アカウント名>/<リポジトリ名>.git
actions/checkout
のshallow cloneはデフォルトブランチの最新コミットしかfetchしない設定なので、そのコミットでタグが打たれていない場合、git describe
コマンドが動きません
(これに気づくのに時間がかかった)
gitドキュメントにもこう書いてあります
The command finds the most recent tag that is reachable from a commit.
このコマンドは、コミットから到達可能な最新のタグを見つけます。(Google訳)
https://git-scm.com/docs/git-describe
そのため、以下のgitコマンドを実行して、すべてのコミットを取得する必要があります。
git fetch --prune --unshallow
おわりに
これで最新tagのデータでデプロイが出来るようになりました🎉
ただ、--unshallow
オプションだとリポジトリの情報全部持ってきちゃうので、もっと軽めのいい方法ないかなーと思ってます。
もしこっちのほうがいいよ!っていうのがあれば教えて下さい🙌