Skip to content

Commit 60b2d6b

Browse files
authored
feat: Rewrite to a Nitro Module (#862)
* feat: Create `packages/react-native-mmkv` nitro module * Add Example * Remove current `package/` * feat: Add monorepo * feat: Nitrogen specs * Add files * Set up MMKV * fix * fix: Rename to build * feat: Add spec implementations * fix: Public include * Set up example * Add iOS * This is what you need to your app to make it build?? * Implement MMKV * fix: Fix cannot default-construct HybridObject error * gitignore * Path theoretically cannot be empty * Expose default ID natively * It finally inits! * chore: Clang format * Pattern-match types in variant * feat: Add memory warning and web mock instances * Use mock instance * feat: Implement `addOnValueChangedListener` natively * chore: Format C++ * Clang format * Update format * Update .clang-format * Notify on value changed * fix: Update GitHub actions * Add jest * fix: Add build:android-release script * chore: Add github formatter * fix: Use namespace here..? why? idk * feat: Implement Android platform context * Delete .bundle * feat: Add back hooks * Add back hooks test * Add hooks to example again * Update App.test.tsx * fix: Only build 64-bit in example * fix: Update gemfile order? idk * fix: Fix wrong CI names * fix: Use hermesc from root node_modules
1 parent 69679ea commit 60b2d6b

File tree

200 files changed

+6744
-22020
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

200 files changed

+6744
-22020
lines changed

package/.clang-format renamed to .clang-format

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
# Standard
44
BasedOnStyle: llvm
5-
Standard: c++14
5+
Standard: c++20
66

77
# Indentation
88
IndentWidth: 2
9-
ColumnLimit: 100
9+
ColumnLimit: 140
1010

1111
# Includes
12-
SortIncludes: true
12+
SortIncludes: CaseSensitive
1313
SortUsingDeclarations: true
1414

1515
# Pointer and reference alignment
@@ -20,7 +20,7 @@ ReflowComments: true
2020
# Line breaking options
2121
BreakBeforeBraces: Attach
2222
BreakConstructorInitializers: BeforeColon
23+
AlwaysBreakTemplateDeclarations: true
2324
AllowShortFunctionsOnASingleLine: Empty
2425
IndentCaseLabels: true
2526
NamespaceIndentation: Inner
26-

.github/workflows/build-android-release.yml

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,13 @@ jobs:
1313
runs-on: ubuntu-latest
1414
steps:
1515
- uses: actions/checkout@v5
16+
- uses: oven-sh/setup-bun@v2
1617

17-
- name: Get yarn cache directory path
18-
id: yarn-cache-dir-path
19-
run: echo "::set-output name=dir::$(yarn cache dir)"
20-
- name: Restore node_modules from cache
21-
uses: actions/cache@v4
22-
id: yarn-cache
23-
with:
24-
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
25-
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
26-
restore-keys: |
27-
${{ runner.os }}-yarn-
28-
- name: Install node_modules
29-
run: yarn install --frozen-lockfile --cwd package
30-
- name: Install node_modules for example/
31-
run: yarn install --frozen-lockfile --cwd package/example
18+
- name: Install npm dependencies (bun)
19+
run: bun install
20+
- name: Install npm dependencies in example/ (bun)
21+
working-directory: example
22+
run: bun install
3223

3324
- name: Setup JDK 17
3425
uses: actions/setup-java@v4
@@ -38,29 +29,20 @@ jobs:
3829
java-package: jdk
3930

4031
- name: Run Gradle Build for example/android/
41-
working-directory: package/example
42-
run: yarn build:android-release
32+
working-directory: example
33+
run: bun run build:android-release
4334

44-
- name: Upload arm64 APK to Release
45-
uses: actions/upload-release-asset@v1
46-
env:
47-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
48-
with:
49-
upload_url: ${{ github.event.release.upload_url }}
50-
asset_path: package/example/android/app/build/outputs/apk/release/app-arm64-v8a-release.apk
51-
asset_name: "MMKVExample-${{ github.event.release.tag_name }}-arm64-v8a.apk"
52-
asset_content_type: application/vnd.android.package-archive
53-
- name: Upload x86_64 APK to Release
35+
- name: Upload APK to Release
5436
uses: actions/upload-release-asset@v1
5537
env:
5638
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5739
with:
5840
upload_url: ${{ github.event.release.upload_url }}
59-
asset_path: package/example/android/app/build/outputs/apk/release/app-x86_64-release.apk
60-
asset_name: "MMKVExample-${{ github.event.release.tag_name }}-x86_64.apk"
41+
asset_path: example/android/app/build/outputs/apk/release/app-release.apk
42+
asset_name: "MmkvExample-${{ github.event.release.tag_name }}.apk"
6143
asset_content_type: application/vnd.android.package-archive
6244

6345
# Gradle cache doesn't like daemons
6446
- name: Stop Gradle Daemon
65-
working-directory: package/example/android
47+
working-directory: example/android
6648
run: ./gradlew --stop

.github/workflows/build-android.yml

Lines changed: 71 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,44 @@ on:
66
- main
77
paths:
88
- '.github/workflows/build-android.yml'
9-
- 'package/android/**'
10-
- 'package/cpp/**'
11-
- 'package/MMKV/**'
12-
- 'package/yarn.lock'
13-
- 'package/example/android/**'
14-
- 'package/example/yarn.lock'
9+
- 'example/android/**'
10+
- '**/nitrogen/generated/shared/**'
11+
- '**/nitrogen/generated/android/**'
12+
- 'packages/react-native-nitro-test/cpp/**'
13+
- 'packages/react-native-nitro-test/android/**'
14+
- 'packages/react-native-nitro-test-external/cpp/**'
15+
- 'packages/react-native-nitro-test-external/android/**'
16+
- 'packages/react-native-nitro-modules/cpp/**'
17+
- 'packages/react-native-nitro-modules/android/**'
18+
- '**/bun.lock'
19+
- '**/react-native.config.js'
20+
- '**/nitro.json'
1521
pull_request:
1622
paths:
1723
- '.github/workflows/build-android.yml'
18-
- 'package/android/**'
19-
- 'package/cpp/**'
20-
- 'package/MMKV/**'
21-
- 'package/yarn.lock'
22-
- 'package/example/android/**'
23-
- 'package/example/yarn.lock'
24+
- 'example/android/**'
25+
- '**/nitrogen/generated/shared/**'
26+
- '**/nitrogen/generated/android/**'
27+
- 'packages/react-native-nitro-test/cpp/**'
28+
- 'packages/react-native-nitro-test/android/**'
29+
- 'packages/react-native-nitro-test-external/cpp/**'
30+
- 'packages/react-native-nitro-test-external/android/**'
31+
- 'packages/react-native-nitro-modules/cpp/**'
32+
- 'packages/react-native-nitro-modules/android/**'
33+
- '**/bun.lock'
34+
- '**/react-native.config.js'
35+
- '**/nitro.json'
2436

2537
jobs:
26-
build_example:
27-
name: Build Android Example App
38+
build_new:
39+
name: Build Android Example App (new architecture)
2840
runs-on: ubuntu-latest
29-
defaults:
30-
run:
31-
working-directory: package/
3241
steps:
3342
- uses: actions/checkout@v5
43+
- uses: oven-sh/setup-bun@v2
44+
45+
- name: Install npm dependencies (bun)
46+
run: bun install
3447

3548
- name: Setup JDK 17
3649
uses: actions/setup-java@v4
@@ -39,30 +52,57 @@ jobs:
3952
java-version: 17
4053
java-package: jdk
4154

42-
- name: Get yarn cache directory path
43-
id: yarn-cache-dir-path
44-
run: echo "::set-output name=dir::$(yarn cache dir)"
45-
- name: Restore node_modules from cache
55+
- name: Restore Gradle cache
4656
uses: actions/cache@v4
47-
id: yarn-cache
4857
with:
49-
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
50-
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
58+
path: |
59+
~/.gradle/caches
60+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
5161
restore-keys: |
52-
${{ runner.os }}-yarn-
53-
- name: Install node_modules
54-
run: yarn install --frozen-lockfile
55-
- name: Install node_modules for example/
56-
run: yarn install --frozen-lockfile --cwd example
62+
${{ runner.os }}-gradle-
63+
- name: Run Gradle Build for example/android/
64+
working-directory: example/android
65+
run: ./gradlew assembleDebug --no-daemon --build-cache
66+
67+
# Gradle cache doesn't like daemons
68+
- name: Stop Gradle Daemon
69+
working-directory: example/android
70+
run: ./gradlew --stop
71+
72+
build_old:
73+
name: Build Android Example App (old architecture)
74+
needs: build_new
75+
runs-on: ubuntu-latest
76+
steps:
77+
- uses: actions/checkout@v5
78+
- uses: oven-sh/setup-bun@v2
79+
80+
- name: Install npm dependencies (bun)
81+
run: bun install
82+
83+
- name: Disable new architecture in gradle.properties
84+
run: sed -i "s/newArchEnabled=true/newArchEnabled=false/g" example/android/gradle.properties
85+
86+
- name: Setup JDK 17
87+
uses: actions/setup-java@v4
88+
with:
89+
distribution: 'zulu'
90+
java-version: 17
91+
java-package: jdk
5792

5893
- name: Restore Gradle cache
5994
uses: actions/cache@v4
6095
with:
6196
path: |
6297
~/.gradle/caches
63-
~/.gradle/wrapper
6498
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
6599
restore-keys: |
66100
${{ runner.os }}-gradle-
67101
- name: Run Gradle Build for example/android/
68-
run: cd example/android && ./gradlew assembleDebug --build-cache && cd ../..
102+
working-directory: example/android
103+
run: ./gradlew assembleDebug --no-daemon --build-cache
104+
105+
# Gradle cache doesn't like daemons
106+
- name: Stop Gradle Daemon
107+
working-directory: example/android
108+
run: ./gradlew --stop

.github/workflows/build-ios-release.yml

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,20 @@ jobs:
1313
runs-on: macos-latest
1414
steps:
1515
- uses: actions/checkout@v5
16+
- uses: oven-sh/setup-bun@v2
1617

17-
- name: Get yarn cache directory path
18-
id: yarn-cache-dir-path
19-
run: echo "::set-output name=dir::$(yarn cache dir)"
20-
- name: Restore node_modules from cache
21-
uses: actions/cache@v4
22-
id: yarn-cache
23-
with:
24-
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
25-
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
26-
restore-keys: |
27-
${{ runner.os }}-yarn-
28-
- name: Install node_modules
29-
run: yarn install --frozen-lockfile --cwd package
30-
- name: Install node_modules for example/
31-
run: yarn install --frozen-lockfile --cwd package/example
18+
- name: Install npm dependencies (bun)
19+
run: bun install
20+
- name: Install npm dependencies in example/ (bun)
21+
working-directory: example
22+
run: bun install
3223

3324
- name: Setup Ruby (bundle)
3425
uses: ruby/setup-ruby@v1
3526
with:
3627
ruby-version: 2.7.2
3728
bundler-cache: true
38-
working-directory: package/example
29+
working-directory: example
3930

4031
- name: Select Xcode 16.4
4132
run: sudo xcode-select -s "/Applications/Xcode_16.4.app/Contents/Developer"
@@ -48,11 +39,11 @@ jobs:
4839
restore-keys: |
4940
${{ runner.os }}-pods-
5041
- name: Install Pods
51-
working-directory: package/example
52-
run: yarn pods
42+
working-directory: example
43+
run: bun pods
5344

5445
- name: Build App (Release, Simulator)
55-
working-directory: package/example/ios
46+
working-directory: example/ios
5647
run: |
5748
set -o pipefail
5849
xcodebuild \
@@ -68,15 +59,15 @@ jobs:
6859
6960
- name: Package .app for Simulator
7061
run: |
71-
cd package/example/ios/build/Build/Products/Release-iphonesimulator
72-
zip -r ../../../../../../../MmkvExample-Release-Simulator.zip MMKVExample.app
62+
cd example/ios/build/Build/Products/Release-iphonesimulator
63+
zip -r ../../../../../../MmkvExample-Release-Simulator.zip MmkvExample.app
7364
7465
- name: Upload .app to Release
7566
uses: actions/upload-release-asset@v1
7667
env:
7768
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7869
with:
7970
upload_url: ${{ github.event.release.upload_url }}
80-
asset_path: MMKVExample-Release-Simulator.zip
81-
asset_name: "MMKVExample-Simulator-${{ github.event.release.tag_name }}.app.zip"
71+
asset_path: MmkvExample-Release-Simulator.zip
72+
asset_name: "MmkvExample-Simulator-${{ github.event.release.tag_name }}.app.zip"
8273
asset_content_type: application/zip

0 commit comments

Comments
 (0)