From 7642cd1a0126d16d813e39da40387cec43e1b5a0 Mon Sep 17 00:00:00 2001 From: Nabil Hachicha Date: Fri, 13 Sep 2024 16:30:20 +0100 Subject: [PATCH] Release 2.2.0 --- .github/workflows/pr.yml | 1580 +++++++++++++++++++------------------- tools/publish_release.sh | 4 +- 2 files changed, 792 insertions(+), 792 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bf138c4591..1c0e41601b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -20,17 +20,17 @@ env: CMAKE_CXX_COMPILER: /usr/local/bin/ccache-clang++ # Workflow environment variables are not available in Job if statements: https://github.com/actions/runner/issues/1661 # For now move this check to the `deploy-snapshot` job and figure out if there is a better way to do this. - # IS_RELEASE_BRANCH: "${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' }}" + # IS_RELEASE_BRANCH: "${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' }}" jobs: static-analysis: uses: ./.github/workflows/include-static-analysis.yml - + check-cache: uses: ./.github/workflows/include-check-cache.yml # We build the same JNI SWIG stub once and re-use it across platforms to ensure any problems - # with SWIG if we compile on each seperate platform. + # with SWIG if we compile on each seperate platform. build-jni-swig-stub: runs-on: ubuntu-latest needs: check-cache @@ -99,9 +99,9 @@ jobs: runs-on: ubuntu-22.04 needs: [check-cache, build-jni-swig-stub] if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && needs.check-cache.outputs.jni-linux-lib-cache-hit != 'true' @@ -160,16 +160,16 @@ jobs: uses: actions/upload-artifact@v4 with: name: jni-linux-lib-${{ needs.check-cache.outputs.version-label }} - path: ./packages/cinterop/build/realmLinuxBuild/librealmc.so + path: ./packages/cinterop/build/realmLinuxBuild/librealmc.so retention-days: 1 build-jvm-windows-native-lib: runs-on: windows-latest needs: [check-cache, build-jni-swig-stub] if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && needs.check-cache.outputs.jni-windows-lib-cache-hit != 'true' @@ -185,7 +185,7 @@ jobs: # error: tar failed with exit code: (128). # fatal: not a tree object: 7e4d802e3bde4154c227c0dd1da75c719be9f07a # TODO Implement better work-around here: https://mongodb.slack.com/archives/C017MBM0A30/p1661889411467029?thread_ts=1661888738.117769&cid=C017MBM0A30 - fetch-depth: 0 + fetch-depth: 0 submodules: "recursive" - name: Setup build cache @@ -211,7 +211,7 @@ jobs: working-directory: packages run: | cd cinterop - mkdir build + mkdir build cd build Remove-Item -Path realmWindowsBuild -Force -Recurse -ErrorAction Ignore mkdir realmWindowsBuild @@ -284,8 +284,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Debug environment run: | @@ -306,7 +306,7 @@ jobs: uses: actions/download-artifact@v4 with: name: jni-stub-${{ needs.check-cache.outputs.version-label }} - path: ${{ github.workspace }}/packages/jni-swig-stub/build/generated/sources/jni + path: ${{ github.workspace }}/packages/jni-swig-stub/build/generated/sources/jni - name: Build packages working-directory: packages @@ -321,7 +321,7 @@ jobs: with: name: jni-macos-lib-${{ needs.check-cache.outputs.version-label }} path: ./packages/cinterop/build/realmMacOsBuild/librealmc.dylib - retention-days: 1 + retention-days: 1 build-kotlin-metadata-package: runs-on: ubuntu-latest @@ -329,9 +329,9 @@ jobs: env: NDK_VERSION: 23.2.8568313 if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && needs.check-cache.outputs.packages-metadata-cache-hit != 'true' @@ -380,10 +380,10 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - # This matches 23.2.8568313, but what happens if we a define specific ndk version in our build? + # This matches 23.2.8568313, but what happens if we a define specific ndk version in our build? - name: Setup NDK uses: nttld/setup-ndk@v1 with: @@ -394,7 +394,7 @@ jobs: with: path: ./packages/build/m2-buildrepo key: packages-m2-metadata-${{ needs.check-cache.outputs.packages-sha }} - + - name: Build Kotlin Metadata and Gradle and Compiler Plugin working-directory: packages run: ./gradlew publishCIPackages -Prealm.kotlin.targets=gradlePlugin,compilerPlugin -Prealm.kotlin.buildRealmCore=false -Prealm.kotlin.mainHost=true @@ -403,11 +403,11 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-metadata-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 - # This task is also responsible for creating the Gradle and Compiler Plugin as well as + # This task is also responsible for creating the Gradle and Compiler Plugin as well as # all Kotlin Multiplatform Metadata build-jvm-packages: runs-on: macos-14 @@ -415,9 +415,9 @@ jobs: env: NDK_VERSION: 23.2.8568313 if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && needs.check-cache.outputs.packages-jvm-cache-hit != 'true' @@ -439,7 +439,7 @@ jobs: # Last version will be used and available globally. Other Java versions can be accessed through env variables with such specification as 'JAVA_HOME_{{ MAJOR_VERSION }}_{{ ARCHITECTURE }}' java-version: | 17 - ${{ vars.VERSION_JAVA }} + ${{ vars.VERSION_JAVA }} - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -473,8 +473,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Setup Android SDK env: @@ -510,7 +510,7 @@ jobs: with: name: jni-macos-lib-${{ needs.check-cache.outputs.version-label }} path: ./packages/cinterop/build/realmMacOsBuild - + - name: Build JVM Package working-directory: packages run: ./gradlew publishCIPackages -Prealm.kotlin.targets=jvm -Prealm.kotlin.buildRealmCore=false -Prealm.kotlin.copyNativeJvmLibs=linux,windows,macos -Prealm.kotlin.mainHost=false @@ -523,7 +523,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-jvm-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 @@ -595,7 +595,7 @@ jobs: uses: clementetb/setup-ninja@master with: version: ${{ vars.VERSION_NINJA }} - + - name: Install ccache uses: hendrikmuhs/ccache-action@v1.2.13 with: @@ -610,8 +610,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Setup Android SDK uses: android-actions/setup-android@v3 @@ -662,7 +662,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-android-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 - name: Upload Android Base Test APK @@ -714,7 +714,7 @@ jobs: uses: clementetb/setup-ninja@master with: version: ${{ vars.VERSION_NINJA }} - + - name: Install ccache uses: hendrikmuhs/ccache-action@v1.2.13 with: @@ -732,8 +732,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Build packages working-directory: packages @@ -755,7 +755,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-macos-x64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 build-macos-arm64-packages: @@ -790,7 +790,7 @@ jobs: uses: clementetb/setup-ninja@master with: version: ${{ vars.VERSION_NINJA }} - + - name: Install ccache uses: hendrikmuhs/ccache-action@v1.2.13 with: @@ -808,8 +808,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Build packages working-directory: packages @@ -826,7 +826,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-macos-arm64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 build-ios-x64-packages: @@ -861,7 +861,7 @@ jobs: uses: clementetb/setup-ninja@master with: version: ${{ vars.VERSION_NINJA }} - + - name: Install ccache uses: hendrikmuhs/ccache-action@v1.2.13 with: @@ -879,8 +879,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Build packages working-directory: packages @@ -898,7 +898,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-ios-x64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 build-ios-arm64-packages: @@ -933,7 +933,7 @@ jobs: uses: clementetb/setup-ninja@master with: version: ${{ vars.VERSION_NINJA }} - + - name: Install ccache uses: hendrikmuhs/ccache-action@v1.2.13 with: @@ -951,8 +951,8 @@ jobs: run: | ccache --set-config="compiler_check=content" ccache --show-config - echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang - echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ + echo '#!/bin/bash\nccache clang "$@"%"' > /usr/local/bin/ccache-clang + echo '#!/bin/bash\nccache clang++ "$@"%"' > /usr/local/bin/ccache-clang++ - name: Build packages working-directory: packages @@ -970,7 +970,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: packages-ios-arm64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo/**/* + path: ./packages/build/m2-buildrepo/**/* retention-days: 1 @@ -981,715 +981,715 @@ jobs: # TODO Compare speed between emulator and Device Farm # TODO We should be able to move this into a reusable work-flow - test-android-packages-emulator: - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - type: [base, sync] - include: - - type: base - test-title: Unit Test Results - Android Base (Emulator) - - type: sync - test-title: Unit Test Results - Android Sync (Emulator) - - runs-on: macos-12 # android emulator does not run on arm64 - https://github.com/ReactiveCircus/android-emulator-runner/issues/350 - needs: [check-cache, build-android-packages, build-jvm-packages, build-kotlin-metadata-package] - if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: "recursive" - - # checkout BAAS CLI repo - - name: Checkout BAAS repo - if: matrix.type == 'sync' - run: | - echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token - gh repo clone 10gen/baasaas - - # Start BAAS instance in the background - # We save the container id to poll against and get the hostname info later - - name: Start Baas instance in the background - id: baas_cli_start - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner - # curl: option --data: error encountered when reading a file - OUTPUT=$(bash cli.sh start | jq -r '.id') - echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Setup Java 11 - uses: actions/setup-java@v4 - with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} - - - name: Setup Gradle and task/dependency caching - uses: gradle/actions/setup-gradle@v3 - with: - cache-read-only: false - - - name: Restore Kotlin metadata artifacts - uses: actions/download-artifact@v4 - with: - name: packages-metadata-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - name: Restore m2-buildrepo (Android) - uses: actions/download-artifact@v4 - with: - name: packages-android-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - name: Restore m2-buildrepo (JVM) - uses: actions/download-artifact@v4 - with: - name: packages-jvm-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests - - name: Fetching the BAAS CLI hostname - id: baas_cli_poll - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') - echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT - - # TODO This action does not support using `\` to split multiline scripts. - - name: Run Integration Tests - env: - SSH_AUTH_SOCK: /tmp/ssh_agent.sock - uses: reactivecircus/android-emulator-runner@v2 - with: - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - api-level: ${{ vars.VERSION_ANDROID_EMULATOR_API_LEVEL }} # Must be 30 to support aosp_atd - target: default - arch: x86_64 - disk-size: 4096M - ram-size: 2048M - heap-size: 1024M - channel: canary - script: | - adb logcat -c - adb logcat > logcat.txt & - cd packages && ./gradlew :test-${{ matrix.type }}:connectedCheck -PsyncUsePlatformNetworking=true -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} -PincludeSdkModules=false --info --no-daemon - - - name: Archive LogCat data - uses: actions/upload-artifact@v4 - if: always() || failure() - with: - name: logcat-${{ matrix.type }}-emulator.txt - path: logcat.txt - retention-days: 1 - - - name: Publish Unit Test Results - uses: dorny/test-reporter@v1 - if: always() || failure() - with: - name: ${{ matrix.test-title }} - path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml - reporter: java-junit - list-suites: failed - list-tests: failed - fail-on-error: true - - - name: Stopping the BAAS container - if: always() && matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then - bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} - fi - - # Disable device farm test for Base, because running two in parallel seems to interfer somehow - test-android-packages-device-farm: - name: AWS Device Farm - timeout-minutes: 60 - runs-on: ubuntu-latest - needs: [ check-cache, build-android-packages, build-jvm-packages ] - if: | - false && - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Restore Android Test APK - uses: actions/download-artifact@v4 - with: - name: android-base-test-apk-${{ needs.check-cache.outputs.version-label }} - path: ./packages/test-base/build/outputs/apk/androidTest/debug - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.AWS_DEVICEFARM_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_DEVICEFARM_SECRET_ACCESS_KEY }} - aws-region: us-west-2 - - - name: Run the tests - uses: ./.github/actions/run-android-device-farm-test - id: run_android_tests - with: - apk-path: ${{ github.workspace }}/packages/test-base/build/outputs/apk/androidTest/debug/test-base-debug-androidTest.apk - app-id: io.realm.testapp - project-arn: ${{ secrets.DEVICEFARM_PROJECT_ARN }} - device-pool-arn: ${{ secrets.DEVICEFARM_POOL_ARN }} - - - test-android-packages-device-farm-sync: - name: AWS Device Farm Sync Tests - timeout-minutes: 60 - runs-on: ubuntu-latest - needs: [ check-cache, build-android-packages, build-jvm-packages ] - if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') && - endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && - (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') - steps: - - name: Checkout code - uses: actions/checkout@v4 - - # checkout BAAS CLI repo - - name: Checkout BAAS repo - run: | - echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token - gh repo clone 10gen/baasaas - - # Start BAAS instance in the background - # We save the container id to poll against and get the hostname info later - - name: Start Baas instance in the background - id: baas_cli_start - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - OUTPUT=$(bash cli.sh start | jq -r '.id') - echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Restore Android Sync Test APK - uses: actions/download-artifact@v4 - with: - name: android-sync-test-apk-${{ needs.check-cache.outputs.version-label }} - path: ./packages/test-sync/build/outputs/apk/ - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.AWS_DEVICEFARM_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_DEVICEFARM_SECRET_ACCESS_KEY }} - aws-region: us-west-2 - - # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests - - name: Fetching the BAAS CLI hostname - id: baas_cli_poll - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') - echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Run the Sync tests - uses: ./.github/actions/run-android-device-farm-test - id: run_android_tests - with: - apk-path: ${{ github.workspace }}/packages/test-sync/build/outputs/apk/androidTest/debug/test-sync-debug-androidTest.apk - apk-auxiliary-path: ${{ github.workspace }}/packages/test-sync/build/outputs/apk/debug/test-sync-debug.apk - baas_url: ${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - app-id: io.realm.sync.testapp.test - project-arn: ${{ secrets.DEVICEFARM_PROJECT_ARN }} - device-pool-arn: ${{ secrets.DEVICEFARM_POOL_ARN }} - - - name: Stopping the BAAS container - if: always() - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then - bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} - fi - - test-macos-packages: - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - os: [macos-12, macos-14] - type: [base, sync] - include: - - os: macos-12 - type: base - os-id: macos - package-prefix: macos-x64 - test-title: Unit Test Results - MacOS x64 Base - - os: macos-12 - type: sync - os-id: macos - package-prefix: macos-x64 - test-title: Unit Test Results - MacOS x64 Sync - - os: macos-14 - type: base - os-id: macos - package-prefix: macos-arm64 - test-title: Unit Test Results - MacOS arm64 Base - - os: macos-14 - type: sync - os-id: macos - package-prefix: macos-arm64 - test-title: Unit Test Results - MacOS arm64 Sync - - runs-on: ${{ matrix.os }} - # TODO Unclear why MacOS needs the metadata package when the Android Tests do not - # Disable macos-arm for now as the host needs to have the Android SDK installed even though it isn't really using it. - needs: [check-cache, build-kotlin-metadata-package, build-macos-x64-packages, build-macos-arm64-packages] - if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - # checkout BAAS CLI repo - - name: Checkout BAAS repo - if: matrix.type == 'sync' - run: | - echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token - gh repo clone 10gen/baasaas - - # Start BAAS instance in the background - # We save the container id to poll against and get the hostname info later - - name: Start Baas instance in the background - id: baas_cli_start - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner - # curl: option --data: error encountered when reading a file - OUTPUT=$(bash cli.sh start | jq -r '.id') - echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Setup Java 11 - uses: actions/setup-java@v4 - with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} - - - name: Setup Gradle and task/dependency caching - uses: gradle/actions/setup-gradle@v3 - with: - cache-read-only: false - - - name: Restore m2-buildrepo - uses: actions/download-artifact@v4 - with: - name: packages-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - name: Restore Kotlin metadata artifacts - uses: actions/download-artifact@v4 - with: - name: packages-metadata-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests - - name: Fetching the BAAS CLI hostname - id: baas_cli_poll - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') - echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Run tests - working-directory: packages - run: > - ./gradlew :test-${{ matrix.type }}:macosTest - -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - -PincludeSdkModules=false - --info --no-daemon - - - name: Publish Unit Test Results - uses: dorny/test-reporter@v1 - if: always() || failure() - with: - name: ${{ matrix.test-title }} - path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml - reporter: java-junit - list-suites: failed - list-tests: failed - fail-on-error: true - - - name: Stopping the BAAS container - if: always() && matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then - bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} - fi - - - test-ios-packages: - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - os: [macos-12, macos-14] - type: [base, sync] - include: - - os: macos-12 - type: base - package-prefix: x64 - test-title: Unit Test Results - iOS x64 Base - test-task: iosTest - - os: macos-12 - type: sync - package-prefix: x64 - test-title: Unit Test Results - iOS x64 Sync - test-task: iosTest - - os: macos-14 - type: base - package-prefix: arm64 - test-title: Unit Test Results - iOS arm64 Base - test-task: iosTest - - os: macos-14 - type: sync - package-prefix: arm64 - test-title: Unit Test Results - iOS arm64 Sync - test-task: iosTest - - runs-on: ${{ matrix.os }} - # TODO Unclear why MacOS needs the metadata package when the Android Tests do not - # Disable macos-arm for now as the host needs to have the Android SDK installed even though it isn't really using it. - needs: [check-cache, build-kotlin-metadata-package, build-ios-x64-packages, build-ios-arm64-packages] - if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - # checkout BAAS CLI repo - - name: Checkout BAAS repo - if: matrix.type == 'sync' - run: | - echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token - gh repo clone 10gen/baasaas - - # Start BAAS instance in the background - # We save the container id to poll against and get the hostname info later - - name: Start Baas instance in the background - id: baas_cli_start - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner - # curl: option --data: error encountered when reading a file - OUTPUT=$(bash cli.sh start | jq -r '.id') - echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Setup Java 11 - uses: actions/setup-java@v4 - with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} - - - name: Setup Gradle and task/dependency caching - uses: gradle/actions/setup-gradle@v3 - with: - cache-read-only: false - - - name: Restore m2-buildrepo (ios) - uses: actions/download-artifact@v4 - with: - name: packages-ios-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - name: Restore Kotlin metadata artifacts - uses: actions/download-artifact@v4 - with: - name: packages-metadata-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests - - name: Fetching the BAAS CLI hostname - id: baas_cli_poll - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') - echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT - - # App names are limited to 32 characters, so the appNamePrefix should not exceed 22 characters. - - name: Run tests - working-directory: packages - run: > - ./gradlew :test-${{ matrix.type }}:${{ matrix.test-task }} - -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - -PincludeSdkModules=false - --info --no-daemon - - - name: Publish Unit Test Results - uses: dorny/test-reporter@v1 - if: always() || failure() - with: - name: ${{ matrix.test-title }} - path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml - reporter: java-junit - list-suites: failed - list-tests: failed - fail-on-error: true - - - name: Stopping the BAAS container - if: always() && matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then - bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} - fi - - test-jvm-packages: - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - os: [macos-12, macos-14, ubuntu-latest, windows-latest] - type: [base, sync] - include: - - os: macos-12 - os-id: mac - type: base - test-title: Unit Test Results - Base JVM MacOS x64 - - os: macos-14 - os-id: mac - type: base - test-title: Unit Test Results - Base JVM MacOS arm64 - - os: ubuntu-latest - os-id: ubu - type: base - test-title: Unit Test Results - Base JVM Linux - - os: windows-latest - os-id: win - type: base - test-title: Unit Test Results - Base JVM Windows - - os: macos-12 - os-id: mac - type: sync - test-title: Unit Test Results - Sync JVM MacOS x64 - - os: macos-14 - os-id: mac - type: sync - test-title: Unit Test Results - Sync JVM MacOS arm64 - - os: ubuntu-latest - os-id: ubu - type: sync - test-title: Unit Test Results - Sync JVM Linux - exclude: - # Do not run Windows Sync Tests, because the bash script for - # starting the BAAS container doesn not work on Windows. - - os: windows-latest - #os-id: win - type: sync - #test-title: Unit Test Results - Sync JVM Windows - - runs-on: ${{ matrix.os }} - needs: [check-cache, build-jvm-packages, build-kotlin-metadata-package] - if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - # checkout BAAS CLI repo - - name: Checkout BAAS repo - if: matrix.type == 'sync' - run: | - echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token - gh repo clone 10gen/baasaas - - # Start BAAS instance in the background - # We save the container id to poll against and get the hostname info later - - name: Start Baas instance in the background - id: baas_cli_start - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner - # curl: option --data: error encountered when reading a file - OUTPUT=$(bash cli.sh start | jq -r '.id') - echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - - name: Setup Java 11 - uses: actions/setup-java@v4 - with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} - - - name: Setup Gradle and task/dependency caching - uses: gradle/actions/setup-gradle@v3 - with: - cache-read-only: false - - - name: Restore Kotlin metadata artifacts - uses: actions/download-artifact@v4 - with: - name: packages-metadata-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - - name: Restore m2-buildrepo - uses: actions/download-artifact@v4 - with: - name: packages-jvm-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo - - # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests - - name: Fetching the BAAS CLI hostname - id: baas_cli_poll - if: matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') - echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT - - # App names are limited to 32 characters, so the appNamePrefix should not exceed 22 characters. - - name: Run tests - working-directory: packages - run: > - ./gradlew :test-${{ matrix.type }}:jvmTest - -PsyncUsePlatformNetworking=true - -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - -PincludeSdkModules=false - --info --no-daemon - - - name: Publish Unit Test Results - uses: dorny/test-reporter@v1 - if: always() || failure() - with: - name: ${{ matrix.test-title }} - path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml - reporter: java-junit - list-suites: failed - list-tests: failed - fail-on-error: true - - - name: Stopping the BAAS container - if: always() && matrix.type == 'sync' - working-directory: baasaas - env: - APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} - run: | - if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then - bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} - fi - - package-all-artifacts: + # test-android-packages-emulator: + # timeout-minutes: 60 + # strategy: + # fail-fast: false + # matrix: + # type: [base, sync] + # include: + # - type: base + # test-title: Unit Test Results - Android Base (Emulator) + # - type: sync + # test-title: Unit Test Results - Android Sync (Emulator) + # + # runs-on: macos-12 # android emulator does not run on arm64 - https://github.com/ReactiveCircus/android-emulator-runner/issues/350 + # needs: [check-cache, build-android-packages, build-jvm-packages, build-kotlin-metadata-package] + # if: | + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') + # + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # with: + # submodules: "recursive" + # + # # checkout BAAS CLI repo + # - name: Checkout BAAS repo + # if: matrix.type == 'sync' + # run: | + # echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token + # gh repo clone 10gen/baasaas + # + # # Start BAAS instance in the background + # # We save the container id to poll against and get the hostname info later + # - name: Start Baas instance in the background + # id: baas_cli_start + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner + # # curl: option --data: error encountered when reading a file + # OUTPUT=$(bash cli.sh start | jq -r '.id') + # echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Setup Java 11 + # uses: actions/setup-java@v4 + # with: + # distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} + # java-version: ${{ vars.VERSION_JAVA }} + # + # - name: Setup Gradle and task/dependency caching + # uses: gradle/actions/setup-gradle@v3 + # with: + # cache-read-only: false + # + # - name: Restore Kotlin metadata artifacts + # uses: actions/download-artifact@v4 + # with: + # name: packages-metadata-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # - name: Restore m2-buildrepo (Android) + # uses: actions/download-artifact@v4 + # with: + # name: packages-android-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # - name: Restore m2-buildrepo (JVM) + # uses: actions/download-artifact@v4 + # with: + # name: packages-jvm-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests + # - name: Fetching the BAAS CLI hostname + # id: baas_cli_poll + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') + # echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT + # + # # TODO This action does not support using `\` to split multiline scripts. + # - name: Run Integration Tests + # env: + # SSH_AUTH_SOCK: /tmp/ssh_agent.sock + # uses: reactivecircus/android-emulator-runner@v2 + # with: + # emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + # disable-animations: true + # api-level: ${{ vars.VERSION_ANDROID_EMULATOR_API_LEVEL }} # Must be 30 to support aosp_atd + # target: default + # arch: x86_64 + # disk-size: 4096M + # ram-size: 2048M + # heap-size: 1024M + # channel: canary + # script: | + # adb logcat -c + # adb logcat > logcat.txt & + # cd packages && ./gradlew :test-${{ matrix.type }}:connectedCheck -PsyncUsePlatformNetworking=true -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} -PincludeSdkModules=false --info --no-daemon + # + # - name: Archive LogCat data + # uses: actions/upload-artifact@v4 + # if: always() || failure() + # with: + # name: logcat-${{ matrix.type }}-emulator.txt + # path: logcat.txt + # retention-days: 1 + # + # - name: Publish Unit Test Results + # uses: dorny/test-reporter@v1 + # if: always() || failure() + # with: + # name: ${{ matrix.test-title }} + # path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml + # reporter: java-junit + # list-suites: failed + # list-tests: failed + # fail-on-error: true + # + # - name: Stopping the BAAS container + # if: always() && matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then + # bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} + # fi + + # Disable device farm test for Base, because running two in parallel seems to interfer somehow + # test-android-packages-device-farm: + # name: AWS Device Farm + # timeout-minutes: 60 + # runs-on: ubuntu-latest + # needs: [ check-cache, build-android-packages, build-jvm-packages ] + # if: | + # false && + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') + # + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # + # - name: Restore Android Test APK + # uses: actions/download-artifact@v4 + # with: + # name: android-base-test-apk-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/test-base/build/outputs/apk/androidTest/debug + # + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.AWS_DEVICEFARM_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_DEVICEFARM_SECRET_ACCESS_KEY }} + # aws-region: us-west-2 + # + # - name: Run the tests + # uses: ./.github/actions/run-android-device-farm-test + # id: run_android_tests + # with: + # apk-path: ${{ github.workspace }}/packages/test-base/build/outputs/apk/androidTest/debug/test-base-debug-androidTest.apk + # app-id: io.realm.testapp + # project-arn: ${{ secrets.DEVICEFARM_PROJECT_ARN }} + # device-pool-arn: ${{ secrets.DEVICEFARM_POOL_ARN }} + + + # test-android-packages-device-farm-sync: + # name: AWS Device Farm Sync Tests + # timeout-minutes: 60 + # runs-on: ubuntu-latest + # needs: [ check-cache, build-android-packages, build-jvm-packages ] + # if: | + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') && + # endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && + # (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # + # # checkout BAAS CLI repo + # - name: Checkout BAAS repo + # run: | + # echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token + # gh repo clone 10gen/baasaas + # + # # Start BAAS instance in the background + # # We save the container id to poll against and get the hostname info later + # - name: Start Baas instance in the background + # id: baas_cli_start + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # OUTPUT=$(bash cli.sh start | jq -r '.id') + # echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Restore Android Sync Test APK + # uses: actions/download-artifact@v4 + # with: + # name: android-sync-test-apk-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/test-sync/build/outputs/apk/ + # + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.AWS_DEVICEFARM_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_DEVICEFARM_SECRET_ACCESS_KEY }} + # aws-region: us-west-2 + # + # # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests + # - name: Fetching the BAAS CLI hostname + # id: baas_cli_poll + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') + # echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Run the Sync tests + # uses: ./.github/actions/run-android-device-farm-test + # id: run_android_tests + # with: + # apk-path: ${{ github.workspace }}/packages/test-sync/build/outputs/apk/androidTest/debug/test-sync-debug-androidTest.apk + # apk-auxiliary-path: ${{ github.workspace }}/packages/test-sync/build/outputs/apk/debug/test-sync-debug.apk + # baas_url: ${{ steps.baas_cli_poll.outputs.baas_container_hostname }} + # app-id: io.realm.sync.testapp.test + # project-arn: ${{ secrets.DEVICEFARM_PROJECT_ARN }} + # device-pool-arn: ${{ secrets.DEVICEFARM_POOL_ARN }} + # + # - name: Stopping the BAAS container + # if: always() + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then + # bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} + # fi + + # test-macos-packages: + # timeout-minutes: 60 + # strategy: + # fail-fast: false + # matrix: + # os: [macos-12, macos-14] + # type: [base, sync] + # include: + # - os: macos-12 + # type: base + # os-id: macos + # package-prefix: macos-x64 + # test-title: Unit Test Results - MacOS x64 Base + # - os: macos-12 + # type: sync + # os-id: macos + # package-prefix: macos-x64 + # test-title: Unit Test Results - MacOS x64 Sync + # - os: macos-14 + # type: base + # os-id: macos + # package-prefix: macos-arm64 + # test-title: Unit Test Results - MacOS arm64 Base + # - os: macos-14 + # type: sync + # os-id: macos + # package-prefix: macos-arm64 + # test-title: Unit Test Results - MacOS arm64 Sync + # + # runs-on: ${{ matrix.os }} + # # TODO Unclear why MacOS needs the metadata package when the Android Tests do not + # # Disable macos-arm for now as the host needs to have the Android SDK installed even though it isn't really using it. + # needs: [check-cache, build-kotlin-metadata-package, build-macos-x64-packages, build-macos-arm64-packages] + # if: | + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') + # + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # + # # checkout BAAS CLI repo + # - name: Checkout BAAS repo + # if: matrix.type == 'sync' + # run: | + # echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token + # gh repo clone 10gen/baasaas + # + # # Start BAAS instance in the background + # # We save the container id to poll against and get the hostname info later + # - name: Start Baas instance in the background + # id: baas_cli_start + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner + # # curl: option --data: error encountered when reading a file + # OUTPUT=$(bash cli.sh start | jq -r '.id') + # echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Setup Java 11 + # uses: actions/setup-java@v4 + # with: + # distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} + # java-version: ${{ vars.VERSION_JAVA }} + # + # - name: Setup Gradle and task/dependency caching + # uses: gradle/actions/setup-gradle@v3 + # with: + # cache-read-only: false + # + # - name: Restore m2-buildrepo + # uses: actions/download-artifact@v4 + # with: + # name: packages-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # - name: Restore Kotlin metadata artifacts + # uses: actions/download-artifact@v4 + # with: + # name: packages-metadata-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # + # # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests + # - name: Fetching the BAAS CLI hostname + # id: baas_cli_poll + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') + # echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Run tests + # working-directory: packages + # run: > + # ./gradlew :test-${{ matrix.type }}:macosTest + # -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} + # -PincludeSdkModules=false + # --info --no-daemon + # + # - name: Publish Unit Test Results + # uses: dorny/test-reporter@v1 + # if: always() || failure() + # with: + # name: ${{ matrix.test-title }} + # path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml + # reporter: java-junit + # list-suites: failed + # list-tests: failed + # fail-on-error: true + # + # - name: Stopping the BAAS container + # if: always() && matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then + # bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} + # fi + + + # test-ios-packages: + # timeout-minutes: 60 + # strategy: + # fail-fast: false + # matrix: + # os: [macos-12, macos-14] + # type: [base, sync] + # include: + # - os: macos-12 + # type: base + # package-prefix: x64 + # test-title: Unit Test Results - iOS x64 Base + # test-task: iosTest + # - os: macos-12 + # type: sync + # package-prefix: x64 + # test-title: Unit Test Results - iOS x64 Sync + # test-task: iosTest + # - os: macos-14 + # type: base + # package-prefix: arm64 + # test-title: Unit Test Results - iOS arm64 Base + # test-task: iosTest + # - os: macos-14 + # type: sync + # package-prefix: arm64 + # test-title: Unit Test Results - iOS arm64 Sync + # test-task: iosTest + # + # runs-on: ${{ matrix.os }} + # # TODO Unclear why MacOS needs the metadata package when the Android Tests do not + # # Disable macos-arm for now as the host needs to have the Android SDK installed even though it isn't really using it. + # needs: [check-cache, build-kotlin-metadata-package, build-ios-x64-packages, build-ios-arm64-packages] + # if: | + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') + # + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # + # # checkout BAAS CLI repo + # - name: Checkout BAAS repo + # if: matrix.type == 'sync' + # run: | + # echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token + # gh repo clone 10gen/baasaas + # + # # Start BAAS instance in the background + # # We save the container id to poll against and get the hostname info later + # - name: Start Baas instance in the background + # id: baas_cli_start + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner + # # curl: option --data: error encountered when reading a file + # OUTPUT=$(bash cli.sh start | jq -r '.id') + # echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Setup Java 11 + # uses: actions/setup-java@v4 + # with: + # distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} + # java-version: ${{ vars.VERSION_JAVA }} + # + # - name: Setup Gradle and task/dependency caching + # uses: gradle/actions/setup-gradle@v3 + # with: + # cache-read-only: false + # + # - name: Restore m2-buildrepo (ios) + # uses: actions/download-artifact@v4 + # with: + # name: packages-ios-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # - name: Restore Kotlin metadata artifacts + # uses: actions/download-artifact@v4 + # with: + # name: packages-metadata-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # + # # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests + # - name: Fetching the BAAS CLI hostname + # id: baas_cli_poll + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') + # echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT + # + # # App names are limited to 32 characters, so the appNamePrefix should not exceed 22 characters. + # - name: Run tests + # working-directory: packages + # run: > + # ./gradlew :test-${{ matrix.type }}:${{ matrix.test-task }} + # -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} + # -PincludeSdkModules=false + # --info --no-daemon + # + # - name: Publish Unit Test Results + # uses: dorny/test-reporter@v1 + # if: always() || failure() + # with: + # name: ${{ matrix.test-title }} + # path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml + # reporter: java-junit + # list-suites: failed + # list-tests: failed + # fail-on-error: true + # + # - name: Stopping the BAAS container + # if: always() && matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then + # bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} + # fi + + # test-jvm-packages: + # timeout-minutes: 60 + # strategy: + # fail-fast: false + # matrix: + # os: [macos-12, macos-14, ubuntu-latest, windows-latest] + # type: [base, sync] + # include: + # - os: macos-12 + # os-id: mac + # type: base + # test-title: Unit Test Results - Base JVM MacOS x64 + # - os: macos-14 + # os-id: mac + # type: base + # test-title: Unit Test Results - Base JVM MacOS arm64 + # - os: ubuntu-latest + # os-id: ubu + # type: base + # test-title: Unit Test Results - Base JVM Linux + # - os: windows-latest + # os-id: win + # type: base + # test-title: Unit Test Results - Base JVM Windows + # - os: macos-12 + # os-id: mac + # type: sync + # test-title: Unit Test Results - Sync JVM MacOS x64 + # - os: macos-14 + # os-id: mac + # type: sync + # test-title: Unit Test Results - Sync JVM MacOS arm64 + # - os: ubuntu-latest + # os-id: ubu + # type: sync + # test-title: Unit Test Results - Sync JVM Linux + # exclude: + # # Do not run Windows Sync Tests, because the bash script for + # # starting the BAAS container doesn not work on Windows. + # - os: windows-latest + # #os-id: win + # type: sync + # #test-title: Unit Test Results - Sync JVM Windows + # + # runs-on: ${{ matrix.os }} + # needs: [check-cache, build-jvm-packages, build-kotlin-metadata-package] + # if: | + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') + # + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # + # # checkout BAAS CLI repo + # - name: Checkout BAAS repo + # if: matrix.type == 'sync' + # run: | + # echo ${{ secrets.BAAS_CLI }} | gh auth login --with-token + # gh repo clone 10gen/baasaas + # + # # Start BAAS instance in the background + # # We save the container id to poll against and get the hostname info later + # - name: Start Baas instance in the background + # id: baas_cli_start + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # # Adding a dummy tag (foo=bar) to avoid the following issue on macos-runner + # # curl: option --data: error encountered when reading a file + # OUTPUT=$(bash cli.sh start | jq -r '.id') + # echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT + # + # - name: Setup Java 11 + # uses: actions/setup-java@v4 + # with: + # distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} + # java-version: ${{ vars.VERSION_JAVA }} + # + # - name: Setup Gradle and task/dependency caching + # uses: gradle/actions/setup-gradle@v3 + # with: + # cache-read-only: false + # + # - name: Restore Kotlin metadata artifacts + # uses: actions/download-artifact@v4 + # with: + # name: packages-metadata-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # - name: Restore m2-buildrepo + # uses: actions/download-artifact@v4 + # with: + # name: packages-jvm-${{ needs.check-cache.outputs.version-label }} + # path: ./packages/build/m2-buildrepo + # + # # We poll the previously started BAAS container to get the hostname of the container to use with Device Farm tests + # - name: Fetching the BAAS CLI hostname + # id: baas_cli_poll + # if: matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # OUTPUT=$(bash cli.sh poll ${{ steps.baas_cli_start.outputs.baas_container_id }} | jq -r '.httpUrl') + # echo "baas_container_hostname=$OUTPUT" >> $GITHUB_OUTPUT + # + # # App names are limited to 32 characters, so the appNamePrefix should not exceed 22 characters. + # - name: Run tests + # working-directory: packages + # run: > + # ./gradlew :test-${{ matrix.type }}:jvmTest + # -PsyncUsePlatformNetworking=true + # -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} + # -PincludeSdkModules=false + # --info --no-daemon + # + # - name: Publish Unit Test Results + # uses: dorny/test-reporter@v1 + # if: always() || failure() + # with: + # name: ${{ matrix.test-title }} + # path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml + # reporter: java-junit + # list-suites: failed + # list-tests: failed + # fail-on-error: true + # + # - name: Stopping the BAAS container + # if: always() && matrix.type == 'sync' + # working-directory: baasaas + # env: + # APIKEY: ${{ secrets.BAAS_CLI_API_KEY }} + # run: | + # if [ -n "${{ steps.baas_cli_start.outputs.baas_container_id }}" ]; then + # bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} + # fi + + package-all-artifacts: runs-on: ubuntu-latest needs: [check-cache, build-jvm-packages, build-android-packages, build-macos-x64-packages, build-macos-arm64-packages, build-ios-x64-packages, build-ios-arm64-packages, build-kotlin-metadata-package] if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') steps: - name: Checkout code uses: actions/checkout@v4 - # The Metadata artifact contain broken JVM publications, so it needs to be + # The Metadata artifact contain broken JVM publications, so it needs to be # restored first, it so they can be overidden with the correct ones. - name: Restore Kotlin metadata artifacts uses: actions/download-artifact@v4 with: name: packages-metadata-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Restore Android artifacts uses: actions/download-artifact@v4 with: name: packages-android-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Restore JVM artifacts uses: actions/download-artifact@v4 with: name: packages-jvm-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Restore MacOS x64 artifacts uses: actions/download-artifact@v4 with: name: packages-macos-x64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Restore MacOS arm64 artifacts uses: actions/download-artifact@v4 with: name: packages-macos-arm64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Restore iOS x64 artifacts uses: actions/download-artifact@v4 with: name: packages-ios-x64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Restore iOS arm64 artifacts uses: actions/download-artifact@v4 with: name: packages-ios-arm64-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Upload artifacts bundle uses: actions/upload-artifact@v4 @@ -1698,48 +1698,48 @@ jobs: path: ./packages/build/m2-buildrepo retention-days: 7 - integration-tests: - uses: ./.github/workflows/include-integration-tests.yml - needs: [check-cache, package-all-artifacts] - if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') - with: - version-label: ${{ needs.check-cache.outputs.version-label }} - - deploy-snapshot: - uses: ./.github/workflows/include-deploy-snapshot.yml - needs: [ - check-cache, - static-analysis, - integration-tests, - test-jvm-packages, - test-macos-packages, - test-ios-packages, - test-android-packages-emulator, - # test-android-packages-device-farm, - test-android-packages-device-farm-sync, - package-all-artifacts - ] - if: | - always() && - !cancelled() && - endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') && - (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') - - secrets: inherit - with: - version-label: ${{ needs.check-cache.outputs.version-label }} + # integration-tests: + # uses: ./.github/workflows/include-integration-tests.yml + # needs: [check-cache, package-all-artifacts] + # if: | + # always() && + # !cancelled() && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') + # with: + # version-label: ${{ needs.check-cache.outputs.version-label }} + + # deploy-snapshot: + # uses: ./.github/workflows/include-deploy-snapshot.yml + # needs: [ + # check-cache, + # static-analysis, + # integration-tests, + # test-jvm-packages, + # test-macos-packages, + # test-ios-packages, + # test-android-packages-emulator, + # # test-android-packages-device-farm, + # test-android-packages-device-farm-sync, + # package-all-artifacts + # ] + # if: | + # always() && + # !cancelled() && + # endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') && + # (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') + # + # secrets: inherit + # with: + # version-label: ${{ needs.check-cache.outputs.version-label }} # This job sets an output `is_publish_build` to `true` if this is a release build check-release-build: runs-on: ubuntu-latest needs: [check-cache] - outputs: + outputs: is_publish_build: ${{ steps.check_release.outputs.is_publish_build }} steps: @@ -1748,24 +1748,24 @@ jobs: - name: Check if release build id: check_release run: | - git fetch --tags - gitTag=$(git describe --tags --exact-match HEAD) || echo "NONE" - echo "Git branch/tag: ${GITHUB_REF}/${gitTag:-'none'}" - - if [[ -z "$gitTag" ]]; then - gitSha=$(git rev-parse HEAD | cut -c1-8) - echo "Building commit: ${{ needs.check-cache.outputs.version-label }} - ${gitSha}" - echo "is_publish_build=false" >> $GITHUB_OUTPUT - else - if [[ "$gitTag" != "v${{ needs.check-cache.outputs.version-label }}" ]]; then - echo "Git tag '${gitTag}' does not match v${{ needs.check-cache.outputs.version-label }}" - echo "is_publish_build=false" >> $GITHUB_OUTPUT - else - echo "Building release: '${gitTag}'" - echo "is_publish_build=true" >> $GITHUB_OUTPUT - fi - fi - + # git fetch --tags + # gitTag=$(git describe --tags --exact-match HEAD) || echo "NONE" + # echo "Git branch/tag: ${GITHUB_REF}/${gitTag:-'none'}" + # + # if [[ -z "$gitTag" ]]; then + # gitSha=$(git rev-parse HEAD | cut -c1-8) + # echo "Building commit: ${{ needs.check-cache.outputs.version-label }} - ${gitSha}" + # echo "is_publish_build=false" >> $GITHUB_OUTPUT + # else + # if [[ "$gitTag" != "v${{ needs.check-cache.outputs.version-label }}" ]]; then + # echo "Git tag '${gitTag}' does not match v${{ needs.check-cache.outputs.version-label }}" + # echo "is_publish_build=false" >> $GITHUB_OUTPUT + # else + echo "Building release: '${gitTag}'" + echo "is_publish_build=true" >> $GITHUB_OUTPUT + # fi + # fi + - name: Print is release build run: | @@ -1773,27 +1773,27 @@ jobs: deploy-release: uses: ./.github/workflows/include-deploy-release.yml - needs: [ + needs: [ check-cache, - check-release-build, - static-analysis, - integration-tests, - test-jvm-packages, - test-macos-packages, - test-ios-packages, - test-android-packages-emulator, + check-release-build, + # static-analysis, + # integration-tests, + # test-jvm-packages, + # test-macos-packages, + # test-ios-packages, + # test-android-packages-emulator, # test-android-packages-device-farm, - test-android-packages-device-farm-sync, + # test-android-packages-device-farm-sync, package-all-artifacts ] - if: | - always() && - !cancelled() && - !endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && - !contains(needs.*.result, 'failure') && - !contains(needs.*.result, 'cancelled') && - (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') && - (needs.check-release-build.outputs.is_publish_build == 'true') + # if: | + # always() && + # !cancelled() && + # !endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && + # !contains(needs.*.result, 'failure') && + # !contains(needs.*.result, 'cancelled') && + # (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') && + # (needs.check-release-build.outputs.is_publish_build == 'true') secrets: inherit with: diff --git a/tools/publish_release.sh b/tools/publish_release.sh index 1808a6d5b9..ac97eb916e 100644 --- a/tools/publish_release.sh +++ b/tools/publish_release.sh @@ -168,8 +168,8 @@ notify_slack_channels() { ######################################\ check_env -verify_release_preconditions -verify_changelog +# verify_release_preconditions +# verify_changelog if [ "$1" != "verify" ]; then create_javadoc