forked from andrewmatveychuk/powershell.sample-module
-
Notifications
You must be signed in to change notification settings - Fork 0
/
azure-pipelines.yml
144 lines (127 loc) · 4.71 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
trigger:
branches:
include:
- master
- feature/*
paths:
exclude:
- README.md
pool:
vmImage: 'windows-latest'
# abc
# some changes
stages:
- stage: Test
jobs:
- job: TestJob
steps:
- task: PowerShell@2
displayName: Install InvokeBuild module on the build agent
inputs:
targetType: 'inline'
pwsh: true
script: |
if (-not (Get-Module -Name InvokeBuild -ListAvailable)) {
Install-Module InvokeBuild -Force
}
Import-Module InvokeBuild
- task: PowerShell@2
displayName: Analyze code with PSScriptAnalyzer
inputs:
targetType: 'inline'
pwsh: 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
- task: PowerShell@2
displayName: Test code with Pester tests
inputs:
targetType: 'inline'
pwsh: 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
- task: PowerShell@2
displayName: Verify code coverage
inputs:
targetType: 'inline'
pwsh: 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'
pwsh: 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'
pwsh: 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)'