New build pipelines (#1743)

* Use 1 gitignore file

* Add the ignore-this project for testing

* Import and configure workflow-gen

* Generate workflows for bff, is, it

* Delete build projects for bff, is

* Add directory.build.props files

* Add src and test props, fix up IdentityServer builds

* Manage dependencies centrally

* Fix a bunch of dependency resolution issues

* import codeql build file

---------

Co-authored-by: Erwin van der Valk <erwin@vandervalk.pro>
This commit is contained in:
Joe DeCock 2025-02-04 04:38:32 -06:00 committed by GitHub
parent 39abeb8bf5
commit 981936ff45
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
102 changed files with 1383 additions and 1322 deletions

301
.github/workflow-gen/Program.cs vendored Normal file
View file

@ -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");
}
}

View file

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>workflow_gen</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Logicality.GitHub.Actions.Workflow" Version="0.5.1" />
<PackageReference Include="Logicality.GitHub.Actions.Workflow.Extensions" Version="0.5.1" />
</ItemGroup>
</Project>

View file

@ -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 }}
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

102
.github/workflows/bff-release.yml vendored Normal file
View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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

81
.github/workflows/ignore-this-ci.yml vendored Normal file
View file

@ -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

View file

@ -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

121
Directory.Packages.props Normal file
View file

