Get-SolutionPath.psm1

<#
.Synopsis
   Automatic Version Tool (AVT)
.DESCRIPTION
  Get Solution Path
.EXAMPLE
   Get-SolutionPath project.sln
#>

function Get-SolutionPath
{
    [CmdletBinding()]
    [Alias()]
    [OutputType([hashtable])]
    Param
    (
        # Solution file (sln)
        [string]
        [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$false, HelpMessage="Solution file name")]
        $Solution
    )
    Begin
    {
    }
    Process
    {
        #
        if([System.IO.Path]::IsPathRooted($Solution)){
            $path = [System.IO.FileInfo] $Solution
        }
        else{
            $path = Get-ChildItem -Path ..\ -Filter $Solution -File -Recurse |  Select-Object -First 1
            if ( $null -eq $path ){    throw "Solution $Solution is not found!" }
        }
        #
        $sln =  $path.FullName
        $src = $path.Directory.FullName
        $base = $path.Directory.Parent.FullName
        $devops = [System.IO.Path]::Combine($base,"devops")
        $developer = [System.IO.Path]::Combine($base,"developer")
        if ( (-not (Test-Path -Path $devops -PathType Container)) -and (-not (Test-Path -Path $developer -PathType Container)) ) {
            $base = $path.Directory.FullName
            $devops = [System.IO.Path]::Combine($base,"devops")
            $developer = [System.IO.Path]::Combine($base,"developer")

            if ( (-not (Test-Path -Path $devops -PathType Container)) -and (-not (Test-Path -Path $developer -PathType Container)) ) { throw "Solution devops or developer directory is not found!" }
        }
        
        #
        if (-not (Test-Path -Path $devops -PathType Container)) { 
            $output = [System.IO.Path]::Combine($developer,"publish")
        }
        else{
            $output = [System.IO.Path]::Combine($devops,"publish")
        }
        #
        
        #
        return @{
            Base = $base;
            Src = $src;
            Devops = $devops;
            Developer = $developer;
            Sln = $sln; 
            Output = $output;
        }
    }
    End
    {
    }
}
Export-ModuleMember -Function Get-SolutionPath
# SIG # Begin signature block
# MIIIEwYJKoZIhvcNAQcCoIIIBDCCCAACAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCZg4cDdJ9g3qRg
# 2/EcjVYrPSuHu2aqs7Iz+mSDa4m2DKCCBQ8wggULMIIC86ADAgECAgIApTANBgkq
# hkiG9w0BAQsFADCBoDELMAkGA1UEBhMCU0sxETAPBgNVBAgTCFNsb3Zha2lhMRMw
# EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpMb210ZWMuY29tMSswKQYDVQQD
# EyJMb210ZWMuY29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MScwJQYJKoZIhvcN
# AQkBFhhJbXJpY2guU3pvbGlrQGxvbXRlYy5jb20wHhcNMTkwMzI2MTUwNDQzWhcN
# MzAwMTAxMDAwMDAwWjCBkzELMAkGA1UEBhMCU0sxETAPBgNVBAgTCFNsb3Zha2lh
# MRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpMb210ZWMuY29tMR4wHAYD
# VQQDExVMb210ZWMuY29tIFBvd2Vyc2hlbGwxJzAlBgkqhkiG9w0BCQEWGEltcmlj
# aC5Tem9saWtAbG9tdGVjLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
# ggEBAL4n4nCHbkdrf09IHNFQ2P/z6I43GKScsFJOQHUMkRD3ALoUFL/URC9sW2fY
# rqG5VkFAKhnM0VxeiICR53cAshNShjFf58PhaS973jtCoJcaugIVBVoFIuQ+gnNY
# Jp2VdBbIPKMW4JjjZOxBEkHpMWmfitXKWGKeU68Qcn3oI6PO+YSztfXLe1NU+1GI
# O3fA7E0vHVPUf/qWZXMYU5ElLQVm9AXbfX79mTgl76A57+OC6j+Aehkd2OPfUl4w
# snox3fOyUAUA8iojeWh97PpXd/s+RkuxWdgsC4YSWDUjhZSzBkml9uerYqo9a+XA
# b39dvkpK9TPl3q5HNBQMkCfp8bkCAwEAAaNaMFgwCQYDVR0TBAIwADALBgNVHQ8E
# BAMCB4AwKwYDVR0lBCQwIgYIKwYBBQUHAwMGCisGAQQBgjcCARUGCisGAQQBgjcC
# ARYwEQYJYIZIAYb4QgEBBAQDAgSwMA0GCSqGSIb3DQEBCwUAA4ICAQAJJapv9skY
# jh5HTsJnqDdtqh7YOOXuA8g+DKBj+5gDEZE5V9VhAFVp8UJ9RoITGGIRTVId0lqc
# LJiVSTHx305VW9aID8vo77kfrTyXvPXNIsTtHnPkkwH47+CoiY3IpPQLjUA/Q6Qd
# qwINvvwom7/Wc+OoIqlPdJH5DbBrIy85dr6M/Lm3Rw2BolcTRwXTB3xAhweth78B
# P6pbcAd32FdymkRopLIihuNs7g7ZR/Q/5803G+OiQIMRGyTvaQ+aQjJgFpkzp7NI
# whzougfCOV47Sc89jEpUqw16i2UFfz2ywOlWUyYtue1S1PjM1ljgJfRo+e0wUnFp
# gFQzXGF1bTYVaQ4e3nJleADfvqeXoH2AYeBTbz9BcogkkfURAC3iiob1bNs5jE1C
# brEDCw6m/03k0oOmm3xQksXyAhBYuUkRwu9jd4y3FwZ/syDGLz3b6cY8o1YyINOO
# A3B2r92shNt0rWhJu3v+qcIVmFQ0aKlhNNRoiVlQgJ7NgO0UV+vU2lgiscpUSxEt
# xKN+450r49su06NA6zsyn3CELUmVkPyjx5fyizwt9KxVuYOUSEb32Y7QCffHJ1qt
# F6SuQrKbgb/24y7cCDW6PDVRvPOySUlKu9sPykICDjvzXBvjYEILM7AmtYCIBGQg
# imBsQvTEoXJXiwAOi1XNz3LxcjQHQ/ZM4zGCAlowggJWAgEBMIGnMIGgMQswCQYD
# VQQGEwJTSzERMA8GA1UECBMIU2xvdmFraWExEzARBgNVBAcTCkJyYXRpc2xhdmEx
# EzARBgNVBAoTCkxvbXRlYy5jb20xKzApBgNVBAMTIkxvbXRlYy5jb20gQ2VydGlm
# aWNhdGlvbiBBdXRob3JpdHkxJzAlBgkqhkiG9w0BCQEWGEltcmljaC5Tem9saWtA
# bG9tdGVjLmNvbQICAKUwDQYJYIZIAWUDBAIBBQCggYQwGAYKKwYBBAGCNwIBDDEK
# MAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
# AgELMQ4wDAYKKwYBBAGCNwIBFjAvBgkqhkiG9w0BCQQxIgQgrXT5z9RZkdC91vse
# RtRXuGVd4c11FxGV1rCNkaCIMtowDQYJKoZIhvcNAQEBBQAEggEAFh0ru055c6XA
# /Z96O2tHgd/AL5chkKZ/MYN49CnaW3y7spm1C0EvsHHsa3BK/GGZZmHOThWIf9QH
# 3RW+zkSUBxygARCEkByXk1TDZNRx5RNwtOdPLkHKAOKmxRSmttAS/7WKiSqPSa4S
# ShWQZaXuUgUFvLB/3HwTSm/7KmyJ4jQOUZmgsWcSGjH6sv3Kxo+6/caPpjS9AnhC
# b6rPA4yI76+0rdowB8GTr21QNphm0buNMLbX6KJi1ilLZ0mHdj1WpOhlyreml6dR
# cp+e12IBuh1Ugrs2byQyGFM/f93pyTddHVoKlBMyk+PWDmJIbGatne/8u0L/Z+aH
# VwHMydfvdQ==
# SIG # End signature block