private/specs/Get-FolderList.ps1
<#
.SYNOPSIS Get a list of all API Spec folders that are relevant for the given Provider Namespace. .DESCRIPTION Get a list of all API Spec folders that are relevant for the given Provider Namespace. Paths must contain: - ProviderNamespace - Resource-Manager - Stable or Preview Paths must NOT contain - Examples .PARAMETER RootFolder Mandatory. The root folder to search from (recursively). .PARAMETER ProviderNamespace Optional. The ProviderNsmespace to filter for. .EXAMPLE Get-FolderList -RootFolder './temp/azure-rest-api-specs/specification' -ProviderNamespace 'Microsoft.KeyVault' Get all folders of the 'Microsoft.KeyVault' provider namespace that exist in the 'specifications' folder .EXAMPLE Get-FolderList -RootFolder './temp/azure-rest-api-specs/specification' Get all folders that contain resource data that exist in the 'specifications' folder #> function Get-FolderList { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $RootFolder, [Parameter(Mandatory = $false)] [string] $ProviderNamespace ) $allFolderPaths = (Get-ChildItem -Path $RootFolder -Recurse -Directory).FullName Write-Verbose ('Fetched all [{0}] folder paths. Filtering...' -f $allFolderPaths.Count) # Filter $filteredFolderPaths = $allFolderPaths | Where-Object { ($_ -replace '\\', '/') -like '*/resource-manager/*' } $filteredFilePaths = $filteredFilePaths | Where-Object { ($_ -replace '\\', '/') -notlike '*/examples/*' } if ($ProviderNamespace) { $filteredFolderPaths = $filteredFolderPaths | Where-Object { ($_ -replace '\\', '/') -like "*/$ProviderNamespace/*" } } $filteredFolderPaths = $filteredFolderPaths | Where-Object { (($_ -replace '\\', '/') -like '*/stable') -or (($_ -replace '\\', '/') -like '*/preview') } $filteredFolderPaths = $filteredFolderPaths | ForEach-Object { Split-Path -Path $_ -Parent } $filteredFolderPaths = $filteredFolderPaths | Select-Object -Unique if (-not $filteredFolderPaths) { Write-Warning "No folders found for provider namespace [$ProviderNamespace]" return $filteredFolderPaths } Write-Verbose ('Filtered down to [{0}] folders.' -f $filteredFolderPaths.Length) return $filteredFolderPaths | Sort-Object } |