From 928eacd98ff52328edcfb2ccc70dc56b103f6e61 Mon Sep 17 00:00:00 2001 From: Ray Chen Date: Thu, 18 Jun 2026 11:13:15 -0700 Subject: [PATCH 1/3] Support no-op for PR pipeline --- eng/pipelines/pullrequest.yml | 4 + .../templates/stages/archetype-sdk-client.yml | 138 ++++++++++-------- 2 files changed, 84 insertions(+), 58 deletions(-) diff --git a/eng/pipelines/pullrequest.yml b/eng/pipelines/pullrequest.yml index d17de1ab60f2..1adfabcf6ba7 100644 --- a/eng/pipelines/pullrequest.yml +++ b/eng/pipelines/pullrequest.yml @@ -15,6 +15,9 @@ parameters: - name: Service type: string default: auto + - name: SkipPrValidation + type: boolean + default: false # Switch to canary to test canary 1es branch. 1es template validation will set this parameter # to canary on run. - name: oneESTemplateTag @@ -28,6 +31,7 @@ extends: template: /eng/pipelines/templates/stages/archetype-sdk-client.yml parameters: oneESTemplateTag: ${{ parameters.oneESTemplateTag }} + SkipPrValidation: ${{ parameters.SkipPrValidation }} # Short term hack to get 1es canary validation working until we can fix manual runs with 'auto' ${{ if and(eq(parameters.oneESTemplateTag, 'canary'), eq(parameters.Service, 'auto')) }}: ServiceDirectory: template diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 9b5ff098bd23..44a8f514d6ef 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -14,6 +14,9 @@ parameters: - name: ServiceDirectory type: string default: not-specified + - name: SkipPrValidation + type: boolean + default: false - name: ExcludePaths type: object default: [] @@ -79,72 +82,91 @@ extends: parameters: oneESTemplateTag: ${{ parameters.oneESTemplateTag }} stages: - - stage: Build - variables: - - template: /eng/pipelines/templates/variables/globals.yml - - template: /eng/pipelines/templates/variables/image.yml - # Convert artifact parameter objects to json and set them as variables to be used in - # pipeline jobs/stages. By setting these as a variable once we save thousands of lines - # of yaml in extreme cases. This helps us stay under the devops max yaml size limits. - - name: ArtifactsJson - value: '${{ convertToJson(parameters.Artifacts) }}' - - name: AdditionalModulesJson - value: '${{ convertToJson(parameters.AdditionalModules) }}' - jobs: - - template: /eng/pipelines/templates/jobs/ci.yml - parameters: - ServiceDirectory: ${{ parameters.ServiceDirectory }} - TestPipeline: ${{ parameters.TestPipeline }} - SDKType: ${{ parameters.SDKType }} - Artifacts: ${{ parameters.Artifacts }} - ExcludePaths: ${{parameters.ExcludePaths}} - TimeoutInMinutes: ${{ parameters.TimeoutInMinutes }} - ReleaseArtifacts: - - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(variables['Build.Reason'], 'Manual')) }}: - - ${{ each artifact in parameters.Artifacts }}: - - ${{ if ne(artifact.releaseInBatch, 'false') }}: - - ${{ artifact }} - - ${{ else }}: - - ${{ parameters.Artifacts }} - MatrixConfigs: - - ${{ each config in parameters.MatrixConfigs }}: - - ${{ config }} - - ${{ each config in parameters.AdditionalMatrixConfigs }}: - - ${{ config }} - MatrixFilters: - - ${{ each filter in parameters.MatrixFilters }}: - - ${{ filter }} - # Skip TestFromSource jobs for SDKType data - - ${{ if eq(parameters.SDKType, 'data') }}: - - TestFromSource=^(?!true).* - MatrixReplace: - - ${{ each replacement in parameters.MatrixReplace }}: - - ${{ replacement }} + - ${{ if eq(parameters.SkipPrValidation, true) }}: + - stage: NoOp + displayName: No-op + variables: + - template: /eng/pipelines/templates/variables/globals.yml + - template: /eng/pipelines/templates/variables/image.yml + jobs: + - job: NoOp + displayName: No-op + pool: + name: $(LINUXPOOL) + image: $(LINUXVMIMAGE) + os: linux + steps: + - checkout: none + - pwsh: Write-Host "PR validation skipped because SkipPrValidation was set to true." + displayName: Skip PR validation + + - ${{ if ne(parameters.SkipPrValidation, true) }}: + - stage: Build + variables: + - template: /eng/pipelines/templates/variables/globals.yml + - template: /eng/pipelines/templates/variables/image.yml + # Convert artifact parameter objects to json and set them as variables to be used in + # pipeline jobs/stages. By setting these as a variable once we save thousands of lines + # of yaml in extreme cases. This helps us stay under the devops max yaml size limits. + - name: ArtifactsJson + value: '${{ convertToJson(parameters.Artifacts) }}' + - name: AdditionalModulesJson + value: '${{ convertToJson(parameters.AdditionalModules) }}' + jobs: + - template: /eng/pipelines/templates/jobs/ci.yml + parameters: + ServiceDirectory: ${{ parameters.ServiceDirectory }} + TestPipeline: ${{ parameters.TestPipeline }} + SDKType: ${{ parameters.SDKType }} + Artifacts: ${{ parameters.Artifacts }} + ExcludePaths: ${{parameters.ExcludePaths}} + TimeoutInMinutes: ${{ parameters.TimeoutInMinutes }} + ReleaseArtifacts: + - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(variables['Build.Reason'], 'Manual')) }}: + - ${{ each artifact in parameters.Artifacts }}: + - ${{ if ne(artifact.releaseInBatch, 'false') }}: + - ${{ artifact }} + - ${{ else }}: + - ${{ parameters.Artifacts }} + MatrixConfigs: + - ${{ each config in parameters.MatrixConfigs }}: + - ${{ config }} + - ${{ each config in parameters.AdditionalMatrixConfigs }}: + - ${{ config }} + MatrixFilters: + - ${{ each filter in parameters.MatrixFilters }}: + - ${{ filter }} + # Skip TestFromSource jobs for SDKType data + - ${{ if eq(parameters.SDKType, 'data') }}: + - TestFromSource=^(?!true).* + MatrixReplace: + - ${{ each replacement in parameters.MatrixReplace }}: + - ${{ replacement }} - - AZURE_TEST.*=.*/ - - ${{ if eq(parameters.SDKType, 'data') }}: - - JavaTestVersion=(.*1)\.\d{2}(.*)/$1.11$2 - PreBuildSteps: ${{ parameters.PreBuildSteps }} - EnvVars: ${{ parameters.EnvVars }} - AdditionalLintingOptions: ${{ parameters.AdditionalLintingOptions }} - ${{ if eq(parameters.SDKType, 'data') }}: - TestGoals: 'verify' - TestOptions: '-am' - JavaBuildVersion: '1.11' - ${{ else }}: - JavaBuildVersion: ${{ parameters.JavaBuildVersion }} - BuildParallelization: ${{ parameters.BuildParallelization }} - TestParallelization: ${{ parameters.TestParallelization }} + - AZURE_TEST.*=.*/ + - ${{ if eq(parameters.SDKType, 'data') }}: + - JavaTestVersion=(.*1)\.\d{2}(.*)/$1.11$2 + PreBuildSteps: ${{ parameters.PreBuildSteps }} + EnvVars: ${{ parameters.EnvVars }} + AdditionalLintingOptions: ${{ parameters.AdditionalLintingOptions }} + ${{ if eq(parameters.SDKType, 'data') }}: + TestGoals: 'verify' + TestOptions: '-am' + JavaBuildVersion: '1.11' + ${{ else }}: + JavaBuildVersion: ${{ parameters.JavaBuildVersion }} + BuildParallelization: ${{ parameters.BuildParallelization }} + TestParallelization: ${{ parameters.TestParallelization }} - - ${{ if parameters.AdditionalStagesAfterBuild }}: + - ${{ if and(ne(parameters.SkipPrValidation, true), parameters.AdditionalStagesAfterBuild) }}: - ${{ parameters.AdditionalStagesAfterBuild }} - - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'],'IndividualCI')) }}: + - ${{ if and(ne(parameters.SkipPrValidation, true), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'],'IndividualCI')) }}: - ${{ parameters.LiveTestStages }} # The Prerelease and Release stages are conditioned on whether we are building a pull request and the branch. # The tests-weekly check needs to be done so we don't create signing/release tasks for manual weekly-test runs - - ${{if and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal'), not(contains(variables['Build.DefinitionName'], 'tests-weekly'))) }}: + - ${{if and(ne(parameters.SkipPrValidation, true), ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal'), not(contains(variables['Build.DefinitionName'], 'tests-weekly'))) }}: - template: archetype-java-release-batch.yml parameters: DependsOn: From 47ab7dc9aacabb8ffaa186b590b2fc00ba623cdd Mon Sep 17 00:00:00 2001 From: Ray Chen Date: Thu, 18 Jun 2026 12:58:45 -0700 Subject: [PATCH 2/3] Check the trigger type --- eng/pipelines/pullrequest.yml | 4 +++- .../templates/stages/archetype-sdk-client.yml | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/eng/pipelines/pullrequest.yml b/eng/pipelines/pullrequest.yml index 1adfabcf6ba7..004f711c2698 100644 --- a/eng/pipelines/pullrequest.yml +++ b/eng/pipelines/pullrequest.yml @@ -9,7 +9,9 @@ pr: - pipelinev3* paths: include: - - "*" + - "*" + exclude: + - .github/skills/** parameters: - name: Service diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 44a8f514d6ef..2ab2f51005ed 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -82,7 +82,7 @@ extends: parameters: oneESTemplateTag: ${{ parameters.oneESTemplateTag }} stages: - - ${{ if eq(parameters.SkipPrValidation, true) }}: + - ${{ if and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual')) }}: - stage: NoOp displayName: No-op variables: @@ -97,10 +97,10 @@ extends: os: linux steps: - checkout: none - - pwsh: Write-Host "PR validation skipped because SkipPrValidation was set to true." + - pwsh: Write-Host "PR validation skipped because SkipPrValidation was set to true for a manual run." displayName: Skip PR validation - - ${{ if ne(parameters.SkipPrValidation, true) }}: + - ${{ if not(and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual'))) }}: - stage: Build variables: - template: /eng/pipelines/templates/variables/globals.yml @@ -158,15 +158,15 @@ extends: BuildParallelization: ${{ parameters.BuildParallelization }} TestParallelization: ${{ parameters.TestParallelization }} - - ${{ if and(ne(parameters.SkipPrValidation, true), parameters.AdditionalStagesAfterBuild) }}: + - ${{ if and(not(and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual'))), gt(length(parameters.AdditionalStagesAfterBuild), 0)) }}: - ${{ parameters.AdditionalStagesAfterBuild }} - - ${{ if and(ne(parameters.SkipPrValidation, true), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'],'IndividualCI')) }}: + - ${{ if and(not(and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual'))), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'],'IndividualCI')) }}: - ${{ parameters.LiveTestStages }} # The Prerelease and Release stages are conditioned on whether we are building a pull request and the branch. # The tests-weekly check needs to be done so we don't create signing/release tasks for manual weekly-test runs - - ${{if and(ne(parameters.SkipPrValidation, true), ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal'), not(contains(variables['Build.DefinitionName'], 'tests-weekly'))) }}: + - ${{if and(not(and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual'))), ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal'), not(contains(variables['Build.DefinitionName'], 'tests-weekly'))) }}: - template: archetype-java-release-batch.yml parameters: DependsOn: From f59fe526bdaa21a2c7151d2ebff3fb9508a0b213 Mon Sep 17 00:00:00 2001 From: Ray Chen Date: Thu, 18 Jun 2026 15:40:32 -0700 Subject: [PATCH 3/3] Updated template --- .../templates/stages/archetype-sdk-client.yml | 112 +++++++++--------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 2ab2f51005ed..2f3a628459bd 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -100,63 +100,63 @@ extends: - pwsh: Write-Host "PR validation skipped because SkipPrValidation was set to true for a manual run." displayName: Skip PR validation - - ${{ if not(and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual'))) }}: - - stage: Build - variables: - - template: /eng/pipelines/templates/variables/globals.yml - - template: /eng/pipelines/templates/variables/image.yml - # Convert artifact parameter objects to json and set them as variables to be used in - # pipeline jobs/stages. By setting these as a variable once we save thousands of lines - # of yaml in extreme cases. This helps us stay under the devops max yaml size limits. - - name: ArtifactsJson - value: '${{ convertToJson(parameters.Artifacts) }}' - - name: AdditionalModulesJson - value: '${{ convertToJson(parameters.AdditionalModules) }}' - jobs: - - template: /eng/pipelines/templates/jobs/ci.yml - parameters: - ServiceDirectory: ${{ parameters.ServiceDirectory }} - TestPipeline: ${{ parameters.TestPipeline }} - SDKType: ${{ parameters.SDKType }} - Artifacts: ${{ parameters.Artifacts }} - ExcludePaths: ${{parameters.ExcludePaths}} - TimeoutInMinutes: ${{ parameters.TimeoutInMinutes }} - ReleaseArtifacts: - - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(variables['Build.Reason'], 'Manual')) }}: - - ${{ each artifact in parameters.Artifacts }}: - - ${{ if ne(artifact.releaseInBatch, 'false') }}: - - ${{ artifact }} - - ${{ else }}: - - ${{ parameters.Artifacts }} - MatrixConfigs: - - ${{ each config in parameters.MatrixConfigs }}: - - ${{ config }} - - ${{ each config in parameters.AdditionalMatrixConfigs }}: - - ${{ config }} - MatrixFilters: - - ${{ each filter in parameters.MatrixFilters }}: - - ${{ filter }} - # Skip TestFromSource jobs for SDKType data - - ${{ if eq(parameters.SDKType, 'data') }}: - - TestFromSource=^(?!true).* - MatrixReplace: - - ${{ each replacement in parameters.MatrixReplace }}: - - ${{ replacement }} + - stage: Build + condition: not(and(eq(${{ parameters.SkipPrValidation }}, true), eq(variables['Build.Reason'], 'Manual'))) + variables: + - template: /eng/pipelines/templates/variables/globals.yml + - template: /eng/pipelines/templates/variables/image.yml + # Convert artifact parameter objects to json and set them as variables to be used in + # pipeline jobs/stages. By setting these as a variable once we save thousands of lines + # of yaml in extreme cases. This helps us stay under the devops max yaml size limits. + - name: ArtifactsJson + value: '${{ convertToJson(parameters.Artifacts) }}' + - name: AdditionalModulesJson + value: '${{ convertToJson(parameters.AdditionalModules) }}' + jobs: + - template: /eng/pipelines/templates/jobs/ci.yml + parameters: + ServiceDirectory: ${{ parameters.ServiceDirectory }} + TestPipeline: ${{ parameters.TestPipeline }} + SDKType: ${{ parameters.SDKType }} + Artifacts: ${{ parameters.Artifacts }} + ExcludePaths: ${{parameters.ExcludePaths}} + TimeoutInMinutes: ${{ parameters.TimeoutInMinutes }} + ReleaseArtifacts: + - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(variables['Build.Reason'], 'Manual')) }}: + - ${{ each artifact in parameters.Artifacts }}: + - ${{ if ne(artifact.releaseInBatch, 'false') }}: + - ${{ artifact }} + - ${{ else }}: + - ${{ parameters.Artifacts }} + MatrixConfigs: + - ${{ each config in parameters.MatrixConfigs }}: + - ${{ config }} + - ${{ each config in parameters.AdditionalMatrixConfigs }}: + - ${{ config }} + MatrixFilters: + - ${{ each filter in parameters.MatrixFilters }}: + - ${{ filter }} + # Skip TestFromSource jobs for SDKType data + - ${{ if eq(parameters.SDKType, 'data') }}: + - TestFromSource=^(?!true).* + MatrixReplace: + - ${{ each replacement in parameters.MatrixReplace }}: + - ${{ replacement }} - - AZURE_TEST.*=.*/ - - ${{ if eq(parameters.SDKType, 'data') }}: - - JavaTestVersion=(.*1)\.\d{2}(.*)/$1.11$2 - PreBuildSteps: ${{ parameters.PreBuildSteps }} - EnvVars: ${{ parameters.EnvVars }} - AdditionalLintingOptions: ${{ parameters.AdditionalLintingOptions }} - ${{ if eq(parameters.SDKType, 'data') }}: - TestGoals: 'verify' - TestOptions: '-am' - JavaBuildVersion: '1.11' - ${{ else }}: - JavaBuildVersion: ${{ parameters.JavaBuildVersion }} - BuildParallelization: ${{ parameters.BuildParallelization }} - TestParallelization: ${{ parameters.TestParallelization }} + - AZURE_TEST.*=.*/ + - ${{ if eq(parameters.SDKType, 'data') }}: + - JavaTestVersion=(.*1)\.\d{2}(.*)/$1.11$2 + PreBuildSteps: ${{ parameters.PreBuildSteps }} + EnvVars: ${{ parameters.EnvVars }} + AdditionalLintingOptions: ${{ parameters.AdditionalLintingOptions }} + ${{ if eq(parameters.SDKType, 'data') }}: + TestGoals: 'verify' + TestOptions: '-am' + JavaBuildVersion: '1.11' + ${{ else }}: + JavaBuildVersion: ${{ parameters.JavaBuildVersion }} + BuildParallelization: ${{ parameters.BuildParallelization }} + TestParallelization: ${{ parameters.TestParallelization }} - ${{ if and(not(and(eq(parameters.SkipPrValidation, true), eq(variables['Build.Reason'], 'Manual'))), gt(length(parameters.AdditionalStagesAfterBuild), 0)) }}: - ${{ parameters.AdditionalStagesAfterBuild }}