Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 7 additions & 48 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -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"
Expand Down
4 changes: 3 additions & 1 deletion docs/operations/android-notifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
<!-- T3-CUSTOM(expbkt3): Native mobile lint is manual in this fork. -->

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.

Expand Down
4 changes: 3 additions & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading