LoginSignup
3
2

More than 3 years have passed since last update.

GitHub Actionsで最新のタグにcheckoutする

Last updated at Posted at 2020-03-07

前に、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オプションだとリポジトリの情報全部持ってきちゃうので、もっと軽めのいい方法ないかなーと思ってます。
もしこっちのほうがいいよ!っていうのがあれば教えて下さい🙌

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2