From 4e88a363a16d98881b6066665d33150085cad719 Mon Sep 17 00:00:00 2001 From: Nick Cipollina Date: Wed, 18 Feb 2026 15:25:11 -0500 Subject: [PATCH 1/2] fix: add code coverage support and fix static site api proxy behavior - Add /api CloudFront behavior alongside /api/* for proper API proxying - Add Microsoft.Testing.Extensions.CodeCoverage package for test coverage - Add global.json to configure Microsoft.Testing.Platform runner - Enable code coverage in CI with 80% threshold - Update AwesomeAssertions to 9.4.0 - Bump version to 2.1.5 Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/pr-build.yaml | 4 +++- Directory.Build.props | 2 +- Directory.Packages.props | 3 ++- LayeredCraft.Cdk.Constructs.slnx | 1 + global.json | 5 +++++ .../StaticSiteConstruct.cs | 11 ++++++++--- .../LayeredCraft.Cdk.Constructs.Tests.csproj | 1 + 7 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 global.json diff --git a/.github/workflows/pr-build.yaml b/.github/workflows/pr-build.yaml index 450f861..3ad6829 100644 --- a/.github/workflows/pr-build.yaml +++ b/.github/workflows/pr-build.yaml @@ -7,11 +7,13 @@ on: permissions: write-all jobs: build: - uses: LayeredCraft/devops-templates/.github/workflows/pr-build.yaml@v6.2 + uses: LayeredCraft/devops-templates/.github/workflows/pr-build.yaml@refactor/simplify-mtp-test-coverage with: solution: LayeredCraft.Cdk.Constructs.slnx hasTests: true useMtpRunner: true + enableCodeCoverage: true + coverageThreshold: 80 testDirectory: "test" dotnetVersion: | 8.0.x diff --git a/Directory.Build.props b/Directory.Build.props index 61f7e18..c68bd1a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 2.1.4 + 2.1.5 MIT diff --git a/Directory.Packages.props b/Directory.Packages.props index 10d9ff9..b5f2384 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,6 +4,7 @@ + @@ -12,7 +13,7 @@ - + diff --git a/LayeredCraft.Cdk.Constructs.slnx b/LayeredCraft.Cdk.Constructs.slnx index 19ad064..06187cc 100644 --- a/LayeredCraft.Cdk.Constructs.slnx +++ b/LayeredCraft.Cdk.Constructs.slnx @@ -32,6 +32,7 @@ + diff --git a/global.json b/global.json new file mode 100644 index 0000000..3140116 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "test": { + "runner": "Microsoft.Testing.Platform" + } +} diff --git a/src/LayeredCraft.Cdk.Constructs/StaticSiteConstruct.cs b/src/LayeredCraft.Cdk.Constructs/StaticSiteConstruct.cs index 33781d0..81aa0de 100644 --- a/src/LayeredCraft.Cdk.Constructs/StaticSiteConstruct.cs +++ b/src/LayeredCraft.Cdk.Constructs/StaticSiteConstruct.cs @@ -100,17 +100,22 @@ public StaticSiteConstruct(Construct scope, string id, IStaticSiteConstructProps // Add API proxying behavior if API domain is specified if (!string.IsNullOrWhiteSpace(props.ApiDomain)) { - distribution.AddBehavior("/api/*", new HttpOrigin(props.ApiDomain, new HttpOriginProps + var apiOrigin = new HttpOrigin(props.ApiDomain, new HttpOriginProps { ProtocolPolicy = OriginProtocolPolicy.HTTPS_ONLY - }), new BehaviorOptions + }); + + var apiBehaviorOptions = new BehaviorOptions { AllowedMethods = AllowedMethods.ALLOW_ALL, CachePolicy = CachePolicy.CACHING_DISABLED, OriginRequestPolicy = OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER, ViewerProtocolPolicy = ViewerProtocolPolicy.REDIRECT_TO_HTTPS, Compress = true - }); + }; + + distribution.AddBehavior("/api", apiOrigin, apiBehaviorOptions); + distribution.AddBehavior("/api/*", apiOrigin, apiBehaviorOptions); } // Create primary DNS A record for the site domain diff --git a/test/LayeredCraft.Cdk.Constructs.Tests/LayeredCraft.Cdk.Constructs.Tests.csproj b/test/LayeredCraft.Cdk.Constructs.Tests/LayeredCraft.Cdk.Constructs.Tests.csproj index 18a1302..546c131 100644 --- a/test/LayeredCraft.Cdk.Constructs.Tests/LayeredCraft.Cdk.Constructs.Tests.csproj +++ b/test/LayeredCraft.Cdk.Constructs.Tests/LayeredCraft.Cdk.Constructs.Tests.csproj @@ -35,6 +35,7 @@ + From 0b41b48a293c0093b0e885d4eb73d3d55b580efa Mon Sep 17 00:00:00 2001 From: Nick Cipollina Date: Wed, 18 Feb 2026 15:38:18 -0500 Subject: [PATCH 2/2] ci: update workflow templates to v7.0 and enable code coverage - Pin both build and pr-build workflows to devops-templates@v7.0 - Enable code coverage with 80% threshold in build.yaml - Remove testDirectory param (no longer needed in v7.0) Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/build.yaml | 5 +++-- .github/workflows/pr-build.yaml | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 53df0a8..74a7b98 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -16,11 +16,12 @@ on: permissions: write-all jobs: build: - uses: LayeredCraft/devops-templates/.github/workflows/package-build.yaml@v6.2 + uses: LayeredCraft/devops-templates/.github/workflows/package-build.yaml@v7.0 with: hasTests: true useMtpRunner: true - testDirectory: "test" + enableCodeCoverage: true + coverageThreshold: 80 dotnet-version: | 8.0.x 9.0.x diff --git a/.github/workflows/pr-build.yaml b/.github/workflows/pr-build.yaml index 3ad6829..a09e985 100644 --- a/.github/workflows/pr-build.yaml +++ b/.github/workflows/pr-build.yaml @@ -7,14 +7,13 @@ on: permissions: write-all jobs: build: - uses: LayeredCraft/devops-templates/.github/workflows/pr-build.yaml@refactor/simplify-mtp-test-coverage + uses: LayeredCraft/devops-templates/.github/workflows/pr-build.yaml@v7.0 with: solution: LayeredCraft.Cdk.Constructs.slnx hasTests: true useMtpRunner: true enableCodeCoverage: true coverageThreshold: 80 - testDirectory: "test" dotnetVersion: | 8.0.x 9.0.x