diff --git a/eng/common/pipelines/templates/stages/archetype-sdk-tool-pwsh.yml b/eng/common/pipelines/templates/stages/archetype-sdk-tool-pwsh.yml new file mode 100644 index 000000000000..0b46240cc7e4 --- /dev/null +++ b/eng/common/pipelines/templates/stages/archetype-sdk-tool-pwsh.yml @@ -0,0 +1,43 @@ +parameters: + - name: TargetDirectory + type: string + - name: CustomTestSteps + type: object + default: [] + - name: EnvVars + type: object + default: {} + - name: TargetTags + type: string + default: '' + +variables: + - template: /eng/pipelines/templates/variables/globals.yml + +stages: + - stage: 'eng_script_tests' + jobs: + - job: 'Test' + strategy: + matrix: + Windows: + Pool: 'azsdk-pool-mms-win-2022-general' + Image: 'MMS2022' + Linux: + Pool: azsdk-pool-mms-ubuntu-2204-general + Image: MMSUbuntu22.04 + Mac: + Pool: 'Azure Pipelines' + Image: 'macos-11' + + pool: + name: $(Pool) + vmImage: $(Image) + + steps: + - template: /eng/common/pipelines/templates/steps/run-pester-tests.yml + parameters: + TargetDirectory: ${{ parameters.TargetDirectory }} + CustomTestSteps: ${{ parameters.CustomTestSteps }} + EnvVars: ${{ parameters.EnvVars }} + TargetTags: ${{ parameters.TargetTags }} diff --git a/eng/common/pipelines/templates/steps/run-pester-tests.yml b/eng/common/pipelines/templates/steps/run-pester-tests.yml new file mode 100644 index 000000000000..02082a6470b7 --- /dev/null +++ b/eng/common/pipelines/templates/steps/run-pester-tests.yml @@ -0,0 +1,55 @@ +parameters: + - name: TargetDirectory + type: string + - name: CustomTestSteps + type: object + default: [] + - name: EnvVars + type: object + default: {} + - name: TargetTags + type: string + default: '' + +steps: + - pwsh: | + Install-Module -Name Pester -Force + displayName: Install Pester + + # default test steps + - ${{ if eq(length(parameters.CustomTestSteps), 0) }}: + - pwsh: | + $tags = "${{ parameters.TargetTags }}" -Split "," | ForEach-Object { return $_.Trim() } + + $config = New-PesterConfiguration + $config.CodeCoverage.Enabled = $true + $config.TestResult.Enabled = $true + $config.Run.PassThru = $true + + if ($tags) { + $config.Filter.Tag = $tags + } + + Invoke-Pester -Configuration $config + displayName: Run Tests + env: ${{ parameters.EnvVars }} + workingDirectory: $(Build.SourcesDirectory)/${{ parameters.TargetDirectory }} + + - ${{ if not(eq(length(parameters.CustomTestSteps), 0)) }}: + - ${{ parameters.CustomTestSteps }} + + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: succeededOrFailed() + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: $(Build.SourcesDirectory)/${{ parameters.TargetDirectory }}/testResults.xml + testRunTitle: '$(System.StageName)_$(Agent.JobName)_Tests' + + - task: PublishCodeCoverageResults@1 + displayName: 'Publish Code Coverage to Azure DevOps' + condition: succeededOrFailed() + inputs: + codeCoverageTool: 'JaCoCo' + summaryFileLocation: '$(Build.SourcesDirectory)/${{ parameters.TargetDirectory }}/coverage.xml' + pathToSources: '$(Build.SourcesDirectory)/${{ parameters.TargetDirectory }}' \ No newline at end of file