private/specs/Get-FileList.ps1
<#
.SYNOPSIS Get a list of all API Spec files that are relevant for the given Provider Namespace & Resource Type. .DESCRIPTION Get a list of all API Spec files that are relevant for the given Provider Namespace & Resource Type. Paths must contain: - ProviderNamespace - Resource-Manager - API version - Speicication JSON file - Preview (if configured) Paths must NOT contain - Examples .PARAMETER RootFolder Mandatory. The root folder to search from (recursively). .PARAMETER ProviderNamespace Mandatory. The ProviderNsmespace to filter for. .PARAMETER ResourceType Mandatory. The ResourceType to filter for. .PARAMETER IncludePreview Optional. Consider preview versions .EXAMPLE Get-FileList -RootFolder './temp/azure-rest-api-specs/specification' -ProviderNamespace 'Microsoft.KeyVault' -ResourceType 'vaults' Get the API spec files for [Microsoft.KeyVault/vaults]. #> function Get-FileList { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $rootFolder, [Parameter(Mandatory = $true)] [string] $ProviderNamespace, [Parameter(Mandatory = $true)] [string] $ResourceType, [Parameter(Mandatory = $false)] [switch] $IncludePreview ) # TODO: Is this file intended to be used anywhere? $allFilePaths = (Get-ChildItem -Path $rootFolder -Recurse -File).FullName Write-Verbose ('Fetched all [{0}] file paths. Filtering...' -f $allFilePaths.Count) -Verbose # Filter $filteredFilePaths = $allFilePaths | Where-Object { ($_ -replace '\\', '/') -like '*/resource-manager/*' } $filteredFilePaths = $filteredFilePaths | Where-Object { ($_ -replace '\\', '/') -notlike '*/examples/*' } $filteredFilePaths = $filteredFilePaths | Where-Object { ($_ -replace '\\', '/') -like "*/$ProviderNamespace/*" } if (-not $IncludePreview) { $filteredFilePaths = $filteredFilePaths | Where-Object { ($_ -replace '\\', '/') -notlike '*/preview/*' } } $filteredFilePaths = $filteredFilePaths | Where-Object { ($_ -replace '\\', '/') -like ('*/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*/*.json') } $filteredFilePaths = $filteredFilePaths | Where-Object { ($_ -replace '\\', '/') -like ('*/*.json') } if (-not $filteredFilePaths) { Write-Warning "No files found for resource type [$ProviderNamespace/$ResourceType]" return $filteredFilePaths } Write-Verbose ('Filtered down to [{0}] files.' -f $filteredFilePaths.Length) -Verbose return $filteredFilePaths | Sort-Object } |