diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d0cb88c2e9798..2b31de38d203a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,8 @@ concurrency: jobs: # Skips jobs a pull request cannot affect: a web change does not run the - # server shards, a server change does not run the mobile tests, and the macOS - # lint (~6.7x a Linux minute) runs only for native mobile sources. + # server shards, and a server change does not run the mobile tests. + # T3-CUSTOM(expbkt3): Native mobile lint is manual; CI needs no macOS runner. # .github/scripts/ci-changes.cjs maps changed files to workspace packages and # their dependents. Pushes to main still run every Linux job. Detection fails # open: if the diff cannot be resolved, everything runs. @@ -33,7 +33,6 @@ jobs: test_server: ${{ steps.detect.outputs.test_server }} rust: ${{ steps.detect.outputs.rust }} release_smoke: ${{ steps.detect.outputs.release_smoke }} - mobile_native: ${{ steps.detect.outputs.mobile_native }} steps: # Only the package manifests the script reads to build the dependency graph. # Depth 2 brings the base commit the change is diffed against. @@ -464,36 +463,6 @@ jobs: cargo test --locked --manifest-path "native/$crate/Cargo.toml" done - mobile_native_static_analysis: - name: Mobile Native Static Analysis - needs: changes - if: ${{ !cancelled() && needs.changes.outputs.mobile_native != 'false' }} - runs-on: blacksmith-6vcpu-macos-26 - timeout-minutes: 25 - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - sparse-checkout: | - /* - !/.repos/ - sparse-checkout-cone-mode: false - - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 - with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=@t3tools/scripts... - - - name: Install mobile native static analysis tools - run: brew bundle install --file apps/mobile/Brewfile - - - name: Lint mobile native sources - run: vp run lint:mobile - release_smoke: name: Release Smoke needs: changes @@ -524,18 +493,8 @@ jobs: check: name: Check if: ${{ always() }} - needs: - [ - changes, - lint, - build, - test, - test_web, - test_server, - rust, - mobile_native_static_analysis, - release_smoke, - ] + # T3-CUSTOM(expbkt3): Native mobile lint is not a dependency of Check. + needs: [changes, lint, build, test, test_web, test_server, rust, release_smoke] runs-on: ubuntu-24.04 timeout-minutes: 5 steps: @@ -545,10 +504,10 @@ jobs: run: | echo "$RESULTS" | jq -r 'to_entries[] | "\(.key): \(.value.result)"' # A job may skip only when `changes` said every gate it represents was - # not needed. Gates are keyed by job name, except merged Build and the - # macOS lint. + # not needed. Gates are keyed by job name, except merged Build. + # T3-CUSTOM(expbkt3): The native mobile lint job is removed in this fork. echo "$RESULTS" | jq -e '.changes.outputs as $gates - | {build: ["build", "typecheck"], mobile_native_static_analysis: ["mobile_native"]} as $renamed + | {build: ["build", "typecheck"]} as $renamed | all(to_entries[]; .value.result == "success" or (.value.result == "skipped" diff --git a/docs/operations/android-notifications.md b/docs/operations/android-notifications.md index aa29ef3e1a7b4..097294772b5b7 100644 --- a/docs/operations/android-notifications.md +++ b/docs/operations/android-notifications.md @@ -16,7 +16,9 @@ The native notification tests cover API 24, 26, 33 and 36 (plus API 25 for legac ./gradlew :t3-agent-notifications:testDebugUnitTest :t3-agent-notifications:lintRelease -Pandroid.lint.useK2Uast=false ``` -Robolectric's API 36 runtime requires JDK 21; module compilation still uses Expo's Java 17 toolchain. The existing Mobile Native Static Analysis job separately runs ktlint and detekt. The native fingerprint check marks this change as requiring a new binary; the production workflow cannot deliver it to an older binary by OTA. Settings disable Android notifications if the installed native module is missing required methods. + + +Robolectric's API 36 runtime requires JDK 21; module compilation still uses Expo's Java 17 toolchain. Run `vp run lint:mobile` manually to run ktlint and detekt; CI does not run native mobile static analysis in this fork. The native fingerprint check marks this change as requiring a new binary; the production workflow cannot deliver it to an older binary by OTA. Settings disable Android notifications if the installed native module is missing required methods. The lint command uses the K1 frontend because AGP's K2 frontend crashes while analyzing Worklets 0.10's Gradle Kotlin scripts. This does not disable lint checks. Live Update eligibility must be verified on a device: Robolectric's API 36 image implements older promotion rules that require colorization, while shipped Live Updates require uncolorized notifications. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 195c65694b3cf..dd8725d8fb9ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -260,6 +260,8 @@ catalogs: overrides: expo-modules-core: 58.0.22 + '@expo/fingerprint': 0.21.5 + expo-network: 58.0.3 '@exodus/bytes>@noble/hashes': 1.8.0 '@react-navigation/core': 7.24.0 dbus-next>usocket: '-' @@ -679,7 +681,7 @@ importers: specifier: ~58.0.13 version: 58.0.13(expo@58.0.14)(react-native@0.88.0(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.88.0(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@19.3.0)(supports-color@8.1.1)(typescript@7.0.2) expo-network: - specifier: ~58.0.3 + specifier: 58.0.3 version: 58.0.3(patch_hash=cd09b6d1744dde4efa081b5619ebcff38877d98f7502a51cab121629dece8237)(expo@58.0.14)(react@19.3.0) expo-notifications: specifier: ~58.1.5 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 24afc13b72281..6917fb8010529 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -226,6 +226,9 @@ overrides: # Keep on the patched version. A fresh resolution would take a newer release and # fail on the unused patch. Move this with patches/expo-modules-core@*.patch. expo-modules-core: 58.0.22 + # T3-CUSTOM(expbkt3): Keep fresh release installs on the existing patched versions. + "@expo/fingerprint": 0.21.5 + expo-network: 58.0.3 # Keep jsdom's optional peer consistent so Vite+ has one test-runner instance. "@exodus/bytes>@noble/hashes": "1.8.0" # Earlier React Navigation declarations create a circular type alias in TypeScript 7.