Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: upgrade dependencies #535

Merged
merged 68 commits into from
Dec 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
4cc6bda
feat: upgrade and cleanup dependencies
KiwiKilian Dec 4, 2024
b98bf1e
feat: move types to optional peer dependencies
KiwiKilian Dec 5, 2024
44a7a25
chore: align gradle.properties with template
KiwiKilian Dec 5, 2024
2e864e5
chore: ignore all build directories from eslint
KiwiKilian Dec 5, 2024
e6aeb00
chore: reduce duplicate dependencies
KiwiKilian Dec 5, 2024
4b009a9
refactor: align node imports
KiwiKilian Dec 5, 2024
b5a9a39
ci: align working-directory
KiwiKilian Dec 5, 2024
ed70c1d
ci: fix working-directory
KiwiKilian Dec 5, 2024
9552bc1
ci: android try setup only in react-native-app
KiwiKilian Dec 5, 2024
67ae66e
ci: try again with default working-directory
KiwiKilian Dec 5, 2024
5444143
chore: keep jest for detox
KiwiKilian Dec 5, 2024
2d6b810
ci: try react-native build-android command
KiwiKilian Dec 5, 2024
4f218aa
ci: try running react-native through yarn
KiwiKilian Dec 5, 2024
131d1ff
ci: fix jest config e2e
KiwiKilian Dec 5, 2024
3f51dbc
ci: use npx for jest e2e
KiwiKilian Dec 5, 2024
9a04cbc
chore: upgrade ios example
KiwiKilian Dec 5, 2024
9cf5da7
ci: test maestro
KiwiKilian Dec 5, 2024
3edc27d
ci: try iPhone 15 Pro
KiwiKilian Dec 5, 2024
080a28e
ci: add maestro to path
KiwiKilian Dec 5, 2024
fe8978c
ci: debug maestro
KiwiKilian Dec 5, 2024
b007bdc
ci: test maestro path
KiwiKilian Dec 5, 2024
b3e96fd
ci: export path in test job
KiwiKilian Dec 5, 2024
c6238e2
chore: remove detox
KiwiKilian Dec 6, 2024
ff4993b
ci: use GITHUB_PATH
KiwiKilian Dec 6, 2024
c1882a9
ci: remove maestro version testing
KiwiKilian Dec 6, 2024
9d7516b
ci: setup cocoapods cache
KiwiKilian Dec 6, 2024
7f72647
ci: setup iOS build cache
KiwiKilian Dec 6, 2024
ca6f6f3
ci: separate iOS build and test
KiwiKilian Dec 6, 2024
c6a60d2
ci: improve cache keys
KiwiKilian Dec 6, 2024
abc195c
ci: fix cache and upload paths
KiwiKilian Dec 6, 2024
6689de0
ci: keep diretory structure for app
KiwiKilian Dec 6, 2024
ae85526
ci: fix pods path
KiwiKilian Dec 6, 2024
3002990
ci: debug pathes
KiwiKilian Dec 6, 2024
52f516b
ci: add Android app artifact
KiwiKilian Dec 6, 2024
d315f6e
ci: fix artifact download path
KiwiKilian Dec 6, 2024
23db283
ci: fix artifact download path
KiwiKilian Dec 6, 2024
78006cf
ci: add Android build cache
KiwiKilian Dec 6, 2024
97f4848
ci: fix android apk path
KiwiKilian Dec 6, 2024
812436c
ci: try without idb
KiwiKilian Dec 6, 2024
341a04b
ci: add Android test
KiwiKilian Dec 6, 2024
209753d
ci: use reactivecircus/android-emulator-runner@v2
KiwiKilian Dec 6, 2024
e5471bc
ci: fix android apk path
KiwiKilian Dec 6, 2024
2122b54
ci: align tests
KiwiKilian Dec 6, 2024
3f2a4eb
ci: fix apk path
KiwiKilian Dec 6, 2024
ff71fd8
test: adapt e2e test for Android
KiwiKilian Dec 6, 2024
552e45f
ci: improve android caching
KiwiKilian Dec 6, 2024
75bee7d
ci: add report upload
KiwiKilian Dec 6, 2024
671f2e8
chore: ignore report.xml
KiwiKilian Dec 6, 2024
ed38256
ci: test android workflows on macos
KiwiKilian Dec 6, 2024
e311fdc
ci: improve emulator setup
KiwiKilian Dec 6, 2024
842e723
Revert "ci: test android workflows on macos"
KiwiKilian Dec 6, 2024
b076b63
ci: keep default emulator setup
KiwiKilian Dec 6, 2024
d76bb05
ci: reorder jobs
KiwiKilian Dec 6, 2024
19dd210
ci: list emulators
KiwiKilian Dec 6, 2024
30b8f4e
ci: cache android virtual device
KiwiKilian Dec 6, 2024
048bacd
ci: remove avd list
KiwiKilian Dec 6, 2024
1381a95
ci: align emulator versions
KiwiKilian Dec 6, 2024
574d620
ci: change api-level
KiwiKilian Dec 6, 2024
8090c33
ci: try different profile
KiwiKilian Dec 6, 2024
b86bd63
ci: remove sdkmanager debugging
KiwiKilian Dec 6, 2024
f2b9019
fix: use old arch for RN example
KiwiKilian Dec 8, 2024
b7b0632
chore: fix typo
KiwiKilian Dec 8, 2024
63bf3fb
ci: separate Android and iOS workflow for arch matrix
KiwiKilian Dec 8, 2024
064d191
ci: adopt matrxi for tests
KiwiKilian Dec 8, 2024
eb0fa78
ci: move matrix to jobs
KiwiKilian Dec 8, 2024
53bc0d5
ci: shorten job names
KiwiKilian Dec 8, 2024
3361869
ci: add matrix to test name
KiwiKilian Dec 8, 2024
6d42265
ci: Podfile.lock needs update for new arch
KiwiKilian Dec 8, 2024
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
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
lib
build
1 change: 0 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
module.exports = {
root: true,
extends: ["universe/native"],
ignorePatterns: ["build"],
};
128 changes: 128 additions & 0 deletions .github/workflows/review-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
name: Android