@ -0,0 +1,121 @@
<Project>
<PropertyGroup Condition="'$(TargetFramework)' == 'net8.0'">
<AspNetCoreVersion>8.0.1</AspNetCoreVersion>
<!-- EF must be at least 8.0.10 so that 'Microsoft.Extensions.Caching.Memory'
is at least 8.0.1, which addresses a known high severity vulnerability.
The SQL Server EF provider that is commonly used has a transitive
vulnerability in 8.0.10 that is fixed in 8.0.11, so going to 8.0.11 seems
prudent. -->
<EntityFrameworkVersion>8.0.11</EntityFrameworkVersion>
<IdentityServerVersion>7.1.0</IdentityServerVersion>
<MicrosoftExtensionsVersion>8.0.1</MicrosoftExtensionsVersion>
<OpenTelemetryVersion>1.11.0</OpenTelemetryVersion>
<WilsonVersion>7.1.2</WilsonVersion>
<YarpVersion>2.1.0</YarpVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net9.0'">
<AspNetCoreVersion>9.0.0</AspNetCoreVersion>
<EntityFrameworkVersion>9.0.0</EntityFrameworkVersion>
<IdentityServerVersion>7.1.0</IdentityServerVersion>
<MicrosoftExtensionsVersion>9.0.0</MicrosoftExtensionsVersion>
<OpenTelemetryVersion>1.11.0</OpenTelemetryVersion>
<WilsonVersion>8.0.1</WilsonVersion>
<YarpVersion>2.1.0</YarpVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="AngleSharp" Version="1.1.2" />
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.0.0" />
<PackageVersion Include="Aspire.Hosting.Testing" Version="9.0.0" />
<PackageVersion Include="BullsEye" Version="5.0.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="Duende.AccessTokenManagement" Version="3.1.1" />
<PackageVersion Include="Duende.AccessTokenManagement.OpenIdConnect" Version="3.1.1" />
<PackageVersion Include="Duende.AspNetCore.Authentication.JwtBearer" Version="0.1.3" />
<PackageVersion Include="Duende.IdentityModel" Version="7.0.0" />
<PackageVersion Include="Duende.IdentityServer" Version="$(IdentityServerVersion)" />
<PackageVersion Include="FluentAssertions" Version="6.5.1" />
<PackageVersion Include="FluentAssertions.Web" Version="1.5.0" />
<PackageVersion Include="IdentityModel.AspNetCore.OAuth2Introspection" Version="6.2.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Certificate" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Identity" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="$(AspNetCoreVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="$(EntityFrameworkVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="$(EntityFrameworkVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="$(EntityFrameworkVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(EntityFrameworkVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(EntityFrameworkVersion)" />
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.Testing" Version="8.10.0" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Primitives" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="9.0.0" />
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="$(WilsonVersion)" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="$(WilsonVersion)" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="Microsoft.NETCore.Jit" Version="2.0.8" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="MinVer" Version="6.0.0" />
<PackageVersion Include="NSubstitute" Version="5.1.0" />
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.11.0-beta.1" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.11.0-beta.1" />
<PackageVersion Include="OpenTelemetry" Version="$(OpenTelemetryVersion)" />
<PackageVersion Include="PublicApiGenerator" Version="11.1.0" />
<PackageVersion Include="RichardSzalay.MockHttp" Version="7.0.0" />
<PackageVersion Include="Serilog" Version="4.2.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageVersion Include="Serilog.Sinks.TextWriter" Version="3.0.0" />
<PackageVersion Include="Serilog.Sinks.XUnit" Version="3.0.19" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="9.0.0" />
<PackageVersion Include="Shouldly" Version="4.2.1" />
<PackageVersion Include="SimpleExec" Version="12.0.0" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="$(WilsonVersion)" />
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
<PackageVersion Include="xunit" Version="2.9.2" />
<PackageVersion Include="xunit.core" Version="2.9.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="Xunit.SkippableFact" Version="1.5.23" />
<PackageVersion Include="Yarp.ReverseProxy" Version="$(YarpVersion)" />
<!-- Transitive Dependencies -->
<!-- These packages are all transitive dependencies that would
otherwise resolve to a version with a security vulnerability. In future, we
would like to update Microsoft.Data.SqlClient and
Microsoft.EntityFrameworkCore, and remove these explicit dependencies (assuming
that future versions of the intermediate dependencies that don't have this
problem exist someday). -->
<PackageVersion Include="Azure.Identity" Version="1.11.4" />
<PackageVersion Include="System.Formats.Asn1" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="System.Drawing.Common" Version="6.0.0" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
</ItemGroup>
</Project>

View file

@ -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

223
bff/.gitignore vendored
View file

@ -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/

View file

@ -1,32 +0,0 @@
<Project>
<PropertyGroup>
<PackageTags>OAuth 2.0;OpenID Connect;Security;BFF;IdentityServer;ASP.NET Core;SPA;Blazor</PackageTags>
<Authors>Duende Software</Authors>
<Company>Duende Software</Company>
<Copyright>Duende Software</Copyright>
<Product>Duende BFF</Product>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageIcon>icon.png</PackageIcon>
<PackageProjectUrl>https://github.com/DuendeSoftware/BFF</PackageProjectUrl>
<PackageReleaseNotes>https://github.com/DuendeSoftware/BFF/releases</PackageReleaseNotes>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<DebugType Condition="'$(GITHUB_ACTIONS)' == 'true'">embedded</DebugType>
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">True</ContinuousIntegrationBuild>
</PropertyGroup>
<ItemGroup>
<None Include="../../LICENSE" Pack="true" Visible="false" PackagePath="" />
<None Include="../../icon.png" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>
<PropertyGroup>
<MinVerAutoIncrement>minor</MinVerAutoIncrement>
<MinVerPrefix>bff-</MinVerPrefix>
</PropertyGroup>
</Project>

View file

@ -1,82 +0,0 @@
<Project>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net8.0'">
<AspNetCoreVersion>8.0.1</AspNetCoreVersion>
<!-- EF must be at least 8.0.10 so that 'Microsoft.Extensions.Caching.Memory'
is at least 8.0.1, which addresses a known high severity vulnerability.
The SQL Server EF provider that is commonly used has a transitive
vulnerability in 8.0.10 that is fixed in 8.0.11, so going to 8.0.11 seems
prudent. -->
<EFCoreVersion>8.0.11</EFCoreVersion>
<IdentityServerVersion>7.1.0-rc.1</IdentityServerVersion>
<MicrosoftExtensionsVersion>8.0.1</MicrosoftExtensionsVersion>
<YarpVersion>2.1.0</YarpVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net9.0'">
<AspNetCoreVersion>9.0.0</AspNetCoreVersion>
<EFCoreVersion>9.0.0</EFCoreVersion>
<IdentityServerVersion>7.1.0-rc.1</IdentityServerVersion>
<MicrosoftExtensionsVersion>9.0.0</MicrosoftExtensionsVersion>
<YarpVersion>2.1.0</YarpVersion>
</PropertyGroup>
<ItemGroup>
<!-- Build -->
<PackageReference Include="MinVer" Version="4.2.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
<!-- Duende -->
<PackageReference Update="Duende.AccessTokenManagement.OpenIdConnect" Version="3.1.1" />
<PackageReference Update="Duende.IdentityModel" Version="7.0.0" />
<PackageReference Update="Duende.IdentityServer" Version="$(IdentityServerVersion)" />
<!-- ASP.NET Core -->
<PackageReference Update="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Components.WebAssembly" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Microsoft.AspNetCore.Components.Authorization" Version="$(AspNetCoreVersion)" />
<!-- Entity Framework Core -->
<PackageReference Update="Microsoft.EntityFrameworkCore.Design" Version="$(EFCoreVersion)" />
<PackageReference Update="Microsoft.EntityFrameworkCore.InMemory" Version="$(EFCoreVersion)" />
<PackageReference Update="Microsoft.EntityFrameworkCore.Relational" Version="$(EFCoreVersion)" />
<PackageReference Update="Microsoft.EntityFrameworkCore.Sqlite" Version="$(EFCoreVersion)" />
<PackageReference Update="Microsoft.EntityFrameworkCore.SqlServer" Version="$(EFCoreVersion)" />
<!-- Microsoft Extensions -->
<PackageReference Update="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsVersion)" />
<!-- Other -->
<PackageReference Update="Yarp.ReverseProxy" Version="$(YarpVersion)" />
<PackageReference Update="Serilog.AspNetCore" Version="8.0.3" />
<!-- Testing -->
<PackageReference Update="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Update="AngleSharp" Version="1.2.0" />
<PackageReference Update="Microsoft.AspNetCore.TestHost" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Aspire.Hosting.Testing" Version="$(AspNetCoreVersion)" />
<PackageReference Update="Microsoft.Extensions.TimeProvider.Testing" Version="8.8.0" />
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Update="Serilog" Version="4.2.0" />
<PackageReference Update="Serilog.Sinks.TextWriter" Version="3.0.0" />
<PackageReference Update="Serilog.Sinks.XUnit" Version="3.0.19" />
<PackageReference Update="Serilog.Extensions.Logging" Version="9.0.0" />
<PackageReference Update="Shouldly" Version="4.2.1" />
<PackageReference Update="xunit" Version="2.9.2" />
<PackageReference Update="xunit.core" Version="2.9.2" />
<PackageReference Update="xunit.runner.visualstudio" Version="2.8.2"/>
<PackageReference Update="Xunit.SkippableFact" Version="1.5.23" />
</ItemGroup>
<Target Name="SetAssemblyVersion" AfterTargets="MinVer">
<PropertyGroup>
<AssemblyVersion>$(MinVerMajor).$(MinVerMinor).$(MinVerPatch).0</AssemblyVersion>
</PropertyGroup>
</Target>
</Project>

View file

@ -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

View file

@ -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.

View file

@ -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);
}
}
}
}

View file

@ -1,13 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Bullseye" Version="4.0.0" />
<PackageReference Include="SimpleExec" Version="10.0.0" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../samples.props" />
</Project>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="Duende IdentityServer CI" value="https://www.myget.org/F/duende_identityserver/api/v3/index.json" />
</packageSources>
</configuration>

View file

@ -6,7 +6,7 @@
<ItemGroup>
<PackageReference Include="Duende.IdentityModel" />
<PackageReference Include="Duende.AspNetCore.Authentication.JwtBearer" Version="0.1.3" />
<PackageReference Include="Duende.AspNetCore.Authentication.JwtBearer" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>

View file

@ -1,14 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<RootNamespace>Bff.DPoP</RootNamespace>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.4" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>
<ItemGroup>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<RootNamespace>Bff.EF</RootNamespace>
</PropertyGroup>

View file

@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>
<ItemGroup>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
@ -9,8 +9,8 @@
<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Duende.Bff\Duende.Bff.csproj" />
<ProjectReference Include="..\WebAssembly.Client\WebAssembly.Client.csproj" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../samples.props" />
</Project>

View file

@ -4,7 +4,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireHost>true</IsAspireHost>
@ -12,7 +12,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" Version="9.0.0" />
<PackageReference Include="Aspire.Hosting.AppHost" />
<PackageReference Include="System.Text.Json" />
</ItemGroup>
<ItemGroup>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireSharedProject>true</IsAspireSharedProject>
@ -10,13 +10,13 @@
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.ServiceDiscovery" Version="9.0.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.9.0" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" />
<PackageReference Include="Microsoft.Extensions.ServiceDiscovery" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
</ItemGroup>
</Project>

View file

@ -22,8 +22,6 @@
<PackageReference Include="Serilog.Sinks.TextWriter" />
<PackageReference Include="Serilog.Sinks.XUnit" />
<PackageReference Include="Shouldly" />
<PackageReference Include="xunit.core" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="Aspire.Hosting.Testing" />
<PackageReference Include="Xunit.SkippableFact" />

View file

