Build/Release-AppToFTP.ps1

function Release-AppToFTP{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$AppName,    
        [Parameter(Mandatory=$true)]
        [string]$AppDirectory,
        [Parameter(Mandatory=$true)]
        [version]$PlatformVersion
    )
    $AppFolder = Get-FolderForPlatformVersion $PlatformVersion
    CreateAppFolderIfNotExists -FolderName $AppFolder
    $TestAppFolder = Join-Path $AppFolder 'Tests' 
    $Apps = Get-ChildItem $AppDirectory -Filter '*.app' | Where-Object {$_ -match $AppName}
    foreach ($App in $Apps)
    {
        if (!$App.Name.Contains('Tests'))
        {
            Move-AppToArchive -FolderName $AppFolder -AppName $AppName
            Write-Host 'Uploading ' $App ' to ' $AppFolder
            Put-ItemFTPWinSCP -LocalPath $App.FullName -FtpPath $AppFolder
        } else {
            Move-AppToArchive -FolderName $TestAppFolder -AppName $AppName
            Write-Host 'Uploading ' $App ' to ' $TestAppFolder
            Put-ItemFTPWinSCP -LocalPath $App.FullName -FtpPath $TestAppFolder
        }
    }   
}

function CreateAppFolderIfNotExists{
    param (
        [Parameter(Mandatory=$true)]
        [string]$FolderName
    )

    if ($FolderName -inotlike 'Business Central *') {
        throw 'FTP folder name must start with "Business Central "'
    }
    
    if ($null -eq (Get-ChildItemFTPWinSCP './' | Where-Object { $_ -match $FolderName })) {
        $Script = @("cd ./", 
            ('mkdir "{0}"' -f $FolderName), 
            ('mkdir "{0}/Archive"' -f $FolderName), 
            ('mkdir "{0}/Tests"' -f $FolderName), 
            ('mkdir "{0}/Tests/Archive"' -f $FolderName))
        Invoke-FTPWinSCP -Script $Script
    }
}

function Move-AppToArchive{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$FolderName,
        [Parameter(Mandatory=$true)]
        [string]$AppName
    )
    $AppFiles = (Get-ChildItemFTPWinSCP $FolderName) -match $AppName
    if ($AppFiles -ne $false) {
        foreach($AppFile in $AppFiles){
            Write-Host 'Moving '$AppFile' to Archive'
            Rename-ItemFTPWinSCP -OldPath $FolderName -Name $AppFile -NewPath 'Archive'       
        }
    }
}

function Get-FolderForPlatformVersion{
    Param(
        [Parameter(Mandatory=$true)]
        [version]$PlatformVersion
    )

    'Business Central ' + $PlatformVersion.Major;
}

Export-ModuleMember -Function Release-AppToFTP