Sync eng/common directory with azure-sdk-tools for PR 5231 (#4288)
* move scripts to common * add reference to common script * address feedback * couple tweaks to relative path updates * update copy paste issue with emitter path * updates to make scripts more generic --------- Co-authored-by: m-nash <prognash@gmail.com>
This commit is contained in:
parent
e1c62a2975
commit
d6a2fedb88
91
eng/common/scripts/Cadl-Project-Generate.ps1
Normal file
91
eng/common/scripts/Cadl-Project-Generate.ps1
Normal file
@ -0,0 +1,91 @@
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[Parameter(Position=0)]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[string] $ProjectDirectory
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
. $PSScriptRoot/Helpers/PSModule-Helpers.ps1
|
||||
. $PSScriptRoot/common.ps1
|
||||
Install-ModuleIfNotInstalled "powershell-yaml" "0.4.1" | Import-Module
|
||||
|
||||
function NpmInstallForProject([string]$workingDirectory) {
|
||||
Push-Location $workingDirectory
|
||||
try {
|
||||
$currentDur = Resolve-Path "."
|
||||
Write-Host "Generating from $currentDur"
|
||||
|
||||
if (Test-Path "package.json") {
|
||||
Remove-Item -Path "package.json" -Force
|
||||
}
|
||||
|
||||
if (Test-Path ".npmrc") {
|
||||
Remove-Item -Path ".npmrc" -Force
|
||||
}
|
||||
|
||||
if (Test-Path "node_modules") {
|
||||
Remove-Item -Path "node_modules" -Force -Recurse
|
||||
}
|
||||
|
||||
if (Test-Path "package-lock.json") {
|
||||
Remove-Item -Path "package-lock.json" -Force
|
||||
}
|
||||
|
||||
#default to root/eng/emitter-package.json but you can override by writing
|
||||
#Get-${Language}-EmitterPackageJsonPath in your Language-Settings.ps1
|
||||
$replacementPackageJson = "$PSScriptRoot/../../emitter-package.json"
|
||||
if (Test-Path "Function:$GetEmitterPackageJsonPathFn") {
|
||||
$replacementPackageJson = &$GetEmitterPackageJsonPathFn
|
||||
}
|
||||
|
||||
Write-Host("Copying package.json from $replacementPackageJson")
|
||||
Copy-Item -Path $replacementPackageJson -Destination "package.json" -Force
|
||||
npm install --no-lock-file
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
$resolvedProjectDirectory = Resolve-Path $ProjectDirectory
|
||||
$emitterName = &$GetEmitterNameFn
|
||||
$cadlConfigurationFile = Resolve-Path "$ProjectDirectory/cadl-location.yaml"
|
||||
|
||||
Write-Host "Reading configuration from $cadlConfigurationFile"
|
||||
$configuration = Get-Content -Path $cadlConfigurationFile -Raw | ConvertFrom-Yaml
|
||||
|
||||
$specSubDirectory = $configuration["directory"]
|
||||
$innerFolder = Split-Path $specSubDirectory -Leaf
|
||||
|
||||
$tempFolder = "$ProjectDirectory/TempCadlFiles"
|
||||
$npmWorkingDir = Resolve-Path $tempFolder/$innerFolder
|
||||
$mainCadlFile = If (Test-Path "$npmWorkingDir/client.cadl") { Resolve-Path "$npmWorkingDir/client.cadl" } Else { Resolve-Path "$npmWorkingDir/main.cadl"}
|
||||
|
||||
try {
|
||||
Push-Location $npmWorkingDir
|
||||
NpmInstallForProject $npmWorkingDir
|
||||
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
|
||||
if (Test-Path "Function:$GetEmitterAdditionalOptionsFn") {
|
||||
$emitterAdditionalOptions = &$GetEmitterAdditionalOptionsFn $resolvedProjectDirectory
|
||||
if ($emitterAdditionalOptions.Length -gt 0) {
|
||||
$emitterAdditionalOptions = " $emitterAdditionalOptions"
|
||||
}
|
||||
}
|
||||
$cadlCompileCommand = "npx cadl compile $mainCadlFile --emit $emitterName$emitterAdditionalOptions"
|
||||
Write-Host($cadlCompileCommand)
|
||||
Invoke-Expression $cadlCompileCommand
|
||||
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
$shouldCleanUp = $configuration["cleanup"] ?? $true
|
||||
if ($shouldCleanUp) {
|
||||
Remove-Item $tempFolder -Recurse -Force
|
||||
}
|
||||
125
eng/common/scripts/Cadl-Project-Sync.ps1
Normal file
125
eng/common/scripts/Cadl-Project-Sync.ps1
Normal file
@ -0,0 +1,125 @@
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[Parameter(Position=0)]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[string] $ProjectDirectory
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
. $PSScriptRoot/Helpers/PSModule-Helpers.ps1
|
||||
Install-ModuleIfNotInstalled "powershell-yaml" "0.4.1" | Import-Module
|
||||
$sparseCheckoutFile = ".git/info/sparse-checkout"
|
||||
|
||||
function AddSparseCheckoutPath([string]$subDirectory) {
|
||||
if (!(Test-Path $sparseCheckoutFile) -or !((Get-Content $sparseCheckoutFile).Contains($subDirectory))) {
|
||||
Write-Output $subDirectory >> .git/info/sparse-checkout
|
||||
}
|
||||
}
|
||||
|
||||
function CopySpecToProjectIfNeeded([string]$specCloneRoot, [string]$mainSpecDir, [string]$dest, [string[]]$specAdditionalSubDirectories) {
|
||||
$source = "$specCloneRoot/$mainSpecDir"
|
||||
Copy-Item -Path $source -Destination $dest -Recurse -Force
|
||||
Write-Host "Copying spec from $source to $dest"
|
||||
|
||||
foreach ($additionalDir in $specAdditionalSubDirectories) {
|
||||
$source = "$specCloneRoot/$additionalDir"
|
||||
Write-Host "Copying spec from $source to $dest"
|
||||
Copy-Item -Path $source -Destination $dest -Recurse -Force
|
||||
}
|
||||
}
|
||||
|
||||
function UpdateSparseCheckoutFile([string]$mainSpecDir, [string[]]$specAdditionalSubDirectories) {
|
||||
AddSparseCheckoutPath $mainSpecDir
|
||||
foreach ($subDir in $specAdditionalSubDirectories) {
|
||||
AddSparseCheckoutPath $subDir
|
||||
}
|
||||
}
|
||||
|
||||
function GetGitRemoteValue([string]$repo) {
|
||||
Push-Location $ProjectDirectory
|
||||
$result = ""
|
||||
try {
|
||||
$gitRemotes = (git remote -v)
|
||||
foreach ($remote in $gitRemotes) {
|
||||
if ($remote.StartsWith("origin")) {
|
||||
if ($remote -match 'https://github.com/\S+[\.git]') {
|
||||
$result = "https://github.com/$repo.git"
|
||||
break
|
||||
} elseif ($remote -match "git@github.com:\S+[\.git]"){
|
||||
$result = "git@github.com:$repo.git"
|
||||
break
|
||||
} else {
|
||||
throw "Unknown git remote format found: $remote"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
function InitializeSparseGitClone([string]$repo) {
|
||||
git clone --no-checkout --filter=tree:0 $repo .
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
git sparse-checkout init
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
Remove-Item $sparseCheckoutFile -Force
|
||||
}
|
||||
|
||||
function GetSpecCloneDir([string]$projectName) {
|
||||
Push-Location $ProjectDirectory
|
||||
try {
|
||||
$root = git rev-parse --show-toplevel
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
$sparseSpecCloneDir = "$root/../sparse-spec/$projectName"
|
||||
New-Item $sparseSpecCloneDir -Type Directory -Force | Out-Null
|
||||
$createResult = Resolve-Path $sparseSpecCloneDir
|
||||
return $createResult
|
||||
}
|
||||
|
||||
$cadlConfigurationFile = Resolve-Path "$ProjectDirectory/cadl-location.yaml"
|
||||
Write-Host "Reading configuration from $cadlConfigurationFile"
|
||||
$configuration = Get-Content -Path $cadlConfigurationFile -Raw | ConvertFrom-Yaml
|
||||
|
||||
$pieces = $cadlConfigurationFile.Path.Replace("\","/").Split("/")
|
||||
$projectName = $pieces[$pieces.Count - 2]
|
||||
|
||||
$specSubDirectory = $configuration["directory"]
|
||||
|
||||
if ( $configuration["repo"] -and $configuration["commit"]) {
|
||||
$specCloneDir = GetSpecCloneDir $projectName
|
||||
$gitRemoteValue = GetGitRemoteValue $configuration["repo"]
|
||||
|
||||
Write-Host "Setting up sparse clone for $projectName at $specCloneDir"
|
||||
|
||||
Push-Location $specCloneDir.Path
|
||||
try {
|
||||
if (!(Test-Path ".git")) {
|
||||
InitializeSparseGitClone $gitRemoteValue
|
||||
UpdateSparseCheckoutFile $specSubDirectory $configuration["additionalDirectories"]
|
||||
}
|
||||
git checkout $configuration["commit"]
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
} elseif ( $configuration["spec-root-dir"] ) {
|
||||
$specCloneDir = $configuration["spec-root-dir"]
|
||||
}
|
||||
|
||||
|
||||
$tempCadlDir = "$ProjectDirectory/TempCadlFiles"
|
||||
New-Item $tempCadlDir -Type Directory -Force | Out-Null
|
||||
CopySpecToProjectIfNeeded `
|
||||
-specCloneRoot $specCloneDir `
|
||||
-mainSpecDir $specSubDirectory `
|
||||
-dest $tempCadlDir `
|
||||
-specAdditionalSubDirectories $configuration["additionalDirectories"]
|
||||
@ -57,3 +57,6 @@ $GetDocsMsTocChildrenForManagementPackagesFn = "Get-${Language}-DocsMsTocChildre
|
||||
$UpdateDocsMsTocFn = "Get-${Language}-UpdatedDocsMsToc"
|
||||
$GetPackageLevelReadmeFn = "Get-${Language}-PackageLevelReadme"
|
||||
$GetRepositoryLinkFn = "Get-${Language}-RepositoryLink"
|
||||
$GetEmitterAdditionalOptionsFn = "Get-${Language}-EmitterAdditionalOptions"
|
||||
$GetEmitterNameFn = "Get-${Language}-EmitterName"
|
||||
$GetEmitterPackageJsonPathFn = "Get-${Language}-EmitterPackageJsonPath"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user