* Update location of patch files * Add some changes in eng/common to test things * Switch to pushing to upstream * Change workflow to use upstream branches Co-authored-by: Chidozie Ononiwu <chononiw@microsoft.com>
280 lines
9.1 KiB
PowerShell
280 lines
9.1 KiB
PowerShell
# This Files has been retired
|
|
# Helper functions for retireving useful information from azure-sdk-for-* repo
|
|
# Example Use : Import-Module .\eng\common\scripts\modules
|
|
class PackageProps
|
|
{
|
|
[string]$pkgName
|
|
[string]$pkgVersion
|
|
[string]$pkgDirectoryPath
|
|
[string]$pkgServiceName
|
|
[string]$pkgReadMePath
|
|
[string]$pkgChangeLogPath
|
|
[string]$pkgGroup
|
|
|
|
PackageProps([string]$pkgName,[string]$pkgVersion,[string]$pkgDirectoryPath,[string]$pkgServiceName)
|
|
{
|
|
$this.Initialize($pkgName, $pkgVersion, $pkgDirectoryPath, $pkgServiceName)
|
|
}
|
|
|
|
PackageProps([string]$pkgName,[string]$pkgVersion,[string]$pkgDirectoryPath,[string]$pkgServiceName,[string]$pkgGroup="")
|
|
{
|
|
$this.Initialize($pkgName, $pkgVersion, $pkgDirectoryPath, $pkgServiceName, $pkgGroup)
|
|
}
|
|
|
|
hidden [void]Initialize(
|
|
[string]$pkgName,
|
|
[string]$pkgVersion,
|
|
[string]$pkgDirectoryPath,
|
|
[string]$pkgServiceName
|
|
)
|
|
{
|
|
$this.pkgName = $pkgName
|
|
$this.pkgVersion = $pkgVersion
|
|
$this.pkgDirectoryPath = $pkgDirectoryPath
|
|
$this.pkgServiceName = $pkgServiceName
|
|
|
|
if (Test-Path (Join-Path $pkgDirectoryPath "README.md"))
|
|
{
|
|
$this.pkgReadMePath = Join-Path $pkgDirectoryPath "README.md"
|
|
}
|
|
else
|
|
{
|
|
$this.pkgReadMePath = $null
|
|
}
|
|
|
|
if (Test-Path (Join-Path $pkgDirectoryPath "CHANGELOG.md"))
|
|
{
|
|
$this.pkgChangeLogPath = Join-Path $pkgDirectoryPath "CHANGELOG.md"
|
|
}
|
|
else
|
|
{
|
|
$this.pkgChangeLogPath = $null
|
|
}
|
|
}
|
|
|
|
hidden [void]Initialize(
|
|
[string]$pkgName,
|
|
[string]$pkgVersion,
|
|
[string]$pkgDirectoryPath,
|
|
[string]$pkgServiceName,
|
|
[string]$pkgGroup
|
|
)
|
|
{
|
|
$this.Initialize($pkgName, $pkgVersion, $pkgDirectoryPath, $pkgServiceName)
|
|
$this.pkgGroup = $pkgGroup
|
|
}
|
|
}
|
|
|
|
function Extract-PkgProps ($pkgPath, $serviceName, $pkgName, $lang)
|
|
{
|
|
if ($lang -eq "net")
|
|
{
|
|
return Extract-DotNetPkgProps -pkgPath $pkgPath -serviceName $serviceName -pkgName $pkgName
|
|
}
|
|
if ($lang -eq "java")
|
|
{
|
|
return Extract-JavaPkgProps -pkgPath $pkgPath -serviceName $serviceName -pkgName $pkgName
|
|
}
|
|
if ($lang -eq "js")
|
|
{
|
|
return Extract-JsPkgProps -pkgPath $pkgPath -serviceName $serviceName -pkgName $pkgName
|
|
}
|
|
if ($lang -eq "python")
|
|
{
|
|
return Extract-PythonPkgProps -pkgPath $pkgPath -serviceName $serviceName -pkgName $pkgName
|
|
}
|
|
}
|
|
|
|
function Extract-DotNetPkgProps ($pkgPath, $serviceName, $pkgName)
|
|
{
|
|
$projectPath = Join-Path $pkgPath "src" "$pkgName.csproj"
|
|
if (Test-Path $projectPath)
|
|
{
|
|
$projectData = New-Object -TypeName XML
|
|
$projectData.load($projectPath)
|
|
$pkgVersion = Select-XML -Xml $projectData -XPath '/Project/PropertyGroup/Version'
|
|
return [PackageProps]::new($pkgName, $pkgVersion, $pkgPath, $serviceName)
|
|
}
|
|
else
|
|
{
|
|
return $null
|
|
}
|
|
}
|
|
|
|
function Extract-JsPkgProps ($pkgPath, $serviceName, $pkgName)
|
|
{
|
|
$projectPath = Join-Path $pkgPath "package.json"
|
|
if (Test-Path $projectPath)
|
|
{
|
|
$projectJson = Get-Content $projectPath | ConvertFrom-Json
|
|
$jsStylePkgName = $pkgName.replace("azure-", "@azure/")
|
|
if ($projectJson.name -eq "$jsStylePkgName")
|
|
{
|
|
return [PackageProps]::new($projectJson.name, $projectJson.version, $pkgPath, $serviceName)
|
|
}
|
|
}
|
|
return $null
|
|
}
|
|
|
|
function Extract-PythonPkgProps ($pkgPath, $serviceName, $pkgName)
|
|
{
|
|
$pkgName = $pkgName.Replace('_', '-')
|
|
|
|
if (Test-Path (Join-Path $pkgPath "setup.py"))
|
|
{
|
|
$setupLocation = $pkgPath.Replace('\','/')
|
|
pushd $RepoRoot
|
|
$setupProps = (python -c "import sys; import os; sys.path.append(os.path.join('scripts', 'devops_tasks')); from common_tasks import parse_setup; obj=parse_setup('$setupLocation'); print('{0},{1}'.format(obj[0], obj[1]));") -split ","
|
|
popd
|
|
if (($setupProps -ne $null) -and ($setupProps[0] -eq $pkgName))
|
|
{
|
|
return [PackageProps]::new($setupProps[0], $setupProps[1], $pkgPath, $serviceName)
|
|
}
|
|
}
|
|
return $null
|
|
}
|
|
|
|
function Extract-JavaPkgProps ($pkgPath, $serviceName, $pkgName)
|
|
{
|
|
$projectPath = Join-Path $pkgPath "pom.xml"
|
|
|
|
if (Test-Path $projectPath)
|
|
{
|
|
$projectData = New-Object -TypeName XML
|
|
$projectData.load($projectPath)
|
|
$projectPkgName = $projectData.project.artifactId
|
|
$pkgVersion = $projectData.project.version
|
|
$pkgGroup = $projectData.project.groupId
|
|
|
|
if ($projectPkgName -eq $pkgName)
|
|
{
|
|
return [PackageProps]::new($pkgName, $pkgVersion.ToString(), $pkgPath, $serviceName, $pkgGroup)
|
|
}
|
|
}
|
|
return $null
|
|
}
|
|
|
|
# Takes package name and service Name
|
|
# Returns important properties of the package as related to the language repo
|
|
# Returns a PS Object with properties @ { pkgName, pkgVersion, pkgDirectoryPath, pkgReadMePath, pkgChangeLogPath }
|
|
# Note: python is required for parsing python package properties.
|
|
function Get-PkgProperties
|
|
{
|
|
Param
|
|
(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$PackageName,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$ServiceName,
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateSet("net","java","js","python")]
|
|
[string]$Language,
|
|
[string]$RepoRoot="${PSScriptRoot}/../../../.."
|
|
)
|
|
|
|
$pkgDirectoryName = $null
|
|
$pkgDirectoryPath = $null
|
|
$serviceDirectoryPath = Join-Path $RepoRoot "sdk" $ServiceName
|
|
if (!(Test-Path $serviceDirectoryPath))
|
|
{
|
|
Write-Error "Service Directory $ServiceName does not exist"
|
|
exit 1
|
|
}
|
|
|
|
$directoriesPresent = Get-ChildItem $serviceDirectoryPath -Directory
|
|
|
|
foreach ($directory in $directoriesPresent)
|
|
{
|
|
$pkgDirectoryPath = Join-Path $serviceDirectoryPath $directory.Name
|
|
$pkgProps = Extract-PkgProps -pkgPath $pkgDirectoryPath -serviceName $ServiceName -pkgName $PackageName -lang $Language
|
|
if ($pkgProps -ne $null)
|
|
{
|
|
return $pkgProps
|
|
}
|
|
}
|
|
Write-Error "Failed to retrive Properties for $PackageName"
|
|
}
|
|
|
|
# Takes ServiceName, Language, and Repo Root Directory
|
|
# Returns important properties for each package in the specified service, or entire repo if the serviceName is not specified
|
|
# Returns an Table of service key to array values of PS Object with properties @ { pkgName, pkgVersion, pkgDirectoryPath, pkgReadMePath, pkgChangeLogPath }
|
|
function Get-AllPkgProperties
|
|
{
|
|
Param
|
|
(
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateSet("net","java","js","python")]
|
|
[string]$Language,
|
|
[string]$RepoRoot="${PSScriptRoot}/../../../..",
|
|
[string]$ServiceName=$null
|
|
)
|
|
|
|
$pkgPropsResult = @()
|
|
|
|
if ([string]::IsNullOrEmpty($ServiceName))
|
|
{
|
|
$searchDir = Join-Path $RepoRoot "sdk"
|
|
foreach ($dir in (Get-ChildItem $searchDir -Directory))
|
|
{
|
|
$serviceDir = Join-Path $searchDir $dir.Name
|
|
|
|
if (Test-Path (Join-Path $serviceDir "ci.yml"))
|
|
{
|
|
$activePkgList = Get-PkgListFromYml -ciYmlPath (Join-Path $serviceDir "ci.yml")
|
|
if ($activePkgList -ne $null)
|
|
{
|
|
$pkgPropsResult = Operate-OnPackages -activePkgList $activePkgList -serviceName $dir.Name -language $Language -repoRoot $RepoRoot -pkgPropsResult $pkgPropsResult
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$serviceDir = Join-Path $RepoRoot "sdk" $ServiceName
|
|
if (Test-Path (Join-Path $serviceDir "ci.yml"))
|
|
{
|
|
$activePkgList = Get-PkgListFromYml -ciYmlPath (Join-Path $serviceDir "ci.yml")
|
|
if ($activePkgList -ne $null)
|
|
{
|
|
$pkgPropsResult = Operate-OnPackages -activePkgList $activePkgList -serviceName $ServiceName -language $Language -repoRoot $RepoRoot -pkgPropsResult $pkgPropsResult
|
|
}
|
|
}
|
|
}
|
|
|
|
return $pkgPropsResult
|
|
}
|
|
|
|
function Operate-OnPackages ($activePkgList, $serviceName, $language, $repoRoot, [Array]$pkgPropsResult)
|
|
{
|
|
foreach ($pkg in $activePkgList)
|
|
{
|
|
$pkgProps = Get-PkgProperties -PackageName $pkg["name"] -ServiceName $serviceName -Language $language -RepoRoot $repoRoot
|
|
$pkgPropsResult += $pkgProps
|
|
}
|
|
return $pkgPropsResult
|
|
}
|
|
|
|
function Get-PkgListFromYml ($ciYmlPath)
|
|
{
|
|
$ProgressPreference = "SilentlyContinue"
|
|
Register-PSRepository -Default -ErrorAction:SilentlyContinue
|
|
Install-Module -Name powershell-yaml -RequiredVersion 0.4.1 -Force -Scope CurrentUser
|
|
$ciYmlContent = Get-Content $ciYmlPath -Raw
|
|
$ciYmlObj = ConvertFrom-Yaml $ciYmlContent -Ordered
|
|
if ($ciYmlObj.Contains("stages"))
|
|
{
|
|
$artifactsInCI = $ciYmlObj["stages"][0]["parameters"]["Artifacts"]
|
|
}
|
|
elseif ($ciYmlObj.Contains("extends"))
|
|
{
|
|
$artifactsInCI = $ciYmlObj["extends"]["parameters"]["Artifacts"]
|
|
}
|
|
if ($artifactsInCI -eq $null)
|
|
{
|
|
Write-Error "Failed to retrive package names in ci $ciYmlPath"
|
|
}
|
|
return $artifactsInCI
|
|
}
|
|
|
|
Export-ModuleMember -Function 'Get-PkgProperties'
|
|
Export-ModuleMember -Function 'Get-AllPkgProperties' |