conventional-github-releaserでGitHubのリリーステキストを自動生成する
GitHubでプロダクトを公開している場合、git tagでタグ付けしてリリースするワークフローをよくとります。 しかしリリースしたあとでReleaseページのテキストを作成するのを忘れたり、面倒になって後回しという名の […]
目次
GitHubでプロダクトを公開している場合、git tag
でタグ付けしてリリースするワークフローをよくとります。
しかしリリースしたあとでReleaseページのテキストを作成するのを忘れたり、面倒になって後回しという名の放置をしたりという問題が(個人的に)大発生しています。
しかしConventional Commit系ツールを利用すれば自動化できそうだったので、試してみました。
Step1: GitHubにリポジトリを作成する
GitHubのRelaseを作成するCLIですので、リポジトリを作成しましょう。
Privateリポジトリも対応していますが、テストなのでpublicでやっちゃいます。
Step2: 適当なコードをコミットする
コミットログがないとReleaseできませんので、index.jsなどのファイルを2〜3回編集してgit commit
しておきましょう。
この時、以下の例のようにConventional Commit形式で記述する必要ああります。
$ git commit -m "feat: add a new function"
$ git commit -m "fix: input number should be as a string"
Step3: GitHubのtokenを取得する
CLIツールからGitHubのリポジトリを操作するため、アクセストークンを作成する必要があります。
[Settings > Developer Settings -> Personal access tokens]からNewで作成しましょう。
Publicであればpublic_repo
、Privateであればrepo
をscopeとして選択する必要があります。
作成したTokenは.envrc
などに以下の形で環境変数として保存しておきましょう。
export CONVENTIONAL_GITHUB_RELEASER_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN
STEP4: CLIでリリースしてみる
ここまでで準備が整いました。あとは実際にGitHubへリリースをしてみましょう。
GitHubのリリースは、Gitのtagをpushすることで作成されます。今回はNode.jsのプロジェクトをサンプルとして作っていますので、npm version
を利用します。
// Version up
$ npm version minor
v2.1.0
// Push new release
$ git push origin v2.1.0
// Create a Release page
$ npx conventional-github-releaser -p angular
実行に成功すれば、このようにRelease内容が自動で表示されるようになります。
feat
から始まるコミットはFeatures
へ、fix
からはじまるコミットはBug Fixes
にまとめられている様子です。
Step5: npm version
で全部まとめて実行する
最後にnpm version
でバージョンアップしたら、pushもリリースの作成もまとめてやるようにしてみましょう。
package.json
{
"name": "convential-commit-test",
"version": "2.2.0",
"description": "",
"main": "index.js",
"scripts": {
"postversion": "npm run push:tag && npm run create:release",
"push:tag": "git push origin $(git describe --abbrev=0 --tags)",
"create:release": "conventional-github-releaser -p angular"
},
npm versionを実行する
pacakge.jsonでnpm version
実行後に「git push
で新しいタグをPush」し「conventional-github-releaserでReleaseを作成する」ように定義しました。
実際に動かしてみると、pushとReleaseの作成が行われていることがわかります。
$ npm version minor
v2.4.0
> [email protected] postversion /Users/sandbox/test/practice-conventional-commit
> npm run push:tag && npm run create:release
> [email protected] push:tag /Users/sandbox/test/practice-conventional-commit
> git push origin $(git describe --abbrev=0 --tags)
Counting objects: 10, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 1.09 KiB | 1.09 MiB/s, done.
Total 10 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 2 local objects.
To github.com:hideokamoto/practice-conventional-commit.git
* [new tag] v2.4.0 -> v2.4.0
> [email protected] create:release /Users/sandbox/test/practice-conventional-commit
> conventional-github-releaser -p angular
おわりに
実際にはnpm versionではなく、CIサービス上から実行することも多いかもしれません。その場合もやり方はほぼ同じですので、GitHubのトークンを安全にCI側へ渡すようにすることだけ注意してください。