From 9f09fc1042737f95abd098a8fc153866b1e5cdf4 Mon Sep 17 00:00:00 2001 From: tianma-if Date: Mon, 21 Sep 2026 00:11:41 +0800 Subject: [PATCH] fix(ios): require Japanese App Store What's New before review The 1.79.0 listing includes ja, so Fastlane rejected submit_review when release-summary.json had no Japanese notes. Fail in store-delivery and Fastfile instead of creating a stuck draft. --- .github/workflows/store-delivery.yml | 11 +++++++---- apps/ios/fastlane/Fastfile | 10 ++++++++-- scripts/store-delivery.test.mjs | 2 ++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/store-delivery.yml b/.github/workflows/store-delivery.yml index 5f07b0fd..55255911 100644 --- a/.github/workflows/store-delivery.yml +++ b/.github/workflows/store-delivery.yml @@ -352,10 +352,13 @@ jobs: }; write("notes_en", join(summary.changes?.["en-US"])); write("notes_zh", join(summary.changes?.["zh-CN"])); - write( - "notes_ja", - join(summary.changes?.ja || summary.changes?.["ja-JP"]), - ); + const notesJa = join(summary.changes?.ja || summary.changes?.["ja-JP"]); + if (!notesJa) { + throw new Error( + "release-summary.json is missing Japanese What's New (ja or ja-JP). Pass --change-locale ja:...", + ); + } + write("notes_ja", notesJa); NODE - name: Set up Ruby and fastlane diff --git a/apps/ios/fastlane/Fastfile b/apps/ios/fastlane/Fastfile index 5833050c..1f120613 100644 --- a/apps/ios/fastlane/Fastfile +++ b/apps/ios/fastlane/Fastfile @@ -11,8 +11,14 @@ platform :ios do notes_en = ENV["APP_STORE_RELEASE_NOTES_EN"].to_s.strip has_notes = notes_zh != "" && notes_en != "" release_notes = has_notes ? { "zh-Hans" => notes_zh, "en-US" => notes_en } : nil - if has_notes && ENV["APP_STORE_RELEASE_NOTES_JA"].to_s.strip != "" - release_notes["ja"] = ENV.fetch("APP_STORE_RELEASE_NOTES_JA") + if has_notes + notes_ja = ENV["APP_STORE_RELEASE_NOTES_JA"].to_s.strip + if notes_ja == "" + UI.user_error!( + "APP_STORE_RELEASE_NOTES_JA is required because the App Store listing includes Japanese What's New.", + ) + end + release_notes["ja"] = notes_ja end api_key = app_store_connect_api_key( diff --git a/scripts/store-delivery.test.mjs b/scripts/store-delivery.test.mjs index de0cb72d..c00ee522 100644 --- a/scripts/store-delivery.test.mjs +++ b/scripts/store-delivery.test.mjs @@ -86,6 +86,7 @@ describe("store delivery command", () => { "APP_STORE_BUILD_NUMBER: ${{ steps.ios_build.outputs.build_number }}", ); expect(workflow).toContain("APP_STORE_RELEASE_NOTES_EN:"); + expect(workflow).toContain("missing Japanese What's New"); expect(workflow).not.toContain( "Pass ios_build_number; do not build from apps/mobile or EAS.", ); @@ -111,6 +112,7 @@ describe("store delivery command", () => { "utf8", ); expect(fastfile).toContain("precheck_include_in_app_purchases: false"); + expect(fastfile).toContain("APP_STORE_RELEASE_NOTES_JA is required"); }); test("replaces the GitHub APK with the Play-signed universal APK", () => {