Goの実行バイナリを頒布するときに必要な、依存ライブラリのライセンスをまとめたCREDITS
ファイルを出力してくれるもの。
Goの場合、例えサードパーティライブラリを使ってないとしても、Goの標準モジュールのライセンスの同梱が必要。
これらがGitHub Actionsで自動で行われる
# .github/workflows/tagpr.yml
name: tagpr
on:
push:
branches: ["main"]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: Songmu/tagpr@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
git-flow
コマンドはあったがそれ以外には追随しなかった
% svn up && ./deploy.sh
% git pull && ./deploy.sh
git merge
しなくなったtagを打つためのcommitを作る必要がある。
案外やることある。
minil new
, godzil new
で雛形作成minil release
, godzil new
でリリース
他にもリリース時に変更するファイルはプロジェクトごとにあるが、tagpr
はこの2つの面倒をある程度見てくれる。
個人でやってる分にはいいが、引き継いだりチームでやるときに問題が表出することも
Your software's major version should never exceed the first and most important number in computing: zero.
.github/release.yml
をリポジトリに配置して、グルーピング等も定義できるtagprは同名のGo製コマンドですが、GitHubの機能とAPIをフル活用している。
package tagpr
const version = "1.0.6"
var revision = "HEAD"
Goではこういうversion.go
というファイルをリポジトリに配置するようにしている。
-ldflags
でコミットハッシュを埋め込みruntime/debug.BuildInfo
を使えば、go install
時にバージョン情報を取得できる
go build
のときは取れなくなってしまうマージ済みのpull requestに major
, minor
のようなタグが付いていたらそれを見て次のバージョンを仮ぎめしてくれる
[tagpr]
changelog = false
- uses: actions/checkout@v3
- id: tagpr
uses: Songmu/tagpr@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: ./.github/actions/release
with:
tag: ${{ steps.tagpr.outputs.tag }}
if: "steps.tagpr.outputs.tag != ''"
[tagpr]
command = 'go run path/to/release.go'
GitHub Actions上でtapgrが動くときに、ついでに実行するコマンドを指定できる。自動書き換え目的。