You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-`Set-GitSshKeyOpenSsh` for Unix: validates key format, checks permissions, sets `GIT_SSH_COMMAND`
27
+
-`Set-GitSshKeyPlink` for Windows: existing PuTTY/Pageant logic (unchanged behavior)
28
+
-`Read-CredentialsFile` now warns about wrong key format for the current platform
17
29
-`LsiGitCheckout.psm1` module file containing all function definitions
18
30
-`LsiGitCheckout.psd1` module manifest
19
31
-`Initialize-LsiGitCheckout` function for module state initialization
20
32
- Automated unit tests using Pester 5.x (`tests/LsiGitCheckout.Unit.Tests.ps1`)
21
33
- Automated integration tests for all 16 test configs (`tests/LsiGitCheckout.Integration.Tests.ps1`)
34
+
-**Structured JSON output** via `-OutputFile` parameter for CI/CD pipeline integration
35
+
- Schema version 1.0.0 with execution metadata, per-repository results, summary counters, and error messages
36
+
-`Export-CheckoutResults` function generates the JSON output
37
+
- Output is guaranteed even on failure (written in `finally` block)
38
+
-**Post-checkout script tracking** in JSON output per repository (`postCheckoutScript` field with configured, found, executed, status, reason) and at root level (`rootPostCheckoutScripts` array)
39
+
-**`requestedBy` field** on each repository entry showing which parent repo or dependency file requested it
40
+
-`Test-InteractiveSession` helper to detect non-interactive environments
41
+
- Error message collector in `Write-Log` for structured output
42
+
-`docs/test_repositories_reference.md` — catalog of all test repo tags and their dependencies
43
+
44
+
### Fixed
45
+
46
+
-**Show-ErrorDialog pipeline leakage**: `MessageBox::Show()` return value leaked to pipeline, causing failures to be counted as successes
47
+
-**Non-interactive GUI dialogs**: `Show-ErrorDialog` and `Show-ConfirmDialog` now skip GUI in `pwsh -NonInteractive` and CI environments
48
+
-**SemVer version parsing in DryRun**: added guard to skip parsing when repo is not cloned
49
+
-**SemVer version resolution with `-DisableRecursion`** (#16): version resolution was gated behind `RecursiveMode`, causing empty tags when using `-DisableRecursion` with SemVer mode
There are 16 test JSON configs covering SemVer, Agnostic, API incompatibility, custom paths, post-checkout scripts, and recursive dependencies.
44
+
There are 17 test cases across 16 test configs covering SemVer, Agnostic, API incompatibility (Permissive + Strict), custom paths, post-checkout scripts, and recursive dependencies. See `docs/testing_infrastructure.md` for the full test architecture.
45
+
46
+
**Important**: Integration tests depend on 5 external GitHub test repos. Modifying those repos will break the tests. See `docs/testing_infrastructure.md` for details.
42
47
43
48
## Architecture
44
49
@@ -48,8 +53,15 @@ There are 16 test JSON configs covering SemVer, Agnostic, API incompatibility, c
48
53
-**Two dependency resolution modes**: SemVer (recommended, automatic version resolution) and Agnostic (explicit tag-based)
49
54
-**Configuration**: JSON files — `dependencies.json` for repos, `git_credentials.json` for SSH keys
50
55
-**Recursive processing**: walks dependency trees with conflict detection, max depth configurable
51
-
-**SSH**: PuTTY/Pageant integration for authentication (`.ppk` key format)
56
+
-**SSH**: Cross-platform — PuTTY/Pageant on Windows (`.ppk`), OpenSSH on macOS/Linux
52
57
-**Post-checkout scripts**: optional PowerShell scripts run after successful checkouts
58
+
-**Structured output**: `-OutputFile` writes JSON (schema 1.0.0) with per-repo results, post-checkout script tracking, and `requestedBy` parent chain
59
+
60
+
## Design Decisions
61
+
62
+
-**API compatibility in Agnostic mode**: In **Permissive** mode (default), version/tag conflicts during recursive checkout are resolved silently by picking the best available tag. In **Strict** mode, any tag mismatch is an error. This is controlled by `-ApiCompatibility` (CLI) or `"API Compatibility"` (per-repo JSON field).
63
+
-**SemVer major version conflicts**: SemVer mode always rejects cross-major version incompatibilities regardless of the API compatibility setting, since different major versions imply breaking API changes by SemVer convention.
64
+
-**SSH transport is platform-specific**: On Windows, PuTTY/plink with `.ppk` keys and Pageant is used. On macOS/Linux, OpenSSH is used via `GIT_SSH_COMMAND="ssh -i <key> -o IdentitiesOnly=yes"`, which specifies keys per-host without requiring `~/.ssh/config` changes or a running `ssh-agent`. **Why PuTTY on Windows**: We attempted OpenSSH on Windows but hit a specific failure: when a parent repository is cloned via HTTPS and has submodules accessed via SSH, the `git submodule update` process on Windows did not reliably inherit `GIT_SSH_COMMAND`/`GIT_SSH` environment variables, causing SSH submodule fetches to fail silently or hang. PuTTY/plink with Pageant (which manages keys via a system-tray agent process rather than environment variables) was the only reliable workaround. This issue was not reproduced on macOS/Linux, where environment variable inheritance across git subprocess forks works correctly.
0 commit comments