diff --git a/.github/workflows/e2e-android.yml b/.github/workflows/e2e-android.yml index bbbdc23e..5f18c990 100644 --- a/.github/workflows/e2e-android.yml +++ b/.github/workflows/e2e-android.yml @@ -10,80 +10,122 @@ on: jobs: e2e-android: - runs-on: macos-13 + runs-on: ubuntu-latest timeout-minutes: 120 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 1 + - name: Install pulseaudio + run: sudo apt-get install pulseaudio + + - name: Enable KVM group perms + 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: Free Disk Space + uses: jlumbroso/free-disk-space@main + with: + # this might remove tools that are actually needed, + # if set to "true" but frees about 6 GB + tool-cache: false + android: false + dotnet: true + haskell: true + large-packages: true + docker-images: true + swap-storage: true + + - name: yarn and gradle caches in /mnt + run: | + rm -rf ~/.yarn + rm -rf ~/.gradle + sudo mkdir -p /mnt/.yarn + sudo mkdir -p /mnt/.gradle + sudo chown -R runner /mnt/.yarn + sudo chown -R runner /mnt/.gradle + ln -s /mnt/.yarn /home/runner/ + ln -s /mnt/.gradle /home/runner/ + + - name: Create artifacts directory on /mnt + run: | + sudo mkdir -p /mnt/artifacts + sudo chown -R runner /mnt/artifacts + - name: Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 18 - cache: 'yarn' # cache packages, but not node_modules - cache-dependency-path: 'example/yarn.lock' + node-version: 20 + # cache: 'yarn' # cache packages, but not node_modules + # cache-dependency-path: 'example/yarn.lock' - - name: Cache lib node modules - uses: actions/cache@v3 - id: lib-npmcache + - name: Use yarn caches + uses: actions/cache@v4 with: - path: lib/node_modules - key: node-modules-${{ hashFiles('**/yarn.lock') }} + path: ~/.yarn + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- - name: Install lib dependencies - if: steps.lib-npmcache.outputs.cache-hit != 'true' working-directory: lib - run: yarn install + run: yarn || yarn - name: Build lib working-directory: lib run: yarn build - name: Use gradle caches - uses: actions/cache@v2 + uses: actions/cache@v4 with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - # - name: Cache node modules - # uses: actions/cache@v3 - # id: cache-nm - # with: - # path: node_modules - # key: node-modules-${{ hashFiles('**/yarn.lock') }} - - name: Install node_modules working-directory: example - run: yarn install && yarn rn-setup + run: (yarn || yarn) && yarn rn-setup - name: Use specific Java version for sdkmanager to work - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: '11' + java-version: '17' - name: Build working-directory: example - run: yarn e2e:build:android-release + run: yarn e2e:build:android-release || yarn e2e:build:android-release + + - name: Show build outputs + working-directory: example + run: tree android/app/build/outputs/ + + - name: Kill java processes + run: pkill -9 -f java || true - name: run tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 31 avd-name: Pixel_API_31_AOSP + profile: 5.4in FWVGA # devices list: avdmanager list device + api-level: 31 + force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -camera-back none -camera-front none -partition-size 2047 arch: x86_64 disable-animations: true working-directory: example - script: yarn e2e:test:android-release || yarn e2e:test:android-release || yarn e2e:test:android-release + script: yarn e2e:test:android-release --record-videos all --take-screenshots all --record-logs all --artifacts-location /mnt/artifacts || yarn e2e:test:android-release --record-videos all --take-screenshots all --record-logs all --artifacts-location /mnt/artifactsyarn e2e:test:android-release --record-videos all --take-screenshots all --record-logs all --artifacts-location /mnt/artifacts || yarn e2e:test:android-release --record-videos all --take-screenshots all --record-logs all --artifacts-location /mnt/artifacts - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 if: failure() with: name: e2e-test-videos - path: ./example/artifacts/ + path: /mnt/artifacts diff --git a/.github/workflows/mocha-android.yml b/.github/workflows/mocha-android.yml index d6ac5bb7..827a87bb 100644 --- a/.github/workflows/mocha-android.yml +++ b/.github/workflows/mocha-android.yml @@ -10,36 +10,62 @@ on: jobs: mocha-android: - runs-on: macos-12 + runs-on: ubuntu-latest timeout-minutes: 120 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 1 - - name: Setup Docker Colima 1 - uses: douglascamata/setup-docker-macos-action@v1-alpha - id: docker1 - continue-on-error: true + - name: Enable KVM group perms + 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: Free Disk Space + uses: jlumbroso/free-disk-space@main with: - lima: v0.18.0 - colima: v0.5.6 - - - name: Setup Docker Colima 2 - if: steps.docker1.outcome != 'success' - uses: douglascamata/setup-docker-macos-action@v1-alpha - id: docker2 - continue-on-error: true + # this might remove tools that are actually needed, + # if set to "true" but frees about 6 GB + tool-cache: false + android: false + dotnet: true + haskell: true + large-packages: true + docker-images: true + swap-storage: true + + - name: yarn and gradle caches in /mnt + run: | + rm -rf ~/.yarn + rm -rf ~/.gradle + sudo mkdir -p /mnt/.yarn + sudo mkdir -p /mnt/.gradle + sudo chown -R runner /mnt/.yarn + sudo chown -R runner /mnt/.gradle + ln -s /mnt/.yarn /home/runner/ + ln -s /mnt/.gradle /home/runner/ + + - name: Create artifacts directory on /mnt + run: | + sudo mkdir -p /mnt/artifacts + sudo chown -R runner /mnt/artifacts + + - name: Node + uses: actions/setup-node@v4 with: - lima: v0.18.0 - colima: v0.5.6 + node-version: 20 - - name: Setup Docker Default - if: steps.docker1.outcome != 'success' && steps.docker2.outcome != 'success' - uses: docker-practice/actions-setup-docker@1.0.12 - timeout-minutes: 30 + - name: Use yarn caches + uses: actions/cache@v4 + with: + path: ~/.yarn + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- - name: Run regtest setup working-directory: example/docker @@ -53,24 +79,9 @@ jobs: timeout-minutes: 2 run: while ! nc -z '127.0.0.1' 60001; do sleep 1; done - - name: Node - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'yarn' # cache packages, but not node_modules - cache-dependency-path: 'example/yarn.lock' - - - name: Cache lib node modules - uses: actions/cache@v3 - id: lib-npmcache - with: - path: lib/node_modules - key: node-modules-${{ hashFiles('**/yarn.lock') }} - - name: Install lib dependencies - if: steps.lib-npmcache.outputs.cache-hit != 'true' working-directory: lib - run: yarn --no-audit --prefer-offline || yarn --no-audit --prefer-offline + run: yarn || yarn - name: Build lib working-directory: lib @@ -84,31 +95,32 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - # - name: Cache node modules - # uses: actions/cache@v3 - # id: cache-nm - # with: - # path: node_modules - # key: node-modules-${{ hashFiles('**/yarn.lock') }} - - name: Install node_modules working-directory: example - run: yarn install && yarn rn-setup + run: (yarn || yarn) && yarn rn-setup - name: Use specific Java version for sdkmanager to work - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: '11' + java-version: '17' - # - name: Build - # working-directory: example - # run: npx react-native run-android --no-packager + - name: Build + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 34 + avd-name: Pixel_API_31_AOSP + emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -camera-back none -camera-front none -partition-size 2047 + arch: x86_64 + disable-animations: true + working-directory: example + script: | + npx react-native run-android --no-packager - name: run tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 31 + api-level: 34 avd-name: Pixel_API_31_AOSP emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -camera-back none -camera-front none -partition-size 2047 arch: x86_64 @@ -117,8 +129,8 @@ jobs: script: | ../.github/workflows/mocha-anrdoid.sh - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 if: failure() with: name: ldk-data - path: example/artifacts/ + path: /mnt/artifacts diff --git a/.github/workflows/mocha-anrdoid.sh b/.github/workflows/mocha-anrdoid.sh index 33539132..b6669e62 100755 --- a/.github/workflows/mocha-anrdoid.sh +++ b/.github/workflows/mocha-anrdoid.sh @@ -22,7 +22,10 @@ echo $EXIT_CODE; if [ $EXIT_CODE -ne 0 ]; then adb root sleep 10 - adb pull /data/user/0/com.exmpl/files/ldk/ artifacts/ + adb pull /data/user/0/com.exmpl/files/ldk/ /mnt/artifacts/ fi +sleep 10 +echo "Test finished" + exit $EXIT_CODE diff --git a/example/e2e/ldk.test.js b/example/e2e/ldk.test.js index 82ec8552..9e88a7a4 100644 --- a/example/e2e/ldk.test.js +++ b/example/e2e/ldk.test.js @@ -4,7 +4,7 @@ describe('LDK integration test', () => { }); beforeEach(async () => { - await device.reloadReactNative(); + // await device.reloadReactNative(); await element(by.id('dev')).tap(); }); diff --git a/example/package.json b/example/package.json index 6476c025..2223c9fb 100644 --- a/example/package.json +++ b/example/package.json @@ -13,8 +13,8 @@ "e2e:build:android-release": "detox build --configuration android.emu.release", "e2e:test:ios-debug": "detox test --configuration ios.sim.debug --record-videos all --take-screenshots all --record-logs all", "e2e:test:ios-release": "detox test --configuration ios.sim.release --record-videos all --take-screenshots all --record-logs all", - "e2e:test:android-debug": "detox test --configuration android.emu.debug --record-videos all --take-screenshots all --record-logs all", - "e2e:test:android-release": "detox test --configuration android.emu.release --record-videos all --take-screenshots all --record-logs all", + "e2e:test:android-debug": "detox test --configuration android.emu.debug", + "e2e:test:android-release": "detox test --configuration android.emu.release", "lint:check": "eslint . --ext .js,.jsx,.ts,.tsx", "lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix", "reinstall": "cd ../lib/ && yarn install && yarn build && cd ../example/ && yarn add ../lib && yarn rn-setup", @@ -72,7 +72,7 @@ "bitcoin-json-rpc": "^1.3.2", "chai-as-promised": "^7.1.1", "concurrently": "^8.2.0", - "detox": "20.17.0", + "detox": "20.20.2", "electrum-client": "github:BlueWallet/rn-electrum-client#47acb51149e97fab249c3f8a314f708dbee4fb6e", "eslint": "8.27.0", "eslint-config-prettier": "^8.5.0", diff --git a/example/yarn.lock b/example/yarn.lock index fbdcd4f9..18575ef6 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -2421,7 +2421,7 @@ bitcoinjs-lib "6.1.4" "@synonymdev/react-native-ldk@../lib": - version "0.0.141" + version "0.0.145" dependencies: "@synonymdev/raw-transaction-decoder" "1.1.0" bech32 "^2.0.0" @@ -4040,10 +4040,10 @@ detect-newline@^3.0.0: resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detox@20.17.0: - version "20.17.0" - resolved "https://registry.yarnpkg.com/detox/-/detox-20.17.0.tgz#836d2ebb193572e1f4a97e44af343891a5658f7b" - integrity sha512-IasYgexfkrCoZuJTaqqKHQ2yflK+tnqifzdLwrp4hdTWlXUlG9j/YcM1Dn3ThSs3b6VNMtbSe6xoPkKD0oNiIQ== +detox@20.20.2: + version "20.20.2" + resolved "https://registry.yarnpkg.com/detox/-/detox-20.20.2.tgz#988619d99e08bd992931458e3db7af248254bf31" + integrity sha512-X0FWsj8Bry965fEy7N87bKecIIkcAg3AyaCDXFa0yO+kAIajFbSV7LMtNTQP/c1D0eD4+U5sn9zUJWWhQhucWg== dependencies: ajv "^8.6.3" bunyan "^1.8.12"