diff --git a/.github/workflows/include-deploy-release.yml b/.github/workflows/include-deploy-release.yml index 7afc19995c..c75120588c 100644 --- a/.github/workflows/include-deploy-release.yml +++ b/.github/workflows/include-deploy-release.yml @@ -13,8 +13,8 @@ on: jobs: deploy: - runs-on: macos-12 - name: Deploy release + runs-on: macos-13 + name: Deploy release steps: - name: git checkout @@ -22,11 +22,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -60,10 +60,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++ - # TODO This matches 23.2.8568313, but what happens if we define specific ndk version in our build? + # TODO This matches 23.2.8568313, but what happens if we define specific ndk version in our build? - name: Setup NDK uses: nttld/setup-ndk@v1 with: @@ -109,4 +109,3 @@ jobs: "${{ secrets.SLACK_URL_RELEASE }}" "${{ secrets.SLACK_URL_CI }}" \ "${{ secrets.GRADLE_PORTAL_KEY }}" "${{ secrets.GRADLE_PORTAL_SECRET }}" \ '-PsignBuild=true -PsignSecretRingFileKotlin="${{ secrets.GPG_SIGNING_KEY_BASE_64_DBG }}" -PsignPasswordKotlin=${{ secrets.GPG_PASS_PHRASE_DBG }} -Prealm.kotlin.copyNativeJvmLibs=linux,windows' - diff --git a/.github/workflows/include-deploy-snapshot.yml b/.github/workflows/include-deploy-snapshot.yml index 83dbf0fbd3..5e9e478c7f 100644 --- a/.github/workflows/include-deploy-snapshot.yml +++ b/.github/workflows/include-deploy-snapshot.yml @@ -10,7 +10,7 @@ on: jobs: deploy: runs-on: ubuntu-latest - name: Deploy SNAPSHOT + name: Deploy SNAPSHOT steps: - name: Remove unnecessary files @@ -23,11 +23,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Install Kotlin Commandline Tools uses: fwilhe2/setup-kotlin@0.2.0 @@ -37,11 +37,11 @@ jobs: - name: Restore m2-buildrepo uses: actions/download-artifact@v4 with: - name: all-packages-${{ inputs.version-label }} - path: ./packages/build/m2-buildrepo + name: all-packages-2.4.0-SNAPSHOT + path: ./packages/build/m2-buildrepo - name: Publish SNAPSHOT to Maven Central - # env: + # env: # GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY_BASE_64 }} # GPG_PASS_PHRASE: ${{ secrets.GPG_PASS_PHRASE }} # MAVEN_CENTRAL_USER: ${{ secrets.MAVEN_CENTRAL_USER }} diff --git a/.github/workflows/include-integration-tests.yml b/.github/workflows/include-integration-tests.yml index 2d3349ec8e..2e9a13e684 100644 --- a/.github/workflows/include-integration-tests.yml +++ b/.github/workflows/include-integration-tests.yml @@ -1,4 +1,4 @@ -name: Gradle Project Integration Tests +name: Gradle Project Integration Tests on: workflow_call: @@ -36,10 +36,10 @@ jobs: # uses: actions/download-artifact@v4 # with: # name: all-packages-${{ needs.check-cache.outputs.version-label }} - # path: ./packages/build/m2-buildrepo + # path: ./packages/build/m2-buildrepo # # TODO Can we read api level from Config.kt - # - name: Run Monkey on Android Sample + # - name: Run Monkey on Android Sample # env: # SSH_AUTH_SOCK: /tmp/ssh_agent.sock # uses: reactivecircus/android-emulator-runner@v2 @@ -62,11 +62,11 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -77,26 +77,26 @@ jobs: uses: actions/download-artifact@v4 with: name: all-packages-${{ inputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo # TODO Can we read api level from Config.kt - - name: Build Android on minimum versions + - name: Build Android on minimum versions working-directory: examples/min-android-sample run: | java --version ./gradlew assembleDebug jvmJar realm-java-compatibiliy: - runs-on: macos-12 + runs-on: macos-13 steps: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -107,7 +107,7 @@ jobs: uses: actions/download-artifact@v4 with: name: all-packages-${{ inputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo # - name: AVD cache # uses: actions/cache@v4 @@ -125,7 +125,7 @@ jobs: # api-level: 33 # target: default # # target: aosp_atd - # arch: x86_64 + # arch: x86_64 # disk-size: 4096M # ram-size: 2048M # heap-size: 1024M @@ -147,7 +147,7 @@ jobs: api-level: ${{ vars.VERSION_ANDROID_EMULATOR_API_LEVEL }} target: default # target: aosp_atd - arch: x86_64 + arch: x86_64 # profile: Nexus 6 disk-size: 4096M ram-size: 2048M @@ -176,11 +176,11 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -191,7 +191,7 @@ jobs: uses: actions/download-artifact@v4 with: name: all-packages-${{ inputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo - name: Build benchmarks working-directory: benchmarks @@ -211,18 +211,18 @@ jobs: - type: gradle75 path: integration-tests/gradle/gradle75-test arguments: integrationTest - runs-on: macos-12 + runs-on: macos-13 steps: - uses: actions/checkout@v4 - name: Checkout code uses: actions/checkout@v4 - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -233,7 +233,7 @@ jobs: uses: actions/download-artifact@v4 with: name: all-packages-${{ inputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo # - name: AVD cache # uses: actions/cache@v4 @@ -251,7 +251,7 @@ jobs: # api-level: 33 # target: default # # target: aosp_atd - # arch: x86_64 + # arch: x86_64 # disk-size: 4096M # ram-size: 2048M # heap-size: 1024M @@ -273,13 +273,13 @@ jobs: api-level: ${{ vars.VERSION_ANDROID_EMULATOR_API_LEVEL }} target: default # target: aosp_atd - arch: x86_64 + arch: x86_64 # profile: Nexus 6 disk-size: 4096M ram-size: 2048M heap-size: 1024M channel: canary - script: cd ${{ matrix.path }} && ./gradlew ${{ matrix.arguments }} --info + script: cd ${{ matrix.path }} && ./gradlew ${{ matrix.arguments }} --info gradle-plugin-integration-java-17: strategy: @@ -292,7 +292,7 @@ jobs: - type: gradle85 path: integration-tests/gradle/gradle85-test arguments: integrationTest - runs-on: macos-12 + runs-on: macos-13 steps: - uses: actions/checkout@v4 @@ -314,7 +314,7 @@ jobs: uses: actions/download-artifact@v4 with: name: all-packages-${{ inputs.version-label }} - path: ./packages/build/m2-buildrepo + path: ./packages/build/m2-buildrepo # - name: AVD cache # uses: actions/cache@v4 @@ -332,7 +332,7 @@ jobs: # api-level: 33 # target: default # # target: aosp_atd - # arch: x86_64 + # arch: x86_64 # disk-size: 4096M # ram-size: 2048M # heap-size: 1024M @@ -354,10 +354,10 @@ jobs: api-level: ${{ vars.VERSION_ANDROID_EMULATOR_API_LEVEL }} target: default # target: aosp_atd - arch: x86_64 + arch: x86_64 # profile: Nexus 6 disk-size: 4096M ram-size: 2048M heap-size: 1024M channel: canary - script: cd ${{ matrix.path }} && ./gradlew ${{ matrix.arguments }} --info + script: cd ${{ matrix.path }} && ./gradlew ${{ matrix.arguments }} --info diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bf138c4591..50fbde862c 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 @@ -45,11 +45,11 @@ jobs: run: |- echo "::add-matcher::.github/problem-matchers/kotlin.json" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -82,7 +82,6 @@ jobs: echo "/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH echo "/home/linuxbrew/.linuxbrew/bin" >> $GITHUB_PATH cd ~ - curl -L ${{ vars.VERSION_SWIG}} > swig.rb && HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=true brew install swig.rb - name: Build JNI Stub working-directory: ./packages @@ -99,9 +98,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' @@ -121,11 +120,11 @@ jobs: path: ./packages/cinterop/build/realmLinuxBuild key: jni-linux-lib-${{ needs.check-cache.outputs.packages-sha }} - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup cmake uses: jwlawson/actions-setup-cmake@v2.0.2 @@ -160,16 +159,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 +184,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 +210,7 @@ jobs: working-directory: packages run: | cd cinterop - mkdir build + mkdir build cd build Remove-Item -Path realmWindowsBuild -Force -Recurse -ErrorAction Ignore mkdir realmWindowsBuild @@ -249,11 +248,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -284,8 +283,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 +305,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 +320,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 +328,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' @@ -345,11 +344,11 @@ jobs: run: |- echo "::add-matcher::.github/problem-matchers/kotlin.json" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -380,10 +379,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 +393,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 +402,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 +414,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' @@ -437,9 +436,7 @@ jobs: distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} # JVM 17 is required for android-actions/setup-android@v3 # 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 }} + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -473,8 +470,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 +507,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 +520,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 @@ -557,9 +554,7 @@ jobs: distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} # JVM 17 is required for android-actions/setup-android@v3 # 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 }} + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -581,7 +576,6 @@ jobs: echo "/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH echo "/home/linuxbrew/.linuxbrew/bin" >> $GITHUB_PATH cd ~ - curl -L ${{ vars.VERSION_SWIG}} > swig.rb && HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=true brew install swig.rb - name: Install JSON parser run: brew install jq @@ -595,7 +589,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 +604,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 +656,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 @@ -694,11 +688,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -714,7 +708,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 +726,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 +749,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: @@ -770,11 +764,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -790,7 +784,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 +802,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 +820,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: @@ -841,11 +835,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -861,7 +855,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 +873,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 +892,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: @@ -913,11 +907,11 @@ jobs: with: submodules: "recursive" - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -933,7 +927,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 +945,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 +964,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 @@ -992,13 +986,13 @@ jobs: 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 + + runs-on: macos-13 # 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') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') steps: @@ -1028,11 +1022,11 @@ jobs: OUTPUT=$(bash cli.sh start | jq -r '.id') echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -1043,19 +1037,19 @@ jobs: 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 m2-buildrepo (Android) 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 m2-buildrepo (JVM) 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 # 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 @@ -1078,7 +1072,7 @@ jobs: disable-animations: true api-level: ${{ vars.VERSION_ANDROID_EMULATOR_API_LEVEL }} # Must be 30 to support aosp_atd target: default - arch: x86_64 + arch: x86_64 disk-size: 4096M ram-size: 2048M heap-size: 1024M @@ -1093,7 +1087,7 @@ jobs: if: always() || failure() with: name: logcat-${{ matrix.type }}-emulator.txt - path: logcat.txt + path: logcat.txt retention-days: 1 - name: Publish Unit Test Results @@ -1117,17 +1111,17 @@ jobs: 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 + # 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') && + false && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') steps: @@ -1163,9 +1157,9 @@ jobs: runs-on: ubuntu-latest needs: [ check-cache, build-android-packages, build-jvm-packages ] if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + 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') @@ -1232,22 +1226,22 @@ jobs: 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 + fi test-macos-packages: timeout-minutes: 60 strategy: fail-fast: false matrix: - os: [macos-12, macos-14] + os: [macos-13, macos-14] type: [base, sync] include: - - os: macos-12 + - os: macos-13 type: base os-id: macos package-prefix: macos-x64 test-title: Unit Test Results - MacOS x64 Base - - os: macos-12 + - os: macos-13 type: sync os-id: macos package-prefix: macos-x64 @@ -1262,15 +1256,15 @@ jobs: 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') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') steps: @@ -1298,11 +1292,11 @@ jobs: OUTPUT=$(bash cli.sh start | jq -r '.id') echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -1313,13 +1307,13 @@ jobs: uses: actions/download-artifact@v4 with: name: packages-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + 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 + 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 @@ -1337,20 +1331,20 @@ jobs: working-directory: packages run: > ./gradlew :test-${{ matrix.type }}:macosTest - -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - -PincludeSdkModules=false + -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 }} + 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 + fail-on-error: true - name: Stopping the BAAS container if: always() && matrix.type == 'sync' @@ -1368,15 +1362,15 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-12, macos-14] + os: [macos-13, macos-14] type: [base, sync] include: - - os: macos-12 + - os: macos-13 type: base package-prefix: x64 test-title: Unit Test Results - iOS x64 Base test-task: iosTest - - os: macos-12 + - os: macos-13 type: sync package-prefix: x64 test-title: Unit Test Results - iOS x64 Sync @@ -1391,15 +1385,15 @@ jobs: 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') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') steps: @@ -1427,11 +1421,11 @@ jobs: OUTPUT=$(bash cli.sh start | jq -r '.id') echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -1442,13 +1436,13 @@ jobs: uses: actions/download-artifact@v4 with: name: packages-ios-${{ matrix.package-prefix }}-${{ needs.check-cache.outputs.version-label }} - path: ./packages/build/m2-buildrepo + 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 + 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 @@ -1467,15 +1461,15 @@ jobs: working-directory: packages run: > ./gradlew :test-${{ matrix.type }}:${{ matrix.test-task }} - -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - -PincludeSdkModules=false + -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 }} + name: ${{ matrix.test-title }} path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml reporter: java-junit list-suites: failed @@ -1497,10 +1491,10 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-12, macos-14, ubuntu-latest, windows-latest] + os: [macos-13, macos-14, ubuntu-latest, windows-latest] type: [base, sync] include: - - os: macos-12 + - os: macos-13 os-id: mac type: base test-title: Unit Test Results - Base JVM MacOS x64 @@ -1516,7 +1510,7 @@ jobs: os-id: win type: base test-title: Unit Test Results - Base JVM Windows - - os: macos-12 + - os: macos-13 os-id: mac type: sync test-title: Unit Test Results - Sync JVM MacOS x64 @@ -1539,9 +1533,9 @@ jobs: runs-on: ${{ matrix.os }} needs: [check-cache, build-jvm-packages, build-kotlin-metadata-package] if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + always() && + !cancelled() && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') steps: @@ -1569,11 +1563,11 @@ jobs: OUTPUT=$(bash cli.sh start | jq -r '.id') echo "baas_container_id=$OUTPUT" >> $GITHUB_OUTPUT - - name: Setup Java 11 + - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: ${{ vars.VERSION_JAVA_DISTRIBUTION }} - java-version: ${{ vars.VERSION_JAVA }} + distribution: 'temurin' + java-version: 17 - name: Setup Gradle and task/dependency caching uses: gradle/actions/setup-gradle@v3 @@ -1584,13 +1578,13 @@ jobs: 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 m2-buildrepo 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 # 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 @@ -1609,15 +1603,15 @@ jobs: run: > ./gradlew :test-${{ matrix.type }}:jvmTest -PsyncUsePlatformNetworking=true - -PsyncTestUrl=${{ steps.baas_cli_poll.outputs.baas_container_hostname }} - -PincludeSdkModules=false + -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 }} + name: ${{ matrix.test-title }} path: ./packages/test-${{ matrix.type }}/build/**/TEST-*.xml reporter: java-junit list-suites: failed @@ -1634,62 +1628,62 @@ jobs: bash cli.sh stop ${{ steps.baas_cli_start.outputs.baas_container_id }} fi - package-all-artifacts: + 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 @@ -1702,32 +1696,32 @@ jobs: uses: ./.github/workflows/include-integration-tests.yml needs: [check-cache, package-all-artifacts] if: | - always() && - !cancelled() && - !contains(needs.*.result, 'failure') && + 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, + 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() && + always() && + !cancelled() && endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && - !contains(needs.*.result, 'failure') && + !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/releases' || github.ref == 'refs/heads/release/k2') @@ -1739,7 +1733,7 @@ jobs: check-release-build: runs-on: ubuntu-latest needs: [check-cache] - outputs: + outputs: is_publish_build: ${{ steps.check_release.outputs.is_publish_build }} steps: @@ -1765,7 +1759,7 @@ jobs: echo "is_publish_build=true" >> $GITHUB_OUTPUT fi fi - + - name: Print is release build run: | @@ -1773,24 +1767,24 @@ 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, package-all-artifacts ] if: | - always() && - !cancelled() && + always() && + !cancelled() && !endsWith(needs.check-cache.outputs.version-label, '-SNAPSHOT') && - !contains(needs.*.result, 'failure') && + !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') diff --git a/buildSrc/src/main/kotlin/Config.kt b/buildSrc/src/main/kotlin/Config.kt index 9ed4352d36..e14d7dc67b 100644 --- a/buildSrc/src/main/kotlin/Config.kt +++ b/buildSrc/src/main/kotlin/Config.kt @@ -62,7 +62,7 @@ val HOST_OS: OperatingSystem = findHostOs() object Realm { val ciBuild = (System.getenv("CI") != null) - const val version = "2.3.0" + const val version = "2.4.0-SNAPSHOT" const val group = "io.realm.kotlin" const val projectUrl = "https://realm.io" const val pluginPortalId = "io.realm.kotlin" @@ -98,10 +98,10 @@ object Realm { object Versions { object Android { const val minSdk = 16 - const val targetSdk = 33 - const val compileSdkVersion = 33 - const val buildToolsVersion = "33.0.0" - const val buildTools = "7.3.1" // https://maven.google.com/web/index.html?q=gradle#com.android.tools.build:gradle + const val targetSdk = 35 + const val compileSdkVersion = 35 + const val buildToolsVersion = "35.0.0" + const val buildTools = "8.7.3" // https://maven.google.com/web/index.html?q=gradle#com.android.tools.build:gradle const val ndkVersion = "23.2.8568313" const val r8 = "8.3.37" // See https://developer.android.com/build/kotlin-support } @@ -123,10 +123,10 @@ object Versions { const val junit = "4.13.2" // https://mvnrepository.com/artifact/junit/junit const val kbson = "0.4.0" // https://github.com/mongodb/kbson // When updating the Kotlin version, also remember to update /examples/min-android-sample/build.gradle.kts - const val kotlin = "2.0.20" // https://github.com/JetBrains/kotlin and https://kotlinlang.org/docs/releases.html#release-details - const val kotlinJvmTarget = "1.8" // Which JVM bytecode version is kotlin compiled to. - const val latestKotlin = "2.0.20" // https://kotlinlang.org/docs/eap.html#build-details - const val kotlinCompileTesting = "0.5.1" // https://github.com/zacsweers/kotlin-compile-testing + const val kotlin = "2.1.0" // https://github.com/JetBrains/kotlin and https://kotlinlang.org/docs/releases.html#release-details + const val kotlinJvmTarget = "11" // Which JVM bytecode version is kotlin compiled to. + const val latestKotlin = "2.1.0" // https://kotlinlang.org/docs/eap.html#build-details + const val kotlinCompileTesting = "0.7.0" // https://github.com/zacsweers/kotlin-compile-testing const val ktlint = "0.45.2" // https://github.com/pinterest/ktlint const val ktor = "2.3.12" // https://github.com/ktorio/ktor const val multidex = "2.0.1" // https://developer.android.com/jetpack/androidx/releases/multidex @@ -134,10 +134,10 @@ object Versions { const val okio = "3.9.0" // https://square.github.io/okio/#releases const val relinker = "1.4.5" // https://github.com/KeepSafe/ReLinker const val serialization = "1.7.1" // https://kotlinlang.org/docs/releases.html#release-details - const val shadowJar = "6.1.0" // https://mvnrepository.com/artifact/com.github.johnrengelman.shadow/com.github.johnrengelman.shadow.gradle.plugin?repo=gradle-plugins + const val shadowJar = "8.1.0" // https://mvnrepository.com/artifact/com.github.johnrengelman.shadow/com.github.johnrengelman.shadow.gradle.plugin?repo=gradle-plugins const val snakeYaml = "1.33" // https://github.com/snakeyaml/snakeyaml - val sourceCompatibilityVersion = JavaVersion.VERSION_1_8 // Language level of any Java source code. - val targetCompatibilityVersion = JavaVersion.VERSION_1_8 // Version of generated JVM bytecode from Java files. + val sourceCompatibilityVersion = JavaVersion.VERSION_11 // Language level of any Java source code. + val targetCompatibilityVersion = JavaVersion.VERSION_11 // Version of generated JVM bytecode from Java files. } // Could be actual Dependency objects diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f42e62f372..8357d84852 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/cinterop/build.gradle.kts b/packages/cinterop/build.gradle.kts index 32a61dd7ca..52b089a962 100644 --- a/packages/cinterop/build.gradle.kts +++ b/packages/cinterop/build.gradle.kts @@ -714,6 +714,9 @@ afterEvaluate { tasks.named("generateJsonModelRelease") { inputs.files(tasks.getByPath(":jni-swig-stub:realmWrapperJvm").outputs) } + tasks.named("buildCMakeRelWithDebInfo") { + inputs.files(tasks.getByPath(":jni-swig-stub:realmWrapperJvm").outputs) + } } tasks.named("jvmMainClasses") { @@ -817,4 +820,29 @@ abstract class CmakeVersionProvider : ValueSource.isBaseRealmObject: Boolean ) } // After SUPERTYPES stage - is FirResolvedTypeRef -> typeRef.type.classId in realmObjectClassIds + is FirResolvedTypeRef -> typeRef.coneType.classId in realmObjectClassIds else -> false } } @@ -424,7 +425,7 @@ data class SchemaProperty( companion object { fun getPersistedName(declaration: IrProperty): String { @Suppress("UNCHECKED_CAST") - return (declaration.getAnnotation(PERSISTED_NAME_ANNOTATION.asSingleFqName()).getValueArgument(0)!! as IrConstImpl).value + return (declaration.getAnnotation(PERSISTED_NAME_ANNOTATION.asSingleFqName()).getValueArgument(0)!! as IrConstImpl).value?.toString() ?: "" } } } @@ -446,7 +447,6 @@ internal fun buildOf( type = containerType.typeWith(elementType), symbol = function, typeArgumentsCount = 1, - valueArgumentsCount = 1, origin = null, superQualifierSymbol = null ).apply { @@ -595,7 +595,6 @@ fun IrBlockBuilder.createSafeCallConstruction( val condition = IrCallImpl( startOffset, endOffset, context.irBuiltIns.booleanType, context.irBuiltIns.eqeqSymbol, - valueArgumentsCount = 2, typeArgumentsCount = 0, origin = IrStatementOrigin.EQEQ ).apply { @@ -684,7 +683,7 @@ fun getLinkingObjectPropertyName(backingField: IrField): String { fun getSchemaClassName(clazz: IrClass): String { return if (clazz.hasAnnotation(PERSISTED_NAME_ANNOTATION)) { @Suppress("UNCHECKED_CAST") - return (clazz.getAnnotation(PERSISTED_NAME_ANNOTATION.asSingleFqName()).getValueArgument(0)!! as IrConstImpl).value + return (clazz.getAnnotation(PERSISTED_NAME_ANNOTATION.asSingleFqName()).getValueArgument(0)!! as IrConstImpl).value?.toString() ?: "" } else { clazz.name.identifier } diff --git a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelDefaultMethodGeneration.kt b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelDefaultMethodGeneration.kt index 71b741a572..a431bc8151 100644 --- a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelDefaultMethodGeneration.kt +++ b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelDefaultMethodGeneration.kt @@ -75,8 +75,7 @@ class RealmModelDefaultMethodGeneration(private val pluginContext: IrPluginConte endOffset = endOffset, type = pluginContext.irBuiltIns.booleanType, symbol = realmEquals.symbol, - typeArgumentsCount = 0, - valueArgumentsCount = 2 + typeArgumentsCount = 0 ).apply { dispatchReceiver = irGetObject(realmObjectHelper.symbol) putValueArgument(0, irGet(function.dispatchReceiverParameter!!.type, function.dispatchReceiverParameter!!.symbol)) @@ -95,8 +94,7 @@ class RealmModelDefaultMethodGeneration(private val pluginContext: IrPluginConte endOffset = endOffset, type = pluginContext.irBuiltIns.intType, symbol = realmHashCode.symbol, - typeArgumentsCount = 0, - valueArgumentsCount = 1 + typeArgumentsCount = 0 ).apply { dispatchReceiver = irGetObject(realmObjectHelper.symbol) putValueArgument(0, irGet(function.dispatchReceiverParameter!!.type, function.dispatchReceiverParameter!!.symbol)) @@ -114,8 +112,7 @@ class RealmModelDefaultMethodGeneration(private val pluginContext: IrPluginConte endOffset = endOffset, type = pluginContext.irBuiltIns.stringType, symbol = realmToString.symbol, - typeArgumentsCount = 0, - valueArgumentsCount = 1 + typeArgumentsCount = 0 ).apply { dispatchReceiver = irGetObject(realmObjectHelper.symbol) putValueArgument(0, irGet(function.dispatchReceiverParameter!!.type, function.dispatchReceiverParameter!!.symbol)) diff --git a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelLoweringExtension.kt b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelLoweringExtension.kt index 91e726f159..f7280f7e7c 100644 --- a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelLoweringExtension.kt +++ b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelLoweringExtension.kt @@ -32,10 +32,13 @@ import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl +import org.jetbrains.kotlin.ir.expressions.impl.fromSymbolOwner import org.jetbrains.kotlin.ir.symbols.IrClassSymbol +import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.types.starProjectedType +import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.companionObject import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.isAnonymousObject @@ -118,11 +121,15 @@ private class RealmModelLowering(private val pluginContext: IrPluginContext) : C // able to resolve the companion object during runtime due to absence of // kotlin.reflect.full.companionObjectInstance if (pluginContext.platform.isNative()) { + val type = modelObjectAnnotationClass.defaultType as? IrType ?: throw IllegalStateException("defaultType is not an IrType") + val primaryConstructor = modelObjectAnnotationClass.primaryConstructor ?: throw IllegalStateException("primaryConstructor is null") + val constructorSymbol = primaryConstructor.symbol as? IrConstructorSymbol ?: throw IllegalStateException("symbol is not an IrConstructorSymbol") + val modelObjectAnnotation = IrConstructorCallImpl.fromSymbolOwner( startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, - type = modelObjectAnnotationClass.defaultType, - constructorSymbol = modelObjectAnnotationClass.primaryConstructor!!.symbol + type = type, + constructorSymbol = constructorSymbol ).apply { putValueArgument( 0, diff --git a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelSyntheticPropertiesGeneration.kt b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelSyntheticPropertiesGeneration.kt index 0ce7399497..3cec5bd921 100644 --- a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelSyntheticPropertiesGeneration.kt +++ b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/RealmModelSyntheticPropertiesGeneration.kt @@ -93,6 +93,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetEnumValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrPropertyReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI +import org.jetbrains.kotlin.ir.expressions.impl.fromSymbolOwner import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classFqName @@ -115,7 +116,7 @@ import org.jetbrains.kotlin.ir.util.isVararg import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly - +import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol /** * Helper to assisting in modifying classes marked with the [RealmObject] interface according to our * needs: @@ -303,7 +304,6 @@ class RealmModelSyntheticPropertiesGeneration(private val pluginContext: IrPlugi type = companionFieldsType, symbol = mapOf, typeArgumentsCount = 2, - valueArgumentsCount = 1, origin = null, superQualifierSymbol = null ).apply { @@ -340,8 +340,8 @@ class RealmModelSyntheticPropertiesGeneration(private val pluginContext: IrPlugi IrConstructorCallImpl.fromSymbolOwner( startOffset = startOffset, endOffset = endOffset, - type = elementType, - constructorSymbol = pairCtor + type = elementType as IrType, + constructorSymbol = pairCtor as IrConstructorSymbol ).apply { putTypeArgument(0, pluginContext.irBuiltIns.stringType) putTypeArgument(1, elementType) @@ -359,8 +359,8 @@ class RealmModelSyntheticPropertiesGeneration(private val pluginContext: IrPlugi IrConstructorCallImpl.fromSymbolOwner( startOffset = startOffset, endOffset = endOffset, - type = elementType, - constructorSymbol = pairCtor + type = elementType as IrType, + constructorSymbol = pairCtor as IrConstructorSymbol ).apply { putTypeArgument( 0, @@ -506,8 +506,7 @@ class RealmModelSyntheticPropertiesGeneration(private val pluginContext: IrPlugi endOffset, type = classInfoClass.defaultType, symbol = classInfoCreateMethod.symbol, - typeArgumentsCount = 0, - valueArgumentsCount = 5 + typeArgumentsCount = 0 ).apply { dispatchReceiver = irGetObject(classInfoClass.companionObject()!!.symbol) var arg = 0 @@ -714,7 +713,7 @@ class RealmModelSyntheticPropertiesGeneration(private val pluginContext: IrPlugi } ?: irNull(pluginContext.irBuiltIns.kClassClass.typeWith(typedRealmObjectInterface.defaultType).makeNullable()) // Define the link target. Empty string if there is none. - val linkPropertyName: IrConst = if (type == linkingObjectType) { + val linkPropertyName: IrConst = if (type == linkingObjectType) { val targetPropertyName = getLinkingObjectPropertyName(backingField) irString(targetPropertyName) } else { @@ -726,8 +725,7 @@ class RealmModelSyntheticPropertiesGeneration(private val pluginContext: IrPlugi endOffset, type = propertyClass.defaultType, symbol = propertyCreateMethod, - typeArgumentsCount = 0, - valueArgumentsCount = 10 + typeArgumentsCount = 0 ).apply { var arg = 0 // Persisted name diff --git a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/SyncLoweringExtension.kt b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/SyncLoweringExtension.kt index d5a11767f2..35b1c3dd8e 100644 --- a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/SyncLoweringExtension.kt +++ b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/SyncLoweringExtension.kt @@ -140,7 +140,6 @@ private class SyncLowering(private val pluginContext: IrPluginContext, private v type = expression.type, symbol = target.symbol, typeArgumentsCount = 0, - valueArgumentsCount = target.valueParameters.size, origin = null, superQualifierSymbol = null ).apply { diff --git a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/CompanionExtension.kt b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/CompanionExtension.kt index 0ec41e8eb7..0e5b672285 100644 --- a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/CompanionExtension.kt +++ b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/CompanionExtension.kt @@ -66,7 +66,7 @@ class CompanionExtension(session: FirSession) : FirDeclarationGenerationExtensio classSymbol: FirClassSymbol<*>, context: MemberGenerationContext ): Set { - if (classSymbol.isCompanion && (classSymbol.getContainingClassSymbol(session) as? FirClassSymbol<*>)?.isBaseRealmObject == true) { + if (classSymbol.isCompanion && (classSymbol.getContainingClassSymbol() as? FirClassSymbol<*>)?.isBaseRealmObject == true) { return setOf( Names.REALM_OBJECT_COMPANION_SCHEMA_METHOD, Names.REALM_OBJECT_COMPANION_NEW_INSTANCE_METHOD, @@ -88,7 +88,7 @@ class CompanionExtension(session: FirSession) : FirDeclarationGenerationExtensio owner, RealmPluginGeneratorKey, callableId.callableName, - session.builtinTypes.anyType.type, + session.builtinTypes.anyType.coneType, ).symbol ) @@ -98,7 +98,7 @@ class CompanionExtension(session: FirSession) : FirDeclarationGenerationExtensio owner, RealmPluginGeneratorKey, callableId.callableName, - session.builtinTypes.anyType.type + session.builtinTypes.anyType.coneType ).symbol ) diff --git a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/ObjectExtension.kt b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/ObjectExtension.kt index 6869c6243f..358b8bcfda 100644 --- a/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/ObjectExtension.kt +++ b/packages/plugin-compiler/src/main/kotlin/io/realm/kotlin/compiler/fir/model/ObjectExtension.kt @@ -67,7 +67,7 @@ class ObjectExtension(session: FirSession) : FirDeclarationGenerationExtension(s owner, RealmPluginGeneratorKey, callableId.callableName, - session.builtinTypes.stringType.type, + session.builtinTypes.stringType.coneType, ) { modality = Modality.OPEN }.symbol @@ -78,10 +78,10 @@ class ObjectExtension(session: FirSession) : FirDeclarationGenerationExtension(s owner, RealmPluginGeneratorKey, callableId.callableName, - session.builtinTypes.booleanType.type, + session.builtinTypes.booleanType.coneType, ) { modality = Modality.OPEN - valueParameter(Name.identifier("other"), session.builtinTypes.nullableAnyType.type) + valueParameter(Name.identifier("other"), session.builtinTypes.nullableAnyType.coneType) }.symbol ) Names.REALM_OBJECT_HASH_CODE -> @@ -90,7 +90,7 @@ class ObjectExtension(session: FirSession) : FirDeclarationGenerationExtension(s owner, RealmPluginGeneratorKey, callableId.callableName, - session.builtinTypes.intType.type, + session.builtinTypes.intType.coneType, ) { modality = Modality.OPEN }.symbol diff --git a/packages/test-base/build.gradle.kts b/packages/test-base/build.gradle.kts index 3fc4722ce4..d5216fda65 100644 --- a/packages/test-base/build.gradle.kts +++ b/packages/test-base/build.gradle.kts @@ -253,7 +253,7 @@ kotlin { } targets.filterIsInstance().forEach { simulatorTargets -> simulatorTargets.testRuns.forEach { testRun -> - testRun.deviceId = project.findProperty("iosDevice")?.toString() ?: "iPhone 14" + testRun.deviceId = project.findProperty("iosDevice")?.toString() ?: "iPhone 15" } } sourceSets { diff --git a/packages/test-base/src/jvmMain/kotlin/io/realm/kotlin/test/util/Compiler.kt b/packages/test-base/src/jvmMain/kotlin/io/realm/kotlin/test/util/Compiler.kt index 05ca42e215..72521d93fa 100644 --- a/packages/test-base/src/jvmMain/kotlin/io/realm/kotlin/test/util/Compiler.kt +++ b/packages/test-base/src/jvmMain/kotlin/io/realm/kotlin/test/util/Compiler.kt @@ -30,6 +30,7 @@ object Compiler { plugins: List = listOf(Registrar()) ): JvmCompilationResult = KotlinCompilation().apply { + jvmTarget = "11" sources = listOf(source) messageOutputStream = System.out @Suppress("deprecation") diff --git a/packages/test-sync/build.gradle.kts b/packages/test-sync/build.gradle.kts index d8ad09ebe1..ef9deaddf3 100644 --- a/packages/test-sync/build.gradle.kts +++ b/packages/test-sync/build.gradle.kts @@ -263,7 +263,7 @@ kotlin { } targets.filterIsInstance().forEach { simulatorTargets -> simulatorTargets.testRuns.forEach { testRun -> - testRun.deviceId = project.findProperty("iosDevice")?.toString() ?: "iPhone 14" + testRun.deviceId = project.findProperty("iosDevice")?.toString() ?: "iPhone 15" } } sourceSets {