Skip to content

Conversation

@gimlichael
Copy link
Member

@gimlichael gimlichael commented Nov 13, 2025

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:

  • Changed target frameworks in Directory.Build.props to support .NET 10, .NET 9, .NET Standard 2.0, and .NET Framework 4.6.2 (legacy), removing .NET 8 support. Test projects now use .NET 10 and .NET 9 only. [1] [2]
  • Updated docfx.json and 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:

  • Upgraded package dependencies in Directory.Packages.props to the latest major versions, including Codebelt.Extensions.Xunit, Codebelt.Extensions.YamlDotNet, xunit.v3, and others.
  • Updated test SDK and runner packages to use xunit.v3 and enabled the Microsoft Testing Platform runner for improved test execution.

CI/CD Pipeline Updates:

  • Updated workflow jobs in .github/workflows/pipelines.yml to use the latest versions (v3 or v2) 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:

  • Added new release notes and changelog entries for version 10.0.0, highlighting the platform changes and dependency upgrades. Updated the README with clearer platform support information and project philosophy. [1] [2] [3] [4]

Build and Dockerfile Updates:

  • Updated .docfx/Dockerfile.docfx to use newer versions of NGINX and the DocFx image for documentation builds.

Summary by CodeRabbit

  • New Features

    • Enhanced README and docs with an About section, supported targets, and DocFX links.
  • Chores

    • Added official support for .NET 10 and removed .NET 8 support; updated changelog and release notes.
    • Bumped container and DocFX images, upgraded CI workflow actions to v3, adjusted workflow steps (CodeQL commented/disabled), and updated package versions.
  • Refactor

    • Improved culture-handling implementation for safer, faster concurrency and lookups.

@gimlichael gimlichael self-assigned this Nov 13, 2025
Copilot AI review requested due to automatic review settings November 13, 2025 17:53
@coderabbitai
Copy link

coderabbitai bot commented Nov 13, 2025

Walkthrough

Bumps 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

Cohort / File(s) Summary
DocFx & Docker
.docfx/Dockerfile.docfx, .docfx/docfx.json
Bumped NGINX image and DocFX builder image tags; updated DocFX TargetFramework from net9.0net10.0.
Availability docs
.docfx/includes/...
Updated availability text to list ".NET 10, .NET 9 and .NET Standard 2.0" (replacing prior .NET 8/.NET 6 entries).
CI/CD workflows
.github/workflows/pipelines.yml
Upgraded several GitHub Action references v2 → v3, nuget-push v1 → v2; removed/commented-out CodeQL job and removed it from deploy needs.
Release notes & package README
.nuget/Codebelt.Extensions.Globalization/PackageReleaseNotes.txt, .nuget/Codebelt.Extensions.Globalization/README.md
Added 10.0.0 release entry and ALM notes; README updated to list supported targets including .NET 9/10 and documentation pointer.
Global build props & packages
Directory.Build.props, Directory.Packages.props
Updated TFMs to include net10.0; test projects set to OutputType=Exe; migrated xUnit to xunit.v3/runners; bumped several package versions.
Repository docs
CHANGELOG.md, README.md
Inserted [10.0.0] changelog entry (2025-11-13); expanded README with About, Documentation, and Standalone Packages sections.
Runtime code
src/Codebelt.Extensions.Globalization/CultureInfoExtensions.cs
Replaced List with ConcurrentDictionary<string,CultureInfo>; switched to TryGetValue/TryAdd; converted enrichment method to an iterator using yield return for streaming results.

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
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Pay special attention to:
    • src/Codebelt.Extensions.Globalization/CultureInfoExtensions.cs — concurrency correctness, atomicity of TryAdd, iterator semantics vs. previous eager collection, and potential memory retention.
    • Directory.Build.props & Directory.Packages.props — TFM changes, test OutputType, and xUnit v2→v3 migration effects on CI and local test runs.
    • .github/workflows/pipelines.yml — action version upgrades and removal of CodeQL; validate workflow syntax and dependencies.
    • .docfx files and Dockerfile — confirm image tags and DocFX target framework align with build environment.

Possibly related PRs

  • V8.4.0/migrate from cuemon #1 — Directly related: previous changes to CultureInfoExtensions and associated DocFX/CI files; likely overlapping edits.
  • V9.0.6/service update #10 — Related: package/version and release-note updates in .nuget metadata and Directory.Packages.props.
  • Docs/update readme #7 — Related: updates to README/DocFx documentation link and documentation pointers.

Poem

🐰 I hopped from eight up to ten with cheer,
Images bumped and CI drew near,
Tests now run with xUnit v3,
A concurrent stash keeps cultures free,
Tiny paws clap — release is here! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'V10.0.0/launch' is vague and does not clearly convey the primary change; it reads more like a branch name than a descriptive PR title. Revise the title to be more descriptive of the main change, e.g., 'Update to .NET 10 LTS and upgrade dependencies' or similar, making the purpose immediately clear to someone scanning commit history.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch v10.0.0/launch

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c4e098d and 49dc62c.

📒 Files selected for processing (1)
  • 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)


23-23: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (2)
README.md (2)

23-23: Wrap bare URL in angle brackets or markdown link syntax.

Line 23 contains a bare URL. Per markdown linting (MD034), URLs should be wrapped to make them clearly formatted.

Apply this diff:

