CIとかで,gofmt -s -w
とかeslint --fix
とかをかけて,ファイルが修正されていたらコミットしてあげる,というのはよくやるテクニックだと思う。この動作は頻出だし,業務でも登場したのでシェルスクリプト化した。
./commit-when-modified.sh "brach-name" "commit-message" '*.ts' '*.tsx'
のように使う。ファイルグロブを直接受け取るので,ダブルクオートではなくクオートを使っていることに注意。
#!/bin/bash # $0 'ブランチ名' 'コミットメッセージ' 'コミットするファイルのグロブ' ['コミットするファイルのグロブ' ...] set -ex BRANCH_NAME=$1 shift COMMIT_MSG=$1 shift COMMIT_MSG=${COMMIT_MSG-Automated commit} RESULT=$(git ls-files -m $@) if [ -n "$RESULT" ] ; then # true when not empty git add $RESULT git switch -c $BRANCH_NAME git commit -m "${COMMIT_MSG}" git push origin $BRANCH_NAME fi
あとはCI側でgit config --global user.{name|email}
したり,remote.origin.url
をセットしてやればコミットとpushできる。remote.origin.url
にはhttpsのURLを指定してやって,https://x-access-token:パーソナルアクセストークン@github.com/リポジトリ
という風にしておくと簡単。Github ActionsのWorkflowだと自動でトークンを配ってくれるのでマニュアルを読むと良い。