GitHubのreleaseとtagを自動でつけたい
概要
最近privateドタバタしてて全然開発できてなかったけど、隙間時間で再開🤹♂️
GitHubでよく見るこの辺のreleaseとかtagを自動で打てたら素敵だなぁ
と前々から思ってたので、今日はこの辺調べてみ
たらすでに素敵な記事があったw
基本上記記事通りやればいいだけだけど
ちょっと詰まった部分もあったのでメモ残しとく
ポイント
以下やっていく感じ
- main branchにpushしたらreleaseとtagを勝手に打ってもらう
-
semantic-release
- コミットの命名規則を見てtagとreleaseをよろしく作成してくれる
-
GitHub Actions
- masterへのpushでsemantic-release実行してくれるCI
-
semantic-release
- ローカルでコミットメッセージの規則性を強制する
-
commitlint
- コミットの命名がsemantic-releaseの求める規則通りかチェックしてくれる
-
husky
- コミット前に規則通りじゃない場合止めてくれる
-
commitlint
semantic-releaseに準じたこんな感じのコミットメッセージ書いてくと
feat(user): add create user validation
メジャーなのかマイナーなのか勝手に判断してtag打ってrelease作成してくれる!素敵!
やったこと
semantic-release
yarn環境構築
以下コマンド実行して適当な情報入れ込んでく
(とりあえずprivateはtrueにしておく
brew install yarn
yarn init
インストールとセットアップ
semantic-releaseのpackageを開発環境用に追加
最後のsetupではnpmのpasswordは?
とか聞かれたので
npmにサインアップして情報入れといた
あとはGitHubのパーソナルトークンも作成して登録
トークン作成時の権限はデフォルト状態で行けた
yarn add -D semantic-release semantic-release-cli
yarn semantic-release-cli setup
デフォルトの設定だとmaster branch見にいくから
以下ファイル作成してmainを参照するようにしたほうがよさそう
{
"branches": ["main"]
}
GitHub Actions
設定
main
にpushしたら以下実行するように設定
- リポジトリの情報をcheckout
- node環境の作成
- yarnで依存package install
-
semantic-release
実行!
name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-20.04
steps:
- name: Checkout this repository
uses: actions/checkout@v2
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '14.16.0'
- name: Install dependencies
run: yarn --frozen-lockfile
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: yarn semantic-release
検証
PR作ってマージ。mainにpushされると
GitHub Actionsのworkflowが動いた!
tagとreleaseが勝手にできた!!
Angular Commit Message Conventionsのtypeに準じて
major, minor, patchどのレベルのアップデートなのか判断してくれるみたい
fix(scope)
はパッチ、feat(scope)
はマイナー
コミットメッセージにこんな感じでBREAKING CHANGE:
って含めるとメジャーバージョンが上がるみたい
BREAKING CHANGE: The graphiteWidth option has been removed.
他のタイプは全部パッチかな?試してない。
commitlint
コミットメッセージに規則性を強制してくれる!
yarn add -D @commitlint/cli @commitlint/config-conventional
ここで適当にyarn add -D commitlint
とかすると@commitlint/config-conventional
が入らなくて Please add rules to your commitlint.config.js
エラーから抜け出せないので気をつけて🤦♂️
以下設定ファイル追加する
{
"extends": [
"@commitlint/config-conventional"
]
}
こんな感じでちゃんとチェックしてくれるか確認できます!
echo "aaa(scope): test" | yarn commitlint
yarn run v1.22.10
$ /Users/su/ghq/github.com/shintaro-uchiyama/base-app/node_modules/.bin/commitlint
⧗ input: aaa(scope): test
✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum]
✖ found 1 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
husky
上で設定したcommitlintをコミットするタイミングでチェックして弾いて欲しい!そんな時のhusky
huskyインストールしてコミットメッセージチェックの設定追加
yarn add -D husky
yarn husky install
yarn husky add .husky/commit-msg "yarn commitlint --edit $1"
chmod +x .husky/commit-msg
ここまで来たらこんな感じでコミットしようとしても規則性に準じてなかったら怒られるはず!
git commit -m "wrongtype(scope): testing"
yarn run v1.22.10
$ /Users/su/ghq/github.com/shintaro-uchiyama/base-app/node_modules/.bin/commitlint --edit
⧗ input: wrongtype(scope): testing
✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum]
✖ found 1 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
husky - commit-msg hook exited with code 1 (error)
まとめ
commitlintのとこでyarn -D commitlint
しちゃってだいぶ時間を浪費したけど概ね問題なくできた🙋♂️
コミットメッセージにこだわり持ってる人もいるので
万人にはウケなさそうだけど、個人的には何事も勝手にやって欲しい子なのでこれは重宝しそう🧘
Discussion