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

Gradle lint error with 12.10.0 and yarn errors with 12.11.1 #6787

Closed
tmac24utm opened this issue Jul 11, 2024 · 4 comments
Closed

Gradle lint error with 12.10.0 and yarn errors with 12.11.1 #6787

tmac24utm opened this issue Jul 11, 2024 · 4 comments

Comments

@tmac24utm
Copy link

How frequently does the bug occur?

Always

Description

Let me preface by saying I assume this must be an issue with my setup, or there would be more reports. However, I can't seem to get by the lint error and it appears to be the patch for this that causes the other errors.

package.json
{
  "name": "project-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "node ./scripts/android.mjs",
    "ios": "node ./scripts/ios.mjs",
    "start": "react-native start",
    "test": "yarn lint && yarn build && jest --ci --reporters=default --reporters=jest-junit",
    "test:coverage": "jest --coverage",
    "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
    "build": "tsc --build tsconfig.json",
    "lintfix": "eslint . --ext .js,.ts,.tsx --fix",
    "install-ios": "bundle install && yarn pod-install"
  },
  "dependencies": {
    "@formatjs/intl-getcanonicallocales": "2.3.0",
    "@formatjs/intl-locale": "4.0.0",
    "@formatjs/intl-numberformat": "8.10.3",
    "@formatjs/intl-pluralrules": "5.2.14",
    "@formatjs/intl-relativetimeformat": "11.2.14",
    "@native-html/table-plugin": "5.3.1",
    "@notifee/react-native": "7.8.2",
    "@react-native-async-storage/async-storage": "1.23.1",
    "@react-native-community/blur": "4.4.0",
    "@react-native-community/datetimepicker": "8.1.1",
    "@react-native-community/geolocation": "3.2.1",
    "@react-native-community/netinfo": "11.3.2",
    "@react-native-firebase/app": "20.1.0",
    "@react-native-firebase/firestore": "20.1.0",
    "@react-native-firebase/messaging": "20.1.0",
    "@react-native-picker/picker": "2.7.7",
    "@react-navigation/drawer": "6.7.0",
    "@react-navigation/material-top-tabs": "6.6.13",
    "@react-navigation/native": "6.1.17",
    "@react-navigation/stack": "6.4.0",
    "@rneui/base": "4.0.0-rc.8",
    "@rneui/themed": "4.0.0-rc.8",
    "@semantic-release/commit-analyzer": "13.0.0",
    "@semantic-release/release-notes-generator": "14.0.1",
    "@tanstack/react-query": "5.51.1",
    "appcenter": "5.0.1",
    "appcenter-analytics": "5.0.1",
    "appcenter-crashes": "5.0.1",
    "axios": "1.7.2",
    "core-js-pure": "3.37.1",
    "country-iso-3-to-2": "1.1.1",
    "currency-symbol-map": "5.1.0",
    "fp-ts": "2.16.8",
    "i18next": "23.11.5",
    "inversify": "6.0.2",
    "jwt-decode": "4.0.0",
    "libphonenumber-js": "1.11.4",
    "luxon": "3.4.4",
    "mime-types": "2.1.35",
    "path": "0.12.7",
    "prop-types": "15.8.1",
    "react": "18.3.1",
    "react-hooks-form-validator": "5.2.0",
    "react-i18next": "14.1.2",
    "react-native": "0.74.3",
    "react-native-collapsible": "1.6.1",
    "react-native-config": "1.5.2",
    "react-native-device-info": "11.1.0",
    "react-native-document-picker": "9.3.0",
    "react-native-file-viewer": "2.1.5",
    "react-native-fs": "2.20.0",
    "react-native-gesture-handler": "2.17.1",
    "react-native-get-random-values": "1.11.0",
    "react-native-image-picker": "7.1.2",
    "react-native-localize": "3.2.0",
    "react-native-logs": "5.1.0",
    "react-native-masked-text": "1.13.0",
    "react-native-pager-view": "6.3.3",
    "react-native-permissions": "4.1.5",
    "react-native-picker-select": "9.1.3",
    "react-native-reanimated": "3.14.0",
    "react-native-reanimated-carousel": "3.5.1",
    "react-native-render-html": "6.3.4",
    "react-native-safe-area-context": "4.10.8",
    "react-native-screens": "3.32.0",
    "react-native-size-matters": "0.4.2",
    "react-native-snackbar": "2.6.2",
    "react-native-sqlite-storage": "6.0.1",
    "react-native-svg": "15.3.0",
    "react-native-tab-view": "3.5.2",
    "react-native-vector-icons": "10.1.0",
    "react-native-video": "6.3.0",
    "react-native-webview": "13.10.5",
    "react-timestamp": "6.0.0",
    "realm": "12.10.0",
    "reflect-metadata": "0.2.2",
    "shorthash2": "1.0.3",
    "typedjson": "1.8.0",
    "uuid": "10.0.0"
  },
  "devDependencies": {
    "@babel/core": "7.24.7",
    "@babel/eslint-parser": "7.24.7",
    "@babel/plugin-proposal-decorators": "7.24.7",
    "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
    "@babel/plugin-proposal-optional-chaining": "7.21.0",
    "@babel/plugin-transform-arrow-functions": "7.24.7",
    "@babel/plugin-transform-shorthand-properties": "7.24.7",
    "@babel/plugin-transform-template-literals": "7.24.7",
    "@babel/preset-env": "7.24.7",
    "@babel/runtime": "7.24.7",
    "@react-native/babel-preset": "0.74.85",
    "@react-native/eslint-config": "0.74.85",
    "@react-native/metro-config": "0.74.85",
    "@react-native/typescript-config": "0.74.85",
    "@semantic-release/git": "10.0.1",
    "@testing-library/jest-native": "5.4.3",
    "@testing-library/react-native": "12.5.1",
    "@types/jest-when": "3.5.5",
    "@types/luxon": "3.4.2",
    "@types/mime-types": "2.1.4",
    "@types/node": "20.14.10",
    "@types/randomstring": "1.3.0",
    "@types/react": "18.3.3",
    "@types/react-native-snap-carousel": "3.8.11",
    "@types/react-native-sqlite-storage": "6.0.5",
    "@types/react-native-video": "5.0.20",
    "@types/react-test-renderer": "18.3.0",
    "@types/uuid": "10.0.0",
    "babel-jest": "29.7.0",
    "babel-plugin-parameter-decorator": "1.0.16",
    "chalk": "5.3.0",
    "concurrently": "8.2.2",
    "eslint": "8.57.0",
    "eslint-plugin-ft-flow": "3.0.10",
    "hermes-eslint": "0.22.0",
    "inquirer": "10.0.1",
    "jest": "29.7.0",
    "jest-junit": "16.0.0",
    "jest-mock-axios": "4.7.3",
    "jest-mock-extended": "3.0.7",
    "jest-when": "3.6.0",
    "pod-install": "0.2.2",
    "prettier": "2.8.8",
    "randomstring": "1.3.0",
    "react-test-renderer": "18.3.1",
    "semantic-release": "24.0.0",
    "semantic-release-react-native": "1.10.0",
    "ts-jest": "29.2.2",
    "typescript": "5.5.3"
  },
  "engines": {
    "node": ">=18"
  },
  "jest-junit": {
    "outputDirectory": "./__tests__/report",
    "outputName": "junit.xml",
    "uniqueOutputName": "false",
    "classNameTemplate": "{classname}-{title}",
    "titleTemplate": "{classname}-{title}",
    "ancestorSeparator": " › ",
    "usePathForSuiteName": "true"
  },
  "resolutions": {
    "semantic-release-react-native": "patch:[email protected]#~/.yarn/patches/semantic-release-react-native-npm-1.9.0-b79f01d5ce.patch",
    "react-native-vector-icons": "patch:[email protected]#~/.yarn/patches/react-native-vector-icons-npm-10.1.0-78f5c98868.patch",
    "realm": "patch:[email protected]#~/.yarn/patches/realm-npm-12.10.0-d9181246d0.patch"
  },
  "packageManager": "[email protected]"
}

Issue on Version 12.10.0

I get a lint error when running gradle build.

Error:

> Task :realm:lintDebug FAILED
Lint found 1 errors, 0 warnings. First failure:

/Users/{name}/IdeaProjects/project-name/node_modules/realm/react-native/android/src/main/java/io/realm/react/RealmReactModule.java:98: Error: This declaration is opt-in and its usage should be marked with @com.facebook.react.common.annotations.FrameworkAPI or @OptIn(markerClass = com.facebook.react.common.annotations.FrameworkAPI.class) [UnsafeOptInUsageError from androidx.annotation.experimental]
        CallInvokerHolderImpl jsCallInvokerHolder = (CallInvokerHolderImpl) getReactApplicationContext().getCatalystInstance().getJSCallInvokerHolder();

Patch:

diff --git a/react-native/android/src/main/java/io/realm/react/RealmReactModule.java b/react-native/android/src/main/java/io/realm/react/RealmReactModule.java
index eda164794b888bebb9f74911cbd1fe6e16fbb55b..0b4cf1fa3e2d9d7648c897b41a551ba8df2618d1 100644
--- a/react-native/android/src/main/java/io/realm/react/RealmReactModule.java
+++ b/react-native/android/src/main/java/io/realm/react/RealmReactModule.java
@@ -22,9 +22,11 @@ import android.os.Handler;
 import android.os.HandlerThread;
 import android.util.Log;
 
