From 6d12a62f2ba9b6289ac890f23a6fe19586e8040b Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 7 Feb 2026 23:43:23 +0100 Subject: [PATCH 1/7] adding local artifacts path to psmodulepath --- .github/workflows/release.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fbc8fb8a..a3d28547 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -279,6 +279,13 @@ jobs: throw "Staged modules path not found: $modulesPath" } + # Ensure required modules are discoverable during Test-ModuleManifest/Publish-Module. + $pathSeparator = [System.IO.Path]::PathSeparator + $modulePathEntries = $env:PSModulePath -split [regex]::Escape($pathSeparator) + if ($modulePathEntries -notcontains $modulesPath) { + $env:PSModulePath = $modulesPath + $pathSeparator + $env:PSModulePath + } + $repoPath = Join-Path $env:RUNNER_TEMP 'psrepo' New-Item -ItemType Directory -Path $repoPath -Force | Out-Null @@ -375,6 +382,13 @@ jobs: throw "Staged modules path not found: $modulesPath" } + # Ensure required modules are discoverable during Test-ModuleManifest/Publish-Module. + $pathSeparator = [System.IO.Path]::PathSeparator + $modulePathEntries = $env:PSModulePath -split [regex]::Escape($pathSeparator) + if ($modulePathEntries -notcontains $modulesPath) { + $env:PSModulePath = $modulesPath + $pathSeparator + $env:PSModulePath + } + # Load publish order from configuration $configPath = Join-Path $env:GITHUB_WORKSPACE 'tools/ModulePublishOrder.psd1' $config = Import-PowerShellDataFile -LiteralPath $configPath From 0b95c80643824ea643a506f9901f981e51ebc4ad Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 7 Feb 2026 23:47:45 +0100 Subject: [PATCH 2/7] fix HelpInfoUri to top level --- src/IdLE.Provider.AD/IdLE.Provider.AD.psd1 | 2 +- .../IdLE.Provider.DirectorySync.EntraConnect.psd1 | 2 +- src/IdLE.Provider.EntraID/IdLE.Provider.EntraID.psd1 | 2 +- .../IdLE.Provider.ExchangeOnline.psd1 | 2 +- src/IdLE.Provider.Mock/IdLE.Provider.Mock.psd1 | 2 +- src/IdLE.Steps.Common/IdLE.Steps.Common.psd1 | 2 +- src/IdLE.Steps.DirectorySync/IdLE.Steps.DirectorySync.psd1 | 2 +- src/IdLE.Steps.Mailbox/IdLE.Steps.Mailbox.psd1 | 2 +- src/IdLE/IdLE.psd1 | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/IdLE.Provider.AD/IdLE.Provider.AD.psd1 b/src/IdLE.Provider.AD/IdLE.Provider.AD.psd1 index b73b3940..ef8fae7f 100644 --- a/src/IdLE.Provider.AD/IdLE.Provider.AD.psd1 +++ b/src/IdLE.Provider.AD/IdLE.Provider.AD.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Active Directory (on-prem) provider implementation for IdLE (Windows-only, requires RSAT/ActiveDirectory module).' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' FunctionsToExport = @( 'New-IdleADIdentityProvider' @@ -17,7 +18,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Provider.DirectorySync.EntraConnect/IdLE.Provider.DirectorySync.EntraConnect.psd1 b/src/IdLE.Provider.DirectorySync.EntraConnect/IdLE.Provider.DirectorySync.EntraConnect.psd1 index 2e256825..446be13e 100644 --- a/src/IdLE.Provider.DirectorySync.EntraConnect/IdLE.Provider.DirectorySync.EntraConnect.psd1 +++ b/src/IdLE.Provider.DirectorySync.EntraConnect/IdLE.Provider.DirectorySync.EntraConnect.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Entra Connect directory sync provider for IdLE (remote execution).' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' FunctionsToExport = @( 'New-IdleEntraConnectDirectorySyncProvider' @@ -17,7 +18,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Provider.EntraID/IdLE.Provider.EntraID.psd1 b/src/IdLE.Provider.EntraID/IdLE.Provider.EntraID.psd1 index 7f4ca6e7..b9418b64 100644 --- a/src/IdLE.Provider.EntraID/IdLE.Provider.EntraID.psd1 +++ b/src/IdLE.Provider.EntraID/IdLE.Provider.EntraID.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Microsoft Entra ID (Azure AD) provider implementation for IdLE using Microsoft Graph API.' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' FunctionsToExport = @( 'New-IdleEntraIDIdentityProvider' @@ -17,7 +18,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Provider.ExchangeOnline/IdLE.Provider.ExchangeOnline.psd1 b/src/IdLE.Provider.ExchangeOnline/IdLE.Provider.ExchangeOnline.psd1 index be6e968b..1bf4b53b 100644 --- a/src/IdLE.Provider.ExchangeOnline/IdLE.Provider.ExchangeOnline.psd1 +++ b/src/IdLE.Provider.ExchangeOnline/IdLE.Provider.ExchangeOnline.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Exchange Online mailbox provider implementation for IdLE (requires ExchangeOnlineManagement module).' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' FunctionsToExport = @( 'New-IdleExchangeOnlineProvider' @@ -17,7 +18,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Provider.Mock/IdLE.Provider.Mock.psd1 b/src/IdLE.Provider.Mock/IdLE.Provider.Mock.psd1 index e97ea3b7..67b22899 100644 --- a/src/IdLE.Provider.Mock/IdLE.Provider.Mock.psd1 +++ b/src/IdLE.Provider.Mock/IdLE.Provider.Mock.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Mock provider implementation for IdLE (in-memory, deterministic).' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' FunctionsToExport = @( 'New-IdleMockIdentityProvider' @@ -17,7 +18,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Steps.Common/IdLE.Steps.Common.psd1 b/src/IdLE.Steps.Common/IdLE.Steps.Common.psd1 index bb69fac3..c8b3102a 100644 --- a/src/IdLE.Steps.Common/IdLE.Steps.Common.psd1 +++ b/src/IdLE.Steps.Common/IdLE.Steps.Common.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Common built-in steps for IdLE.' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' RequiredModules = @('IdLE.Core') @@ -27,7 +28,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Steps.DirectorySync/IdLE.Steps.DirectorySync.psd1 b/src/IdLE.Steps.DirectorySync/IdLE.Steps.DirectorySync.psd1 index d03ff75e..6e637604 100644 --- a/src/IdLE.Steps.DirectorySync/IdLE.Steps.DirectorySync.psd1 +++ b/src/IdLE.Steps.DirectorySync/IdLE.Steps.DirectorySync.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Generic directory sync steps for IdLE.' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' RequiredModules = @( 'IdLE.Core', @@ -23,7 +24,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE.Steps.Mailbox/IdLE.Steps.Mailbox.psd1 b/src/IdLE.Steps.Mailbox/IdLE.Steps.Mailbox.psd1 index 647ddce9..130ccddc 100644 --- a/src/IdLE.Steps.Mailbox/IdLE.Steps.Mailbox.psd1 +++ b/src/IdLE.Steps.Mailbox/IdLE.Steps.Mailbox.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'Provider-agnostic mailbox step pack for IdLE.' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' RequiredModules = @('IdLE.Core', 'IdLE.Steps.Common') @@ -22,7 +23,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' diff --git a/src/IdLE/IdLE.psd1 b/src/IdLE/IdLE.psd1 index 344c02a5..f6b9deb5 100644 --- a/src/IdLE/IdLE.psd1 +++ b/src/IdLE/IdLE.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'IdentityLifecycleEngine (IdLE) meta-module. Imports IdLE.Core and optional packs.' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' # ScriptsToProcess runs before NestedModules are loaded # This script bootstraps PSModulePath for repo/zip layouts @@ -42,7 +43,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' From b912de3cfe5a7d133b618861226977a1ffe82b45 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 7 Feb 2026 23:48:42 +0100 Subject: [PATCH 3/7] improved catch block Write-Verbose --- src/IdLE/IdLE.Init.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/IdLE/IdLE.Init.ps1 b/src/IdLE/IdLE.Init.ps1 index 28e02679..d536e04b 100644 --- a/src/IdLE/IdLE.Init.ps1 +++ b/src/IdLE/IdLE.Init.ps1 @@ -36,7 +36,7 @@ if ($PSScriptRoot) { } } catch { # Non-fatal: path resolution can fail for invalid entries. - Write-Verbose "Skipping unresolved PSModulePath entry: $p" + Write-Verbose -Message "Skipping unresolved PSModulePath entry: $p" } } } From 3fa01aca834ea55bdaae01ab4eeba1f0121c4cc3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:54:11 +0000 Subject: [PATCH 4/7] Initial plan From 66647ac2bafe089a2802aadc45263f6b5f5845ee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:56:55 +0000 Subject: [PATCH 5/7] Scope PSModulePath modification to publish phase only Restore original PSModulePath before install/import verification to ensure Import-Module resolves the installed package from LocalRepo, not the staged build output from artifacts/modules. This fixes the validation gate to properly catch broken or missing dependency wiring in published packages. Co-authored-by: blindzero <13959569+blindzero@users.noreply.github.com> --- .github/workflows/release.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3d28547..98f45405 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -280,6 +280,8 @@ jobs: } # Ensure required modules are discoverable during Test-ModuleManifest/Publish-Module. + # Save original PSModulePath to restore before install/import verification. + $originalPSModulePath = $env:PSModulePath $pathSeparator = [System.IO.Path]::PathSeparator $modulePathEntries = $env:PSModulePath -split [regex]::Escape($pathSeparator) if ($modulePathEntries -notcontains $modulesPath) { @@ -309,6 +311,10 @@ jobs: Write-Host " ✓ Published $moduleName" } + # Restore original PSModulePath before install/import verification + # to ensure Import-Module resolves the installed package, not the staged build. + $env:PSModulePath = $originalPSModulePath + # Test that IdLE can be installed and imports correctly Write-Host "`nInstalling IdLE from LocalRepo..." Install-Module -Name 'IdLE' -Repository 'LocalRepo' -Scope CurrentUser -Force -AllowClobber -ErrorAction Stop From 9b1cd25133fbd418fa32a5a6bbd08c4c1db93de4 Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sat, 7 Feb 2026 23:59:43 +0100 Subject: [PATCH 6/7] fix HelpInfoUri removed from PSData --- src/IdLE.Core/IdLE.Core.psd1 | 1 - 1 file changed, 1 deletion(-) diff --git a/src/IdLE.Core/IdLE.Core.psd1 b/src/IdLE.Core/IdLE.Core.psd1 index 366a2845..13aed634 100644 --- a/src/IdLE.Core/IdLE.Core.psd1 +++ b/src/IdLE.Core/IdLE.Core.psd1 @@ -26,7 +26,6 @@ LicenseUri = 'https://www.apache.org/licenses/LICENSE-2.0' ProjectUri = 'https://github.com/blindzero/IdentityLifecycleEngine' ReleaseNotes = 'https://github.com/blindzero/IdentityLifecycleEngine/releases' - HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' ContactEmail = '13959569+blindzero@users.noreply.github.com' RepositoryUrl = 'https://github.com/blindzero/IdentityLifecycleEngine' BugTrackerUrl = 'https://github.com/blindzero/IdentityLifecycleEngine/issues' From f62e6cf03df931fa12bc77fd2905b1f334495eeb Mon Sep 17 00:00:00 2001 From: Matthias Fleschuetz <13959569+blindzero@users.noreply.github.com> Date: Sun, 8 Feb 2026 00:03:06 +0100 Subject: [PATCH 7/7] re-adding HelpInfoUri in top level --- src/IdLE.Core/IdLE.Core.psd1 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/IdLE.Core/IdLE.Core.psd1 b/src/IdLE.Core/IdLE.Core.psd1 index 13aed634..6cdec2a2 100644 --- a/src/IdLE.Core/IdLE.Core.psd1 +++ b/src/IdLE.Core/IdLE.Core.psd1 @@ -6,6 +6,7 @@ Copyright = '(c) Matthias Fleschuetz. All rights reserved.' Description = 'IdLE Core engine: domain model, workflow loading/validation, plan builder and execution pipeline.' PowerShellVersion = '7.0' + HelpInfoUri = 'https://blindzero.github.io/IdentityLifecycleEngine/' FunctionsToExport = @( 'New-IdleLifecycleRequestObject',