-
Notifications
You must be signed in to change notification settings - Fork 0
/
azure-pipelines.yml
146 lines (128 loc) · 5.21 KB
/
azure-pipelines.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Azure Pipelines YAML for CI
# Viene importato automaticamente da Azure DevOps Pipelines
# Fare attenzione che la propria Organization possa eseguire MS-hosted o self-hosted jobs
# https://docs.microsoft.com/en-us/azure/devops/pipelines/?view=azure-devops
trigger:
- master
pool: Default
stages:
# Test stage: perform some code quality test before building
- stage: Test
jobs:
- job: TestJob
steps:
# Install InvokeBuild if not present
- task: PowerShell@2
displayName: Install InvokeBuild module on the build agent
inputs:
targetType: 'inline'
powershell: true
script: |
if (-not (Get-Module -Name InvokeBuild -ListAvailable)) {
Install-Module InvokeBuild -Scope CurrentUser
}
Import-Module InvokeBuild
# Analyze code
# The Analyze task automatically stops the build script if any PSScriptAnalyzer rule was violated
- task: PowerShell@2
displayName: Analyze code with PSScriptAnalyzer
inputs:
targetType: 'inline'
powershell: true
failOnStderr: false
script: Invoke-Build -Task Analyze
workingDirectory: $(System.DefaultWorkingDirectory)
- task: PublishTestResults@2
displayName: Publish code analysis results
condition: succeededOrFailed()
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '$(System.DefaultWorkingDirectory)/**/AnalysisResults*.xml'
failTaskOnFailedTests: true
# Test code with Pester
- task: PowerShell@2
displayName: Test code with Pester tests
inputs:
targetType: 'inline'
powershell: true
failOnStderr: false
script: Invoke-Build -Task Test
workingDirectory: $(System.DefaultWorkingDirectory)
- task: PublishTestResults@2
displayName: Publish test results
condition: succeededOrFailed()
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '$(System.DefaultWorkingDirectory)/**/TestResults*.xml'
failTaskOnFailedTests: true
# Verify code coverage
- task: PowerShell@2
displayName: Verify code coverage
inputs:
targetType: 'inline'
powershell: true
failOnStderr: true
script: Invoke-Build -Task CodeCoverage
workingDirectory: $(System.DefaultWorkingDirectory)
- task: PublishCodeCoverageResults@1
displayName: Publish code coverage results
condition: succeededOrFailed()
inputs:
codeCoverageTool: 'JaCoCo'
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/CodeCoverageResults*.xml'
pathToSources: '$(System.DefaultWorkingDirectory)/$(module.Name)/'
failIfCoverageEmpty: true
- stage: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) # Create builds only from the master branch
jobs:
- job: BuildJob
steps:
- task: PowerShell@2
displayName: Install InvokeBuild module on the build agent
inputs:
targetType: 'inline'
powershell: true
script: |
if (-not (Get-Module -Name InvokeBuild -ListAvailable)) {
Install-Module InvokeBuild -Force
}
Import-Module InvokeBuild
- task: PowerShell@2
displayName: Build PowerShell module
inputs:
targetType: 'inline'
powershell: true
failOnStderr: false
script: Invoke-Build -Task Build -Configuration Release -Sourcelocation $(module.SourceLocation)
workingDirectory: $(System.DefaultWorkingDirectory)
- task: NuGetCommand@2
displayName: Create a NuGet package
inputs:
command: 'pack'
packagesToPack: '$(System.DefaultWorkingDirectory)/build/**/*.nuspec'
packDestination: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
displayName: Publish build artifact
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '$(module.Name)'
publishLocation: Container
# - stage: Publish
# condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) # Publish the module only from the master branch
# jobs:
# - job: PublishJob
# steps:
# - task: DownloadPipelineArtifact@2
# displayName: Download pipeline artifact
# inputs:
# buildType: 'current'
# artifactName: '$(module.Name)'
# itemPattern: '**/*.nupkg'
# targetPath: '$(Pipeline.Workspace)'
# - task: NuGetCommand@2
# displayName: Publish module to NuGet feed
# inputs:
# command: 'push'
# packagesToPush: '$(Pipeline.Workspace)/**/*.nupkg'
# nuGetFeedType: 'internal'
# publishVstsFeed: '$(System.TeamProject)/$(module.FeedName)'