functions/Deploy-App.psm1

function RIT-Deploy-App-OnPrem {
Param(
    [string] $serviceTier = 'BC170',
    [string] $RoleTailoredPath = "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\170\RoleTailored Client\",
    [Parameter(Mandatory=$false)][switch] $ForceSync = $false
)

$appPath = Get-ChildItem -Path "$env:System_ArtifactsDirectory\*.app" -Recurse

Import-Module $RoleTailoredPath\"Microsoft.Dynamics.Nav.Apps.Management.psd1"
Import-Module $RoleTailoredPath\"Microsoft.Dynamics.Nav.Management.dll"


$Instance = Get-NAVServerInstance $serviceTier -Force
if($Instance.State -eq 'Stopped'){
    Start-NAVServerInstance -ServerInstance $serviceTier -Force
}

$appPath | ForEach-Object {
    $version = (Get-NAVAppInfo -Path $_).Version
    $appName = (Get-NAVAppInfo -Path $_).Name

    $oldappName = (Get-NAVAppInfo -ServerInstance $serviceTier -Name "$appName").Name
    if ($oldappName){
        $oldVersion = (Get-NAVAppInfo -ServerInstance $serviceTier -Name "$appName").Version
        $oldVersion = $oldVersion[0].ToString()
    }

    Write-Host "Publishing $appName (version $version) to $serviceTier"
    Publish-NAVApp -ServerInstance $serviceTier -Path $_ -SkipVerification

    
    if ($ForceSync)
    {
        Write-Host "Syncing $serviceTier (force sync = true)"
        Sync-NAVTenant $serviceTier -Mode ForceSync -Force
        Sync-NAVApp -ServerInstance $serviceTier -Name $appName -Version $version -Mode ForceSync -Force
    } else {
        Write-Host "Syncing $serviceTier (force sync = false)"
        Sync-NAVTenant $serviceTier -Mode Sync -Force
        Sync-NAVApp -ServerInstance $serviceTier -Name $appName -Version $version -Force
    }

    if (!$oldappName){
        Write-Host "Installing app $appName"
        Install-NAVApp -ServerInstance $serviceTier -Name $appName -Version $version 
    } else {
        if ($oldVersion -ne $version[0].ToString()) {
            Write-Host "Running data upgrade for app $appName"
            Start-NAVAppDataUpgrade -ServerInstance $serviceTier -Name $appName -Version $version

            Write-Host "Unpublishing app $appName (version $oldVersion)"
            Unpublish-NAVApp -ServerInstance $serviceTier -Name $appName -Version $oldVersion
        }
    }
}
}

Export-ModuleMember -Function RIT-Deploy-App-OnPrem