Github Actionsを使用してGo言語モジュールのリリースを設定する
2022年10月9日に投稿、2022年10月11日に更新
Go言語モジュールをビルドして配布するのは比較的簡単です。GitHubリポジトリを作成し、コードをプッシュするだけですよね?
実際はそうでもありません。適切に配布されたモジュールは、人々が本番環境でモジュールを信頼できるように、タグ付けされバージョン管理されている必要があります。
パッケージバージョンをいつ、どのようにアップするか決めるには?
幸いなことに、車輪を再発明する必要はありません。Go言語コミュニティ内外のほとんどのパッケージはSemVerに従っています。要約すると:
- ドット(
.
)で区切られた3つの数字があります ->1.2.5
- 既存のAPIに変更があると、最初の数字を変更します
- 新機能を追加するが既存の機能に影響を与えない変更の場合、2番目を変更します
- バグのために既存の振る舞いを修正する変更の場合、3番目を変更します。
実際の適用に少し微調整や個人の好みが入るかもしれませんが、本質はこの4点のみで、この基礎に基づいてsemantic-release
パッケージが作られました。
完全自動化されたバージョン管理とパッケージ公開
semantic-releaseは次のバージョン番号の決定、リリースノートの生成、パッケージの公開を含む、パッケージリリースワークフロー全体を自動化します。
これにより、人間の感情とバージョン番号の即時の繋がりを取り除き、セマンティックバージョニングに厳密に従い、消費者に変更の影響を伝えます。
信じてください、これでワークフローがより良く変わります。 – egghead.io
ハイライト
- 完全自動リリース
- セマンティックバージョニングの規格を強制
- 新機能と修正はユーザーに即座に利用可能
- 新リリースのメンテナーとユーザーに通知
- コードベースの変更を文書化するために、形式化されたコミットメッセージ規約を使用
- gitマージに基づいて、さまざまな配布チャネル上で公開(例:npm dist-tags)
- 継続的インテグレーションワークフローと統合
- 手動リリースに関連する潜在的なエラーを回避
- プラグインを介して任意のパッケージマネージャーと言語をサポート
- 共有設定を通じてシンプルで再利用可能な設定
どのように機能するのか?
コミット
…
コミット規約
適切なコミット規約を使用することは、バージョニングと変更ログを簡単に最新の状態に保つために不可欠です。私は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