diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e0dff62..afd751a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,11 +1,13 @@ -name: Publish Release to GitHub Packages +name: Publish on: push: tags: - "v*.*.*" + - "v*.*.*-*" permissions: + contents: read packages: write defaults: @@ -13,7 +15,9 @@ defaults: shell: bash jobs: - publish: + nuget: + name: NuGet + environment: nuget runs-on: ubuntu-latest steps: @@ -24,18 +28,18 @@ jobs: with: dotnet-version: 8.x.x - - name: Build and strong name - run: dotnet build --configuration Release --no-incremental -p:version=${GITHUB_REF#refs/*/v} -p:SignAssembly=true -p:AssemblyOriginatorKeyFile=../key.snk - - - name: Pack SDK - run: dotnet pack -p:version=${GITHUB_REF#refs/*/v} -o ./publish - - - name: Configure NuGet source - run: dotnet nuget add source --username ${GITHUB_REPOSITORY_OWNER} --password ${GITHUB_TOKEN} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/${GITHUB_REPOSITORY_OWNER}/index.json" + - name: Write strong name key file + run: | + set +x # Disable command echoing for security + echo "$STRONG_NAME_KEY" > NatsDistributedCache.snk + chmod 600 NatsDistributedCache.snk env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + STRONG_NAME_KEY: ${{secrets.STRONG_NAME_KEY}} + + - name: Pack SDK + run: dotnet pack -c Release -p:version=${GITHUB_REF#refs/*/v} -o ./publish - - name: Publish to GitHub Packages - run: dotnet nuget push ./publish/*.nupkg --skip-duplicate --source github + - name: Publish to NuGet.org + run: dotnet nuget push ./publish/*.nupkg --api-key $NUGET_API_KEY --source https://api.nuget.org/v3/index.json --skip-duplicate env: - NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} + NUGET_API_KEY: ${{secrets.NUGET_API_KEY}} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5749330 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,47 @@ +# Contributing + +## Updating Packages + +Use the `dotnet outdated` tool to update packages in `.csproj` files. When updating packages in a project with lock +files, always use the `-n` flag to prevent automatic restoration. To update tools themselves, edit +`.config/dotnet-tools.json`. + +```bash +# all updates +# view +dotnet outdated +# apply all (with -n to prevent automatic restore) +dotnet outdated -n -u +# prompt +dotnet outdated -n -u:prompt + +# minor updates only +# view +dotnet outdated -vl Major +# apply all (with -n to prevent automatic restore) +dotnet outdated -n -vl Major -u +# prompt +dotnet outdated -n -vl Major -u:prompt + +After updating dependencies, you must update the lock files for all supported platforms by running the update script (see next section). + +## Updating NuGet Lock Files + +This project uses NuGet package lock files for reproducible builds across different platforms. When packages are updated, the lock files need to be regenerated for all supported platforms. + +Use the provided script to update all platform-specific lock files: + +```bash +./dev/update-nuget-lockfiles.sh +``` + +This will generate lock files for: + +- Linux x64: `packages.linux-x64.lock.json` +- macOS ARM64: `packages.osx-arm64.lock.json` +- Windows x64: `packages.win-x64.lock.json` + +These lock files are used automatically based on the runtime identifier specified during build/restore. + +**Important**: Always run this script after updating package dependencies to ensure all platform-specific lock files are +properly regenerated. diff --git a/README.md b/README.md index b148015..33db7e5 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,59 @@ +![NuGet Version](https://img.shields.io/nuget/v/CodeCargo.Nats.DistributedCache?cacheSeconds=3600&color=516bf1) + # CodeCargo.Nats.DistributedCache -## Updating Packages +## Overview + +A .NET 8+ library for integrating NATS as a distributed cache in ASP.NET Core applications. Supports the new HybridCache system for fast, scalable caching. + +## Requirements + +- NATS 2.11 or later +- A NATS KV bucket with `LimitMarkerTTL` set for per-key TTL support. Example: + ```csharp + // assuming an INatsConnection natsConnection + var kvContext = natsConnection.CreateKeyValueStoreContext(); + await kvContext.CreateOrUpdateStoreAsync( + new NatsKVConfig("cache") { LimitMarkerTTL = TimeSpan.FromSeconds(1), }); + ``` -Use the `dotnet outdated` tool to update packages in `.csproj` files. When updating packages in a project with lock -files, always use the `-n` flag to prevent automatic restoration. To update tools themselves, edit -`.config/dotnet-tools.json`. +## Installation ```bash -# all updates -# view -dotnet outdated -# apply all (with -n to prevent automatic restore) -dotnet outdated -n -u -# prompt -dotnet outdated -n -u:prompt +dotnet add package CodeCargo.Nats.DistributedCache +``` -# minor updates only -# view -dotnet outdated -vl Major -# apply all (with -n to prevent automatic restore) -dotnet outdated -n -vl Major -u -# prompt -dotnet outdated -n -vl Major -u:prompt +## Usage -After updating dependencies, you must update the lock files for all supported platforms by running the update script (see next section). +```csharp +using Microsoft.Extensions.DependencyInjection; +using NATS.Client.Core; +using CodeCargo.NatsDistributedCache; -## Updating NuGet Lock Files +var builder = WebApplication.CreateBuilder(args); -This project uses NuGet package lock files for reproducible builds across different platforms. When packages are updated, the lock files need to be regenerated for all supported platforms. +// Add a NATS connection +var natsOpts = NatsOpts.Default with { Url = "nats://localhost:4222" } +builder.Services.AddNats(opts => natsOpts); -Use the provided script to update all platform-specific lock files: +// Add a NATS distributed cache +builder.Services.AddNatsDistributedCache(options => +{ + options.BucketName = "cache"; +}); -```bash -./dev/update-nuget-lockfiles.sh -``` +// (Optional) Add HybridCache +var hybridCacheServices = builder.Services.AddHybridCache(); -This will generate lock files for: +// (Optional) Use NATS Serializer for HybridCache +hybridCacheServices.AddSerializerFactory( + natsOpts.SerializerRegistry.ToHybridCacheSerializerFactory()); -- Linux x64: `packages.linux-x64.lock.json` -- macOS ARM64: `packages.osx-arm64.lock.json` -- Windows x64: `packages.win-x64.lock.json` +var app = builder.Build(); +app.Run(); +``` -These lock files are used automatically based on the runtime identifier specified during build/restore. +## Additional Resources -**Important**: Always run this script after updating package dependencies to ensure all platform-specific lock files are -properly regenerated. +* [ASP.NET Core Hybrid Cache Documentation](https://learn.microsoft.com/en-us/aspnet/core/performance/caching/hybrid?view=aspnetcore-9.0) +* [NATS .NET Client Documentation](https://nats-io.github.io/nats.net/api/NATS.Client.Core.NatsOpts.html) diff --git a/dev/generate-snk.sh b/dev/generate-snk.sh new file mode 100755 index 0000000..792cf02 --- /dev/null +++ b/dev/generate-snk.sh @@ -0,0 +1,57 @@ +#!/bin/bash +set -e + +# Navigate to the root directory containing the .sln file +cd "$(dirname "$0")/.." + +# Find the .sln file in the current directory +CUR_DIR="$(pwd)" +SLN_FILE=$(ls "$CUR_DIR"/*.sln 2>/dev/null | head -n 1) +if [ -z "$SLN_FILE" ]; then + echo "Error: No .sln file found." + exit 1 +fi + +# Extract the solution name without the extension +SLN_NAME=$(basename "$SLN_FILE" .sln) + +# Get the current date +DATE="$(date "+%Y-%m-%d")" + +# Define key names +KEYS_DIR="$CUR_DIR/keys" +SNK_FILE="${KEYS_DIR}/${SLN_NAME}.${DATE}.snk" +PUB_FILE="${KEYS_DIR}/${SLN_NAME}.${DATE}.pub" + +# Function to run sn tool using Docker +run_sn_docker() { + docker run --rm \ + -v "$KEYS_DIR:/mnt/keys" \ + -w "/mnt/keys" \ + -u "$(id -u):$(id -g)" \ + mono:latest sn "$@" +} + +# Create the keys directory if it doesn't exist +mkdir -p "$KEYS_DIR" + +# Add .gitignore to prevent committing private keys +echo "*.snk" > "${KEYS_DIR}/.gitignore" + +# Generate the SNK file directly using sn tool +echo "Generating SNK file..." +run_sn_docker -k "$(basename "${SNK_FILE}")" + +# Extract the public key +echo "Extracting public key..." +PUB_KEY_NAME="$(basename "${PUB_FILE}")" +run_sn_docker -p "$(basename "${SNK_FILE}")" "${PUB_KEY_NAME}" + +# Display the public key token (helpful for reference) +echo "Public key token:" +run_sn_docker -tp "${PUB_KEY_NAME}" + +# Print success message +echo "Generated SNK file: ${SNK_FILE}" +echo "Generated public key file: ${PUB_FILE}" +echo "Done." diff --git a/keys/.gitignore b/keys/.gitignore new file mode 100644 index 0000000..322d15d --- /dev/null +++ b/keys/.gitignore @@ -0,0 +1 @@ +*.snk diff --git a/keys/NatsDistributedCache.2025-05-12.pub b/keys/NatsDistributedCache.2025-05-12.pub new file mode 100644 index 0000000..72c3350 Binary files /dev/null and b/keys/NatsDistributedCache.2025-05-12.pub differ diff --git a/src/NatsDistributedCache/NatsCacheServiceCollectionExtensions.cs b/src/NatsDistributedCache/NatsCacheServiceCollectionExtensions.cs index bb81332..2cea755 100644 --- a/src/NatsDistributedCache/NatsCacheServiceCollectionExtensions.cs +++ b/src/NatsDistributedCache/NatsCacheServiceCollectionExtensions.cs @@ -5,53 +5,52 @@ using Microsoft.Extensions.Options; using NATS.Client.Core; -namespace CodeCargo.Nats.DistributedCache +namespace CodeCargo.Nats.DistributedCache; + +/// +/// Extension methods for setting up NATS distributed cache related services in an . +/// +public static class NatsCacheServiceCollectionExtensions { /// - /// Extension methods for setting up NATS distributed cache related services in an . + /// Adds NATS distributed caching services to the specified . /// - public static class NatsCacheServiceCollectionExtensions + /// The to add services to. + /// An to configure the provided + /// . + /// If set, used keyed service to resolve + /// The so that additional calls can be chained. + public static IServiceCollection AddNatsDistributedCache( + this IServiceCollection services, + Action configureOptions, + object? connectionServiceKey = null) { - /// - /// Adds NATS distributed caching services to the specified . - /// - /// The to add services to. - /// An to configure the provided - /// . - /// If set, used keyed service to resolve - /// The so that additional calls can be chained. - public static IServiceCollection AddNatsDistributedCache( - this IServiceCollection services, - Action configureOptions, - object? connectionServiceKey = null) + services.AddOptions(); + services.Configure(configureOptions); + services.Add(ServiceDescriptor.Singleton(serviceProvider => { - services.AddOptions(); - services.Configure(configureOptions); - services.Add(ServiceDescriptor.Singleton(serviceProvider => - { - var optionsAccessor = serviceProvider.GetRequiredService>(); - var logger = serviceProvider.GetService>(); - - var natsConnection = connectionServiceKey == null - ? serviceProvider.GetRequiredService() - : serviceProvider.GetRequiredKeyedService(connectionServiceKey); + var optionsAccessor = serviceProvider.GetRequiredService>(); + var logger = serviceProvider.GetService>(); - return logger != null - ? new NatsCacheImpl(optionsAccessor, logger, serviceProvider, natsConnection) - : new NatsCacheImpl(optionsAccessor, serviceProvider, natsConnection); - })); + var natsConnection = connectionServiceKey == null + ? serviceProvider.GetRequiredService() + : serviceProvider.GetRequiredKeyedService(connectionServiceKey); - return services; - } + return logger != null + ? new NatsCacheImpl(optionsAccessor, logger, serviceProvider, natsConnection) + : new NatsCacheImpl(optionsAccessor, serviceProvider, natsConnection); + })); - /// - /// Creates an that uses the provided - /// to perform serialization. - /// - /// The instance - /// The instance - public static IHybridCacheSerializerFactory ToHybridCacheSerializerFactory( - this INatsSerializerRegistry serializerRegistry) => - new NatsHybridCacheSerializerFactory(serializerRegistry); + return services; } + + /// + /// Creates an that uses the provided + /// to perform serialization. + /// + /// The instance + /// The instance + public static IHybridCacheSerializerFactory ToHybridCacheSerializerFactory( + this INatsSerializerRegistry serializerRegistry) => + new NatsHybridCacheSerializerFactory(serializerRegistry); } diff --git a/src/NatsDistributedCache/NatsDistributedCache.csproj b/src/NatsDistributedCache/NatsDistributedCache.csproj index 7f4bd49..617e9ab 100644 --- a/src/NatsDistributedCache/NatsDistributedCache.csproj +++ b/src/NatsDistributedCache/NatsDistributedCache.csproj @@ -5,7 +5,26 @@ enable CodeCargo.Nats.DistributedCache NATS implementation of Microsoft.Extensions.Caching.Distributed.IDistributedCache. - cache;caching;distributed;nats + + + true + $(MSBuildThisFileDirectory)..\..\keys\NatsDistributedCache.2025-05-12.snk + + + CodeCargo + CodeCargo + Copyright © $([System.DateTime]::Now.Year) CodeCargo + CodeCargo.Nats.DistributedCache + distributed cache;hybrid cache;nats + MIT + README.md + https://github.com/code-cargo/NatsDistributedCache + https://github.com/code-cargo/NatsDistributedCache + git + true + true + true + snupkg @@ -13,6 +32,11 @@ + + + + + diff --git a/src/NatsDistributedCache/packages.linux-x64.lock.json b/src/NatsDistributedCache/packages.linux-x64.lock.json index ca7d676..d86a379 100644 --- a/src/NatsDistributedCache/packages.linux-x64.lock.json +++ b/src/NatsDistributedCache/packages.linux-x64.lock.json @@ -31,6 +31,16 @@ "Microsoft.Extensions.Primitives": "9.0.4" } }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, "NATS.Client.KeyValueStore": { "type": "Direct", "requested": "[2.6.0, )", @@ -49,6 +59,11 @@ "StyleCop.Analyzers.Unstable": "1.2.0.556" } }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", "resolved": "9.0.4", @@ -59,6 +74,11 @@ "resolved": "9.0.4", "contentHash": "SPFyMjyku1nqTFFJ928JAMd0QnRe4xjE7KeKnZMWXf3xk+6e0WiOZAluYtLdbJUXtsl2cCRSi8cBquJ408k8RA==" }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, "NATS.Client.Core": { "type": "Transitive", "resolved": "2.6.0", diff --git a/src/NatsDistributedCache/packages.osx-arm64.lock.json b/src/NatsDistributedCache/packages.osx-arm64.lock.json index ca7d676..d86a379 100644 --- a/src/NatsDistributedCache/packages.osx-arm64.lock.json +++ b/src/NatsDistributedCache/packages.osx-arm64.lock.json @@ -31,6 +31,16 @@ "Microsoft.Extensions.Primitives": "9.0.4" } }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, "NATS.Client.KeyValueStore": { "type": "Direct", "requested": "[2.6.0, )", @@ -49,6 +59,11 @@ "StyleCop.Analyzers.Unstable": "1.2.0.556" } }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", "resolved": "9.0.4", @@ -59,6 +74,11 @@ "resolved": "9.0.4", "contentHash": "SPFyMjyku1nqTFFJ928JAMd0QnRe4xjE7KeKnZMWXf3xk+6e0WiOZAluYtLdbJUXtsl2cCRSi8cBquJ408k8RA==" }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, "NATS.Client.Core": { "type": "Transitive", "resolved": "2.6.0", diff --git a/src/NatsDistributedCache/packages.win-x64.lock.json b/src/NatsDistributedCache/packages.win-x64.lock.json index ca7d676..d86a379 100644 --- a/src/NatsDistributedCache/packages.win-x64.lock.json +++ b/src/NatsDistributedCache/packages.win-x64.lock.json @@ -31,6 +31,16 @@ "Microsoft.Extensions.Primitives": "9.0.4" } }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, "NATS.Client.KeyValueStore": { "type": "Direct", "requested": "[2.6.0, )", @@ -49,6 +59,11 @@ "StyleCop.Analyzers.Unstable": "1.2.0.556" } }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", "resolved": "9.0.4", @@ -59,6 +74,11 @@ "resolved": "9.0.4", "contentHash": "SPFyMjyku1nqTFFJ928JAMd0QnRe4xjE7KeKnZMWXf3xk+6e0WiOZAluYtLdbJUXtsl2cCRSi8cBquJ408k8RA==" }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, "NATS.Client.Core": { "type": "Transitive", "resolved": "2.6.0", diff --git a/test/IntegrationTests/packages.linux-x64.lock.json b/test/IntegrationTests/packages.linux-x64.lock.json index a65d86c..5813dfd 100644 --- a/test/IntegrationTests/packages.linux-x64.lock.json +++ b/test/IntegrationTests/packages.linux-x64.lock.json @@ -1052,16 +1052,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsapphost": { - "type": "Project", - "dependencies": { - "Aspire.Dashboard.Sdk.linux-x64": "[9.2.1, )", - "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.linux-x64": "[9.2.1, )", - "NatsDistributedCache": "[1.0.0, )" - } - }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -1070,12 +1061,21 @@ "NATS.Client.KeyValueStore": "[2.6.0, )" } }, + "natsapphost": { + "type": "Project", + "dependencies": { + "Aspire.Dashboard.Sdk.linux-x64": "[9.2.1, )", + "Aspire.Hosting.AppHost": "[9.2.1, )", + "Aspire.Hosting.Orchestration.linux-x64": "[9.2.1, )", + "CodeCargo.Nats.DistributedCache": "[1.0.0, )" + } + }, "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/test/IntegrationTests/packages.osx-arm64.lock.json b/test/IntegrationTests/packages.osx-arm64.lock.json index cd80cc3..4d0c6d1 100644 --- a/test/IntegrationTests/packages.osx-arm64.lock.json +++ b/test/IntegrationTests/packages.osx-arm64.lock.json @@ -1052,16 +1052,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsapphost": { - "type": "Project", - "dependencies": { - "Aspire.Dashboard.Sdk.osx-arm64": "[9.2.1, )", - "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.osx-arm64": "[9.2.1, )", - "NatsDistributedCache": "[1.0.0, )" - } - }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -1070,12 +1061,21 @@ "NATS.Client.KeyValueStore": "[2.6.0, )" } }, + "natsapphost": { + "type": "Project", + "dependencies": { + "Aspire.Dashboard.Sdk.osx-arm64": "[9.2.1, )", + "Aspire.Hosting.AppHost": "[9.2.1, )", + "Aspire.Hosting.Orchestration.osx-arm64": "[9.2.1, )", + "CodeCargo.Nats.DistributedCache": "[1.0.0, )" + } + }, "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/test/IntegrationTests/packages.win-x64.lock.json b/test/IntegrationTests/packages.win-x64.lock.json index 220f5a7..6f21006 100644 --- a/test/IntegrationTests/packages.win-x64.lock.json +++ b/test/IntegrationTests/packages.win-x64.lock.json @@ -1052,16 +1052,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsapphost": { - "type": "Project", - "dependencies": { - "Aspire.Dashboard.Sdk.win-x64": "[9.2.1, )", - "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.win-x64": "[9.2.1, )", - "NatsDistributedCache": "[1.0.0, )" - } - }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -1070,12 +1061,21 @@ "NATS.Client.KeyValueStore": "[2.6.0, )" } }, + "natsapphost": { + "type": "Project", + "dependencies": { + "Aspire.Dashboard.Sdk.win-x64": "[9.2.1, )", + "Aspire.Hosting.AppHost": "[9.2.1, )", + "Aspire.Hosting.Orchestration.win-x64": "[9.2.1, )", + "CodeCargo.Nats.DistributedCache": "[1.0.0, )" + } + }, "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/test/TestUtils/packages.linux-x64.lock.json b/test/TestUtils/packages.linux-x64.lock.json index 52157d7..c41655f 100644 --- a/test/TestUtils/packages.linux-x64.lock.json +++ b/test/TestUtils/packages.linux-x64.lock.json @@ -237,7 +237,7 @@ "Microsoft.Bcl.AsyncInterfaces": "6.0.0" } }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", diff --git a/test/TestUtils/packages.osx-arm64.lock.json b/test/TestUtils/packages.osx-arm64.lock.json index 52157d7..c41655f 100644 --- a/test/TestUtils/packages.osx-arm64.lock.json +++ b/test/TestUtils/packages.osx-arm64.lock.json @@ -237,7 +237,7 @@ "Microsoft.Bcl.AsyncInterfaces": "6.0.0" } }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", diff --git a/test/TestUtils/packages.win-x64.lock.json b/test/TestUtils/packages.win-x64.lock.json index 52157d7..c41655f 100644 --- a/test/TestUtils/packages.win-x64.lock.json +++ b/test/TestUtils/packages.win-x64.lock.json @@ -237,7 +237,7 @@ "Microsoft.Bcl.AsyncInterfaces": "6.0.0" } }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", diff --git a/test/UnitTests/packages.linux-x64.lock.json b/test/UnitTests/packages.linux-x64.lock.json index ca0522a..5e11b64 100644 --- a/test/UnitTests/packages.linux-x64.lock.json +++ b/test/UnitTests/packages.linux-x64.lock.json @@ -369,7 +369,7 @@ "xunit.v3.runner.common": "[2.0.2]" } }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -381,9 +381,9 @@ "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/test/UnitTests/packages.osx-arm64.lock.json b/test/UnitTests/packages.osx-arm64.lock.json index ca0522a..5e11b64 100644 --- a/test/UnitTests/packages.osx-arm64.lock.json +++ b/test/UnitTests/packages.osx-arm64.lock.json @@ -369,7 +369,7 @@ "xunit.v3.runner.common": "[2.0.2]" } }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -381,9 +381,9 @@ "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/test/UnitTests/packages.win-x64.lock.json b/test/UnitTests/packages.win-x64.lock.json index ca0522a..5e11b64 100644 --- a/test/UnitTests/packages.win-x64.lock.json +++ b/test/UnitTests/packages.win-x64.lock.json @@ -369,7 +369,7 @@ "xunit.v3.runner.common": "[2.0.2]" } }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -381,9 +381,9 @@ "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/util/NatsAppHost/packages.linux-x64.lock.json b/util/NatsAppHost/packages.linux-x64.lock.json index d6599d0..61d3339 100644 --- a/util/NatsAppHost/packages.linux-x64.lock.json +++ b/util/NatsAppHost/packages.linux-x64.lock.json @@ -711,7 +711,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", diff --git a/util/NatsAppHost/packages.osx-arm64.lock.json b/util/NatsAppHost/packages.osx-arm64.lock.json index 13463fe..6382e51 100644 --- a/util/NatsAppHost/packages.osx-arm64.lock.json +++ b/util/NatsAppHost/packages.osx-arm64.lock.json @@ -711,7 +711,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", diff --git a/util/NatsAppHost/packages.win-x64.lock.json b/util/NatsAppHost/packages.win-x64.lock.json index 5730200..e305cad 100644 --- a/util/NatsAppHost/packages.win-x64.lock.json +++ b/util/NatsAppHost/packages.win-x64.lock.json @@ -711,7 +711,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", diff --git a/util/PerfTest/packages.linux-x64.lock.json b/util/PerfTest/packages.linux-x64.lock.json index 9315996..346ec48 100644 --- a/util/PerfTest/packages.linux-x64.lock.json +++ b/util/PerfTest/packages.linux-x64.lock.json @@ -944,16 +944,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsapphost": { - "type": "Project", - "dependencies": { - "Aspire.Dashboard.Sdk.linux-x64": "[9.2.1, )", - "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.linux-x64": "[9.2.1, )", - "NatsDistributedCache": "[1.0.0, )" - } - }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -962,12 +953,21 @@ "NATS.Client.KeyValueStore": "[2.6.0, )" } }, + "natsapphost": { + "type": "Project", + "dependencies": { + "Aspire.Dashboard.Sdk.linux-x64": "[9.2.1, )", + "Aspire.Hosting.AppHost": "[9.2.1, )", + "Aspire.Hosting.Orchestration.linux-x64": "[9.2.1, )", + "CodeCargo.Nats.DistributedCache": "[1.0.0, )" + } + }, "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/util/PerfTest/packages.osx-arm64.lock.json b/util/PerfTest/packages.osx-arm64.lock.json index b3330df..cc3d194 100644 --- a/util/PerfTest/packages.osx-arm64.lock.json +++ b/util/PerfTest/packages.osx-arm64.lock.json @@ -944,16 +944,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsapphost": { - "type": "Project", - "dependencies": { - "Aspire.Dashboard.Sdk.osx-arm64": "[9.2.1, )", - "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.osx-arm64": "[9.2.1, )", - "NatsDistributedCache": "[1.0.0, )" - } - }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -962,12 +953,21 @@ "NATS.Client.KeyValueStore": "[2.6.0, )" } }, + "natsapphost": { + "type": "Project", + "dependencies": { + "Aspire.Dashboard.Sdk.osx-arm64": "[9.2.1, )", + "Aspire.Hosting.AppHost": "[9.2.1, )", + "Aspire.Hosting.Orchestration.osx-arm64": "[9.2.1, )", + "CodeCargo.Nats.DistributedCache": "[1.0.0, )" + } + }, "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" } diff --git a/util/PerfTest/packages.win-x64.lock.json b/util/PerfTest/packages.win-x64.lock.json index b8ae234..0e84cdf 100644 --- a/util/PerfTest/packages.win-x64.lock.json +++ b/util/PerfTest/packages.win-x64.lock.json @@ -944,16 +944,7 @@ "resolved": "16.3.0", "contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA==" }, - "natsapphost": { - "type": "Project", - "dependencies": { - "Aspire.Dashboard.Sdk.win-x64": "[9.2.1, )", - "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.win-x64": "[9.2.1, )", - "NatsDistributedCache": "[1.0.0, )" - } - }, - "natsdistributedcache": { + "CodeCargo.Nats.DistributedCache": { "type": "Project", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "[9.0.4, )", @@ -962,12 +953,21 @@ "NATS.Client.KeyValueStore": "[2.6.0, )" } }, + "natsapphost": { + "type": "Project", + "dependencies": { + "Aspire.Dashboard.Sdk.win-x64": "[9.2.1, )", + "Aspire.Hosting.AppHost": "[9.2.1, )", + "Aspire.Hosting.Orchestration.win-x64": "[9.2.1, )", + "CodeCargo.Nats.DistributedCache": "[1.0.0, )" + } + }, "testutils": { "type": "Project", "dependencies": { + "CodeCargo.Nats.DistributedCache": "[1.0.0, )", "Microsoft.Extensions.Logging": "[9.0.4, )", "NATS.Net": "[2.6.0, )", - "NatsDistributedCache": "[1.0.0, )", "xunit.v3.assert": "[2.0.2, )", "xunit.v3.extensibility.core": "[2.0.2, )" }