-
Notifications
You must be signed in to change notification settings - Fork 0
Canonical-protected: C1 drift + nullable + S1 + D6 + D8 + A1 + CI3 + T1 + T3 #135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 71 commits
Commits
Show all changes
72 commits
Select commit
Hold shift + click to select a range
c4b9557
Re-sync protected config + workflow files to canonical (C1 drift)
Chris-Wolfgang 3965c94
Hoist <Nullable>enable</Nullable> to Directory.Build.props
Chris-Wolfgang 14c19cc
Scope the nullable hoist so it cannot break legacy / F# projects
Chris-Wolfgang 6063abd
Enable CodeQL security-extended query pack (S1)
Chris-Wolfgang bcb404b
Add Stryker mutation-testing workflow (T3)
Chris-Wolfgang fb6ad11
Verify documentation builds before publishing release (D8)
Chris-Wolfgang ab19f94
Verify previous versions preserved in docfx versions.json (D6)
Chris-Wolfgang 7aebf15
Scaffold PublicApiAnalyzers infrastructure (A1)
Chris-Wolfgang b1b3e60
Canonical NuGet package metadata + SourceLink + symbol packages (CI3)
Chris-Wolfgang da126a5
Publish code-coverage report to docs/coverage/ (T1)
Chris-Wolfgang 705d4fd
Add BenchmarkDotNet → gh-pages chart workflow (P2)
Chris-Wolfgang 34c861c
Address PR review round 2 (canonical-protected)
Chris-Wolfgang f10c6fc
Address PR review round 2 (t3-stryker)
Chris-Wolfgang ffbf3d0
Fold T3 (stryker mutation-testing workflow) into canonical-protected
Chris-Wolfgang 03db5c0
Tighten <Nullable> condition to SDK-style C# projects only
Chris-Wolfgang 4ccb202
Add SDK-aware explanatory comment to <Nullable> property
Chris-Wolfgang a14dd19
Pin stryker.yaml's upload-artifact to v7 to match rest of fleet
Chris-Wolfgang 8d26fea
Drop -UseBasicParsing from Invoke-WebRequest in docfx.yaml
Chris-Wolfgang 482cea4
Make ReportGenerator install idempotent in docfx.yaml T1 step
Chris-Wolfgang 13e5b12
Align .gitattributes *.ps1 with .editorconfig (LF, not CRLF)
Chris-Wolfgang aa0df7a
Add coverlet.runsettings to match repo-template
Chris-Wolfgang d2a81a0
Detect .slnx solutions in build-all-versions.yaml
Chris-Wolfgang 166545f
Filter versions.json to tags whose docs were actually built
Chris-Wolfgang c13a2d6
D6 preservation guard: only treat 404 as first deploy
Chris-Wolfgang 56c706a
Disable persisted credentials in stryker.yaml checkout
Chris-Wolfgang c11bc0b
Make dotnet-stryker install idempotent in stryker.yaml
Chris-Wolfgang 99bf028
Gate dotnet workload restore on workload-bearing TFM detection
Chris-Wolfgang 1d90e13
release.yaml: explicit Out-File -Encoding utf8 + DocFX shell: pwsh
Chris-Wolfgang c267c0d
docfx.yaml T1 coverage: pass --settings coverlet.runsettings
Chris-Wolfgang 230a4dd
Gate verify-docs-build on validate-release + pack-and-validate
Chris-Wolfgang 85c732c
Gate gh-pages root cleanup on DEPLOY_AS_LATEST=true
Chris-Wolfgang 079209c
Drop -windows from workload-TFM detection regex
Chris-Wolfgang 217f3ee
verify-docs-build: install full SDK set to match validate-release
Chris-Wolfgang 45ccbf9
D6 guard: skip on dry-runs (inputs.deploy_to_pages == false)
Chris-Wolfgang 3452ad2
Fix invalid PowerShell in docfx.yaml SemVer prerelease comparator
Chris-Wolfgang eed78d8
Protected-file guard: detect deletions too (--diff-filter=AMRCD)
Chris-Wolfgang 008ddc6
Exclude *.Tests.Integration.* from pr.yaml test-discovery loops
Chris-Wolfgang 1bd7d81
Fail job when protected-config fetch/copy fails
Chris-Wolfgang 33d4967
Gitleaks fetch: abort on transient failure, fall back only on missing…
Chris-Wolfgang 68375d4
verify-docs-build: gated dotnet workload restore before restore/build
Chris-Wolfgang d717864
pr.yaml: drop duplicated "configuration files from main" header bullet
Chris-Wolfgang 71195b6
Stage 3 coverage gate: skip when no coverage files were produced
Chris-Wolfgang d9bdbe4
Stage 2 coverage parse: accept extra columns + fail on zero matches
Chris-Wolfgang 2492006
dotnet test: add --no-build --no-restore in all stages
Chris-Wolfgang e6ababf
stryker.yaml: drop dead/broken configs<<EOF output
Chris-Wolfgang 9301b32
Remove duplicated NuGet metadata defaults from per-project csprojs
Chris-Wolfgang 0109a38
docfx.yaml: align D6 comment with the actual fetch source
Chris-Wolfgang fe2cfd4
Sync workload-TFM comment with regex (drop -windows mention)
Chris-Wolfgang e4df4de
docfx.yaml T1 coverage: pin to a single TFM (net10.0)
Chris-Wolfgang 7e26e81
pr.yaml: fail (not skip) when ./tests is missing in a repo with src/
Chris-Wolfgang a3fd88b
Repair pr.yaml after broken Stage 2 coverage-regex fan-out
Chris-Wolfgang 749be57
build-all-versions.yaml: pipe to Out-Host, not Write-Host
Chris-Wolfgang 71e45eb
pr.yaml: run protected-config copy loop in parent shell, not subshell
Chris-Wolfgang 60581da
Stage 2 coverage regex: use greedy match to capture LAST percent
Chris-Wolfgang 2047ee9
Repair pr.yaml after second \$'-token corruption of Stage 2 regex
Chris-Wolfgang cbb6f03
Strip year-specific <Copyright> overrides from src csprojs
Chris-Wolfgang c01a2b8
D6 preservation guard: fail when newly-generated versions.json is mis…
Chris-Wolfgang cc8cd73
release.yaml: attach .snupkg symbol packages alongside .nupkg
Chris-Wolfgang 8d1299e
docfx.yaml deploy: precise exit-code handling on diff/commit/push
Chris-Wolfgang 7dd5d9f
stryker.yaml: run BOTH root and per-test-project configs
Chris-Wolfgang e13395c
Stage 1 (Linux) coverage parser: fail when 0 modules match
Chris-Wolfgang 186687d
pr.yaml trusted-config-fetch: three correctness fixes
Chris-Wolfgang 65653e7
docfx.yaml deploy: clear versions/<dir> and versions/latest before copy
Chris-Wolfgang 7f4a93e
docfx coverage: add --no-restore to dotnet test
Chris-Wolfgang 7ebafa5
D6 guard: also skip when deploy_as_latest is false (rebuild mode)
Chris-Wolfgang 9d8d66a
D6 guard: emit ::error:: via Write-Host so Actions parses the annotation
Chris-Wolfgang 4f3fcae
Stage 1 coverage parser: accept decimal percents + floor before compare
Chris-Wolfgang 9137e45
pr.yaml: fix Stage 2 coverage parser — greedy .* turned 100% into 0%
Chris-Wolfgang fd90586
Bump coverlet.collector from 10.0.0 to 10.0.1
dependabot[bot] e68b6d0
Bump Meziantou.Analyzer from 3.0.85 to 3.0.93
dependabot[bot] e0f3bf6
Bump SonarAnalyzer.CSharp from 10.24.0.138807 to 10.26.0.140279
dependabot[bot] 96ba9df
pr.yaml: add coverlet.runsettings to trusted-config protection lists
Chris-Wolfgang File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,86 @@ | ||
| name: Benchmarks | ||
|
|
||
| # Runs BenchmarkDotNet after a merge to main, then publishes the results to | ||
| # the gh-pages branch under /dev/bench/ where benchmark-action/github-action-benchmark | ||
| # renders an interactive line chart. | ||
|
Chris-Wolfgang marked this conversation as resolved.
|
||
| # | ||
| # This workflow is decoupled from PR validation and release: it does NOT gate | ||
| # merging or publishing — it just adds one data point per qualifying push. | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| paths: | ||
| - 'src/**' | ||
| - 'benchmarks/**' | ||
| - '.github/workflows/benchmarks.yaml' | ||
| workflow_dispatch: | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: false | ||
|
|
||
| jobs: | ||
| benchmark: | ||
| name: Run BenchmarkDotNet & publish chart | ||
| runs-on: ubuntu-latest | ||
|
|
||
| permissions: | ||
| contents: write | ||
|
|
||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v6 | ||
| with: | ||
| persist-credentials: false | ||
|
|
||
| - name: Setup .NET | ||
| uses: actions/setup-dotnet@v5 | ||
| with: | ||
| dotnet-version: | | ||
| 8.0.x | ||
|
|
||
| - name: Restore | ||
| run: dotnet restore benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks.csproj | ||
|
|
||
| - name: Build (Release) | ||
| run: dotnet build -c Release --no-restore benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks.csproj | ||
|
|
||
| - name: Run benchmarks | ||
| working-directory: benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks | ||
| run: dotnet run -c Release --no-build -- --filter "*" --job short --memory --exporters json | ||
|
|
||
| - name: Merge per-class BDN reports | ||
| id: locate | ||
| working-directory: benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks | ||
| run: | | ||
| shopt -s nullglob | ||
| reports=(BenchmarkDotNet.Artifacts/results/*-report-full-compressed.json) | ||
| if [ ${#reports[@]} -eq 0 ]; then | ||
| echo "::error::No BenchmarkDotNet JSON report found" | ||
| exit 1 | ||
| fi | ||
| echo "Merging ${#reports[@]} report(s):" | ||
| printf ' %s\n' "${reports[@]}" | ||
| jq -s '{ | ||
| Title: "BenchmarkDotNet combined report", | ||
| HostEnvironmentInfo: .[0].HostEnvironmentInfo, | ||
| Benchmarks: [.[].Benchmarks[]] | ||
| }' "${reports[@]}" > benchmarks-result.json | ||
| echo "report=benchmarks/Wolfgang.Extensions.IEnumerable.Benchmarks/benchmarks-result.json" >> "$GITHUB_OUTPUT" | ||
|
|
||
| - name: Publish chart to gh-pages | ||
| uses: benchmark-action/github-action-benchmark@52576c92bccf6ac60c8223ec7eb2565637cae9ba # v1.22.1 | ||
| with: | ||
| name: BenchmarkDotNet | ||
| tool: 'benchmarkdotnet' | ||
| output-file-path: ${{ steps.locate.outputs.report }} | ||
| gh-pages-branch: gh-pages | ||
| benchmark-data-dir-path: dev/bench | ||
| auto-push: true | ||
| github-token: ${{ secrets.GITHUB_TOKEN }} | ||
| alert-threshold: '200%' | ||
| fail-on-alert: false | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.