+import androidx.annotation.OptIn;
 import com.facebook.react.bridge.JavaScriptContextHolder;
 import com.facebook.react.bridge.ReactApplicationContext;
 import com.facebook.react.bridge.ReactContextBaseJavaModule;
+import com.facebook.react.common.annotations.FrameworkAPI;
 import com.facebook.react.module.annotations.ReactModule;
 import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
 import com.facebook.soloader.SoLoader;
@@ -91,6 +93,7 @@ class RealmReactModule extends ReactContextBaseJavaModule {
     }
 
     @Override
+    @OptIn(markerClass = FrameworkAPI.class)
     public void initialize() {
         // Pass the React Native jsCallInvokerHolder over to C++, so that we can access the invokeAsync
         // method which we use to flush the React Native UI queue whenever we call from C++ to JS.

Issue on Version 12.11.1

Removing the patch or reverting version fixes these errors

After updating, which still requires the patch (patch was updated to point at the new location under binding), I now get an out of memory error on my azure dev ops pipeline. This doesn't happen locally, so really we can assume it's nothing to do with Realm, but this only happened once I updated to this version. This also doesn't happen all of the time, for example two or three builds passed this morning, but 10+ others have failed.
Related yarn issue: yarnpkg/berry#3972

Error:

➤ YN0001: │ Error: Couldn't allocate enough memory
    at ZipFS.getBufferAndClose ([worker eval]:1:298046)
    at ZipFS.saveAndClose ([worker eval]:1:299036)
    at convertToZipWorker ([worker eval]:1:407956)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async MessagePort.<anonymous> ([worker eval]:1:409728)

Slightly different error (happened one time):

➤ YN0001: │ Error: realm@patch:realm@npm%3A12.11.1#~/.yarn/patches/realm-npm-12.11.1-b36e6a8058.patch::version=12.11.1&hash=2908f6: Couldn't allocate enough memory
    at Xi.getBufferAndClose (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:149:196025)
    at Xi.saveAndClose (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:149:197010)
    at _v.patchPackage (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:710:1879)
    at async v (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:199:1576)
    at async x (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:199:1916)
    at async C (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:199:3253)
    at async Nr.fetchPackageFromCache (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:199:3374)
    at async _v.fetch (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:710:1060)
    at async fE.fetch (/home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:141:463)
    at async /home/vsts/work/1/s/.yarn/releases/yarn-4.3.1.cjs:210:11866

Pipeline .yml (fails at Install dependencies):

name: $(date:yyyyMMdd)$(rev:.r)

pr:
  - master

stages:
  - stage: Build
    jobs:
      jobs:
        - job: ci
          displayName: React Native CI
          pool:
            vmImage: ubuntu-latest
          steps:
            - checkout: self
              fetchDepth: 1

            - task: NodeTool@0
              displayName: Set up node version
              inputs:
                versionSource: 'spec'
                versionSpec: '>=18'
                
            - task: CmdLine@2
              displayName: Install dependencies
              inputs:
                script: |
                  yarn install --immutable

            - task: CmdLine@2
              displayName: Run tests
              inputs:
                script: |
                  yarn test --forceExit

I tried multiple different things to fix this, including setting NODE_OPTIONS to --max-old-space-size=6144 (ado agents have 7gb memory), changing node version, yarn version etc.

Separate 12.11.1 issue

I tried reverting to yarn 3.6.4 (the version used by new react native projects), and on this version, running yarn install causes it to "load" forever locally. This doesn't happen when trying yarn 3.6.4 on version 12.10.0

Stacktrace & log output

See description

Can you reproduce the bug?

Always

Reproduction Steps

I can always reproduce the lint error. The yarn memory error is inconsistent.

To reproduce the lint error

  1. npx @react-native-community/cli@latest init AwesomeProject
  2. cd AwesomeProject
  3. yarn add realm
  4. cd android
  5. ./gradlew build

To reproduce the yarn error

I assume this is a similar error, it just spins forever on install

  1. npx @react-native-community/cli@latest init AwesomeProject
  2. cd AwesomeProject
  3. yarn set version 3.6.4 (despite making a brand new project, my yarn version was set to 4.3.1. I'm sure this is a whole other issue)
  4. yarn add realm

ADO Error

  1. npx @react-native-community/cli@latest init AwesomeProject
  2. cd AwesomeProject
  3. yarn add realm
  4. yarn patch realm
  5. Follow the instructions to create the patch, and copy the changes I made in the patch above.
  6. Create an ADO pipeline using the yml above
  7. Run the pipeline

Version

12.10.0 & 12.11.1

What services are you using?

Local Database only

Are you using encryption?

No

Platform OS and version(s)

macOS 14.5

Build environment

Yarn: 4.3.1
Gradle: 8.6

Cocoapods version

1.15.2

@tmac24utm tmac24utm changed the title Lint error with 12.10.0 and yarn errors with 12.11.1 Gradle lint error with 12.10.0 and yarn errors with 12.11.1 Jul 11, 2024
Copy link

sync-by-unito bot commented Jul 11, 2024

➤ PM Bot commented:

Jira ticket: RJS-2863

@kneth
Copy link
Contributor

kneth commented Jul 12, 2024

@tmac24utm Thank you for your detailed description

@kraenhansen Can you take a look once you are back?

@kraenhansen
Copy link
Member

kraenhansen commented Jul 17, 2024

I've included a fix for the gradle lint error in #6737 and expect this to be included in the next upcoming release 👍

@kraenhansen kraenhansen self-assigned this Jul 17, 2024
@kraenhansen
Copy link
Member

kraenhansen commented Jul 17, 2024

I now get an out of memory error on my azure dev ops pipeline.

This could be due to the fact that we're now including more (and larger) prebuilt binaries in the archive uploaded to NPM since v12.11.0.

My suggestions would be to either:

  • beef up the machine on CI if possible
  • try upgrading yarn to the latest version if you're not already, in case they've fixed a memory issue regarding the unarchiving of the archive downloaded from NPM.
  • switch to a different package manager that has a better memory footprint when unarchiving.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 16, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants