おそらくはそれさえも平凡な日々

tagpr が署名付きタグに対応しました

tagpr v1.21.0をリリース しました。

署名付きタグ対応

tagprが作るcommitは自動で署名付きになっていましたが、タグにも署名が付けられるようになりました。

署名の設定は利用者側で行う必要があります。設定しておけば、具体的には git config tag.gpgSign が true で、鍵などの設定が適切であれば、tagpr は自動で署名付きタグを作成します。

SSHやGPG鍵を使う方法が現状は本筋ですが、Gitsignを使ったKeyless署名をする場合、 Chainguard の setup-gitsign action が便利です。例えば以下のような感じ。 id-token: write 権限が必要です。

permissions:
  contents: write
  id-token: write
  pull-requests: write
  issues: read
steps:
- name: checkout
  uses: actions/checkout@<ref>
  with:
    persist-credentials: false
- uses: chainguard-dev/actions/setup-gitsign@<ref>
- name: tagpr
  id: tagpr
  uses: Songmu/tagpr@<ref>
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

ちなみに、現在のGitHubはKeyless署名に対してverifiedのグリーンバッジを付けないのでその点ご留意下さい。Artifact attestationsではsigstoreを使っているのでそのうち対応されるのではないかと思うのですが…。(内部情報関係ない完全に個人的な推測です)

参考:

コマンド失敗時にエラー終了

tagpr はリリース自動化のために command や postVersionCommand で指定したコマンドを実行しますが、これまではコマンドが失敗時も後続の処理継続を優先し、エラーを握りつぶしていました。ただ、それはやっぱ良くないので、 command や postVersionCommand が失敗した場合は、後続のPR作成・更新処理を完了させつつ、エラー終了するようにしました。これにより、既存のワークフローが壊れる可能性もありますが、適宜ご調整下さい。

リリースノート生成APIを極力呼び出さない様に

tagpr は releases/generate-notes APIを呼び出し、その内容を CHANGELOG.mdや、issueメッセージへ埋め込んでいます。ほとんどのケースで問題ありませんが、更新差分が大きい場合のタイムアウトなどのエラーにより tagpr が失敗するケースがあります。

この問題の回避策として、上記のリリースノート生成APIを極力呼び出さないようにする変更を行いました。具体的には、 tagpr.changelog = false 指定と、 tagpr.template 内で {{.Changelog}} が呼び出されていない場合に、APIコールされなくなりました。また、リリース時もデフォルトでこのAPIは呼ばれるので、それも回避したい場合は tagpr.release = false を指定して下さい。

リリースフローやコマンドインストールの改善

昨今のサプライチェーンセキュリティの観点から、リリースフローやコマンドインストールを改善しました。SLSAのBuild Track の Level 3に対応した状況になっているはずです。具体的には以下の対応を行いました。

  • リリースビルド時のprovenanceへのattestation付与
  • リリースビルド時に依存の更新やファイル変更を行わないように
  • リリースビルドにreusable workflowを用いてビルドの独立性を担保
  • Release immutabilityの有効化 (これは元々)
  • リリースツール群にも上記同様の対応を入れてpin留め
  • Goバイナリやアーカイブを極力reproducibleに
  • tagpr アクション利用時のインストーラー内でattestation検証を実施

この辺りはシルバーウィークの自由研究的な感じになったのだけど、どこかで別途まとめます。

安心してご利用いただけるようにアップデートしていきますので、今後もご愛顧のほどよろしくお願いします。

created at
last modified at

2026-09-24T15:43:09+0900

comments powered by Disqus