Private/New-FolderStructure.ps1

function New-FolderStructure {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        [Parameter(Mandatory = $true)]
        [string] $targetDirectory,

        [Parameter(Mandatory = $true)]
        [string] $url,

        [Parameter(Mandatory = $false)]
        [string] $release = "latest",

        [Parameter(Mandatory = $true)]
        [string] $targetFolder,

        [Parameter(Mandatory = $false)]
        [string] $sourceFolder
    )

    if ($PSCmdlet.ShouldProcess("ALZ-Terraform module configuration", "modify")) {
        Write-Verbose "Downloading modules to $targetDirectory"
        if(!($release.StartsWith("v")) -and ($release -ne "latest")) {
            $release = "v$release"
        }

        $releaseTag = Get-GithubRelease -githubRepoUrl $url -targetDirectory $targetDirectory -moduleSourceFolder $sourceFolder -moduleTargetFolder $targetFolder -release $release
        $path = Join-Path $targetDirectory $targetFolder $releaseTag

        Write-Verbose "Version $releaseTag is located in $path"

        return @{
            path       = $path
            releaseTag = $releaseTag
        }
    }
}