src/public/Invoke-BuildModule.ps1
function Invoke-BuildModule { [CmdletBinding()] param( [string] $ModulePath, [int] $ModuleFileTemplate ) begin { if ( -not $PSBoundParameters.ContainsKey('ModulePath') ) { $ModulePath = (Get-Location).Path } if ( (Get-Location).Path -ne (Resolve-Path $ModulePath) ) { Set-Location $ModulePath } $nugetOutputDir = Join-Path $ModulePath "nuget" $settingsPath = Join-Path $ModulePath "module.json" if ( -not ( Test-Path $settingsPath ) ) { Write-Error "Settings file cannot be found in path: '$settingsPath'" } $exePattern = '.exe' $nugetPath = Get-NuGetExePath } process { $settings = Get-Content $settingsPath | Out-String | ConvertFrom-Json if ( $settings.Packages.PSObject.Properties.Count -gt 0 ) { New-Item -Name ".\packages" -ItemType Directory -ErrorAction SilentlyContinue Invoke-GeneratePackagesConfig -OutputPath $ModulePath -Packages $settings.Packages Invoke-Expression "$nugetPath install -OutputDirectory $nugetOutputDir" $nugetPackages = $settings.Packages.PSObject.Properties | ForEach-Object { $_.Name + '.' + $_.Value } Set-Location $nugetOutputDir [string[]] $requiredAssemblies = @() foreach ( $nugetPackageDir in $nugetPackages ) { $assemblies = Invoke-ExtractPackageFiles ( Join-Path (Get-Location).Path $nugetPackageDir ) $assemblies | ForEach-Object { if ( -not ( $_ -match $exePattern ) ) { $requiredAssemblies += "packages\$_" } } $assemblyPaths = $assemblies | ForEach-Object { $_.FullName } foreach ($path in $assemblyPaths) { Copy-Item $path ..\packages } } Set-Location .. Remove-Item -LiteralPath $nugetOutputDir -Force -Recurse Remove-Item -LiteralPath "$ModulePath\packages.config" -Force } $parameters = @{} if ( $settings.ModuleArguments ) { $settings.ModuleArguments.PSObject.Properties | ForEach-Object { $parameters[$_.Name] = $_.Value } } $additionalCommands = '' if ( $settings.AdditionalCommands ) { $additionalCommands = $settings.AdditionalCommands -join [System.Environment]::NewLine } Invoke-GenerateModuleFile ` -templateOption $ModuleFileTemplate ` -requiredModules $settings.RequiredModules ` -parameters $parameters ` -additionalCommands $additionalCommands ` -outputPath "$ModulePath\$($settings.Name).psm1" New-ModuleManifest ` -Path ".\$($settings.Name).psd1" ` -RootModule ".\$($settings.Name).psm1" ` -ModuleVersion ( New-Object System.Version($settings.Version) ) ` -Guid $settings.Guid ` -Author $settings.Author ` -CompanyName $settings.CompanyName ` -Copyright $settings.Copyright ` -PowerShellVersion ( New-Object System.Version( $settings.PSVersion ) ) ` -Description $settings.Description ` -RequiredAssemblies $requiredAssemblies ` -DefaultCommandPrefix $settings.DefaultCommandPrefix } } |