@snowplow/react-native-tracker 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintignore +6 -0
  3. package/.gitattributes +3 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. package/.github/actions/setup/action.yml +28 -0
  7. package/.github/workflows/build.yml +150 -0
  8. package/.github/workflows/deploy.yml +98 -0
  9. package/.github/workflows/e2e-android.yml +121 -0
  10. package/.github/workflows/e2e-ios.yml +90 -0
  11. package/.github/workflows/snyk.yml +21 -0
  12. package/.gitignore +70 -0
  13. package/.npmignore +60 -0
  14. package/.nvmrc +1 -0
  15. package/.watchmanconfig +1 -0
  16. package/.yarnrc +3 -0
  17. package/CHANGELOG +166 -0
  18. package/CONTRIBUTING.md +80 -0
  19. package/README.md +23 -110
  20. package/android/build.gradle +93 -37
  21. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  22. package/android/gradle/wrapper/gradle-wrapper.properties +1 -2
  23. package/android/gradle.properties +5 -2
  24. package/android/gradlew +172 -110
  25. package/android/gradlew.bat +24 -19
  26. package/android/src/main/AndroidManifest.xml +1 -3
  27. package/android/src/main/AndroidManifestNew.xml +2 -0
  28. package/android/src/main/java/com/snowplow/reactnativetracker/ReactNativeTrackerModule.kt +704 -0
  29. package/android/src/main/java/com/snowplow/reactnativetracker/ReactNativeTrackerPackage.kt +17 -0
  30. package/android/src/main/java/com/snowplow/reactnativetracker/util/ConfigUtil.kt +271 -0
  31. package/android/src/main/java/com/snowplow/reactnativetracker/util/EventUtil.kt +213 -0
  32. package/android/src/main/java/com/snowplow/reactnativetracker/util/TrackerVersion.kt +5 -0
  33. package/babel.config.js +3 -0
  34. package/example/.watchmanconfig +1 -0
  35. package/example/Gemfile +6 -0
  36. package/example/android/app/build.gradle +129 -0
  37. package/example/android/app/debug.keystore +0 -0
  38. package/example/android/app/proguard-rules.pro +10 -0
  39. package/example/android/app/src/androidTest/java/com/reactnativetrackerexample/DetoxTest.java +36 -0
  40. package/example/android/app/src/androidTest/java/com/reactnativetrackerexample/DetoxTestAppJUnitRunner.java +21 -0
  41. package/example/android/app/src/debug/AndroidManifest.xml +13 -0
  42. package/example/android/app/src/debug/java/com/reactnativetrackerexample/ReactNativeFlipper.java +75 -0
  43. package/example/android/app/src/main/AndroidManifest.xml +26 -0
  44. package/example/android/app/src/main/java/com/reactnativetrackerexample/MainActivity.java +32 -0
  45. package/example/android/app/src/main/java/com/reactnativetrackerexample/MainApplication.java +62 -0
  46. package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
  47. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  48. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  49. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  50. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  51. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  52. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  53. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  54. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  55. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  56. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  57. package/example/android/app/src/main/res/values/strings.xml +3 -0
  58. package/example/android/app/src/main/res/values/styles.xml +9 -0
  59. package/example/android/app/src/release/java/com/reactnativetrackerexample/ReactNativeFlipper.java +20 -0
  60. package/example/android/build.gradle +31 -0
  61. package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  62. package/example/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  63. package/example/android/gradle.properties +44 -0
  64. package/example/android/gradlew +244 -0
  65. package/example/android/gradlew.bat +92 -0
  66. package/example/android/settings.gradle +4 -0
  67. package/example/app.json +4 -0
  68. package/example/babel.config.js +17 -0
  69. package/example/detox.config.js +92 -0
  70. package/example/e2e/config.json +10 -0
  71. package/example/e2e/emitEvents.e2e.detox.js +108 -0
  72. package/example/e2e/environment.js +23 -0
  73. package/example/e2e/helpers/microCommands.js +153 -0
  74. package/example/e2e/helpers/microHelpers.js +346 -0
  75. package/example/e2e/helpers/microHelpers.test.js +308 -0
  76. package/example/e2e/helpers/schemas.js +62 -0
  77. package/example/e2e/jest.config.js +16 -0
  78. package/example/e2e/setup.js +4 -0
  79. package/example/e2e/testEvents.micro.test.js +300 -0
  80. package/example/index.js +5 -0
  81. package/example/ios/.xcode.env +11 -0
  82. package/example/ios/Podfile +64 -0
  83. package/example/ios/Podfile.lock +737 -0
  84. package/example/ios/ReactNativeTrackerExample/AppDelegate.h +6 -0
  85. package/example/ios/ReactNativeTrackerExample/AppDelegate.mm +26 -0
  86. package/example/ios/ReactNativeTrackerExample/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
  87. package/example/ios/ReactNativeTrackerExample/Images.xcassets/Contents.json +6 -0
  88. package/example/ios/ReactNativeTrackerExample/Info.plist +55 -0
  89. package/example/ios/ReactNativeTrackerExample/LaunchScreen.storyboard +47 -0
  90. package/example/ios/ReactNativeTrackerExample/main.m +10 -0
  91. package/example/ios/ReactNativeTrackerExample-Bridging-Header.h +3 -0
  92. package/example/ios/ReactNativeTrackerExample.xcodeproj/project.pbxproj +722 -0
  93. package/{ios/RNSnowplowTracker.xcodeproj/xcshareddata/xcschemes/RNSnowplowTracker.xcscheme → example/ios/ReactNativeTrackerExample.xcodeproj/xcshareddata/xcschemes/ReactNativeTrackerExample.xcscheme} +29 -21
  94. package/example/ios/ReactNativeTrackerExample.xcworkspace/contents.xcworkspacedata +10 -0
  95. package/example/ios/ReactNativeTrackerExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  96. package/example/ios/ReactNativeTrackerExampleTests/Info.plist +24 -0
  97. package/example/ios/ReactNativeTrackerExampleTests/ReactNativeTrackerExampleTests.m +66 -0
  98. package/example/metro.config.js +45 -0
  99. package/example/package.json +54 -0
  100. package/example/react-native.config.js +10 -0
  101. package/example/src/App.js +557 -0
  102. package/example/tsconfig.json +5 -0
  103. package/example/yarn.lock +7379 -0
  104. package/ios/ReactNativeTracker-Bridging-Header.h +2 -0
  105. package/ios/ReactNativeTracker.mm +165 -0
  106. package/ios/ReactNativeTracker.swift +757 -0
  107. package/ios/{RNSnowplowTracker.xcodeproj → ReactNativeTracker.xcodeproj}/project.pbxproj +55 -79
  108. package/ios/Util/ConfigUtils.swift +206 -0
  109. package/ios/Util/TrackerVersion.swift +3 -0
  110. package/ios/Util/Utilities.swift +37 -0
  111. package/lefthook.yml +11 -0
  112. package/lib/commonjs/api.js +475 -0
  113. package/lib/commonjs/api.js.map +1 -0
  114. package/lib/commonjs/configurations.js +209 -0
  115. package/lib/commonjs/configurations.js.map +1 -0
  116. package/lib/commonjs/constants.js +85 -0
  117. package/lib/commonjs/constants.js.map +1 -0
  118. package/lib/commonjs/events.js +256 -0
  119. package/lib/commonjs/events.js.map +1 -0
  120. package/lib/commonjs/index.js +141 -0
  121. package/lib/commonjs/index.js.map +1 -0
  122. package/lib/commonjs/jsCore.js +393 -0
  123. package/lib/commonjs/jsCore.js.map +1 -0
  124. package/lib/commonjs/native.js +29 -0
  125. package/lib/commonjs/native.js.map +1 -0
  126. package/lib/commonjs/subject.js +248 -0
  127. package/lib/commonjs/subject.js.map +1 -0
  128. package/lib/commonjs/tracker.js +221 -0
  129. package/lib/commonjs/tracker.js.map +1 -0
  130. package/lib/commonjs/types.js +2 -0
  131. package/lib/commonjs/types.js.map +1 -0
  132. package/lib/commonjs/utils.js +85 -0
  133. package/lib/commonjs/utils.js.map +1 -0
  134. package/lib/commonjs/webViewInterface.js +79 -0
  135. package/lib/commonjs/webViewInterface.js.map +1 -0
  136. package/lib/module/api.js +439 -0
  137. package/lib/module/api.js.map +1 -0
  138. package/lib/module/configurations.js +197 -0
  139. package/lib/module/configurations.js.map +1 -0
  140. package/lib/module/constants.js +80 -0
  141. package/lib/module/constants.js.map +1 -0
  142. package/lib/module/events.js +240 -0
  143. package/lib/module/events.js.map +1 -0
  144. package/lib/module/index.js +129 -0
  145. package/lib/module/index.js.map +1 -0
  146. package/lib/module/jsCore.js +390 -0
  147. package/lib/module/jsCore.js.map +1 -0
  148. package/lib/module/native.js +25 -0
  149. package/lib/module/native.js.map +1 -0
  150. package/lib/module/subject.js +235 -0
  151. package/lib/module/subject.js.map +1 -0
  152. package/lib/module/tracker.js +209 -0
  153. package/lib/module/tracker.js.map +1 -0
  154. package/lib/module/types.js +2 -0
  155. package/lib/module/types.js.map +1 -0
  156. package/lib/module/utils.js +79 -0
  157. package/lib/module/utils.js.map +1 -0
  158. package/lib/module/webViewInterface.js +75 -0
  159. package/lib/module/webViewInterface.js.map +1 -0
  160. package/lib/typescript/__tests__/api.test.d.ts +2 -0
  161. package/lib/typescript/__tests__/api.test.d.ts.map +1 -0
  162. package/lib/typescript/__tests__/configurations.test.d.ts +2 -0
  163. package/lib/typescript/__tests__/configurations.test.d.ts.map +1 -0
  164. package/lib/typescript/__tests__/events.test.d.ts +2 -0
  165. package/lib/typescript/__tests__/events.test.d.ts.map +1 -0
  166. package/lib/typescript/__tests__/index.test.d.ts +2 -0
  167. package/lib/typescript/__tests__/index.test.d.ts.map +1 -0
  168. package/lib/typescript/__tests__/jsCore.test.d.ts +2 -0
  169. package/lib/typescript/__tests__/jsCore.test.d.ts.map +1 -0
  170. package/lib/typescript/__tests__/utils.test.d.ts +2 -0
  171. package/lib/typescript/__tests__/utils.test.d.ts.map +1 -0
  172. package/lib/typescript/api.d.ts +226 -0
  173. package/lib/typescript/api.d.ts.map +1 -0
  174. package/lib/typescript/configurations.d.ts +73 -0
  175. package/lib/typescript/configurations.d.ts.map +1 -0
  176. package/lib/typescript/constants.d.ts +59 -0
  177. package/lib/typescript/constants.d.ts.map +1 -0
  178. package/lib/typescript/events.d.ts +101 -0
  179. package/lib/typescript/events.d.ts.map +1 -0
  180. package/lib/typescript/index.d.ts +27 -0
  181. package/lib/typescript/index.d.ts.map +1 -0
  182. package/lib/typescript/jsCore.d.ts +140 -0
  183. package/lib/typescript/jsCore.d.ts.map +1 -0
  184. package/lib/typescript/native.d.ts +4 -0
  185. package/lib/typescript/native.d.ts.map +1 -0
  186. package/lib/typescript/subject.d.ts +91 -0
  187. package/lib/typescript/subject.d.ts.map +1 -0
  188. package/lib/typescript/tracker.d.ts +93 -0
  189. package/lib/typescript/tracker.d.ts.map +1 -0
  190. package/{dist/index.d.ts → lib/typescript/types.d.ts} +188 -75
  191. package/lib/typescript/types.d.ts.map +1 -0
  192. package/lib/typescript/utils.d.ts +35 -0
  193. package/lib/typescript/utils.d.ts.map +1 -0
  194. package/lib/typescript/webViewInterface.d.ts +15 -0
  195. package/lib/typescript/webViewInterface.d.ts.map +1 -0
  196. package/package.json +134 -52
  197. package/scripts/bootstrap.js +29 -0
  198. package/snowplow-react-native-tracker.podspec +42 -0
  199. package/src/__mocks__/react-native.js +7 -0
  200. package/src/__tests__/api.test.ts +34 -0
  201. package/src/__tests__/configurations.test.ts +620 -0
  202. package/src/__tests__/events.test.ts +749 -0
  203. package/src/__tests__/index.test.ts +27 -0
  204. package/src/__tests__/jsCore.test.ts +169 -0
  205. package/src/__tests__/utils.test.ts +23 -0
  206. package/src/api.ts +535 -0
  207. package/src/configurations.ts +337 -0
  208. package/src/constants.ts +102 -0
  209. package/src/events.ts +330 -0
  210. package/src/index.ts +189 -0
  211. package/src/jsCore.ts +553 -0
  212. package/src/native.ts +34 -0
  213. package/src/subject.ts +315 -0
  214. package/src/tracker.ts +330 -0
  215. package/src/types.ts +1087 -0
  216. package/src/utils.ts +78 -0
  217. package/src/webViewInterface.ts +105 -0
  218. package/tsconfig.build.json +5 -0
  219. package/tsconfig.json +28 -0
  220. package/turbo.json +34 -0
  221. package/yarn.lock +9333 -0
  222. package/RNSnowplowTracker.podspec +0 -24
  223. package/android/src/main/java/com/snowplowanalytics/react/tracker/RNSnowplowTrackerModule.java +0 -750
  224. package/android/src/main/java/com/snowplowanalytics/react/tracker/RNSnowplowTrackerPackage.java +0 -29
  225. package/android/src/main/java/com/snowplowanalytics/react/util/ConfigUtil.java +0 -351
  226. package/android/src/main/java/com/snowplowanalytics/react/util/EventUtil.java +0 -339
  227. package/android/src/main/java/com/snowplowanalytics/react/util/TrackerVersion.java +0 -7
  228. package/dist/index.js +0 -2026
  229. package/dist/index.js.map +0 -1
  230. package/ios/RNSnowplowTracker.h +0 -34
  231. package/ios/RNSnowplowTracker.m +0 -911
  232. package/ios/Util/NSDictionary+RNSP_TypeMethods.h +0 -33
  233. package/ios/Util/NSDictionary+RNSP_TypeMethods.m +0 -40
  234. package/ios/Util/RNConfigUtils.h +0 -44
  235. package/ios/Util/RNConfigUtils.m +0 -209
  236. package/ios/Util/RNTrackerVersion.h +0 -27
  237. package/ios/Util/RNTrackerVersion.m +0 -27
  238. package/ios/Util/RNUtilities.h +0 -32
  239. package/ios/Util/RNUtilities.m +0 -68
