From b946cbbc0201f83a3cb99255d4f9f1d17d926696 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 29 Jun 2022 09:21:01 +0200 Subject: [PATCH 01/88] packages for 0.65 --- .github/workflows/pr.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b00a2e773..f35ab0920 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -120,3 +120,21 @@ jobs: - name: Gulp Build ${{ matrix.platform }} ${{ matrix.config }} Playground (Windows) run: npx gulp buildUWPPlayground${{ matrix.platform }}${{ matrix.config }} working-directory: ./Package + +# Test packages + build-android-ios-065: + uses: ./.github/workflows/ios_android.yml + with: + react-native-version: 0.65 + release-version: 2.0.0 # dummy version + + build-windows-065: + uses: ./.github/workflows/windows.yml + with: + react-native-version: 0.65 + release-version: 2.0.0 + + build-typescript: + uses: ./.github/workflows/typescript.yml + with: + release-version: 2.0.0 \ No newline at end of file From ca107c09861b8455b40ac431dcec81aa7e561682 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 29 Jun 2022 12:20:42 +0200 Subject: [PATCH 02/88] add artifact --- .github/workflows/add_artifact_urls.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .github/workflows/add_artifact_urls.yml diff --git a/.github/workflows/add_artifact_urls.yml b/.github/workflows/add_artifact_urls.yml new file mode 100644 index 000000000..aa3320c89 --- /dev/null +++ b/.github/workflows/add_artifact_urls.yml @@ -0,0 +1,21 @@ +name: add artifact links to pull request and related issues +on: + workflow_run: + workflows: ['PR Build'] + types: [completed] + +jobs: + artifacts-url-comments: + name: add artifact links to pull request and related issues job + runs-on: windows-2019 + steps: + - name: add artifact links to pull request and related issues step + uses: tonyhallett/artifacts-url-comments@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + prefix: Here are the build results + suffix: Artifacts will only be retained for 90 days. + format: name + addTo: pull + continue-on-error: true From a96592416881375483b18a4d88797949b89cbbb6 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 10:36:31 +0100 Subject: [PATCH 03/88] testVersion --- .github/workflows/testVersion.yml | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/testVersion.yml diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml new file mode 100644 index 000000000..b2faac8db --- /dev/null +++ b/.github/workflows/testVersion.yml @@ -0,0 +1,35 @@ +name: Publish Package For Preview +on: + workflow_dispatch: + inputs: + RN_Version: + description: 'ReactNative Version' + required: true + type: string + default: '0.69.0' + BRN_Version: + description: 'Babylon ReactNative Version' + required: true + type: string + default: '0-69' + +jobs: + build: + runs-on: macos-latest + + steps: + - name: Generate PG + run: | + npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} --template react-native-template-typescript + cd Playground + npm install @babylonjs/core + npm install @babylonjs/loaders + npm install @babylonjs/react-native + @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npm build android + npm build ios + - name: Upload Assembled + uses: actions/upload-artifact@v2 + with: + name: 'Assembled' + path: Playground \ No newline at end of file From a4a3765ff9ce6bad2ec6e0aaf88217d69a7ad962 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 10:37:22 +0100 Subject: [PATCH 04/88] title --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index b2faac8db..b5b989ecd 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -1,4 +1,4 @@ -name: Publish Package For Preview +name: Test RN/BRN Version on: workflow_dispatch: inputs: From 3db221650e0a2b08f8028dba3ea72c40e7f986aa Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 10:41:56 +0100 Subject: [PATCH 05/88] template --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index b5b989ecd..eb6710fb3 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Generate PG run: | - npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} --template react-native-template-typescript + npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground npm install @babylonjs/core npm install @babylonjs/loaders From 80054d4e34ff58cd405390a697804fbefc5ae2d1 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:19:22 +0100 Subject: [PATCH 06/88] ubuntu --- .github/workflows/testVersion.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index eb6710fb3..13323a79c 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -15,11 +15,12 @@ on: jobs: build: - runs-on: macos-latest + runs-on: ubuntu-latest steps: - name: Generate PG run: | +# brew install ruby@2.7 npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground npm install @babylonjs/core @@ -27,7 +28,7 @@ jobs: npm install @babylonjs/react-native @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} npm build android - npm build ios +# npm build ios - name: Upload Assembled uses: actions/upload-artifact@v2 with: From d0ac717a2b4f8a903aaf991074bf447bc54518da Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:20:28 +0100 Subject: [PATCH 07/88] comments --- .github/workflows/testVersion.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 13323a79c..996d07e4f 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -20,7 +20,6 @@ jobs: steps: - name: Generate PG run: | -# brew install ruby@2.7 npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground npm install @babylonjs/core @@ -28,7 +27,6 @@ jobs: npm install @babylonjs/react-native @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} npm build android -# npm build ios - name: Upload Assembled uses: actions/upload-artifact@v2 with: From 4f7d05a7bec28ef511185dd43e145cc254472c86 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:25:02 +0100 Subject: [PATCH 08/88] react-native iosandroid --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 996d07e4f..8ca1580d3 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -25,7 +25,7 @@ jobs: npm install @babylonjs/core npm install @babylonjs/loaders npm install @babylonjs/react-native - @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} npm build android - name: Upload Assembled uses: actions/upload-artifact@v2 From 9663758b2b97c25f6c76cb182ad0e4e8e6884f08 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:28:47 +0100 Subject: [PATCH 09/88] npm build --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 8ca1580d3..4ce3c8b22 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -26,7 +26,7 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npm build android + npm build - name: Upload Assembled uses: actions/upload-artifact@v2 with: From 9b60a48940e5b14468821406c77ca4182b820a33 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:33:04 +0100 Subject: [PATCH 10/88] run android --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 4ce3c8b22..f2522ae9d 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -26,7 +26,7 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npm build + npm run android - name: Upload Assembled uses: actions/upload-artifact@v2 with: From 3df66646215a2eb2eb88806a47b03ace75325b82 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:42:06 +0100 Subject: [PATCH 11/88] gradlew --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index f2522ae9d..87f88612b 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -26,7 +26,8 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npm run android + cd android + ./gradlew Playground:assembleRelease --stacktrace --info - name: Upload Assembled uses: actions/upload-artifact@v2 with: From 8dd8a6eb40d04c9b7f590afbd7272384d78e6d83 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:48:39 +0100 Subject: [PATCH 12/88] app --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 87f88612b..03e86c8e7 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -27,7 +27,7 @@ jobs: npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} cd android - ./gradlew Playground:assembleRelease --stacktrace --info + ./gradlew app:assembleRelease --stacktrace --info - name: Upload Assembled uses: actions/upload-artifact@v2 with: From 0349f0763148399baea65598253ccfd9fbd70c94 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 25 Jan 2023 11:58:13 +0100 Subject: [PATCH 13/88] apk --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 03e86c8e7..6a6e6cc72 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -32,4 +32,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: 'Assembled' - path: Playground \ No newline at end of file + path: Playground/android/app/build/outputs/apk/release/app-release.apk \ No newline at end of file From d736625b1133a0ed555616cf2dbf429ad7aa9a28 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 10:38:35 +0100 Subject: [PATCH 14/88] windows build --- .github/workflows/testVersion.yml | 41 +++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 6a6e6cc72..c9476a181 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -14,11 +14,31 @@ on: default: '0-69' jobs: - build: + + build-windows: + runs-on: windows-latest + steps: + - name: Generate PG Windows + npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + cd Playground + npm install @babylonjs/core + npm install @babylonjs/loaders + npm install @babylonjs/react-native + npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npx react-native-windows-init --overwrite + msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" + + - name: Upload UWP x64 + uses: actions/upload-artifact@v2 + with: + name: 'WindowsUWPx64' + path: Playground/windows + + build-android: runs-on: ubuntu-latest steps: - - name: Generate PG + - name: Generate PG Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground @@ -26,10 +46,21 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npx react-native-windows-init --overwrite + msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./Playground.sln" cd android ./gradlew app:assembleRelease --stacktrace --info - - name: Upload Assembled + + - name: Upload APK uses: actions/upload-artifact@v2 with: - name: 'Assembled' - path: Playground/android/app/build/outputs/apk/release/app-release.apk \ No newline at end of file + name: 'AndroidAPK' + path: Playground/android/app/build/outputs/apk/release/app-release.apk + + package: + needs: [build-windows, build-android] + runs-on: macos-latest + steps: + - name: Gather + run: | + ls -l -a \ No newline at end of file From a26918ed6177261c8fdb0d87c29e3e0630e8e7a0 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 10:40:29 +0100 Subject: [PATCH 15/88] indents --- .github/workflows/testVersion.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index c9476a181..d9289b8f8 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -18,7 +18,8 @@ jobs: build-windows: runs-on: windows-latest steps: - - name: Generate PG Windows + - name: Generate PG Windows + run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground npm install @babylonjs/core @@ -36,7 +37,6 @@ jobs: build-android: runs-on: ubuntu-latest - steps: - name: Generate PG Android run: | @@ -62,5 +62,5 @@ jobs: runs-on: macos-latest steps: - name: Gather - run: | - ls -l -a \ No newline at end of file + run: | + ls -l -a \ No newline at end of file From 0d5fd88da9bbb4a3e4dad241e2b0b829b79d178a Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 10:57:25 +0100 Subject: [PATCH 16/88] msbuild --- .github/workflows/testVersion.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index d9289b8f8..830339eb2 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -18,6 +18,8 @@ jobs: build-windows: runs-on: windows-latest steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 - name: Generate PG Windows run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} @@ -46,8 +48,6 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npx react-native-windows-init --overwrite - msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./Playground.sln" cd android ./gradlew app:assembleRelease --stacktrace --info From 8943303e0aced7a658c485d5a55b7e4e5d42adfe Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 11:19:42 +0100 Subject: [PATCH 17/88] windows 2019 --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 830339eb2..57dad9412 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -16,7 +16,7 @@ on: jobs: build-windows: - runs-on: windows-latest + runs-on: windows-2019 steps: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 From 6a7b5f5fd769e0fd7d74251fbee553b00aae379e Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 11:43:31 +0100 Subject: [PATCH 18/88] nuget restore --- .github/workflows/testVersion.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 57dad9412..22c0b47a9 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -16,11 +16,11 @@ on: jobs: build-windows: - runs-on: windows-2019 + runs-on: windows-latest steps: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - - name: Generate PG Windows + - name: Build Playground Windows x64 run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground @@ -29,6 +29,7 @@ jobs: npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} npx react-native-windows-init --overwrite + msbuild.exe /r "./windows/Playground.sln" msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" - name: Upload UWP x64 @@ -40,7 +41,7 @@ jobs: build-android: runs-on: ubuntu-latest steps: - - name: Generate PG Android + - name: Build Playground Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cd Playground From 215641e0c00d1598bc65d95a84833065fd4602e8 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 12:07:58 +0100 Subject: [PATCH 19/88] back to 2019 --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 22c0b47a9..2cffd67cc 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -16,7 +16,7 @@ on: jobs: build-windows: - runs-on: windows-latest + runs-on: windows-2019 steps: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 From 77937fda93f121404f00428cdddf72f62a81ecef Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 26 Jan 2023 14:42:32 +0100 Subject: [PATCH 20/88] windows package path --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 2cffd67cc..6c11de3f6 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -36,7 +36,7 @@ jobs: uses: actions/upload-artifact@v2 with: name: 'WindowsUWPx64' - path: Playground/windows + path: Playground/windows/x64/Release/Playground build-android: runs-on: ubuntu-latest From f70ad573acab24d415e7a3a70518a5365af4068d Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 10:32:04 +0100 Subject: [PATCH 21/88] test emulator --- .github/workflows/testVersion.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 6c11de3f6..bdbabd617 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -58,8 +58,30 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk + - name: Install Android Emulator + run: | + echo Install Android image + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses + echo Create AVD + $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" + + - name: Start emulator + run: | + echo Start emulator + nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_27 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & + echo Wait for emulator + $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' + $ANDROID_HOME/platform-tools/adb devices + + -name: Install & Run .APK + run: | + adb install -t Playground/android/app/build/outputs/apk/release/app-release.apk + adb shell am start -n com.playground/com.playground.MainActivity + package: - needs: [build-windows, build-android] + #needs: [build-windows, build-android] + needs: [build-android] runs-on: macos-latest steps: - name: Gather From 2acdfd20e59fd9c0da04b19d3d9eece9754f9fc9 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 10:33:50 +0100 Subject: [PATCH 22/88] typo --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index bdbabd617..9fd07c3d5 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -74,7 +74,7 @@ jobs: $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' $ANDROID_HOME/platform-tools/adb devices - -name: Install & Run .APK + - name: Install & Run .APK run: | adb install -t Playground/android/app/build/outputs/apk/release/app-release.apk adb shell am start -n com.playground/com.playground.MainActivity From a7f41bacd7a57bc7e7759c63a4239e096556dc7f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 10:48:02 +0100 Subject: [PATCH 23/88] macos --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 9fd07c3d5..21c647983 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -39,7 +39,7 @@ jobs: path: Playground/windows/x64/Release/Playground build-android: - runs-on: ubuntu-latest + runs-on: macos-latest steps: - name: Build Playground Android run: | From 56b3d45d2418b47f3359fd9b1f0f30952212b20f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 10:48:51 +0100 Subject: [PATCH 24/88] no windows --- .github/workflows/testVersion.yml | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 21c647983..0c5b4f2e2 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -15,28 +15,28 @@ on: jobs: - build-windows: - runs-on: windows-2019 - steps: - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 - - name: Build Playground Windows x64 - run: | - npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} - cd Playground - npm install @babylonjs/core - npm install @babylonjs/loaders - npm install @babylonjs/react-native - npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npx react-native-windows-init --overwrite - msbuild.exe /r "./windows/Playground.sln" - msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" - - - name: Upload UWP x64 - uses: actions/upload-artifact@v2 - with: - name: 'WindowsUWPx64' - path: Playground/windows/x64/Release/Playground +# build-windows: +# runs-on: windows-2019 +# steps: +# - name: Add msbuild to PATH +# uses: microsoft/setup-msbuild@v1.1 +# - name: Build Playground Windows x64 +# run: | +# npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} +# cd Playground +# npm install @babylonjs/core +# npm install @babylonjs/loaders +# npm install @babylonjs/react-native +# npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} +# npx react-native-windows-init --overwrite +# msbuild.exe /r "./windows/Playground.sln" +# msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" +# +# - name: Upload UWP x64 +# uses: actions/upload-artifact@v2 +# with: +# name: 'WindowsUWPx64' +# path: Playground/windows/x64/Release/Playground build-android: runs-on: macos-latest From d8e085dd17d17166bce9f71dfc5be721e9d0063d Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 10:56:29 +0100 Subject: [PATCH 25/88] separate build & test --- .github/workflows/testVersion.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 0c5b4f2e2..b033efca5 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -39,7 +39,7 @@ jobs: # path: Playground/windows/x64/Release/Playground build-android: - runs-on: macos-latest + runs-on: ubuntu-latest steps: - name: Build Playground Android run: | @@ -58,6 +58,15 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk + test-android: + needs: [build-android] + runs-on: macos-latest + steps: + - name: Download APK + uses: actions/download-artifact@v2 + with: + name: 'AndroidAPK' + path: ./ - name: Install Android Emulator run: | echo Install Android image @@ -81,7 +90,7 @@ jobs: package: #needs: [build-windows, build-android] - needs: [build-android] + needs: [test-android] runs-on: macos-latest steps: - name: Gather From 370b5b9ef2a6a02dcfcec523fc3c1bb7d20ad076 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 11:08:31 +0100 Subject: [PATCH 26/88] apk path --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index b033efca5..e8116f66f 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -85,7 +85,7 @@ jobs: - name: Install & Run .APK run: | - adb install -t Playground/android/app/build/outputs/apk/release/app-release.apk + adb install -t ./app-release.apk adb shell am start -n com.playground/com.playground.MainActivity package: From 3c21c537bed5455fad92e4ba68a42b1aefb1b370 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 11:41:14 +0100 Subject: [PATCH 27/88] default paths --- .github/workflows/testVersion.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index e8116f66f..9540b66c4 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -70,23 +70,25 @@ jobs: - name: Install Android Emulator run: | echo Install Android image - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses + echo "y" | sdkmanager --install "system-images;android-27;default;x86_64" + echo "y" | sdkmanager --licenses echo Create AVD - $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" + avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" - name: Start emulator run: | echo Start emulator nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_27 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & echo Wait for emulator - $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' - $ANDROID_HOME/platform-tools/adb devices + adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' + adb devices - name: Install & Run .APK run: | adb install -t ./app-release.apk adb shell am start -n com.playground/com.playground.MainActivity + sleep 2 + adb shell pidof com.playground.MainActivity package: #needs: [build-windows, build-android] From b71ab0e19a1d107aa958c0c50d9039f2bc4953e1 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 12:01:43 +0100 Subject: [PATCH 28/88] check running --- .github/workflows/testVersion.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 9540b66c4..606d294e5 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -70,10 +70,10 @@ jobs: - name: Install Android Emulator run: | echo Install Android image - echo "y" | sdkmanager --install "system-images;android-27;default;x86_64" - echo "y" | sdkmanager --licenses + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses echo Create AVD - avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" + $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" - name: Start emulator run: | @@ -87,8 +87,12 @@ jobs: run: | adb install -t ./app-release.apk adb shell am start -n com.playground/com.playground.MainActivity - sleep 2 - adb shell pidof com.playground.MainActivity + # wait not ready + adb wait-for-device shell 'while [[ -z $(pidof com.playground | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' + # wait a bit more + sleep 10 + # check it's still alive + if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit(1); fi package: #needs: [build-windows, build-android] From 94b032db967019457f2443f729b66f42ffe29321 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 12:16:30 +0100 Subject: [PATCH 29/88] script --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 606d294e5..139baa6c7 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -92,7 +92,7 @@ jobs: # wait a bit more sleep 10 # check it's still alive - if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit(1); fi + if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit 1; fi package: #needs: [build-windows, build-android] From 33ff0e50ee550ca149ec14e976708613a888268d Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 13:09:28 +0100 Subject: [PATCH 30/88] strings --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 139baa6c7..a5f4bb45f 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -88,7 +88,8 @@ jobs: adb install -t ./app-release.apk adb shell am start -n com.playground/com.playground.MainActivity # wait not ready - adb wait-for-device shell 'while [[ -z $(pidof com.playground | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' + adb shell "pidof com.playground" + adb shell "while [[ -z $(pidof com.playground | tr -d '\r') ]]; do echo '.''; sleep 1; done; input keyevent 82" # wait a bit more sleep 10 # check it's still alive From 356988c777b8a3863fcc51f4656d953a851e994c Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 13:33:06 +0100 Subject: [PATCH 31/88] verbose checks --- .github/workflows/testVersion.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index a5f4bb45f..7476b9185 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -86,14 +86,17 @@ jobs: - name: Install & Run .APK run: | adb install -t ./app-release.apk + echo APK installation done. adb shell am start -n com.playground/com.playground.MainActivity - # wait not ready + echo Activity started. adb shell "pidof com.playground" + echo Activity PID adb shell "while [[ -z $(pidof com.playground | tr -d '\r') ]]; do echo '.''; sleep 1; done; input keyevent 82" - # wait a bit more + echo Activity is running. Waiting 10s. sleep 10 - # check it's still alive + echo Checking it's still alive if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit 1; fi + echo Checks done. package: #needs: [build-windows, build-android] From eba9baa0ecf67c9e00f58f92e05413fcc20e11ea Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 13:48:33 +0100 Subject: [PATCH 32/88] strings again --- .github/workflows/testVersion.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 7476b9185..2be075b7d 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -70,15 +70,15 @@ jobs: - name: Install Android Emulator run: | echo Install Android image - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-29;default;x86_64" echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses echo Create AVD - $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" + $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_29 -d pixel -k "system-images;android-29;default;x86_64" - name: Start emulator run: | echo Start emulator - nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_27 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & + nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_29 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & echo Wait for emulator adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' adb devices @@ -87,11 +87,11 @@ jobs: run: | adb install -t ./app-release.apk echo APK installation done. - adb shell am start -n com.playground/com.playground.MainActivity + adb wait-for-device shell 'am start -n com.playground/com.playground.MainActivity' echo Activity started. - adb shell "pidof com.playground" + adb wait-for-device shell 'pidof com.playground' echo Activity PID - adb shell "while [[ -z $(pidof com.playground | tr -d '\r') ]]; do echo '.''; sleep 1; done; input keyevent 82" + adb wait-for-device shell 'while [[ -z $(pidof com.playground | tr -d "\r") ]]; do echo "."; sleep 1; done; input keyevent 82' echo Activity is running. Waiting 10s. sleep 10 echo Checking it's still alive From c960ca30c6fa77e8e7954403bd012f2dd5bf1211 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 14:19:24 +0100 Subject: [PATCH 33/88] back to android 27 --- .github/workflows/testVersion.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 2be075b7d..f558cb2cd 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -70,15 +70,15 @@ jobs: - name: Install Android Emulator run: | echo Install Android image - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-29;default;x86_64" + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses echo Create AVD - $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_29 -d pixel -k "system-images;android-29;default;x86_64" + $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" - name: Start emulator run: | echo Start emulator - nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_29 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & + nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_27 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & echo Wait for emulator adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' adb devices From 3038f9ffa20f88759de529614125f104a79e657e Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 14:40:13 +0100 Subject: [PATCH 34/88] strings --- .github/workflows/testVersion.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index f558cb2cd..3bb27239a 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -87,11 +87,11 @@ jobs: run: | adb install -t ./app-release.apk echo APK installation done. - adb wait-for-device shell 'am start -n com.playground/com.playground.MainActivity' + adb wait-for-device shell am start -n com.playground/com.playground.MainActivity echo Activity started. - adb wait-for-device shell 'pidof com.playground' + adb wait-for-device shell pidof com.playground echo Activity PID - adb wait-for-device shell 'while [[ -z $(pidof com.playground | tr -d "\r") ]]; do echo "."; sleep 1; done; input keyevent 82' + adb wait-for-device shell while [[ -z $(pidof com.playground | tr -d "\r") ]]; do echo "."; sleep 1; done; input keyevent 82 echo Activity is running. Waiting 10s. sleep 10 echo Checking it's still alive From 7a0041dfd4999d816c66ad941c3ffcc57a31de62 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 27 Jan 2023 15:02:34 +0100 Subject: [PATCH 35/88] mix --- .github/workflows/testVersion.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 3bb27239a..66450bc5b 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -82,9 +82,6 @@ jobs: echo Wait for emulator adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' adb devices - - - name: Install & Run .APK - run: | adb install -t ./app-release.apk echo APK installation done. adb wait-for-device shell am start -n com.playground/com.playground.MainActivity From 237e4c021f6556da184ef3e091798d05405f05b6 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 10:27:49 +0100 Subject: [PATCH 36/88] WIP --- .github/workflows/testVersion.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 66450bc5b..5153b9f82 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -58,6 +58,13 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk + - name: Upload Playground App + uses: actions/upload-artifact@v2 + with: + name: 'Playground App' + path: Playground/ + +# test jobs not working test-android: needs: [build-android] runs-on: macos-latest @@ -96,8 +103,7 @@ jobs: echo Checks done. package: - #needs: [build-windows, build-android] - needs: [test-android] + needs: [build-android] runs-on: macos-latest steps: - name: Gather From c5c6004fd63f471bc7c5e48bdb23a9c9cf7b522d Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 10:30:02 +0100 Subject: [PATCH 37/88] remove test android --- .github/workflows/testVersion.yml | 72 +++++++++++++++---------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 5153b9f82..a4889613f 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -65,42 +65,42 @@ jobs: path: Playground/ # test jobs not working - test-android: - needs: [build-android] - runs-on: macos-latest - steps: - - name: Download APK - uses: actions/download-artifact@v2 - with: - name: 'AndroidAPK' - path: ./ - - name: Install Android Emulator - run: | - echo Install Android image - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses - echo Create AVD - $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" - - - name: Start emulator - run: | - echo Start emulator - nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_27 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & - echo Wait for emulator - adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' - adb devices - adb install -t ./app-release.apk - echo APK installation done. - adb wait-for-device shell am start -n com.playground/com.playground.MainActivity - echo Activity started. - adb wait-for-device shell pidof com.playground - echo Activity PID - adb wait-for-device shell while [[ -z $(pidof com.playground | tr -d "\r") ]]; do echo "."; sleep 1; done; input keyevent 82 - echo Activity is running. Waiting 10s. - sleep 10 - echo Checking it's still alive - if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit 1; fi - echo Checks done. +# test-android: +# needs: [build-android] +# runs-on: macos-latest +# steps: +# - name: Download APK +# uses: actions/download-artifact@v2 +# with: +# name: 'AndroidAPK' +# path: ./ +# - name: Install Android Emulator +# run: | +# echo Install Android image +# echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install "system-images;android-27;default;x86_64" +# echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses +# echo Create AVD +# $ANDROID_HOME/tools/bin/avdmanager create avd -n Pixel_API_27 -d pixel -k "system-images;android-27;default;x86_64" +# +# - name: Start emulator +# run: | +# echo Start emulator +# nohup $ANDROID_HOME/emulator/emulator -avd Pixel_API_27 -gpu host -no-audio -no-boot-anim -camera-back none -camera-front none -qemu -m 2048 2>&1 & +# echo Wait for emulator +# adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do echo "."; sleep 1; done; input keyevent 82' +# adb devices +# adb install -t ./app-release.apk +# echo APK installation done. +# adb wait-for-device shell am start -n com.playground/com.playground.MainActivity +# echo Activity started. +# adb wait-for-device shell pidof com.playground +# echo Activity PID +# adb wait-for-device shell while [[ -z $(pidof com.playground | tr -d "\r") ]]; do echo "."; sleep 1; done; input keyevent 82 +# echo Activity is running. Waiting 10s. +# sleep 10 +# echo Checking it's still alive +# if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit 1; fi +# echo Checks done. package: needs: [build-android] From b41fc6961d1864bc911edf2e4213fc7def791003 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 11:18:35 +0100 Subject: [PATCH 38/88] update app TS --- .github/workflows/testVersion.yml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index a4889613f..a024bf1a0 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -41,6 +41,11 @@ jobs: build-android: runs-on: ubuntu-latest steps: + - name: Checkout Repo + uses: actions/checkout@v2.3.3 + - name: Update App scripts + run: | + cp Apps/Playground/playground-shared/* ./Playground/ - name: Build Playground Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} @@ -49,6 +54,7 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npm install @react-native-community/slider cd android ./gradlew app:assembleRelease --stacktrace --info @@ -58,11 +64,11 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk - - name: Upload Playground App - uses: actions/upload-artifact@v2 - with: - name: 'Playground App' - path: Playground/ +# - name: Upload Playground App +# uses: actions/upload-artifact@v2 +# with: +# name: 'Playground App' +# path: Playground/ # test jobs not working # test-android: From 35d9166b8522babbf63efa9875bf44899f56f09c Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 11:24:06 +0100 Subject: [PATCH 39/88] cp script --- .github/workflows/testVersion.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index a024bf1a0..c9f97f894 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -43,12 +43,10 @@ jobs: steps: - name: Checkout Repo uses: actions/checkout@v2.3.3 - - name: Update App scripts - run: | - cp Apps/Playground/playground-shared/* ./Playground/ - name: Build Playground Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + cp Apps/Playground/playground-shared/* ./Playground/ cd Playground npm install @babylonjs/core npm install @babylonjs/loaders From 2062bb44c65b4addeecef9d4b0e56567042b4f0f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 11:30:42 +0100 Subject: [PATCH 40/88] again --- .github/workflows/testVersion.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index c9f97f894..ff6369748 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -38,6 +38,8 @@ jobs: # name: 'WindowsUWPx64' # path: Playground/windows/x64/Release/Playground +# npm install @react-native-community/slider + build-android: runs-on: ubuntu-latest steps: @@ -48,11 +50,11 @@ jobs: npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cp Apps/Playground/playground-shared/* ./Playground/ cd Playground + ls -R npm install @babylonjs/core npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npm install @react-native-community/slider cd android ./gradlew app:assembleRelease --stacktrace --info From c848c851b435377b1c72b81d1f488ae3fae777b9 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 11:36:00 +0100 Subject: [PATCH 41/88] config crash --- .github/workflows/testVersion.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index ff6369748..73ad7de73 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -6,12 +6,12 @@ on: description: 'ReactNative Version' required: true type: string - default: '0.69.0' + default: '0.71.0' BRN_Version: description: 'Babylon ReactNative Version' required: true type: string - default: '0-69' + default: '0-70' jobs: @@ -38,8 +38,8 @@ jobs: # name: 'WindowsUWPx64' # path: Playground/windows/x64/Release/Playground -# npm install @react-native-community/slider - +# +cp Apps/Playground/playground-shared/* ./Playground/ build-android: runs-on: ubuntu-latest steps: @@ -48,13 +48,14 @@ jobs: - name: Build Playground Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} - cp Apps/Playground/playground-shared/* ./Playground/ + cd Playground ls -R npm install @babylonjs/core npm install @babylonjs/loaders npm install @babylonjs/react-native npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npm install @react-native-community/slider cd android ./gradlew app:assembleRelease --stacktrace --info From 93f06131254083db8b4b62dedce8aba6e984ae0b Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 11:38:04 +0100 Subject: [PATCH 42/88] removed copy --- .github/workflows/testVersion.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 73ad7de73..e528a5495 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -39,7 +39,7 @@ jobs: # path: Playground/windows/x64/Release/Playground # -cp Apps/Playground/playground-shared/* ./Playground/ +# cp Apps/Playground/playground-shared/* ./Playground/ build-android: runs-on: ubuntu-latest steps: @@ -48,7 +48,6 @@ cp Apps/Playground/playground-shared/* ./Playground/ - name: Build Playground Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} - cd Playground ls -R npm install @babylonjs/core From 08c0d34e5c16ce5055e3c27aece5e82db35c8f37 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 11:45:12 +0100 Subject: [PATCH 43/88] try copy again --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index e528a5495..e053fbf64 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -39,7 +39,7 @@ jobs: # path: Playground/windows/x64/Release/Playground # -# cp Apps/Playground/playground-shared/* ./Playground/ +# build-android: runs-on: ubuntu-latest steps: @@ -48,6 +48,7 @@ jobs: - name: Build Playground Android run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground ls -R npm install @babylonjs/core From 2b885c4871ffa42237d2eea3f33585790b57c2d1 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 12:17:45 +0100 Subject: [PATCH 44/88] version quotes --- .github/workflows/testVersion.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index e053fbf64..57afdfdf8 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -47,10 +47,9 @@ jobs: uses: actions/checkout@v2.3.3 - name: Build Playground Android run: | - npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground - ls -R npm install @babylonjs/core npm install @babylonjs/loaders npm install @babylonjs/react-native From d96e0bb5f708817ee6ec6ae60935eb2940fa187c Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 13:43:14 +0100 Subject: [PATCH 45/88] verbose --- .github/workflows/testVersion.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 57afdfdf8..1c6958aee 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -6,7 +6,7 @@ on: description: 'ReactNative Version' required: true type: string - default: '0.71.0' + default: '0.70.7' BRN_Version: description: 'Babylon ReactNative Version' required: true @@ -47,7 +47,7 @@ jobs: uses: actions/checkout@v2.3.3 - name: Build Playground Android run: | - npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core From c63ca9cab08359f886eee6c27a68b017389b40da Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 13:55:07 +0100 Subject: [PATCH 46/88] list versions --- .github/workflows/testVersion.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 1c6958aee..a4b9baf7a 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -47,6 +47,8 @@ jobs: uses: actions/checkout@v2.3.3 - name: Build Playground Android run: | + npm view react-native versions + npm uninstall -g react-native-cli @react-native-community/cli npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground From 3b7a6966d06d0cdc367a1647c09217b1cc0e7573 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 14:08:50 +0100 Subject: [PATCH 47/88] an 1 --- .github/workflows/testVersion.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index a4b9baf7a..f4cec7a1e 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -47,7 +47,6 @@ jobs: uses: actions/checkout@v2.3.3 - name: Build Playground Android run: | - npm view react-native versions npm uninstall -g react-native-cli @react-native-community/cli npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx @@ -66,11 +65,11 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk -# - name: Upload Playground App -# uses: actions/upload-artifact@v2 -# with: -# name: 'Playground App' -# path: Playground/ + - name: Upload Playground App + uses: actions/upload-artifact@v2 + with: + name: 'Playground App' + path: Playground/ # test jobs not working # test-android: From ba8c1c18d6317769cbb7173e3825c5543a999ea4 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 14:53:16 +0100 Subject: [PATCH 48/88] template --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index f4cec7a1e..03490d526 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -48,7 +48,7 @@ jobs: - name: Build Playground Android run: | npm uninstall -g react-native-cli @react-native-community/cli - npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core From 4c94ee9f684996137bba9498e6a57cb65c1f2b41 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 14:53:55 +0100 Subject: [PATCH 49/88] no upload --- .github/workflows/testVersion.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 03490d526..51f95d6f1 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -65,11 +65,11 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk - - name: Upload Playground App - uses: actions/upload-artifact@v2 - with: - name: 'Playground App' - path: Playground/ +# - name: Upload Playground App +# uses: actions/upload-artifact@v2 +# with: +# name: 'Playground App' +# path: Playground/ # test jobs not working # test-android: From 6bd01fcc275681edf082dbedd355d4bb99e6c363 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 14:58:49 +0100 Subject: [PATCH 50/88] version --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 51f95d6f1..15e55d41b 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -48,7 +48,7 @@ jobs: - name: Build Playground Android run: | npm uninstall -g react-native-cli @react-native-community/cli - npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript + npx react-native init Playground --verbose --template react-native-template-typescript@${{ github.event.inputs.RN_Version }} cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core From 088aac3ca2f5c63c325d7c54f1f2d4dba35c876d Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 15:08:09 +0100 Subject: [PATCH 51/88] and again --- .github/workflows/testVersion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 15e55d41b..51f95d6f1 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -48,7 +48,7 @@ jobs: - name: Build Playground Android run: | npm uninstall -g react-native-cli @react-native-community/cli - npx react-native init Playground --verbose --template react-native-template-typescript@${{ github.event.inputs.RN_Version }} + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core From a5f1831ea322299ba9a289b69d32a73e04417c26 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 15:21:20 +0100 Subject: [PATCH 52/88] template --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 51f95d6f1..52c40eb6b 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -48,7 +48,8 @@ jobs: - name: Build Playground Android run: | npm uninstall -g react-native-cli @react-native-community/cli - npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript +# npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript + npx react-native init Playground --template react-native-template-typescript@6.12.10 cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core From 5e67e073c709353a0df0868f4da342a490358595 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 15:22:13 +0100 Subject: [PATCH 53/88] comment --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 52c40eb6b..25f3e83b4 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -40,6 +40,8 @@ jobs: # # +# npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript + build-android: runs-on: ubuntu-latest steps: @@ -48,7 +50,6 @@ jobs: - name: Build Playground Android run: | npm uninstall -g react-native-cli @react-native-community/cli -# npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript npx react-native init Playground --template react-native-template-typescript@6.12.10 cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground From fb9b544ea0c99da15fcd9a683f5de51682c8c7ba Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Feb 2023 15:43:50 +0100 Subject: [PATCH 54/88] 0.71.2 --- .github/workflows/testVersion.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 25f3e83b4..9719d0365 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -6,7 +6,7 @@ on: description: 'ReactNative Version' required: true type: string - default: '0.70.7' + default: '0.71.2' BRN_Version: description: 'Babylon ReactNative Version' required: true @@ -40,7 +40,8 @@ jobs: # # -# npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --template react-native-template-typescript +# --template react-native-template-typescript +# npx react-native init Playground --template react-native-template-typescript@6.12.10 build-android: runs-on: ubuntu-latest @@ -50,7 +51,7 @@ jobs: - name: Build Playground Android run: | npm uninstall -g react-native-cli @react-native-community/cli - npx react-native init Playground --template react-native-template-typescript@6.12.10 + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core From ffbd50b66c93e1ab1fa30496da36026f02c98cc1 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 20 Feb 2023 09:47:41 +0100 Subject: [PATCH 55/88] PG gen --- .github/workflows/testVersion.yml | 46 ++++++++++++++++--------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 9719d0365..9fd263198 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -15,34 +15,36 @@ on: jobs: -# build-windows: -# runs-on: windows-2019 -# steps: -# - name: Add msbuild to PATH -# uses: microsoft/setup-msbuild@v1.1 -# - name: Build Playground Windows x64 -# run: | -# npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} -# cd Playground -# npm install @babylonjs/core -# npm install @babylonjs/loaders -# npm install @babylonjs/react-native -# npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} -# npx react-native-windows-init --overwrite -# msbuild.exe /r "./windows/Playground.sln" -# msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" -# -# - name: Upload UWP x64 -# uses: actions/upload-artifact@v2 -# with: -# name: 'WindowsUWPx64' -# path: Playground/windows/x64/Release/Playground + build-windows: + runs-on: windows-2019 + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + - name: Build Playground Windows x64 + run: | + npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + cd Playground + npm install @babylonjs/core + npm install @babylonjs/loaders + npm install @babylonjs/react-native + npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npx react-native-windows-init --overwrite + + - name: Upload UWP x64 + uses: actions/upload-artifact@v2 + with: + name: 'PG' + path: Playground # # # --template react-native-template-typescript # npx react-native init Playground --template react-native-template-typescript@6.12.10 + #msbuild.exe /r "./windows/Playground.sln" + #msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" + + build-android: runs-on: ubuntu-latest steps: From af32bf2dcbad25f3a89981885de236ee6cd7d93f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 6 Mar 2023 17:35:20 +0100 Subject: [PATCH 56/88] postfix package --- .github/workflows/testVersion.yml | 51 +++++++++++++++++-------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 9fd263198..26aa573dc 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -6,35 +6,40 @@ on: description: 'ReactNative Version' required: true type: string - default: '0.71.2' + default: '0.71.0' BRN_Version: - description: 'Babylon ReactNative Version' + description: 'BRN package version' required: true type: string - default: '0-70' + default: '1.5.2-preview' + BRN_Postfix: + description: 'BRN package postfix' + required: true + type: string + default: '0-71' jobs: - build-windows: - runs-on: windows-2019 - steps: - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 - - name: Build Playground Windows x64 - run: | - npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} - cd Playground - npm install @babylonjs/core - npm install @babylonjs/loaders - npm install @babylonjs/react-native - npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} - npx react-native-windows-init --overwrite - - - name: Upload UWP x64 - uses: actions/upload-artifact@v2 - with: - name: 'PG' - path: Playground +# build-windows: +# runs-on: windows-2019 +# steps: +# - name: Add msbuild to PATH +# uses: microsoft/setup-msbuild@v1.1 +# - name: Build Playground Windows x64 +# run: | +# npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} +# cd Playground +# npm install @babylonjs/core +# npm install @babylonjs/loaders +# npm install @babylonjs/react-native +# npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} +# npx react-native-windows-init --overwrite +# +# - name: Upload UWP x64 +# uses: actions/upload-artifact@v2 +# with: +# name: 'PG' +# path: Playground # # From 6848f051e9d23445f0ca99a13821d3c425a3fcec Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 6 Mar 2023 17:36:18 +0100 Subject: [PATCH 57/88] fix android --- .github/workflows/testVersion.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 26aa573dc..872ed3fca 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -63,8 +63,8 @@ jobs: cd Playground npm install @babylonjs/core npm install @babylonjs/loaders - npm install @babylonjs/react-native - npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Version }} + npm install @babylonjs/react-native@${{ github.event.inputs.BRN_Version }} + npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} npm install @react-native-community/slider cd android ./gradlew app:assembleRelease --stacktrace --info From 6ba61d61e98554a718dc3e2fc531bd89cc625c7b Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 10:20:45 +0100 Subject: [PATCH 58/88] windows build --- .github/workflows/testVersion.yml | 61 ++++++++++++------------------- 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 872ed3fca..be011713f 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -11,7 +11,7 @@ on: description: 'BRN package version' required: true type: string - default: '1.5.2-preview' + default: '1.5.3-preview' BRN_Postfix: description: 'BRN package postfix' required: true @@ -19,30 +19,29 @@ on: default: '0-71' jobs: + build-windows: + runs-on: windows-2019 + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + - name: Build Playground Windows x64 + run: | + npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + cd Playground + npm install @babylonjs/core + npm install @babylonjs/loaders + npm install @babylonjs/react-native + npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} + npx react-native-windows-init --overwrite + msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" -# build-windows: -# runs-on: windows-2019 -# steps: -# - name: Add msbuild to PATH -# uses: microsoft/setup-msbuild@v1.1 -# - name: Build Playground Windows x64 -# run: | -# npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} -# cd Playground -# npm install @babylonjs/core -# npm install @babylonjs/loaders -# npm install @babylonjs/react-native -# npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} -# npx react-native-windows-init --overwrite -# -# - name: Upload UWP x64 -# uses: actions/upload-artifact@v2 -# with: -# name: 'PG' -# path: Playground - -# -# + - name: Upload UWP x64 + uses: actions/upload-artifact@v2 + with: + name: 'PG' + path: Playground + + # --template react-native-template-typescript # npx react-native init Playground --template react-native-template-typescript@6.12.10 @@ -75,12 +74,6 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk -# - name: Upload Playground App -# uses: actions/upload-artifact@v2 -# with: -# name: 'Playground App' -# path: Playground/ - # test jobs not working # test-android: # needs: [build-android] @@ -118,11 +111,3 @@ jobs: # echo Checking it's still alive # if [[ -z "$(pidof com.playground | tr -d '\r')" ]]; then echo "com.playground is not running."; exit 1; fi # echo Checks done. - - package: - needs: [build-android] - runs-on: macos-latest - steps: - - name: Gather - run: | - ls -l -a \ No newline at end of file From 060d90cb15c2059e50e46da7f6d264b927e5162a Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 10:38:57 +0100 Subject: [PATCH 59/88] nuget restore --- .github/workflows/testVersion.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index be011713f..fc2babe5e 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -30,9 +30,10 @@ jobs: cd Playground npm install @babylonjs/core npm install @babylonjs/loaders - npm install @babylonjs/react-native + npm install @babylonjs/react-native@${{ github.event.inputs.BRN_Version }} npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} npx react-native-windows-init --overwrite + msbuild.exe /r "./windows/Playground.sln" msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" - name: Upload UWP x64 @@ -40,14 +41,6 @@ jobs: with: name: 'PG' path: Playground - - -# --template react-native-template-typescript -# npx react-native init Playground --template react-native-template-typescript@6.12.10 - - #msbuild.exe /r "./windows/Playground.sln" - #msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" - build-android: runs-on: ubuntu-latest From fdf1d2d0d630e7bba41226840c6cb0a5ea92352f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 14:45:43 +0100 Subject: [PATCH 60/88] up windows --- .github/workflows/testVersion.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index fc2babe5e..c8e2b7f16 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -27,6 +27,7 @@ jobs: - name: Build Playground Windows x64 run: | npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} + cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground npm install @babylonjs/core npm install @babylonjs/loaders @@ -39,8 +40,8 @@ jobs: - name: Upload UWP x64 uses: actions/upload-artifact@v2 with: - name: 'PG' - path: Playground + name: Upload appx + path: Playground/windows/AppPackages/Playground/Playground_1.0.0.0_x64_Test/Playground_1.0.0.0_x64.appx build-android: runs-on: ubuntu-latest From 13aca4f3f49dcba062e09cab9798796394a8a6ab Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 15:31:57 +0100 Subject: [PATCH 61/88] missing windows checkout --- .github/workflows/testVersion.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index c8e2b7f16..ae2c5b97a 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -22,6 +22,8 @@ jobs: build-windows: runs-on: windows-2019 steps: + - name: Checkout Repo + uses: actions/checkout@v2.3.3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - name: Build Playground Windows x64 From 3f14305c376bed1380d82dc6bdb01c017eb0abcd Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 16:32:08 +0100 Subject: [PATCH 62/88] more packages --- .github/workflows/testVersion.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index ae2c5b97a..7f9fc7596 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -35,6 +35,8 @@ jobs: npm install @babylonjs/loaders npm install @babylonjs/react-native@${{ github.event.inputs.BRN_Version }} npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} + npm install @react-native-community/slider@4.0.0-rc.3 + npm install react-native-permissions@3.0.0 npx react-native-windows-init --overwrite msbuild.exe /r "./windows/Playground.sln" msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" From ea6933d8751cdd24db8cfdbbcb030d548b4c328f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 17:24:58 +0100 Subject: [PATCH 63/88] autolink --- .github/workflows/testVersion.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 7f9fc7596..68f0cedec 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -38,6 +38,7 @@ jobs: npm install @react-native-community/slider@4.0.0-rc.3 npm install react-native-permissions@3.0.0 npx react-native-windows-init --overwrite + npx react-native autolink-windows msbuild.exe /r "./windows/Playground.sln" msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" From 38b8731017d28ca4717607ecd01afd730e91c982 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 17:49:23 +0100 Subject: [PATCH 64/88] ios build --- .github/workflows/testVersion.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 68f0cedec..3055b7ab4 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -73,6 +73,37 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk +build-ios: + runs-on: macos-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2.3.3 + - name: Clone iOS Toolchain + run: | + git clone https://github.com/leetal/ios-cmake.git + - name: Build Playground iOS + run: | + npm uninstall -g react-native-cli @react-native-community/cli + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose + cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx + cd Playground + npm install @babylonjs/core + npm install @babylonjs/loaders + npm install @babylonjs/react-native@${{ github.event.inputs.BRN_Version }} + npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} + npm install @react-native-community/slider + mkdir ios/build + cd ios/build + cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../../ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64COMBINED -DENABLE_ARC=0 -DENABLE_BITCODE=1 -DDEPLOYMENT_TARGET=12 -DENABLE_PCH=OFF .. + xcodebuild -sdk iphoneos -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO + xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO + + - name: Upload iOS App + uses: actions/upload-artifact@v2 + with: + name: 'iOSApp' + path: Playground/ios/build + # test jobs not working # test-android: # needs: [build-android] From 3603139fdf2c66120c53e038de4a847437308d4e Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 17:50:40 +0100 Subject: [PATCH 65/88] indent --- .github/workflows/testVersion.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 3055b7ab4..ef4dc78ca 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -73,7 +73,7 @@ jobs: name: 'AndroidAPK' path: Playground/android/app/build/outputs/apk/release/app-release.apk -build-ios: + build-ios: runs-on: macos-latest steps: - name: Checkout Repo @@ -103,7 +103,7 @@ build-ios: with: name: 'iOSApp' path: Playground/ios/build - + # test jobs not working # test-android: # needs: [build-android] From 79f349b209aa0a0280d100f579440567160fa79f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 18:29:10 +0100 Subject: [PATCH 66/88] and again --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index ef4dc78ca..d63a84a21 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -38,8 +38,8 @@ jobs: npm install @react-native-community/slider@4.0.0-rc.3 npm install react-native-permissions@3.0.0 npx react-native-windows-init --overwrite - npx react-native autolink-windows msbuild.exe /r "./windows/Playground.sln" + npx react-native autolink-windows msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" - name: Upload UWP x64 @@ -83,6 +83,7 @@ jobs: git clone https://github.com/leetal/ios-cmake.git - name: Build Playground iOS run: | + brew install cocoapods npm uninstall -g react-native-cli @react-native-community/cli npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx From 6380a6f0c0bab859c9eecb31b37c365c942dd4f4 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 18:43:47 +0100 Subject: [PATCH 67/88] pods --- .github/workflows/testVersion.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index d63a84a21..96883a74c 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -83,7 +83,8 @@ jobs: git clone https://github.com/leetal/ios-cmake.git - name: Build Playground iOS run: | - brew install cocoapods + brew install node + brew install watchman npm uninstall -g react-native-cli @react-native-community/cli npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx From 90b72e6e3d28c260acd226b89df4c935c0f5785b Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 8 Mar 2023 19:15:43 +0100 Subject: [PATCH 68/88] ios install --- .github/workflows/testVersion.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 96883a74c..d28ab2296 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -86,16 +86,19 @@ jobs: brew install node brew install watchman npm uninstall -g react-native-cli @react-native-community/cli - npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose + npx react-native init Playground --version "${{ github.event.inputs.RN_Version }}" --verbose --skip-install cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground + yarn install npm install @babylonjs/core npm install @babylonjs/loaders npm install @babylonjs/react-native@${{ github.event.inputs.BRN_Version }} npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} npm install @react-native-community/slider - mkdir ios/build - cd ios/build + cd ios + pod install + mkdir build + cd build cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../../ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64COMBINED -DENABLE_ARC=0 -DENABLE_BITCODE=1 -DDEPLOYMENT_TARGET=12 -DENABLE_PCH=OFF .. xcodebuild -sdk iphoneos -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO From 18ac18c1901a2d5838235fc02ce4d6f12242b7b1 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 9 Mar 2023 10:01:46 +0100 Subject: [PATCH 69/88] ios build --- .github/workflows/testVersion.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index d28ab2296..9f2346875 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -97,11 +97,8 @@ jobs: npm install @react-native-community/slider cd ios pod install - mkdir build - cd build - cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../../ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64COMBINED -DENABLE_ARC=0 -DENABLE_BITCODE=1 -DDEPLOYMENT_TARGET=12 -DENABLE_PCH=OFF .. - xcodebuild -sdk iphoneos -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO - xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO + xcodebuild -sdk iphoneos -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO + xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO - name: Upload iOS App uses: actions/upload-artifact@v2 From d73df40d7593c4ff8fd2bb387d07e451df63a54b Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 9 Mar 2023 12:06:20 +0100 Subject: [PATCH 70/88] more tests --- .github/workflows/testVersion.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 9f2346875..94c21c35e 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -31,15 +31,15 @@ jobs: npx react-native init Playground --version ${{ github.event.inputs.RN_Version }} cp Apps/Playground/playground-shared/App.tsx ./Playground/App.tsx cd Playground + npx react-native-windows-init --overwrite npm install @babylonjs/core npm install @babylonjs/loaders npm install @babylonjs/react-native@${{ github.event.inputs.BRN_Version }} npm install @babylonjs/react-native-iosandroid-${{ github.event.inputs.BRN_Postfix }}@${{ github.event.inputs.BRN_Version }} - npm install @react-native-community/slider@4.0.0-rc.3 - npm install react-native-permissions@3.0.0 - npx react-native-windows-init --overwrite - msbuild.exe /r "./windows/Playground.sln" + npm install @react-native-community/slider + #npm install react-native-permissions@3.0.0 npx react-native autolink-windows + msbuild.exe /r "./windows/Playground.sln" msbuild.exe /p:Configuration="Release" /p:Platform="x64" /m "./windows/Playground.sln" - name: Upload UWP x64 @@ -97,14 +97,14 @@ jobs: npm install @react-native-community/slider cd ios pod install - xcodebuild -sdk iphoneos -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO - xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO + #xcodebuild -sdk iphoneos -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO + xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO -archivePath ./playgroundSimulator.xcarchive archive - name: Upload iOS App uses: actions/upload-artifact@v2 with: name: 'iOSApp' - path: Playground/ios/build + path: Playground/ios/playgroundSimulator.xcarchive # test jobs not working # test-android: From ff7dc8626749562fedfadc0e1034961f509dcceb Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 9 Mar 2023 15:28:56 +0100 Subject: [PATCH 71/88] test ios-build-action --- .github/workflows/testVersion.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 94c21c35e..41b0c61f2 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -45,7 +45,7 @@ jobs: - name: Upload UWP x64 uses: actions/upload-artifact@v2 with: - name: Upload appx + name: 'WindowsAppx' path: Playground/windows/AppPackages/Playground/Playground_1.0.0.0_x64_Test/Playground_1.0.0.0_x64.appx build-android: @@ -98,13 +98,23 @@ jobs: cd ios pod install #xcodebuild -sdk iphoneos -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO - xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO -archivePath ./playgroundSimulator.xcarchive archive + #xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO -archivePath ./playgroundSimulator.xcarchive archive + + - uses: sparkfabrik/ios-build-action@v2.1.0 + with: + upload-to-testflight: false + workspace-path: Playground/ios/Playground.xcworkspace + export-method: ad-hoc + configuration: Release + scheme: Playground + output-path: Playground/build-${{ github.sha }}.ipa - name: Upload iOS App uses: actions/upload-artifact@v2 with: name: 'iOSApp' - path: Playground/ios/playgroundSimulator.xcarchive + path: Playground/build-${{ github.sha }}.ipa + #Playground/ios/playgroundSimulator.xcarchive # test jobs not working # test-android: From 6a4dbbffb06df7eaba17d93262819abb90e6d306 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Thu, 9 Mar 2023 16:00:18 +0100 Subject: [PATCH 72/88] back to xcodebuild --- .github/workflows/testVersion.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/testVersion.yml b/.github/workflows/testVersion.yml index 41b0c61f2..e57670d00 100644 --- a/.github/workflows/testVersion.yml +++ b/.github/workflows/testVersion.yml @@ -98,23 +98,13 @@ jobs: cd ios pod install #xcodebuild -sdk iphoneos -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO - #xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO -archivePath ./playgroundSimulator.xcarchive archive - - - uses: sparkfabrik/ios-build-action@v2.1.0 - with: - upload-to-testflight: false - workspace-path: Playground/ios/Playground.xcworkspace - export-method: ad-hoc - configuration: Release - scheme: Playground - output-path: Playground/build-${{ github.sha }}.ipa + xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -workspace Playground.xcworkspace -scheme Playground build CODE_SIGNING_ALLOWED=NO -archivePath ./playgroundSimulator.xcarchive archive - name: Upload iOS App uses: actions/upload-artifact@v2 with: name: 'iOSApp' - path: Playground/build-${{ github.sha }}.ipa - #Playground/ios/playgroundSimulator.xcarchive + path: Playground/ios/playgroundSimulator.xcarchive # test jobs not working # test-android: From 8e0bf52fb8f47257ef94abfd4d614d4bcc56eb19 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 13 Mar 2023 10:48:46 +0100 Subject: [PATCH 73/88] test BN protocol tool and github action --- .github/workflows/test_protocol.yml | 29 ++ Apps/TestProtocol/package-lock.json | 415 ++++++++++++++++++++++++++++ Apps/TestProtocol/package.json | 15 + Apps/TestProtocol/testBNProtocol.js | 130 +++++++++ 4 files changed, 589 insertions(+) create mode 100644 .github/workflows/test_protocol.yml create mode 100644 Apps/TestProtocol/package-lock.json create mode 100644 Apps/TestProtocol/package.json create mode 100644 Apps/TestProtocol/testBNProtocol.js diff --git a/.github/workflows/test_protocol.yml b/.github/workflows/test_protocol.yml new file mode 100644 index 000000000..d804794f2 --- /dev/null +++ b/.github/workflows/test_protocol.yml @@ -0,0 +1,29 @@ +name: Test BabylonNative Protocol compatibility +on: + workflow_dispatch: + inputs: + NPM_Mask: + description: 'NPM versions mask' + required: true + type: string + default: 5.*.* + +jobs: + build: + runs-on: windows-2019 + + steps: + - name: Checkout + uses: actions/checkout@master + - name: NPM Install + run: npm install + working-directory: ./Apps/TestProtocol + - name: Run tests + run: npm run testPackages ${{ github.event.inputs.NPM_Mask }} + working-directory: ./Apps/TestProtocol + - name: Upload Result + uses: actions/upload-artifact@v2 + with: + name: NPMCompatibility + path: | + ./compatibility.json \ No newline at end of file diff --git a/Apps/TestProtocol/package-lock.json b/Apps/TestProtocol/package-lock.json new file mode 100644 index 000000000..49c1b455a --- /dev/null +++ b/Apps/TestProtocol/package-lock.json @@ -0,0 +1,415 @@ +{ + "name": "testcompatibility", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "testcompatibility", + "version": "0.0.1", + "dependencies": { + "babylonjs": "^5.0.3", + "babylonjs-gui": "^5.0.3", + "babylonjs-loaders": "^5.0.3", + "babylonjs-materials": "^5.0.3", + "shelljs": "^0.8.4" + } + }, + "node_modules/babylonjs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs/-/babylonjs-5.0.3.tgz", + "integrity": "sha512-FcvNJHOn9wJ+geohPCFOa2RwwADz3Ep1gyPeWui8C96KwbKXrW/k02N1Uh5MyMu8s2P9thPCHr298lrTs5pwnQ==" + }, + "node_modules/babylonjs-gltf2interface": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-5.50.1.tgz", + "integrity": "sha512-FgXTm/N0Vz/K4FA0X5OoHxQ7tyacxRvfd8MBYMEtvSSTyDpYEiEqhEmcUgAON0OGGJ3fBYl9jZXromXO2NG7ow==" + }, + "node_modules/babylonjs-gui": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs-gui/-/babylonjs-gui-5.0.3.tgz", + "integrity": "sha512-kyeNLfZ3hrK2MLkhX9VBy40Y0B7b7IqZhqQwK36BULKie7i6cL7PZbCh5jRndW1m19qT+nb0ePmbV27zAxZjNg==", + "dependencies": { + "babylonjs": "^5.0.3" + } + }, + "node_modules/babylonjs-loaders": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs-loaders/-/babylonjs-loaders-5.0.3.tgz", + "integrity": "sha512-3OAP06RsTj+DNVcVZyIOkJdU1SeJzrnHm5EiIS0EtSChAFVSJimY3q6MVm1VzSxqJtrdbe3AOG4qI5NOnSja/w==", + "dependencies": { + "babylonjs": "^5.0.3", + "babylonjs-gltf2interface": "^5.0.3" + } + }, + "node_modules/babylonjs-materials": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs-materials/-/babylonjs-materials-5.0.3.tgz", + "integrity": "sha512-VQ4Z5VU11AjjK+/ragkVdiIjvnCDzsYULTdKNDiKBmKxU1Idq9DM2TI9AO2LipZauXXvd0YhJSlVX5fCkG+Ubg==", + "dependencies": { + "babylonjs": "^5.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + } + }, + "dependencies": { + "babylonjs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs/-/babylonjs-5.0.3.tgz", + "integrity": "sha512-FcvNJHOn9wJ+geohPCFOa2RwwADz3Ep1gyPeWui8C96KwbKXrW/k02N1Uh5MyMu8s2P9thPCHr298lrTs5pwnQ==" + }, + "babylonjs-gltf2interface": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-5.50.1.tgz", + "integrity": "sha512-FgXTm/N0Vz/K4FA0X5OoHxQ7tyacxRvfd8MBYMEtvSSTyDpYEiEqhEmcUgAON0OGGJ3fBYl9jZXromXO2NG7ow==" + }, + "babylonjs-gui": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs-gui/-/babylonjs-gui-5.0.3.tgz", + "integrity": "sha512-kyeNLfZ3hrK2MLkhX9VBy40Y0B7b7IqZhqQwK36BULKie7i6cL7PZbCh5jRndW1m19qT+nb0ePmbV27zAxZjNg==", + "requires": { + "babylonjs": "^5.0.3" + } + }, + "babylonjs-loaders": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs-loaders/-/babylonjs-loaders-5.0.3.tgz", + "integrity": "sha512-3OAP06RsTj+DNVcVZyIOkJdU1SeJzrnHm5EiIS0EtSChAFVSJimY3q6MVm1VzSxqJtrdbe3AOG4qI5NOnSja/w==", + "requires": { + "babylonjs": "^5.0.3", + "babylonjs-gltf2interface": "^5.0.3" + } + }, + "babylonjs-materials": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/babylonjs-materials/-/babylonjs-materials-5.0.3.tgz", + "integrity": "sha512-VQ4Z5VU11AjjK+/ragkVdiIjvnCDzsYULTdKNDiKBmKxU1Idq9DM2TI9AO2LipZauXXvd0YhJSlVX5fCkG+Ubg==", + "requires": { + "babylonjs": "^5.0.3" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + } + } +} diff --git a/Apps/TestProtocol/package.json b/Apps/TestProtocol/package.json new file mode 100644 index 000000000..88b87511b --- /dev/null +++ b/Apps/TestProtocol/package.json @@ -0,0 +1,15 @@ +{ + "name": "testcompatibility", + "version": "0.0.1", + "private": true, + "scripts": { + "testPackages": "node testBNProtocol.js" + }, + "dependencies": { + "babylonjs": "^5.0.3", + "babylonjs-gui": "^5.0.3", + "babylonjs-loaders": "^5.0.3", + "babylonjs-materials": "^5.0.3", + "shelljs": "^0.8.4" + } +} diff --git a/Apps/TestProtocol/testBNProtocol.js b/Apps/TestProtocol/testBNProtocol.js new file mode 100644 index 000000000..5c347d28d --- /dev/null +++ b/Apps/TestProtocol/testBNProtocol.js @@ -0,0 +1,130 @@ +const fs = require('fs'); +const shelljs = require('shelljs'); + +let compatibility = []; +function execute(command, workingDirectory, callback){ + const res = shelljs.exec(command, { fatal: false, cwd: workingDirectory, async: false }); + callback(res.code, res.stdout, res.stderr); +}; + +function copy(source, destination) { + fs.copyFileSync(source, destination); + console.log(`${source} was copied to ${destination}`); +} + +const protocolChecker = "//BRNCHECK\r\nconsole.log(' * Checking Babylon.js / BabylonNative protocols');\r\n"+ + "if (_native.Engine.PROTOCOL_VERSION !== BABYLON.NativeEngine.PROTOCOL_VERSION) {\r\n"+ + "console.log(` * Protocol version mismatch: ${_native.Engine.PROTOCOL_VERSION} (Native) !== ${BABYLON.NativeEngine.PROTOCOL_VERSION} (JS)`);\r\n"+ + "TestUtils.exit(-1); } else { console.log(' * Protocol version OK! '); }\r\n"+ + "console.error = function(errorMsg) { console.log(errorMsg); TestUtils.exit(-1);}\r\n"; + +const exeFolder = './BabylonNative/build/Apps/ValidationTests/Release'; +const filesToCopy = [ + {source:'babylonjs', files:['babylon.max.js', 'babylon.max.js.map']}, + {source:'babylonjs-gui', files:['babylon.gui.js', 'babylon.gui.js.map']}, + {source:'babylonjs-loaders', files:['babylonjs.loaders.js', 'babylonjs.loaders.js.map']}, + {source:'babylonjs-materials', files:['babylonjs.materials.js', 'babylonjs.materials.js.map']}]; + +const BRNVersions = [ + {tag:'1.4.0', hash:'5859ffa'}, + {tag:'1.4.1', hash:'70bb77a'}, + {tag:'1.4.2', hash:'5990087'}, + {tag:'1.4.3', hash:'301ab90'}, + {tag:'1.4.4', hash:'75954f4'}, + {tag:'1.5.0', hash:'75954f4'}, + {tag:'1.5.1', hash:'a2cf1c7'}, + {tag:'1.5.4-preview', hash:'409bc4b'}]; + +function patchTestScript() { + const filePath = `${exeFolder}/Scripts/validation_native.js`; + console.log("Patching test script."); + const testScript = fs.readFileSync(filePath); + if (testScript.includes("//BRNCHECK")) { + // already patched + return; + } + const newContent = protocolChecker + testScript; + fs.writeFileSync(filePath, newContent); +} + +function checkoutAndBuildBN(tag, hash, callback) { + console.log("Git clone."); + execute('git clone https://github.com/BabylonJS/BabylonNative.git', './', (error, stdout, stderr) => { + console.log("Submodule update."); + execute('git submodule update --init --recursive', './BabylonNative', (error, stdout, stderr) => { + //if (error) throw error; + console.log(`Checkout tag ${hash}.`); + execute(`git checkout ${hash}`, "./BabylonNative", (error, stdout, stderr) => { + if (error) throw error; + execute('git submodule update --recursive', './BabylonNative', (error, stdout, stderr) => { + console.log('Making build directory.'); + fs.rmSync('./BabylonNative/build', { recursive: true, force: true }); + execute(`mkdir build`, "./BabylonNative", (error, stdout, stderr) => { + if (error) throw error; + execute(`npm install`, "./BabylonNative/Apps", (error, stdout, stderr) => { + if (error) throw error; + console.log('Building win32 project.'); + + execute(`cmake -G "Visual Studio 16 2019" -A x64 ..`, "./BabylonNative/build", (error, stdout, stderr) => { + if (error) throw error; + console.log('Building win32 apps.'); + execute(`cmake --build build --config Release`, "./BabylonNative", (error, stdout, stderr) => { + if (error) throw error; + patchTestScript(); + callback(tag, hash); + }); + }); + }); + }); + }); + }); + }); + }); +} + +function testPackages(tag, hash) { + let compatiblePackageVersions = []; + console.log("Getting NPM versions ..."); + execute("npm show babylonjs@5.*.* version --json", "./", (error, stdout, stderr) => { + if (error) throw error; + + const versions = JSON.parse(stdout); + + versions.forEach(version => { + console.log("-".repeat(30)); + console.log(`Installing packages for ${version}`); + execute(`npm install babylonjs@${version} babylonjs-gui@${version} babylonjs-loaders@${version} babylonjs-materials@${version}`, "./", (error, stdout, stderr) => { + if (error) throw error; + + // copy package .js + console.log("Copying packages files."); + filesToCopy.forEach(entry => { + entry.files.forEach(file => { + copy(`node_modules/${entry.source}/${file}`, `${exeFolder}/Scripts/${file}`); + }); + }); + + // run validation test + console.log("Running validation tests."); + execute("ValidationTests", exeFolder, (error, stdout, stderr) => { + console.log(`Error Code ${error}`); + if (!!error) { + console.log(`${version} Failed!`); + } else { + compatiblePackageVersions.push(version); + console.log(`${version} OK!`); + } + }); + }); + }); + }); + console.log(`Compatible versions for BabylonReactNative ${tag} using BabylonNative ${hash}:`, compatiblePackageVersions); + compatibility.push({tag:tag, hash:hash, npms:compatiblePackageVersions}); +} + +BRNVersions.forEach((versionToTest) =>{ + checkoutAndBuildBN(versionToTest.tag, versionToTest.hash,(tag, hash) => { testPackages(tag, hash); }); +}); + +// and out! +fs.writeFileSync("compatibility.json", JSON.stringify(compatibility)); \ No newline at end of file From f2cd81f3819541fbf32f528c943f519037a9686f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 13 Mar 2023 10:54:24 +0100 Subject: [PATCH 74/88] pr.yml fix --- .github/workflows/pr.yml | 46 +++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b3f5e396e..db9e10c25 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -145,16 +145,52 @@ jobs: build-android-ios-065: uses: ./.github/workflows/ios_android.yml with: - react-native-version: 0.65 - release-version: 2.0.0 # dummy version + react-native-version: '0.65' + release-version: 0.0.${GITHUB_SHA::8} + + build-android-ios-069: + uses: ./.github/workflows/ios_android.yml + with: + react-native-version: '0.69' + release-version: 0.0.${GITHUB_SHA::8} + + build-android-ios-070: + uses: ./.github/workflows/ios_android.yml + with: + react-native-version: '0.70' + release-version: 0.0.${GITHUB_SHA::8} + + build-android-ios-071: + uses: ./.github/workflows/ios_android.yml + with: + react-native-version: '0.71' + release-version: 0.0.${GITHUB_SHA::8} build-windows-065: uses: ./.github/workflows/windows.yml with: - react-native-version: 0.65 - release-version: 2.0.0 + react-native-version: '0.65' + release-version: 0.0.${GITHUB_SHA::8} + + build-windows-069: + uses: ./.github/workflows/windows.yml + with: + react-native-version: '0.69' + release-version: 0.0.${GITHUB_SHA::8} + + build-windows-070: + uses: ./.github/workflows/windows.yml + with: + react-native-version: '0.70' + release-version: 0.0.${GITHUB_SHA::8} + + build-windows-071: + uses: ./.github/workflows/windows.yml + with: + react-native-version: '0.71' + release-version: 0.0.${GITHUB_SHA::8} build-typescript: uses: ./.github/workflows/typescript.yml with: - release-version: 2.0.0 + release-version: 0.0.${GITHUB_SHA::8} \ No newline at end of file From d754efd6daa6036177fa6496b09d74e170f57ebf Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 13 Mar 2023 10:55:32 +0100 Subject: [PATCH 75/88] EoL --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index db9e10c25..eb34d5003 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -193,4 +193,4 @@ jobs: build-typescript: uses: ./.github/workflows/typescript.yml with: - release-version: 0.0.${GITHUB_SHA::8} \ No newline at end of file + release-version: 0.0.${GITHUB_SHA::8} From 9c28c0dc654208a03a0af63864cb0ac39ecdbb11 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 13 Mar 2023 11:14:52 +0100 Subject: [PATCH 76/88] documentation --- Documentation/Images/protocolTest.jpg | Bin 0 -> 118085 bytes Documentation/TestingProtocol.md | 35 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 Documentation/Images/protocolTest.jpg create mode 100644 Documentation/TestingProtocol.md diff --git a/Documentation/Images/protocolTest.jpg b/Documentation/Images/protocolTest.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad04734fc39ab32745255f3ff79c1ed411093111 GIT binary patch literal 118085 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Ξ_e%!TjsAqrrH2ec`YHZ(?&bb;YOgfpOW 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�|j26_clA5peiRMeL8j( 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 T;T6T4tcVAoDk_ie=h(jibO`V0 literal 0 HcmV?d00001 diff --git a/Documentation/TestingProtocol.md b/Documentation/TestingProtocol.md new file mode 100644 index 000000000..3e3f4b7c7 --- /dev/null +++ b/Documentation/TestingProtocol.md @@ -0,0 +1,35 @@ +# Testing BabylonNative Protocol + +`Apps/TestProtocol` is a semi-automated tool to test compatibility between BabylonReactNative (more specificaly BabylonNative) +and Babylon.js NPM packages. +It checkouts, build and run validation tests for every BabylonNative hash version from a list and every Babylon.js NPM package. +NPM Package version must correspond to a mask provided to the script. + +## Testing localy + +Testing takes time and multiple windows get opened and closed. This will make working in parrallel a bit difficult. Best is to leave running script without using the PC. + +Clone BabylonReactNative repo then : +``` +cd Apps/TestProtocol +npm i +npm run testPackages +``` + +Result is a JSON file named `compatibility.json`. + +## Testing on CI + +Go to GitHub Action. + +![Preview](./Images/protocolTest.jpg) + +Result is the same .JSON as earlier than can be download as an artifact + +## Results + +Resulting JSON is an array that contains a list of Babylon.js NPM versions compatible with the BabylonNative commit hash. +There is a 1-1 link between a BabylonReactNative released version and a BabylonNative commit. + +Note: The script test is very restrictive. Any protocol version mismatch, a crash, a bad Validation test ,... will result in that specific version to not be compatible. +This means that a version marked as compatible is sure to run, at least, all the validation tests. \ No newline at end of file From aec9e530b1171a47537487a6534ae2aa2f40ba95 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Mon, 13 Mar 2023 15:43:05 +0100 Subject: [PATCH 77/88] path fix for compatibility --- .github/workflows/test_protocol.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_protocol.yml b/.github/workflows/test_protocol.yml index d804794f2..6c281fbe5 100644 --- a/.github/workflows/test_protocol.yml +++ b/.github/workflows/test_protocol.yml @@ -26,4 +26,4 @@ jobs: with: name: NPMCompatibility path: | - ./compatibility.json \ No newline at end of file + ./Apps/TestProtocol/compatibility.json \ No newline at end of file From e48945f6dfcb05fda50a2e63a824154ad55c3ca6 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Tue, 14 Mar 2023 16:54:46 +0100 Subject: [PATCH 78/88] removed protocol word --- .../package-lock.json | 0 .../package.json | 2 +- .../testBNCompatibility.js} | 0 .../{protocolTest.jpg => compatibilityTest.jpg} | Bin .../{TestingProtocol.md => TestingCompatibility.md} | 10 +++++----- 5 files changed, 6 insertions(+), 6 deletions(-) rename Apps/{TestProtocol => TestCompatibility}/package-lock.json (100%) rename Apps/{TestProtocol => TestCompatibility}/package.json (83%) rename Apps/{TestProtocol/testBNProtocol.js => TestCompatibility/testBNCompatibility.js} (100%) rename Documentation/Images/{protocolTest.jpg => compatibilityTest.jpg} (100%) rename Documentation/{TestingProtocol.md => TestingCompatibility.md} (70%) diff --git a/Apps/TestProtocol/package-lock.json b/Apps/TestCompatibility/package-lock.json similarity index 100% rename from Apps/TestProtocol/package-lock.json rename to Apps/TestCompatibility/package-lock.json diff --git a/Apps/TestProtocol/package.json b/Apps/TestCompatibility/package.json similarity index 83% rename from Apps/TestProtocol/package.json rename to Apps/TestCompatibility/package.json index 88b87511b..58294d01d 100644 --- a/Apps/TestProtocol/package.json +++ b/Apps/TestCompatibility/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { - "testPackages": "node testBNProtocol.js" + "testCompatibility": "node testBNCompatibility.js" }, "dependencies": { "babylonjs": "^5.0.3", diff --git a/Apps/TestProtocol/testBNProtocol.js b/Apps/TestCompatibility/testBNCompatibility.js similarity index 100% rename from Apps/TestProtocol/testBNProtocol.js rename to Apps/TestCompatibility/testBNCompatibility.js diff --git a/Documentation/Images/protocolTest.jpg b/Documentation/Images/compatibilityTest.jpg similarity index 100% rename from Documentation/Images/protocolTest.jpg rename to Documentation/Images/compatibilityTest.jpg diff --git a/Documentation/TestingProtocol.md b/Documentation/TestingCompatibility.md similarity index 70% rename from Documentation/TestingProtocol.md rename to Documentation/TestingCompatibility.md index 3e3f4b7c7..48bfb97df 100644 --- a/Documentation/TestingProtocol.md +++ b/Documentation/TestingCompatibility.md @@ -1,6 +1,6 @@ -# Testing BabylonNative Protocol +# Testing BabylonNative Compatibility -`Apps/TestProtocol` is a semi-automated tool to test compatibility between BabylonReactNative (more specificaly BabylonNative) +`Apps/TestCompatibility` is a semi-automated tool to test compatibility between BabylonReactNative (more specificaly BabylonNative) and Babylon.js NPM packages. It checkouts, build and run validation tests for every BabylonNative hash version from a list and every Babylon.js NPM package. NPM Package version must correspond to a mask provided to the script. @@ -11,7 +11,7 @@ Testing takes time and multiple windows get opened and closed. This will make wo Clone BabylonReactNative repo then : ``` -cd Apps/TestProtocol +cd Apps/TestCompatibility npm i npm run testPackages ``` @@ -22,7 +22,7 @@ Result is a JSON file named `compatibility.json`. Go to GitHub Action. -![Preview](./Images/protocolTest.jpg) +![Preview](./Images/compatibilityTest.jpg) Result is the same .JSON as earlier than can be download as an artifact @@ -31,5 +31,5 @@ Result is the same .JSON as earlier than can be download as an artifact Resulting JSON is an array that contains a list of Babylon.js NPM versions compatible with the BabylonNative commit hash. There is a 1-1 link between a BabylonReactNative released version and a BabylonNative commit. -Note: The script test is very restrictive. Any protocol version mismatch, a crash, a bad Validation test ,... will result in that specific version to not be compatible. +Note: The script test is very restrictive. Any compatibility version mismatch, a crash, a bad Validation test ,... will result in that specific version to not be compatible. This means that a version marked as compatible is sure to run, at least, all the validation tests. \ No newline at end of file From b168e48b5c6107ac57d59bcb7b5c37bfdb5b56cf Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Tue, 14 Mar 2023 16:56:57 +0100 Subject: [PATCH 79/88] even more compat --- .../{test_protocol.yml => test_compatibility.yml} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename .github/workflows/{test_protocol.yml => test_compatibility.yml} (73%) diff --git a/.github/workflows/test_protocol.yml b/.github/workflows/test_compatibility.yml similarity index 73% rename from .github/workflows/test_protocol.yml rename to .github/workflows/test_compatibility.yml index 6c281fbe5..a76d443a2 100644 --- a/.github/workflows/test_protocol.yml +++ b/.github/workflows/test_compatibility.yml @@ -1,4 +1,4 @@ -name: Test BabylonNative Protocol compatibility +name: Test BabylonNative Compatibility on: workflow_dispatch: inputs: @@ -17,13 +17,13 @@ jobs: uses: actions/checkout@master - name: NPM Install run: npm install - working-directory: ./Apps/TestProtocol + working-directory: ./Apps/TestCompatibility - name: Run tests run: npm run testPackages ${{ github.event.inputs.NPM_Mask }} - working-directory: ./Apps/TestProtocol + working-directory: ./Apps/TestCompatibility - name: Upload Result uses: actions/upload-artifact@v2 with: name: NPMCompatibility path: | - ./Apps/TestProtocol/compatibility.json \ No newline at end of file + ./Apps/TestCompatibility/compatibility.json \ No newline at end of file From 3ea15e837c967c4a690a0e39b2844e58b239bc00 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Tue, 23 May 2023 15:47:17 +0200 Subject: [PATCH 80/88] fix test bjs mask as parameter --- Apps/TestCompatibility/testBNCompatibility.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Apps/TestCompatibility/testBNCompatibility.js b/Apps/TestCompatibility/testBNCompatibility.js index 5c347d28d..da1b97e74 100644 --- a/Apps/TestCompatibility/testBNCompatibility.js +++ b/Apps/TestCompatibility/testBNCompatibility.js @@ -26,14 +26,11 @@ const filesToCopy = [ {source:'babylonjs-materials', files:['babylonjs.materials.js', 'babylonjs.materials.js.map']}]; const BRNVersions = [ - {tag:'1.4.0', hash:'5859ffa'}, - {tag:'1.4.1', hash:'70bb77a'}, - {tag:'1.4.2', hash:'5990087'}, {tag:'1.4.3', hash:'301ab90'}, {tag:'1.4.4', hash:'75954f4'}, {tag:'1.5.0', hash:'75954f4'}, {tag:'1.5.1', hash:'a2cf1c7'}, - {tag:'1.5.4-preview', hash:'409bc4b'}]; + {tag:'1.6.0', hash:'409bc4b'}]; function patchTestScript() { const filePath = `${exeFolder}/Scripts/validation_native.js`; @@ -84,8 +81,15 @@ function checkoutAndBuildBN(tag, hash, callback) { function testPackages(tag, hash) { let compatiblePackageVersions = []; + + let bjsMask = '5.*.*'; + const [bjsVersion] = process.argv.slice(2); + if (bjsVersion != '') { + bjsMask = bjsVersion; + } + console.log("Getting NPM versions ..."); - execute("npm show babylonjs@5.*.* version --json", "./", (error, stdout, stderr) => { + execute(`npm show babylonjs@${bjsMask} version --json`, "./", (error, stdout, stderr) => { if (error) throw error; const versions = JSON.parse(stdout); From 7c7c844cc1bc9e4c044d745e70afa0f9721e53b4 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Tue, 23 May 2023 16:15:45 +0200 Subject: [PATCH 81/88] Update Documentation/TestingCompatibility.md Co-authored-by: Andy Fillebrown --- Documentation/TestingCompatibility.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/TestingCompatibility.md b/Documentation/TestingCompatibility.md index 48bfb97df..72a06d2a9 100644 --- a/Documentation/TestingCompatibility.md +++ b/Documentation/TestingCompatibility.md @@ -31,5 +31,5 @@ Result is the same .JSON as earlier than can be download as an artifact Resulting JSON is an array that contains a list of Babylon.js NPM versions compatible with the BabylonNative commit hash. There is a 1-1 link between a BabylonReactNative released version and a BabylonNative commit. -Note: The script test is very restrictive. Any compatibility version mismatch, a crash, a bad Validation test ,... will result in that specific version to not be compatible. +Note: The script test is very restrictive. Any compatibility version mismatch, a crash, a bad Validation test ,... will result in that specific version being incompatible. This means that a version marked as compatible is sure to run, at least, all the validation tests. \ No newline at end of file From 6aa53712f41baa74b68364daf6ab30aea9e64e69 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Tue, 23 May 2023 16:15:51 +0200 Subject: [PATCH 82/88] Update Documentation/TestingCompatibility.md Co-authored-by: Andy Fillebrown --- Documentation/TestingCompatibility.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/TestingCompatibility.md b/Documentation/TestingCompatibility.md index 72a06d2a9..ce7104cb5 100644 --- a/Documentation/TestingCompatibility.md +++ b/Documentation/TestingCompatibility.md @@ -2,7 +2,7 @@ `Apps/TestCompatibility` is a semi-automated tool to test compatibility between BabylonReactNative (more specificaly BabylonNative) and Babylon.js NPM packages. -It checkouts, build and run validation tests for every BabylonNative hash version from a list and every Babylon.js NPM package. +It checks out, builds and runs validation tests for every BabylonNative hash version from a list and every Babylon.js NPM package. NPM Package version must correspond to a mask provided to the script. ## Testing localy From 76388a0d1a83414326a2e0b614ab0e6bf05d09d1 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Wed, 24 May 2023 09:30:25 +0200 Subject: [PATCH 83/88] SLA update for 1.6.0 package (#579) --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 82b323d29..4da6c93a5 100644 --- a/README.md +++ b/README.md @@ -227,11 +227,11 @@ For iOS the XCode project needs to be generated with `CMake` as described [above | React Native | Babylon React Native | |---|---| -| 0.64 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.5.4-preview| -| 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.5.4-preview | -| 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.5.4-preview | -| 0.70 | 1.5.0, 1.5.1, 1.5.4-preview | -| 0.71 | 1.5.4-preview | +| 0.64 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0| +| 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0 | +| 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0 | +| 0.70 | 1.5.0, 1.5.1, 1.6.0 | +| 0.71 | 1.6.0 | Here are the package names for Android/iOS and Windows: @@ -254,11 +254,11 @@ Depending on the Babylon React Native NPM package version, some Babylon.js NPM d | 1.4.0 | 5.27.1 | | 1.4.1 | 5.32.2, 5.33.0, 5.33.1, 5.33.2, 5.34.0, 5.35.0 | | 1.4.2 | 5.35.1, 5.36.0, 5.37.0, 5.38.0, 5.39.0, 5.42.0, 5.42.1 | -| 1.4.3 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1 | -| 1.4.4 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1 | -| 1.5.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1 | -| 1.5.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1 | -| 1.5.4-preview | 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1 | +| 1.4.3 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.4.4 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.5.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.5.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.6.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | ## Security From dfc218eb0a5b47c4443e31ae06b3f514c0154b0f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Thu, 1 Jun 2023 17:50:28 +0200 Subject: [PATCH 84/88] Agnostic toolset for VS project + std link issue with MSVC 17.2+ (#580) * Agnostic toolset for VS project * platform tool version * pragma for std * Update Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj Co-authored-by: Gary Hsu * update windows readme --------- Co-authored-by: Gary Hsu --- Modules/@babylonjs/react-native-windows/README.md | 8 ++++++++ .../windows/BabylonReactNative/BabylonModule.cpp | 6 ++++++ .../windows/BabylonReactNative/BabylonReactNative.vcxproj | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Modules/@babylonjs/react-native-windows/README.md b/Modules/@babylonjs/react-native-windows/README.md index 4a84b9a19..e9ff6dc1f 100644 --- a/Modules/@babylonjs/react-native-windows/README.md +++ b/Modules/@babylonjs/react-native-windows/README.md @@ -10,3 +10,11 @@ This package has several **peer dependencies**. If these dependencies are unmet, This package will not work without installing the `@babylonjs/react-native` peer dependency. The `react-native-permissions` dependency is required for XR capabilities of Babylon.js. + +### Toolset + +Default toolset is v142. It's possible to change it using project variable named `BabylonReactNativeToolset`. +There are multiple ways to specify it: +- environment variable +- msbuild property (`msbuild /p:BabylonReactNativeToolset=v143` for example) +- customize the build by folder (https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-by-directory?view=vs-2022) \ No newline at end of file diff --git a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp index 240cbc662..6cb24ca85 100644 --- a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp +++ b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp @@ -2,6 +2,12 @@ #include "BabylonModule.h" #include "JSI/JsiApiContext.h" +// see https://developercommunity.visualstudio.com/t/-imp-std-init-once-complete-unresolved-external-sy/1684365 +#if _MSC_VER >= 1932 // Visual Studio 2022 version 17.2+ +# pragma comment(linker, "/alternatename:__imp___std_init_once_complete=__imp_InitOnceComplete") +# pragma comment(linker, "/alternatename:__imp___std_init_once_begin_initialize=__imp_InitOnceBeginInitialize") +#endif + using namespace winrt::BabylonReactNative::implementation; REACT_INIT(Initialize); diff --git a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj index 6960fe7a2..818b25733 100644 --- a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj +++ b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj @@ -77,8 +77,8 @@ DynamicLibrary v142 - v141 - v142 + $(BabylonReactNativeToolset) + Unicode false x64 From 1033c2fb7178468926816bc13a15b304664c5e08 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Thu, 1 Jun 2023 19:54:18 +0200 Subject: [PATCH 85/88] 1.6.1 SLA update (#581) * 1.6.1 SLA update * removed empty space --- README.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4da6c93a5..108b6029c 100644 --- a/README.md +++ b/README.md @@ -227,11 +227,11 @@ For iOS the XCode project needs to be generated with `CMake` as described [above | React Native | Babylon React Native | |---|---| -| 0.64 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0| -| 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0 | -| 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0 | -| 0.70 | 1.5.0, 1.5.1, 1.6.0 | -| 0.71 | 1.6.0 | +| 0.64 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | +| 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | +| 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | +| 0.70 | 1.5.0, 1.5.1, 1.6.0, 1.6.1 | +| 0.71 | 1.6.0, 1.6.1 | Here are the package names for Android/iOS and Windows: @@ -251,14 +251,15 @@ Depending on the Babylon React Native NPM package version, some Babylon.js NPM d | Babylon React Native | Babylon.js ([@babylonjs/core](https://www.npmjs.com/package/@babylonjs/core), [@babylonjs/loaders](https://www.npmjs.com/package/@babylonjs/loaders), ...) | |---|---| -| 1.4.0 | 5.27.1 | -| 1.4.1 | 5.32.2, 5.33.0, 5.33.1, 5.33.2, 5.34.0, 5.35.0 | -| 1.4.2 | 5.35.1, 5.36.0, 5.37.0, 5.38.0, 5.39.0, 5.42.0, 5.42.1 | -| 1.4.3 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.1, 6.4.0, 6.4.1 | -| 1.4.4 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | -| 1.5.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | -| 1.5.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | -| 1.6.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | +| 1.4.0 | 5.27.1 | +| 1.4.1 | 5.32.2, 5.33.0, 5.33.1, 5.33.2, 5.34.0, 5.35.0 | +| 1.4.2 | 5.35.1, 5.36.0, 5.37.0, 5.38.0, 5.39.0, 5.42.0, 5.42.1 | +| 1.4.3 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.4.4 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.5.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.5.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | +| 1.6.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | +| 1.6.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | ## Security From aafbad864d6eb6b08c4461caa8d77583e9aa4da3 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Thu, 22 Jun 2023 17:53:41 +0200 Subject: [PATCH 86/88] SLA for RN 0.72 (#584) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 108b6029c..9ed4c90ff 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,7 @@ For iOS the XCode project needs to be generated with `CMake` as described [above | 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | | 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | | 0.70 | 1.5.0, 1.5.1, 1.6.0, 1.6.1 | -| 0.71 | 1.6.0, 1.6.1 | +| 0.71 -> 0.72 | 1.6.0, 1.6.1 | Here are the package names for Android/iOS and Windows: @@ -241,7 +241,7 @@ Here are the package names for Android/iOS and Windows: | 0.65 -> 0.68 | [@babylonjs/react-native-iosandroid-0-65](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-65) | [@babylonjs/react-native-windows-0-65](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-65) | | 0.69 | [@babylonjs/react-native-iosandroid-0-69](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-69) | [@babylonjs/react-native-windows-0-69](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-69) | | 0.70 | [@babylonjs/react-native-iosandroid-0-70](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-70) | [@babylonjs/react-native-windows-0-70](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-70) | -| 0.71 | [@babylonjs/react-native-iosandroid-0-71](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-71) | [@babylonjs/react-native-windows-0-71](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-71) | +| 0.71 -> 0.72 | [@babylonjs/react-native-iosandroid-0-71](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-71) | [@babylonjs/react-native-windows-0-71](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-71) | Also, [@babylonjs/react-native](https://www.npmjs.com/package/@babylonjs/react-native) is a needed dependency for all platforms. From ca1663ffda25c47d731a313705ced28308b09245 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Thu, 20 Jul 2023 18:02:15 +0200 Subject: [PATCH 87/88] Update BN submodule (#589) * Update BN submodule * BN #883ba13 * a676d6df117cb6cdebc5c347b8aa37f2fed852fb * cmake + brn up * cmake update * removed comment * comment * GraphicsDevice * graphics init * android rn 0.71 * back to 0.64 --- .github/workflows/bn_master_commit.yml | 2 +- .github/workflows/ios_android.yml | 2 +- .github/workflows/pr.yml | 4 +- .../android/CMakeLists.txt | 4 +- .../android/build.gradle | 2 +- .../ios/CMakeLists.txt | 2 +- .../submodules/BabylonNative | 2 +- .../windows/CMakeLists.txt | 2 +- .../react-native/shared/BabylonNative.cpp | 48 +++++++++---------- 9 files changed, 34 insertions(+), 34 deletions(-) diff --git a/.github/workflows/bn_master_commit.yml b/.github/workflows/bn_master_commit.yml index 85b2f9cf3..beaf3270c 100644 --- a/.github/workflows/bn_master_commit.yml +++ b/.github/workflows/bn_master_commit.yml @@ -23,7 +23,7 @@ jobs: - name: Setup CMake uses: jwlawson/actions-setup-cmake@v1.8 with: - cmake-version: '3.19.6' # See https://gitlab.kitware.com/cmake/cmake/-/issues/22021 + cmake-version: '3.26.3' - name: Setup Ninja run: brew install ninja - name: NPM Install (Playground) diff --git a/.github/workflows/ios_android.yml b/.github/workflows/ios_android.yml index 12d6316cc..f501f8e61 100644 --- a/.github/workflows/ios_android.yml +++ b/.github/workflows/ios_android.yml @@ -28,7 +28,7 @@ jobs: - name: Setup CMake uses: jwlawson/actions-setup-cmake@v1.8 with: - cmake-version: '3.19.6' # See https://gitlab.kitware.com/cmake/cmake/-/issues/22021 + cmake-version: '3.26.3' - name: Setup Ninja run: brew install ninja - name: 'Select XCode ${{ inputs.xcode-version }}' diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index eb34d5003..0d762adbd 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -21,7 +21,7 @@ jobs: - name: Setup CMake uses: jwlawson/actions-setup-cmake@v1.8 with: - cmake-version: '3.19.6' # See https://gitlab.kitware.com/cmake/cmake/-/issues/22021 + cmake-version: '3.26.3' - name: Setup Ninja run: brew install ninja - name: NPM Install (Playground) @@ -77,7 +77,7 @@ jobs: - name: Setup CMake uses: jwlawson/actions-setup-cmake@v1.8 with: - cmake-version: '3.19.6' # See https://gitlab.kitware.com/cmake/cmake/-/issues/22021 + cmake-version: '3.26.3' - name: Setup Ninja run: brew install ninja - name: NPM Install (Playground) diff --git a/Modules/@babylonjs/react-native-iosandroid/android/CMakeLists.txt b/Modules/@babylonjs/react-native-iosandroid/android/CMakeLists.txt index 99bd84ed3..1396477f9 100644 --- a/Modules/@babylonjs/react-native-iosandroid/android/CMakeLists.txt +++ b/Modules/@babylonjs/react-native-iosandroid/android/CMakeLists.txt @@ -134,7 +134,7 @@ if (EXISTS "${TURBOMODULE_DIR}/CMakeLists.txt") turbomodulejsijni # prefab ready yoga # prefab ready AndroidExtensions - Graphics + GraphicsDevice JsRuntime NativeCamera NativeCapture @@ -196,7 +196,7 @@ else() jsi turbomodulejsijni AndroidExtensions - Graphics + GraphicsDevice JsRuntime NativeCamera NativeCapture diff --git a/Modules/@babylonjs/react-native-iosandroid/android/build.gradle b/Modules/@babylonjs/react-native-iosandroid/android/build.gradle index e7dfd3fd0..c64e1ec91 100644 --- a/Modules/@babylonjs/react-native-iosandroid/android/build.gradle +++ b/Modules/@babylonjs/react-native-iosandroid/android/build.gradle @@ -109,7 +109,7 @@ android { } externalNativeBuild { cmake { - version '3.19.6' + version '3.19.6+' path 'CMakeLists.txt' } } diff --git a/Modules/@babylonjs/react-native-iosandroid/ios/CMakeLists.txt b/Modules/@babylonjs/react-native-iosandroid/ios/CMakeLists.txt index fadbf2538..23ff53114 100644 --- a/Modules/@babylonjs/react-native-iosandroid/ios/CMakeLists.txt +++ b/Modules/@babylonjs/react-native-iosandroid/ios/CMakeLists.txt @@ -42,7 +42,7 @@ target_include_directories(BabylonNative PUBLIC ${CMAKE_CURRENT_LIST_DIR}) target_link_libraries(BabylonNative z arcana - Graphics + GraphicsDevice jsi reactnative JsRuntime diff --git a/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative b/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative index 409bc4b31..c89031ec5 160000 --- a/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative +++ b/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative @@ -1 +1 @@ -Subproject commit 409bc4b3178a5140462c618293e5ff984dfe5bd5 +Subproject commit c89031ec58bca5faffa92d3498230c5484175e57 diff --git a/Modules/@babylonjs/react-native-windows/windows/CMakeLists.txt b/Modules/@babylonjs/react-native-windows/windows/CMakeLists.txt index a23b717ff..7dcada09c 100644 --- a/Modules/@babylonjs/react-native-windows/windows/CMakeLists.txt +++ b/Modules/@babylonjs/react-native-windows/windows/CMakeLists.txt @@ -30,7 +30,7 @@ target_include_directories(BabylonNative PRIVATE ${SHARED_INCLUDES}) target_link_libraries(BabylonNative arcana - Graphics + GraphicsDevice jsi JsRuntime NativeCamera diff --git a/Modules/@babylonjs/react-native/shared/BabylonNative.cpp b/Modules/@babylonjs/react-native/shared/BabylonNative.cpp index a42f83bee..f1042c3b0 100644 --- a/Modules/@babylonjs/react-native/shared/BabylonNative.cpp +++ b/Modules/@babylonjs/react-native/shared/BabylonNative.cpp @@ -23,8 +23,8 @@ namespace BabylonNative namespace { Dispatcher g_inlineDispatcher{ [](const std::function& func) { func(); } }; - std::unique_ptr g_graphics{}; - std::unique_ptr g_update{}; + std::optional g_graphicsDevice{}; + std::optional g_update{}; std::unique_ptr g_nativeCanvas{}; } @@ -75,34 +75,34 @@ namespace BabylonNative void UpdateView(WindowType window, size_t width, size_t height) { - m_windowConfig.Window = window; - m_windowConfig.Width = width; - m_windowConfig.Height = height; + m_graphicsConfig.Window = window; + m_graphicsConfig.Width = width; + m_graphicsConfig.Height = height; UpdateGraphicsConfiguration(); } void UpdateGraphicsConfiguration() { - if (!g_graphics) + if (!g_graphicsDevice) { - g_graphics = Babylon::Graphics::Device::Create(m_windowConfig); - g_update = std::make_unique(g_graphics->GetUpdate("update")); + g_graphicsDevice.emplace(m_graphicsConfig); + g_update.emplace(g_graphicsDevice->GetUpdate("update")); } else { - g_graphics->UpdateWindow(m_windowConfig); - g_graphics->UpdateSize(m_windowConfig.Width, m_windowConfig.Height); + g_graphicsDevice->UpdateWindow(m_graphicsConfig.Window); + g_graphicsDevice->UpdateSize(m_graphicsConfig.Width, m_graphicsConfig.Height); } - g_graphics->UpdateMSAA(mMSAAValue); - g_graphics->UpdateAlphaPremultiplied(mAlphaPremultiplied); + g_graphicsDevice->UpdateMSAA(mMSAAValue); + g_graphicsDevice->UpdateAlphaPremultiplied(mAlphaPremultiplied); - g_graphics->EnableRendering(); + g_graphicsDevice->EnableRendering(); std::call_once(m_isGraphicsInitialized, [this]() { m_jsDispatcher([this]() { - g_graphics->AddToJavaScript(m_env); + g_graphicsDevice->AddToJavaScript(m_env); Babylon::Plugins::NativeEngine::Initialize(m_env); }); }); @@ -121,18 +121,18 @@ namespace BabylonNative void UpdateMSAA(uint8_t value) { mMSAAValue = value; - if (g_graphics) + if (g_graphicsDevice) { - g_graphics->UpdateMSAA(value); + g_graphicsDevice->UpdateMSAA(value); } } void UpdateAlphaPremultiplied(bool enabled) { mAlphaPremultiplied = enabled; - if (g_graphics) + if (g_graphicsDevice) { - g_graphics->UpdateAlphaPremultiplied(enabled); + g_graphicsDevice->UpdateAlphaPremultiplied(enabled); } } @@ -144,12 +144,12 @@ namespace BabylonNative } // If rendering has not been explicitly enabled, or has been explicitly disabled, then don't try to render. // Otherwise rendering can be implicitly enabled, which may not be desirable (e.g. after the engine is disposed). - if (g_graphics && m_isRenderingEnabled) + if (g_graphicsDevice && m_isRenderingEnabled) { - g_graphics->StartRenderingCurrentFrame(); + g_graphicsDevice->StartRenderingCurrentFrame(); g_update->Start(); g_update->Finish(); - g_graphics->FinishRenderingCurrentFrame(); + g_graphicsDevice->FinishRenderingCurrentFrame(); } } @@ -160,10 +160,10 @@ namespace BabylonNative void ResetView() { - if (g_graphics) + if (g_graphicsDevice) { g_nativeCanvas->FlushGraphicResources(); - g_graphics->DisableRendering(); + g_graphicsDevice->DisableRendering(); } m_isRenderingEnabled = false; @@ -264,7 +264,7 @@ namespace BabylonNative Babylon::Plugins::NativeInput* m_nativeInput{}; std::optional m_nativeXr{}; - Babylon::Graphics::WindowConfiguration m_windowConfig{}; + Babylon::Graphics::Configuration m_graphicsConfig{}; std::shared_ptr m_isXRActive{}; uint8_t mMSAAValue{}; From f90faebe3d3dc7a28a47f432857c6b1add24d648 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Mon, 24 Jul 2023 10:30:08 +0200 Subject: [PATCH 88/88] SLA 1.6.3 (#591) --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9ed4c90ff..f67b23db7 100644 --- a/README.md +++ b/README.md @@ -227,11 +227,11 @@ For iOS the XCode project needs to be generated with `CMake` as described [above | React Native | Babylon React Native | |---|---| -| 0.64 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | -| 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | -| 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1 | -| 0.70 | 1.5.0, 1.5.1, 1.6.0, 1.6.1 | -| 0.71 -> 0.72 | 1.6.0, 1.6.1 | +| 0.64 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.3 | +| 0.65 -> 0.68 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.3 | +| 0.69 | 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.3 | +| 0.70 | 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.3 | +| 0.71 -> 0.72 | 1.6.0, 1.6.1, 1.6.3 | Here are the package names for Android/iOS and Windows: @@ -260,6 +260,7 @@ Depending on the Babylon React Native NPM package version, some Babylon.js NPM d | 1.5.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.1, 5.45.2, 5.46.0, 5.47.0, 5.47.1, 5.48.0, 5.48.1, 5.49.0, 5.49.1, 5.49.2, 5.50.0, 5.50.1, 5.51.0, 5.52.0, 5.53.0, 5.54.0, 5.55.0, 5.56.0, 5.57.0, 5.57.1, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.3.1, 6.4.0, 6.4.1 | | 1.6.0 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | | 1.6.1 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | +| 1.6.3 | 5.42.2, 5.43.0, 5.43.1, 5.43.2, 5.44.0, 5.45.0, 5.45.2, 5.46.0, 5.47.0, 5.48.0, 5.48.1, 5.49.1 | ## Security