From 23fa6996ce36379480fd2ab68f454fe45c7f5a0e Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Mon, 6 Dec 2021 16:57:54 +0800 Subject: [PATCH 01/28] Dotnet SDK automation --- eng/automation/generate.ps1 | 36 +++++++++++++++++++++++++++++ eng/automation/init.ps1 | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 eng/automation/generate.ps1 create mode 100644 eng/automation/init.ps1 diff --git a/eng/automation/generate.ps1 b/eng/automation/generate.ps1 new file mode 100644 index 000000000000..d8ad1f59fde7 --- /dev/null +++ b/eng/automation/generate.ps1 @@ -0,0 +1,36 @@ +function Generate-Readme() { + param( + [string]$resourceProvider = "", + [string]$packageName = "", + [string]$sdkPath = "" + ) + + $projectFolder=$sdkPath/sdk/$packageName/Azure.ResourceManager.* + if (Test-Path -Path $projectFolder) { + Write-Host "Path exists!" + } else { + Write-Host "Path doesn't exist. create template." + dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template + $projectFolder=$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName + Write-Host "Create project folder $projectFolder" + New-Item -Path $projectFolder -ItemType Directory + cd $projectFolder + dotnet new azuremgmt --provider $packageName --includeCI true --force + + # update the readme url + Write-Host "Updating autorest.md file." + + } + + function Generate() { + param( + [string]$swaggerPath = "" + [string]$sdkfolder= "" + ) + cd $sdkfolder/src + dotnet build /t:GenerateCode + } + + Generate-Readme resourceProvider=$resourceProvider packageName=$packageName sdkPath=$sdkPath + Generate sdkfolder=$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName +} \ No newline at end of file diff --git a/eng/automation/init.ps1 b/eng/automation/init.ps1 new file mode 100644 index 000000000000..4d75583295c2 --- /dev/null +++ b/eng/automation/init.ps1 @@ -0,0 +1,46 @@ +[string] $RepoRoot = "${PSScriptRoot}/../.." +[string] $dotnetInstallScriptVersion = "v1" + +function GetDotNetInstallScript() { + $installScript = Join-Path $RepoRoot 'dotnet-install.sh' + if (!(Test-Path $installScript)) { + New-Item -Path $RepoRoot -Force -ItemType 'Directory' | Out-Null + $maxRetries = 5 + $retries = 1 + + $uri = "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.sh" + while ($true) { + try { + Write-Host "GET $uri" + Invoke-WebRequest $uri -OutFile $installScript + break + } + catch { + Write-Host "Failed to download '$uri'" + Write-Error $_.Exception.Message -ErrorAction Continue + } + if (++$retries -le $maxRetries) { + $delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff + Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)." + Start-Sleep -Seconds $delayInSeconds + } + else { + throw "Unable to download file in $maxRetries attempts." + } + } + } + + return $installScript +} + +$GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot 'global.json') | ConvertFrom-Json +$dotnetSdkVersion = $GlobalJson.sdk.version + +$installScript = GetDotNetInstallScript + +$dotnet = Join-Path $RepoRoot ".dotnet" +& bash $installScript --install-dir $dotnet --version $dotnetSdkVersion + +if (Test-Path $installScript) { + Remove-Item $installScript +} \ No newline at end of file From 9c6923f82e2bc98035c10a078bd32c3226eb1e86 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 7 Dec 2021 17:14:29 +0800 Subject: [PATCH 02/28] dotnet SDK automation --- codegen_to_sdk_config.json | 29 +++++ eng/automation/Invoke-GenerateAndBuild.ps1 | 126 +++++++++++++++++++++ eng/automation/Invoke-MockTest.ps1 | 0 eng/automation/MgmtMockTestLib.ps1 | 7 ++ eng/automation/generate.ps1 | 36 ------ 5 files changed, 162 insertions(+), 36 deletions(-) create mode 100644 codegen_to_sdk_config.json create mode 100644 eng/automation/Invoke-GenerateAndBuild.ps1 create mode 100644 eng/automation/Invoke-MockTest.ps1 create mode 100644 eng/automation/MgmtMockTestLib.ps1 delete mode 100644 eng/automation/generate.ps1 diff --git a/codegen_to_sdk_config.json b/codegen_to_sdk_config.json new file mode 100644 index 000000000000..53e2acf2a906 --- /dev/null +++ b/codegen_to_sdk_config.json @@ -0,0 +1,29 @@ +{ + "init": { + "initScript": { + "path": "./eng/automation/init.sh", + "logPrefix": "[DotNet]", + "stderr":{ + "storeAllLog": true + } + } + }, + "generateAndBuild": { + "generateAndBuildScript": { + "path": "./eng/automation/Invoke-GenerateAndBuild.ps1", + "logPrefix": "[DotNet-Generate]", + "stderr":{ + "storeLogByFilter": "[error|Error|Exception]" + } + } + }, + "mockTest": { + "mockTestScript": { + "path": "./eng/automation/Invoke-MockTest.ps1", + "logPrefix": "[GO-MockTest]", + "stderr":{ + "storeLogByFilter": "[error|Error|Exception]" + } + } + } +} \ No newline at end of file diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 new file mode 100644 index 000000000000..80164a988cbb --- /dev/null +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -0,0 +1,126 @@ +#Requires -Version 7.0 +param ( + [string]$inputJsonFile, + [string]$outputJsonFile +) + +function Get-SwaggerInfo() +{ + param( + [string]$dir, + [string]$AUTOREST_CONFIG_FILE = "autorest.md" + ) + Set-Location $dir + $swaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/blob\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" + $rawSwaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" + $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/.*\/specification\/(?.*)\/resource-manager\/readme.md" + try + { + $content = Get-Content .\$AUTOREST_CONFIG_FILE -Raw + if ($content -match $swaggerInfoRegex) + { + return $matches["org"], $matches["specName"], $matches["commitID"] + } + if ($content -match $rawSwaggerInfoRegex) + { + return $matches["org"], $matches["specName"], $matches["commitID"] + } + if ($content -match $swaggerNoCommitRegex) + { + return $matches["org"], $matches["specName"], "" + } + } + catch + { + Write-Error "Error parsing swagger info" + Write-Error $_ + } + Write-Host "Cannot find swagger info" + exit 1 +} +function New-PackageFolder() { + param( + [string]$resourceProvider = "", + [string]$packageName = "", + [string]$sdkPath = "", + [string]$commitid = "", + [string]$AUTOREST_CONFIG_FILE = "autorest.md" + ) + + $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.*" + if (Test-Path -Path $projectFolder) { + Write-Host "Path exists!" + $folderinfo = Get-ChildItem -Path $projectFolder + $foldername = $folderinfo.Name + $projectFolder = "$sdkPath/sdk/$packageName/$foldername" + } else { + Write-Host "Path doesn't exist. create template." + dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template + $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName" + Write-Host "Create project folder $projectFolder" + New-Item -Path $projectFolder -ItemType Directory + Set-Location $projectFolder + dotnet new azuremgmt --provider $packageName --includeCI true --force + } + + # update the readme url if needed. + if ($commitid -ne "") { + Write-Host "Updating autorest.md file." + $swaggerInfo = Get-SwaggerInfo -dir "$projectFolder/src" + $org = $swaggerInfo[0] + $rp = $swaggerInfo[1] + $permalinks = "https://github.com/$org/azure-rest-api-specs/blob/$commitid/specification/$rp/resource-manager/readme.md" + $requirefile = "require: $permalinks" + $rquirefileRex = "require *:.*.md" + $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" + (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + } + + return $projectFolder +} + +function Invoke-Generate() { + param( + [string]$swaggerPath = "", + [string]$sdkfolder= "" + ) + Set-Location $sdkfolder/src + dotnet build /t:GenerateCode +} + +function Get-ResourceProviderFromReadme($readmeFile) { + $readmeFileRegex = "(?.*)/resource-manager/readme.md" + try + { + if ($readmeFile -match $readmeFileRegex) + { + return $matches["specName"] + } + } + catch + { + Write-Error "Error parsing reademe info" + Write-Error $_ + } + Write-Host "Cannot find resouce provider info" + # exit 1 +} + +$inputJson = Get-Content $inputJsonFile | Out-String | ConvertFrom-Json +$swaggerDir = $inputJson.specFolder +$swaggerDir = $swaggerDir -replace "\\", "/" +$readmeFile = $inputJson.relatedReadmeMdFile +$readmeFile = $readmeFile -replace "\\", "/" +$commitid = $inputJson.headSha + +$packageName = Get-ResourceProviderFromReadme $readmeFile +$sdkPath = (Join-Path $PSScriptRoot .. ..) +$sdkPath = Resolve-Path $sdkPath +$sdkPath = $sdkPath -replace "\\", "/" +$packageFolder = New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid +Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName + +$outputJson = [PSCustomObject]@{ + packages = @([pscustomobject]@{packageName=''; result='succeeded'; path=@("$packageFolder");packageFolder=@("$packageFolder")}) +} +$outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile \ No newline at end of file diff --git a/eng/automation/Invoke-MockTest.ps1 b/eng/automation/Invoke-MockTest.ps1 new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/eng/automation/MgmtMockTestLib.ps1 b/eng/automation/MgmtMockTestLib.ps1 new file mode 100644 index 000000000000..a379691bae22 --- /dev/null +++ b/eng/automation/MgmtMockTestLib.ps1 @@ -0,0 +1,7 @@ +function Invoke-MgmtTestgen() { + param( + [string]$sdkDirectory = "", + [string]$outputFolder = "" + ) + +} \ No newline at end of file diff --git a/eng/automation/generate.ps1 b/eng/automation/generate.ps1 deleted file mode 100644 index d8ad1f59fde7..000000000000 --- a/eng/automation/generate.ps1 +++ /dev/null @@ -1,36 +0,0 @@ -function Generate-Readme() { - param( - [string]$resourceProvider = "", - [string]$packageName = "", - [string]$sdkPath = "" - ) - - $projectFolder=$sdkPath/sdk/$packageName/Azure.ResourceManager.* - if (Test-Path -Path $projectFolder) { - Write-Host "Path exists!" - } else { - Write-Host "Path doesn't exist. create template." - dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template - $projectFolder=$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName - Write-Host "Create project folder $projectFolder" - New-Item -Path $projectFolder -ItemType Directory - cd $projectFolder - dotnet new azuremgmt --provider $packageName --includeCI true --force - - # update the readme url - Write-Host "Updating autorest.md file." - - } - - function Generate() { - param( - [string]$swaggerPath = "" - [string]$sdkfolder= "" - ) - cd $sdkfolder/src - dotnet build /t:GenerateCode - } - - Generate-Readme resourceProvider=$resourceProvider packageName=$packageName sdkPath=$sdkPath - Generate sdkfolder=$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName -} \ No newline at end of file From eee13341c34491907c085cb6793de9f4f3b743aa Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Wed, 15 Dec 2021 17:12:30 +0800 Subject: [PATCH 03/28] update swagger regex --- eng/automation/Invoke-GenerateAndBuild.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index 80164a988cbb..ffe61d84a70b 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -13,7 +13,7 @@ function Get-SwaggerInfo() Set-Location $dir $swaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/blob\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" $rawSwaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" - $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/.*\/specification\/(?.*)\/resource-manager\/readme.md" + $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(blob\/)?(?.*)\/specification\/(?.*)\/resource-manager\/readme.md" try { $content = Get-Content .\$AUTOREST_CONFIG_FILE -Raw From 8879514bfafcd24e4d8a0933c1f032b85d526336 Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Fri, 31 Dec 2021 18:39:23 +0800 Subject: [PATCH 04/28] add task scripts --- codegen_to_sdk_config.json | 4 ++-- eng/automation/generate-and-build.sh | 20 ++++++++++++++++++++ eng/automation/init.sh | 7 +++++++ eng/automation/mock-test.sh | 16 ++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 eng/automation/generate-and-build.sh create mode 100644 eng/automation/init.sh create mode 100644 eng/automation/mock-test.sh diff --git a/codegen_to_sdk_config.json b/codegen_to_sdk_config.json index 53e2acf2a906..688efc6f0ea0 100644 --- a/codegen_to_sdk_config.json +++ b/codegen_to_sdk_config.json @@ -10,7 +10,7 @@ }, "generateAndBuild": { "generateAndBuildScript": { - "path": "./eng/automation/Invoke-GenerateAndBuild.ps1", + "path": "./eng/automation/generate-and-build.sh", "logPrefix": "[DotNet-Generate]", "stderr":{ "storeLogByFilter": "[error|Error|Exception]" @@ -19,7 +19,7 @@ }, "mockTest": { "mockTestScript": { - "path": "./eng/automation/Invoke-MockTest.ps1", + "path": "./eng/automation/mock-test.sh", "logPrefix": "[GO-MockTest]", "stderr":{ "storeLogByFilter": "[error|Error|Exception]" diff --git a/eng/automation/generate-and-build.sh b/eng/automation/generate-and-build.sh new file mode 100644 index 000000000000..a03f238cf9d2 --- /dev/null +++ b/eng/automation/generate-and-build.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if [ -z $1 ]; then + echo "Please input inputfile" + exit 1 +fi +echo $1 + +if [ -z $2 ]; then + echo "Please input outputfile" + exit 1 +fi + +echo $2 + +env + +pwsh eng/automation/Invoke-GenerateAndBuild.ps1 -inputJsonFile $1 -outputJsonFile $2 + +cat $2 \ No newline at end of file diff --git a/eng/automation/init.sh b/eng/automation/init.sh new file mode 100644 index 000000000000..30ad0f999692 --- /dev/null +++ b/eng/automation/init.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ -z $1 ]; then + echo "Please input outputfile" + exit 1 +fi +echo $1 \ No newline at end of file diff --git a/eng/automation/mock-test.sh b/eng/automation/mock-test.sh new file mode 100644 index 000000000000..82193fe94496 --- /dev/null +++ b/eng/automation/mock-test.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +if [ -z $1 ]; then + echo "Please input inputfile" + exit 1 +fi +echo $1 + +if [ -z $2 ]; then + echo "Please input outputfile" + exit 1 +fi + +echo $2 + +pwsh eng/automation/Invoke-MockTest.ps1 -inputJsonFile $1 -outputJsonFile $2 \ No newline at end of file From 1c09fc2725b00014d4086b7e4e6006c8df914488 Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Fri, 31 Dec 2021 19:32:31 +0800 Subject: [PATCH 05/28] install dotnet sdk --- eng/automation/init.ps1 | 5 ++++- eng/automation/init.sh | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/eng/automation/init.ps1 b/eng/automation/init.ps1 index 4d75583295c2..f8cc86d3ae69 100644 --- a/eng/automation/init.ps1 +++ b/eng/automation/init.ps1 @@ -43,4 +43,7 @@ $dotnet = Join-Path $RepoRoot ".dotnet" if (Test-Path $installScript) { Remove-Item $installScript -} \ No newline at end of file +} +$env:DOTNET_ROOT = '$dotnet' +$env:Path = '$env:Path;$env:DOTNET_ROOT' +dotnet --list-sdks \ No newline at end of file diff --git a/eng/automation/init.sh b/eng/automation/init.sh index 30ad0f999692..b218aed52515 100644 --- a/eng/automation/init.sh +++ b/eng/automation/init.sh @@ -4,4 +4,24 @@ if [ -z $1 ]; then echo "Please input outputfile" exit 1 fi -echo $1 \ No newline at end of file +echo $1 + +pwsh eng/automation/init.ps1 + +DIRECTORY=$(cd `dirname $0` && pwd) +WORKFOLDER="$(realpath $DIRECTORY/../../)" +echo $WORKFOLDER +export DOTNET_ROOT=$WORKFOLDER/.dotnet +which dotnet +dotnet --list-sdk +echo $1 +cat > $1 << EOF +{ + "envs": { + "PATH": "$PATH:$DOTNET_ROOT", + "DOTNET_ROOT": "$DOTNET_ROOT" + } +} +EOF + +cat $1 \ No newline at end of file From f3a91952c447e7a1f7c4539050c1c25b9b7b2aaf Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Sun, 2 Jan 2022 10:58:39 +0800 Subject: [PATCH 06/28] use output file to return package name --- eng/automation/Invoke-GenerateAndBuild.ps1 | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index ffe61d84a70b..809302d0bf9b 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -44,7 +44,8 @@ function New-PackageFolder() { [string]$packageName = "", [string]$sdkPath = "", [string]$commitid = "", - [string]$AUTOREST_CONFIG_FILE = "autorest.md" + [string]$AUTOREST_CONFIG_FILE = "autorest.md", + [string]$outputJsonFile = "newPacakgeOutput.json" ) $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.*" @@ -76,6 +77,12 @@ function New-PackageFolder() { (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file } + $outputJson = [PSCustomObject]@{ + projectFolder = $projectFolder + } + + $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile + return $projectFolder } @@ -117,10 +124,21 @@ $packageName = Get-ResourceProviderFromReadme $readmeFile $sdkPath = (Join-Path $PSScriptRoot .. ..) $sdkPath = Resolve-Path $sdkPath $sdkPath = $sdkPath -replace "\\", "/" -$packageFolder = New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid + +$outputJsonFile = "newPackageOutput.json" +New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -outputJsonFile $outputJsonFile +if ( $? -ne $True) { + Write-Error "Failed to create sdk project folder. exit code: $?" + exit 1 +} +$outputJson = Get-Content $outputJsonFile | Out-String | ConvertFrom-Json +$projectFolder = $outputJson.projectFolder +Write-Host "projectFolder:$projectFolder" +Remove-Item $outputJsonFile + Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName $outputJson = [PSCustomObject]@{ - packages = @([pscustomobject]@{packageName=''; result='succeeded'; path=@("$packageFolder");packageFolder=@("$packageFolder")}) + packages = @([pscustomobject]@{packageName='$packageName'; result='succeeded'; path=@("$projectFolder");packageFolder="$projectFolder"}) } $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile \ No newline at end of file From bd083a2821c931428a10d858240e1a5670c14037 Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Sun, 2 Jan 2022 13:52:12 +0800 Subject: [PATCH 07/28] update env --- eng/automation/Invoke-GenerateAndBuild.ps1 | 12 ++++++------ eng/automation/init.ps1 | 2 +- eng/automation/init.sh | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index 809302d0bf9b..078532883ccb 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -125,18 +125,18 @@ $sdkPath = (Join-Path $PSScriptRoot .. ..) $sdkPath = Resolve-Path $sdkPath $sdkPath = $sdkPath -replace "\\", "/" -$outputJsonFile = "newPackageOutput.json" -New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -outputJsonFile $outputJsonFile +$newpackageoutput = "newPackageOutput.json" +New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -outputJsonFile $newpackageoutput if ( $? -ne $True) { Write-Error "Failed to create sdk project folder. exit code: $?" exit 1 } -$outputJson = Get-Content $outputJsonFile | Out-String | ConvertFrom-Json -$projectFolder = $outputJson.projectFolder +$newpackageoutputJson = Get-Content $newpackageoutput | Out-String | ConvertFrom-Json +$projectFolder = $newpackageoutputJson.projectFolder Write-Host "projectFolder:$projectFolder" -Remove-Item $outputJsonFile +Remove-Item $newpackageoutput -Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName +Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $projectFolder $outputJson = [PSCustomObject]@{ packages = @([pscustomobject]@{packageName='$packageName'; result='succeeded'; path=@("$projectFolder");packageFolder="$projectFolder"}) diff --git a/eng/automation/init.ps1 b/eng/automation/init.ps1 index f8cc86d3ae69..e55ce2f3e988 100644 --- a/eng/automation/init.ps1 +++ b/eng/automation/init.ps1 @@ -45,5 +45,5 @@ if (Test-Path $installScript) { Remove-Item $installScript } $env:DOTNET_ROOT = '$dotnet' -$env:Path = '$env:Path;$env:DOTNET_ROOT' +$env:Path = '$env:DOTNET_ROOT;$env:Path' dotnet --list-sdks \ No newline at end of file diff --git a/eng/automation/init.sh b/eng/automation/init.sh index b218aed52515..16040c7b16f4 100644 --- a/eng/automation/init.sh +++ b/eng/automation/init.sh @@ -18,7 +18,7 @@ echo $1 cat > $1 << EOF { "envs": { - "PATH": "$PATH:$DOTNET_ROOT", + "PATH": "$DOTNET_ROOT:$PATH", "DOTNET_ROOT": "$DOTNET_ROOT" } } From 43069085245cd48babcea9ed8eadc00894092c15 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 4 Jan 2022 12:53:28 +0800 Subject: [PATCH 08/28] update readme in autorest.md --- eng/automation/Invoke-GenerateAndBuild.ps1 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index ffe61d84a70b..9e4a150b6825 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -44,6 +44,7 @@ function New-PackageFolder() { [string]$packageName = "", [string]$sdkPath = "", [string]$commitid = "", + [string]$readme = "", [string]$AUTOREST_CONFIG_FILE = "autorest.md" ) @@ -74,6 +75,12 @@ function New-PackageFolder() { $rquirefileRex = "require *:.*.md" $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + } elseif ($readme -ne "") { + Write-Host "Updating required file in autorest.md file." + $requirefile = "require: $readme" + $rquirefileRex = "require *:.*.md" + $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" + (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file } return $projectFolder @@ -117,7 +124,7 @@ $packageName = Get-ResourceProviderFromReadme $readmeFile $sdkPath = (Join-Path $PSScriptRoot .. ..) $sdkPath = Resolve-Path $sdkPath $sdkPath = $sdkPath -replace "\\", "/" -$packageFolder = New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid +$packageFolder = New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -readme $readmeFile Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName $outputJson = [PSCustomObject]@{ From 1896a80f56ef4adaa00f7cb5b13a241bd38e651f Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 4 Jan 2022 14:14:30 +0800 Subject: [PATCH 09/28] logout the autorest.md --- eng/automation/Invoke-GenerateAndBuild.ps1 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index b082305773e9..1fa6bcbc7504 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -77,11 +77,14 @@ function New-PackageFolder() { $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file } elseif ($readme -ne "") { - Write-Host "Updating required file in autorest.md file." + Write-Host "Updating required file $readme in autorest.md file." $requirefile = "require: $readme" $rquirefileRex = "require *:.*.md" $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + + $readmefilestr = Get-Content $file + Write-Output "autorest.md:$readmefilestr" } $outputJson = [PSCustomObject]@{ From f28329c99d316eeabdb3128664ee1e7af01271c3 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 4 Jan 2022 14:47:13 +0800 Subject: [PATCH 10/28] use relative path --- eng/automation/Invoke-GenerateAndBuild.ps1 | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index 1fa6bcbc7504..2316adb0926b 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -1,7 +1,7 @@ #Requires -Version 7.0 param ( - [string]$inputJsonFile, - [string]$outputJsonFile + [string]$inputJsonFile="generateInput.json", + [string]$outputJsonFile="output.json" ) function Get-SwaggerInfo() @@ -10,13 +10,15 @@ function Get-SwaggerInfo() [string]$dir, [string]$AUTOREST_CONFIG_FILE = "autorest.md" ) - Set-Location $dir + # Set-Location $dir + Push-Location $dir $swaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/blob\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" $rawSwaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(blob\/)?(?.*)\/specification\/(?.*)\/resource-manager\/readme.md" try { $content = Get-Content .\$AUTOREST_CONFIG_FILE -Raw + Pop-Location if ($content -match $swaggerInfoRegex) { return $matches["org"], $matches["specName"], $matches["commitID"] @@ -61,8 +63,10 @@ function New-PackageFolder() { $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName" Write-Host "Create project folder $projectFolder" New-Item -Path $projectFolder -ItemType Directory - Set-Location $projectFolder + # Set-Location $projectFolder + Push-Location $projectFolder dotnet new azuremgmt --provider $packageName --includeCI true --force + Pop-Location } # update the readme url if needed. @@ -87,8 +91,11 @@ function New-PackageFolder() { Write-Output "autorest.md:$readmefilestr" } + $path=$projectFolder + $path=$path.Replace($sdkPath + "/", "") $outputJson = [PSCustomObject]@{ projectFolder = $projectFolder + path = $path } $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile @@ -101,8 +108,11 @@ function Invoke-Generate() { [string]$swaggerPath = "", [string]$sdkfolder= "" ) - Set-Location $sdkfolder/src + # Set-Location $sdkfolder/src + Push-Location $sdkfolder/src dotnet build /t:GenerateCode + Pop-Location + } function Get-ResourceProviderFromReadme($readmeFile) { @@ -143,12 +153,13 @@ if ( $? -ne $True) { } $newpackageoutputJson = Get-Content $newpackageoutput | Out-String | ConvertFrom-Json $projectFolder = $newpackageoutputJson.projectFolder +$path = $newpackageoutputJson.path Write-Host "projectFolder:$projectFolder" Remove-Item $newpackageoutput Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $projectFolder $outputJson = [PSCustomObject]@{ - packages = @([pscustomobject]@{packageName='$projectFolder'; result='succeeded'; path=@("$projectFolder");packageFolder="$projectFolder"}) + packages = @([pscustomobject]@{packageName="$packageName"; result='succeeded'; path=@("$path");packageFolder="$path"}) } $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile \ No newline at end of file From 05e23c26597678e662306f1b5fd37bdc1cadb713 Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Thu, 6 Jan 2022 21:03:04 +0800 Subject: [PATCH 11/28] GenerateAndBuild Script --- eng/automation/Invoke-GenerateAndBuild.ps1 | 137 ++------------------- eng/automation/MgmtGenerateLib.ps1 | 130 +++++++++++++++++++ eng/automation/generate-and-build.sh | 10 +- 3 files changed, 142 insertions(+), 135 deletions(-) create mode 100644 eng/automation/MgmtGenerateLib.ps1 diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/automation/Invoke-GenerateAndBuild.ps1 index 2316adb0926b..f3ad03b57cfc 100644 --- a/eng/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/automation/Invoke-GenerateAndBuild.ps1 @@ -4,134 +4,7 @@ param ( [string]$outputJsonFile="output.json" ) -function Get-SwaggerInfo() -{ - param( - [string]$dir, - [string]$AUTOREST_CONFIG_FILE = "autorest.md" - ) - # Set-Location $dir - Push-Location $dir - $swaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/blob\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" - $rawSwaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" - $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(blob\/)?(?.*)\/specification\/(?.*)\/resource-manager\/readme.md" - try - { - $content = Get-Content .\$AUTOREST_CONFIG_FILE -Raw - Pop-Location - if ($content -match $swaggerInfoRegex) - { - return $matches["org"], $matches["specName"], $matches["commitID"] - } - if ($content -match $rawSwaggerInfoRegex) - { - return $matches["org"], $matches["specName"], $matches["commitID"] - } - if ($content -match $swaggerNoCommitRegex) - { - return $matches["org"], $matches["specName"], "" - } - } - catch - { - Write-Error "Error parsing swagger info" - Write-Error $_ - } - Write-Host "Cannot find swagger info" - exit 1 -} -function New-PackageFolder() { - param( - [string]$resourceProvider = "", - [string]$packageName = "", - [string]$sdkPath = "", - [string]$commitid = "", - [string]$readme = "", - [string]$AUTOREST_CONFIG_FILE = "autorest.md", - [string]$outputJsonFile = "newPacakgeOutput.json" - ) - - $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.*" - if (Test-Path -Path $projectFolder) { - Write-Host "Path exists!" - $folderinfo = Get-ChildItem -Path $projectFolder - $foldername = $folderinfo.Name - $projectFolder = "$sdkPath/sdk/$packageName/$foldername" - } else { - Write-Host "Path doesn't exist. create template." - dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template - $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName" - Write-Host "Create project folder $projectFolder" - New-Item -Path $projectFolder -ItemType Directory - # Set-Location $projectFolder - Push-Location $projectFolder - dotnet new azuremgmt --provider $packageName --includeCI true --force - Pop-Location - } - - # update the readme url if needed. - if ($commitid -ne "") { - Write-Host "Updating autorest.md file." - $swaggerInfo = Get-SwaggerInfo -dir "$projectFolder/src" - $org = $swaggerInfo[0] - $rp = $swaggerInfo[1] - $permalinks = "https://github.com/$org/azure-rest-api-specs/blob/$commitid/specification/$rp/resource-manager/readme.md" - $requirefile = "require: $permalinks" - $rquirefileRex = "require *:.*.md" - $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" - (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file - } elseif ($readme -ne "") { - Write-Host "Updating required file $readme in autorest.md file." - $requirefile = "require: $readme" - $rquirefileRex = "require *:.*.md" - $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" - (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file - - $readmefilestr = Get-Content $file - Write-Output "autorest.md:$readmefilestr" - } - - $path=$projectFolder - $path=$path.Replace($sdkPath + "/", "") - $outputJson = [PSCustomObject]@{ - projectFolder = $projectFolder - path = $path - } - - $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile - - return $projectFolder -} - -function Invoke-Generate() { - param( - [string]$swaggerPath = "", - [string]$sdkfolder= "" - ) - # Set-Location $sdkfolder/src - Push-Location $sdkfolder/src - dotnet build /t:GenerateCode - Pop-Location - -} - -function Get-ResourceProviderFromReadme($readmeFile) { - $readmeFileRegex = "(?.*)/resource-manager/readme.md" - try - { - if ($readmeFile -match $readmeFileRegex) - { - return $matches["specName"] - } - } - catch - { - Write-Error "Error parsing reademe info" - Write-Error $_ - } - Write-Host "Cannot find resouce provider info" - # exit 1 -} +. (Join-Path $PSScriptRoot MgmtGenerateLib.ps1) $inputJson = Get-Content $inputJsonFile | Out-String | ConvertFrom-Json $swaggerDir = $inputJson.specFolder @@ -139,6 +12,7 @@ $swaggerDir = $swaggerDir -replace "\\", "/" $readmeFile = $inputJson.relatedReadmeMdFile $readmeFile = $readmeFile -replace "\\", "/" $commitid = $inputJson.headSha +Write-Host "swaggerDir:$swaggerDir, readmeFile:$readmeFile" $packageName = Get-ResourceProviderFromReadme $readmeFile $sdkPath = (Join-Path $PSScriptRoot .. ..) @@ -146,7 +20,7 @@ $sdkPath = Resolve-Path $sdkPath $sdkPath = $sdkPath -replace "\\", "/" $newpackageoutput = "newPackageOutput.json" -New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -readme $readmeFile -outputJsonFile $newpackageoutput +New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -readme $swaggerDir/$readmeFile -outputJsonFile $newpackageoutput if ( $? -ne $True) { Write-Error "Failed to create sdk project folder. exit code: $?" exit 1 @@ -158,7 +32,10 @@ Write-Host "projectFolder:$projectFolder" Remove-Item $newpackageoutput Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $projectFolder - +if ( $? -ne $True) { + Write-Error "Failed to generate sdk. exit code: $?" + exit 1 +} $outputJson = [PSCustomObject]@{ packages = @([pscustomobject]@{packageName="$packageName"; result='succeeded'; path=@("$path");packageFolder="$path"}) } diff --git a/eng/automation/MgmtGenerateLib.ps1 b/eng/automation/MgmtGenerateLib.ps1 new file mode 100644 index 000000000000..ca6011d4dba6 --- /dev/null +++ b/eng/automation/MgmtGenerateLib.ps1 @@ -0,0 +1,130 @@ +#Requires -Version 7.0 + +function Get-SwaggerInfo() +{ + param( + [string]$dir, + [string]$AUTOREST_CONFIG_FILE = "autorest.md" + ) + # Set-Location $dir + Push-Location $dir + $swaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/blob\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" + $rawSwaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" + $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(blob\/)?(?.*)\/specification\/(?.*)\/resource-manager\/readme.md" + try + { + $content = Get-Content .\$AUTOREST_CONFIG_FILE -Raw + Pop-Location + if ($content -match $swaggerInfoRegex) + { + return $matches["org"], $matches["specName"], $matches["commitID"] + } + if ($content -match $rawSwaggerInfoRegex) + { + return $matches["org"], $matches["specName"], $matches["commitID"] + } + if ($content -match $swaggerNoCommitRegex) + { + return $matches["org"], $matches["specName"], "" + } + } + catch + { + Write-Error "Error parsing swagger info" + Write-Error $_ + } + Write-Host "Cannot find swagger info" + exit 1 +} +function New-PackageFolder() { + param( + [string]$resourceProvider = "", + [string]$packageName = "", + [string]$sdkPath = "", + [string]$commitid = "", + [string]$readme = "", + [string]$AUTOREST_CONFIG_FILE = "autorest.md", + [string]$outputJsonFile = "newPacakgeOutput.json" + ) + + $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.*" + if (Test-Path -Path $projectFolder) { + Write-Host "Path exists!" + $folderinfo = Get-ChildItem -Path $projectFolder + $foldername = $folderinfo.Name + $projectFolder = "$sdkPath/sdk/$packageName/$foldername" + } else { + Write-Host "Path doesn't exist. create template." + dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template + $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName" + Write-Host "Create project folder $projectFolder" + New-Item -Path $projectFolder -ItemType Directory + # Set-Location $projectFolder + Push-Location $projectFolder + dotnet new azuremgmt --provider $packageName --includeCI true --force + Pop-Location + } + + # update the readme url if needed. + if ($commitid -ne "") { + Write-Host "Updating autorest.md file." + $swaggerInfo = Get-SwaggerInfo -dir "$projectFolder/src" + $org = $swaggerInfo[0] + $rp = $swaggerInfo[1] + $permalinks = "https://github.com/$org/azure-rest-api-specs/blob/$commitid/specification/$rp/resource-manager/readme.md" + $requirefile = "require: $permalinks" + $rquirefileRex = "require *:.*.md" + $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" + (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + } elseif ($readme -ne "") { + Write-Host "Updating required file $readme in autorest.md file." + $requirefile = "require: $readme" + $rquirefileRex = "require *:.*.md" + $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" + (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + + $readmefilestr = Get-Content $file + Write-Output "autorest.md:$readmefilestr" + } + + $path=$projectFolder + $path=$path.Replace($sdkPath + "/", "") + $outputJson = [PSCustomObject]@{ + projectFolder = $projectFolder + path = $path + } + + $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile + + return $projectFolder +} + +function Invoke-Generate() { + param( + [string]$swaggerPath = "", + [string]$sdkfolder= "" + ) + # Set-Location $sdkfolder/src + Push-Location $sdkfolder/src + dotnet build /t:GenerateCode + Pop-Location + +} + +function Get-ResourceProviderFromReadme($readmeFile) { + $readmeFileRegex = "(?.*)/resource-manager/readme.md" + try + { + if ($readmeFile -match $readmeFileRegex) + { + return $matches["specName"] + } + } + catch + { + Write-Error "Error parsing reademe info" + Write-Error $_ + } + Write-Host "Cannot find resouce provider info" + # exit 1 +} \ No newline at end of file diff --git a/eng/automation/generate-and-build.sh b/eng/automation/generate-and-build.sh index a03f238cf9d2..f9bea312f63e 100644 --- a/eng/automation/generate-and-build.sh +++ b/eng/automation/generate-and-build.sh @@ -4,17 +4,17 @@ if [ -z $1 ]; then echo "Please input inputfile" exit 1 fi -echo $1 if [ -z $2 ]; then echo "Please input outputfile" exit 1 fi -echo $2 - -env - pwsh eng/automation/Invoke-GenerateAndBuild.ps1 -inputJsonFile $1 -outputJsonFile $2 +if [ "$?" != "0" ]; then + echo "Failed to generate code." + exit 1 +fi + cat $2 \ No newline at end of file From 873081accdc57c757d0d08941cddff25d0d0f00c Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Fri, 7 Jan 2022 16:51:44 +0800 Subject: [PATCH 12/28] direct use powershell script --- codegen_to_sdk_config.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/codegen_to_sdk_config.json b/codegen_to_sdk_config.json index 688efc6f0ea0..cb7192f28fc2 100644 --- a/codegen_to_sdk_config.json +++ b/codegen_to_sdk_config.json @@ -10,7 +10,8 @@ }, "generateAndBuild": { "generateAndBuildScript": { - "path": "./eng/automation/generate-and-build.sh", + "path": "./eng/automation/Invoke-GenerateAndBuild.ps1", + "script": "pwsh", "logPrefix": "[DotNet-Generate]", "stderr":{ "storeLogByFilter": "[error|Error|Exception]" @@ -19,7 +20,8 @@ }, "mockTest": { "mockTestScript": { - "path": "./eng/automation/mock-test.sh", + "path": "./eng/automation/Invoke-MockTest.ps1", + "script": "pwsh", "logPrefix": "[GO-MockTest]", "stderr":{ "storeLogByFilter": "[error|Error|Exception]" From 300e5a758e4024ccc1b0a44b6b03016a7f5bc360 Mon Sep 17 00:00:00 2001 From: Chun Yu Date: Mon, 17 Jan 2022 13:00:02 +0800 Subject: [PATCH 13/28] move automation scripts to eng/scripts --- codegen_to_sdk_config.json | 6 +++--- eng/{ => scripts}/automation/Invoke-GenerateAndBuild.ps1 | 0 eng/{ => scripts}/automation/Invoke-MockTest.ps1 | 0 eng/{ => scripts}/automation/MgmtGenerateLib.ps1 | 0 eng/{ => scripts}/automation/MgmtMockTestLib.ps1 | 0 eng/{ => scripts}/automation/generate-and-build.sh | 0 eng/{ => scripts}/automation/init.ps1 | 0 eng/{ => scripts}/automation/init.sh | 0 eng/{ => scripts}/automation/mock-test.sh | 0 9 files changed, 3 insertions(+), 3 deletions(-) rename eng/{ => scripts}/automation/Invoke-GenerateAndBuild.ps1 (100%) rename eng/{ => scripts}/automation/Invoke-MockTest.ps1 (100%) rename eng/{ => scripts}/automation/MgmtGenerateLib.ps1 (100%) rename eng/{ => scripts}/automation/MgmtMockTestLib.ps1 (100%) rename eng/{ => scripts}/automation/generate-and-build.sh (100%) rename eng/{ => scripts}/automation/init.ps1 (100%) rename eng/{ => scripts}/automation/init.sh (100%) rename eng/{ => scripts}/automation/mock-test.sh (100%) diff --git a/codegen_to_sdk_config.json b/codegen_to_sdk_config.json index cb7192f28fc2..f0d47d11d622 100644 --- a/codegen_to_sdk_config.json +++ b/codegen_to_sdk_config.json @@ -1,7 +1,7 @@ { "init": { "initScript": { - "path": "./eng/automation/init.sh", + "path": "./eng/scripts/automation/init.sh", "logPrefix": "[DotNet]", "stderr":{ "storeAllLog": true @@ -10,7 +10,7 @@ }, "generateAndBuild": { "generateAndBuildScript": { - "path": "./eng/automation/Invoke-GenerateAndBuild.ps1", + "path": "./eng/scripts/automation/Invoke-GenerateAndBuild.ps1", "script": "pwsh", "logPrefix": "[DotNet-Generate]", "stderr":{ @@ -20,7 +20,7 @@ }, "mockTest": { "mockTestScript": { - "path": "./eng/automation/Invoke-MockTest.ps1", + "path": "./eng/scripts/automation/Invoke-MockTest.ps1", "script": "pwsh", "logPrefix": "[GO-MockTest]", "stderr":{ diff --git a/eng/automation/Invoke-GenerateAndBuild.ps1 b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 similarity index 100% rename from eng/automation/Invoke-GenerateAndBuild.ps1 rename to eng/scripts/automation/Invoke-GenerateAndBuild.ps1 diff --git a/eng/automation/Invoke-MockTest.ps1 b/eng/scripts/automation/Invoke-MockTest.ps1 similarity index 100% rename from eng/automation/Invoke-MockTest.ps1 rename to eng/scripts/automation/Invoke-MockTest.ps1 diff --git a/eng/automation/MgmtGenerateLib.ps1 b/eng/scripts/automation/MgmtGenerateLib.ps1 similarity index 100% rename from eng/automation/MgmtGenerateLib.ps1 rename to eng/scripts/automation/MgmtGenerateLib.ps1 diff --git a/eng/automation/MgmtMockTestLib.ps1 b/eng/scripts/automation/MgmtMockTestLib.ps1 similarity index 100% rename from eng/automation/MgmtMockTestLib.ps1 rename to eng/scripts/automation/MgmtMockTestLib.ps1 diff --git a/eng/automation/generate-and-build.sh b/eng/scripts/automation/generate-and-build.sh similarity index 100% rename from eng/automation/generate-and-build.sh rename to eng/scripts/automation/generate-and-build.sh diff --git a/eng/automation/init.ps1 b/eng/scripts/automation/init.ps1 similarity index 100% rename from eng/automation/init.ps1 rename to eng/scripts/automation/init.ps1 diff --git a/eng/automation/init.sh b/eng/scripts/automation/init.sh similarity index 100% rename from eng/automation/init.sh rename to eng/scripts/automation/init.sh diff --git a/eng/automation/mock-test.sh b/eng/scripts/automation/mock-test.sh similarity index 100% rename from eng/automation/mock-test.sh rename to eng/scripts/automation/mock-test.sh From 376d328f4643768423617fd89df5e268425ac4ac Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Tue, 18 Jan 2022 17:07:17 +0800 Subject: [PATCH 14/28] correct sdk folder path --- eng/scripts/automation/Invoke-GenerateAndBuild.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 index f3ad03b57cfc..9e0375c5fdf0 100644 --- a/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 @@ -15,7 +15,7 @@ $commitid = $inputJson.headSha Write-Host "swaggerDir:$swaggerDir, readmeFile:$readmeFile" $packageName = Get-ResourceProviderFromReadme $readmeFile -$sdkPath = (Join-Path $PSScriptRoot .. ..) +$sdkPath = (Join-Path $PSScriptRoot .. .. ..) $sdkPath = Resolve-Path $sdkPath $sdkPath = $sdkPath -replace "\\", "/" From be610b24f701101a7eab83d0f60c833627e17936 Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Tue, 18 Jan 2022 17:26:48 +0800 Subject: [PATCH 15/28] correct sdk repo root folder path --- eng/scripts/automation/init.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/scripts/automation/init.ps1 b/eng/scripts/automation/init.ps1 index e55ce2f3e988..3f94c2b5c2a1 100644 --- a/eng/scripts/automation/init.ps1 +++ b/eng/scripts/automation/init.ps1 @@ -1,4 +1,4 @@ -[string] $RepoRoot = "${PSScriptRoot}/../.." +[string] $RepoRoot = "${PSScriptRoot}/../../.." [string] $dotnetInstallScriptVersion = "v1" function GetDotNetInstallScript() { From 22b80c64b89a429a95607e8ebd992f5c03b26fea Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Tue, 18 Jan 2022 18:05:11 +0800 Subject: [PATCH 16/28] update init script path --- eng/scripts/automation/init.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/eng/scripts/automation/init.sh b/eng/scripts/automation/init.sh index 16040c7b16f4..2695e4baa47e 100644 --- a/eng/scripts/automation/init.sh +++ b/eng/scripts/automation/init.sh @@ -6,14 +6,15 @@ if [ -z $1 ]; then fi echo $1 -pwsh eng/automation/init.ps1 +pwsh eng/scripts/automation/init.ps1 DIRECTORY=$(cd `dirname $0` && pwd) -WORKFOLDER="$(realpath $DIRECTORY/../../)" +WORKFOLDER="$(realpath $DIRECTORY/../../../)" echo $WORKFOLDER export DOTNET_ROOT=$WORKFOLDER/.dotnet +export PATH=$DOTNET_ROOT:$PATH which dotnet -dotnet --list-sdk +dotnet --list-sdks echo $1 cat > $1 << EOF { From fe85104c1b763092ad84e426f2899aeb9beee17a Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Fri, 28 Jan 2022 12:34:18 +0800 Subject: [PATCH 17/28] Add request condition argument check --- sdk/core/Azure.Core/src/Shared/Argument.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/sdk/core/Azure.Core/src/Shared/Argument.cs b/sdk/core/Azure.Core/src/Shared/Argument.cs index a0173c4170a3..ad4872c75e82 100644 --- a/sdk/core/Azure.Core/src/Shared/Argument.cs +++ b/sdk/core/Azure.Core/src/Shared/Argument.cs @@ -212,5 +212,24 @@ public static string CheckNotNullOrEmpty(string value, string name) AssertNotNullOrEmpty(value, name); return value; } + + public static void AssertHasOnlySupportedHeaders(RequestConditions? requestConditions, string paramName, string[] supportedHeaders) + { + if (requestConditions != null) + { + AssertHasNoUnsupportedHeader(requestConditions.IfMatch, paramName, supportedHeaders, HttpHeader.Names.IfMatch); + AssertHasNoUnsupportedHeader(requestConditions.IfNoneMatch, paramName, supportedHeaders, HttpHeader.Names.IfNoneMatch); + AssertHasNoUnsupportedHeader(requestConditions.IfModifiedSince, paramName, supportedHeaders, HttpHeader.Names.IfModifiedSince); + AssertHasNoUnsupportedHeader(requestConditions.IfUnmodifiedSince, paramName, supportedHeaders, HttpHeader.Names.IfUnmodifiedSince); + } + } + + private static void AssertHasNoUnsupportedHeader(T? value, string paramName, string[] supportedHeaders, string unsupportedHeader) where T : struct + { + if (value.HasValue && !Array.Exists(supportedHeaders, element => element == unsupportedHeader)) + { + throw new ArgumentException($"{unsupportedHeader} header is not supported. Supported headers are: {string.Join(", ", supportedHeaders)}.", paramName); + } + } } } From d5cda14eab6b9f12ab04190e72fe83c20ed085e0 Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Sat, 29 Jan 2022 10:02:45 +0800 Subject: [PATCH 18/28] resolve build failure --- sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj | 1 + sdk/core/Azure.Core/src/Shared/Argument.cs | 3 +++ .../src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj | 1 + .../src/Microsoft.Azure.Core.Spatial.csproj | 1 + 4 files changed, 6 insertions(+) diff --git a/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj b/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj index 44493d94f9fb..c25eb12582c5 100644 --- a/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj +++ b/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj @@ -13,6 +13,7 @@ + diff --git a/sdk/core/Azure.Core/src/Shared/Argument.cs b/sdk/core/Azure.Core/src/Shared/Argument.cs index ad4872c75e82..54f7687c23e7 100644 --- a/sdk/core/Azure.Core/src/Shared/Argument.cs +++ b/sdk/core/Azure.Core/src/Shared/Argument.cs @@ -9,6 +9,7 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using Azure; namespace Azure.Core { @@ -213,6 +214,7 @@ public static string CheckNotNullOrEmpty(string value, string name) return value; } +#nullable enable public static void AssertHasOnlySupportedHeaders(RequestConditions? requestConditions, string paramName, string[] supportedHeaders) { if (requestConditions != null) @@ -223,6 +225,7 @@ public static void AssertHasOnlySupportedHeaders(RequestConditions? requestCondi AssertHasNoUnsupportedHeader(requestConditions.IfUnmodifiedSince, paramName, supportedHeaders, HttpHeader.Names.IfUnmodifiedSince); } } +#nullable disable private static void AssertHasNoUnsupportedHeader(T? value, string paramName, string[] supportedHeaders, string unsupportedHeader) where T : struct { diff --git a/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj b/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj index ce707dade1cc..34ad6ffc0dba 100644 --- a/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj +++ b/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj @@ -13,6 +13,7 @@ + diff --git a/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj b/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj index d588b90a244f..123f06b7f3d7 100644 --- a/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj +++ b/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj @@ -15,6 +15,7 @@ + From e97212a80bccaa9a498adc9385a792147f3ae497 Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Sat, 29 Jan 2022 13:10:18 +0800 Subject: [PATCH 19/28] remove unused import --- sdk/core/Azure.Core/src/Shared/Argument.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/core/Azure.Core/src/Shared/Argument.cs b/sdk/core/Azure.Core/src/Shared/Argument.cs index 54f7687c23e7..84f15db46f6b 100644 --- a/sdk/core/Azure.Core/src/Shared/Argument.cs +++ b/sdk/core/Azure.Core/src/Shared/Argument.cs @@ -9,7 +9,6 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using Azure; namespace Azure.Core { From 8d39b30c05765cf594ee7a071f8c23b8c950007f Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 22 Feb 2022 14:09:02 +0800 Subject: [PATCH 20/28] move codegen_to_sdk_config.json to eng directory --- codegen_to_sdk_config.json => eng/codegen_to_sdk_config.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename codegen_to_sdk_config.json => eng/codegen_to_sdk_config.json (100%) diff --git a/codegen_to_sdk_config.json b/eng/codegen_to_sdk_config.json similarity index 100% rename from codegen_to_sdk_config.json rename to eng/codegen_to_sdk_config.json From 86a64a8d35b5e5171e485e76890c8cf07e08f53f Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Tue, 22 Feb 2022 15:33:30 +0800 Subject: [PATCH 21/28] add dataplane generation --- .../automation/GenerateAndBuildLib.ps1 | 82 ++++++++++++++++++- .../automation/Invoke-GenerateAndBuild.ps1 | 19 ++++- 2 files changed, 97 insertions(+), 4 deletions(-) diff --git a/eng/scripts/automation/GenerateAndBuildLib.ps1 b/eng/scripts/automation/GenerateAndBuildLib.ps1 index aee815bd3c76..b68c1153f95d 100644 --- a/eng/scripts/automation/GenerateAndBuildLib.ps1 +++ b/eng/scripts/automation/GenerateAndBuildLib.ps1 @@ -122,6 +122,68 @@ function New-DataPlanePackageFolder() { return $projectFolder } +function New-MgmtPackageFolder() { + param( + [string]$service = "", + [string]$packageName = "", + [string]$sdkPath = "", + [string]$commitid = "", + [string]$readme = "", + [string]$AUTOREST_CONFIG_FILE = "autorest.md", + [string]$outputJsonFile = "newPacakgeOutput.json" + ) + + $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.*" + if (Test-Path -Path $projectFolder) { + Write-Host "Path exists!" + $folderinfo = Get-ChildItem -Path $projectFolder + $foldername = $folderinfo.Name + $projectFolder = "$sdkPath/sdk/$packageName/$foldername" + } else { + Write-Host "Path doesn't exist. create template." + dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template + $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName" + Write-Host "Create project folder $projectFolder" + New-Item -Path $projectFolder -ItemType Directory + # Set-Location $projectFolder + Push-Location $projectFolder + dotnet new azuremgmt --provider $packageName --includeCI true --force + Pop-Location + } + + # update the readme url if needed. + if ($commitid -ne "") { + Write-Host "Updating autorest.md file." + $swaggerInfo = Get-SwaggerInfo -dir "$projectFolder/src" + $org = $swaggerInfo[0] + $rp = $swaggerInfo[1] + $permalinks = "https://github.com/$org/azure-rest-api-specs/blob/$commitid/specification/$rp/resource-manager/readme.md" + $requirefile = "require: $permalinks" + $rquirefileRex = "require *:.*.md" + $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" + (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + } elseif ($readme -ne "") { + Write-Host "Updating required file $readme in autorest.md file." + $requirefile = "require: $readme" + $rquirefileRex = "require *:.*.md" + $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" + (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file + + $readmefilestr = Get-Content $file + Write-Output "autorest.md:$readmefilestr" + } + + $path=$projectFolder + $path=$path.Replace($sdkPath + "/", "") + $outputJson = [PSCustomObject]@{ + projectFolder = $projectFolder + path = $path + } + + $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile + + return $projectFolder +} function Invoke-Generate() { param( [string]$sdkfolder= "" @@ -129,4 +191,22 @@ function Invoke-Generate() { $sdkfolder = $sdkfolder -replace "\\", "/" Set-Location $sdkfolder/src dotnet build /t:GenerateCode -} \ No newline at end of file +} + +function Get-ResourceProviderFromReadme($readmeFile) { + $readmeFileRegex = "(?.*)/resource-manager/readme.md" + try + { + if ($readmeFile -match $readmeFileRegex) + { + return $matches["specName"] + } + } + catch + { + Write-Error "Error parsing reademe info" + Write-Error $_ + } + Write-Host "Cannot find resouce provider info" + # exit 1 + } \ No newline at end of file diff --git a/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 index 9e0375c5fdf0..74c76879b249 100644 --- a/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 @@ -4,7 +4,7 @@ param ( [string]$outputJsonFile="output.json" ) -. (Join-Path $PSScriptRoot MgmtGenerateLib.ps1) +. (Join-Path $PSScriptRoot GenerateAndBuildLib.ps1) $inputJson = Get-Content $inputJsonFile | Out-String | ConvertFrom-Json $swaggerDir = $inputJson.specFolder @@ -12,6 +12,8 @@ $swaggerDir = $swaggerDir -replace "\\", "/" $readmeFile = $inputJson.relatedReadmeMdFile $readmeFile = $readmeFile -replace "\\", "/" $commitid = $inputJson.headSha +$serviceType = $inputJson.serviceType + Write-Host "swaggerDir:$swaggerDir, readmeFile:$readmeFile" $packageName = Get-ResourceProviderFromReadme $readmeFile @@ -20,7 +22,18 @@ $sdkPath = Resolve-Path $sdkPath $sdkPath = $sdkPath -replace "\\", "/" $newpackageoutput = "newPackageOutput.json" -New-PackageFolder -resourceProvider $resourceProvider -packageName $packageName -sdkPath $sdkPath -commitid $commitid -readme $swaggerDir/$readmeFile -outputJsonFile $newpackageoutput +if ( $serviceType -eq "resource-manager" ) { + Write-Host "Generate resource-manager SDK client library." + New-MgmtPackageFolder -service $service -packageName $packageName -sdkPath $sdkPath -commitid $commitid -readme $swaggerDir/$readmeFile -outputJsonFile $newpackageoutput +} else { + Write-Host "Generate data-plane SDK client library." + $group = "sample"; + if ($inputJson.group) { + $group = $inputJson.group + } + $namespace = "Azure.$group.$packageName" + New-DataPlanePackageFolder -service $service -namespace $namespace -sdkPath $sdkPath -outputJsonFile $outputJsonFile +} if ( $? -ne $True) { Write-Error "Failed to create sdk project folder. exit code: $?" exit 1 @@ -31,7 +44,7 @@ $path = $newpackageoutputJson.path Write-Host "projectFolder:$projectFolder" Remove-Item $newpackageoutput -Invoke-Generate -swaggerPath $swaggerDir -sdkfolder $projectFolder +Invoke-Generate -sdkfolder $projectFolder if ( $? -ne $True) { Write-Error "Failed to generate sdk. exit code: $?" exit 1 From 782a8362ff21a7ca9ff78c767ccffd319d7815e2 Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Wed, 23 Feb 2022 15:42:33 +0800 Subject: [PATCH 22/28] add AssertNull check --- sdk/core/Azure.Core/src/Shared/Argument.cs | 29 ++++++++++------------ 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/sdk/core/Azure.Core/src/Shared/Argument.cs b/sdk/core/Azure.Core/src/Shared/Argument.cs index 84f15db46f6b..88d306b94c20 100644 --- a/sdk/core/Azure.Core/src/Shared/Argument.cs +++ b/sdk/core/Azure.Core/src/Shared/Argument.cs @@ -213,24 +213,21 @@ public static string CheckNotNullOrEmpty(string value, string name) return value; } -#nullable enable - public static void AssertHasOnlySupportedHeaders(RequestConditions? requestConditions, string paramName, string[] supportedHeaders) - { - if (requestConditions != null) - { - AssertHasNoUnsupportedHeader(requestConditions.IfMatch, paramName, supportedHeaders, HttpHeader.Names.IfMatch); - AssertHasNoUnsupportedHeader(requestConditions.IfNoneMatch, paramName, supportedHeaders, HttpHeader.Names.IfNoneMatch); - AssertHasNoUnsupportedHeader(requestConditions.IfModifiedSince, paramName, supportedHeaders, HttpHeader.Names.IfModifiedSince); - AssertHasNoUnsupportedHeader(requestConditions.IfUnmodifiedSince, paramName, supportedHeaders, HttpHeader.Names.IfUnmodifiedSince); - } - } -#nullable disable - - private static void AssertHasNoUnsupportedHeader(T? value, string paramName, string[] supportedHeaders, string unsupportedHeader) where T : struct + /// + /// Throws if is not null. + /// + /// The value to validate. + /// The name of the parameter. + /// is not null. +#if AZURE_NULLABLE + public static void AssertNull([AllowNull] T value, string name) +#else + public static void AssertNull(T value, string name, string message) +#endif { - if (value.HasValue && !Array.Exists(supportedHeaders, element => element == unsupportedHeader)) + if (value is not null) { - throw new ArgumentException($"{unsupportedHeader} header is not supported. Supported headers are: {string.Join(", ", supportedHeaders)}.", paramName); + throw new ArgumentException(message, name); } } } From 0ea99d6b0b1732c53a541b63f3891d2f8a457ca4 Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Wed, 23 Feb 2022 15:49:53 +0800 Subject: [PATCH 23/28] remove unused Azure.Core dependency --- sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj | 1 - .../src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj | 1 - .../src/Microsoft.Azure.Core.Spatial.csproj | 1 - 3 files changed, 3 deletions(-) diff --git a/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj b/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj index c25eb12582c5..44493d94f9fb 100644 --- a/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj +++ b/sdk/core/Azure.Core.Amqp/src/Azure.Core.Amqp.csproj @@ -13,7 +13,6 @@ - diff --git a/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj b/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj index 34ad6ffc0dba..ce707dade1cc 100644 --- a/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj +++ b/sdk/core/Microsoft.Azure.Core.Spatial.NewtonsoftJson/src/Microsoft.Azure.Core.Spatial.NewtonsoftJson.csproj @@ -13,7 +13,6 @@ - diff --git a/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj b/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj index 123f06b7f3d7..d588b90a244f 100644 --- a/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj +++ b/sdk/core/Microsoft.Azure.Core.Spatial/src/Microsoft.Azure.Core.Spatial.csproj @@ -15,7 +15,6 @@ - From ef0d0a7f14af22a6f6b7f0349da82f738bf92d24 Mon Sep 17 00:00:00 2001 From: chunyu3 Date: Wed, 23 Feb 2022 16:01:12 +0800 Subject: [PATCH 24/28] update AssertNull --- sdk/core/Azure.Core/src/Shared/Argument.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/core/Azure.Core/src/Shared/Argument.cs b/sdk/core/Azure.Core/src/Shared/Argument.cs index 88d306b94c20..9643b8e8d23f 100644 --- a/sdk/core/Azure.Core/src/Shared/Argument.cs +++ b/sdk/core/Azure.Core/src/Shared/Argument.cs @@ -218,9 +218,10 @@ public static string CheckNotNullOrEmpty(string value, string name) /// /// The value to validate. /// The name of the parameter. + /// The error message. /// is not null. #if AZURE_NULLABLE - public static void AssertNull([AllowNull] T value, string name) + public static void AssertNull([AllowNull] T value, string name, string message) #else public static void AssertNull(T value, string name, string message) #endif From 71dcf205c7d2c234e8fee208db14913b79aa3c21 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Thu, 24 Feb 2022 13:44:38 +0800 Subject: [PATCH 25/28] add log --- eng/scripts/automation/Invoke-GenerateAndBuild.ps1 | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 index 74c76879b249..d06100904018 100644 --- a/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 +++ b/eng/scripts/automation/Invoke-GenerateAndBuild.ps1 @@ -27,12 +27,8 @@ if ( $serviceType -eq "resource-manager" ) { New-MgmtPackageFolder -service $service -packageName $packageName -sdkPath $sdkPath -commitid $commitid -readme $swaggerDir/$readmeFile -outputJsonFile $newpackageoutput } else { Write-Host "Generate data-plane SDK client library." - $group = "sample"; - if ($inputJson.group) { - $group = $inputJson.group - } - $namespace = "Azure.$group.$packageName" - New-DataPlanePackageFolder -service $service -namespace $namespace -sdkPath $sdkPath -outputJsonFile $outputJsonFile + Write-Host "Data-plane SDK Generation is not implemented currently." + exit 1 } if ( $? -ne $True) { Write-Error "Failed to create sdk project folder. exit code: $?" From 12c9325d56303c7bdad1c2c63e46be7a86687ac2 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Thu, 24 Feb 2022 13:55:07 +0800 Subject: [PATCH 26/28] remove unused code --- eng/scripts/automation/MgmtGenerateLib.ps1 | 130 --------------------- eng/scripts/automation/mock-test.sh | 16 --- 2 files changed, 146 deletions(-) delete mode 100644 eng/scripts/automation/MgmtGenerateLib.ps1 delete mode 100644 eng/scripts/automation/mock-test.sh diff --git a/eng/scripts/automation/MgmtGenerateLib.ps1 b/eng/scripts/automation/MgmtGenerateLib.ps1 deleted file mode 100644 index ca6011d4dba6..000000000000 --- a/eng/scripts/automation/MgmtGenerateLib.ps1 +++ /dev/null @@ -1,130 +0,0 @@ -#Requires -Version 7.0 - -function Get-SwaggerInfo() -{ - param( - [string]$dir, - [string]$AUTOREST_CONFIG_FILE = "autorest.md" - ) - # Set-Location $dir - Push-Location $dir - $swaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/blob\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" - $rawSwaggerInfoRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(?[0-9a-f]{40})\/specification\/(?.*)\/resource-manager\/readme.md" - $swaggerNoCommitRegex = ".*github.*.com\/(?.*)\/azure-rest-api-specs\/(blob\/)?(?.*)\/specification\/(?.*)\/resource-manager\/readme.md" - try - { - $content = Get-Content .\$AUTOREST_CONFIG_FILE -Raw - Pop-Location - if ($content -match $swaggerInfoRegex) - { - return $matches["org"], $matches["specName"], $matches["commitID"] - } - if ($content -match $rawSwaggerInfoRegex) - { - return $matches["org"], $matches["specName"], $matches["commitID"] - } - if ($content -match $swaggerNoCommitRegex) - { - return $matches["org"], $matches["specName"], "" - } - } - catch - { - Write-Error "Error parsing swagger info" - Write-Error $_ - } - Write-Host "Cannot find swagger info" - exit 1 -} -function New-PackageFolder() { - param( - [string]$resourceProvider = "", - [string]$packageName = "", - [string]$sdkPath = "", - [string]$commitid = "", - [string]$readme = "", - [string]$AUTOREST_CONFIG_FILE = "autorest.md", - [string]$outputJsonFile = "newPacakgeOutput.json" - ) - - $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.*" - if (Test-Path -Path $projectFolder) { - Write-Host "Path exists!" - $folderinfo = Get-ChildItem -Path $projectFolder - $foldername = $folderinfo.Name - $projectFolder = "$sdkPath/sdk/$packageName/$foldername" - } else { - Write-Host "Path doesn't exist. create template." - dotnet new -i $sdkPath/eng/templates/Azure.ResourceManager.Template - $projectFolder="$sdkPath/sdk/$packageName/Azure.ResourceManager.$packageName" - Write-Host "Create project folder $projectFolder" - New-Item -Path $projectFolder -ItemType Directory - # Set-Location $projectFolder - Push-Location $projectFolder - dotnet new azuremgmt --provider $packageName --includeCI true --force - Pop-Location - } - - # update the readme url if needed. - if ($commitid -ne "") { - Write-Host "Updating autorest.md file." - $swaggerInfo = Get-SwaggerInfo -dir "$projectFolder/src" - $org = $swaggerInfo[0] - $rp = $swaggerInfo[1] - $permalinks = "https://github.com/$org/azure-rest-api-specs/blob/$commitid/specification/$rp/resource-manager/readme.md" - $requirefile = "require: $permalinks" - $rquirefileRex = "require *:.*.md" - $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" - (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file - } elseif ($readme -ne "") { - Write-Host "Updating required file $readme in autorest.md file." - $requirefile = "require: $readme" - $rquirefileRex = "require *:.*.md" - $file="$projectFolder/src/$AUTOREST_CONFIG_FILE" - (Get-Content $file) -replace $rquirefileRex, "$requirefile" | Set-Content $file - - $readmefilestr = Get-Content $file - Write-Output "autorest.md:$readmefilestr" - } - - $path=$projectFolder - $path=$path.Replace($sdkPath + "/", "") - $outputJson = [PSCustomObject]@{ - projectFolder = $projectFolder - path = $path - } - - $outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile - - return $projectFolder -} - -function Invoke-Generate() { - param( - [string]$swaggerPath = "", - [string]$sdkfolder= "" - ) - # Set-Location $sdkfolder/src - Push-Location $sdkfolder/src - dotnet build /t:GenerateCode - Pop-Location - -} - -function Get-ResourceProviderFromReadme($readmeFile) { - $readmeFileRegex = "(?.*)/resource-manager/readme.md" - try - { - if ($readmeFile -match $readmeFileRegex) - { - return $matches["specName"] - } - } - catch - { - Write-Error "Error parsing reademe info" - Write-Error $_ - } - Write-Host "Cannot find resouce provider info" - # exit 1 -} \ No newline at end of file diff --git a/eng/scripts/automation/mock-test.sh b/eng/scripts/automation/mock-test.sh deleted file mode 100644 index 82193fe94496..000000000000 --- a/eng/scripts/automation/mock-test.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -if [ -z $1 ]; then - echo "Please input inputfile" - exit 1 -fi -echo $1 - -if [ -z $2 ]; then - echo "Please input outputfile" - exit 1 -fi - -echo $2 - -pwsh eng/automation/Invoke-MockTest.ps1 -inputJsonFile $1 -outputJsonFile $2 \ No newline at end of file From 212aa22d2b9cd104cc7faa05a98cdd2cd9a79e24 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Fri, 25 Feb 2022 11:23:16 +0800 Subject: [PATCH 27/28] make message parameter nullable and default parameter --- sdk/core/Azure.Core/src/Shared/Argument.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sdk/core/Azure.Core/src/Shared/Argument.cs b/sdk/core/Azure.Core/src/Shared/Argument.cs index 9643b8e8d23f..06f480952088 100644 --- a/sdk/core/Azure.Core/src/Shared/Argument.cs +++ b/sdk/core/Azure.Core/src/Shared/Argument.cs @@ -221,14 +221,16 @@ public static string CheckNotNullOrEmpty(string value, string name) /// The error message. /// is not null. #if AZURE_NULLABLE - public static void AssertNull([AllowNull] T value, string name, string message) + public static void AssertNull([AllowNull] T value, string name, [AllowNull] string message = null) #else - public static void AssertNull(T value, string name, string message) +#nullable enable + public static void AssertNull(T value, string name, string? message = null) +#nullable disable #endif { if (value is not null) { - throw new ArgumentException(message, name); + throw new ArgumentException(message ?? "Value must be null.", name); } } } From 2f35e85be142bc7c795a29782abe78cf9cd84d21 Mon Sep 17 00:00:00 2001 From: "FAREAST\\chunyu" Date: Mon, 7 Mar 2022 09:18:05 +0800 Subject: [PATCH 28/28] resolve comments --- .../automation/GenerateAndBuildLib.ps1 | 28 +++++++++---------- eng/scripts/automation/generate-and-build.sh | 2 ++ eng/scripts/automation/init.sh | 1 + 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/eng/scripts/automation/GenerateAndBuildLib.ps1 b/eng/scripts/automation/GenerateAndBuildLib.ps1 index b68c1153f95d..07e036c80802 100644 --- a/eng/scripts/automation/GenerateAndBuildLib.ps1 +++ b/eng/scripts/automation/GenerateAndBuildLib.ps1 @@ -192,21 +192,19 @@ function Invoke-Generate() { Set-Location $sdkfolder/src dotnet build /t:GenerateCode } - function Get-ResourceProviderFromReadme($readmeFile) { $readmeFileRegex = "(?.*)/resource-manager/readme.md" try - { - if ($readmeFile -match $readmeFileRegex) - { - return $matches["specName"] - } - } - catch - { - Write-Error "Error parsing reademe info" - Write-Error $_ - } - Write-Host "Cannot find resouce provider info" - # exit 1 - } \ No newline at end of file + { + if ($readmeFile -match $readmeFileRegex) + { + return $matches["specName"] + } + } + catch + { + Write-Error "Error parsing readme info" + Write-Error $_ + } + Write-Host "Cannot find resource provider info" +} \ No newline at end of file diff --git a/eng/scripts/automation/generate-and-build.sh b/eng/scripts/automation/generate-and-build.sh index f9bea312f63e..f09d09222d33 100644 --- a/eng/scripts/automation/generate-and-build.sh +++ b/eng/scripts/automation/generate-and-build.sh @@ -2,11 +2,13 @@ if [ -z $1 ]; then echo "Please input inputfile" + echo "Usage: generate-and-build.sh " exit 1 fi if [ -z $2 ]; then echo "Please input outputfile" + echo "Usage: generate-and-build.sh " exit 1 fi diff --git a/eng/scripts/automation/init.sh b/eng/scripts/automation/init.sh index 2695e4baa47e..d3442bd95c24 100644 --- a/eng/scripts/automation/init.sh +++ b/eng/scripts/automation/init.sh @@ -2,6 +2,7 @@ if [ -z $1 ]; then echo "Please input outputfile" + echo "Usage: init.sh " exit 1 fi echo $1