Update Release Badge — update-release-badge.yaml¶
What:新しい Release(正式版) が公開されたタイミングで、<latest tag> を埋め込んだ Shields.io 互換 JSON を生成し、指定 Gist の release.json を更新して 動的バッジを最新化する。
導入パッケージ¶
signage-jetson
When(トリガ / 対象)¶
on: release(created,published)if: !github.event.release.prereleaseにより プレリリースは除外(RC/βは対象外)
Permissions / Secrets¶
- リポ側の追加権限は不要(Gist 更新は PAT で実施)
- 必要な Secrets
GH_PAT:gist スコープを付与した Personal Access Token- 環境変数
GIST_ID:更新対象 Gist の ID(ワークフロー内で固定値)
GITHUB_TOKENは Gist API には使えないため PAT 必須。
Inputs / Outputs¶
- Input:
release.tag_name(イベントから取得) - Output:Gist
release.json(Shields.io endpoint 用 JSON)
{ "schemaVersion":1, "label":"release", "message":"vX.Y.Z", "color":"blue" }
Steps(処理の流れ)¶
- タグ取得
- リリースイベントから
github.event.release.tag_nameを取得し、TAGとして出力。 -
ログに最新タグを出力して可視化。
-
Badge JSON の生成
jqを用いて Shields.io 互換の JSON を組み立て、badge.jsonに保存。-
例:
{schemaVersion:1,label:"release",message:"vX.Y.Z",color:"blue"} -
Gist へ PATCH
badge.jsonを 生文字列として読み込み、files.release.json.contentに格納する payload を作成。curl -X PATCH https://api.github.com/gists/${GIST_ID}にAuthorization: Bearer $GH_PATを付与して更新。
Failure → Fix(よくある失敗と対処)¶
- 401 / 403(Unauthorized / Forbidden)
-
GH_PATが無効・権限不足(gistスコープ必須)・期限切れの可能性。PAT を再発行し Secrets を更新。 -
404(Gist Not Found)
-
GIST_IDが誤り、または削除済み。Gist の可用性と ID を再確認(Secret Gist でも API 更新は可)。 -
プリリリースで動かない
-
ワークフローに
if: !github.event.release.prereleaseがあるため仕様通り。RC/βにも反映したい場合は条件を調整。 -
バッジが古いまま
-
Shields 側のキャッシュ。バッジ URL に
?cacheSeconds=300等を付与、もしくは数分待機。Gist のrelease.jsonが更新済みかを確認。 -
jqが見つからない -
まれにランナーのミニマルイメージで不足。
sudo apt-get update && sudo apt-get install -y jqを前段に追加。 -
GH_PAT未設定 - Secrets に
GH_PATを追加(リポ or Org 単位)。権限は gist のみに最小化。
運用ノート / ベストプラクティス¶
- Shields 埋め込み例(README / Docs)

- PAT の最小権限
GH_PATは gist スコープのみ付与。定期ローテーション・監査ログの確認を運用に組み込む。 - 並行実行の抑止(任意)
concurrency:
group: release-badge-${{ github.ref }}
cancel-in-progress: true
- 表示文言/色のカスタム
label,colorはjq生成時に固定化。製品ラインや環境(prod/stg)で色分けも可能。 - 多言語・複数バッジ
同一 Gist の
filesにrelease.json,release-ja.jsonなど複数ファイルを持たせ、用途別にエンドポイントを分ける。 - 手動テスト
workflow_dispatchを併設して、タグ無しでも一時的な JSON を発行→Gist 反映テストが可能(本番運用では release イベント運用を主とする)。