@ -1,14 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0</TargetFrameworks>
<ImplicitUsings>true</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Duende.IdentityServer" />
<PackageReference Include="Duende.IdentityModel" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>
<ItemGroup>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../src.props" />
<PropertyGroup>
<PackageTags>OAuth 2.0;OpenID Connect;Security;BFF;IdentityServer;ASP.NET Core;SPA;Blazor</PackageTags>
<Product>Duende BFF</Product>
<MinVerTagPrefix>bff-</MinVerTagPrefix>
<MinVerMinimumMajorMinor>2.3</MinVerMinimumMajorMinor>
</PropertyGroup>
</Project>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
@ -16,8 +16,7 @@
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" />
<PackageReference Include="Microsoft.Extensions.Http" />
<!-- Explicitly taking this version so that we don't pull in vulnerable old versions. -->
<PackageReference Include="System.Text.Json" Version="8.0.5" />
<PackageReference Include="System.Text.Json" />
</ItemGroup>
<ItemGroup>

View file

@ -14,6 +14,7 @@ public static class ServiceCollectionExtensions
/// <summary>
/// Adds Duende.BFF services to a Blazor Client (wasm) application.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="configureAction">A callback used to set <see cref="BffBlazorOptions"/>.</param>
public static IServiceCollection AddBffBlazorClient(this IServiceCollection services,
Action<BffBlazorOptions>? configureAction = null)
@ -124,6 +125,7 @@ public static class ServiceCollectionExtensions
/// Adds a named <see cref="HttpClient"/> for use when invoking remote APIs
/// proxied through Duende.Bff and configures the client with a callback.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="clientName">The name of that <see cref="HttpClient"/> 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.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="clientName">The name of that <see cref="HttpClient"/> 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 <see cref="HttpClient"/> for use when invoking remote APIs
/// proxied through Duende.Bff and configures the client with a callback.
/// </summary>
/// <param name="clientName">The name of that <see cref="HttpClient"/> 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.</param>
/// <param name="services">The service collection.</param>
/// <param name="configureClient">A configuration callback used to set up
/// the <see cref="HttpClient"/>.</param>
public static IHttpClientBuilder AddRemoteApiHttpClient<T>(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.
/// </summary>
/// <param name="clientName">The name of that <see cref="HttpClient"/> 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.</param>
/// <param name="services">The service collection.</param>
/// <param name="configureClient">A configuration callback used to set up
/// the <see cref="HttpClient"/>.</param>
public static IHttpClientBuilder AddRemoteApiHttpClient<T>(this IServiceCollection services,

View file

@ -2,18 +2,11 @@
<PropertyGroup>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<LangVersion>latest</LangVersion>
<AssemblyName>Duende.BFF.EntityFramework</AssemblyName>
<Description>Entity Framework Core support for backend for frontend (BFF) host for ASP.NET Core</Description>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />

View file

@ -1,18 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<AssemblyName>Duende.BFF.Yarp</AssemblyName>
<Description>Backend for frontend (BFF) host for ASP.NET Core (YARP integration)</Description>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Yarp.ReverseProxy" />
</ItemGroup>

View file

@ -2,18 +2,11 @@
<PropertyGroup>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<AssemblyName>Duende.BFF</AssemblyName>
<Description>Backend for frontend (BFF) host for ASP.NET Core</Description>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Duende.AccessTokenManagement.OpenIdConnect" />

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../test.props" />
</Project>

View file

@ -11,13 +11,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="8.8.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NSubstitute" Version="5.1.0" />
<PackageReference Include="Shouldly" Version="4.2.1" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
<PackageReference Include="NSubstitute" />
</ItemGroup>
<ItemGroup>

View file

@ -11,12 +11,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NSubstitute" Version="5.1.0" />
<PackageReference Include="Shouldly" Version="4.2.1" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="NSubstitute" />
</ItemGroup>
<ItemGroup>

View file

@ -6,18 +6,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Shouldly" Version="4.2.1" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
</ItemGroup>

View file

@ -5,20 +5,8 @@
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Shouldly"/>
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Duende.IdentityServer" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" />

View file

Before

Width:  |  Height:  |  Size: 685 B

After

Width:  |  Height:  |  Size: 685 B

View file

@ -1,35 +0,0 @@
<Project>
<PropertyGroup>
<PackageTags>OAuth 2.0;OpenID Connect;Security;Identity;IdentityServer;ASP.NET Core</PackageTags>
<Authors>Duende Software</Authors>
<Company>Duende Software</Company>
<Copyright>Duende Software</Copyright>
<Product>Duende IdentityServer</Product>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageIcon>icon.png</PackageIcon>
<PackageProjectUrl>https://github.com/DuendeSoftware/IdentityServer</PackageProjectUrl>
<PackageReleaseNotes>https://github.com/DuendeSoftware/IdentityServer/releases</PackageReleaseNotes>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<DebugType Condition="'$(GITHUB_ACTIONS)' == 'true'">embedded</DebugType>
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">True</ContinuousIntegrationBuild>
</PropertyGroup>
<ItemGroup>
<None Include="../../LICENSE" Pack="true" Visible="false" PackagePath="" />
<None Include="../../icon.png" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>
<PropertyGroup>
<MinVerAutoIncrement>minor</MinVerAutoIncrement>
<MinVerTagPrefix>is-</MinVerTagPrefix>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

View file

@ -1,101 +0,0 @@
<Project>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net8.0'">
<FrameworkVersion>8.0.10</FrameworkVersion>
<ExtensionsVersion>8.0.1</ExtensionsVersion>
<EntityFrameworkVersion>8.0.10</EntityFrameworkVersion>
<WilsonVersion>7.1.2</WilsonVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net9.0'">
<FrameworkVersion>9.0.0</FrameworkVersion>
<ExtensionsVersion>9.0.0</ExtensionsVersion>
<EntityFrameworkVersion>9.0.0</EntityFrameworkVersion>
<WilsonVersion>8.0.1</WilsonVersion>
</PropertyGroup>
<ItemGroup>
<!--our stuff -->
<PackageReference Update="Duende.IdentityModel" Version="7.0.0"/>
<PackageReference Update="Duende.AccessTokenManagement" Version="3.1.0-preview.1"/>
<PackageReference Update="Duende.AccessTokenManagement.OpenIdConnect" Version="3.1.0-preview.1"/>
<!--build related-->
<PackageReference Include="MinVer" Version="4.3.0" PrivateAssets="All"/>
<PackageReference Update="SimpleExec" Version="11.0.0"/>
<PackageReference Update="Bullseye" Version="4.2.1"/>
<!--tests -->
<PackageReference Update="FluentAssertions" Version="6.5.1"/>
<PackageReference Update="FluentAssertions.Web" Version="1.5.0"/>
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
<PackageReference Update="xunit" Version="2.9.0"/>
<PackageReference Update="xunit.runner.visualstudio" Version="2.5.4" PrivateAssets="All"/>
<!-- testing -->
<PackageReference Update="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(FrameworkVersion)" />
<PackageReference Update="AngleSharp" Version="1.1.2" />
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Update="Microsoft.Extensions.Diagnostics.Testing" Version="9.0.0" />
<PackageReference Update="Microsoft.Extensions.TimeProvider.Testing" Version="9.0.0" />
<!--microsoft extensions -->
<PackageReference Update="Microsoft.Extensions.Caching.Memory" Version="$(ExtensionsVersion)"/>
<PackageReference Update="Microsoft.Extensions.Http" Version="$(ExtensionsVersion)"/>
<PackageReference Update="Microsoft.Extensions.Http.Polly" Version="$(ExtensionsVersion)"/>
<PackageReference Update="Microsoft.Extensions.Logging" Version="$(ExtensionsVersion)"/>
<PackageReference Update="Microsoft.Extensions.Logging.Console" Version="$(ExtensionsVersion)"/>
<PackageReference Update="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(ExtensionsVersion)"/>
<!--misc -->
<PackageReference Update="Microsoft.IdentityModel.JsonWebTokens" Version="$(WilsonVersion)"/>
<PackageReference Update="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="$(WilsonVersion)"/>
<PackageReference Update="System.IdentityModel.Tokens.Jwt" Version="$(WilsonVersion)"/>
<PackageReference Update="Serilog.AspNetCore" Version="8.0.3"/>
<!--microsoft asp.net core -->
<PackageReference Update="Microsoft.AspNetCore.DataProtection.Abstractions" Version="$(FrameworkVersion)"/>
<PackageReference Update="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(FrameworkVersion)"/>
<PackageReference Update="Microsoft.AspNetCore.TestHost" Version="$(FrameworkVersion)"/>
<PackageReference Update="Microsoft.AspNetCore.Identity" Version="$(FrameworkVersion)"/>
<PackageReference Update="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(FrameworkVersion)"/>
<PackageReference Update="Microsoft.AspNetCore.Authentication.Certificate" Version="$(FrameworkVersion)"/>
<PackageReference Update="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="$(FrameworkVersion)"/>
<!--microsoft entity framework -->
<PackageReference Update="Microsoft.EntityFrameworkCore.Relational" Version="$(EntityFrameworkVersion)"/>
<PackageReference Update="Microsoft.EntityFrameworkCore.Sqlite" Version="$(EntityFrameworkVersion)"/>
<PackageReference Update="Microsoft.EntityFrameworkCore.InMemory" Version="$(EntityFrameworkVersion)"/>
<PackageReference Update="Microsoft.EntityFrameworkCore.SqlServer" Version="$(EntityFrameworkVersion)"/>
<PackageReference Update="Microsoft.EntityFrameworkCore.Design" Version="$(EntityFrameworkVersion)" PrivateAssets="All"/>
<!-- open telemetry -->
<PackageReference Update="OpenTelemetry" Version="1.10.0" />
<PackageReference Update="OpenTelemetry.Exporter.Console" Version="1.10.0" />
<PackageReference Update="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.10.0" />
<PackageReference Update="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.10.0-beta.1" />
<PackageReference Update="OpenTelemetry.Extensions.Hosting" Version="1.10.0" />
<PackageReference Update="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
<PackageReference Update="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
<PackageReference Update="OpenTelemetry.Instrumentation.SqlClient" Version="1.9.0-beta.1" />
<!-- Transitive Dependencies -->
<!-- These packages are all transitive dependencies that would
otherwise resolve to a version with a security vulnerabilitiy. In future, we
would like to update Microsoft.Data.SqlClient and
Microsoft.EntityFrameworkCore, and remove these explicit dependencies (assuming
that future versions of the intermediate dependencies that don't have this
problem exist someday). -->
<PackageReference Update="Azure.Identity" Version="1.11.4" />
<PackageReference Update="System.Formats.Asn1" Version="$(ExtensionsVersion)" />
<PackageReference Update="System.Drawing.Common" Version="6.0.0" />
<PackageReference Update="Microsoft.Data.SqlClient" Version="5.2.2" />
</ItemGroup>
<Target Name="SetAssemblyVersion" AfterTargets="MinVer">
<PropertyGroup>
<AssemblyVersion>$(MinVerMajor).$(MinVerMinor).$(MinVerPatch).0</AssemblyVersion>
</PropertyGroup>
</Target>
</Project>

View file

@ -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);
}
}
}
}

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../samples.props" />
</Project>

