diff --git a/.github/pkl-workflows/helpers/Actions.pkl b/.github/pkl-workflows/helpers/Actions.pkl index c7d54b3d54..7a3007e578 100644 --- a/.github/pkl-workflows/helpers/Actions.pkl +++ b/.github/pkl-workflows/helpers/Actions.pkl @@ -22,3 +22,4 @@ const mergePR = "juliangruber/merge-pull-request-action@9234b8714dda9a08f3d1df5b const createPR = "peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e" // 6.0.5 const publishGithubRelease = "ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5" // 1.14.0 const releaseToSlack = "realm/ci-actions/release-to-slack@6418e15ed9bbdb19b7d456a347e5623779f95cdf" +const setupCmake = "jwlawson/actions-setup-cmake@802fa1a2c4e212495c05bf94dba2704a92a472be" // 2.0.2 diff --git a/.github/pkl-workflows/helpers/Package.pkl b/.github/pkl-workflows/helpers/Package.pkl index 076ec341bd..782e104448 100644 --- a/.github/pkl-workflows/helpers/Package.pkl +++ b/.github/pkl-workflows/helpers/Package.pkl @@ -116,4 +116,27 @@ local const function buildDocs(condition: String): Listing = new { } run = "C:\\docfx\\docfx Docs/docfx.json" } + new { + name = "Update Improve this doc links" + `if` = condition + run = """ + Get-ChildItem Docs/_site -Filter *.html -Recurse -File | + ForEach-Object { + $content = ($_ | Get-Content -Raw) + $content = $content -replace "/Docs/apispec/new\\?filename", "/Docs/apispec?filename" + Set-Content $_.FullName $content + } + """ + shell = "pwsh" + } + new { + name = "Archive docs" + `if` = condition + run = """ + Compress-Archive -Path Docs/_site -DestinationPath "Realm/packages/Docs.zip" + """ + } + (Steps.uploadArtifacts("Docs.zip", "Realm/packages/Docs.zip")) { + `if` = condition + } } \ No newline at end of file diff --git a/.github/pkl-workflows/helpers/Steps.pkl b/.github/pkl-workflows/helpers/Steps.pkl index 624381be49..2abac1bf9f 100644 --- a/.github/pkl-workflows/helpers/Steps.pkl +++ b/.github/pkl-workflows/helpers/Steps.pkl @@ -60,6 +60,14 @@ const function setupXcode(version: String): gha.Step = new { } } +const function setupCmake(version: String): gha.Step = new { + name = "Setup Cmake" + uses = Actions.setupCmake + with { + ["cmake-version"] = version + } +} + const function setupMSVC(edition: String): gha.Step = new { name = "Setup MSVC" run = "Start-Process \"C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vs_installer.exe\" -ArgumentList 'modify --installPath \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\" --quiet --add Microsoft.VisualStudio.Component.VC.14.35.17.5.\(edition)' -Wait -PassThru" diff --git a/.github/pkl-workflows/wrappers.pkl b/.github/pkl-workflows/wrappers.pkl index d060332803..eba15a2880 100644 --- a/.github/pkl-workflows/wrappers.pkl +++ b/.github/pkl-workflows/wrappers.pkl @@ -52,6 +52,9 @@ jobs { } |> wrappersJob(new JobConfig { cmd = "./wrappers/build-macos.sh" platform = "macos" + intermediateSteps { + Steps.setupCmake("3.29.0") + } }) ["catalyst"] = new Job { `runs-on` = "macos-12" @@ -59,6 +62,9 @@ jobs { } |> wrappersJob(new JobConfig { cmd = "pwsh ./wrappers/build-apple-platform.ps1 Catalyst" platform = "catalyst" + intermediateSteps { + Steps.setupCmake("3.29.0") + } }) ["apple-platform"] = new MatrixJob { strategy { @@ -75,6 +81,7 @@ jobs { platform = "${{ matrix.platform }}-${{ matrix.target }}" intermediateSteps { Steps.setupXcode("14") + Steps.setupCmake("3.29.0") } ifCondition = "\(Common.applePlatformTargets((platform, target) -> "needs.\(job_CheckCache).outputs.wrappers-\(platform)-\(target) != 'true'").join(" || "))" }) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 75accee0d5..92b2880a4c 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -274,6 +274,27 @@ jobs: env: DOCFX_SOURCE_BRANCH_NAME: ${{ github.head_ref }} run: C:\docfx\docfx Docs/docfx.json + - name: Update Improve this doc links + if: contains(github.head_ref, 'release') + run: |- + Get-ChildItem Docs/_site -Filter *.html -Recurse -File | + ForEach-Object { + $content = ($_ | Get-Content -Raw) + $content = $content -replace "/Docs/apispec/new\?filename", "/Docs/apispec?filename" + Set-Content $_.FullName $content + } + shell: pwsh + - name: Archive docs + if: contains(github.head_ref, 'release') + run: Compress-Archive -Path Docs/_site -DestinationPath "Realm/packages/Docs.zip" + - name: Store artifacts for Docs.zip + if: contains(github.head_ref, 'release') + uses: actions/upload-artifact@v4 + with: + name: Docs.zip + path: Realm/packages/Docs.zip + retention-days: ${{ github.event_name != 'pull_request' && 30 || 1 }} + if-no-files-found: error build-unity: name: Package Unity needs: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 103f093b65..755fcbe25f 100755 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -274,6 +274,27 @@ jobs: env: DOCFX_SOURCE_BRANCH_NAME: ${{ github.head_ref }} run: C:\docfx\docfx Docs/docfx.json + - name: Update Improve this doc links + if: contains(github.head_ref, 'release') + run: |- + Get-ChildItem Docs/_site -Filter *.html -Recurse -File | + ForEach-Object { + $content = ($_ | Get-Content -Raw) + $content = $content -replace "/Docs/apispec/new\?filename", "/Docs/apispec?filename" + Set-Content $_.FullName $content + } + shell: pwsh + - name: Archive docs + if: contains(github.head_ref, 'release') + run: Compress-Archive -Path Docs/_site -DestinationPath "Realm/packages/Docs.zip" + - name: Store artifacts for Docs.zip + if: contains(github.head_ref, 'release') + uses: actions/upload-artifact@v4 + with: + name: Docs.zip + path: Realm/packages/Docs.zip + retention-days: ${{ github.event_name != 'pull_request' && 30 || 1 }} + if-no-files-found: error build-unity: name: Package Unity needs: diff --git a/.github/workflows/wrappers.yml b/.github/workflows/wrappers.yml index a570993417..3274f7d0c1 100755 --- a/.github/workflows/wrappers.yml +++ b/.github/workflows/wrappers.yml @@ -405,6 +405,11 @@ jobs: with: path: ./wrappers/build/** key: wrappers-macos-Release-${{hashFiles('./wrappers/**')}} + - name: Setup Cmake + if: steps.check-cache.outputs.cache-hit != 'true' + uses: jwlawson/actions-setup-cmake@802fa1a2c4e212495c05bf94dba2704a92a472be + with: + cmake-version: 3.29.0 - name: Build Wrappers if: steps.check-cache.outputs.cache-hit != 'true' run: ./wrappers/build-macos.sh --configuration=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION='ON' @@ -434,6 +439,11 @@ jobs: with: path: ./wrappers/build/** key: wrappers-catalyst-Release-${{hashFiles('./wrappers/**')}} + - name: Setup Cmake + if: steps.check-cache.outputs.cache-hit != 'true' + uses: jwlawson/actions-setup-cmake@802fa1a2c4e212495c05bf94dba2704a92a472be + with: + cmake-version: 3.29.0 - name: Build Wrappers if: steps.check-cache.outputs.cache-hit != 'true' run: pwsh ./wrappers/build-apple-platform.ps1 Catalyst -Configuration Release -EnableLTO @@ -468,6 +478,11 @@ jobs: uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd with: xcode-version: '14' + - name: Setup Cmake + if: steps.check-cache.outputs.cache-hit != 'true' + uses: jwlawson/actions-setup-cmake@802fa1a2c4e212495c05bf94dba2704a92a472be + with: + cmake-version: 3.29.0 - name: Build Wrappers if: steps.check-cache.outputs.cache-hit != 'true' run: 'pwsh ./wrappers/build-apple-platform.ps1 ${{ matrix.platform }} -Targets ${{ matrix.target }} -Configuration Release ' diff --git a/CHANGELOG.md b/CHANGELOG.md index d43113c056..88c2756bd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## vNext (TBD) +## 12.3.0 (2024-07-17) ### Deprecations * The `Logger` has been deprecated in favor of `RealmLogger`, which `Logger` currently derives from. (PR [#3634](https://github.com/realm/realm-dotnet/pull/3634)) @@ -24,6 +24,8 @@ ```csharp RealmLogger.Default.Log(LogLevel.Warn, LogCategory.Realm, "A warning message"); ``` +* On Windows devices Device Sync will additionally look up SSL certificates in the Windows Trusted Root Certification Authorities certificate store when establishing a connection. (Core 14.11.0) +* Role and permissions changes no longer require a client reset to update the local realm. (Core 14.11.0) ### Fixed * A `ForCurrentlyOutstandingWork` progress notifier would not immediately call its callback after registration. Instead you would have to wait for some data to be received to get your first update - if you were already caught up when you registered the notifier you could end up waiting a long time for the server to deliver a download that would call/expire your notifier. (Core 14.8.0) @@ -41,6 +43,11 @@ * Fixed removing backlinks from the wrong objects if the link came from a nested list, nested dictionary, top-level dictionary, or list of `RealmValue`, and the source table had more than 256 objects. This could manifest as `array_backlink.cpp:112: Assertion failed: int64_t(value >> 1) == key.value` when removing an object. (Core 14.10.3) * Fixed the collapse/rejoin of clusters which contained nested collections with links. This could manifest as `array.cpp:319: Array::move() Assertion failed: begin <= end [2, 1]` when removing an object. (Core 14.10.3) * `Session.WaitForUpload()` was inconsistent in how it handled commits which did not produce any changesets to upload. Previously it would sometimes complete immediately if all commits waiting to be uploaded were empty, and at other times it would wait for a server roundtrip. It will now always complete immediately. (Core 14.10.3) +* When a property is remapped, calling `.Filter("... SORT/DISTINCT(mapped-to-name)")` with the internal name could throw an error like `Cannot sort on key path 'NAME': property 'PersonObject.NAME' does not exist`. (Core 14.10.4) +* Sync client can crash if a session is resumed while the session is being suspended. (Core 14.11.0) +* If a sync session is interrupted by a disconnect or restart while downloading a bootstrap, stale data from the previous bootstrap may be included when the session reconnects and downloads the bootstrap. This can lead to objects stored in the database that do not match the actual state of the server and potentially leading to compensating writes. (Core 14.11.0) +* Fixed unnecessary server roundtrips when there is no download to acknowledge. (Core 14.11.0) + ### Compatibility * Realm Studio: 15.0.0 or later. diff --git a/Realm/AssemblyInfo.props b/Realm/AssemblyInfo.props index ea4e134d10..86a77393ab 100644 --- a/Realm/AssemblyInfo.props +++ b/Realm/AssemblyInfo.props @@ -1,7 +1,7 @@ Realm .NET - 12.2.0 + 12.3.0 Realm is a mobile database: a replacement for SQLite Realm Inc. Copyright © $([System.DateTime]::Now.ToString(yyyy)) Realm Inc. diff --git a/Realm/Realm.Unity/package.json b/Realm/Realm.Unity/package.json index c1a720c168..f198efc2f9 100644 --- a/Realm/Realm.Unity/package.json +++ b/Realm/Realm.Unity/package.json @@ -1,6 +1,6 @@ { "name": "io.realm.unity", - "version": "12.2.0", + "version": "12.3.0", "displayName": "Realm", "description": "Realm is an embedded, object-oriented database that lets you build real-time, always-on applications. With Realm, data is directly exposed as objects and queryable by code, removing the need for ORM's riddled with performance & maintenance issues. Additionally, objects and collections in Realm are always live, meaning that they always reflect the latest data stored in the database. You can subscribe to changes, letting you keep your UI consistently up to date.\nThe .NET Realm SDK also provide access to Atlas App Services, a secure backend that can sync data between devices, authenticate and manage users, and run serverless JavaScript functions.", "unity": "2021.1", diff --git a/wrappers/realm-core b/wrappers/realm-core index cbc571b16c..60867846a0 160000 --- a/wrappers/realm-core +++ b/wrappers/realm-core @@ -1 +1 @@ -Subproject commit cbc571b16c166a9f2859c2941a73fe9f061a64cf +Subproject commit 60867846a0aca0c7da5e482282b293236f730216