diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index c837bbeb..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,167 +0,0 @@ -version: 2.1 - -workflows: - version: 2 - test: - jobs: - - build-all - - test-netcore-linux: - name: .NET 6.0 - Linux - docker-image: mcr.microsoft.com/dotnet/sdk:6.0-focal - build-target-framework: net6.0 - test-target-framework: net6.0 - requires: - - build-all - - test-windows: - name: .NET Framework 4.6.2 - Windows - build-target-framework: net462 - test-target-framework: net462 - requires: - - build-all - - test-windows: - name: .NET Framework 4.7.1 - Windows - build-target-framework: net462 - test-target-framework: net471 - requires: - - build-all - -orbs: - win: circleci/windows@2.4.0 - -jobs: - build-all: - docker: - - image: mcr.microsoft.com/dotnet/sdk:6.0-focal - environment: - ASPNETCORE_SUPPRESSSTATUSMESSAGES: true - steps: - - checkout - - restore_cache: - keys: - - deps-sdk-{{ checksum "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" }} - # For these two-step builds, we're caching the NuGet dependencies twice: - # 1. Here, where we're only building the SDK itself and not the test project, we cache the - # packages with a key like "deps-sdk-xxxx" where "xxxx" only changes if the SDK project - # file changes. - # 2. In the test-netcore job, we are loading dependencies for the test project which might - # vary depending on which framework we're building the test project with. So we cache the - # dependencies there with a key like "deps-netcoreapp3.1-xxxx-yyyy" where the "yyyy" part - # will change if the project file for the test project changes. - - run: - name: restore dependencies - command: dotnet restore src/LaunchDarkly.ServerSdk - - save_cache: - key: deps-sdk-{{ checksum "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" }} - paths: - - /root/.nuget/packages - - run: - name: build - command: dotnet build src/LaunchDarkly.ServerSdk - - persist_to_workspace: - root: src/LaunchDarkly.ServerSdk - paths: - - bin - - obj - - test-netcore-linux: - parameters: - docker-image: - type: string - build-target-framework: - type: string - test-target-framework: - type: string - docker: - - image: <> - environment: - ASPNETCORE_SUPPRESSSTATUSMESSAGES: true - BUILDFRAMEWORKS: <> - TESTFRAMEWORK: <> - TEST_HARNESS_PARAMS: -junit /tmp/circle-reports/contract-tests-junit.xml - steps: - - run: - name: install packages - command: apt -q update && apt install -y make - - checkout - - attach_workspace: - at: src/LaunchDarkly.ServerSdk - - restore_cache: - keys: - - deps-<>-{{ checksum "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" }}-{{ checksum "test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj" }} - - run: - name: restore LaunchDarkly.ServerSdk.Tests - command: dotnet restore test/LaunchDarkly.ServerSdk.Tests - - save_cache: - key: deps--<>-{{ checksum "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" }}-{{ checksum "test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj" }} - paths: - - /root/.nuget/packages - - run: mkdir -p /tmp/circle-reports - - run: - name: run tests - command: dotnet test test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj - - - run: make build-contract-tests - - run: - command: make start-contract-test-service - background: true - - run: make run-contract-tests - - - store_test_results: - path: /tmp/circle-reports - - test-windows: - parameters: - build-target-framework: - type: string - test-target-framework: - type: string - executor: - name: win/default - shell: powershell.exe - environment: - BUILDFRAMEWORKS: <> - TESTFRAMEWORK: <> - - steps: - - checkout - - attach_workspace: - at: src/LaunchDarkly.ServerSdk - - restore_cache: - keys: - - deps-<>-{{ checksum "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" }}-{{ checksum "test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj" }} - - run: - name: install project dependencies - command: dotnet restore test/LaunchDarkly.ServerSdk.Tests - - save_cache: - key: deps-<>-{{ checksum "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" }}-{{ checksum "test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj" }} - paths: - - C:\Users\circleci\.nuget\packages - - run: New-Item -Path "circle-reports" -ItemType "directory" - - run: - name: run tests - command: dotnet test test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj - - # sdk-test-harness is not yet running well in Windows, but these would be the steps: - # - run: - # name: build contract tests - # command: | - # cd contract-tests - # dotnet build TestService.csproj - # - run: - # name: start contract test service - # command: | - # cd contract-tests - # dotnet bin/Debug/$env:TESTFRAMEWORK/ContractTestService.dll - # background: true - # - run: - # name: run contract tests - # command: | - # Invoke-WebRequest -Uri ` - # https://github.com/launchdarkly/sdk-test-harness/releases/download/v1.1.2/sdk-test-harness_Windows_x86_64.zip ` - # -OutFile sdk-test-harness.zip - # Expand-Archive -Path sdk-test-harness.zip - # .\sdk-test-harness\sdk-test-harness.exe -url http://localhost:8000 ` - # -debug -stop-service-at-end -junit ./circle-reports/contract-tests-junit.xml - - - store_test_results: - path: circle-reports diff --git a/.github/actions/build-docs/action.yml b/.github/actions/build-docs/action.yml new file mode 100644 index 00000000..30d8e44e --- /dev/null +++ b/.github/actions/build-docs/action.yml @@ -0,0 +1,17 @@ +name: Build Documentation +description: 'Build Documentation.' + +runs: + using: composite + steps: + - name: Install docfx + shell: bash + run: dotnet tool update -g docfx + - name: Run docfx metadata + shell: bash + run: docfx metadata + - name: Run docfx build + shell: bash + # Note: in the docfx.json file, the 'Configuration' property is set to Debug so that we don't require + # signing to happen just to build docs. + run: docfx build diff --git a/.github/actions/build-release/action.yml b/.github/actions/build-release/action.yml new file mode 100644 index 00000000..bf47cbb0 --- /dev/null +++ b/.github/actions/build-release/action.yml @@ -0,0 +1,18 @@ +name: Build Action +description: 'Dotnet Server SDK Build action.' + +runs: + using: composite + steps: + - name: Setup dotnet build tools + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 6.0 + + - name: Display dotnet version + shell: bash + run: dotnet --version + + - name: Build + shell: bash + run: dotnet build /p:Configuration=Release src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj diff --git a/.github/actions/ci/action.yml b/.github/actions/ci/action.yml new file mode 100644 index 00000000..1236f2cd --- /dev/null +++ b/.github/actions/ci/action.yml @@ -0,0 +1,68 @@ +name: CI +description: Runs CI for the .NET Server SDK +inputs: + run_tests: + description: 'If true, run unit tests, otherwise skip them.' + required: false + default: 'true' + run_contract_tests: + description: 'If true, run contract tests, otherwise skip them.' + required: false + default: 'true' + aws_role_arn: + description: 'The ARN of the role to assume for downloading secrets, used for building docs.' + required: false + default: '' + token: + description: 'Github token, used for contract tests' + required: false + default: '' + +runs: + using: composite + steps: + - name: Setup dotnet build tools + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 6.0 + + - name: Restore Dependencies + shell: bash + run: dotnet restore src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj + + - name: Build for NetStandard2.0 + shell: bash + run: dotnet build -p:Configuration=debug -p:TargetFramework=netstandard2.0 src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj + + - name: Build for Net6 + shell: bash + run: dotnet build -p:Configuration=debug -p:TargetFramework=net6.0 src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj + + - name: Build for Net462 + shell: bash + run: dotnet build -p:Configuration=debug -p:TargetFramework=net462 src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj + + - name: Run Unit Tests for Net6 + if: ${{ inputs.run_tests == 'true' }} + shell: bash + run: | + dotnet restore test/LaunchDarkly.ServerSdk.Tests + dotnet test --framework=net6.0 test/LaunchDarkly.ServerSdk.Tests/LaunchDarkly.ServerSdk.Tests.csproj + + - name: Build Contract Tests + if: ${{ inputs.run_contract_tests == 'true' }} + shell: bash + run: dotnet build /p:Configuration=debug contract-tests/TestService.csproj + + - name: Launch Contract Tests + if: ${{ inputs.run_contract_tests == 'true' }} + id: launch-contract-tests + shell: bash + run: dotnet contract-tests/bin/debug/net6.0/ContractTestService.dll > test-service.log 2>&1 & disown + + - name: Run Contract Tests + if: ${{ inputs.run_contract_tests == 'true' }} + uses: launchdarkly/gh-actions/actions/contract-tests@contract-tests-v1.0.0 + with: + test_service_port: 8000 + token: ${{ inputs.token }} diff --git a/.github/actions/publish-docs/action.yml b/.github/actions/publish-docs/action.yml new file mode 100644 index 00000000..c5f24ba4 --- /dev/null +++ b/.github/actions/publish-docs/action.yml @@ -0,0 +1,15 @@ +name: Publish Documentation +description: 'Publish the documentation to Github pages' +inputs: + token: + description: 'Token to use for publishing.' + required: true + +runs: + using: composite + steps: + - uses: launchdarkly/gh-actions/actions/publish-pages@publish-pages-v1.0.1 + name: 'Publish to Github pages' + with: + docs_path: docs + github_token: ${{ inputs.token }} diff --git a/.github/actions/publish-package/action.yml b/.github/actions/publish-package/action.yml new file mode 100644 index 00000000..150d354e --- /dev/null +++ b/.github/actions/publish-package/action.yml @@ -0,0 +1,34 @@ +name: Publish Package +description: 'Packs DLLs into unsigned Nuget package and publishes to Nuget.' +inputs: + dry_run: + description: 'Is this a dry run. If so no package will be published.' + required: true + +runs: + using: composite + steps: + - name: Create Nuget Package + shell: bash + run: | + dotnet restore + dotnet pack --no-build --output nupkgs --configuration Release src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj + + - name: Publish Package + if: ${{ inputs.dry_run == 'false' }} + shell: bash + run: | + for pkg in $(find ./nupkgs -name '*.nupkg' -o -name '*.snupkg'); do + echo "publishing ${pkg}" + dotnet nuget push "${pkg}" --api-key ${{ env.NUGET_API_KEY }} --source https://www.nuget.org + echo "published ${pkg}" + done + + - name: Dry Run Publish + if: ${{ inputs.dry_run == 'true' }} + shell: bash + run: | + echo "This is a dry run and packages are not being published." + for pkg in $(find ./nupkgs -name '*.nupkg' -o -name '*.snupkg'); do + echo "detected package ${pkg}" + done diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..0db96126 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: CI +on: + push: + branches: [main, 'feat/**'] + paths-ignore: + - '**.md' # Do not need to run CI for markdown changes. + pull_request: + branches: [main, 'feat/**'] + paths-ignore: + - '**.md' + +jobs: + build-and-test: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/ci + with: + run_tests: true + run_contract_tests: ${{ matrix.os != 'windows-latest' }} + token: ${{ secrets.GITHUB_TOKEN }} + + build-docs: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/build-docs diff --git a/.github/workflows/lint-pr-title.yml b/.github/workflows/lint-pr-title.yml new file mode 100644 index 00000000..4ba79c13 --- /dev/null +++ b/.github/workflows/lint-pr-title.yml @@ -0,0 +1,12 @@ +name: Lint PR title + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + lint-pr-title: + uses: launchdarkly/gh-actions/.github/workflows/lint-pr-title.yml@main diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml new file mode 100644 index 00000000..e92242d8 --- /dev/null +++ b/.github/workflows/publish-docs.yml @@ -0,0 +1,28 @@ +on: + workflow_dispatch: + workflow_call: + +name: Publish Docs +jobs: + build-publish: + runs-on: ubuntu-latest + permissions: + contents: write # Needed in this case to write github pages. + steps: + - uses: actions/checkout@v4 + - id: build + name: Build and Test + uses: ./.github/actions/ci + with: + run_tests: true + run_contract_tests: false + + - id: build-docs + name: Build Documentation + uses: ./.github/actions/build-docs + + - id: publish + name: Publish Documentation + uses: ./.github/actions/publish-docs + with: + token: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..90253edf --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,63 @@ +name: Publish Package +on: + workflow_dispatch: + inputs: + run_tests: + description: 'If true, run unit tests, otherwise skip them.' + required: false + type: boolean + default: true + dry_run: + description: 'Is this a dry run. If so no package will be published.' + type: boolean + required: true + workflow_call: + inputs: + run_tests: + description: 'If true, run unit tests, otherwise skip them.' + required: false + type: boolean + default: true + dry_run: + description: 'Is this a dry run. If so no package will be published.' + type: boolean + required: true + +jobs: + build: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + steps: + - uses: actions/checkout@v4 + - name: CI check + uses: ./.github/actions/ci + with: + run_tests: ${{ inputs.run_tests }} + run_contract_tests: false + + - uses: launchdarkly/gh-actions/actions/release-secrets@release-secrets-v1.1.0 + name: Get secrets + with: + aws_assume_role: ${{ vars.AWS_ROLE_ARN }} + ssm_parameter_pairs: '/production/common/releasing/digicert/host = DIGICERT_HOST, + /production/common/releasing/digicert/api_key = DIGICERT_API_KEY, + /production/common/releasing/digicert/client_cert_file_b64 = DIGICERT_CLIENT_CERT_FILE_B64, + /production/common/releasing/digicert/client_cert_password = DIGICERT_CLIENT_CERT_PASSWORD, + /production/common/releasing/digicert/code_signing_cert_sha1_hash = DIGICERT_CODE_SIGNING_CERT_SHA1_HASH' + s3_path_pairs: 'launchdarkly-releaser/dotnet/LaunchDarkly.snk = LaunchDarkly.snk' + + - name: Release build + uses: ./.github/actions/build-release + + - name: Sign DLLs + uses: launchdarkly/gh-actions/actions/sign-dlls@sign-dlls-v1.0.0 + with: + build_configuration_path: 'src/LaunchDarkly.ServerSdk/bin/Release/' + dll_name: 'LaunchDarkly.ServerSdk.dll' + + - name: Publish Nupkg + uses: ./.github/actions/publish-package + with: + dry_run: ${{ inputs.dry_run }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 00000000..b5f5dc25 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,38 @@ +name: Release Please +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + release-please: + runs-on: ubuntu-latest + + permissions: + id-token: write # Needed if using OIDC to get release secrets. + contents: write # Contents and pull-requests are for release-please to make releases. + pull-requests: write + + outputs: + releases_created: ${{ steps.release.outputs.releases_created }} + + steps: + - uses: google-github-actions/release-please-action@v4 + id: release + with: + token: ${{ secrets.GITHUB_TOKEN }} + target-branch: ${{ github.ref_name }} + + publish-sdk: + needs: release-please + uses: ./.github/workflows/publish.yml + if: ${{ needs.release-please.outputs.releases_created == 'true' }} + with: + run_tests: true + dry_run: false + + publish-docs: + needs: release-please + uses: ./.github/workflows/publish-docs.yml + if: ${{ needs.release-please.outputs.releases_created == 'true' }} diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000..8d48393b --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "8.3.0" +} diff --git a/contract-tests/Representations.cs b/contract-tests/Representations.cs index 7511465f..8e775bf6 100644 --- a/contract-tests/Representations.cs +++ b/contract-tests/Representations.cs @@ -44,11 +44,19 @@ public class HookData public Dictionary BeforeEvaluation { get; set; } public Dictionary AfterEvaluation { get; set; } } + + public class HookErrors + { + public string BeforeEvaluation { get; set; } + public string AfterEvaluation { get; set; } + } + public class HookConfig { public string Name { get; set; } public Uri CallbackUri { get; set; } public HookData Data { get; set; } + public HookErrors Errors { get; set; } } public class SdkHookParams diff --git a/contract-tests/SdkClientEntity.cs b/contract-tests/SdkClientEntity.cs index 698a20de..2c1ca66f 100644 --- a/contract-tests/SdkClientEntity.cs +++ b/contract-tests/SdkClientEntity.cs @@ -366,7 +366,7 @@ private static Configuration BuildSdkConfig(SdkConfigParams sdkParams, ILogAdapt if (sdkParams.Hooks != null) { var hooks = sdkParams.Hooks.Hooks.Select(hook => - new TestHook(hook.Name, new CallbackService(hook.CallbackUri), hook.Data?.BeforeEvaluation, hook.Data?.AfterEvaluation) + new TestHook(hook.Name, new CallbackService(hook.CallbackUri), hook.Data?.BeforeEvaluation, hook.Data?.AfterEvaluation, hook.Errors?.BeforeEvaluation, hook.Errors?.AfterEvaluation) ); builder.Hooks(Components.Hooks(hooks)); diff --git a/contract-tests/TestHook.cs b/contract-tests/TestHook.cs index 979b26fd..b186eff4 100644 --- a/contract-tests/TestHook.cs +++ b/contract-tests/TestHook.cs @@ -14,15 +14,25 @@ public class TestHook: Hook private readonly Dictionary _before; private readonly Dictionary _after; - public TestHook(string name, CallbackService service, Dictionary before, Dictionary after) : base(name) + private readonly string _beforeError; + private readonly string _afterError; + + public TestHook(string name, CallbackService service, Dictionary before, Dictionary after, string beforeError, string afterError) : base(name) { _service = service; _before = before; _after = after; + _beforeError = beforeError; + _afterError = afterError; } public override SeriesData BeforeEvaluation(EvaluationSeriesContext context, SeriesData data) { + if (_beforeError != null) + { + throw new Exception(_beforeError); + } + _service.Post("", new EvaluationHookParams() { EvaluationSeriesContext = context, @@ -43,6 +53,11 @@ public override SeriesData BeforeEvaluation(EvaluationSeriesContext context, Ser public override SeriesData AfterEvaluation(EvaluationSeriesContext context, SeriesData data, EvaluationDetail detail) { + if (_afterError != null) + { + throw new Exception(_afterError); + } + _service.Post("", new EvaluationHookParams() { EvaluationSeriesContext = context, diff --git a/contract-tests/TestService.csproj b/contract-tests/TestService.csproj index e361feaf..fa0b556c 100644 --- a/contract-tests/TestService.csproj +++ b/contract-tests/TestService.csproj @@ -1,7 +1,7 @@ - netcoreapp3.1 + net6.0 $(TESTFRAMEWORK) portable ContractTestService diff --git a/docfx.json b/docfx.json new file mode 100644 index 00000000..cc59d5c3 --- /dev/null +++ b/docfx.json @@ -0,0 +1,48 @@ +{ + "metadata": [ + { + "src": [ + { + "src": "./src", + "files": [ + "**/*.csproj", + "**/bin/**/**LaunchDarkly**.dll" + ] + } + ], + "dest": "./api", + "properties" : { + "Configuration": "Debug" + }, + } + ], + "build": { + "content": [ + { + "files": [ + "**/*.{md,yml}" + ], + "exclude": [ + "docs/**" + ] + } + ], + "resource": [ + { + "files": [ + "images/**" + ] + } + ], + "output": "docs", + "template": [ + "default" + ], + "globalMetadata": { + "_appName": "LaunchDarkly Dotnet Server SDK", + "_appTitle": "LaunchDarkly Dotnet Server SDK", + "_enableSearch": true, + "pdf": false + } + } +} diff --git a/docs-src/README.md b/docs-src/README.md index cddf9d1e..e84f544e 100644 --- a/docs-src/README.md +++ b/docs-src/README.md @@ -8,7 +8,6 @@ The HTML documentation also includes documentation comments from `LaunchDarkly.C The `docs-src` subdirectory contains additional Markdown content that is included in the documentation build, as follows: -* `index.md`: This text appears on the landing page of the documentation. * `namespaces/.md`: A file that is used as the description of a specific namespace. The first line is the summary, which will appear on both the landing page and the API page for the namespace; the rest of the file is the full description, which will appear on the API page for the namespace. Markdown text can include hyperlinks to namespaces, types, etc. using the syntax ``. diff --git a/docs-src/index.md b/docs-src/index.md deleted file mode 100644 index 2a2b4cee..00000000 --- a/docs-src/index.md +++ /dev/null @@ -1,4 +0,0 @@ - -This site contains the full API reference for the [`LaunchDarkly.ServerSdk`](https://www.nuget.org/packages/LaunchDarkly.ServerSdk) package, as well as the `LaunchDarkly.CommonSdk` package that is included automatically as a dependency of the SDK. - -For source code, see the [GitHub repository](https://github.com/launchdarkly/dotnet-server-sdk). The [developer notes](https://github.com/launchdarkly/dotnet-server-sdk/blob/main/CONTRIBUTING.md) there include links to other repositories used in the SDK. diff --git a/docs-src/namespaces/LaunchDarkly.Sdk.Server.md b/docs-src/namespaces/LaunchDarkly.Sdk.Server.md index d1ccd90c..2897025d 100644 --- a/docs-src/namespaces/LaunchDarkly.Sdk.Server.md +++ b/docs-src/namespaces/LaunchDarkly.Sdk.Server.md @@ -1,3 +1,3 @@ The main namespace for the LaunchDarkly server-side .NET SDK. -You will most often use **** (the SDK client) and **** (configuration options for the client), as well as the **** type from . +You will most often use **** (the SDK client) and **** (configuration options for the client), as well as the **** type from . diff --git a/docs-src/namespaces/LaunchDarkly.Sdk.md b/docs-src/namespaces/LaunchDarkly.Sdk.md index e80c63e3..937a18ea 100644 --- a/docs-src/namespaces/LaunchDarkly.Sdk.md +++ b/docs-src/namespaces/LaunchDarkly.Sdk.md @@ -1,5 +1,5 @@ The base namespace for all LaunchDarkly .NET-based SDKs, containing common types. -Types in this namespace are part of the overall LaunchDarkly model, shared by both server-side and client-side SDKs. The one you will use most often is ****. +Types in this namespace are part of the overall LaunchDarkly model, shared by both server-side and client-side SDKs. The one you will use most often is ****. The NuGet package containing these types is [`LaunchDarkly.CommonSdk`](https://www.nuget.org/packages/LaunchDarkly.CommonSdk). Normally you should not need to reference that package directly; it is loaded automatically as a dependency of the main SDK package. diff --git a/index.md b/index.md new file mode 100644 index 00000000..9e070cc1 --- /dev/null +++ b/index.md @@ -0,0 +1,27 @@ +--- +_layout: landing +--- + +# LaunchDarkly Server-Side SDK for .NET + +For first time users, visit our [LaunchDarkly Docs](https://docs.launchdarkly.com/sdk/server-side/dotnet) page. Within these docs, the [LDClient](api/LaunchDarkly.Sdk.Server.LdClient.html) and the [ContextBuilder](api/LaunchDarkly.Sdk.ContextBuilder.html) are good starting points to explore from. + + +This site contains the full API reference for the [`LaunchDarkly.ServerSdk`](https://www.nuget.org/packages/LaunchDarkly.ServerSdk) package, as well as the `LaunchDarkly.CommonSdk` package that is included automatically as a dependency of the SDK. + +For source code, see the [GitHub repository](https://github.com/launchdarkly/dotnet-server-sdk). The [developer notes](https://github.com/launchdarkly/dotnet-server-sdk/blob/main/CONTRIBUTING.md) there include links to other repositories used in the SDK. + + +## Namespaces + +**[LaunchDarkly.Sdk](docs-src/namespaces/LaunchDarkly.Sdk.html):** The base namespace for all LaunchDarkly .NET-based SDKs, containing common types. + +**[LaunchDarkly.Sdk.Server](docs-src/namespaces/LaunchDarkly.Sdk.Server.html):** The main namespace for the LaunchDarkly server-side .NET SDK. + +**[LaunchDarkly.Sdk.Json](docs-src/namespaces/LaunchDarkly.Sdk.Json.html):** Helper classes and methods for interoperability with JSON. + +**[LaunchDarkly.Sdk.Server.Integrations](docs-src/namespaces/LaunchDarkly.Sdk.Server.Integrations.html):** Tools for configuring how the SDK connects to LaunchDarkly, or to other software components. + +**[LaunchDarkly.Sdk.Server.Interfaces](docs-src/namespaces/LaunchDarkly.Sdk.Server.Interfaces.html):** Interfaces and types that are part of the public API, but not needed for basic use of the SDK. + +**[LaunchDarkly.Sdk.Server.Subsystem](docs-src/namespaces/LaunchDarkly.Sdk.Server.Subsystems.html):** Interfaces for implementation of custom LaunchDarkly components. diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000..c94e2835 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,15 @@ +{ + "bootstrap-sha": "63aca1881c13d09b6be3baf44ddfbe78cf71632c", + "packages": { + ".": { + "release-type": "simple", + "bump-minor-pre-major": true, + "versioning": "default", + "include-v-in-tag": false, + "include-component-in-tag": false, + "extra-files": [ + "src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj" + ] + } + } +} diff --git a/src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj b/src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj index a7eb9efd..91f3b906 100644 --- a/src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj +++ b/src/LaunchDarkly.ServerSdk/LaunchDarkly.ServerSdk.csproj @@ -1,6 +1,8 @@  + 8.3.0 +