diff --git a/.github/workflow-gen/Program.cs b/.github/workflow-gen/Program.cs
new file mode 100644
index 000000000..a5e3f62a6
--- /dev/null
+++ b/.github/workflow-gen/Program.cs
@@ -0,0 +1,301 @@
+// Copyright (c) Duende Software. All rights reserved.
+// Licensed under the Apache License, Version 2.0.
+
+using Logicality.GitHub.Actions.Workflow;
+using static GitHubContexts;
+
+var contexts = Instance;
+Component[] components = [
+ new("ignore-this",
+ ["IgnoreThis"],
+ ["IgnoreThis.Tests"],
+ "it"),
+
+ new("bff",
+ ["Duende.Bff", "Duende.Bff.Blazor", "Duende.Bff.Blazor.Client", "Duende.Bff.EntityFramework", "Duende.Bff.Yarp"],
+ ["Duende.Bff.Tests", "Duende.Bff.EntityFramework.Tests", "Duende.Bff.Blazor.UnitTests", "Duende.Bff.Blazor.Client.UnitTests"],
+ "bff"),
+
+ new("identity-server",
+ ["AspNetIdentity", "Configuration", "Configuration.EntityFramework", "EntityFramework", "EntityFramework.Storage", "IdentityServer", "Storage"],
+ ["Configuration.IntegrationTests", "EntityFramework.IntegrationTests", "EntityFramework.Storage.IntegrationTests", "EntityFramework.Storage.UnitTests", "IdentityServer.IntegrationTests", "IdentityServer.UnitTests"],
+ "is")
+];
+
+foreach (var component in components)
+{
+ GenerateCiWorkflow(component);
+ GenerateReleaseWorkflow(component);
+}
+
+void GenerateCiWorkflow(Component component)
+{
+ var workflow = new Workflow($"{component.Name}/ci");
+ var paths = new[]
+ {
+ $".github/workflows/{component.Name}-**",
+ $"{component.Name}/**",
+ "Directory.Packages.props"
+ };
+
+ workflow.On
+ .WorkflowDispatch();
+ workflow.On
+ .Push()
+ .Paths(paths);
+ workflow.On
+ .PullRequestTarget()
+ .Paths(paths);
+
+ workflow.EnvDefaults();
+
+ var job = workflow
+ .Job("build")
+ .Name("Build")
+ .RunsOn(GitHubHostedRunners.UbuntuLatest)
+ .Defaults().Run("bash", component.Name)
+ .Job;
+
+ job.Permissions(
+ actions: Permission.Read,
+ contents: Permission.Read,
+ checks: Permission.Write,
+ packages: Permission.Write);
+
+ job.TimeoutMinutes(15);
+
+ job.Step()
+ .ActionsCheckout();
+
+ job.StepSetupDotNet();
+
+ foreach (var testProject in component.Tests)
+ {
+ job.StepTestAndReport(component.Name, testProject);
+ }
+
+ job.StepToolRestore();
+
+ foreach (var project in component.Projects)
+ {
+ job.StepPack(project);
+ }
+
+ job.StepSign();
+
+ job.StepPush("MyGet", "https://www.myget.org/F/duende_identityserver/api/v2/package", "MYGET");
+
+ job.StepPush("GitHub", "https://nuget.pkg.github.com/DuendeSoftware/index.json", "GITHUB_TOKEN")
+ .Env(("GITHUB_TOKEN", contexts.Secrets.GitHubToken),
+ ("NUGET_AUTH_TOKEN", contexts.Secrets.GitHubToken));
+
+ job.StepUploadArtifacts(component.Name);
+
+ var fileName = $"{component.Name}-ci";
+ WriteWorkflow(workflow, fileName);
+}
+
+void GenerateReleaseWorkflow(Component component)
+{
+ var workflow = new Workflow($"{component.Name}/release");
+
+ workflow.On
+ .WorkflowDispatch()
+ .Inputs(new StringInput("version", "Version in format X.Y.Z or X.Y.Z-preview.", true, "0.0.0"));
+
+ workflow.EnvDefaults();
+
+ var tagJob = workflow
+ .Job("tag")
+ .Name("Tag and Pack")
+ .RunsOn(GitHubHostedRunners.UbuntuLatest)
+ .Permissions(contents: Permission.Write, packages: Permission.Write)
+ .Defaults().Run("bash", component.Name).Job;
+
+ tagJob.Step()
+ .ActionsCheckout();
+
+ tagJob.StepSetupDotNet();
+
+ tagJob.Step()
+ .Name("Git tag")
+ .Run($@"git config --global user.email ""github-bot@duendesoftware.com""
+git config --global user.name ""Duende Software GitHub Bot""
+git tag -a {component.TagPrefix}-{contexts.Event.Input.Version} -m ""Release v{contexts.Event.Input.Version}""
+git push origin {component.TagPrefix}-{contexts.Event.Input.Version}");
+
+ foreach (var project in component.Projects)
+ {
+ tagJob.StepPack(project);
+ }
+
+ tagJob.StepToolRestore();
+
+ tagJob.StepSign();
+
+ tagJob.StepPush("MyGet", "https://www.myget.org/F/duende_identityserver/api/v2/package", "MYGET");
+
+ tagJob.StepPush("GitHub", "https://nuget.pkg.github.com/DuendeSoftware/index.json", "GITHUB_TOKEN")
+ .Env(("GITHUB_TOKEN", contexts.Secrets.GitHubToken),
+ ("NUGET_AUTH_TOKEN", contexts.Secrets.GitHubToken));
+
+ tagJob.StepUploadArtifacts(component.Name);
+
+ var publishJob = workflow.Job("publish")
+ .Name("Publish to nuget.org")
+ .RunsOn(GitHubHostedRunners.UbuntuLatest)
+ .Needs("tag")
+ .Environment("nuget.org", "");
+
+ publishJob.Step()
+ .Uses("actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16") // 4.1.8
+ .With(("name", "artifacts"), ("path", "artifacts"));
+
+ publishJob.StepSetupDotNet();
+
+ publishJob.Step()
+ .Name("List files")
+ .Shell("bash")
+ .Run("tree");
+
+ publishJob.StepPush("nuget.org", "https://api.nuget.org/v3/index.json", "NUGET_ORG_API_KEY");
+
+ var fileName = $"{component.Name}-release";
+ WriteWorkflow(workflow, fileName);
+}
+
+void WriteWorkflow(Workflow workflow, string fileName)
+{
+ var filePath = $"../workflows/{fileName}.yml";
+ workflow.WriteYaml(filePath);
+ Console.WriteLine($"Wrote workflow to {filePath}");
+}
+
+record Component(string Name, string[] Projects, string[] Tests, string TagPrefix);
+
+public static class StepExtensions
+{
+ public static void EnvDefaults(this Workflow workflow)
+ => workflow.Env(
+ ("DOTNET_NOLOGO", "true"),
+ ("DOTNET_CLI_TELEMETRY_OPTOUT", "true"));
+
+ public static void StepSetupDotNet(this Job job)
+ => job.Step()
+ .Name("Setup .NET")
+ .ActionsSetupDotNet("3e891b0cb619bf60e2c25674b222b8940e2c1c25", ["6.0.x", "8.0.x", "9.0.x"]); // v4.1.0
+
+ public static Step IfRefMain(this Step step)
+ => step.If("github.ref == 'refs/heads/main'");
+
+ public static void StepTestAndReport(this Job job, string componentName, string testProject)
+ {
+ var path = $"test/{testProject}";
+ var logFileName = "Tests.trx";
+ var flags = $"--logger \"console;verbosity=normal\" " +
+ $"--logger \"trx;LogFileName={logFileName}\" " +
+ $"--collect:\"XPlat Code Coverage\"";
+ job.Step()
+ .Name($"Test - {testProject}")
+ .Run($"dotnet test -c Release {path} {flags}");
+
+ job.Step()
+ .Name($"Test report - {testProject}")
+ .Uses("dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5") // v1.9.1
+ .If("success() || failure()")
+ .With(
+ ("name", $"Test Report - {testProject}"),
+ ("path", $"{componentName}/{path}/TestResults/{logFileName}"),
+ ("reporter", "dotnet-trx"),
+ ("fail-on-error", "true"),
+ ("fail-on-empty", "true"));
+ }
+
+ public static void StepToolRestore(this Job job)
+ => job.Step()
+ .Name("Tool restore")
+ .Run("dotnet tool restore");
+
+ public static void StepPack(this Job job, string project)
+ {
+ var path = $"src/{project}";
+ job.Step()
+ .Name($"Pack {project}")
+ .Run($"dotnet pack -c Release {path} -o artifacts");
+ }
+
+ public static void StepSign(this Job job)
+ {
+ var flags = "--file-digest sha256 " +
+ "--timestamp-rfc3161 http://timestamp.digicert.com " +
+ "--azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ " +
+ "--azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 " +
+ "--azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 " +
+ "--azure-key-vault-client-secret ${{ secrets.SignClientSecret }} " +
+ "--azure-key-vault-certificate NuGetPackageSigning";
+ job.Step()
+ .Name("Sign packages")
+ .Run($"""
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" {flags}
+ done
+ """);
+ }
+
+ public static Step StepPush(this Job job, string destination, string sourceUrl, string secretName)
+ {
+ var apiKey = $"${{{{ secrets.{secretName} }}}}";
+ return job.Step()
+ .Name($"Push packages to {destination}")
+ .IfRefMain()
+ .Run($"dotnet nuget push artifacts/*.nupkg --source {sourceUrl} --api-key {apiKey} --skip-duplicate");
+ }
+
+ public static void StepUploadArtifacts(this Job job, string componentName)
+ {
+ var path = $"{componentName}/artifacts/*.nupkg";
+ job.Step()
+ .Name("Upload Artifacts")
+ .IfRefMain()
+ .Uses("actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882") // 4.4.3
+ .With(
+ ("name", "artifacts"),
+ ("path", path),
+ ("overwrite", "true"),
+ ("retention-days", "15"));
+ }
+}
+
+public class GitHubContexts
+{
+ public static GitHubContexts Instance { get; } = new();
+ public virtual GitHubContext GitHub { get; } = new();
+ public virtual SecretsContext Secrets { get; } = new();
+ public virtual EventContext Event { get; } = new();
+
+ public abstract class Context(string name)
+ {
+ protected string Name => name;
+
+ protected string Expression(string s) => "${{ " + s + " }}";
+ }
+
+ public class GitHubContext() : Context("github")
+ {
+ }
+
+ public class SecretsContext() : Context("secrets")
+ {
+ public string GitHubToken => Expression($"{Name}.GITHUB_TOKEN");
+ }
+
+ public class EventContext() : Context("github.event")
+ {
+ public EventsInputContext Input { get; } = new ();
+ }
+
+ public class EventsInputContext() : Context("github.event.inputs")
+ {
+ public string Version => Expression($"{Name}.version");
+ }
+}
diff --git a/.github/workflow-gen/workflow-gen.csproj b/.github/workflow-gen/workflow-gen.csproj
new file mode 100644
index 000000000..555b52c92
--- /dev/null
+++ b/.github/workflow-gen/workflow-gen.csproj
@@ -0,0 +1,17 @@
+
+
+
+ Exe
+ net8.0
+ workflow_gen
+ enable
+ enable
+ false
+
+
+
+
+
+
+
+
diff --git a/.github/workflows/bff-ci.yml b/.github/workflows/bff-ci.yml
index 625817982..4335863e3 100644
--- a/.github/workflows/bff-ci.yml
+++ b/.github/workflows/bff-ci.yml
@@ -1,56 +1,122 @@
-name: "bff-ci"
+# This was generated by tool. Edits will be overwritten.
+name: bff/ci
on:
+ workflow_dispatch:
push:
- branches:
- - main
- - releases/bff/**
- paths:
- - 'bff/**'
- tags:
- - 'bff-*.*.*'
- pull_request:
- paths:
- - 'bff/**'
+ paths:
+ - .github/workflows/bff-**
+ - bff/**
+ - Directory.Packages.props
+ pull_request_target:
+ paths:
+ - .github/workflows/bff-**
+ - bff/**
+ - Directory.Packages.props
env:
DOTNET_NOLOGO: true
-
-permissions:
- contents: read
-
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
jobs:
build:
- strategy:
- fail-fast: false
- matrix:
- runs-on: [ubuntu-latest, windows-latest]
- name: ${{ matrix.runs-on }}
- runs-on: ${{ matrix.runs-on }}
+ name: Build
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ checks: write
+ contents: read
+ packages: write
defaults:
run:
+ shell: bash
working-directory: bff
+ timeout-minutes: 15
steps:
- - uses: actions/checkout@v2.4.0
+ - name: Checkout
+ uses: actions/checkout@v4
with:
fetch-depth: 0
-
- - name: Setup dotnet
- uses: actions/setup-dotnet@v4
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
with:
- dotnet-version: |
+ dotnet-version: |-
+ 6.0.x
8.0.x
9.0.x
-
- - run: dotnet --info
-
- - if: contains(matrix.runs-on, 'macOS') || contains(matrix.runs-on, 'ubuntu')
- run: ./build.sh
- - if: matrix.runs-on == 'windows-latest' && github.ref != 'refs/heads/main' && !contains(github.ref, 'refs/tags/')
- run: ./build.ps1
- - if: (matrix.runs-on == 'windows-latest') && (github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/'))
+ - name: Test - Duende.Bff.Tests
+ run: dotnet test -c Release test/Duende.Bff.Tests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - Duende.Bff.Tests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - Duende.Bff.Tests
+ path: bff/test/Duende.Bff.Tests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - Duende.Bff.EntityFramework.Tests
+ run: dotnet test -c Release test/Duende.Bff.EntityFramework.Tests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - Duende.Bff.EntityFramework.Tests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - Duende.Bff.EntityFramework.Tests
+ path: bff/test/Duende.Bff.EntityFramework.Tests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - Duende.Bff.Blazor.UnitTests
+ run: dotnet test -c Release test/Duende.Bff.Blazor.UnitTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - Duende.Bff.Blazor.UnitTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - Duende.Bff.Blazor.UnitTests
+ path: bff/test/Duende.Bff.Blazor.UnitTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - Duende.Bff.Blazor.Client.UnitTests
+ run: dotnet test -c Release test/Duende.Bff.Blazor.Client.UnitTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - Duende.Bff.Blazor.Client.UnitTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - Duende.Bff.Blazor.Client.UnitTests
+ path: bff/test/Duende.Bff.Blazor.Client.UnitTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Tool restore
+ run: dotnet tool restore
+ - name: Pack Duende.Bff
+ run: dotnet pack -c Release src/Duende.Bff -o artifacts
+ - name: Pack Duende.Bff.Blazor
+ run: dotnet pack -c Release src/Duende.Bff.Blazor -o artifacts
+ - name: Pack Duende.Bff.Blazor.Client
+ run: dotnet pack -c Release src/Duende.Bff.Blazor.Client -o artifacts
+ - name: Pack Duende.Bff.EntityFramework
+ run: dotnet pack -c Release src/Duende.Bff.EntityFramework -o artifacts
+ - name: Pack Duende.Bff.Yarp
+ run: dotnet pack -c Release src/Duende.Bff.Yarp -o artifacts
+ - name: Sign packages
+ run: |-
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" --file-digest sha256 --timestamp-rfc3161 http://timestamp.digicert.com --azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ --azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 --azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 --azure-key-vault-client-secret ${{ secrets.SignClientSecret }} --azure-key-vault-certificate NuGetPackageSigning
+ done
+ - name: Push packages to MyGet
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://www.myget.org/F/duende_identityserver/api/v2/package --api-key ${{ secrets.MYGET }} --skip-duplicate
+ - name: Push packages to GitHub
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://nuget.pkg.github.com/DuendeSoftware/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
env:
- SignClientSecret: ${{ secrets.SIGNCLIENTSECRET }}
- run: |
- ./build.ps1 sign
- dotnet nuget push .\artifacts\*.nupkg -s https://www.myget.org/F/duende_identityserver/api/v2/package -k ${{ secrets.MYGET }}
-
\ No newline at end of file
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Artifacts
+ if: github.ref == 'refs/heads/main'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: artifacts
+ path: bff/artifacts/*.nupkg
+ overwrite: true
+ retention-days: 15
diff --git a/.github/workflows/bff-release.yml b/.github/workflows/bff-release.yml
new file mode 100644
index 000000000..adfe56e56
--- /dev/null
+++ b/.github/workflows/bff-release.yml
@@ -0,0 +1,102 @@
+# This was generated by tool. Edits will be overwritten.
+
+name: bff/release
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'Version in format X.Y.Z or X.Y.Z-preview.'
+ type: string
+ required: true
+ default: '0.0.0'
+env:
+ DOTNET_NOLOGO: true
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
+jobs:
+ tag:
+ name: Tag and Pack
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ packages: write
+ defaults:
+ run:
+ shell: bash
+ working-directory: bff
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: Git tag
+ run: |-
+ git config --global user.email "github-bot@duendesoftware.com"
+ git config --global user.name "Duende Software GitHub Bot"
+ git tag -a bff-${{ github.event.inputs.version }} -m "Release v${{ github.event.inputs.version }}"
+ git push origin bff-${{ github.event.inputs.version }}
+ - name: Pack Duende.Bff
+ run: dotnet pack -c Release src/Duende.Bff -o artifacts
+ - name: Pack Duende.Bff.Blazor
+ run: dotnet pack -c Release src/Duende.Bff.Blazor -o artifacts
+ - name: Pack Duende.Bff.Blazor.Client
+ run: dotnet pack -c Release src/Duende.Bff.Blazor.Client -o artifacts
+ - name: Pack Duende.Bff.EntityFramework
+ run: dotnet pack -c Release src/Duende.Bff.EntityFramework -o artifacts
+ - name: Pack Duende.Bff.Yarp
+ run: dotnet pack -c Release src/Duende.Bff.Yarp -o artifacts
+ - name: Tool restore
+ run: dotnet tool restore
+ - name: Sign packages
+ run: |-
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" --file-digest sha256 --timestamp-rfc3161 http://timestamp.digicert.com --azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ --azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 --azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 --azure-key-vault-client-secret ${{ secrets.SignClientSecret }} --azure-key-vault-certificate NuGetPackageSigning
+ done
+ - name: Push packages to MyGet
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://www.myget.org/F/duende_identityserver/api/v2/package --api-key ${{ secrets.MYGET }} --skip-duplicate
+ - name: Push packages to GitHub
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://nuget.pkg.github.com/DuendeSoftware/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Artifacts
+ if: github.ref == 'refs/heads/main'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: artifacts
+ path: bff/artifacts/*.nupkg
+ overwrite: true
+ retention-days: 15
+ publish:
+ name: Publish to nuget.org
+ needs:
+ - tag
+ runs-on: ubuntu-latest
+ environment:
+ name: nuget.org
+ steps:
+ - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
+ with:
+ name: artifacts
+ path: artifacts
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: List files
+ run: tree
+ shell: bash
+ - name: Push packages to nuget.org
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_ORG_API_KEY }} --skip-duplicate
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 4bd0df044..8fdac8e62 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -1,66 +1,31 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-#
-name: "CodeQL"
+name: codeql
on:
- push:
- branches: [ main ]
- pull_request:
- # The branches below must be a subset of the branches above
- branches: [ main ]
schedule:
- - cron: '39 8 * * 1'
+ - cron: '38 15 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- language: [ 'csharp' ]
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
- # Learn more:
- # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
- defaults:
- run:
- working-directory: identity-server
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- - name: Setup dotnet
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: |
- 8.0.x
- 9.0.x
-
- - run: dotnet --info
-
- # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v3
+ uses: github/codeql-action/init@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # 3.27.4
with:
- languages: ${{ matrix.language }}
- tools: latest
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
+ languages: csharp
+
+ - name: Auto build
+ uses: github/codeql-action/autobuild@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # 3.27.4
- - run: ./build.sh codeql
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
+ - name: Perform CodeQL analysis
+ uses: github/codeql-action/analyze@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # 3.27.4
+ with:
+ category: "/language:csharp"
diff --git a/.github/workflows/identity-server-ci.yml b/.github/workflows/identity-server-ci.yml
index 03368cdaa..e5f61391e 100644
--- a/.github/workflows/identity-server-ci.yml
+++ b/.github/workflows/identity-server-ci.yml
@@ -1,57 +1,148 @@
-name: "identity-server-ci"
+# This was generated by tool. Edits will be overwritten.
+name: identity-server/ci
on:
- workflow_dispatch:
+ workflow_dispatch:
push:
- branches:
- - main
- - releases/is/**
- tags:
- - 'is-*.*.*'
- paths:
- - 'identity-server/**'
-
- pull_request:
- paths:
- - 'identity-server/**'
+ paths:
+ - .github/workflows/identity-server-**
+ - identity-server/**
+ - Directory.Packages.props
+ pull_request_target:
+ paths:
+ - .github/workflows/identity-server-**
+ - identity-server/**
+ - Directory.Packages.props
env:
DOTNET_NOLOGO: true
-
-permissions:
- contents: read
-
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
jobs:
build:
- strategy:
- fail-fast: false
- matrix:
- runs-on: [macOS-latest, ubuntu-latest, windows-latest]
- name: ${{ matrix.runs-on }}
- runs-on: ${{ matrix.runs-on }}
+ name: Build
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ checks: write
+ contents: read
+ packages: write
defaults:
run:
+ shell: bash
working-directory: identity-server
+ timeout-minutes: 15
steps:
- - uses: actions/checkout@v3
+ - name: Checkout
+ uses: actions/checkout@v4
with:
fetch-depth: 0
-
- - name: Setup dotnet (main)
- uses: actions/setup-dotnet@v4
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
with:
- dotnet-version: |
- 8.0.x
- 9.0.x
-
- - run: dotnet --info
-
- - if: contains(matrix.runs-on, 'macOS') || contains(matrix.runs-on, 'ubuntu')
- run: ./build.sh
- - if: matrix.runs-on == 'windows-latest' && github.ref != 'refs/heads/main' && !contains(github.ref, 'refs/tags/')
- run: ./build.ps1
- - if: (matrix.runs-on == 'windows-latest') && (github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/'))
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: Test - Configuration.IntegrationTests
+ run: dotnet test -c Release test/Configuration.IntegrationTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - Configuration.IntegrationTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - Configuration.IntegrationTests
+ path: identity-server/test/Configuration.IntegrationTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - EntityFramework.IntegrationTests
+ run: dotnet test -c Release test/EntityFramework.IntegrationTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - EntityFramework.IntegrationTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - EntityFramework.IntegrationTests
+ path: identity-server/test/EntityFramework.IntegrationTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - EntityFramework.Storage.IntegrationTests
+ run: dotnet test -c Release test/EntityFramework.Storage.IntegrationTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - EntityFramework.Storage.IntegrationTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - EntityFramework.Storage.IntegrationTests
+ path: identity-server/test/EntityFramework.Storage.IntegrationTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - EntityFramework.Storage.UnitTests
+ run: dotnet test -c Release test/EntityFramework.Storage.UnitTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - EntityFramework.Storage.UnitTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - EntityFramework.Storage.UnitTests
+ path: identity-server/test/EntityFramework.Storage.UnitTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - IdentityServer.IntegrationTests
+ run: dotnet test -c Release test/IdentityServer.IntegrationTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - IdentityServer.IntegrationTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - IdentityServer.IntegrationTests
+ path: identity-server/test/IdentityServer.IntegrationTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Test - IdentityServer.UnitTests
+ run: dotnet test -c Release test/IdentityServer.UnitTests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - IdentityServer.UnitTests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - IdentityServer.UnitTests
+ path: identity-server/test/IdentityServer.UnitTests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Tool restore
+ run: dotnet tool restore
+ - name: Pack AspNetIdentity
+ run: dotnet pack -c Release src/AspNetIdentity -o artifacts
+ - name: Pack Configuration
+ run: dotnet pack -c Release src/Configuration -o artifacts
+ - name: Pack Configuration.EntityFramework
+ run: dotnet pack -c Release src/Configuration.EntityFramework -o artifacts
+ - name: Pack EntityFramework
+ run: dotnet pack -c Release src/EntityFramework -o artifacts
+ - name: Pack EntityFramework.Storage
+ run: dotnet pack -c Release src/EntityFramework.Storage -o artifacts
+ - name: Pack IdentityServer
+ run: dotnet pack -c Release src/IdentityServer -o artifacts
+ - name: Pack Storage
+ run: dotnet pack -c Release src/Storage -o artifacts
+ - name: Sign packages
+ run: |-
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" --file-digest sha256 --timestamp-rfc3161 http://timestamp.digicert.com --azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ --azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 --azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 --azure-key-vault-client-secret ${{ secrets.SignClientSecret }} --azure-key-vault-certificate NuGetPackageSigning
+ done
+ - name: Push packages to MyGet
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://www.myget.org/F/duende_identityserver/api/v2/package --api-key ${{ secrets.MYGET }} --skip-duplicate
+ - name: Push packages to GitHub
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://nuget.pkg.github.com/DuendeSoftware/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
env:
- SignClientSecret: ${{ secrets.SIGNCLIENTSECRET }}
- run: |
- ./build.ps1 sign
- dotnet nuget push .\artifacts\*.nupkg -s https://www.myget.org/F/duende_identityserver/api/v2/package -k ${{ secrets.MYGET }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Artifacts
+ if: github.ref == 'refs/heads/main'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: artifacts
+ path: identity-server/artifacts/*.nupkg
+ overwrite: true
+ retention-days: 15
diff --git a/.github/workflows/identity-server-release.yml b/.github/workflows/identity-server-release.yml
new file mode 100644
index 000000000..4c7ba0f8d
--- /dev/null
+++ b/.github/workflows/identity-server-release.yml
@@ -0,0 +1,106 @@
+# This was generated by tool. Edits will be overwritten.
+
+name: identity-server/release
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'Version in format X.Y.Z or X.Y.Z-preview.'
+ type: string
+ required: true
+ default: '0.0.0'
+env:
+ DOTNET_NOLOGO: true
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
+jobs:
+ tag:
+ name: Tag and Pack
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ packages: write
+ defaults:
+ run:
+ shell: bash
+ working-directory: identity-server
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: Git tag
+ run: |-
+ git config --global user.email "github-bot@duendesoftware.com"
+ git config --global user.name "Duende Software GitHub Bot"
+ git tag -a is-${{ github.event.inputs.version }} -m "Release v${{ github.event.inputs.version }}"
+ git push origin is-${{ github.event.inputs.version }}
+ - name: Pack AspNetIdentity
+ run: dotnet pack -c Release src/AspNetIdentity -o artifacts
+ - name: Pack Configuration
+ run: dotnet pack -c Release src/Configuration -o artifacts
+ - name: Pack Configuration.EntityFramework
+ run: dotnet pack -c Release src/Configuration.EntityFramework -o artifacts
+ - name: Pack EntityFramework
+ run: dotnet pack -c Release src/EntityFramework -o artifacts
+ - name: Pack EntityFramework.Storage
+ run: dotnet pack -c Release src/EntityFramework.Storage -o artifacts
+ - name: Pack IdentityServer
+ run: dotnet pack -c Release src/IdentityServer -o artifacts
+ - name: Pack Storage
+ run: dotnet pack -c Release src/Storage -o artifacts
+ - name: Tool restore
+ run: dotnet tool restore
+ - name: Sign packages
+ run: |-
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" --file-digest sha256 --timestamp-rfc3161 http://timestamp.digicert.com --azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ --azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 --azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 --azure-key-vault-client-secret ${{ secrets.SignClientSecret }} --azure-key-vault-certificate NuGetPackageSigning
+ done
+ - name: Push packages to MyGet
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://www.myget.org/F/duende_identityserver/api/v2/package --api-key ${{ secrets.MYGET }} --skip-duplicate
+ - name: Push packages to GitHub
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://nuget.pkg.github.com/DuendeSoftware/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Artifacts
+ if: github.ref == 'refs/heads/main'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: artifacts
+ path: identity-server/artifacts/*.nupkg
+ overwrite: true
+ retention-days: 15
+ publish:
+ name: Publish to nuget.org
+ needs:
+ - tag
+ runs-on: ubuntu-latest
+ environment:
+ name: nuget.org
+ steps:
+ - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
+ with:
+ name: artifacts
+ path: artifacts
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: List files
+ run: tree
+ shell: bash
+ - name: Push packages to nuget.org
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_ORG_API_KEY }} --skip-duplicate
diff --git a/.github/workflows/ignore-this-ci.yml b/.github/workflows/ignore-this-ci.yml
new file mode 100644
index 000000000..6aa0698eb
--- /dev/null
+++ b/.github/workflows/ignore-this-ci.yml
@@ -0,0 +1,81 @@
+# This was generated by tool. Edits will be overwritten.
+
+name: ignore-this/ci
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - .github/workflows/ignore-this-**
+ - ignore-this/**
+ - Directory.Packages.props
+ pull_request_target:
+ paths:
+ - .github/workflows/ignore-this-**
+ - ignore-this/**
+ - Directory.Packages.props
+env:
+ DOTNET_NOLOGO: true
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
+jobs:
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ checks: write
+ contents: read
+ packages: write
+ defaults:
+ run:
+ shell: bash
+ working-directory: ignore-this
+ timeout-minutes: 15
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: Test - IgnoreThis.Tests
+ run: dotnet test -c Release test/IgnoreThis.Tests --logger "console;verbosity=normal" --logger "trx;LogFileName=Tests.trx" --collect:"XPlat Code Coverage"
+ - name: Test report - IgnoreThis.Tests
+ if: success() || failure()
+ uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5
+ with:
+ name: Test Report - IgnoreThis.Tests
+ path: ignore-this/test/IgnoreThis.Tests/TestResults/Tests.trx
+ reporter: dotnet-trx
+ fail-on-error: true
+ fail-on-empty: true
+ - name: Tool restore
+ run: dotnet tool restore
+ - name: Pack IgnoreThis
+ run: dotnet pack -c Release src/IgnoreThis -o artifacts
+ - name: Sign packages
+ run: |-
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" --file-digest sha256 --timestamp-rfc3161 http://timestamp.digicert.com --azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ --azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 --azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 --azure-key-vault-client-secret ${{ secrets.SignClientSecret }} --azure-key-vault-certificate NuGetPackageSigning
+ done
+ - name: Push packages to MyGet
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://www.myget.org/F/duende_identityserver/api/v2/package --api-key ${{ secrets.MYGET }} --skip-duplicate
+ - name: Push packages to GitHub
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://nuget.pkg.github.com/DuendeSoftware/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Artifacts
+ if: github.ref == 'refs/heads/main'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: artifacts
+ path: ignore-this/artifacts/*.nupkg
+ overwrite: true
+ retention-days: 15
diff --git a/.github/workflows/ignore-this-release.yml b/.github/workflows/ignore-this-release.yml
new file mode 100644
index 000000000..175da624a
--- /dev/null
+++ b/.github/workflows/ignore-this-release.yml
@@ -0,0 +1,94 @@
+# This was generated by tool. Edits will be overwritten.
+
+name: ignore-this/release
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'Version in format X.Y.Z or X.Y.Z-preview.'
+ type: string
+ required: true
+ default: '0.0.0'
+env:
+ DOTNET_NOLOGO: true
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
+jobs:
+ tag:
+ name: Tag and Pack
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ packages: write
+ defaults:
+ run:
+ shell: bash
+ working-directory: ignore-this
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: Git tag
+ run: |-
+ git config --global user.email "github-bot@duendesoftware.com"
+ git config --global user.name "Duende Software GitHub Bot"
+ git tag -a it-${{ github.event.inputs.version }} -m "Release v${{ github.event.inputs.version }}"
+ git push origin it-${{ github.event.inputs.version }}
+ - name: Pack IgnoreThis
+ run: dotnet pack -c Release src/IgnoreThis -o artifacts
+ - name: Tool restore
+ run: dotnet tool restore
+ - name: Sign packages
+ run: |-
+ for file in artifacts/*.nupkg; do
+ dotnet NuGetKeyVaultSignTool sign "$file" --file-digest sha256 --timestamp-rfc3161 http://timestamp.digicert.com --azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ --azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 --azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 --azure-key-vault-client-secret ${{ secrets.SignClientSecret }} --azure-key-vault-certificate NuGetPackageSigning
+ done
+ - name: Push packages to MyGet
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://www.myget.org/F/duende_identityserver/api/v2/package --api-key ${{ secrets.MYGET }} --skip-duplicate
+ - name: Push packages to GitHub
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://nuget.pkg.github.com/DuendeSoftware/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Artifacts
+ if: github.ref == 'refs/heads/main'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: artifacts
+ path: ignore-this/artifacts/*.nupkg
+ overwrite: true
+ retention-days: 15
+ publish:
+ name: Publish to nuget.org
+ needs:
+ - tag
+ runs-on: ubuntu-latest
+ environment:
+ name: nuget.org
+ steps:
+ - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
+ with:
+ name: artifacts
+ path: artifacts
+ - name: Setup Dotnet
+ uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25
+ with:
+ dotnet-version: |-
+ 6.0.x
+ 8.0.x
+ 9.0.x
+ - name: List files
+ run: tree
+ shell: bash
+ - name: Push packages to nuget.org
+ if: github.ref == 'refs/heads/main'
+ run: dotnet nuget push artifacts/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_ORG_API_KEY }} --skip-duplicate
diff --git a/identity-server/.gitignore b/.gitignore
similarity index 100%
rename from identity-server/.gitignore
rename to .gitignore
diff --git a/Directory.Packages.props b/Directory.Packages.props
new file mode 100644
index 000000000..2d22b53a4
--- /dev/null
+++ b/Directory.Packages.props
@@ -0,0 +1,121 @@
+
+
+ 8.0.1
+
+ 8.0.11
+ 7.1.0
+ 8.0.1
+ 1.11.0
+ 7.1.2
+ 2.1.0
+
+
+
+ 9.0.0
+ 9.0.0
+ 7.1.0
+ 9.0.0
+ 1.11.0
+ 8.0.1
+ 2.1.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/identity-server/LICENSE b/LICENSE
similarity index 52%
rename from identity-server/LICENSE
rename to LICENSE
index 887bc4269..911c997df 100644
--- a/identity-server/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-By accessing the Duende IdentityServer code here, you are agreeing to the following licensing terms:
+By accessing the Duende Products code here, you are agreeing to the following licensing terms:
https://duendesoftware.com/license
diff --git a/bff/.gitignore b/bff/.gitignore
deleted file mode 100644
index f1f3c6fe4..000000000
--- a/bff/.gitignore
+++ /dev/null
@@ -1,223 +0,0 @@
-# MacOs
-.DS_Store
-
-# Rider
-.idea
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-
-bld/
-[Bb]in/
-[Oo]bj/
-
-# Visual Studio 2015 cache/options directory
-.vs/
-project.lock.json
-
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opensdf
-*.sdf
-*.cachefile
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding addin-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-
-# Windows Azure Build Output
-csx/
-*.build.csdef
-
-# Windows Store app package directory
-AppPackages/
-
-# Others
-*.[Cc]ache
-ClientBin/
-[Ss]tyle[Cc]op.*
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.publishsettings
-node_modules/
-bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-docs/_build/
-
-# Local .NET CLI tools
-tools/
-
-# Visual Studio Code workspace options
-**/.vscode/settings.json
-
-# IdentityServer temp files
-identityserver4_log.txt
-tempkey.rsa
-samples/KeyManagement/FileSystem/dataprotectionkeys/
-samples/KeyManagement/FileSystem/signingkeys/
-workspace.xml
-
-src/IdentityServer4/host/identityserver.db
-tempkey.jwk
-keys
-*.key
-Duende.BFF.db
-*.db-shm
-*.db-wal
-.vs/
\ No newline at end of file
diff --git a/bff/Directory.Build.props b/bff/Directory.Build.props
deleted file mode 100644
index ec3c6ae29..000000000
--- a/bff/Directory.Build.props
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
- OAuth 2.0;OpenID Connect;Security;BFF;IdentityServer;ASP.NET Core;SPA;Blazor
- Duende Software
- Duende Software
- Duende Software
- Duende BFF
-
- true
- LICENSE
-
- icon.png
- https://github.com/DuendeSoftware/BFF
- https://github.com/DuendeSoftware/BFF/releases
-
- true
- true
- embedded
-
- True
-
-
-
-
-
-
-
-
- minor
- bff-
-
-
\ No newline at end of file
diff --git a/bff/Directory.Build.targets b/bff/Directory.Build.targets
deleted file mode 100644
index 41ec5256c..000000000
--- a/bff/Directory.Build.targets
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
- 8.0.1
-
- 8.0.11
- 7.1.0-rc.1
- 8.0.1
- 2.1.0
-
-
-
- 9.0.0
- 9.0.0
- 7.1.0-rc.1
- 9.0.0
- 2.1.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(MinVerMajor).$(MinVerMinor).$(MinVerPatch).0
-
-
-
diff --git a/bff/Duende.Bff.sln b/bff/Duende.Bff.sln
index a0eb54e42..4c5973cc2 100644
--- a/bff/Duende.Bff.sln
+++ b/bff/Duende.Bff.sln
@@ -67,8 +67,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hosts.ServiceDefaults", "sa
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hosts.Tests", "samples\Hosts.Tests\Hosts.Tests.csproj", "{A0B771BA-ACF9-4DE2-A2A6-430F6E6E8C07}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "build", "build\build.csproj", "{E083402C-EB22-4F8A-BFD6-A4F448678376}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -367,18 +365,6 @@ Global
{A0B771BA-ACF9-4DE2-A2A6-430F6E6E8C07}.Release|x64.Build.0 = Release|Any CPU
{A0B771BA-ACF9-4DE2-A2A6-430F6E6E8C07}.Release|x86.ActiveCfg = Release|Any CPU
{A0B771BA-ACF9-4DE2-A2A6-430F6E6E8C07}.Release|x86.Build.0 = Release|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Debug|x64.ActiveCfg = Debug|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Debug|x64.Build.0 = Debug|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Debug|x86.ActiveCfg = Debug|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Debug|x86.Build.0 = Debug|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Release|Any CPU.Build.0 = Release|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Release|x64.ActiveCfg = Release|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Release|x64.Build.0 = Release|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Release|x86.ActiveCfg = Release|Any CPU
- {E083402C-EB22-4F8A-BFD6-A4F448678376}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/bff/LICENSE b/bff/LICENSE
deleted file mode 100644
index 4930fe176..000000000
--- a/bff/LICENSE
+++ /dev/null
@@ -1,5 +0,0 @@
-By accessing the Duende BFF code here, you are agreeing to the following licensing terms:
-
-https://duendesoftware.com/license/SoftwareLicense.pdf
-
-If you do not agree to these terms, do not access the Duende BFF code.
diff --git a/bff/build/Program.cs b/bff/build/Program.cs
deleted file mode 100644
index ed1088180..000000000
--- a/bff/build/Program.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Threading.Tasks;
-
-using static Bullseye.Targets;
-using static SimpleExec.Command;
-
-namespace build
-{
- internal static class Program
- {
- private const string PackOutput = "./artifacts";
- private const string EnvVarMissing = " environment variable is missing. Aborting.";
-
- private static class Targets
- {
- public const string RestoreTools = "restore-tools";
- public const string CleanBuildOutput = "clean-build-output";
- public const string CleanPackOutput = "clean-pack-output";
- public const string Build = "build";
- public const string Test = "test";
- public const string Pack = "pack";
- public const string SignPackage = "sign-package";
- }
-
- internal static async Task Main(string[] args)
- {
- Target(Targets.RestoreTools, () =>
- {
- Run("dotnet", "tool restore");
- });
-
- Target(Targets.CleanBuildOutput, () =>
- {
- Run("dotnet", "clean -c Release -v m --nologo");
- });
-
- Target(Targets.Build, DependsOn(Targets.CleanBuildOutput), () =>
- {
- Run("dotnet", "build -c Release --nologo");
- });
-
- Target(Targets.Test, DependsOn(Targets.Build), () =>
- {
- // Only running the tests on linux on the build agents because trusting the SSL Cert doesn't work there.
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
- {
- Run("dotnet", "dev-certs https --trust");
- Run("dotnet", "test -c Release --no-build --nologo");
- }
- else
- {
- Console.WriteLine("Skipping tests on windows and mac-os");
- }
- });
-
- Target(Targets.CleanPackOutput, () =>
- {
- if (Directory.Exists(PackOutput))
- {
- Directory.Delete(PackOutput, true);
- }
- });
-
- Target(Targets.Pack, DependsOn(Targets.Build, Targets.CleanPackOutput), () =>
- {
- Run("dotnet", $"pack ./src/Duende.Bff/Duende.Bff.csproj -c Release -o {Directory.CreateDirectory(PackOutput).FullName} --no-build --nologo");
- Run("dotnet", $"pack ./src/Duende.Bff.EntityFramework/Duende.Bff.EntityFramework.csproj -c Release -o {Directory.CreateDirectory(PackOutput).FullName} --no-build --nologo");
- Run("dotnet", $"pack ./src/Duende.Bff.Yarp/Duende.Bff.Yarp.csproj -c Release -o {Directory.CreateDirectory(PackOutput).FullName} --no-build --nologo");
- Run("dotnet", $"pack ./src/Duende.Bff.Blazor/Duende.Bff.Blazor.csproj -c Release -o {Directory.CreateDirectory(PackOutput).FullName} --no-build --nologo");
- Run("dotnet", $"pack ./src/Duende.Bff.Blazor.Client/Duende.Bff.Blazor.Client.csproj -c Release -o {Directory.CreateDirectory(PackOutput).FullName} --no-build --nologo");
- });
-
- Target(Targets.SignPackage, DependsOn(Targets.Pack, Targets.RestoreTools), () =>
- {
- SignNuGet();
- });
-
- Target("default", DependsOn(Targets.Test, Targets.Pack));
-
- Target("sign", DependsOn(Targets.Test, Targets.SignPackage));
-
- await RunTargetsAndExitAsync(args, ex => ex is SimpleExec.ExitCodeException || ex.Message.EndsWith(EnvVarMissing));
- }
-
- private static void SignNuGet()
- {
- var signClientSecret = Environment.GetEnvironmentVariable("SignClientSecret");
-
- if (string.IsNullOrWhiteSpace(signClientSecret))
- {
- throw new Exception($"SignClientSecret{EnvVarMissing}");
- }
-
- foreach (var file in Directory.GetFiles(PackOutput, "*.nupkg", SearchOption.AllDirectories))
- {
- Console.WriteLine($" Signing {file}");
-
- Run("dotnet",
- "NuGetKeyVaultSignTool " +
- $"sign {file} " +
- "--file-digest sha256 " +
- "--timestamp-rfc3161 http://timestamp.digicert.com " +
- "--azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ " +
- "--azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 " +
- "--azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 " +
- $"--azure-key-vault-client-secret {signClientSecret} " +
- "--azure-key-vault-certificate NuGetPackageSigning"
- ,noEcho: true);
- }
- }
- }
-}
diff --git a/bff/build/build.csproj b/bff/build/build.csproj
deleted file mode 100644
index 5fc82dcae..000000000
--- a/bff/build/build.csproj
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- Exe
- net8.0
-
-
-
-
-
-
-
-
diff --git a/bff/migrations/Directory.Build.props b/bff/migrations/Directory.Build.props
new file mode 100644
index 000000000..90f2c11d2
--- /dev/null
+++ b/bff/migrations/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/bff/migrations/UserSessionDb/UserSessionDb.csproj b/bff/migrations/UserSessionDb/UserSessionDb.csproj
index c844137cf..3f8805859 100644
--- a/bff/migrations/UserSessionDb/UserSessionDb.csproj
+++ b/bff/migrations/UserSessionDb/UserSessionDb.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
diff --git a/bff/nuget.config b/bff/nuget.config
deleted file mode 100644
index bcbaa645b..000000000
--- a/bff/nuget.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/bff/samples/Apis/Api.DPoP/Api.DPoP.csproj b/bff/samples/Apis/Api.DPoP/Api.DPoP.csproj
index 90e7f4fc0..2883f6494 100644
--- a/bff/samples/Apis/Api.DPoP/Api.DPoP.csproj
+++ b/bff/samples/Apis/Api.DPoP/Api.DPoP.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/bff/samples/Apis/Api.Isolated/Api.Isolated.csproj b/bff/samples/Apis/Api.Isolated/Api.Isolated.csproj
index b5be3be2c..b2509050d 100644
--- a/bff/samples/Apis/Api.Isolated/Api.Isolated.csproj
+++ b/bff/samples/Apis/Api.Isolated/Api.Isolated.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
diff --git a/bff/samples/Apis/Api/Api.csproj b/bff/samples/Apis/Api/Api.csproj
index 29cf3a0f8..2a3759d6f 100644
--- a/bff/samples/Apis/Api/Api.csproj
+++ b/bff/samples/Apis/Api/Api.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
diff --git a/bff/samples/Bff.DPoP/Bff.DPoP.csproj b/bff/samples/Bff.DPoP/Bff.DPoP.csproj
index 054162b59..830646dd9 100644
--- a/bff/samples/Bff.DPoP/Bff.DPoP.csproj
+++ b/bff/samples/Bff.DPoP/Bff.DPoP.csproj
@@ -1,14 +1,14 @@
- net9.0
+ net9.0
Bff.DPoP
enable
-
-
+
+
diff --git a/bff/samples/Bff.EF/Bff.EF.csproj b/bff/samples/Bff.EF/Bff.EF.csproj
index b68445a73..780f41f3e 100644
--- a/bff/samples/Bff.EF/Bff.EF.csproj
+++ b/bff/samples/Bff.EF/Bff.EF.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
Bff.EF
diff --git a/bff/samples/Bff/Bff.csproj b/bff/samples/Bff/Bff.csproj
index 7225227df..9e8d5e1cf 100644
--- a/bff/samples/Bff/Bff.csproj
+++ b/bff/samples/Bff/Bff.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/bff/samples/Blazor/PerComponent/PerComponent.Client/PerComponent.Client.csproj b/bff/samples/Blazor/PerComponent/PerComponent.Client/PerComponent.Client.csproj
index fe2ed8f9d..4d9826be9 100644
--- a/bff/samples/Blazor/PerComponent/PerComponent.Client/PerComponent.Client.csproj
+++ b/bff/samples/Blazor/PerComponent/PerComponent.Client/PerComponent.Client.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
enable
enable
true
diff --git a/bff/samples/Blazor/PerComponent/PerComponent/PerComponent.csproj b/bff/samples/Blazor/PerComponent/PerComponent/PerComponent.csproj
index 97ca42fdc..95a615e69 100644
--- a/bff/samples/Blazor/PerComponent/PerComponent/PerComponent.csproj
+++ b/bff/samples/Blazor/PerComponent/PerComponent/PerComponent.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
enable
enable
diff --git a/bff/samples/Blazor/WebAssembly/WebAssembly.Client/WebAssembly.Client.csproj b/bff/samples/Blazor/WebAssembly/WebAssembly.Client/WebAssembly.Client.csproj
index cf558d9e4..8b227fcbe 100644
--- a/bff/samples/Blazor/WebAssembly/WebAssembly.Client/WebAssembly.Client.csproj
+++ b/bff/samples/Blazor/WebAssembly/WebAssembly.Client/WebAssembly.Client.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
enable
enable
true
diff --git a/bff/samples/Blazor/WebAssembly/WebAssembly/WebAssembly.csproj b/bff/samples/Blazor/WebAssembly/WebAssembly/WebAssembly.csproj
index 454355895..6a4527e95 100644
--- a/bff/samples/Blazor/WebAssembly/WebAssembly/WebAssembly.csproj
+++ b/bff/samples/Blazor/WebAssembly/WebAssembly/WebAssembly.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
enable
enable
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/bff/samples/Directory.Build.props b/bff/samples/Directory.Build.props
new file mode 100644
index 000000000..90f2c11d2
--- /dev/null
+++ b/bff/samples/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/bff/samples/Hosts.AppHost/Hosts.AppHost.csproj b/bff/samples/Hosts.AppHost/Hosts.AppHost.csproj
index 6949be189..047214201 100644
--- a/bff/samples/Hosts.AppHost/Hosts.AppHost.csproj
+++ b/bff/samples/Hosts.AppHost/Hosts.AppHost.csproj
@@ -4,7 +4,7 @@
Exe
- net9.0
+ net9.0
enable
enable
true
@@ -12,7 +12,8 @@
-
+
+
diff --git a/bff/samples/Hosts.ServiceDefaults/Hosts.ServiceDefaults.csproj b/bff/samples/Hosts.ServiceDefaults/Hosts.ServiceDefaults.csproj
index db1591a34..212e07774 100644
--- a/bff/samples/Hosts.ServiceDefaults/Hosts.ServiceDefaults.csproj
+++ b/bff/samples/Hosts.ServiceDefaults/Hosts.ServiceDefaults.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net9.0
enable
enable
true
@@ -10,13 +10,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/bff/samples/Hosts.Tests/Hosts.Tests.csproj b/bff/samples/Hosts.Tests/Hosts.Tests.csproj
index 84f40e9ac..be9739cca 100644
--- a/bff/samples/Hosts.Tests/Hosts.Tests.csproj
+++ b/bff/samples/Hosts.Tests/Hosts.Tests.csproj
@@ -22,8 +22,6 @@
-
-
diff --git a/bff/samples/IdentityServer/IdentityServer.csproj b/bff/samples/IdentityServer/IdentityServer.csproj
index 82f82d412..8bceb8923 100644
--- a/bff/samples/IdentityServer/IdentityServer.csproj
+++ b/bff/samples/IdentityServer/IdentityServer.csproj
@@ -1,14 +1,14 @@
- net9.0
+ net9.0
true
-
+
diff --git a/bff/src/Directory.Build.props b/bff/src/Directory.Build.props
new file mode 100644
index 000000000..9c81b29cd
--- /dev/null
+++ b/bff/src/Directory.Build.props
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ OAuth 2.0;OpenID Connect;Security;BFF;IdentityServer;ASP.NET Core;SPA;Blazor
+ Duende BFF
+ bff-
+ 2.3
+
+
+
diff --git a/bff/src/Duende.Bff.Blazor.Client/Duende.Bff.Blazor.Client.csproj b/bff/src/Duende.Bff.Blazor.Client/Duende.Bff.Blazor.Client.csproj
index a3da2a6a3..83be62b93 100644
--- a/bff/src/Duende.Bff.Blazor.Client/Duende.Bff.Blazor.Client.csproj
+++ b/bff/src/Duende.Bff.Blazor.Client/Duende.Bff.Blazor.Client.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net8.0
enable
enable
@@ -16,8 +16,7 @@
-
-
+
diff --git a/bff/src/Duende.Bff.Blazor.Client/ServiceCollectionExtensions.cs b/bff/src/Duende.Bff.Blazor.Client/ServiceCollectionExtensions.cs
index f4f4498e9..ec280f25b 100644
--- a/bff/src/Duende.Bff.Blazor.Client/ServiceCollectionExtensions.cs
+++ b/bff/src/Duende.Bff.Blazor.Client/ServiceCollectionExtensions.cs
@@ -14,6 +14,7 @@ public static class ServiceCollectionExtensions
///
/// Adds Duende.BFF services to a Blazor Client (wasm) application.
///
+ /// The service collection.
/// A callback used to set .
public static IServiceCollection AddBffBlazorClient(this IServiceCollection services,
Action? configureAction = null)
@@ -124,6 +125,7 @@ public static class ServiceCollectionExtensions
/// Adds a named for use when invoking remote APIs
/// proxied through Duende.Bff and configures the client with a callback.
///
+ /// The service collection.
/// The name of that to
/// configure. A common use case is to use the same named client in multiple
/// render contexts that are automatically switched between via interactive
@@ -143,6 +145,7 @@ public static class ServiceCollectionExtensions
/// proxied through Duende.Bff and configures the client with a callback
/// that has access to the underlying service provider.
///
+ /// The service collection.
/// The name of that to
/// configure. A common use case is to use the same named client in multiple
/// render contexts that are automatically switched between via interactive
@@ -161,11 +164,7 @@ public static class ServiceCollectionExtensions
/// Adds a typed for use when invoking remote APIs
/// proxied through Duende.Bff and configures the client with a callback.
///
- /// The name of that to
- /// configure. A common use case is to use the same named client in multiple
- /// render contexts that are automatically switched between via interactive
- /// render modes. In that case, ensure both the client and server project
- /// define the HttpClient appropriately.
+ /// The service collection.
/// A configuration callback used to set up
/// the .
public static IHttpClientBuilder AddRemoteApiHttpClient(this IServiceCollection services,
@@ -181,11 +180,7 @@ public static class ServiceCollectionExtensions
/// proxied through Duende.Bff and configures the client with a callback
/// that has access to the underlying service provider.
///
- /// The name of that to
- /// configure. A common use case is to use the same named client in multiple
- /// render contexts that are automatically switched between via interactive
- /// render modes. In that case, ensure both the client and server project
- /// define the HttpClient appropriately.
+ /// The service collection.
/// A configuration callback used to set up
/// the .
public static IHttpClientBuilder AddRemoteApiHttpClient(this IServiceCollection services,
diff --git a/bff/src/Duende.Bff.EntityFramework/Duende.Bff.EntityFramework.csproj b/bff/src/Duende.Bff.EntityFramework/Duende.Bff.EntityFramework.csproj
index 2759c66c3..b516a3bcd 100644
--- a/bff/src/Duende.Bff.EntityFramework/Duende.Bff.EntityFramework.csproj
+++ b/bff/src/Duende.Bff.EntityFramework/Duende.Bff.EntityFramework.csproj
@@ -2,18 +2,11 @@
net8.0;net9.0
- true
- latest
Duende.BFF.EntityFramework
Entity Framework Core support for backend for frontend (BFF) host for ASP.NET Core
- README.md
-
-
-
-
diff --git a/bff/src/Duende.Bff.Yarp/Duende.Bff.Yarp.csproj b/bff/src/Duende.Bff.Yarp/Duende.Bff.Yarp.csproj
index e3f1a12f3..000e6f175 100644
--- a/bff/src/Duende.Bff.Yarp/Duende.Bff.Yarp.csproj
+++ b/bff/src/Duende.Bff.Yarp/Duende.Bff.Yarp.csproj
@@ -1,18 +1,11 @@
net8.0;net9.0
- true
- latest
enable
Duende.BFF.Yarp
Backend for frontend (BFF) host for ASP.NET Core (YARP integration)
- README.md
-
-
-
-
diff --git a/bff/src/Duende.Bff/Duende.Bff.csproj b/bff/src/Duende.Bff/Duende.Bff.csproj
index 62d21fb60..90f13e442 100644
--- a/bff/src/Duende.Bff/Duende.Bff.csproj
+++ b/bff/src/Duende.Bff/Duende.Bff.csproj
@@ -2,18 +2,11 @@
net8.0;net9.0
- true
- latest
enable
Duende.BFF
Backend for frontend (BFF) host for ASP.NET Core
- README.md
-
-
-
-
diff --git a/bff/test/Directory.Build.props b/bff/test/Directory.Build.props
new file mode 100644
index 000000000..e1c6ae89d
--- /dev/null
+++ b/bff/test/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/bff/test/Duende.Bff.Blazor.Client.UnitTests/Duende.Bff.Blazor.Client.UnitTests.csproj b/bff/test/Duende.Bff.Blazor.Client.UnitTests/Duende.Bff.Blazor.Client.UnitTests.csproj
index cabd2e4b1..9a4c379af 100644
--- a/bff/test/Duende.Bff.Blazor.Client.UnitTests/Duende.Bff.Blazor.Client.UnitTests.csproj
+++ b/bff/test/Duende.Bff.Blazor.Client.UnitTests/Duende.Bff.Blazor.Client.UnitTests.csproj
@@ -11,13 +11,8 @@
-
-
-
-
-
-
-
+
+
diff --git a/bff/test/Duende.Bff.Blazor.UnitTests/Duende.Bff.Blazor.UnitTests.csproj b/bff/test/Duende.Bff.Blazor.UnitTests/Duende.Bff.Blazor.UnitTests.csproj
index f158ad223..d027c49db 100644
--- a/bff/test/Duende.Bff.Blazor.UnitTests/Duende.Bff.Blazor.UnitTests.csproj
+++ b/bff/test/Duende.Bff.Blazor.UnitTests/Duende.Bff.Blazor.UnitTests.csproj
@@ -11,12 +11,7 @@
-
-
-
-
-
-
+
diff --git a/bff/test/Duende.Bff.EntityFramework.Tests/Duende.Bff.EntityFramework.Tests.csproj b/bff/test/Duende.Bff.EntityFramework.Tests/Duende.Bff.EntityFramework.Tests.csproj
index c31d5220d..7d2106e19 100644
--- a/bff/test/Duende.Bff.EntityFramework.Tests/Duende.Bff.EntityFramework.Tests.csproj
+++ b/bff/test/Duende.Bff.EntityFramework.Tests/Duende.Bff.EntityFramework.Tests.csproj
@@ -6,18 +6,6 @@
-
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
diff --git a/bff/test/Duende.Bff.Tests/Duende.Bff.Tests.csproj b/bff/test/Duende.Bff.Tests/Duende.Bff.Tests.csproj
index 580618fbd..ced6d6f2a 100644
--- a/bff/test/Duende.Bff.Tests/Duende.Bff.Tests.csproj
+++ b/bff/test/Duende.Bff.Tests/Duende.Bff.Tests.csproj
@@ -5,20 +5,8 @@
enable
True
-
+
-
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
diff --git a/bff/icon.png b/icon.png
similarity index 100%
rename from bff/icon.png
rename to icon.png
diff --git a/identity-server/Directory.Build.props b/identity-server/Directory.Build.props
deleted file mode 100644
index 6173254c0..000000000
--- a/identity-server/Directory.Build.props
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
- OAuth 2.0;OpenID Connect;Security;Identity;IdentityServer;ASP.NET Core
- Duende Software
- Duende Software
- Duende Software
- Duende IdentityServer
-
- true
-
- true
- LICENSE
-
- icon.png
- https://github.com/DuendeSoftware/IdentityServer
- https://github.com/DuendeSoftware/IdentityServer/releases
-
- true
- true
- embedded
-
- True
-
-
-
-
-
-
-
-
- minor
- is-
- True
-
-
\ No newline at end of file
diff --git a/identity-server/Directory.Build.targets b/identity-server/Directory.Build.targets
deleted file mode 100644
index 7b3436797..000000000
--- a/identity-server/Directory.Build.targets
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
- 8.0.10
- 8.0.1
- 8.0.10
- 7.1.2
-
-
-
- 9.0.0
- 9.0.0
- 9.0.0
- 8.0.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(MinVerMajor).$(MinVerMinor).$(MinVerPatch).0
-
-
-
diff --git a/identity-server/build/Program.cs b/identity-server/build/Program.cs
deleted file mode 100644
index b1ab48dfb..000000000
--- a/identity-server/build/Program.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) Duende Software. All rights reserved.
-// See LICENSE in the project root for license information.
-
-
-using System;
-using System.IO;
-using System.Threading.Tasks;
-
-using static Bullseye.Targets;
-using static SimpleExec.Command;
-
-namespace build
-{
- internal static class Program
- {
- private const string solution = "Duende.IdentityServer.sln";
- private const string solutionCodeQL = "Duende.IdentityServer.CodeQL.sln";
- private const string packOutput = "./artifacts";
- private const string envVarMissing = " environment variable is missing. Aborting.";
-
- private static class Targets
- {
- public const string RestoreTools = "restore-tools";
- public const string CleanBuildOutput = "clean-build-output";
- public const string CleanPackOutput = "clean-pack-output";
- public const string Build = "build";
- public const string CodeQL = "codeql";
- public const string Test = "test";
- public const string Pack = "pack";
- public const string SignPackage = "sign-package";
- }
-
- static async Task Main(string[] args)
- {
- Target(Targets.RestoreTools, () =>
- {
- Run("dotnet", "tool restore");
- });
-
- Target(Targets.CleanBuildOutput, () =>
- {
- Run("dotnet", $"clean {solution} -c Release -v m --nologo");
- });
-
- Target(Targets.Build, DependsOn(Targets.CleanBuildOutput), () =>
- {
- Run("dotnet", $"build {solution} -c Release --nologo");
- });
-
- Target(Targets.CodeQL, () =>
- {
- Run("dotnet", $"build {solutionCodeQL} -c Release --nologo");
- });
-
- Target(Targets.Test, DependsOn(Targets.Build), () =>
- {
- Run("dotnet", $"test {solution} -c Release --no-build --nologo");
- });
-
- Target(Targets.CleanPackOutput, () =>
- {
- if (Directory.Exists(packOutput))
- {
- Directory.Delete(packOutput, true);
- }
- });
-
- Target(Targets.Pack, DependsOn(Targets.Build, Targets.CleanPackOutput), () =>
- {
- var directory = Directory.CreateDirectory(packOutput).FullName;
-
- Run("dotnet", $"pack ./src/Storage/Duende.IdentityServer.Storage.csproj -c Release -o {directory} --no-build --nologo");
- Run("dotnet", $"pack ./src/IdentityServer/Duende.IdentityServer.csproj -c Release -o {directory} --no-build --nologo");
-
- Run("dotnet", $"pack ./src/EntityFramework.Storage/Duende.IdentityServer.EntityFramework.Storage.csproj -c Release -o {directory} --no-build --nologo");
- Run("dotnet", $"pack ./src/EntityFramework/Duende.IdentityServer.EntityFramework.csproj -c Release -o {directory} --no-build --nologo");
-
- Run("dotnet", $"pack ./src/Configuration/Duende.IdentityServer.Configuration.csproj -c Release -o {directory} --no-build --nologo");
- Run("dotnet", $"pack ./src/Configuration.EntityFramework/Duende.IdentityServer.Configuration.EntityFramework.csproj -c Release -o {directory} --no-build --nologo");
-
- Run("dotnet", $"pack ./src/AspNetIdentity/Duende.IdentityServer.AspNetIdentity.csproj -c Release -o {directory} --no-build --nologo");
- });
-
- Target(Targets.SignPackage, DependsOn(Targets.Pack, Targets.RestoreTools), () =>
- {
- SignNuGet();
- });
-
- Target("default", DependsOn(Targets.Test, Targets.Pack));
- Target("sign", DependsOn(Targets.Test, Targets.SignPackage));
-
- await RunTargetsAndExitAsync(args, ex => ex is SimpleExec.ExitCodeException || ex.Message.EndsWith(envVarMissing));
- }
-
- private static void SignNuGet()
- {
- var signClientSecret = Environment.GetEnvironmentVariable("SignClientSecret");
-
- if (string.IsNullOrWhiteSpace(signClientSecret))
- {
- throw new Exception($"SignClientSecret{envVarMissing}");
- }
-
- foreach (var file in Directory.GetFiles(packOutput, "*.nupkg", SearchOption.AllDirectories))
- {
- Console.WriteLine($" Signing {file}");
-
- Run("dotnet",
- "NuGetKeyVaultSignTool " +
- $"sign {file} " +
- "--file-digest sha256 " +
- "--timestamp-rfc3161 http://timestamp.digicert.com " +
- "--azure-key-vault-url https://duendecodesigninghsm.vault.azure.net/ " +
- "--azure-key-vault-client-id 18e3de68-2556-4345-8076-a46fad79e474 " +
- "--azure-key-vault-tenant-id ed3089f0-5401-4758-90eb-066124e2d907 " +
- $"--azure-key-vault-client-secret {signClientSecret} " +
- "--azure-key-vault-certificate NuGetPackageSigning"
- ,noEcho: true);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/identity-server/clients/Directory.Build.props b/identity-server/clients/Directory.Build.props
new file mode 100644
index 000000000..90f2c11d2
--- /dev/null
+++ b/identity-server/clients/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/identity-server/clients/src/APIs/ResourceBasedApi/ResourceBasedApi.csproj b/identity-server/clients/src/APIs/ResourceBasedApi/ResourceBasedApi.csproj
index 8f094841a..bf5c81442 100644
--- a/identity-server/clients/src/APIs/ResourceBasedApi/ResourceBasedApi.csproj
+++ b/identity-server/clients/src/APIs/ResourceBasedApi/ResourceBasedApi.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/identity-server/clients/src/ConsoleCibaClient/ConsoleCibaClient.csproj b/identity-server/clients/src/ConsoleCibaClient/ConsoleCibaClient.csproj
index 9596fb5b4..bcba02b1d 100644
--- a/identity-server/clients/src/ConsoleCibaClient/ConsoleCibaClient.csproj
+++ b/identity-server/clients/src/ConsoleCibaClient/ConsoleCibaClient.csproj
@@ -13,6 +13,4 @@
-
-
diff --git a/identity-server/clients/src/ConsoleCode/ConsoleCode.csproj b/identity-server/clients/src/ConsoleCode/ConsoleCode.csproj
index 820f1da98..264c0f07d 100644
--- a/identity-server/clients/src/ConsoleCode/ConsoleCode.csproj
+++ b/identity-server/clients/src/ConsoleCode/ConsoleCode.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/identity-server/clients/src/ConsoleCode/Program.cs b/identity-server/clients/src/ConsoleCode/Program.cs
index 484d1a924..2b3ddffaf 100644
--- a/identity-server/clients/src/ConsoleCode/Program.cs
+++ b/identity-server/clients/src/ConsoleCode/Program.cs
@@ -1,6 +1,5 @@
using Clients;
using Duende.IdentityModel.Client;
-using IdentityModel.OidcClient;
using Serilog;
using System;
using System.Net.Http;
diff --git a/identity-server/clients/src/ConsoleCode/SystemBrowser.cs b/identity-server/clients/src/ConsoleCode/SystemBrowser.cs
index e687b557d..d25fa6b08 100644
--- a/identity-server/clients/src/ConsoleCode/SystemBrowser.cs
+++ b/identity-server/clients/src/ConsoleCode/SystemBrowser.cs
@@ -1,4 +1,4 @@
-using IdentityModel.OidcClient.Browser;
+using Duende.IdentityModel.OidcClient.Browser;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
diff --git a/identity-server/clients/src/ConsoleResourceIndicators/ConsoleResourceIndicators.csproj b/identity-server/clients/src/ConsoleResourceIndicators/ConsoleResourceIndicators.csproj
index bb99652a5..4a896290b 100644
--- a/identity-server/clients/src/ConsoleResourceIndicators/ConsoleResourceIndicators.csproj
+++ b/identity-server/clients/src/ConsoleResourceIndicators/ConsoleResourceIndicators.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/identity-server/clients/src/ConsoleResourceIndicators/Program.cs b/identity-server/clients/src/ConsoleResourceIndicators/Program.cs
index 1ccc8c57a..b9ffcf4d3 100644
--- a/identity-server/clients/src/ConsoleResourceIndicators/Program.cs
+++ b/identity-server/clients/src/ConsoleResourceIndicators/Program.cs
@@ -1,13 +1,13 @@
using Clients;
-using IdentityModel.OidcClient;
+using Duende.IdentityModel;
+using Duende.IdentityModel.Client;
+using Duende.IdentityModel.OidcClient;
using Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using Duende.IdentityModel;
-using IdentityModel.Client;
namespace ConsoleResourceIndicators
{
diff --git a/identity-server/clients/src/WindowsConsoleSystemBrowser/WindowsConsoleSystemBrowser.csproj b/identity-server/clients/src/WindowsConsoleSystemBrowser/WindowsConsoleSystemBrowser.csproj
index 568b4e309..3f921821a 100644
--- a/identity-server/clients/src/WindowsConsoleSystemBrowser/WindowsConsoleSystemBrowser.csproj
+++ b/identity-server/clients/src/WindowsConsoleSystemBrowser/WindowsConsoleSystemBrowser.csproj
@@ -2,14 +2,14 @@
Exe
- net472
+ net472
-
+
-
-
+
+
diff --git a/identity-server/hosts/Directory.Build.props b/identity-server/hosts/Directory.Build.props
new file mode 100644
index 000000000..90f2c11d2
--- /dev/null
+++ b/identity-server/hosts/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/identity-server/icon.png b/identity-server/icon.png
deleted file mode 100644
index e00fb92ed..000000000
Binary files a/identity-server/icon.png and /dev/null differ
diff --git a/identity-server/migrations/Directory.Build.props b/identity-server/migrations/Directory.Build.props
new file mode 100644
index 000000000..90f2c11d2
--- /dev/null
+++ b/identity-server/migrations/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/identity-server/src/AspNetIdentity/Duende.IdentityServer.AspNetIdentity.csproj b/identity-server/src/AspNetIdentity/Duende.IdentityServer.AspNetIdentity.csproj
index 6dc107b32..96d8ce9c8 100644
--- a/identity-server/src/AspNetIdentity/Duende.IdentityServer.AspNetIdentity.csproj
+++ b/identity-server/src/AspNetIdentity/Duende.IdentityServer.AspNetIdentity.csproj
@@ -5,14 +5,8 @@
net8.0;net9.0
ASP.NET Core Identity Integration for Duende IdentityServer
Duende.IdentityServer.AspNetIdentity
- true
- README.md
-
-
-
-
diff --git a/identity-server/src/Configuration.EntityFramework/Duende.IdentityServer.Configuration.EntityFramework.csproj b/identity-server/src/Configuration.EntityFramework/Duende.IdentityServer.Configuration.EntityFramework.csproj
index 6ea4c12e7..bf4ac109a 100644
--- a/identity-server/src/Configuration.EntityFramework/Duende.IdentityServer.Configuration.EntityFramework.csproj
+++ b/identity-server/src/Configuration.EntityFramework/Duende.IdentityServer.Configuration.EntityFramework.csproj
@@ -4,14 +4,8 @@
net8.0;net9.0
enable
enable
- true
- README.md
-
-
-
-
diff --git a/identity-server/src/Configuration/Duende.IdentityServer.Configuration.csproj b/identity-server/src/Configuration/Duende.IdentityServer.Configuration.csproj
index fc5954c09..9d9135feb 100644
--- a/identity-server/src/Configuration/Duende.IdentityServer.Configuration.csproj
+++ b/identity-server/src/Configuration/Duende.IdentityServer.Configuration.csproj
@@ -6,14 +6,8 @@
enable
Configuration system for Duende IdentityServer
Duende.IdentityServer.Configuration
- true
- README.md
-
-
-
-
diff --git a/identity-server/src/Directory.Build.props b/identity-server/src/Directory.Build.props
new file mode 100644
index 000000000..fa02668cc
--- /dev/null
+++ b/identity-server/src/Directory.Build.props
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ OAuth 2.0;OpenID Connect;Security;Identity;IdentityServer;ASP.NET Core
+ Duende IdentityServer
+ true
+ is-
+ 7.0
+
+
+
\ No newline at end of file
diff --git a/identity-server/src/EntityFramework.Storage/Duende.IdentityServer.EntityFramework.Storage.csproj b/identity-server/src/EntityFramework.Storage/Duende.IdentityServer.EntityFramework.Storage.csproj
index 704714b6a..2678e61b9 100644
--- a/identity-server/src/EntityFramework.Storage/Duende.IdentityServer.EntityFramework.Storage.csproj
+++ b/identity-server/src/EntityFramework.Storage/Duende.IdentityServer.EntityFramework.Storage.csproj
@@ -4,14 +4,8 @@
Duende.IdentityServer.EntityFramework.Storage
net8.0;net9.0
EntityFramework persistence layer for Duende IdentityServer
- true
- README.md
-
-
-
-
diff --git a/identity-server/src/EntityFramework/Duende.IdentityServer.EntityFramework.csproj b/identity-server/src/EntityFramework/Duende.IdentityServer.EntityFramework.csproj
index 3ec6d34a2..b972ceb54 100644
--- a/identity-server/src/EntityFramework/Duende.IdentityServer.EntityFramework.csproj
+++ b/identity-server/src/EntityFramework/Duende.IdentityServer.EntityFramework.csproj
@@ -5,14 +5,8 @@
net8.0;net9.0
EntityFramework persistence layer for Duende IdentityServer
Duende.IdentityServer.EntityFramework
- true
- README.md
-
-
-
-
diff --git a/identity-server/src/IdentityServer/Duende.IdentityServer.csproj b/identity-server/src/IdentityServer/Duende.IdentityServer.csproj
index b271a92ee..7b7ca2b5d 100644
--- a/identity-server/src/IdentityServer/Duende.IdentityServer.csproj
+++ b/identity-server/src/IdentityServer/Duende.IdentityServer.csproj
@@ -5,14 +5,8 @@
net8.0;net9.0
OpenID Connect and OAuth 2.0 Framework for ASP.NET Core
Duende.IdentityServer
- true
- README.md
-
-
-
-
diff --git a/identity-server/src/Storage/Duende.IdentityServer.Storage.csproj b/identity-server/src/Storage/Duende.IdentityServer.Storage.csproj
index 4a742adf0..c76def0dd 100644
--- a/identity-server/src/Storage/Duende.IdentityServer.Storage.csproj
+++ b/identity-server/src/Storage/Duende.IdentityServer.Storage.csproj
@@ -5,15 +5,8 @@
Duende.IdentityServer.Storage
Storage interfaces and models for Duende IdentityServer
- true
-
- README.md
-
-
-
-
diff --git a/identity-server/test/Configuration.IntegrationTests/Configuration.IntegrationTests.csproj b/identity-server/test/Configuration.IntegrationTests/Configuration.IntegrationTests.csproj
index 2f225ae68..2949921cf 100644
--- a/identity-server/test/Configuration.IntegrationTests/Configuration.IntegrationTests.csproj
+++ b/identity-server/test/Configuration.IntegrationTests/Configuration.IntegrationTests.csproj
@@ -16,12 +16,6 @@
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
diff --git a/identity-server/test/Directory.Build.props b/identity-server/test/Directory.Build.props
new file mode 100644
index 000000000..d6cc951a7
--- /dev/null
+++ b/identity-server/test/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/identity-server/test/EntityFramework.IntegrationTests/EntityFramework.IntegrationTests.csproj b/identity-server/test/EntityFramework.IntegrationTests/EntityFramework.IntegrationTests.csproj
index 90ab0a162..c2edfc586 100644
--- a/identity-server/test/EntityFramework.IntegrationTests/EntityFramework.IntegrationTests.csproj
+++ b/identity-server/test/EntityFramework.IntegrationTests/EntityFramework.IntegrationTests.csproj
@@ -5,11 +5,7 @@
-
-
-
-
diff --git a/identity-server/test/EntityFramework.IntegrationTests/IntegrationTest.cs b/identity-server/test/EntityFramework.IntegrationTests/IntegrationTest.cs
index 7fd307bea..d108665c5 100644
--- a/identity-server/test/EntityFramework.IntegrationTests/IntegrationTest.cs
+++ b/identity-server/test/EntityFramework.IntegrationTests/IntegrationTest.cs
@@ -55,7 +55,6 @@ public class IntegrationTest : IClassFixture fixture)
{
- fixture.Options = TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions) y))
- .ToList();
+ fixture.Options = TestDatabaseProviders.ToList>();
}
}
\ No newline at end of file
diff --git a/identity-server/test/EntityFramework.IntegrationTests/Services/CorsPolicyServiceTests.cs b/identity-server/test/EntityFramework.IntegrationTests/Services/CorsPolicyServiceTests.cs
index a4cbdbd34..87bfccd81 100644
--- a/identity-server/test/EntityFramework.IntegrationTests/Services/CorsPolicyServiceTests.cs
+++ b/identity-server/test/EntityFramework.IntegrationTests/Services/CorsPolicyServiceTests.cs
@@ -21,10 +21,10 @@ public class CorsPolicyServiceTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions) y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new ConfigurationDbContext(options))
- context.Database.EnsureCreated();
+ using var context = new ConfigurationDbContext(options);
+ context.Database.EnsureCreated();
}
}
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/DbContexts/ClientDbContextTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/DbContexts/ClientDbContextTests.cs
index ed803a4dc..d627a44b9 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/DbContexts/ClientDbContextTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/DbContexts/ClientDbContextTests.cs
@@ -15,10 +15,10 @@ public class ClientDbContextTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions)y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new ConfigurationDbContext(options))
- context.Database.EnsureCreated();
+ using var context = new ConfigurationDbContext(options);
+ context.Database.EnsureCreated();
}
}
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/EntityFramework.Storage.IntegrationTests.csproj b/identity-server/test/EntityFramework.Storage.IntegrationTests/EntityFramework.Storage.IntegrationTests.csproj
index 2eaec819d..fc6c2d40e 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/EntityFramework.Storage.IntegrationTests.csproj
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/EntityFramework.Storage.IntegrationTests.csproj
@@ -9,11 +9,7 @@
-
-
-
-
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/IntegrationTest.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/IntegrationTest.cs
index 673ddf085..32b1ce81f 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/IntegrationTest.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/IntegrationTest.cs
@@ -55,7 +55,6 @@ public class IntegrationTest : IClassFixture fixture)
{
- fixture.Options = TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions) y))
- .ToList();
+ fixture.Options = TestDatabaseProviders.ToList>();
}
}
\ No newline at end of file
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ClientStoreTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ClientStoreTests.cs
index 6977bf1f6..d9e28015f 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ClientStoreTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ClientStoreTests.cs
@@ -22,24 +22,20 @@ public class ClientStoreTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions) y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new ConfigurationDbContext(options))
- {
- context.Database.EnsureCreated();
- }
+ using var context = new ConfigurationDbContext(options);
+ context.Database.EnsureCreated();
}
}
[Theory, MemberData(nameof(TestDatabaseProviders))]
public async Task FindClientByIdAsync_WhenClientDoesNotExist_ExpectNull(DbContextOptions options)
{
- using (var context = new ConfigurationDbContext(options))
- {
- var store = new ClientStore(context, FakeLogger.Create(), new NoneCancellationTokenProvider());
- var client = await store.FindClientByIdAsync(Guid.NewGuid().ToString());
- client.Should().BeNull();
- }
+ using var context = new ConfigurationDbContext(options);
+ var store = new ClientStore(context, FakeLogger.Create(), new NoneCancellationTokenProvider());
+ var client = await store.FindClientByIdAsync(Guid.NewGuid().ToString());
+ client.Should().BeNull();
}
[Theory, MemberData(nameof(TestDatabaseProviders))]
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/DeviceFlowStoreTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/DeviceFlowStoreTests.cs
index d80739d5c..dae7565d5 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/DeviceFlowStoreTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/DeviceFlowStoreTests.cs
@@ -28,10 +28,10 @@ public class DeviceFlowStoreTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions)y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new PersistedGrantDbContext(options))
- context.Database.EnsureCreated();
+ using var context = new PersistedGrantDbContext(options);
+ context.Database.EnsureCreated();
}
}
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/IdentityProviderStoreTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/IdentityProviderStoreTests.cs
index aec32b672..07f2b1e21 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/IdentityProviderStoreTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/IdentityProviderStoreTests.cs
@@ -20,10 +20,10 @@ public class IdentityProviderStoreTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions)y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new ConfigurationDbContext(options))
- context.Database.EnsureCreated();
+ using var context = new ConfigurationDbContext(options);
+ context.Database.EnsureCreated();
}
}
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/PersistedGrantStoreTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/PersistedGrantStoreTests.cs
index 277384eda..27a8e4b79 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/PersistedGrantStoreTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/PersistedGrantStoreTests.cs
@@ -23,10 +23,10 @@ public class PersistedGrantStoreTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions)y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new PersistedGrantDbContext(options))
- context.Database.EnsureCreated();
+ using var context = new PersistedGrantDbContext(options);
+ context.Database.EnsureCreated();
}
}
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ResourceStoreTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ResourceStoreTests.cs
index 569f75b39..ef9e09552 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ResourceStoreTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/Stores/ResourceStoreTests.cs
@@ -22,10 +22,10 @@ public class ScopeStoreTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions)y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
- using (var context = new ConfigurationDbContext(options))
- context.Database.EnsureCreated();
+ using var context = new ConfigurationDbContext(options);
+ context.Database.EnsureCreated();
}
}
diff --git a/identity-server/test/EntityFramework.Storage.IntegrationTests/TokenCleanup/TokenCleanupTests.cs b/identity-server/test/EntityFramework.Storage.IntegrationTests/TokenCleanup/TokenCleanupTests.cs
index f93d162f9..bd0ba140e 100644
--- a/identity-server/test/EntityFramework.Storage.IntegrationTests/TokenCleanup/TokenCleanupTests.cs
+++ b/identity-server/test/EntityFramework.Storage.IntegrationTests/TokenCleanup/TokenCleanupTests.cs
@@ -28,7 +28,7 @@ public class TokenCleanupTests : IntegrationTest fixture) : base(fixture)
{
- foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions)y)).ToList())
+ foreach (var options in TestDatabaseProviders)
{
using (var context = new PersistedGrantDbContext(options))
{
diff --git a/identity-server/test/EntityFramework.Storage.UnitTests/EntityFramework.Storage.UnitTests.csproj b/identity-server/test/EntityFramework.Storage.UnitTests/EntityFramework.Storage.UnitTests.csproj
index 567020cab..d77d1eb01 100644
--- a/identity-server/test/EntityFramework.Storage.UnitTests/EntityFramework.Storage.UnitTests.csproj
+++ b/identity-server/test/EntityFramework.Storage.UnitTests/EntityFramework.Storage.UnitTests.csproj
@@ -6,9 +6,6 @@
-
-
-
diff --git a/identity-server/test/IdentityServer.IntegrationTests/IdentityServer.IntegrationTests.csproj b/identity-server/test/IdentityServer.IntegrationTests/IdentityServer.IntegrationTests.csproj
index 25203da80..9a0ebd7b3 100644
--- a/identity-server/test/IdentityServer.IntegrationTests/IdentityServer.IntegrationTests.csproj
+++ b/identity-server/test/IdentityServer.IntegrationTests/IdentityServer.IntegrationTests.csproj
@@ -10,19 +10,16 @@
-
-
-
-
-
+
+
diff --git a/identity-server/test/IdentityServer.UnitTests/IdentityServer.UnitTests.csproj b/identity-server/test/IdentityServer.UnitTests/IdentityServer.UnitTests.csproj
index 674ea4fce..85e2bc58b 100644
--- a/identity-server/test/IdentityServer.UnitTests/IdentityServer.UnitTests.csproj
+++ b/identity-server/test/IdentityServer.UnitTests/IdentityServer.UnitTests.csproj
@@ -9,12 +9,8 @@
-
-
-
-
diff --git a/ignore-this/.config/dotnet-tools.json b/ignore-this/.config/dotnet-tools.json
new file mode 100644
index 000000000..1ea259456
--- /dev/null
+++ b/ignore-this/.config/dotnet-tools.json
@@ -0,0 +1,12 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "NuGetKeyVaultSignTool": {
+ "version": "3.2.3",
+ "commands": [
+ "NuGetKeyVaultSignTool"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/ignore-this/README.md b/ignore-this/README.md
new file mode 100644
index 000000000..0009901a9
--- /dev/null
+++ b/ignore-this/README.md
@@ -0,0 +1,3 @@
+# Ignore This
+
+Ignore this package; it's used internally to test our package publishing process.
\ No newline at end of file
diff --git a/ignore-this/src/Directory.Build.props b/ignore-this/src/Directory.Build.props
new file mode 100644
index 000000000..77756856c
--- /dev/null
+++ b/ignore-this/src/Directory.Build.props
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+ it-
+ 0.1
+
+
+
\ No newline at end of file
diff --git a/ignore-this/src/IgnoreThis/IgnoreThis.csproj b/ignore-this/src/IgnoreThis/IgnoreThis.csproj
new file mode 100644
index 000000000..ca99d9879
--- /dev/null
+++ b/ignore-this/src/IgnoreThis/IgnoreThis.csproj
@@ -0,0 +1,10 @@
+
+
+ net8.0
+ enable
+ Duende.IgnoreThis
+ $(PackageId)
+ $(PackageId)
+ Automatic access token management for OAuth client credential flows
+
+
\ No newline at end of file
diff --git a/ignore-this/test/Directory.Build.props b/ignore-this/test/Directory.Build.props
new file mode 100644
index 000000000..d6cc951a7
--- /dev/null
+++ b/ignore-this/test/Directory.Build.props
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/ignore-this/test/IgnoreThis.Tests/Class1.cs b/ignore-this/test/IgnoreThis.Tests/Class1.cs
new file mode 100644
index 000000000..f28746c01
--- /dev/null
+++ b/ignore-this/test/IgnoreThis.Tests/Class1.cs
@@ -0,0 +1,11 @@
+// Copyright (c) Duende Software. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
+
+namespace Duende.IgnoreThis;
+
+public class Class1
+{
+ [Fact]
+ public void Test1()
+ { }
+}
\ No newline at end of file
diff --git a/identity-server/build/build.csproj b/ignore-this/test/IgnoreThis.Tests/IgnoreThis.Tests.csproj
similarity index 51%
rename from identity-server/build/build.csproj
rename to ignore-this/test/IgnoreThis.Tests/IgnoreThis.Tests.csproj
index 76b38265c..dfc6ac6c8 100644
--- a/identity-server/build/build.csproj
+++ b/ignore-this/test/IgnoreThis.Tests/IgnoreThis.Tests.csproj
@@ -1,13 +1,9 @@
-
- Exe
net8.0
+ Duende.IgnoreThis
-
-
-
+
-
-
+
\ No newline at end of file
diff --git a/ignore-this/test/IgnoreThis.Tests/Usings.cs b/ignore-this/test/IgnoreThis.Tests/Usings.cs
new file mode 100644
index 000000000..522a2dc2b
--- /dev/null
+++ b/ignore-this/test/IgnoreThis.Tests/Usings.cs
@@ -0,0 +1,5 @@
+// Copyright (c) Duende Software. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
+
+global using Xunit;
+global using Shouldly;
\ No newline at end of file
diff --git a/identity-server/nuget.config b/nuget.config
similarity index 100%
rename from identity-server/nuget.config
rename to nuget.config
diff --git a/samples.props b/samples.props
new file mode 100644
index 000000000..5198a3f14
--- /dev/null
+++ b/samples.props
@@ -0,0 +1,10 @@
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/src.props b/src.props
new file mode 100644
index 000000000..04bdc5d55
--- /dev/null
+++ b/src.props
@@ -0,0 +1,68 @@
+
+
+
+ Duende Software
+ Duende Software
+ Duende Software
+
+
+
+
+
+
+ embedded
+
+
+
+ latest
+ true
+ true
+ true
+ true
+ True
+ true
+ $(NoWarn);CS1591,NU1507
+ false
+ true
+
+
+ true
+
+ LICENSE
+ icon.png
+ https://github.com/duendesoftware/products
+ https://github.com/duendesoftware/products/releases
+ README.md
+
+
+ 0
+ build.$(BUILD_NUMBER)
+ patch
+
+
+ true
+ true
+ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
+ true
+
+ ../../README.md
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/.gitignore b/templates/.gitignore
deleted file mode 100644
index 072ea9624..000000000
--- a/templates/.gitignore
+++ /dev/null
@@ -1,217 +0,0 @@
-# Rider
-.idea
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-
-bld/
-[Bb]in/
-[Oo]bj/
-
-# Visual Studio 2015 cache/options directory
-.vs/
-project.lock.json
-
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opensdf
-*.sdf
-*.cachefile
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding addin-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-
-# Windows Azure Build Output
-csx/
-*.build.csdef
-
-# Windows Store app package directory
-AppPackages/
-
-# Others
-*.[Cc]ache
-ClientBin/
-[Ss]tyle[Cc]op.*
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.publishsettings
-node_modules/
-bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-docs/_build/
-
-# Local .NET CLI tools
-tools/
-
-# Visual Studio Code workspace options
-.vscode/settings.json
-
-# IdentityServer temp files
-identityserver4_log.txt
-tempkey.rsa
-samples/KeyManagement/FileSystem/dataprotectionkeys/
-samples/KeyManagement/FileSystem/signingkeys/
-workspace.xml
-
-src/IdentityServer4/host/identityserver.db
-tempkey.jwk
-keys
-*.key
-test/Configuration.IntegrationTests/CoverageReports
diff --git a/test.props b/test.props
new file mode 100644
index 000000000..243a95dd3
--- /dev/null
+++ b/test.props
@@ -0,0 +1,34 @@
+
+
+
+ $(NoWarn);1591
+ latest
+ full
+ false
+ true
+ true
+
+ true
+ $(NoWarn);NU1507
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
\ No newline at end of file