Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Release: promote develop to main - #197

Merged
ptr727 merged 4 commits into
mainfrom
develop
Jun 26, 2026
Merged

Release: promote develop to main#197
ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Promotes the current develop head to main for release.

Contents:

Standard release promotion: merge commit (not squash). A separate publish-release.yml dispatch performs the actual release after this lands — the workflow fixes must be on main for the publish to use them.

🤖 Generated with Claude Code

ptr727and others added 4 commits June 25, 2026 09:41
Converge LanguageTags with the ProjectTemplate hub and work this repo's
sync task list.
## What this PR does
- **Carry-whole shared artifacts.** `.editorconfig` and `CODESTYLE.md`
are re-applied verbatim from the template (every section, including
blocks inert in this .NET-only repo), so re-sync stays a clean overwrite
rather than a per-section merge. Only the documented in-section repo
placeholders are adapted: the .NET project-folder list,
`InternalsVisibleTo` names, and VS Code task labels.
- **Conform orchestration workflows to the template.**
`merge-bot-pull-request.yml` keys concurrency on the PR number;
`build-release-task.yml` re-adopts the main-only release-version
backstop; `get-version-task.yml` drops a stray comment to restore
byte-exact verbatim; `build-datebadge-task.yml` + `publish-release.yml`
adopt the caller-gated date-badge model (also fixing a pre-existing
`SC2086`). Action pins confirmed identical to the template.
- **EOL pins.** `.gitattributes` carries the template's `*.sh` +
Dockerfile LF pins and adds one repo-specific LF pin:
`.husky/pre-commit` (extensionless hook; a CRLF shebang breaks
execution). `LanguageData/` holds downloaded source data the parser
reads byte-for-byte; it is left untouched under the `* -text` default
(no `text`/`eol=` rule), so `LanguageData/iso6392` stays exactly as
downloaded (CRLF preserved) - it is deliberately *not* forced to LF.
Workflow YAML stays CRLF, matching the template.
- **Docs.** AGENTS.md gains a "Template adaptations" block recording the
genuine deviations below; sync-doc bullets align with the carry-whole
rule.
## Documented adaptations (for review)
The only intentional deviations from the carried template state.
Everything else tracks the template verbatim.
- **Husky.Net pre-commit gate.** This repo wires the clean-compile
checks as local Husky.Net pre-commit git hooks (`dotnet tool restore` +
`dotnet husky install`); the template ships no git hooks and treats CI
as the only lint backstop. `CODESTYLE.md`'s git-hook note and the
`.vscode/tasks.json` convenience-task set are adapted accordingly. CI
still runs the same checks.
- **Codegen via the `LanguageTagsCreate` CLI, no `NINJA_API_KEY`.**
Embedded language data is regenerated by the in-repo
`LanguageTagsCreate/` tool pulling directly from the official ISO
639-2/3 + RFC 5646 registries. There is no external codegen API, so this
repo carries no `NINJA_API_KEY` secret or any reference to one.
- **`merge-upstream-version` job legitimately absent.**
`merge-bot-pull-request.yml` carries only `merge-dependabot`,
`merge-codegen`, and `disable-auto-merge-on-maintainer-push`. The
template's `merge-upstream-version` job auto-merges an
upstream-version-bump flow this repo does not run (LanguageTags pins no
upstream binary version). Concurrency keying and the three carried jobs
match the template verbatim.
## Validation
- actionlint: clean
- markdownlint: 0 errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…up (#192)
Bumps the actions-deps group with 1 update:
[actions/setup-dotnet](https://github.com/actions/setup-dotnet).
Updates `actions/setup-dotnet` from 5.3.0 to 5.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-dotnet/releases">actions/setup-dotnet's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Improve global.json SDK version validation for rollForward by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/742">actions/setup-dotnet#742</a></li>
<li>Pin actions to commit SHAs in workflows by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/744">actions/setup-dotnet#744</a></li>
<li>Expand the CSC problem matcher to light up more errors on GitHub. by
<a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Docs(action): Explicitly mark all optional inputs with required:
false by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix global.json creation command by <a
href="https://github.com/michal2612"><code>@​michal2612</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
</ul>
<h3>Dependency Updates</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/746">actions/setup-dotnet#746</a></li>
<li><a
href="https://github.com/michal2612"><code>@​michal2612</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/694">actions/setup-dotnet#694</a></li>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/737">actions/setup-dotnet#737</a></li>
<li><a
href="https://github.com/StephenCleary"><code>@​StephenCleary</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-dotnet/pull/717">actions/setup-dotnet#717</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-dotnet/compare/v5...v5.4.0">https://github.com/actions/setup-dotnet/compare/v5...v5.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-dotnet/commit/26b0ec14cb23fa6904739307f278c14f94c95bf1"><code>26b0ec1</code></a>
Expand the CSC problem matcher to light up more errors on GitHub. (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/717">#717</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/da5e5482f2d0700168cff080da45b50da8b60f0e"><code>da5e548</code></a>
docs(action): explicitly mark all optional inputs with required: false
(<a
href="https://redirect.github.com/actions/setup-dotnet/issues/737">#737</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/9bd3b44355ba7c500f3d2e029636c6d29ac5caab"><code>9bd3b44</code></a>
Improve readability of global.json creation command (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/694">#694</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/4406a635cd2be9c92689ea22b2f74ea57297088c"><code>4406a63</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/746">#746</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/dc3262dda80e97f1c7865b3b122e99240e30b738"><code>dc3262d</code></a>
pin actions to commit SHAs in workflows (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/744">#744</a>)</li>
<li><a
href="https://github.com/actions/setup-dotnet/commit/95a3f8b067437dc9b2027a437f5dc3b4569ddd49"><code>95a3f8b</code></a>
Validate global.json SDK version before rollForward optimization (<a
href="https://redirect.github.com/actions/setup-dotnet/issues/742">#742</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-dotnet/compare/9a946fdbd5fb07b82b2f5a4466058b876ab72bb2...26b0ec14cb23fa6904739307f278c14f94c95bf1">compare
view</a></li>
</ul>
</details>
<br />
[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-dotnet&package-manager=github_actions&previous-version=5.3.0&new-version=5.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Resolve#175 - match a UN M.49 region group against a contained region,
e.g. es-419 (Latin America) matches es-MX (Mexico).
Adds the CLDR-sourced UnM49Data dataset, an opt-in
IsMatch(prefix, tag, regionContainment) overload, ExpandRegion, and a
parser fix so a numeric region after the language parses as a region.
Restores trimmed parser/lookup comments. Bumps version to 1.4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-sync of the #213/#214/#217 workflow fixes from ptr727/ProjectTemplate
(PRs #215/#216/#218), adapted to this single-target NuGet repo.
- develop leg is versioned against its own branch (NBGV prerelease tag no
longer stripped); validate-release entry gate enforces it both directions.
- Surgical, condition-gated cleanup of only the consumed release-asset-* artifacts;
blanket cleanup job removed.
Closes#195.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CopilotAI review requested due to automatic review settings June 26, 2026 20:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This release-promotion PR brings the current develop head to main, shipping the UN M.49 region containment feature (plus parser/matching updates) and synchronizing the release workflow fixes required for publishing from main.

Changes:

  • Bump version floor to 1.4 and update release notes/docs to describe UN M.49 containment matching and region expansion.
  • Add CLDR-sourced UN M.49 containment dataset + APIs (IsMatch(..., regionContainment) and ExpandRegion) with accompanying tests.
  • Re-sync / adjust GitHub Actions workflows for correct develop/main version classification and more targeted artifact handling.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
version.jsonBump version floor to 1.4.
README.mdUpdate release notes and add UN M.49 containment usage/docs; refactor link definitions.
HISTORY.mdAdd 1.4 release notes entry.
CODESTYLE.mdTemplate re-sync: carry-whole guidance and expanded general/tooling language.
AGENTS.mdTemplate re-sync: update workflow/process guidance and template-carry notes.
LanguageTags/UnM49Data.csAdd UN M.49 containment loader (CLDR XML) + JSON/codegen helpers + containment queries.
LanguageTags/UnM49DataGen.csGenerated embedded UN M.49 containment dataset.
LanguageData/unm49.jsonGenerated UN M.49 JSON dataset.
LanguageTags/LanguageLookup.csAdd UN M.49-backed containment matching overload and ExpandRegion.
LanguageTags/LanguageTagParser.csFix extlang validation to 3 alpha to avoid mis-parsing numeric regions (e.g., es-419).
LanguageTags/LanguageSchema.csAdd UnM49Data to the source-gen JSON context.
LanguageTagsCreate/CreateTagData.csExtend codegen tool to download/convert/generate UN M.49 data.
LanguageTagsTests/UnM49Tests.csNew dataset and containment tests for UN M.49 data.
LanguageTagsTests/LanguageLookupTests.csNew theories for region containment matching and ExpandRegion.
.github/workflows/get-version-task.ymlThread logical branch into NBGV classification to prevent develop publishing as stable.
.github/workflows/build-release-task.ymlAdd validate-release gate and surgical deletion of consumed release-asset-* artifacts.
.github/workflows/build-nugetlibrary-task.ymlThread branch through to versioning.
.github/workflows/publish-release.ymlGrant actions: write to enable surgical artifact cleanup; adjust badge invocation gating.
.github/workflows/test-pull-request.ymlUpdate action pin; remove blanket artifact cleanup job.
.github/workflows/run-codegen-pull-request-task.ymlUpdate action pin.
.github/workflows/build-datebadge-task.ymlSimplify gating (caller-gated) and update BYOB action pin.
.github/workflows/merge-bot-pull-request.ymlFix concurrency grouping under pull_request_target to key on PR number.
.gitattributesAdd explicit LF pinning rules for execution-sensitive files (e.g., .sh, Dockerfiles, husky hook).
.editorconfigAdd LF rule for Dockerfiles.

// <territoryContainment>
// <group type="419" contains="013 029 005" grouping="true"/>
// <group type="013" contains="BZ CR GT HN MX NI PA SV"/>
// Numeric types are UN M.49 region codes, 2 letter values are ISO 3166-1 country codes
Comment on lines 15 to 19
private readonly Iso6392Data _iso6392 = Iso6392Data.Create();
private readonly Iso6393Data _iso6393 = Iso6393Data.Create();
private readonly Rfc5646Data _rfc5646 = Rfc5646Data.Create();
private readonly UnM49Data _unM49 = UnM49Data.Create();
private readonly List<(string ietf, string iso)> _overrides = [];
@ptr727
ptr727 merged commit ef05e9e into mainJun 26, 2026
7 checks passed
Sign up for freeto 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

@ptr727