Release TAR / Patches — release-tar-and-patches¶
What:リポのソースから 配布用 tar.gz を生成し GitHub Release に添付、あわせて patches_all.zip(累積パッチ)を作成して同じ Release に添付する。
Who 消費:update_runner / update.sh が asset API 経由で取得(ファイル名・配置が契約)。
導入パッケージ¶
signage-jetson
When(トリガ / 条件)¶
push(タグv*.*.*)workflow_dispatch(手動)if: ${{ !contains(github.ref, '-') }}により プリリリース(-rc,-betaなどハイフン付きタグ)を除外
→ RC ビルドは 手動トリガで実行可能
Permissions / Secrets¶
permissions: contents: write(Release 作成・更新に必要)with.token: ${{ secrets.GH_PAT_RELEASE }}(softprops/action-gh-release用)- 代替:
GITHUB_TOKENでも動作可能(権限はcontents: write必須) - PAT を使う場合は repo:write に最小化、ローテーション運用
Inputs / Outputs¶
- Inputs:なし
- Outputs(Release Assets)
signage-scripts.tar.gz(配布物)signage-scripts.tar.gz.sha256(整合性検証用)patch_bundle/patches_all.zip(累積パッチ)
Steps(処理の流れ)¶
Job 1: build-and-release¶
- Checkout
- VERSION 注入:タグ名と日付で
VERSION.txtを生成(タグ push 時のみ) - tar.gz 作成
- 収録:
migrations/,scripts/,setup_all.sh,update.sh,web/wifi_manager.py,static/index.html,static/index_autoresearch.html,VERSION.txt - 一時コピー:
static/index.html → ./index.html,web/wifi_manager.py → ./wifi_manager.py(収録のため) - 除外:
.github/,*.md, バックアップ/スワップなど - SHA256 生成:
signage-scripts.tar.gz.sha256 - Release へアップロード(作成 or 更新)
tag_name: ${{ github.ref_name }}generate_release_notes: trueappend: true(既存アセットに追記)
Job 2: build-patch(needs: build-and-release)¶
- Checkout(fetch-depth: 0)
- パッチ実行権限付与:
patches/*.shに+x - 累積 ZIP 作成:
patch_bundle/patches_all.zip(patches/*.shをまとめる) - Release へアップロード(同タグに添付)
append: true(既存のアセットを保持)- ※
remove_assetsの挙動は アクションのバージョン実装に依存。未サポートなら手動削除 or 専用ステップで削除を検討
契約(消費側との取り決め)¶
- ファイル名:
signage-scripts.tar.gz/.sha256、patches_all.zip - 検証:ダウンロード後に
sha256sum -cを実施 - バージョン:
VERSION.txtに タグ名 + UTC 日付 を記録(配布物内)
Failure → Fix(失敗時の対処)¶
- 401/403(Release への upload 失敗)
contents: write権限 /GH_PAT_RELEASEのスコープ確認、またはGITHUB_TOKENに切替zipで失敗 /patches/*.shが存在しない- パッチ未運用のリポでは ガードを追加(例:
shopt -s nullglobまたはif ls patches/*.sh 2>/dev/null; then ... fi) - プリリリースタグで動かない
if: !contains(github.ref, '-')により除外。RC はworkflow_dispatchで手動実行- アセット重複 / 置換されない
append: trueは 追記。置換が必要ならアップロード前に 同名アセット削除のステップを追加VERSION.txtの欠落- タグ以外(手動実行)では生成されない。必要なら
workflow_dispatchに入力パラメータを設けて注入
運用ノート / ベストプラクティス¶
- 並行実行制御(任意):古い実行をキャンセル
concurrency:
group: release-tar-${{ github.ref }}
cancel-in-progress: true
- サイズと内容の見直し:tar に 不要なファイル(テスト・ドキュメント)を含めない
- 再現性:
-euxo pipefailにより失敗を早期検出、アーカイブの 生成順/権限も定期チェック - 安全性:配布物に 秘密情報や内部設定を含めない(例:
/etc/signage/secret.envの類は収録しない) - 一貫性:
update_runner側の 期待パス/ファイル名 と変更がないか PR でレビュー必須