Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
1e46683
feat: add compatibility testing infrastructure
adamnova Oct 3, 2025
609b4e6
feat: add compatibility test suite with cross-version testing
adamnova Oct 3, 2025
e99a73c
feat: add Azure DevOps pipeline for compatibility testing
adamnova Oct 3, 2025
2bd75b7
feat: add compatibility testing tools and scripts
adamnova Oct 3, 2025
ac5e7d9
docs: add comprehensive compatibility testing documentation
adamnova Oct 3, 2025
4213f34
Refactor compatibility tests and enhance version matrix
adamnova Oct 6, 2025
16c1784
Merge branch 'Azure:master' into feature/encryption-custom-compatibil…
adamnova Oct 6, 2025
66e7ca0
feat: Add GitHub Actions workflow and NuGet cache hardening for Encry…
adamnova Oct 6, 2025
f306182
docs: Clean up planning and implementation markdown files
adamnova Oct 6, 2025
14a5f34
Merge branch 'feature/encryption-custom-compatibility-testing' of htt…
adamnova Oct 6, 2025
88c357a
feat: Add dynamic version matrix configuration to CI pipeline
adamnova Oct 6, 2025
aae4741
fix: Create artifacts/local-packages directory in CI to prevent NuGet…
adamnova Oct 6, 2025
6e444ac
Streamline compatibility workflow and add current source testing
adamnova Oct 6, 2025
f35d160
Fix: Create artifacts/local-packages folder before dotnet pack
adamnova Oct 6, 2025
ee32e93
Fix: Create and populate artifacts/local-packages for all test jobs
adamnova Oct 6, 2025
4275add
Simplify workflow to test version pairs via testconfig.json
adamnova Oct 6, 2025
e0480eb
Fix testconfig.json to use only published versions
adamnova Oct 6, 2025
90741b1
Fix VersionLoader to check local packages for all versions
adamnova Oct 6, 2025
ea4f0dc
Fix merge conflict in workflow file
adamnova Oct 6, 2025
8176a83
Add diagnostic logging to VersionLoader for debugging
adamnova Oct 6, 2025
f661018
Fix local packages path calculation - need 6 levels up from bin/Relea…
adamnova Oct 6, 2025
aa11dc8
Make repository root detection resilient - crawl up looking for .git …
adamnova Oct 6, 2025
ee21fa4
Add comprehensive test result publishing with GitHub UI integration
adamnova Oct 6, 2025
ced79b4
Add comprehensive binary validation test to verify distinct package v…
adamnova Oct 6, 2025
5e5b079
Add comprehensive documentation for binary validation test
adamnova Oct 6, 2025
e885598
Add API compatibility reporting using Microsoft.DotNet.ApiCompat.Tool
adamnova Oct 6, 2025
5e18a6c
Convert compatibility tests to dynamic matrix strategy
adamnova Oct 6, 2025
3788f86
Fix matrix configuration to use parameters instead of variables
adamnova Oct 6, 2025
20ed016
Refactor to always use matrix strategy with conditional version sets
adamnova Oct 6, 2025
c34cf7d
Add matrix strategy to GitHub Actions compatibility workflow
adamnova Oct 6, 2025
8dbaf23
Simplify matrix to test each version pair once (bidirectional)
adamnova Oct 6, 2025
54adbbf
Add build source matrix to test against multiple forks/branches
adamnova Oct 7, 2025
dbbef6b
Add 5 PRs to compatibility testing matrix for scheduled/manual runs
adamnova Oct 7, 2025
cc16ff0
Fix build matrix condition to properly detect workflow_dispatch trigger
adamnova Oct 7, 2025
52d6a89
Add comment with instructions for manual workflow runs
adamnova Oct 7, 2025
06d8430
Enable full PR matrix for all automatic workflow runs
adamnova Oct 7, 2025
d85e45b
Fix matrix structure for build-packages job
adamnova Oct 7, 2025
f1642f5
Fix JSON formatting for build matrix output
adamnova Oct 7, 2025
2981187
Add error handling for PR build failures in compatibility tests
adamnova Oct 7, 2025
3fa3be8
Make build failures fail the job but continue workflow
adamnova Oct 7, 2025
bd93825
Add clickable links to PRs and sources in test summaries
adamnova Oct 7, 2025
4499649
Add comprehensive validation documentation and System.Text.Json compa…
adamnova Oct 7, 2025
bfda3db
Add compatibility testing support for System.Text.Json processor switch
adamnova Oct 7, 2025
2dc3a47
Owner not found: Fixes substatus code 1003 for item operations when c…
Copilot Nov 19, 2025
7b065b1
Improve encryption custom compatibility tooling
adamnova Nov 19, 2025
cde1346
[Internal] Tests: Adds setup emulator step in thin client tests (#5504)
yash2710 Nov 19, 2025
f8e2fe8
[Internal] Query: Adds missing function identifiers part 2 (#5503)
leminh98 Nov 19, 2025
d139361
Fix GH Action output format for test matrix
adamnova Nov 20, 2025
3962e31
Use multiline output format for GH Action matrix variables
adamnova Nov 24, 2025
4402de8
[FaultInjection] Unauthorized Errors: Adds Unauthorized status codes …
NaluTripician Nov 24, 2025
92ad3c6
Semantic Rerank: Adds Semantic Rerank API (#5445)
NaluTripician Nov 24, 2025
44bd152
Skip redundant current-vs-current compatibility test
adamnova Nov 25, 2025
08aeb44
Add edge case and negative tests for encryption compatibility
adamnova Nov 25, 2025
87f4b74
Consolidate duplicate JSON processor test files
adamnova Nov 25, 2025
a4cc82f
Polish compatibility tests: add test collection, traits, and cleanup
adamnova Nov 25, 2025
3bfdc8e
Merge branch 'master' into feature/encryption-custom-compatibility-te…
adamnova Dec 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
430 changes: 430 additions & 0 deletions .github/workflows/encryption-custom-compatibility.yml

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
<EncryptionPreviewVersion>2.1.0</EncryptionPreviewVersion>
<EncryptionPreviewSuffixVersion>preview5</EncryptionPreviewSuffixVersion>
<CustomEncryptionVersion>1.0.0-preview08</CustomEncryptionVersion>
<HybridRowVersion>1.1.0-preview3</HybridRowVersion>
<HybridRowVersion>1.0.0-preview3</HybridRowVersion>
<LangVersion>10.0</LangVersion>
<AboveDirBuildProps>$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))</AboveDirBuildProps>
<DefineConstants Condition=" '$(IsNightly)' == 'true' or '$(IsPreview)' == 'true' ">$(DefineConstants);PREVIEW;ENCRYPTIONPREVIEW</DefineConstants>
<!-- Add local package source for compatibility testing -->
<RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;$(MSBuildThisFileDirectory)artifacts/local-packages</RestoreSources>
</PropertyGroup>
<Import Project="$(AboveDirBuildProps)" Condition=" '$(AboveDirBuildProps)' != '' " />
</Project>
57 changes: 57 additions & 0 deletions Exceptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,60 @@ Cosmos DB SDK on any IO failure will attempt to retry the failed operation if re
## Common error status codes and troubleshooting guide <a id="error-codes"></a>

To see a list of common error code and issues please see [.NET SDK troubleshooting guide](https://docs.microsoft.com/azure/cosmos-db/troubleshoot-dot-net-sdk)

### Disambiguating 404 (Not Found) errors using SubStatusCode <a id="substatus-codes"></a>

When you receive a 404 (Not Found) status code from Cosmos DB, it can indicate two different scenarios:
1. **Item not found**: The requested item doesn't exist in the container
2. **Owner resource not found**: The parent resource (container or database) doesn't exist

To distinguish between these cases, check the `SubStatusCode` property:

- **SubStatusCode 0**: Regular item not found (the item doesn't exist in an existing container)
- **SubStatusCode 1003**: Owner resource not found (the container or database doesn't exist)

#### Example with Typed APIs (throws CosmosException):

```csharp
try
{
ItemResponse<MyItem> response = await container.ReadItemAsync<MyItem>("itemId", new PartitionKey("partitionKey"));
}
catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound)
{
if (ex.SubStatusCode == 1003)
{
// The container or database doesn't exist
Console.WriteLine("Owner resource (container/database) not found");
}
else
{
// The item doesn't exist in an existing container
Console.WriteLine("Item not found");
}
}
```

#### Example with Stream APIs (returns ResponseMessage):

```csharp
ResponseMessage response = await container.ReadItemStreamAsync("itemId", new PartitionKey("partitionKey"));

if (response.StatusCode == HttpStatusCode.NotFound)
{
int subStatusCode = (int)response.Headers.SubStatusCode;

if (subStatusCode == 1003)
{
// The container or database doesn't exist
Console.WriteLine("Owner resource (container/database) not found");
}
else
{
// The item doesn't exist in an existing container
Console.WriteLine("Item not found");
}
}
```

This distinction is particularly useful when implementing retry logic or error handling strategies, as you may want to handle these scenarios differently (e.g., creating the container if it doesn't exist vs. handling a missing item).
Loading