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