on:
workflow_call:
# Review calls this Workflow

jobs:
build-android:
name: Build ${{ matrix.new-arch && 'new' || 'old'}} Arch
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/react-native-app
strategy:
matrix:
new-arch: [false, true]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Setup Azul Zulu OpenJDK
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 21
cache: gradle

- name: Cache Build
uses: actions/cache@v4
id: android-build-cache
with:
path: |
./android/build
./packages/react-native-app/android/.gradle
./packages/react-native-app/android/app/build
./packages/react-native-app/android/build
key: ${{ runner.os }}-android-build-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ github.workflow }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-android-build-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ github.workflow }}-${{ github.sha }}
${{ runner.os }}-android-build-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ github.workflow }}-

- name: Build
if: steps.android-build-cache.outputs.cache-hit != 'true'
run: yarn react-native build-android --mode release --tasks assembleRelease --extra-params "-PnewArchEnabled=${{ matrix.new-arch }}"

- name: Upload App
uses: actions/upload-artifact@v4
with:
name: android-app-${{ matrix.new-arch && 'new' || 'old' }}-arch
path: ./packages/react-native-app/android/app/build/outputs/apk/release/app-release.apk

test-android:
name: Test ${{ matrix.new-arch && 'new' || 'old'}} Arch
needs: [build-android]
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/react-native-app
strategy:
matrix:
new-arch: [false, true]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Enable KVM Group Permissions
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: Gradle cache
uses: gradle/actions/setup-gradle@v3

- name: Cache Virtual Device
uses: actions/cache@v4
id: android-virtual-device-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: android-virtual-device-api-level-33

- name: Create Virtual Device
if: steps.android-virtual-device-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 33
target: google_apis
arch: x86_64
force-avd-creation: false
working-directory: ./packages/react-native-app
script: echo "Generated Android Virtual Device Snapshot for Caching"

- name: Install Maestro
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> "$GITHUB_PATH"

- name: Download App
uses: actions/download-artifact@v4
with:
name: android-app-${{ matrix.new-arch && 'new' || 'old' }}-arch
path: ./packages/react-native-app/android/

- name: Run Tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 33
target: google_apis
arch: x86_64
force-avd-creation: false
working-directory: ./packages/react-native-app
script: |
adb install ./android/app-release.apk
maestro test ./e2e/show-map.yml --format junit

- name: Upload Report
if: always()
uses: actions/upload-artifact@v4
with:
name: Android Report ${{ matrix.new-arch && 'new' || 'old' }} Arch
path: |
./packages/react-native-app/report.xml
~/.maestro/tests/**/*
102 changes: 102 additions & 0 deletions .github/workflows/review-ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: iOS

on:
workflow_call:
# Review calls this Workflow

jobs:
build-ios:
name: Build ${{ matrix.new-arch && 'new' || 'old'}} Arch
runs-on: macos-latest
defaults:
run:
working-directory: ./packages/react-native-app
strategy:
matrix:
new-arch: [false, true]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Cache Cocoapods
uses: actions/cache@v4
id: cocoapods-cache
with:
path: ./packages/react-native-app/ios/Pods
key: ${{ runner.os }}-cocoapods-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ hashFiles('./packages/react-native-app/ios/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-cocoapods-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ hashFiles('./packages/react-native-app/ios/Podfile.lock') }}
${{ runner.os }}-cocoapods-${{ matrix.new-arch && 'new' || 'old' }}-arch-

- name: Install Cocoapods
# New Arch changes Podfile.lock so it always has to run
if: matrix.new-arch || steps.cocoapods-cache.outputs.cache-hit != 'true'
run: RCT_NEW_ARCH_ENABLED=${{ matrix.new-arch && '1' || '0' }} yarn pod:install

- name: Cache Build
uses: actions/cache@v4
id: ios-build-cache
with:
path: ./packages/react-native-app/ios/build
key: ${{ runner.os }}-ios-build-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ github.workflow }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-ios-build-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ github.workflow }}-${{ github.sha }}
${{ runner.os }}-ios-build-${{ matrix.new-arch && 'new' || 'old' }}-arch-${{ github.workflow }}-