View file

@ -5,7 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="IdentityModel.AspNetCore.OAuth2Introspection" Version="6.2.0" />
<PackageReference Include="IdentityModel.AspNetCore.OAuth2Introspection" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>

View file

@ -13,6 +13,4 @@
<ProjectReference Include="..\Constants\Constants.csproj" />
</ItemGroup>
</Project>

View file

@ -8,7 +8,7 @@
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="IdentityModel.OidcClient" Version="5.2.1" />
<PackageReference Include="Duende.IdentityModel.OidcClient" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>

View file

@ -1,6 +1,5 @@
using Clients;
using Duende.IdentityModel.Client;
using IdentityModel.OidcClient;
using Serilog;
using System;
using System.Net.Http;

View file

@ -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;

View file

@ -8,7 +8,7 @@
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App"/>
<PackageReference Include="IdentityModel.OidcClient" Version="5.2.1"/>
<PackageReference Include="Duende.IdentityModel.OidcClient" />
<PackageReference Include="Serilog.AspNetCore" />
</ItemGroup>

View file

@ -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
{

View file

@ -2,14 +2,14 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net472</TargetFramework>
<TargetFrameworks>net472</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="IdentityModel.OidcClient" Version="4.0.0-preview.1.3" />
<PackageReference Include="Duende.IdentityModel.OidcClient" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Extensions.Logging" />
<PackageReference Include="Serilog.Sinks.Console" />
</ItemGroup>
<ItemGroup>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../samples.props" />
</Project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 B

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../samples.props" />
</Project>

View file

@ -5,14 +5,8 @@
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<Description>ASP.NET Core Identity Integration for Duende IdentityServer</Description>
<AssemblyName>Duende.IdentityServer.AspNetIdentity</AssemblyName>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

View file

@ -4,14 +4,8 @@
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Configuration\Duende.IdentityServer.Configuration.csproj" />
<ProjectReference Include="..\Storage\Duende.IdentityServer.Storage.csproj" />

View file

@ -6,14 +6,8 @@
<Nullable>enable</Nullable>
<Description>Configuration system for Duende IdentityServer</Description>
<AssemblyName>Duende.IdentityServer.Configuration</AssemblyName>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../src.props" />
<PropertyGroup>
<PackageTags>OAuth 2.0;OpenID Connect;Security;Identity;IdentityServer;ASP.NET Core</PackageTags>
<Product>Duende IdentityServer</Product>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
<MinVerTagPrefix>is-</MinVerTagPrefix>
<MinVerMinimumMajorMinor>7.0</MinVerMinimumMajorMinor>
</PropertyGroup>
</Project>

View file

@ -4,14 +4,8 @@
<PackageId>Duende.IdentityServer.EntityFramework.Storage</PackageId>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<Description>EntityFramework persistence layer for Duende IdentityServer</Description>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
</ItemGroup>

View file

@ -5,14 +5,8 @@
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<Description>EntityFramework persistence layer for Duende IdentityServer</Description>
<AssemblyName>Duende.IdentityServer.EntityFramework</AssemblyName>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EntityFramework.Storage\Duende.IdentityServer.EntityFramework.Storage.csproj" />
<ProjectReference Include="..\IdentityServer\Duende.IdentityServer.csproj" />

View file

@ -5,14 +5,8 @@
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<Description>OpenID Connect and OAuth 2.0 Framework for ASP.NET Core</Description>
<AssemblyName>Duende.IdentityServer</AssemblyName>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

View file

@ -5,15 +5,8 @@
<PackageId>Duende.IdentityServer.Storage</PackageId>
<Description>Storage interfaces and models for Duende IdentityServer</Description>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath=""/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Duende.IdentityModel" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" />

View file

@ -16,12 +16,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" />

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../test.props" />
</Project>

View file

@ -5,11 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" />

View file

@ -55,7 +55,6 @@ public class IntegrationTest<TClass, TDbContext, TStoreOption> : IClassFixture<D
protected IntegrationTest(DatabaseProviderFixture<TDbContext> fixture)
{
fixture.Options = TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<TDbContext>) y))
.ToList();
fixture.Options = TestDatabaseProviders.ToList<DbContextOptions<TDbContext>>();
}
}

