eng/scripts/TypeSpec-Generate-Sdk.ps1 (99 lines of code) (raw):

### # Conventient usage: # 1) generate specific language sdk based on current typespec folder # ./TypeSpec-Generate-Sdk.ps1 -SdkLanguage {language} # e.g. ./TypeSpec-Generate-Sdk.ps1 -SdkLanguage dotnet # The pre-requisite is the sdk repos path in local machine follows below convention: # 1). "azure-rest-api-specs" and "sdk-repos" are peer folder under same parent folder # 2). each sdk language repo is under "sdk-repos" folder, i.e. # sdk-repos/azure-sdk-for-net # sdk-repos/azure-sdk-for-java # sdk-repos/azure-sdk-for-python # sdk-repos/azure-sdk-for-js ### [CmdletBinding()] param ( [Parameter(Position = 0)] [ValidateNotNullOrEmpty()] [string] $SdkRepoRootDirectory, [Parameter(Position = 1)] [string] $TypeSpecProjectDirectory = ".", # A directory of `tspconfig.yaml` or a remoteUrl of `tspconfig.yaml` [Parameter(Position = 2)] [string] $CommitHash, [Parameter(Position = 3)] [string] $RepoUrl, [string] $SdkLanguage ) $TypeSpecProjectDirectory = (Resolve-Path $TypeSpecProjectDirectory).Path if ($SdkLanguage) { # example value of TypeSpecProjectDirectory: /workspaces/azure-rest-api-specs/specification/contosowidgetmanager/Contoso.WidgetManager $index = $TypeSpecProjectDirectory.IndexOf("specification") if ($index -eq -1) { Write-Error "The input TypeSpecProjectDirectory parameter doesn't have 'specification' folder in its path: $TypeSpecProjectDirectory" exit 1 } $specFolderPath = $TypeSpecProjectDirectory.Substring(0, $index - 1) $rootPath = Split-Path $specFolderPath -Parent $sdkRepoRoot = Join-Path $rootPath "sdk-repos" if (!(Test-Path $sdkRepoRoot)) { Write-Error "sdk repos root folder doesn't exist: $sdkRepoRoot" exit 1 } # trying to locate the default sdk repo folder under 'sdk-repos' folder by language value switch ($SdkLanguage) { "dotnet" { Write-Host "Generating dotnet sdk code ..." $sdkRepoPath = Join-Path $sdkRepoRoot "azure-sdk-for-net" if (!(Test-Path $sdkRepoPath)) { Write-Error "sdk repo doesn't exist: $sdkRepoPath" exit 1 } } "java" { Write-Host "Generating java sdk code ..." $sdkRepoPath = Join-Path $sdkRepoRoot "azure-sdk-for-java" if (!(Test-Path $sdkRepoPath)) { Write-Error "sdk repo doesn't exist: $sdkRepoPath" exit 1 } } "python" { Write-Host "Generating python sdk code ..." $sdkRepoPath = Join-Path $sdkRepoRoot "azure-sdk-for-python" if (!(Test-Path $sdkRepoPath)) { Write-Error "sdk repo doesn't exist: $sdkRepoPath" exit 1 } } "js" { Write-Host "Generating js sdk code ..." $sdkRepoPath = Join-Path $sdkRepoRoot "azure-sdk-for-js" if (!(Test-Path $sdkRepoPath)) { Write-Error "sdk repo doesn't exist: $sdkRepoPath" exit 1 } } default { Write-Error "The input SdkLanguage parameter should be one of this values: dotnet, java, python, js" exit 1 } } $SdkRepoRootDirectory = $sdkRepoPath } try { Push-Location $SdkRepoRootDirectory $commonScript = Join-Path . "eng/common/scripts/TypeSpec-Project-Process.ps1" if (Test-Path $commonScript) { . $commonScript -TypeSpecProjectDirectory $TypeSpecProjectDirectory -CommitHash $CommitHash -RepoUrl $RepoUrl if ($LASTEXITCODE) { exit $LASTEXITCODE } } else { Write-Error "Cannot find $commonScript at $SdkRepoRootDirectory" } } finally { Pop-Location } exit 0