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側へ渡すようにすることだけ注意してください。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark