Skip to content

Prepare for v3.0.1 - #2466

Merged
mjcheetham merged 24 commits into
git-ecosystem:releases/v3.0from
mjcheetham:rel301
Oct 6, 2026
Merged

mjcheetham merged 24 commits into
git-ecosystem:releases/v3.0from
mjcheetham:rel301

Conversation

@mjcheetham

@mjcheetham mjcheetham commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Bug Fixes:

Features:

Other changes:

mjcheetham and others added 24 commits September 23, 2026 14:07
Fix the VERSION file parsing for release steps.
The VERSION file previously had four parts (x.y.z.w), but we only care
about the first three components (x.y.z).

Now we moved VERSION to only have 3-parts itself, so the release
pipeline does not need to strip the .w part.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
With GCM 3.0 on Windows, drop the 32-bit x86 target from being built in
CI and release jobs.

We still retain the ability to build for win-x86 locally for those that
wish to build it themselves. This is similar to the support we have for
linux-arm (armhf) - you can built it yourself; we do not publish bits.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
…stem#2456)

With GCM 3.x on Windows, drop the 32-bit x86 target from being built in
CI and release jobs.

We still retain the ability to build for win-x86 locally for those that
wish to build it themselves. This is similar to the support we have for
linux-arm (armhf) - you can built it yourself; we do not publish bits.

cc @dscho as this impacts what GCM package version the i686 MinGit
distributions will need to reference (they'll need to reference the
latest 2.x rather than 3.x).
Clarify that only .NET supported Linux distros are supported by GCM,
that x86 on Windows no longer carries official builds, and that x64 on
macOS is best effort (with Apple dropping Intel support with their
next major release; macOS 28).

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
As of GCM 3.0, the 'UseMsAuthDefaultAccount' setting is now a tri-state
flag, which has the following meanings:

  true  => always use the OS account
  false => never use the OS account
  unset => ask to use the OS account

This means that, on DevBox, where we currently special-case and return
'true' for this setting, the user has no way to sign-in to an
Entra-backed provider using a _different_ account than the OS default
account.

Remove the special-casing of DevBox, and return `null` (unset) so the
user continues to see the prompt.

Until we can wire-up `continue=1` and retry logic to the Azure Repos
provider, we need to make the user experience better for this scenario.

Note, there is an obscure workaround: manually bind your Azure DevOps
org to a different account - this is not very discoverable.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
As of GCM 3.0, the 'UseMsAuthDefaultAccount' setting is now a tri-state
flag, which has the following meanings:

```text
  true  => always use the OS account
  false => never use the OS account
  unset => ask to use the OS account
```

This means that, on DevBox, where we currently special-case and return
'true' for this setting, the user has no way to sign-in to an
Entra-backed provider using a _different_ account than the OS default
account.

Remove the special-casing of DevBox, and return `null` (unset) so the
user continues to see the prompt.

Until we can wire-up `continue=1` and retry logic to the Azure Repos
provider, we need to make the user experience better for this scenario.

Note, there is an obscure workaround: manually bind your Azure DevOps
org to a different account - this is not very discoverable.
add and register capability flag for 'authtype'
create credential output based on Authorization type and support
define and use Constants for credential protocol keys
move default arguments for GitResponse flags to internal constructor
emit 'ephemeral' value in GitResponse if set and capability is present
check 'ephemeral' setting in GitRequest content
Different versions of Git for Windows have different installation path
prefixes; our existing docs only reference the mingw64 toolchain path.

Update the docs to call out the different installation paths for x64
(UCRT64 and MINGW64), and ARM64 (CLANGARM64).

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
…#2460)

Different versions of Git for Windows have different installation path
prefixes; our existing docs only reference the mingw64 toolchain path.

Update the docs to call out the different installation paths for x64
(UCRT64 and MINGW64), and ARM64 (CLANGARM64).

[Rendered
docs](https://github.com/mjcheetham/git-credential-manager/blob/a091842e6200cca938df97fb3750d4dd48008951/docs/wsl.md)
The file paths for using GCM in WSL _without_ Git for Windows are only
correct for the old x86 GCM installations.

Update the docs to call out the x64 and ARM64 paths too, first.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
The file paths for using GCM in WSL _without_ Git for Windows are only
correct for the old x86 GCM installations.

Update the docs to call out the x64 and ARM64 paths too, first.

[Rendered
docs](https://github.com/mjcheetham/git-credential-manager/blob/917c8244794c37412c556e1fab36a79b87df68f6/docs/wsl.md)
switch to alternative credential properties for 'authtype'
add support for 'ephemeral' state to protocol and basic credential
interface
Ensure that we only consider a console window (or hosting terminal in
case of ConPTY) a valid parent for MSAL windows if it is visible.

This will prevent MSAL windows from being hidden too. Note that we do
**not** apply the visibility check to the optional explicitly provided
parent window (via `GCM_MODEL_PARENTHWND)` - the caller should be the
one to decide if their handle is good to use or not.

Finally, note that we do **not** check for a minimised parent window
(via `IsIconic(HWND)`) because we should probably also remain minimised
if our parent was.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Extract the console parent lookup logic to a static method in
preparation for allowing tests to mock it.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Allow testing of the parent window adapter by allowing mocks of the core
platform-specific APIs:

* creation of stub window
* window visibilty checking
* get console window

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
In previous versions of GCM (2.x) we preferred to parent MSAL windows to
the console window, if possible, over creating our own stub 'progress'
window.

In GCM 3.0.0 we accidentally reversed that preference, which means in
practice we always used the stub window and never the console window.

Let's reverse that back to the desired order:

1. Explicit parent (via `GCM_MODAL_PARENTHWND`)
2. Console window parent (if present and visible)
3. Stub progress window (if required by the caller)
4. None

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Add comprehensive tests of the MSAL parent window adapter, and the
precedence logic for selecting (and creating) an appropriate parent
window.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Windows authentication dialogs need an appropriate parent window, but
Git is not always launched from a visible terminal. GUI applications and
background processes can retain a hidden console with a valid HWND.
Automatically selecting that invisible owner can leave authentication UI
out of view, making the operation appear stalled while it waits for
credentials.

GCM 3.0 also accidentally reversed the parent-selection preference used
in 2.x: interactive Windows broker authentication creates a progress
window before considering an existing console owner. This introduces
unnecessary temporary UI and disconnects authentication dialogs from the
terminal that initiated the operation.

This PR restores console-first parenting while rejecting invisible
automatically discovered owners. The selection order becomes:

1. An explicit HWND supplied through `GCM_MODAL_PARENTHWND`.
2. The console’s root-owner HWND, provided `IsWindowVisible` returns
true.
3. A GCM-created progress window, if a parent is required.
4. No parent otherwise.

The visibility check applies **after** walking the window parent/owner
chain. This matters for ConPTY, where the console HWND may be a hidden
compatibility window while its root owner is the visible terminal.

Explicit HWNDs remain the caller’s responsibility and are not
visibility-filtered. Minimised owners also remain eligible: this change
deliberately does not add an `IsIconic` check or replace a minimised
owner with an independent progress window.

The series adds regression coverage for parent precedence, hidden or
missing owners, and progress-window cleanup, and documents
`GCM_MODAL_PARENTHWND` for applications integrating Git into their own
GUI.
Console parenting currently lives inside the MSAL adapter, so other
in-process authentication dialogs do not benefit from the visible
terminal owner. Those prompts can appear disconnected from the Git
operation that opened them.

Resolve the parent at the shared authentication boundary so all
in-process prompts follow the same policy. Explicit handles retain
precedence, hidden console owners are ignored, and minimised owners
remain eligible.

Keep progress-window creation in the MSAL adapter: it is a fallback
for broker flows that require a parent, not a default owner for
ordinary authentication dialogs.

Assisted-by: Claude Sonnet 5
Assisted-by: GPT-6.1 Sol
Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Helper commands resolve their parent handle independently of the
in-process authentication path. Keeping only the explicit-HWND case
would leave their default parent-selection policy inconsistent with
the shared authentication lookup.

Use the same visible-console fallback when no handle is configured.
Explicit handles still take precedence, and a missing or hidden
console leaves the parent unset.

Assisted-by: GPT-6.1 Sol
Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
This follows up on git-ecosystem#2464.

Visible-console parenting currently lives inside the MSAL adapter, so
_other_ in-process authentication dialogs remain unparented unless
`GCM_MODAL_PARENTHWND` is supplied. Those prompts can appear
disconnected from the terminal that initiated the Git operation.

This PR moves console-parent discovery into a shared platform helper and
uses it in the authentication and UI-helper parent handle lookups. This
extends the fallback beyond MSAL while keeping the two lookup paths
consistent. MSAL retains responsibility for creating a progress window
when broker authentication requires a parent and no usable handle was
resolved.

Explicit HWNDs still take precedence and are not visibility-filtered.
Automatically discovered owners must be visible, with visibility checked
after resolving the console's root owner to accommodate ConPTY
compatibility windows.

Update the environment variable documentation to describe the fallback
to the console-parent window.

Tested behaviour on Windows Terminal, conhost.exe (classic terminal
host), and Git Bash/MSYS2's terminal.
Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
@mjcheetham
mjcheetham requested review from a team and dscho October 6, 2026 11:17
@mjcheetham
mjcheetham enabled auto-merge October 6, 2026 11:19
@mjcheetham
mjcheetham merged commit 4e8a96b into git-ecosystem:releases/v3.0 Oct 6, 2026
@mjcheetham
mjcheetham deleted the rel301 branch October 6, 2026 11:25
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.

5 participants