Skip to content

main の更新ごとに app.jar を配布しスクリプトを自己更新する - #51

Merged
Atsumi3 merged 5 commits into
mainfrom
claude/app-jar-release-output-m2pekn
Aug 24, 2026
Merged

main の更新ごとに app.jar を配布しスクリプトを自己更新する#51
Atsumi3 merged 5 commits into
mainfrom
claude/app-jar-release-output-m2pekn

Conversation

@Atsumi3

@Atsumi3 Atsumi3 commented Aug 24, 2026

Copy link
Copy Markdown
Member

背景

Raspberry Pi の update-app.sh が取得していた app.jar は、api.yaml が変更されたときだけ発火するワークフローで作られていたため、main の最新コードとは限りませんでした。またラズパイ側スクリプト自体を更新する仕組みがありませんでした。

変更内容

  • main への push(と手動実行)で app.jar と kidspos-scripts.tar.gz を添付した server-v* リリースを自動作成する Release Server ワークフローを追加
  • app.jar の配布元を一本化するため generate-sdk.yml から app.jar のビルドとアップロードを削除
  • update-app.sh がリリース同梱のスクリプトで自身と doctor.sh、upload-apk.sh を差し替えるようにする
    • 差し替えは APK の確認より前に行い、新しい内容は次回実行から反映される
    • 実行中のスクリプトを壊さないよう /opt/kidspos 配下に展開して mv で差し替える
    • 適用済みバージョンは .installed-scripts-version に記録し、全て差し替えできたときだけ記録する
    • 取得や展開に失敗しても警告のみでサーバーの更新は成功扱い
    • オフライン更新時とロールバック時は実行しない
    • --skip-self-update で無効化できる
  • releases/latest/download/app.jar が使えなくなるため、README と デプロイガイドのオフライン手順を releases API から app.jar 付きの最新リリースを探す方式に変更

タグについて

ローリングタグは使えません。update-app.sh は tag_name と .installed-version の一致で更新をスキップするため、タグが不変だと二度と更新されなくなります。server-v{version}.{run_number} のユニークタグにしています。

テスト

  • scripts/raspberry-pi/test-update-app.sh に自己更新のテストを 11 件追加(差し替え成功、APK 同期より前に実行、jar が最新でもスクリプトは更新、バージョン一致でスキップ、フラグでスキップ、アセット無しでスキップ、取得失敗、展開失敗、部分的な配布物はバージョン未記録、オフライン更新時はスキップ、ロールバック時は未実行)
  • test-update-app.sh: passed 104 / failed 0
  • test-install.sh 65 件、test-doctor.sh 50 件、test-upload-apk.sh 51 件 いずれも failed 0

注意

このリリースワークフローはマージ後の main への push で初めて発火します。自己更新はスクリプトが配置された次の実行から効くため、初回だけは install.sh の再実行かスクリプトの手動配置が必要です。


Generated by Claude Code

- 時刻同期後に fake-hwclock へ保存し、RTC のない Raspberry Pi で
  再起動時に時刻が巻き戻るのを防ぐ
- 選択商品のバーコード PDF もキャッシュ対象にし、枠線あり版も
  起動時にウォームアップ。商品の追加・更新・削除をイベントで受けて
  キャッシュを作り直す
- Danger Zone のパスワード照合に接続元ごとのレート制限を追加。
  連続失敗が上限に達している間は照合せず 429 と Retry-After を返す
update-app.sh の最後で upload-apk.sh を呼び、jar が同一バージョンで
早期終了する場合も APK の確認だけは行う。
APK の登録に失敗してもサーバーの更新は成功扱いにし、警告のみ出す。
オフライン更新(jar のパス指定)と --skip-apk 指定時は確認しない。
- main への push で app.jar と kidspos-scripts.tar.gz を添付した server-v* リリースを自動作成する Release Server ワークフローを追加
- app.jar の配布元を一本化するため generate-sdk.yml からは app.jar を外す
- update-app.sh がリリース同梱のスクリプトで自身と doctor.sh、upload-apk.sh を差し替えるようにする(--skip-self-update で無効化可能)
- 自己更新のテスト 11 件を追加(計 104 assertions)
- releases/latest/download/app.jar が使えなくなるためオフライン手順を releases API 経由に変更
@github-actions

Copy link
Copy Markdown
Contributor

🎨 Visual Regression Test Results

All visual regression tests passed!

All page screenshots match the expected baselines.

📊 Test Coverage

  • Desktop (1280x720)
  • Tablet (iPad)
  • Mobile (iPhone 13)

@Atsumi3
Atsumi3 merged commit 4e9598c into main Aug 24, 2026
7 checks passed
@Atsumi3
Atsumi3 deleted the claude/app-jar-release-output-m2pekn branch August 24, 2026 16:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant