Github Actionsを使用してGo言語モジュールのリリースを設定する

Juan Vega

Juan Vega

2022年10月9日に投稿、2022年10月11日に更新

Go言語モジュールをビルドして配布するのは比較的簡単です。GitHubリポジトリを作成し、コードをプッシュするだけですよね?

実際はそうでもありません。適切に配布されたモジュールは、人々が本番環境でモジュールを信頼できるように、タグ付けされバージョン管理されている必要があります。

パッケージバージョンをいつ、どのようにアップするか決めるには?


幸いなことに、車輪を再発明する必要はありません。Go言語コミュニティ内外のほとんどのパッケージはSemVerに従っています。要約すると:

  1. ドット(.)で区切られた3つの数字があります -> 1.2.5
  2. 既存のAPIに変更があると、最初の数字を変更します
  3. 新機能を追加するが既存の機能に影響を与えない変更の場合、2番目を変更します
  4. バグのために既存の振る舞いを修正する変更の場合、3番目を変更します。

実際の適用に少し微調整や個人の好みが入るかもしれませんが、本質はこの4点のみで、この基礎に基づいてsemantic-releaseパッケージが作られました。

完全自動化されたバージョン管理とパッケージ公開

semantic-releaseは次のバージョン番号の決定、リリースノートの生成、パッケージの公開を含む、パッケージリリースワークフロー全体を自動化します。

これにより、人間の感情とバージョン番号の即時の繋がりを取り除き、セマンティックバージョニングに厳密に従い、消費者に変更の影響を伝えます。

信じてください、これでワークフローがより良く変わります。 – egghead.io

ハイライト

どのように機能するのか?

コミット

コミット規約


適切なコミット規約を使用することは、バージョニングと変更ログを簡単に最新の状態に保つために不可欠です。私はConventional Commitを数年間使用してきました。私の観点からは、採用して管理するのが最も簡単で、大きなリターンがあります。

semantic-releaseのgit履歴がいかにクリアでわかりやすいかを確認してください。

タグとリリース


Conventional Commitを使用していて、適切なセマンティックバージョニングを望む場合、最良の選択肢はsemantic releaseパッケージです。

最初は、このツールがJSで書かれており、nodejs環境用に設計されているため、奇妙に思えるかもしれません。しかし、GitHubとGitHubアクションを使用して、それらの実装の詳細を抽象化できます。

このパッケージは、GitHubリポジトリにリリースとタグを作成します。私のgo-againリポジトリの例を確認できます。

GitHubアクション設定と.releasercファイルの両方が必要です。

name: Release
on:
  push:
    branches:
      - main

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@master
      - name: Release
        uses: codfish/semantic-release-action@v2.0.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

そして、.releaserc

branches:
  - name: "main"

plugins:
  - "@semantic-release/commit-analyzer"
  - "@semantic-release/release-notes-generator"
  - "@semantic-release/GitHub"

リポジトリにコミットをマージまたはプッシュするたびに、conventional commitに従ってセマンティックバージョニングに従った新しいバージョンが取得されます:

  • fix: -> パッチ
  • feat -> マイナー
  • BREAKING CHANGES -> メジャー

コミットtypeからのセマンティックバージョニングのバンプへの変換は、commit-analyzerパッケージを使用して設定可能です。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/juanvegadev/configure-the-release-of-your-golang-module-with-github-actions-nb2