AL/Get-ALDependencies.ps1
function Get-ALDependencies { Param( [Parameter(Mandatory=$false)] [string]$SourcePath = (Get-Location), [Parameter(MAndatory=$false)] [string]$ContainerName = (Split-Path (Get-Location) -Leaf), [Parameter(Mandatory=$false)] [switch]$Install ) $RepositoryName = (Get-EnvironmentKeyValue -SourcePath $SourcePath -KeyName 'repo') if ($RepositoryName -eq $null) { $RepositoryUrl = Get-GitRepoFetchUrl if (($RepositoryUrl.EndsWith('-AL')) -or ($RepositoryUrl.EndsWith('-BC'))) { $RepositoryName = $RepositoryUrl.Substring($RepositoryUrl.Length - 3) } } Write-Host "Repository Name: $RepositoryName" if (!([IO.Directory]::Exists((Join-Path $SourcePath '.alpackages')))) { Create-EmptyDirectory (Join-Path $SourcePath '.alpackages') } $AppJson = ConvertFrom-Json (Get-Content (Join-Path $SourcePath 'app.json') -Raw) Get-ALDependenciesFromAppJson -AppJson $AppJson -SourcePath $SourcePath -RepositoryName $RepositoryName -ContainerName $ContainerName -Install:$Install } function Get-ALDependenciesFromAppJson { Param( [Parameter(Mandatory=$true)] $AppJson, [Parameter(Mandatory=$false)] [string]$SourcePath = (Get-Location), [Parameter(Mandatory=$false)] [string]$RepositoryName, [Parameter(Mandatory=$false)] [string]$ContainerName, [Parameter(Mandatory=$false)] [switch]$Install ) if ($RepositoryName -eq '') { $RepositoryName = 'BC' } foreach ($Dependency in $AppJson.dependencies | where Name -NotLike '*Tests*') { $IncludeTest = $false $EnvDependency = Get-DependencyFromEnvironment -SourcePath $SourcePath -Name $Dependency.name if ($EnvDependency -ne $null) { if ($EnvDependency.includetest -ne $null){ $IncludeTest = $EnvDependency.includetest } $Apps = Get-AppFromLastSuccessfulBuild -ProjectName $EnvDependency.project -RepositoryName $EnvDependency.repo $DependencyAppJson = Get-AppJsonForProjectAndRepo -ProjectName $EnvDependency.project -RepositoryName $EnvDependency.repo } else { $Apps = Get-AppFromLastSuccessfulBuild -ProjectName $Dependency.name -RepositoryName $RepositoryName $DependencyAppJson = Get-AppJsonForProjectAndRepo -ProjectName $Dependency.name -RepositoryName $RepositoryName } Get-ALDependenciesFromAppJson -AppJson $DependencyAppJson -SourcePath $SourcePath -RepositoryName $RepositoryName -ContainerName $ContainerName -Install:$Install foreach ($App in $Apps | where Name -NotLike '*Tests*') { Copy-Item $App.FullName (Join-Path (Join-Path $SourcePath '.alpackages') $App.Name) if ($Install.IsPresent) { try { Publish-NavContainerApp -containerName $ContainerName -appFile $App.FullName -sync -install } catch { if (!($_.Exception.Message.Contains('already published'))) { throw $_.Exception.Message } } } } if($IncludeTest){ foreach ($App in $Apps | where Name -Like '*Tests*') { Copy-Item $App.FullName (Join-Path (Join-Path $SourcePath '.alpackages') $App.Name) if ($Install.IsPresent) { try { Publish-NavContainerApp -containerName $ContainerName -appFile $App.FullName -sync -install } catch { if (!($_.Exception.Message.Contains('already published'))) { throw $_.Exception.Message } } } } } } } function Get-AppJsonForProjectAndRepo { Param( [Parameter(Mandatory=$true)] [string]$ProjectName, [Parameter(Mandatory=$false)] [string]$RepositoryName ) $VSTSProjectName = (Get-VSTSProjects | where name -like ('*{0}' -f $ProjectName)).name if (($VSTSProjectName -eq $null) -and ($ProjectName.StartsWith('Clever'))) { $VSTSProjectName = (Get-VSTSProjects | where name -like ('*{0}' -f $ProjectName.Substring(7))).name } if ($RepositoryName -eq '') { $RepositoryName = 'BC' } $AppContent = Invoke-TFSAPI ('{0}{1}/_apis/git/repositories/{2}/items?path=app.json' -f (Get-TFSCollectionURL), $VSTSProjectName, (Get-RepositoryId -ProjectName $VSTSProjectName -RepositoryName $RepositoryName)) -GetContents $AppJson = ConvertFrom-Json $AppContent $AppJson } function Get-DependencyFromEnvironment { Param( [Parameter(Mandatory=$true)] [string]$SourcePath, [Parameter(Mandatory=$true)] [string]$Name ) Get-EnvironmentKeyValue -SourcePath $SourcePath -KeyName 'dependencies' | where name -eq $Name } Export-ModuleMember -Function Get-ALDependencies |