From 600197eb77f9e270a2407246be2b775af330cd9f Mon Sep 17 00:00:00 2001 From: sunakan Date: Tue, 3 Jan 2023 07:31:05 +0900 Subject: [PATCH] =?UTF-8?q?ci:=20submodule=20=E3=81=8C=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=82=89?= =?UTF-8?q?=E5=BC=BE=E3=81=8F=20ci=20=E3=82=92=E5=B0=8E=E5=85=A5=20(#108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci: submodule が最新かどうかをチェックするスクリプトを用意 * chore: submodule が最新かどうかをチェックするスクリプトを make タスクに登録 * ci: submodule が最新かチェックする仕組みを ci に組み込む --- .github/github-comment.yaml | 40 +++++++++++++ .../workflows/check-for-submodule-updates.yml | 41 +++++++++++++ Makefile | 4 ++ scripts/check-for-submodule-updates | 57 +++++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 .github/github-comment.yaml create mode 100644 .github/workflows/check-for-submodule-updates.yml create mode 100644 scripts/check-for-submodule-updates diff --git a/.github/github-comment.yaml b/.github/github-comment.yaml new file mode 100644 index 0000000..2c6c1db --- /dev/null +++ b/.github/github-comment.yaml @@ -0,0 +1,40 @@ +# +# github-comment の comment template +# +# リポジトリ: https://github.com/suzuki-shunsuke/github-comment +# ドキュメント: https://suzuki-shunsuke.github.io/github-comment/ +# +# 概要 +# - PR の GitHub Action で利用を想定 +# - 失敗時に PR にコメントを残す +# - 古いコメントを hide する +# +# 利用例 +# +# ``` +# $ github-comment exec --config .github/github-comment.yaml -k default -- make xxxx +# ``` +# +--- +exec: + default: + - when: ExitCode != 0 + template: | + {{template "status" .}} {{template "link" .}} + exit code: {{.ExitCode}} + + 実行されたコマンド + + ``` + $ {{.Command}} + ``` + +
+ + 出力 + +

+        {{.CombinedOutput | AvoidHTMLEscape}}
+        
+ +
diff --git a/.github/workflows/check-for-submodule-updates.yml b/.github/workflows/check-for-submodule-updates.yml new file mode 100644 index 0000000..864a8ec --- /dev/null +++ b/.github/workflows/check-for-submodule-updates.yml @@ -0,0 +1,41 @@ +--- + +name: Check for submodule updates + +# +# 'on' にしている理由 +# yamllintで怒られるため +# +# 参考: https://github.com/adrienverge/yamllint/issues/430 +# +'on': + pull_request: + +jobs: + check-for-submodule-updates: + # + # PR 元が renovate 起因の場合、 job skip + # (renovate 起因の場合、ブランチ名は renovate/**) + # + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + runs-on: ubuntu-latest + steps: + - name: リポジトリのチェックアウト + uses: actions/checkout@v3 + - name: github-commentをインストール + run: | + curl -sSfL -o github-comment.tar.gz "https://github.com/suzuki-shunsuke/github-comment/releases/download/v${GITHUB_COMMENT_VERSION}/github-comment_${GITHUB_COMMENT_VERSION}_linux_amd64.tar.gz" + echo 1da8cb9d52395018ec15f876347e204fe632c833baa1831ca36302dec1e0f97a github-comment.tar.gz | sha256sum -c + sudo tar -C /usr/bin -xzf ./github-comment.tar.gz + env: + GITHUB_COMMENT_VERSION: 5.0.0 + - name: github-comment のバージョン確認 + run: github-comment -v + - name: 古いコメントを削除 + run: github-comment hide -condition 'Comment.Body contains "make git.check-for-submodule-updates"' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: submoduleが最新かどうかチェック + run: github-comment exec --config .github/github-comment.yaml -- make git.check-for-submodule-updates + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Makefile b/Makefile index 8e9b172..d4a0f19 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,10 @@ lint.shell: ## Shell script を lint ################################################################################ # git 関連 ################################################################################ +.PHONY: git.check-for-submodule-updates +git.check-for-submodule-updates: ## submodule の更新があるかどうかチェックする + @bash scripts/check-for-submodule-updates + .PHONY: git.update-submodule git.update-submodule: ## git submodule を最新版にアップデート git submodule update --init --recursive --remote diff --git a/scripts/check-for-submodule-updates b/scripts/check-for-submodule-updates new file mode 100644 index 0000000..bef86e0 --- /dev/null +++ b/scripts/check-for-submodule-updates @@ -0,0 +1,57 @@ +#!/bin/bash + +################################################################################ +# Check for submodule updates +################################################################################ +# +# 概要 +# - submodule に更新があるかチェック +# +# exit code: 0 : 更新はない ( 最新状態である ) +# exit code: 1 : 更新がある +# + +GIT_SUBMODULE="akiyadego-openapi" +readonly GIT_SUBMODULE + +# +# submodule での作業内容を退避 +# +function stash_on_git_submodule() { + cd "${GIT_SUBMODULE}" || exit 1 + git stage . + git stash -q -m "$(date +%Y-%m-%dT%H:%M:%S) : check-for-submodule-updates によって stash しました" > /dev/null + cd - || exit 1 +} + +# +# 更新があるか確認 +# +function exist_diff_from_the_latest() { + git submodule update --init --recursive --remote -- "${GIT_SUBMODULE}" > /dev/null + git status --short ${GIT_SUBMODULE} | wc -l | grep -q 0 +} + +# +# Main +# +function main() { + stash_on_git_submodule + if exist_diff_from_the_latest; then + echo "" + echo "👍 Nothing submodule updates: ${GIT_SUBMODULE} submodule is latest." + echo "" + # 現在の branch の submodule の状態に戻す + git submodule update -- "${GIT_SUBMODULE}" > /dev/null + exit 0 + else + echo "" + echo "🧐 Found submodule updates: ${GIT_SUBMODULE} submodule is up to date." >&2 + echo "" + # 現在の branch の submodule の状態に戻す + git submodule update -- "${GIT_SUBMODULE}" > /dev/null + exit 1 + fi +} + +main