trigger: branches: include: - "*" paths: exclude: - CHANGELOG.md tags: include: - "v*" exclude: - "*-*" stages: - stage: Build jobs: - job: Package_Module displayName: 'Package Module' pool: vmImage: 'windows-2019' steps: - task: GitVersion@5 name: gitVersion displayName: 'Evaluate Next Version' inputs: runtime: 'full' configFilePath: 'GitVersion.yml' - task: PowerShell@2 name: package displayName: 'Build & Package Module' inputs: filePath: './build.ps1' arguments: '-ResolveDependency -tasks pack' pwsh: true env: ModuleVersion: $(gitVersion.NuGetVersionV2) - task: PublishBuildArtifacts@1 displayName: 'Publish Build Artifact' inputs: pathToPublish: 'output/' artifactName: 'output' publishLocation: 'Container' - stage: Test dependsOn: Build jobs: - job: Test_HQRM displayName: 'High Quality Resource Module' pool: vmImage: 'windows-2019' timeoutInMinutes: 0 steps: - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifact' inputs: buildType: 'current' downloadType: 'single' artifactName: 'output' downloadPath: '$(Build.SourcesDirectory)' - task: PowerShell@2 name: test displayName: 'Run HQRM Test' inputs: filePath: './build.ps1' arguments: '-Tasks hqrmtest' pwsh: false - task: PublishTestResults@2 displayName: 'Publish Test Results' condition: succeededOrFailed() inputs: testResultsFormat: 'NUnit' testResultsFiles: 'output/testResults/NUnit*.xml' testRunTitle: 'HQRM' - job: Test_Unit displayName: 'Unit' pool: vmImage: 'windows-2019' timeoutInMinutes: 0 steps: - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifact' inputs: buildType: 'current' downloadType: 'single' artifactName: 'output' downloadPath: '$(Build.SourcesDirectory)' - task: PowerShell@2 name: test displayName: 'Run Unit Test' inputs: filePath: './build.ps1' arguments: "-Tasks test -PesterScript 'tests/Unit'" pwsh: false - task: PublishTestResults@2 displayName: 'Publish Test Results' condition: succeededOrFailed() inputs: testResultsFormat: 'NUnit' testResultsFiles: 'output/testResults/NUnit*.xml' testRunTitle: 'Unit (Windows Server Core)' - task: PublishBuildArtifacts@1 displayName: 'Publish Test Artifact' condition: succeededOrFailed() inputs: pathToPublish: 'output/testResults/' artifactName: 'testResults' publishLocation: 'Container' - job: Test_Integration displayName: 'Integration' pool: vmImage: 'windows-2019' timeoutInMinutes: 0 steps: - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifact' inputs: buildType: 'current' downloadType: 'single' artifactName: 'output' downloadPath: '$(Build.SourcesDirectory)' - task: PowerShell@2 name: configureWinRM displayName: 'Configure WinRM' inputs: targetType: 'inline' script: 'winrm quickconfig -quiet' pwsh: false - task: PowerShell@2 name: test displayName: 'Run Integration Test' inputs: filePath: './build.ps1' arguments: "-Tasks test -PesterScript 'tests/Integration' -CodeCoverageThreshold 0" pwsh: false - task: PublishTestResults@2 displayName: 'Publish Test Results' condition: succeededOrFailed() inputs: testResultsFormat: 'NUnit' testResultsFiles: 'output/testResults/NUnit*.xml' testRunTitle: 'Integration (Windows Server Core)' - job: Code_Coverage displayName: 'Publish Code Coverage' dependsOn: Test_Unit condition: succeededOrFailed() pool: vmImage: 'ubuntu-latest' timeoutInMinutes: 0 steps: - pwsh: | $repositoryOwner,$repositoryName = $env:BUILD_REPOSITORY_NAME -split '/' echo "##vso[task.setvariable variable=RepositoryOwner;isOutput=true]$repositoryOwner" echo "##vso[task.setvariable variable=RepositoryName;isOutput=true]$repositoryName" name: dscBuildVariable displayName: 'Set Environment Variables' - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifact' inputs: buildType: 'current' downloadType: 'single' artifactName: 'output' downloadPath: '$(Build.SourcesDirectory)' - task: DownloadBuildArtifacts@0 displayName: 'Download Test Artifact' inputs: buildType: 'current' downloadType: 'single' artifactName: 'testResults' downloadPath: '$(Build.SourcesDirectory)/output' - stage: Deploy dependsOn: Test condition: | and( succeeded(), or( eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/tags/') ) ) jobs: - job: Deploy_Module displayName: 'Deploy Module' pool: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifact' inputs: buildType: 'current' downloadType: 'single' artifactName: 'output' downloadPath: '$(Build.SourcesDirectory)' - task: PowerShell@2 name: publishRelease displayName: 'Publish Release' inputs: filePath: './build.ps1' arguments: '-tasks publish' env: GalleryApiToken: $(GalleryApiToken)