Skip to content

Release v2.1.0-rc.3#5256

Merged
tig merged 13 commits into
mainfrom
release/v2.1.0-rc.3
May 8, 2026
Merged

Release v2.1.0-rc.3#5256
tig merged 13 commits into
mainfrom
release/v2.1.0-rc.3

Conversation

@tig
Copy link
Copy Markdown
Member

@tig tig commented May 8, 2026

Release v2.1.0-rc.3

This is a rc pre-release.

Version: 2.1.0-rc.3
NuGet Package: Terminal.Gui 2.1.0-rc.3

What happens when this PR is merged

  1. ✅ The Finalize Release workflow will automatically create tag v2.1.0-rc.3
  2. ✅ The Publish workflow will build and push to NuGet.org
  3. ✅ A GitHub Release will be created with auto-generated notes
  4. ✅ A back-merge PR from maindevelop will be opened

Checklist

  • CI passes on this PR
  • Version looks correct: 2.1.0-rc.3
  • Release notes reviewed (will be auto-generated on merge)

tig and others added 13 commits May 7, 2026 16:33
Adds --smoke-test flag to NativeAot example that creates all views,
verifies no AOT crashes, and exits. CI now runs the published AOT
binary after dotnet publish to catch runtime AOT regressions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Back-merge v2.1.0-rc.2 from main into develop
Adds Examples/NativeAot/SmokeTest — a standalone project that references
Terminal.Gui via PackageReference (not ProjectReference) and AOT-publishes
+ runs it. This catches AOT runtime errors that only manifest when
consuming the NuGet package, where trimming decisions differ from a
direct project reference.

CI flow: Pack → AOT publish (ProjectRef) → run → AOT publish (NuGet) → run

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two paths leak OSC 8 hyperlink state into adjacent rendering:

1. In `OutputBufferImpl.SetAttributeAndDirty`, when a cell that previously
   carried a URL is overdrawn by content with no `CurrentUrl` set (e.g. a
   parent view filling its content area, or a Link whose displayed text
   shrank), the cell becomes dirty but the stale entry stays in `_urlMap`.
   The next render wraps that cell in OSC 8, so unrelated content appears
   hyperlinked. Now the entry is removed when `CurrentUrl` is null/empty.

2. In `OutputBase.Write`, when dirty cells with a URL are flushed mid-row
   because a clean cell follows, the OSC 8 start sequence is emitted to
   the terminal but `outputStringBuilder` is cleared while `_lastUrl`
   stays set. If the row ends without another flush the existing
   `outputStringBuilder.Length <= 0` early-`continue` skips the OSC 8
   close, leaving the hyperlink open across the row boundary so later
   rows render as part of the link. Now the close is emitted at end of
   row whenever `_lastUrl` is set.

Adds three regression tests in `OutputBaseTests`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SmokeTest was inside Examples/NativeAot/ so its Program.cs got
auto-included in NativeAot.csproj (SDK default glob), causing
'more than one entry point' error.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
SmokeTest.csproj uses PackageReference Version='*' to pick up the
freshly-packed local nupkg. Central Package Management (NU1008)
blocks inline Version attributes, so opt this CI-only project out.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…oke test

Instead of just creating views and exiting, smoke tests now use
RunAsync with a 5-second CancellationToken timeout to exercise the
full app lifecycle: Init → Run → layout → draw → event loop → stop.

DisableRealDriverIO=1 env var enables headless execution in CI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
In CI, dotnet pack produces a prerelease version (e.g. 2.1.0-PullRequest5251.135).
NuGet's Version='*' only matches stable releases, so it was resolving
an old stable package from nuget.org that didn't have RunAsync.
Version='*-*' matches prerelease versions too.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The NuGet-based SmokeTest added complexity (CPM opt-out, prerelease
version resolution, packageSourceMapping) without catching different
bugs. The ILC runs the same analysis regardless of reference type.

The ProjectReference-based NativeAot --smoke-test already:
- Produces a real AOT native binary via dotnet publish
- Runs it with DisableRealDriverIO for headless CI
- Exercises full app lifecycle via RunAsync with timeout

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes #4892. OSC 8 hyperlink rendering does not clean up
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants