diff --git a/eng/pipelines/pr-breaking-check.yml b/eng/pipelines/pr-breaking-check.yml new file mode 100644 index 0000000000..0e3716c9f1 --- /dev/null +++ b/eng/pipelines/pr-breaking-check.yml @@ -0,0 +1,94 @@ +trigger: none + +resources: + repositories: + - repository: azure-rest-api-specs + type: github + name: Azure/azure-rest-api-specs + endpoint: azure + - repository: azure-sdk-tools + type: github + name: Azure/azure-sdk-tools + endpoint: azure + +stages: + - stage: Build_and_Validate + jobs: + - job: Validate_generated_swagger + pool: + name: azsdk-pool-mms-ubuntu-2004-general + vmImage: ubuntu-20.04 + steps: + # Step 1: Build TypeSpec + - checkout: self + submodules: true + - template: /eng/pipelines/templates/install.yml + parameters: + nodeVersion: "18.x" + workingDirectory: $(Build.SourcesDirectory)/typespec-azure + - script: pnpm run build + displayName: Build + workingDirectory: $(Build.SourcesDirectory)/typespec-azure + + #Step 2: Update swagger by TypeSpec in Step 1 + - checkout: azure-rest-api-specs + fetchDepth: 1 + - pwsh: | + $packageJson = Get-Content -Raw "package.json" | ConvertFrom-Json -AsHashtable + + $packageJson.devDependencies["@azure-tools/typespec-autorest"] = "file:$(Build.SourcesDirectory)/typespec-azure/packages/typespec-autorest" + $packageJson.devDependencies["@azure-tools/typespec-azure-core"] = "file:$(Build.SourcesDirectory)/typespec-azure/packages/typespec-azure-core" + $packageJson.devDependencies["@azure-tools/typespec-azure-portal-core"] = "file:$(Build.SourcesDirectory)/typespec-azure/packages/typespec-azure-portal-core" + $packageJson.devDependencies["@azure-tools/typespec-azure-resource-manager"] = "file:$(Build.SourcesDirectory)/typespec-azure/packages/typespec-azure-resource-manager" + $packageJson.devDependencies["@azure-tools/typespec-client-generator-core"] = "file:$(Build.SourcesDirectory)/typespec-azure/packages/typespec-client-generator-core" + $packageJson.devDependencies["@azure-tools/typespec-azure-rulesets"] = "file:$(Build.SourcesDirectory)/typespec-azure/packages/typespec-azure-rulesets" + $packageJson.devDependencies["@typespec/compiler"] = "file:$(Build.SourcesDirectory)/typespec-azure/core/packages/compiler" + $packageJson.devDependencies["@typespec/http"] = "file:$(Build.SourcesDirectory)/typespec-azure/core/packages/http" + $packageJson.devDependencies["@typespec/openapi"] = "file:$(Build.SourcesDirectory)/typespec-azure/core/packages/openapi" + $packageJson.devDependencies["@typespec/openapi3"] = "file:$(Build.SourcesDirectory)/typespec-azure/core/packages/openapi3" + $packageJson.devDependencies["@typespec/rest"] = "file:$(Build.SourcesDirectory)/typespec-azure/core/packages/rest" + $packageJson.devDependencies["@typespec/versioning"] = "file:$(Build.SourcesDirectory)/typespec-azure/core/packages/versioning" + + $packageJson | ConvertTo-Json -Depth 100 | Out-File -Path "package.json" -Encoding utf8 -NoNewline -Force + displayName: "Update package.json in azure-rest-api-specs" + workingDirectory: $(Build.SourcesDirectory)/azure-rest-api-specs + - script: npm install + displayName: Install updated TypeSpec dependencies + workingDirectory: $(Build.SourcesDirectory)/azure-rest-api-specs + - pwsh: ./eng/scripts/TypeSpec-Generate-Swagger.ps1 -CheckAll + displayName: "Generate all swagger files" + workingDirectory: $(Build.SourcesDirectory)/azure-rest-api-specs + - pwsh: | + git restore package.json + git restore package-lock.json + displayName: Discard versions change + workingDirectory: $(Build.SourcesDirectory)/azure-rest-api-specs + + # Step 3: Create PR + - checkout: azure-sdk-tools + fetchDepth: 1 + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml@azure-sdk-tools + parameters: + BaseRepoBranch: auto-update-swagger-$(Build.BuildNumber) + BaseRepoOwner: azure-sdk + CommitMsg: Update swagger with TypeSpec built from $(Build.BuildNumber) + TargetRepoOwner: Azure + TargetRepoName: azure-rest-api-specs + WorkingDirectory: $(Build.SourcesDirectory)/azure-rest-api-specs + ScriptDirectory: $(Build.SourcesDirectory)/azure-sdk-tools/eng/common/scripts + - task: PowerShell@2 + displayName: Create pull request + inputs: + pwsh: true + filePath: $(Build.SourcesDirectory)/azure-sdk-tools/eng/common/scripts/Submit-PullRequest.ps1 + arguments: > + -RepoOwner "Azure" + -RepoName "azure-rest-api-specs" + -BaseBranch "main" + -PROwner "azure-sdk" + -PRBranch "auto-update-swagger-$(Build.BuildNumber)" + -AuthToken "$(azuresdk-github-pat)" + -PRTitle "Swagger Regen Preview from TypeSpec built from $(Build.BuildNumber)" + -PRBody "Swagger Regen Preview from TypeSpec built from $(Build.BuildNumber)" + -OpenAsDraft $true + -PRLabels "Do Not Merge" diff --git a/eng/pipelines/templates/install.yml b/eng/pipelines/templates/install.yml index da7647b03f..ef85f84ad0 100644 --- a/eng/pipelines/templates/install.yml +++ b/eng/pipelines/templates/install.yml @@ -6,6 +6,9 @@ parameters: - name: pnpmStorePath type: string default: $(Pipeline.Workspace)/.pnpm-store + - name: workingDirectory + type: string + default: $(Build.SourcesDirectory) steps: - task: UseDotNet@2 inputs: @@ -19,7 +22,7 @@ steps: - task: Cache@2 inputs: - key: 'pnpm | "$(Agent.OS)" | pnpm-lock.yaml' + key: 'pnpm | "$(Agent.OS)" | ${{ parameters.workingDirectory }}/pnpm-lock.yaml' path: ${{ parameters.pnpmStorePath }} displayName: Cache pnpm store - script: | @@ -40,6 +43,8 @@ steps: - script: pnpm install displayName: Install JavaScript Dependencies retryCountOnTaskFailure: 3 + workingDirectory: ${{ parameters.workingDirectory }} - script: dotnet restore core/packages/typespec-vs displayName: Restore .NET Dependencies + workingDirectory: ${{ parameters.workingDirectory }}