View file

@ -21,10 +21,10 @@ public class CorsPolicyServiceTests : IntegrationTest<CorsPolicyServiceTests, Co
{
public CorsPolicyServiceTests(DatabaseProviderFixture<ConfigurationDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>) 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();
}
}

View file

@ -15,10 +15,10 @@ public class ClientDbContextTests : IntegrationTest<ClientDbContextTests, Config
{
public ClientDbContextTests(DatabaseProviderFixture<ConfigurationDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>)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();
}
}

View file

@ -9,11 +9,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" />

View file

@ -55,7 +55,6 @@ public class IntegrationTest<TClass, TDbContext, TStoreOption> : IClassFixture<D
protected IntegrationTest(DatabaseProviderFixture<TDbContext> fixture)
{
fixture.Options = TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<TDbContext>) y))
.ToList();
fixture.Options = TestDatabaseProviders.ToList<DbContextOptions<TDbContext>>();
}
}

View file

@ -22,24 +22,20 @@ public class ClientStoreTests : IntegrationTest<ClientStoreTests, ConfigurationD
{
public ClientStoreTests(DatabaseProviderFixture<ConfigurationDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>) 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<ConfigurationDbContext> options)
{
using (var context = new ConfigurationDbContext(options))
{
var store = new ClientStore(context, FakeLogger<ClientStore>.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<ClientStore>.Create(), new NoneCancellationTokenProvider());
var client = await store.FindClientByIdAsync(Guid.NewGuid().ToString());
client.Should().BeNull();
}
[Theory, MemberData(nameof(TestDatabaseProviders))]

View file

@ -28,10 +28,10 @@ public class DeviceFlowStoreTests : IntegrationTest<DeviceFlowStoreTests, Persis
public DeviceFlowStoreTests(DatabaseProviderFixture<PersistedGrantDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<PersistedGrantDbContext>)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();
}
}

View file

@ -20,10 +20,10 @@ public class IdentityProviderStoreTests : IntegrationTest<IdentityProviderStoreT
{
public IdentityProviderStoreTests(DatabaseProviderFixture<ConfigurationDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>)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();
}
}

View file

@ -23,10 +23,10 @@ public class PersistedGrantStoreTests : IntegrationTest<PersistedGrantStoreTests
{
public PersistedGrantStoreTests(DatabaseProviderFixture<PersistedGrantDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<PersistedGrantDbContext>)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();
}
}

View file

@ -22,10 +22,10 @@ public class ScopeStoreTests : IntegrationTest<ScopeStoreTests, ConfigurationDbC
{
public ScopeStoreTests(DatabaseProviderFixture<ConfigurationDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<ConfigurationDbContext>)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();
}
}

View file

@ -28,7 +28,7 @@ public class TokenCleanupTests : IntegrationTest<TokenCleanupTests, PersistedGra
{
public TokenCleanupTests(DatabaseProviderFixture<PersistedGrantDbContext> fixture) : base(fixture)
{
foreach (var options in TestDatabaseProviders.SelectMany(x => x.Select(y => (DbContextOptions<PersistedGrantDbContext>)y)).ToList())
foreach (var options in TestDatabaseProviders)
{
using (var context = new PersistedGrantDbContext(options))
{

View file

@ -6,9 +6,6 @@
<ItemGroup>
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
</ItemGroup>

View file

@ -10,19 +10,16 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" />
<PackageReference Include="AngleSharp" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="FluentAssertions.Web" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
<PackageReference Include="System.Net.Http" />
<PackageReference Include="System.Text.RegularExpressions" />
</ItemGroup>
<ItemGroup>

View file

@ -9,12 +9,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" />
<PackageReference Include="FluentAssertions" />
</ItemGroup>

View file

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"NuGetKeyVaultSignTool": {
"version": "3.2.3",
"commands": [
"NuGetKeyVaultSignTool"
]
}
}
}

3
ignore-this/README.md Normal file
View file

@ -0,0 +1,3 @@
# Ignore This
Ignore this package; it's used internally to test our package publishing process.

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../src.props" />
<PropertyGroup>
<MinVerTagPrefix>it-</MinVerTagPrefix>
<MinVerMinimumMajorMinor>0.1</MinVerMinimumMajorMinor>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<PackageId>Duende.IgnoreThis</PackageId>
<AssemblyName>$(PackageId)</AssemblyName>
<RootNamespace>$(PackageId)</RootNamespace>
<Description>Automatic access token management for OAuth client credential flows</Description>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="../../test.props" />
</Project>

View file

@ -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()
{ }
}

View file

@ -1,13 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>Duende.IgnoreThis</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Bullseye" />
<PackageReference Include="SimpleExec" />
<ProjectReference Include="..\..\src\IgnoreThis\IgnoreThis.csproj" />
</ItemGroup>
</Project>
</Project>

View file

@ -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;

10
samples.props Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<IsPackable>false</IsPackable>
</PropertyGroup>
</Project>

68
src.props Normal file
View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Authors>Duende Software</Authors>
<Company>Duende Software</Company>
<Copyright>Duende Software</Copyright>
<!-- TODO - This is different between foss and is/bff -->
<!-- This is what foss does -->
<!-- <DebugType>full</DebugType> -->
<!-- This is what is/bff do -->
<DebugType Condition="'$(GITHUB_ACTIONS)' == 'true'">embedded</DebugType>
<!-- TODO - we want to enable nullable everywhere eventually -->
<!-- <Nullable>enable</Nullable> -->
<LangVersion>latest</LangVersion>
<ImplicitUsings>true</ImplicitUsings>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">True</ContinuousIntegrationBuild>
<Deterministic>true</Deterministic>
<NoWarn>$(NoWarn);CS1591,NU1507</NoWarn>
<IsTestProject>false</IsTestProject>
<IsPackable>true</IsPackable>
<!--NuGet-->
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<!-- TODO - Verify that license is included in nuget packages -->
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageIcon>icon.png</PackageIcon>
<PackageProjectUrl>https://github.com/duendesoftware/products</PackageProjectUrl>
<PackageReleaseNotes>https://github.com/duendesoftware/products/releases</PackageReleaseNotes>
<PackageReadmeFile>README.md</PackageReadmeFile>
<!--Minver-->
<BUILD_NUMBER Condition="'$(BUILD_NUMBER)' == ''">0</BUILD_NUMBER>
<MinVerBuildMetadata>build.$(BUILD_NUMBER)</MinVerBuildMetadata>
<MinVerAutoIncrement>patch</MinVerAutoIncrement>
<!--SourceLink-->
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<PackageReadmePath>../../README.md</PackageReadmePath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MinVer">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<None Include="../../../icon.png" Pack="true" Visible="false" PackagePath="" />
<None Include="$(PackageReadmePath)" Pack="true" PackagePath="" />
<None Include="../../../LICENSE" Pack="true" PackagePath="" />
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show more