-
Notifications
You must be signed in to change notification settings - Fork 0
V10.0.0/launch #13
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
V10.0.0/launch #13
Conversation
➖ remove support for net8.0 TFM
WalkthroughBumps project targeting to .NET 10, updates CI/images/test tooling (DocFX, NGINX, GitHub Actions, xUnit v3), updates release/docs and package metadata, and refactors CultureInfoExtensions to use a thread-safe ConcurrentDictionary with iterator-based enrichment. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Caller
participant CultureInfoExtensions
participant Store as ConcurrentDictionary
Note over CultureInfoExtensions,Store: New concurrent lookup & streaming enrichment
Caller->>CultureInfoExtensions: UseNationalLanguageSupport(IEnumerable<CultureInfo>)
loop for each culture
CultureInfoExtensions->>Store: TryGetValue(culture.Name)
alt found
Store-->>CultureInfoExtensions: existing CultureInfo
CultureInfoExtensions-->>Caller: yield existing CultureInfo
else not found
CultureInfoExtensions->>CultureInfoExtensions: clone/enrich culture
CultureInfoExtensions->>Store: TryAdd(clone.Name, clone)
CultureInfoExtensions-->>Caller: yield clone
end
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🪛 markdownlint-cli2 (0.18.1)README.md7-7: Heading levels should only increment by one level at a time (MD001, heading-increment) 23-23: Bare URL used (MD034, no-bare-urls) 🔇 Additional comments (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This pull request migrates the project from .NET 8 (LTS) to .NET 10 (LTS), maintaining support for .NET 9 (STS) and cross-platform targets (.NET Standard 2.0 and .NET Framework 4.6.2). The migration includes dependency upgrades, CI/CD workflow updates, and comprehensive documentation changes to reflect the new platform strategy.
Key Changes:
- Target framework migration: Removed .NET 8 support, added .NET 10 (LTS) support across all projects
- Major dependency upgrades: Updated to xunit.v3, latest Codebelt packages, and Microsoft Testing Platform runner
- CI/CD modernization: Upgraded all reusable workflows to v3 (v2 for nuget-push), temporarily disabled CodeQL
Reviewed Changes
Copilot reviewed 11 out of 620 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| Directory.Build.props | Updated target frameworks to net10.0/net9.0 and enabled Microsoft Testing Platform runner for test projects |
| Directory.Packages.props | Upgraded package dependencies including migration from xunit v2 to v3 and latest Codebelt packages |
| .github/workflows/pipelines.yml | Updated all workflow references to v3, commented out CodeQL job, removed it from deploy dependencies |
| README.md | Added project philosophy section and clarified platform support strategy |
| CHANGELOG.md | Added version 10.0.0 release notes documenting the platform migration |
| .nuget/Codebelt.Extensions.Globalization/README.md | Enhanced package README with platform support information |
| .nuget/Codebelt.Extensions.Globalization/PackageReleaseNotes.txt | Added release notes for version 10.0.0 with platform changes |
| .docfx/includes/availability-modern.md | Updated availability documentation from .NET 8/6 to .NET 10/9 |
| .docfx/includes/availability-default.md | Updated availability documentation to reflect new target frameworks |
| .docfx/docfx.json | Changed target framework for documentation generation to net10.0 |
| .docfx/Dockerfile.docfx | Updated base image versions for NGINX and DocFx |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
README.md (1)
27-27: Update package description to match project scope.Line 27 states "Provides a focused API for RESTful versioning," which appears to be a copy-paste error from another project. This project focuses on Globalization extensions, not versioning APIs. Update the description to accurately reflect the package's purpose.
Suggested update:
-Provides a focused API for RESTful versioning. +Provides extensions for the System.Globalization namespace with support for National Language Support (NLS) over International Components for Unicode (ICU).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (289)
src/Codebelt.Extensions.Globalization/Surrogates/aa-dj.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/aa-er.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/aa-et.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/af-na.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/af-za.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/agq-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ak-gh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/am-et.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-001.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-ae.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-bh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-dj.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-dz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-eg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-er.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-il.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-iq.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-jo.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-km.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-kw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-lb.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-ly.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-ma.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-mr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-om.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-ps.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-qa.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-sa.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-sd.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-so.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-ss.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-sy.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-td.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-tn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ar-ye.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/arn-cl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/as-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/asa-tz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ast-es.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/az-cyrl-az.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/az-latn-az.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ba-ru.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bas-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/be-by.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bem-zm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bez-tz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bg-bg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bgc-deva-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bho-deva-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bin-ng.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bm-latn-ml.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bn-bd.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bn-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bo-cn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bo-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/br-fr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/brx-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bs-cyrl-ba.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/bs-latn-ba.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/byn-er.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ca-ad.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ca-es.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ca-fr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ca-it.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ccp-cakm-bd.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ccp-cakm-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ce-ru.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ceb-latn-ph.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/cgg-ug.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/chr-cher-us.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/co-fr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/cs-cz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/cu-ru.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/cv-cyrl-ru.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/cy-gb.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/da-dk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/da-gl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dav-ke.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-at.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-be.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-ch.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-de.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-it.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-li.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/de-lu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dje-ne.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/doi-deva-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dsb-de.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dua-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dv-mv.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dyo-sn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/dz-bt.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ebu-ke.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ee-gh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ee-tg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/el-cy.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/el-gr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-001.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-029.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-150.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ae.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ag.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ai.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-as.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-at.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-au.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-bb.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-be.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-bi.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-bm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-bs.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-bw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-bz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ca.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-cc.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ch.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ck.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-cx.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-cy.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-de.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-dk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-dm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-er.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-fi.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-fj.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-fk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-fm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gb.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gd.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gi.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-gy.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-hk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-id.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ie.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-il.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-im.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-in.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-io.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-je.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-jm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ke.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ki.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-kn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ky.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-lc.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-lr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ls.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mo.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mp.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ms.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mt.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mv.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-mw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-my.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-na.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-nf.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ng.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-nl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-nr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-nu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-nz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-pg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ph.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-pk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-pn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-pr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-pw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-rw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sb.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sc.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sd.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-se.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-si.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ss.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sx.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-sz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-tc.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-tk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-to.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-tt.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-tv.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-tz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ug.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-um.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-us.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-vc.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-vg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-vi.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-vu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-ws.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-za.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-zm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/en-zw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/eo-001.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-419.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-ar.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-bo.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-br.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-bz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-cl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-co.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-cr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-cu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-do.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-ec.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-es.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-gq.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-gt.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-hn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-mx.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-ni.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-pa.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-pe.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-ph.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-pr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-py.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-sv.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-us.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-uy.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/es-ve.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/et-ee.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/eu-es.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ewo-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fa-af.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fa-ir.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-bf.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-lr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-mr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-ne.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-ng.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-sl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-sn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-bf.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gh.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gw.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-lr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-mr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-ne.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-ng.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-sl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/ff-latn-sn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fi-fi.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fil-ph.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fo-dk.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fo-fo.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-029.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-be.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-bf.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-bi.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-bj.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-bl.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-ca.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-cd.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-cf.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-cg.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-ch.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-ci.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-cm.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-dj.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-dz.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-fr.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-ga.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-gf.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-gn.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-gp.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-gq.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-ht.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-km.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-lu.binis excluded by!**/*.binsrc/Codebelt.Extensions.Globalization/Surrogates/fr-ma.binis excluded by!**/*.bin
📒 Files selected for processing (11)
.docfx/Dockerfile.docfx(1 hunks).docfx/docfx.json(1 hunks).docfx/includes/availability-default.md(1 hunks).docfx/includes/availability-modern.md(1 hunks).github/workflows/pipelines.yml(5 hunks).nuget/Codebelt.Extensions.Globalization/PackageReleaseNotes.txt(1 hunks).nuget/Codebelt.Extensions.Globalization/README.md(1 hunks)CHANGELOG.md(1 hunks)Directory.Build.props(3 hunks)Directory.Packages.props(1 hunks)README.md(1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
README.md
7-7: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🔇 Additional comments (14)
.docfx/includes/availability-default.md (1)
1-1: LGTM!The availability statement correctly reflects the updated framework targets for the v10.0.0 release.
.nuget/Codebelt.Extensions.Globalization/README.md (1)
5-9: LGTM!The platform support documentation is accurate and well-structured. The .NET Framework 4.6.2+ support is correctly implied through the .NET Standard 2.0 target.
CHANGELOG.md (1)
10-15: LGTM!The changelog entry clearly communicates the major version change and provides useful context about the framework targeting policy.
.nuget/Codebelt.Extensions.Globalization/PackageReleaseNotes.txt (1)
1-8: LGTM!The release notes accurately document the framework changes and follow the established format consistently.
Directory.Build.props (4)
18-18: LGTM!Target framework update is consistent with the major version release objectives, correctly replacing .NET 8 with .NET 10 while maintaining .NET 9 and .NET Standard 2.0 support.
52-57: LGTM!Test target frameworks updated consistently across platforms, maintaining .NET Framework 4.8 support on Windows.
60-60: Configuration verified as correct — no further action required.The Microsoft Testing Platform runner has native xUnit v3 support, and OutputType=Exe is the correct configuration for this runner. Verification confirms the Directory.Build.props changes are properly configured:
- OutputType=Exe and UseMicrosoftTestingPlatformRunner=true are correctly set in the test project PropertyGroup
- Test projects properly inherit the configuration without conflicts
- Package references use xunit.v3
- No legacy xUnit v2 references remain
The architectural change to the Microsoft Testing Platform runner is appropriate and correctly implemented.
75-76: xUnit v3 package references are correctly migrated.The VSTest adapter for xUnit v3 is published under xunit.runner.visualstudio (3.x version), matching the package configuration on line 77. All three packages (xunit.v3, xunit.v3.runner.console, xunit.runner.visualstudio) follow proper v3 naming conventions. Shell verification confirms no remaining xUnit v2 patterns in test code, no IAsyncLifetime implementations requiring cleanup reordering, and no deprecated v2 namespace usage.
.github/workflows/pipelines.yml (2)
27-27: LGTM!GitHub Actions workflow version updates are consistent and appropriate for supporting the .NET 10 target framework.
Also applies to: 40-40, 53-53, 65-65, 92-92
81-87: CodeQL is intentionally disabled due to .NET 10 support gap.The codebase targets .NET 10, and commit
1b9eb23confirms CodeQL was excluded because GitHub did not apply a fix for .NET 10 (referencing github/codeql-action#3207). GitHub-hosted runners currently support only up to .NET 9.x, though CodeQL can still analyze .NET 10 projects using workarounds such as self-hosted runners or manual .NET 10 SDK installation with build-mode.If security scanning coverage is a priority, consider implementing one of these workarounds to re-enable CodeQL for .NET 10 analysis.
.docfx/docfx.json (1)
15-15: LGTM!DocFX target framework updated to match the primary .NET 10 target, ensuring documentation is generated correctly for the new framework version.
Directory.Packages.props (1)
6-8: All package versions verified as valid with no security vulnerabilities detected.The verification confirms all specified package versions exist on NuGet and no known security advisories are present for the updated dependencies.
.docfx/includes/availability-modern.md (1)
1-1: LGTM!Availability statement correctly reflects the updated .NET 10 and .NET 9 target frameworks.
README.md (1)
7-19: Content quality: Framework targeting and documentation improvements.The new "About" section clearly communicates the project's target frameworks and commitment to current .NET LTS/STS versions, which aligns well with the PR objectives. The list of supported platforms is comprehensive and accurate (
.NET 9,.NET 10,.NET Standard 2,.NET Framework 4.6.2).
| @@ -1,9 +1,9 @@ | |||
| ARG NGINX_VERSION=1.29.1-alpine | |||
| ARG NGINX_VERSION=1.29.3-alpine | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify image versions are current and secure.
NGINX and DocFx base images have been bumped to newer versions. Confirm that these image tags exist and are free from known vulnerabilities.
Also applies to: 6-6
🏁 Script executed:
#!/bin/bash
# Verify NGINX image tag exists
docker manifest inspect nginx:1.29.3-alpine > /dev/null 2>&1 && echo "✓ nginx:1.29.3-alpine exists" || echo "✗ nginx:1.29.3-alpine not found"
# Verify DocFx image tag exists (if publicly available)
docker manifest inspect codebeltnet/docfx:2.78.4 > /dev/null 2>&1 && echo "✓ codebeltnet/docfx:2.78.4 exists" || echo "✗ codebeltnet/docfx:2.78.4 not found"Length of output: 68
I need to verify the availability of these image tags since the Docker manifest approach is limited in this sandbox environment. Let me search for current versions of these images.
Let me search for more specific information about the codebeltnet/docfx image and verify the actual Dockerfile.
Let me search for current nginx versions to clarify what tag actually exists.
Based on my searches, the current NGINX Alpine version appears to be 1.29.2, and I could not find evidence that nginx:1.29.3-alpine is publicly available on Docker Hub. The search results show NGINX mainline Alpine packages max out at version 1.27.5-r1 (April 2025), while the stable Alpine version is 1.28.0.
The image tag nginx:1.29.3-alpine does not appear to exist, making the review comment's verification request significant.
DocFx 2.78.4 exists as a valid package, but the availability of the community-maintained codebeltnet/docfx:2.78.4 Docker image is unclear from public sources.
Update required: Correct the NGINX version tag to a version that actually exists (e.g., nginx:1.28.0-alpine or nginx:1.27.5-alpine), and verify that the DocFx image is publicly available if used in the Dockerfile.
🏁 Script executed:
#!/bin/bash
# Find and examine the Dockerfile mentioned in the review
fd -name "Dockerfile.docfx" -type f | head -5Length of output: 230
🌐 Web query:
nginx:1.29.3-alpine latest version Docker Hub official
💡 Result:
nginx 1.29.3 is the current mainline release (published Oct 28, 2025). Docker’s official nginx images normally publish matching tags (for example 1.29.3 and 1.29.3-alpine) — confirm the exact tag listing on Docker Hub if you need the live registry digest. [1][2][3]
Sources:
- nginx.org news (nginx-1.29.3 released Oct 28, 2025). [1]
- nginx GitHub releases (release-1.29.3). [2]
- NGINX Docker docs (explain tags/OS variants such as alpine). [3]
🏁 Script executed:
#!/bin/bash
# Find and examine the Dockerfile mentioned in the review
fd "Dockerfile.docfx" -type fLength of output: 170
🏁 Script executed:
#!/bin/bash
# Once found, display its contents
find . -name "Dockerfile.docfx" -type f -exec cat {} \;Length of output: 437
🌐 Web query:
codebeltnet/docfx Docker image versions available
💡 Result:
I couldn't find any Docker image published as codebeltnet/docfx on Docker Hub or common registries. The Codebelt site lists other Codebelt images but not a codebeltnet/docfx image, and the official docfx project is hosted under dotnet/docfx (GitHub/NuGet). [1][2]
If you want, I can (a) search a specific registry (Docker Hub, GHCR, GitLab Container Registry) for that name, or (b) find/produce an alternative docfx Docker image you can use.
Replace codebeltnet/docfx:2.78.4 with a publicly available DocFx image or build stage.
The NGINX image tag nginx:1.29.3-alpine is valid and current (mainline release, Oct 28, 2025). However, codebeltnet/docfx:2.78.4 cannot be found on Docker Hub or other common registries and will cause the build to fail. The official DocFx project is maintained under dotnet/docfx. Either use an official image, build DocFx from source, or ensure the codebeltnet/docfx image is available in a private registry that this Dockerfile can access.
|
|
||
| [](https://github.com/codebeltnet/globalization/actions/workflows/pipelines.yml) [](https://codecov.io/gh/codebeltnet/globalization) [](https://sonarcloud.io/dashboard?id=globalization) [](https://sonarcloud.io/dashboard?id=globalization) [](https://sonarcloud.io/dashboard?id=globalization) [](https://sonarcloud.io/dashboard?id=globalization) [](https://scorecard.dev/viewer/?uri=github.com/codebeltnet/globalization) | ||
|
|
||
| ### ℹ️ About |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix heading level: use h2 instead of h3.
The "About" section at line 7 uses h3 (###) but should use h2 (##) to maintain proper heading hierarchy after the main h1 title. As per coding guidelines and markdown linting standards, heading levels should increment by one level at a time.
Apply this diff:
-### ℹ️ About
+## ℹ️ About📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### ℹ️ About | |
| ## ℹ️ About |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
7-7: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
In README.md around line 7, the "About" heading uses h3 (###) but should be h2
(##); change the heading from ### ℹ️ About to ## ℹ️ About so the markdown
heading level increments correctly from the main h1 and satisfies
linting/guidelines.
| > [!NOTE] | ||
| > To ensure access to current features, improvements, and security updates, and to keep the codebase clean and easy to maintain, we target only the latest long-term (LTS), short-term (STS) and (where applicable) cross-platform .NET versions. | ||
| ### 📚 Documentation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update section headings to use h2 level.
For consistency with the corrected heading structure, the "Documentation" and "Standalone Packages" sections should also use h2 (##) instead of h3 (###).
Apply this diff:
-### 📚 Documentation
+## 📚 Documentation-### 📦 Standalone Packages
+## 📦 Standalone PackagesAlso applies to: 25-25
🤖 Prompt for AI Agents
In README.md around lines 21 and 25, the "Documentation" and "Standalone
Packages" headings are using h3 (###) but should be h2 (##) for consistency;
change those headings from h3 to h2 so both sections use the corrected heading
level.
|



This pull request is a major update that shifts the project to target .NET 10 (LTS), removes support for .NET 8, and upgrades dependencies and CI/CD workflows to their latest compatible versions. It also updates documentation and release notes to reflect these changes, ensuring the project remains current and maintainable.
Platform and Target Framework Updates:
Directory.Build.propsto support.NET 10,.NET 9,.NET Standard 2.0, and.NET Framework 4.6.2(legacy), removing.NET 8support. Test projects now use.NET 10and.NET 9only. [1] [2]docfx.jsonand related documentation files to reflect new target frameworks and availability (now.NET 10,.NET 9, and.NET Standard 2.0). [1] [2] [3]Dependency and Package Upgrades:
Directory.Packages.propsto the latest major versions, includingCodebelt.Extensions.Xunit,Codebelt.Extensions.YamlDotNet,xunit.v3, and others.xunit.v3and enabled the Microsoft Testing Platform runner for improved test execution.CI/CD Pipeline Updates:
.github/workflows/pipelines.ymlto use the latest versions (v3orv2) of reusable workflows for build, pack, test, SonarCloud, and NuGet push. The CodeQL job is commented out for now. [1] [2] [3] [4] [5]Documentation and Release Notes:
Build and Dockerfile Updates:
.docfx/Dockerfile.docfxto use newer versions of NGINX and the DocFx image for documentation builds.Summary by CodeRabbit
New Features
Chores
Refactor