- name: Build
if: steps.ios-build-cache.outputs.cache-hit != 'true'
# Like `react-native build-ios --mode Release` but adapted for simulators
run: xcodebuild -workspace ios/MapLibreReactNativeExample.xcworkspace -scheme MapLibreReactNativeExample -configuration Release -sdk iphonesimulator -derivedDataPath ios/build

- name: Upload App
uses: actions/upload-artifact@v4
with:
name: ios-app-${{ matrix.new-arch && 'new' || 'old' }}-arch
# `.app` is a directory, so we have to archive one level above
path: |
./packages/react-native-app/ios/build/Build/Products/Release-iphonesimulator
!./packages/react-native-app/ios/build/Build/Products/Release-iphonesimulator/**
./packages/react-native-app/ios/build/Build/Products/Release-iphonesimulator/MapLibreReactNativeExample.app

test-ios:
name: Test ${{ matrix.new-arch && 'new' || 'old'}} Arch
needs: [build-ios]
runs-on: macos-latest
defaults:
run:
working-directory: ./packages/react-native-app
strategy:
matrix:
new-arch: [false, true]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Maestro
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> "$GITHUB_PATH"

- name: Download App
uses: actions/download-artifact@v4
with:
name: ios-app-${{ matrix.new-arch && 'new' || 'old' }}-arch
path: ./packages/react-native-app/ios

- name: Run Tests
run: |
xcrun simctl boot "iPhone 15 Pro"
xcrun simctl install booted ./ios/MapLibreReactNativeExample.app
maestro test ./e2e/show-map.yml --format junit

- name: Upload Report
if: always()
uses: actions/upload-artifact@v4
with:
name: iOS Report ${{ matrix.new-arch && 'new' || 'old' }} Arch
path: |
./packages/react-native-app/report.xml
~/.maestro/tests/**/*
60 changes: 7 additions & 53 deletions .github/workflows/review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Review

on:
workflow_call:
# Release calls this Workflow
# Release calls this Workflow
pull_request:
branches:
- main
Expand Down Expand Up @@ -87,56 +87,10 @@ jobs:
- name: Build Library
run: yarn prepack

build-react-native-android:
name: Build React Native Android
needs: [lint-eslint, lint-tsc, test, codegen, build-library]
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/react-native-app
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Setup Azul Zulu OpenJDK
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 21

- name: Build Android
run: ./gradlew assemble
working-directory: packages/react-native-app/android

build-react-native-ios:
name: Build React Native iOS & Test with Detox
needs: [lint-eslint, lint-tsc, test, codegen, build-library]
runs-on: macos-latest
timeout-minutes: 30
defaults:
run:
working-directory: ./packages/react-native-app
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Install Pod Dependencies
run: cd ios && pod --version && pod install

- name: Install Detox Dependencies
run: |
brew tap wix/brew
brew install applesimutils
yarn detox clean-framework-cache && yarn detox build-framework-cache

- name: Build iOS
run: yarn detox build -c ios.sim.release
review-android:
name: Android
uses: ./.github/workflows/review-android.yml

- name: Test with Detox
run: yarn detox test --debug-synchronization 200 -c ios.sim.release
review-ios:
name: iOS
uses: ./.github/workflows/review-ios.yml
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,6 @@ packages/expo-app/android

# Build by bob
lib/

# Maestro
report.xml
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Which means, when you change something within [
`/src/components/UserLocation.tsx`](/src/components/UserLocation.tsx)
it will be reflected in any scene in example that uses that component.

TODO: A better overview of how we use jest, detox, etc. (issue #22)
TODO: A better overview of how we use jest, Maestro, etc. (issue #22)

## Optional: Local development with `yalc`

Expand Down
3 changes: 0 additions & 3 deletions jest-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
import "@testing-library/react-native/extend-expect";
import { NativeModules } from "react-native";

// Silence the warning: Animated: `useNativeDriver` is not supported because the native animated module is missing
jest.mock("react-native/Libraries/Animated/NativeAnimatedHelper");

function keyMirror(keys: string[]) {
const obj: Record<string, string> = {};
keys.forEach((key) => (obj[key] = key));
Expand Down
8 changes: 0 additions & 8 deletions jest.config.js

This file was deleted.

20 changes: 20 additions & 0 deletions jest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { Config } from "jest";

const config: Config = {
preset: "@testing-library/react-native",

moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json"],
setupFilesAfterEnv: [
"./jest-setup.ts",
"./__tests__/__mocks__/react-native.mock.ts",
],
modulePathIgnorePatterns: [
"<rootDir>/lib",
"<rootDir>/packages/*",
"__tests__/__mocks__",
"fixtures",
],
collectCoverageFrom: ["src/**/*.{ts,tsx,js,jsx}"],
};

module.exports = config;
Loading
Loading