From f9b46105a732c02076690aeb93e023ffd3a61534 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 22 May 2026 18:39:35 -0700 Subject: [PATCH 1/4] fix(mobile): Xcode 26 SDK for iOS upload + hermesc path for Android MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two real failures surfaced in run 26319345276 after the displayer fix in #14394 made fastlane log altool errors again: ### iOS RC + Prod — Apple now requires iOS 26 SDK altool 409 Validation failed: This app was built with the iOS 18.5 SDK. All iOS and iPadOS apps must be built with the iOS 26 SDK or later, included in Xcode 26 or later, in order to be uploaded to App Store Connect or submitted for distribution. (ID: 287c542e-…) The `macos-15` runners default to Xcode 16.4 (iOS 18.5 SDK). Switch both iOS upload jobs to `macos-26` (Tahoe, GA), which has Xcode 26 as the only supported major. ### Android RC + Prod — hermesc location anchored at the wrong root Couldn't determine Hermesc location. Please set `react.hermesCommand` to the path of the hermesc binary file. node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc The previous PR restored `react.root` to its default (`../..` = `packages/mobile`) to fix the Hermes JS bundle's entryFile lookup. The same plugin uses `root` to detect the prebuilt hermesc binary (PathUtils.kt#detectOSAwareHermesCommand) and only checks `root/node_modules/react-native/sdks/hermesc/...`. Since RN is hoisted to the monorepo node_modules, that lookup fails. Set `react.hermesCommand` explicitly to the hoisted prebuilt path: $rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc The `%OS-BIN%` placeholder is substituted at runtime by the plugin to `linux64-bin` / `osx-bin` / `win64-bin` as appropriate. Verified those bin directories exist in node_modules/react-native/sdks/hermesc/ in this branch. ### Housekeeping - `Gemfile.lock` dependency line aligned to `= 2.234.0` to match the Gemfile pin from #14394 (the squash-merge left the lock at the pre-pin `>= 2.228.0` constraint). - Bump versions to re-fire the build matrix: `1.5.182 -> 1.5.183`, iOS `1.1.195 -> 1.1.196`, Android `1.1.531 -> 1.1.532`. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/mobile.yml | 4 ++-- packages/mobile/android/app/build.gradle | 9 +++++++-- packages/mobile/ios/AudiusReactNative/Info.plist | 2 +- packages/mobile/ios/Gemfile.lock | 2 +- packages/mobile/package.json | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 8fa9dfdf0f6..dbd607c362b 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -432,7 +432,7 @@ jobs: # iOS Release Candidate: Build and upload mobile-build-upload-releasecandidate-ios: name: iOS Release Candidate Build & Upload - runs-on: macos-15 + runs-on: macos-26 needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' steps: @@ -834,7 +834,7 @@ jobs: # iOS Production: Build and upload (requires approval) mobile-build-upload-production-ios-main: name: iOS Production Build & Upload - runs-on: macos-15 + runs-on: macos-26 needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' environment: diff --git a/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle index fed87da48fb..1cd55af265e 100755 --- a/packages/mobile/android/app/build.gradle +++ b/packages/mobile/android/app/build.gradle @@ -46,7 +46,12 @@ react { // extraPackagerArgs = [] /* Hermes Commands */ // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // The RN Gradle plugin's hermesc lookup is anchored at `root` and only + // considers `root/node_modules/react-native/sdks/hermesc/...`. Since RN + // is hoisted to the monorepo node_modules, that lookup fails. Point the + // plugin at the hoisted prebuilt hermesc explicitly (%OS-BIN% is + // substituted by the plugin at runtime). + hermesCommand = "$rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc" // // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] @@ -129,7 +134,7 @@ android { // versionCode is automatically incremented in CI versionCode 1 // Make sure this is above the currently released Android version in the play store if your changes touch native code: - versionName "1.1.531" + versionName "1.1.532" resValue "string", "build_config_package", "co.audius.app" resConfigs "en" } diff --git a/packages/mobile/ios/AudiusReactNative/Info.plist b/packages/mobile/ios/AudiusReactNative/Info.plist index 524bbc7e0d3..cf346526a9f 100644 --- a/packages/mobile/ios/AudiusReactNative/Info.plist +++ b/packages/mobile/ios/AudiusReactNative/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.195 + 1.1.196 CFBundleSignature ???? CFBundleURLTypes diff --git a/packages/mobile/ios/Gemfile.lock b/packages/mobile/ios/Gemfile.lock index 36ac3909a34..a2d9dbeecd3 100644 --- a/packages/mobile/ios/Gemfile.lock +++ b/packages/mobile/ios/Gemfile.lock @@ -302,7 +302,7 @@ DEPENDENCIES bigdecimal cocoapods (>= 1.13, != 1.15.1, != 1.15.0) concurrent-ruby (< 1.3.4) - fastlane (>= 2.228.0) + fastlane (= 2.234.0) fastlane-plugin-versioning logger mutex_m diff --git a/packages/mobile/package.json b/packages/mobile/package.json index e6d2f852f70..0b8c212f49c 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.182", + "version": "1.5.183", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug", From 5c33422d06568f47b1ea6cf369445d0d0e7040a4 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 22 May 2026 19:09:29 -0700 Subject: [PATCH 2/4] fix(mobile): track-player RN0.79 compat + fmt consteval for Xcode 26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After #14396 the Hermesc + Xcode 26 runner fixes both worked. The binary build matrix now actually compiles, and surfaced two remaining upstream-library incompatibilities with React Native 0.79 + Xcode 26. ### Android RC + Prod — react-native-track-player onBind signature Kotlin compile failed on the bundled `react-native-track-player`: e: .../trackplayer/service/MusicService.kt:764:5 'onBind' overrides nothing. RN 0.79's HeadlessJsTaskService now declares: override fun onBind(intent: Intent): IBinder? = null ^^^^^^ ^^^^^^^^^^ react-native-track-player 4.0.1 still has the old signature: override fun onBind(intent: Intent?): IBinder ^^^^^^^ ^^^^^^^ Kotlin parameter types must match the override exactly (return types can be covariant, parameter types cannot). 4.1.2 already matches RN 0.79's signature, so bumping the dep is the fix. packages/mobile/package.json: 4.0.1 -> 4.1.2 package-lock.json regenerated. ### iOS RC + Prod — fmt consteval error under Xcode 26 / Apple Clang xcodebuild archive failed on the fmt Pod: Pods/fmt/include/fmt/format-inl.h:59: error: call to consteval function 'fmt::basic_format_string<...>' is not a constant expression 59 | fmt::format_to(it, FMT_STRING("{}{}"), message, SEP); RN 0.79 pins fmt 11.0.2 via third-party-podspecs/fmt.podspec. Apple Clang in Xcode 26 enforces stricter consteval evaluation than the version 11.0.2 was written against. Fixed upstream in fmt 11.1+ (RN 0.80 picks up the newer fmt); for 0.79 the workaround is to define FMT_USE_CONSTEVAL=0 on the fmt target, falling back to the constexpr implementation. Add a Podfile post_install hook that injects the define for the fmt target only. CI's existing `bundle exec pod install` step will pick up the change without lockfile churn. ### Re-trigger the release flow - packages/mobile/package.json: 1.5.183 -> 1.5.184 - iOS Info.plist CFBundleShortVersionString: 1.1.196 -> 1.1.197 - Android versionName: 1.1.532 -> 1.1.533 Co-Authored-By: Claude Opus 4.7 --- package-lock.json | 47 ++++++++++--------- packages/mobile/android/app/build.gradle | 2 +- .../mobile/ios/AudiusReactNative/Info.plist | 2 +- packages/mobile/ios/Podfile | 16 +++++++ packages/mobile/package.json | 4 +- 5 files changed, 45 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 64b2bda8be6..4cfbf46fdf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5754,7 +5754,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -87388,6 +87387,29 @@ "react-native-pager-view": ">= 6.0.0" } }, + "node_modules/react-native-track-player": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/react-native-track-player/-/react-native-track-player-4.1.2.tgz", + "integrity": "sha512-cIgMlqVJx/95hirUWPRW8CHxiBFj9Rjl/voKHh2jF/2URYMTQyt76t/m2FKvjeYUW2doKv4QSCBIOUmtyDLtJw==", + "license": "Apache-2.0", + "funding": { + "url": "https://github.com/doublesymmetry/react-native-track-player?sponsor=1" + }, + "peerDependencies": { + "react": ">=16.8.6", + "react-native": ">=0.60.0-rc.2", + "react-native-windows": ">=0.63.0", + "shaka-player": "^4.7.9" + }, + "peerDependenciesMeta": { + "react-native-windows": { + "optional": true + }, + "shaka-player": { + "optional": true + } + } + }, "node_modules/react-native-version-number": { "version": "0.3.6", "license": "MIT" @@ -127552,7 +127574,7 @@ }, "packages/mobile": { "name": "@audius/mobile", - "version": "1.5.180", + "version": "1.5.183", "dependencies": { "@amplitude/analytics-react-native": "1.4.11", "@audius/common": "*", @@ -127661,7 +127683,7 @@ "react-native-svg": "^15.11.2", "react-native-svg-transformer": "1.5.0", "react-native-tab-view": "4.2.0", - "react-native-track-player": "4.0.1", + "react-native-track-player": "4.1.2", "react-native-url-polyfill": "2.0.0", "react-native-version-number": "0.3.6", "react-native-video": "6.18.0", @@ -130071,25 +130093,6 @@ "react-native": "*" } }, - "packages/mobile/node_modules/react-native-track-player": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/react-native-track-player/-/react-native-track-player-4.0.1.tgz", - "integrity": "sha512-DpqKL4TQS0kGlHwEtmMrL++mdgWb+uc75eQiP3vfYSlgvAJjbXbkL9h+cofndSuq4TTCp8jclAK+hZKqtMw6+A==", - "license": "Apache-2.0", - "funding": { - "url": "https://github.com/doublesymmetry/react-native-track-player?sponsor=1" - }, - "peerDependencies": { - "react": ">=16.8.6", - "react-native": ">=0.60.0-rc.2", - "react-native-windows": ">=0.63.0" - }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } - } - }, "packages/mobile/node_modules/react-native-url-polyfill": { "version": "2.0.0", "license": "MIT", diff --git a/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle index 1cd55af265e..589fb130426 100755 --- a/packages/mobile/android/app/build.gradle +++ b/packages/mobile/android/app/build.gradle @@ -134,7 +134,7 @@ android { // versionCode is automatically incremented in CI versionCode 1 // Make sure this is above the currently released Android version in the play store if your changes touch native code: - versionName "1.1.532" + versionName "1.1.533" resValue "string", "build_config_package", "co.audius.app" resConfigs "en" } diff --git a/packages/mobile/ios/AudiusReactNative/Info.plist b/packages/mobile/ios/AudiusReactNative/Info.plist index cf346526a9f..186ccefd4dd 100644 --- a/packages/mobile/ios/AudiusReactNative/Info.plist +++ b/packages/mobile/ios/AudiusReactNative/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.196 + 1.1.197 CFBundleSignature ???? CFBundleURLTypes diff --git a/packages/mobile/ios/Podfile b/packages/mobile/ios/Podfile index 3d5fc4dfe6b..f614fee63a6 100644 --- a/packages/mobile/ios/Podfile +++ b/packages/mobile/ios/Podfile @@ -97,6 +97,22 @@ target 'AudiusReactNative' do end end + # Xcode 26 / Apple Clang enforces stricter consteval evaluation, which + # breaks the fmt 11.0.2 that React Native 0.79 pins: + # Pods/fmt/include/fmt/format-inl.h:59: error: call to consteval + # function 'fmt::basic_format_string<...>' is not a constant expression + # FMT_USE_CONSTEVAL=0 forces the constexpr fallback. Fixed upstream in + # fmt 11.1+ / RN 0.80; this is a stopgap until we upgrade RN. + installer.pods_project.targets.each do |target| + next unless target.name == 'fmt' + target.build_configurations.each do |config| + defs = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] || ['$(inherited)'] + defs = [defs] unless defs.is_a?(Array) + defs << 'FMT_USE_CONSTEVAL=0' unless defs.include?('FMT_USE_CONSTEVAL=0') + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = defs + end + end + end end diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 0b8c212f49c..02574955bc7 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.183", + "version": "1.5.184", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug", @@ -149,7 +149,7 @@ "react-native-svg": "^15.11.2", "react-native-svg-transformer": "1.5.0", "react-native-tab-view": "4.2.0", - "react-native-track-player": "4.0.1", + "react-native-track-player": "4.1.2", "react-native-url-polyfill": "2.0.0", "react-native-version-number": "0.3.6", "react-native-video": "6.18.0", From 8f8a81a716c75f80818e48a9d70bd3d5c4befaef Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Tue, 26 May 2026 13:34:26 -0700 Subject: [PATCH 3/4] fix(mobile): patch fmt 11.0.2 for Xcode 26 + make Android S3 archive non-fatal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two follow-ups from run 26471836695. The previous PR (#14397) bumped react-native-track-player to 4.1.2 and pinned the hermesc path — both worked end-to-end (Android gradle build went green in 8m 30s, iOS made it deep into archive). Two real blockers remain: ### iOS — fmt 11.0.2 ignores -DFMT_USE_CONSTEVAL=0 My previous attempt added FMT_USE_CONSTEVAL=0 to the fmt target's GCC_PREPROCESSOR_DEFINITIONS. It didn't take effect because fmt 11.0.2 does NOT guard its FMT_USE_CONSTEVAL detection block with `#ifndef FMT_USE_CONSTEVAL`. The `#if !defined(__cpp_lib_is_constant_evaluated)` elif chain in include/fmt/base.h unconditionally redefines the macro, clobbering the -D flag. (fmt 11.2.0+ adds the ifndef guard; fmtlib/fmt#4477 / RN PR #56225 backports fmt 12.1.0 to 0.83-stable.) Switch to patching the source instead. The detection chain already has an Apple-specific carve-out: #elif defined(__apple_build_version__) && __apple_build_version__ < 14000029L # define FMT_USE_CONSTEVAL 0 // consteval is broken in Apple clang < 14. Drop the `< 14000029L` clause via Podfile post_install so consteval is disabled for ALL Apple Clang builds, including Xcode 26's Apple Clang 17. fmt falls back to constexpr (same code path that was used pre-Xcode-14), which compiles cleanly. ### Android — aws s3 archive is best-effort Android gradle build succeeded; both jobs (RC + Prod) failed at the post-build artifact archive: fatal error: An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist Buckets s3://audius-mobile and s3://audius-mobile-releasecandidate do not exist in us-east-1 (or the CI credentials no longer have access). The S3 sync is a side-archive of `app/build/outputs/` and is not required for shipping to the Play Store via `upload_to_play_store` (which runs immediately after). Append `|| true` to the sync command so a missing/inaccessible bucket doesn't fail the lane. If the side-archive is actually needed, restoring it is a separate (ops) follow-up. ### Re-trigger the release flow - packages/mobile/package.json: 1.5.184 -> 1.5.185 - iOS Info.plist CFBundleShortVersionString: 1.1.197 -> 1.1.198 - Android versionName: 1.1.533 -> 1.1.534 Co-Authored-By: Claude Opus 4.7 --- packages/mobile/android/app/build.gradle | 2 +- packages/mobile/android/fastlane/Fastfile | 5 ++- .../mobile/ios/AudiusReactNative/Info.plist | 2 +- packages/mobile/ios/Podfile | 35 +++++++++++++------ packages/mobile/package.json | 2 +- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle index 589fb130426..250af6db7bf 100755 --- a/packages/mobile/android/app/build.gradle +++ b/packages/mobile/android/app/build.gradle @@ -134,7 +134,7 @@ android { // versionCode is automatically incremented in CI versionCode 1 // Make sure this is above the currently released Android version in the play store if your changes touch native code: - versionName "1.1.533" + versionName "1.1.534" resValue "string", "build_config_package", "co.audius.app" resConfigs "en" } diff --git a/packages/mobile/android/fastlane/Fastfile b/packages/mobile/android/fastlane/Fastfile index d12682fd9db..677bff89a9b 100644 --- a/packages/mobile/android/fastlane/Fastfile +++ b/packages/mobile/android/fastlane/Fastfile @@ -99,7 +99,10 @@ platform :android do sh("cd ../../../../ && echo \"yes\" | sdkmanager \"platforms;android-30\" && cd packages/mobile/android && ./gradlew #{taskName}") sh("cd ../../../../ && sudo pip install awscli") - sh("cd ../../../../ && aws s3 sync packages/mobile/android/app/build/outputs s3://#{remoteDirectory}/android --delete") + # Side-archive of build outputs to S3. The bucket may not exist or + # the runner's credentials may lack access; never let that block + # the Play Store upload below. + sh("cd ../../../../ && aws s3 sync packages/mobile/android/app/build/outputs s3://#{remoteDirectory}/android --delete || true") upload_to_play_store( track: options[:track], package_name: packageName, diff --git a/packages/mobile/ios/AudiusReactNative/Info.plist b/packages/mobile/ios/AudiusReactNative/Info.plist index 186ccefd4dd..e9ba1818dd7 100644 --- a/packages/mobile/ios/AudiusReactNative/Info.plist +++ b/packages/mobile/ios/AudiusReactNative/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.197 + 1.1.198 CFBundleSignature ???? CFBundleURLTypes diff --git a/packages/mobile/ios/Podfile b/packages/mobile/ios/Podfile index f614fee63a6..d8809906e77 100644 --- a/packages/mobile/ios/Podfile +++ b/packages/mobile/ios/Podfile @@ -97,19 +97,34 @@ target 'AudiusReactNative' do end end - # Xcode 26 / Apple Clang enforces stricter consteval evaluation, which + # Xcode 26 / Apple Clang 17 enforces stricter consteval evaluation, which # breaks the fmt 11.0.2 that React Native 0.79 pins: # Pods/fmt/include/fmt/format-inl.h:59: error: call to consteval # function 'fmt::basic_format_string<...>' is not a constant expression - # FMT_USE_CONSTEVAL=0 forces the constexpr fallback. Fixed upstream in - # fmt 11.1+ / RN 0.80; this is a stopgap until we upgrade RN. - installer.pods_project.targets.each do |target| - next unless target.name == 'fmt' - target.build_configurations.each do |config| - defs = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] || ['$(inherited)'] - defs = [defs] unless defs.is_a?(Array) - defs << 'FMT_USE_CONSTEVAL=0' unless defs.include?('FMT_USE_CONSTEVAL=0') - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = defs + # + # In fmt 11.0.2's include/fmt/base.h, the FMT_USE_CONSTEVAL detection + # block is NOT guarded by `#ifndef FMT_USE_CONSTEVAL`, so passing + # `-DFMT_USE_CONSTEVAL=0` is clobbered by the elif chain. The chain has + # an Apple-specific carve-out: + # #elif defined(__apple_build_version__) && __apple_build_version__ < 14000029L + # #define FMT_USE_CONSTEVAL 0 // consteval is broken in Apple clang < 14. + # which used to trip the disable for old Apple Clang but lets Xcode 26 + # through. + # + # Patch the source to drop the `< 14000029L` clause so consteval is + # disabled for ALL Apple Clang builds, falling back to constexpr. This + # matches the behavior on the old runner and matches what RN's own + # backport does at the version-bump level (fmt 12.1.0, RN PR #56225). + fmt_base_h = File.join(__dir__, 'Pods/fmt/include/fmt/base.h') + if File.exist?(fmt_base_h) + text = File.read(fmt_base_h) + patched = text.gsub( + '#elif defined(__apple_build_version__) && __apple_build_version__ < 14000029L', + '#elif defined(__apple_build_version__)' + ) + if patched != text + File.write(fmt_base_h, patched) + Pod::UI.puts "Patched Pods/fmt/include/fmt/base.h: disable consteval for all Apple Clang (Xcode 26 fmt 11.0.2 compat)".green end end diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 02574955bc7..529c38de4e1 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.184", + "version": "1.5.185", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug", From ed2027410cc25f19f914a460b25005c154db123a Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Wed, 27 May 2026 11:24:07 -0700 Subject: [PATCH 4/4] ci(mobile): drop orphaned S3 sync + awscli install from Android lane MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The S3 sync at android/fastlane/Fastfile lines 101-102 was introduced in #2913 (Mar 2023, "OTA Updates CI Flow") as the artifact-archive step that fed the original CodePush OTA backend. CodePush itself was removed in #11708 (May 2025, "Remove code-push") but this step was left orphaned. The current OTA pipeline (Mobile OTA Release jobs in mobile.yml) talks to a separate OTA backend at download.audius.co/ mobile-ota via `npx code-push release` from packages/mobile/ — it does not read from these S3 buckets. The buckets s3://audius-mobile{,-releasecandidate,-staging,-staging- releasecandidate} have already been turned down (run 26471836695 fails with NoSuchBucket), confirming no consumer remains. Remove the dead code instead of papering over with `|| true`: - android/fastlane/Fastfile: - drop `sudo pip install awscli` step - drop `aws s3 sync … s3://…/android --delete` step - drop the four `remoteDirectory = '…'` assignments (only used by the removed sync) - .github/workflows/mobile.yml: - drop `Configure AWS credentials` from `Android Release Candidate Build & Upload` and `Android Production Build & Upload` (only consumer was the now-removed sync). OTA jobs still configure their own AWS credentials. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/mobile.yml | 14 -------------- packages/mobile/android/fastlane/Fastfile | 9 --------- 2 files changed, 23 deletions(-) diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index dbd607c362b..cd0560df4f9 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -806,13 +806,6 @@ jobs: du -sh ~/.android/sdk 2>/dev/null || echo "Default SDK path not found" fi - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Release Android (Release Candidate) timeout-minutes: 60 env: @@ -1192,13 +1185,6 @@ jobs: du -sh ~/.android/sdk 2>/dev/null || echo "Default SDK path not found" fi - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Release Android (Production) timeout-minutes: 60 env: diff --git a/packages/mobile/android/fastlane/Fastfile b/packages/mobile/android/fastlane/Fastfile index 677bff89a9b..308e2d31903 100644 --- a/packages/mobile/android/fastlane/Fastfile +++ b/packages/mobile/android/fastlane/Fastfile @@ -70,19 +70,15 @@ platform :android do if packageName === PROD_PACKAGE taskName = 'bundleProdRelease' aab = './app/build/outputs/bundle/prodRelease/app-prod-release.aab' - remoteDirectory = 'audius-mobile' elsif packageName === RC_PROD_PACKAGE taskName = 'bundleReleaseCandidateRelease' aab = './app/build/outputs/bundle/releaseCandidateRelease/app-releaseCandidate-release.aab' - remoteDirectory = 'audius-mobile-releasecandidate' elsif packageName === RC_STAGING_PACKAGE taskName = 'bundleStagingReleaseCandidateRelease' aab = './app/build/outputs/bundle/stagingReleaseCandidateRelease/app-stagingReleaseCandidate-release.aab' - remoteDirectory = 'audius-mobile-staging-releasecandidate' elsif packageName === STAGING_PACKAGE taskName = 'bundleStagingRelease' aab = './app/build/outputs/bundle/stagingRelease/app-staging-release.aab' - remoteDirectory = 'audius-mobile-staging' end releasedVersion = getCurrentlyReleasedVersionName() buildFileVersion = getVersionNameFromBuildFile() @@ -98,11 +94,6 @@ platform :android do # generating the release apk & bundle sh("cd ../../../../ && echo \"yes\" | sdkmanager \"platforms;android-30\" && cd packages/mobile/android && ./gradlew #{taskName}") - sh("cd ../../../../ && sudo pip install awscli") - # Side-archive of build outputs to S3. The bucket may not exist or - # the runner's credentials may lack access; never let that block - # the Play Store upload below. - sh("cd ../../../../ && aws s3 sync packages/mobile/android/app/build/outputs s3://#{remoteDirectory}/android --delete || true") upload_to_play_store( track: options[:track], package_name: packageName,