Modules/ActiveDirectoryDsc.Common/Build-Readme.ps1
<# .SYNOPSIS Builds the markdown documentation for the common module. .DESCRIPTION The Build-ReadMe script is used to build the markdown documentation for the common module. this uses functions from the PlatyPS PowerShell Module to build the markdown from the PowerShell comment based help in the module. .EXAMPLE Build-ReadMe .PARAMETER Path Specifies the output path for the function markdown files. .PARAMETER ModulePagePath Specifies the output path for the main module markdown file. .PARAMETER HelpVersion Specifies the version of the help files. .PARAMETER ModuleName Specifies the name of the main module. .PARAMETER CommonModuleName Specifies the name of the common module. .PARAMETER ModuleRootPath Specifies the path of the root of the main module. .PARAMETER StubModulePath Specifies the path of the stub modules. .PARAMETER Description Specifies the description for the common module. .INPUTS None .OUTPUTS System.IO.FileInfo[] #> [CmdletBinding()] param ( [Parameter()] [System.String] $Path = 'docs', [Parameter()] [System.String] $ModulePagePath = 'README.md', [Parameter()] [System.String] $HelpVersion = '1.0.0', [Parameter()] [System.String] $ModuleName = 'ActiveDirectoryDsc', [Parameter()] [System.String] $CommonModuleName = "$($ModuleName).Common", [Parameter()] [System.String] $ModuleRootPath = '..\..\..', [Parameter()] [System.String] $StubModulePath = "$ModuleRootPath\tests\Unit\Stubs", [Parameter()] [System.String] $Description = "The $CommonModuleName module is a PowerShell module that contains a set of functions that are " + ` "common across the $ModuleName Module" ) Function Remove-MetaData { [CmdletBinding()] param ( [Parameter()] [System.String[]] $Content ) $inMetadataBlock = $false $newContent = @() foreach ($line in $Content) { if ($line -eq '---') { if ($inMetadataBlock) { $inMetadataBlock = $false } else { $inMetadataBlock = $true } } else { if (!$inMetadataBlock) { $newContent += $line } } } return $newContent } $ErrorActionPreference = 'Stop' Set-StrictMode -Version 1.0 Write-Verbose -Message "Building the resource module" & "$ModuleRootPath\build.ps1" -Tasks build -Verbose:$false Write-Verbose -Message "Importing the test Stub Modules" $stubModules = Get-ChildItem -Path $StubModulePath -Filter '*.psm1' Import-Module -Name $stubModules.FullName -Verbose:$false -Force Write-Verbose -Message "Force importing the $CommonModuleName module" $moduleVersion = (Get-ChildItem -Path "$ModuleRootPath\output\$ModuleName")[0].Name Import-Module $ModuleRootPath\output\$ModuleName\$moduleVersion\Modules\$CommonModuleName -Verbose:$false -Force Write-Verbose "Adding the PrincipalContext Type" Add-TypeAssembly -AssemblyName 'System.DirectoryServices.AccountManagement' ` -TypeName 'System.DirectoryServices.AccountManagement.PrincipalContext' If (Test-Path -Path $Path) { Write-Verbose -Message "Removing the current $Path directory" Remove-Item -Path $Path -Recurse } Write-Verbose -Message "Creating the new module markdown help files in $Path" New-MarkdownHelp -Module $CommonModuleName -OutputFolder $Path -UseFullTypeName -AlphabeticParamsOrder ` -WithModulePage -ModulePagePath $modulePagePath -HelpVersion $HelpVersion -Force -FwLink 'N/A' Update-MarkdownHelpModule -Path $Path -RefreshModulePage -ModulePagePath $modulePagePath -AlphabeticParamsOrder ` -UseFullTypeName | Out-Null Write-Verbose -Message "Getting contents of $ModulePagePath file" $modulePageContent = Get-Content -Path $ModulePagePath Write-Verbose -Message 'Fixing README Markdown link paths' $modulePageContent = $modulePageContent.Replace('(', '(docs/') Write-Verbose -Message 'Updating README module description' $descriptionMarker = '{{ Fill in the Description }}' $modulePageContent = $modulePageContent.Replace($descriptionMarker, $description) Write-Verbose -Message 'Removing README Metadata' $newModulePageContent = Remove-MetaData -Content $modulePageContent Write-Verbose -Message "Writing updated $ModulePagePath file" $newModulePageContent | Out-File -FilePath $ModulePagePath -Encoding ascii Write-Verbose -Message 'Removing Metadata from function markdown files' $functionMdFiles = Get-ChildItem -Path $Path -Filter '*.md' foreach ($functionMdFile in $functionMdFiles) { $functionMdFileContent = Get-Content -Path $functionMdFile.FullName $newFunctionMdFileContent = Remove-MetaData -Content $functionMdFileContent $newFunctionMdFileContent | Out-File -FilePath $functionMdFile.FullName -Encoding ascii } |