package/.editorconfig ADDED
@@ -0,0 +1,15 @@
1
+ # EditorConfig helps developers define and maintain consistent
2
+ # coding styles between different editors and IDEs
3
+ # editorconfig.org
4
+
5
+ root = true
6
+
7
+ [*]
8
+
9
+ indent_style = space
10
+ indent_size = 2
11
+
12
+ end_of_line = lf
13
+ charset = utf-8
14
+ trim_trailing_whitespace = true
15
+ insert_final_newline = true
package/.eslintignore ADDED
@@ -0,0 +1,6 @@
1
+ # don't lint node_modules
2
+ node_modules
3
+ # don't lint build output
4
+ dist
5
+ # don't lint example app here
6
+ example
package/.gitattributes ADDED
@@ -0,0 +1,3 @@
1
+ *.pbxproj -text
2
+ # specific for windows script files
3
+ *.bat text eol=crlf
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior or code snippets that produce the issue.
15
+
16
+ **Expected behavior**
17
+ A clear and concise description of what you expected to happen.
18
+
19
+ **Screenshots**
20
+ If applicable, add screenshots to help explain your problem.
21
+
22
+ **Smartphone (please complete the following information):**
23
+ - Device: [e.g. iPhone6]
24
+ - OS: [e.g. iOS8.1]
25
+ - Browser [e.g. stock browser, safari]
26
+ - Version [e.g. 22]
27
+
28
+ **Additional context**
29
+ Add any other context about the problem here.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Additional context**
20
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,28 @@
1
+ name: Setup
2
+ description: Setup Node.js and install dependencies
3
+
4
+ runs:
5
+ using: composite
6
+ steps:
7
+ - name: Setup Node.js
8
+ uses: actions/setup-node@v3
9
+ with:
10
+ node-version-file: .nvmrc
11
+
12
+ - name: Cache dependencies
13
+ id: yarn-cache
14
+ uses: actions/cache@v3
15
+ with:
16
+ path: |
17
+ **/node_modules
18
+ key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**/package.json') }}
19
+ restore-keys: |
20
+ ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
21
+ ${{ runner.os }}-yarn-
22
+
23
+ - name: Install dependencies
24
+ if: steps.yarn-cache.outputs.cache-hit != 'true'
25
+ run: |
26
+ yarn install --cwd example --frozen-lockfile
27
+ yarn install --frozen-lockfile
28
+ shell: bash
@@ -0,0 +1,150 @@
1
+ name: Build
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '*.*.*'
7
+ pull_request:
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout
14
+ uses: actions/checkout@v3
15
+
16
+ - name: Setup
17
+ uses: ./.github/actions/setup
18
+
19
+ - name: Lint files
20
+ run: yarn lint
21
+
22
+ - name: Typecheck files
23
+ run: yarn typecheck
24
+
25
+ test:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - name: Checkout
29
+ uses: actions/checkout@v3
30
+
31
+ - name: Setup
32
+ uses: ./.github/actions/setup
33
+
34
+ - name: Run unit tests
35
+ run: yarn test --maxWorkers=2 --coverage
36
+
37
+ build-library:
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - name: Checkout
41
+ uses: actions/checkout@v3
42
+
43
+ - name: Setup
44
+ uses: ./.github/actions/setup
45
+
46
+ - name: Build package
47
+ run: yarn prepack
48
+
49
+ build-android:
50
+ runs-on: ubuntu-latest
51
+ env:
52
+ TURBO_CACHE_DIR: .turbo/android
53
+ steps:
54
+ - name: Checkout
55
+ uses: actions/checkout@v3
56
+
57
+ - name: Setup
58
+ uses: ./.github/actions/setup
59
+
60
+ - name: Cache turborepo for Android
61
+ uses: actions/cache@v3
62
+ with:
63
+ path: ${{ env.TURBO_CACHE_DIR }}
64
+ key: ${{ runner.os }}-turborepo-android-${{ hashFiles('**/yarn.lock') }}
65
+ restore-keys: |
66
+ ${{ runner.os }}-turborepo-android-
67
+
68
+ - name: Check turborepo cache for Android
69
+ run: |
70
+ TURBO_CACHE_STATUS=$(node -p "($(yarn --silent turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:android').cache.status")
71
+
72
+ if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then
73
+ echo "turbo_cache_hit=1" >> $GITHUB_ENV
74
+ fi
75
+
76
+ - name: Install JDK
77
+ if: env.turbo_cache_hit != 1
78
+ uses: actions/setup-java@v3
79
+ with:
80
+ distribution: 'zulu'
81
+ java-version: '11'
82
+
83
+ - name: Finalize Android SDK
84
+ if: env.turbo_cache_hit != 1
85
+ run: |
86
+ /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"
87
+
88
+ - name: Cache Gradle
89
+ if: env.turbo_cache_hit != 1
90
+ uses: actions/cache@v3
91
+ with:
92
+ path: |
93
+ ~/.gradle/wrapper
94
+ ~/.gradle/caches
95
+ key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}
96
+ restore-keys: |
97
+ ${{ runner.os }}-gradle-
98
+
99
+ - name: Build example for Android
100
+ run: |
101
+ yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}"
102
+
103
+ build-ios:
104
+ runs-on: macos-latest
105
+ env:
106
+ TURBO_CACHE_DIR: .turbo/ios
107
+ steps:
108
+ - name: Checkout
109
+ uses: actions/checkout@v3
110
+
111
+ - name: Setup
112
+ uses: ./.github/actions/setup
113
+
114
+ - name: Cache turborepo for iOS
115
+ uses: actions/cache@v3
116
+ with:
117
+ path: ${{ env.TURBO_CACHE_DIR }}
118
+ key: ${{ runner.os }}-turborepo-ios-${{ hashFiles('**/yarn.lock') }}
119
+ restore-keys: |
120
+ ${{ runner.os }}-turborepo-ios-
121
+
122
+ - name: Check turborepo cache for iOS
123
+ run: |
124
+ TURBO_CACHE_STATUS=$(node -p "($(yarn --silent turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:ios').cache.status")
125
+
126
+ if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then
127
+ echo "turbo_cache_hit=1" >> $GITHUB_ENV
128
+ fi
129
+
130
+ - name: Cache cocoapods
131
+ if: env.turbo_cache_hit != 1
132
+ id: cocoapods-cache
133
+ uses: actions/cache@v3
134
+ with:
135
+ path: |
136
+ **/ios/Pods
137
+ key: ${{ runner.os }}-cocoapods-${{ hashFiles('example/ios/Podfile.lock') }}
138
+ restore-keys: |
139
+ ${{ runner.os }}-cocoapods-
140
+
141
+ - name: Install cocoapods
142
+ if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true'
143
+ run: |
144
+ yarn example pods
145
+ env:
146
+ NO_FLIPPER: 1
147
+
148
+ - name: Build example for iOS
149
+ run: |
150
+ yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}"
@@ -0,0 +1,98 @@
1
+ name: Deploy
2
+
3
+ on:
4
+ workflow_run:
5
+ workflows: [Build]
6
+ types: [completed]
7
+
8
+ jobs:
9
+
10
+ version_check:
11
+ if: ${{ github.event.workflow_run.conclusion == 'success' }} && startsWith(github.ref, 'refs/tags/') }}
12
+ runs-on: ubuntu-latest
13
+ outputs:
14
+ v_tracker: ${{ steps.version.outputs.RN_TRACKER_VERSION}}
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v3
19
+
20
+ - name: Setup
21
+ uses: ./.github/actions/setup
22
+
23
+ - name: Get tag and tracker versions
24
+ id: version
25
+ env:
26
+ IOS_VER_FILEPATH: 'ios/Util/TrackerVersion.swift'
27
+ ANDR_VER_FILEPATH: 'android/src/main/java/com/snowplow/reactnativetracker/util/TrackerVersion.kt'
28
+ JS_VER_FILEPATH: 'src/jsCore.ts'
29
+ run: |
30
+ echo "TAG_VERSION=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_OUTPUT
31
+ echo "RN_TRACKER_VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
32
+ echo "RN_IOS_TRACKER_VERSION=$(cat "${IOS_VER_FILEPATH}" | sed -n -e 's/^.*kRNTrackerVersion = "rn-\(.*\)"/\1/p')" >> $GITHUB_OUTPUT
33
+ echo "RN_ANDROID_TRACKER_VERSION=$(cat "${ANDR_VER_FILEPATH}" | sed -n -e 's/^.*RN_TRACKER_VERSION = "rn-\(.*\)"/\1/p')" >> $GITHUB_OUTPUT
34
+ echo "RN_JS_TRACKER_VERSION=$(cat "${JS_VER_FILEPATH}" | sed -n -e 's/^.*trackerVersion = '\''rn-\(.*\)'\'';/\1/p')" >> $GITHUB_OUTPUT
35
+
36
+ - name: Fail if version mismatch
37
+ run: |
38
+ if [ "${{ steps.version.outputs.TAG_VERSION }}" != "${{ steps.version.outputs.RN_TRACKER_VERSION }}" ] ; then
39
+ echo "Tag version (${{ steps.version.outputs.TAG_VERSION }}) doesn't match version in project (${{ steps.version.outputs.RN_TRACKER_VERSION }})"
40
+ exit 1
41
+ fi
42
+ if [ "${{ steps.version.outputs.TAG_VERSION }}" != "${{ steps.version.outputs.RN_IOS_TRACKER_VERSION }}" ] ; then
43
+ echo "Tag version (${{ steps.version.outputs.TAG_VERSION }}) doesn't match version in project(ios) (${{ steps.version.outputs.RN_IOS_TRACKER_VERSION }})"
44
+ exit 1
45
+ fi
46
+ if [ "${{ steps.version.outputs.TAG_VERSION }}" != "${{ steps.version.outputs.RN_ANDROID_TRACKER_VERSION }}" ] ; then
47
+ echo "Tag version (${{ steps.version.outputs.TAG_VERSION }}) doesn't match version in project(android) (${{ steps.version.outputs.RN_ANDROID_TRACKER_VERSION }})"
48
+ exit 1
49
+ fi
50
+ if [ "${{ steps.version.outputs.TAG_VERSION }}" != "${{ steps.version.outputs.RN_JS_TRACKER_VERSION }}" ] ; then
51
+ echo "Tag version (${{ steps.version.outputs.TAG_VERSION }}) doesn't match version in project(js) (${{ steps.version.outputs.RN_JS_TRACKER_VERSION }})"
52
+ exit 1
53
+ fi
54
+
55
+ publish_npm:
56
+ needs: ["version_check"]
57
+ runs-on: ubuntu-latest
58
+
59
+ steps:
60
+ - name: Checkout
61
+ uses: actions/checkout@v3
62
+
63
+ - name: Setup
64
+ uses: ./.github/actions/setup
65
+
66
+ - name: Build dist files
67
+ run: |
68
+ yarn
69
+ yarn prepack
70
+
71
+ - name: NPM Publish
72
+ run: |
73
+ echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" > ~/.npmrc
74
+ if [[ "${{ needs.version_check.outputs.v_tracker }}" = *-* ]] ; then
75
+ yarn publish --access public --tag next
76
+ else
77
+ yarn publish --access public
78
+ fi
79
+ env:
80
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
81
+
82
+ release:
83
+ needs: ["publish_npm", "version_check"]
84
+ runs-on: ubuntu-latest
85
+
86
+ steps:
87
+ - name: Checkout code
88
+ uses: actions/checkout@v2
89
+
90
+ - name: Release
91
+ uses: softprops/action-gh-release@v0.1.7
92
+ env:
93
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
94
+ with:
95
+ tag_name: ${{ github.event.workflow_run.head_branch }}
96
+ name: Version ${{ needs.version_check.outputs.v_tracker }}
97
+ draft: false
98
+ prerelease: ${{ contains(needs.version_check.outputs.v_tracker, '-') }}
@@ -0,0 +1,121 @@
1
+ name: e2e-android
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ jobs:
7
+ e2e:
8
+ runs-on: macos-latest
9
+ timeout-minutes: 60
10
+ env:
11
+ TURBO_CACHE_DIR: .turbo/android-e2e
12
+
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v3
16
+
17
+ - name: Setup
18
+ uses: ./.github/actions/setup
19
+
20
+ - name: Cache turborepo for Android
21
+ uses: actions/cache@v3
22
+ with:
23
+ path: ${{ env.TURBO_CACHE_DIR }}
24
+ key: ${{ runner.os }}-turborepo-e2e-android-${{ hashFiles('**/yarn.lock') }}
25
+ restore-keys: |
26
+ ${{ runner.os }}-turborepo-e2e-android-
27
+
28
+ - name: Check turborepo cache for Android
29
+ run: |
30
+ TURBO_CACHE_STATUS=$(node -p "($(yarn --silent turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:android').cache.status")
31
+
32
+ if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then
33
+ echo "turbo_cache_hit=1" >> $GITHUB_ENV
34
+ fi
35
+
36
+ - name: Install JDK
37
+ if: env.turbo_cache_hit != 1
38
+ uses: actions/setup-java@v3
39
+ with:
40
+ distribution: 'zulu'
41
+ java-version: '11'
42
+
43
+ - name: Finalize Android SDK
44
+ if: env.turbo_cache_hit != 1
45
+ run: |
46
+ /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"
47
+
48
+ - name: Cache Gradle
49
+ if: env.turbo_cache_hit != 1
50
+ uses: actions/cache@v3
51
+ with:
52
+ path: |
53
+ ~/.gradle/wrapper
54
+ ~/.gradle/caches
55
+ key: ${{ runner.os }}-gradle-e2e-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}
56
+ restore-keys: |
57
+ ${{ runner.os }}-gradle-e2e-
58
+
59
+ # -- Micro --
60
+ - name: Cache Micro
61
+ id: cache-micro
62
+ uses: actions/cache@v3
63
+ with:
64
+ path: micro.jar
65
+ key: ${{ runner.os }}-micro
66
+
67
+ - name: Get micro
68
+ if: steps.cache-micro.outputs.cache-hit != 'true'
69
+ run: curl -o micro.jar -L https://github.com/snowplow-incubator/snowplow-micro/releases/download/micro-1.7.2/snowplow-micro-1.7.2.jar
70
+
71
+ - name: Run Micro in background
72
+ run: java -jar micro.jar &
73
+
74
+ - name: Wait on Micro endpoint
75
+ timeout-minutes: 2
76
+ run: while ! nc -z '0.0.0.0' 9090; do sleep 1; done
77
+
78
+ - name: Prepare example for Micro
79
+ working-directory: example/src
80
+ run: perl -i -pe "s/^.*collectorEndpoint =\K.*/ \'http:\/\/10.0.2.2:9090\'\;/" App.js
81
+
82
+ # -- Emulator --
83
+ - name: Get AOSP system image and create Android virtual device
84
+ run: |
85
+ echo 'y' | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "system-images;android-28;default;x86_64"
86
+ echo 'no' | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/avdmanager create avd --force --name Pixel_API_28_AOSP -d pixel --package "system-images;android-28;default;x86_64"
87
+
88
+ - name: Start Android emulator
89
+ timeout-minutes: 10
90
+ run: |
91
+ echo "Starting emulator.."
92
+ nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_28_AOSP -no-audio -no-snapshot -no-window &
93
+ $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'
94
+ $ANDROID_HOME/platform-tools/adb devices
95
+ echo "Emulator started!"
96
+
97
+ # -- Test --
98
+ - name: Detox Jest android
99
+ id: dj
100
+ run: |
101
+ yarn turbo run e2e:android --cache-dir="${{ env.TURBO_CACHE_DIR }}"
102
+
103
+ - name: Log events if Detox-Jest failed
104
+ id: eventlog
105
+ if: ${{ failure() && steps.dj.outcome == 'failure' }}
106
+ run: |
107
+ echo "{ \"all\": $(curl -s -o - 'http://0.0.0.0:9090/micro/all'), \
108
+ \"bad\": $(curl -s -o - 'http://0.0.0.0:9090/micro/bad'), \
109
+ \"good\": $(curl -s -o - 'http://0.0.0.0:9090/micro/good') }"\
110
+ | jq '.' > android-events-micro.json
111
+
112
+ - name: Upload events artifact if Detox-Jest failed
113
+ if: ${{ failure() && steps.dj.outcome == 'failure' && steps.eventlog.outcome == 'success' }}
114
+ uses: actions/upload-artifact@v2
115
+ with:
116
+ name: android-events-artifact
117
+ path: android-events-micro.json
118
+
119
+ # -- Cleanup --
120
+ - name: Stop gradle daemon
121
+ run: gradle --stop
@@ -0,0 +1,90 @@
1
+ name: e2e-ios
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ jobs:
7
+ e2e:
8
+ runs-on: macos-latest
9
+ timeout-minutes: 60
10
+ env:
11
+ TURBO_CACHE_DIR: .turbo/ios-e2e
12
+
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v2
16
+
17
+ - name: Setup
18
+ uses: ./.github/actions/setup
19
+
20
+ - name: Cache turborepo for iOS
21
+ uses: actions/cache@v3
22
+ with:
23
+ path: ${{ env.TURBO_CACHE_DIR }}
24
+ key: ${{ runner.os }}-turborepo-e2e-ios-${{ hashFiles('**/yarn.lock') }}
25
+ restore-keys: |
26
+ ${{ runner.os }}-turborepo-e2e-ios-
27
+
28
+ - name: Check turborepo cache for iOS
29
+ run: |
30
+ TURBO_CACHE_STATUS=$(node -p "($(yarn --silent turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:ios').cache.status")
31
+
32
+ if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then
33
+ echo "turbo_cache_hit=1" >> $GITHUB_ENV
34
+ fi
35
+
36
+ # -- Micro --
37
+ - name: Cache Micro
38
+ id: cache-micro
39
+ uses: actions/cache@v3
40
+ with:
41
+ path: micro.jar
42
+ key: ${{ runner.os }}-micro
43
+
44
+ - name: Get micro
45
+ if: steps.cache-micro.outputs.cache-hit != 'true'
46
+ run: curl -o micro.jar -L https://github.com/snowplow-incubator/snowplow-micro/releases/download/micro-1.7.2/snowplow-micro-1.7.2.jar
47
+
48
+ - name: Run Micro in background
49
+ run: java -jar micro.jar &
50
+
51
+ - name: Wait on Micro endpoint
52
+ timeout-minutes: 2
53
+ run: while ! nc -z '0.0.0.0' 9090; do sleep 1; done
54
+
55
+ - name: Prepare example for Micro
56
+ working-directory: example/src
57
+ run: perl -i -pe "s/^.*collectorEndpoint =\K.*/ \'http:\/\/0.0.0.0:9090\'\;/" App.js
58
+
59
+ # -- Simulator --
60
+ - name: Install applesimutils
61
+ run: |
62
+ brew tap wix/brew
63
+ brew install applesimutils
64
+
65
+ # -- Bootstrap --
66
+ - name: Bootstrap project
67
+ run: |
68
+ yarn turbo run bootstrap --cache-dir="${{ env.TURBO_CACHE_DIR }}"
69
+
70
+ # -- Test --
71
+ - name: Detox Jest ios
72
+ id: dj
73
+ run: |
74
+ yarn turbo run e2e:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}"
75
+
76
+ - name: Log events if Detox-Jest failed
77
+ id: eventlog
78
+ if: ${{ failure() && steps.dj.outcome == 'failure' }}
79
+ run: |
80
+ echo "{ \"all\": $(curl -s -o - 'http://0.0.0.0:9090/micro/all'), \
81
+ \"bad\": $(curl -s -o - 'http://0.0.0.0:9090/micro/bad'), \
82
+ \"good\": $(curl -s -o - 'http://0.0.0.0:9090/micro/good') }"\
83
+ | jq '.' > ios-events-micro.json
84
+
85
+ - name: Upload events artifact if Detox-Jest failed
86
+ if: ${{ failure() && steps.dj.outcome == 'failure' && steps.eventlog.outcome == 'success' }}
87
+ uses: actions/upload-artifact@v2
88
+ with:
89
+ name: ios-events-artifact
90
+ path: ios-events-micro.json
@@ -0,0 +1,21 @@
1
+
2
+ name: Snyk
3
+
4
+ on:
5
+ push:
6
+ branches: [ master ]
7
+
8
+ jobs:
9
+ security:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+
15
+ - name: Run Snyk to check for vulnerabilities
16
+ uses: snyk/actions/node@master
17
+ with:
18
+ command: monitor
19
+ args: --project-name=@snowplow/react-native-tracker
20
+ env:
21
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
package/.gitignore ADDED
@@ -0,0 +1,70 @@
1
+ # OSX
2
+ #
3
+ .DS_Store
4
+
5
+ # XDE
6
+ .expo/
7
+
8
+ # VSCode
9
+ .vscode/
10
+ jsconfig.json
11
+
12
+ # Xcode
13
+ #
14
+ build/
15
+ *.pbxuser
16
+ !default.pbxuser
17
+ *.mode1v3
18
+ !default.mode1v3
19
+ *.mode2v3
20
+ !default.mode2v3
21
+ *.perspectivev3
22
+ !default.perspectivev3
23
+ xcuserdata
24
+ *.xccheckout
25
+ *.moved-aside
26
+ DerivedData
27
+ *.hmap
28
+ *.ipa
29
+ *.xcuserstate
30
+ project.xcworkspace
31
+
32
+ # Android/IJ
33
+ #
34
+ .classpath
35
+ .cxx
36
+ .gradle
37
+ .idea
38
+ .project
39
+ .settings
40
+ local.properties
41
+ android.iml
42
+
43
+ # Cocoapods
44
+ #
45
+ example/ios/Pods
46
+
47
+ # Ruby
48
+ example/vendor/
49
+
50
+ # node.js
51
+ #
52
+ node_modules/
53
+ npm-debug.log
54
+ yarn-debug.log
55
+ yarn-error.log
56
+
57
+ # BUCK
58
+ buck-out/
59
+ \.buckd/
60
+ android/app/libs
61
+ android/keystores/debug.keystore
62
+
63
+ # Expo
64
+ .expo/
65
+
66
+ # Turborepo
67
+ .turbo/
68
+
69
+ # generated by bob
70
+ lib/