-Full documentation (generated by [DocFx](https://github.com/dotnet/docfx)) located here: https://globalization.codebelt.net/
+Full documentation (generated by [DocFx](https://github.com/dotnet/docfx)) located here: <https://globalization.codebelt.net/>

7-20: Content updates align well with .NET 10 migration.

The About section now properly documents supported platforms (.NET 9, .NET 10, .NET Standard 2.0, .NET Framework 4.6.2+) and includes a clear note about targeting current .NET versions. The messaging emphasizes the NLS-over-ICU focus and project values.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

Copilot AI left a 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.

Copy link

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between b70f7b5 and c788170.

⛔ Files ignored due to path filters (289)
  • src/Codebelt.Extensions.Globalization/Surrogates/aa-dj.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/aa-er.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/aa-et.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/af-na.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/af-za.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/agq-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ak-gh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/am-et.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-001.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-ae.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-bh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-dj.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-dz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-eg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-er.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-il.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-iq.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-jo.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-km.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-kw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-lb.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-ly.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-ma.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-mr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-om.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-ps.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-qa.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-sa.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-sd.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-so.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-ss.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-sy.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-td.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-tn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ar-ye.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/arn-cl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/as-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/asa-tz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ast-es.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/az-cyrl-az.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/az-latn-az.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ba-ru.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bas-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/be-by.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bem-zm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bez-tz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bg-bg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bgc-deva-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bho-deva-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bin-ng.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bm-latn-ml.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bn-bd.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bn-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bo-cn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bo-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/br-fr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/brx-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bs-cyrl-ba.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/bs-latn-ba.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/byn-er.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ca-ad.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ca-es.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ca-fr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ca-it.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ccp-cakm-bd.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ccp-cakm-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ce-ru.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ceb-latn-ph.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/cgg-ug.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/chr-cher-us.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/co-fr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/cs-cz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/cu-ru.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/cv-cyrl-ru.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/cy-gb.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/da-dk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/da-gl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dav-ke.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-at.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-be.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-ch.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-de.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-it.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-li.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/de-lu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dje-ne.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/doi-deva-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dsb-de.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dua-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dv-mv.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dyo-sn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/dz-bt.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ebu-ke.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ee-gh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ee-tg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/el-cy.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/el-gr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-001.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-029.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-150.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ae.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ag.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ai.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-as.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-at.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-au.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-bb.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-be.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-bi.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-bm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-bs.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-bw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-bz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ca.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-cc.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ch.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ck.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-cx.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-cy.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-de.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-dk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-dm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-er.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-fi.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-fj.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-fk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-fm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gb.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gd.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gi.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-gy.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-hk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-id.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ie.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-il.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-im.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-in.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-io.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-je.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-jm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ke.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ki.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-kn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ky.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-lc.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-lr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ls.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mo.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mp.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ms.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mt.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mv.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-mw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-my.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-na.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-nf.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ng.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-nl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-nr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-nu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-nz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-pg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ph.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-pk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-pn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-pr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-pw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-rw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sb.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sc.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sd.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-se.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-si.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ss.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sx.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-sz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-tc.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-tk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-to.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-tt.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-tv.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-tz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ug.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-um.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-us.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-vc.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-vg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-vi.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-vu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-ws.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-za.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-zm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/en-zw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/eo-001.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-419.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-ar.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-bo.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-br.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-bz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-cl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-co.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-cr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-cu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-do.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-ec.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-es.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-gq.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-gt.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-hn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-mx.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-ni.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-pa.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-pe.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-ph.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-pr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-py.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-sv.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-us.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-uy.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/es-ve.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/et-ee.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/eu-es.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ewo-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fa-af.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fa-ir.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-bf.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-gw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-lr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-mr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-ne.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-ng.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-sl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-adlm-sn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-bf.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gh.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-gw.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-lr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-mr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-ne.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-ng.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-sl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/ff-latn-sn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fi-fi.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fil-ph.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fo-dk.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fo-fo.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-029.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-be.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-bf.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-bi.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-bj.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-bl.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-ca.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-cd.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-cf.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-cg.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-ch.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-ci.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-cm.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-dj.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-dz.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-fr.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-ga.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-gf.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-gn.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-gp.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-gq.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-ht.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-km.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-lu.bin is excluded by !**/*.bin
  • src/Codebelt.Extensions.Globalization/Surrogates/fr-ma.bin is 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 1b9eb23 confirms 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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 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 -5

Length 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 f

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


[![Globalization Ext. CI/CD Pipeline](https://github.com/codebeltnet/globalization/actions/workflows/pipelines.yml/badge.svg)](https://github.com/codebeltnet/globalization/actions/workflows/pipelines.yml) [![codecov](https://codecov.io/gh/codebeltnet/globalization/graph/badge.svg?token=BN2UhFM3bb)](https://codecov.io/gh/codebeltnet/globalization) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=globalization&metric=alert_status)](https://sonarcloud.io/dashboard?id=globalization) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=globalization&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=globalization) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=globalization&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=globalization) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=globalization&metric=security_rating)](https://sonarcloud.io/dashboard?id=globalization) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/codebeltnet/xunit/badge)](https://scorecard.dev/viewer/?uri=github.com/codebeltnet/globalization)

### ℹ️ About
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
### ℹ️ 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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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 Packages

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

@sonarqubecloud
Copy link

@gimlichael gimlichael merged commit 3895be9 into main Nov 13, 2025
13 checks passed
@gimlichael gimlichael deleted the v10.0.0/launch branch November 13, 2025 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants