-
Notifications
You must be signed in to change notification settings - Fork 2
/
build.yml
173 lines (143 loc) · 6.64 KB
/
build.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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# Repo: FirelyTeam/azure-pipeline-templates
# File: build.yml
parameters:
# Default values
dotNetCoreVersion: '3.1.102' # can also be use with wildcards: latest minor version of 3. , use '3.x'
useVersionSuffix: true # if true, the build number will be added as or to the existing version suffix
propsFile: '' # used for versionSuffix, if not empty, the versionSuffix will be read from the props file
restoreDependencies: false
nuGetServiceConnections: # service connections to use for nuget feeds
nuGetSources: # sources to check for dependencies, other than the normal nuget.org feed
packageArtifacts: false
publishArtifacts: false
packageArtifactName: 'NuGetPackages'
publishWebProjects: false
zipAfterPublish: false
checkoutSubmodules: false
pool: {}
testFilter: '' # filter for unit tests; all tests by default
jobs:
- job: Build
pool: ${{ parameters.pool }}
steps:
- task: DotNetCoreInstaller@2
inputs:
version: ${{ parameters.dotNetCoreVersion }}
- ${{ if eq(parameters.checkoutSubmodules, 'true') }}:
- checkout: self
submodules: true
## retrieve the version suffix from the props file and set it as a variable
- powershell: |
[string]$propsFile = '${{ parameters.propsFile }}'
[string]$versionSuffix = ''
if ([string]::IsNullOrEmpty($propsFile) -eq $false)
{
$xml = [xml](get-content $propsFile)
#Get the suffix version
$versionSuffix = $xml.Project.PropertyGroup.VersionSuffix
$versionSuffix = $versionSuffix.Trim()
}
Write-Host "Version Suffix: $versionSuffix"
Write-Host "##vso[task.setvariable variable=VersionSuffix]$versionSuffix"
displayName: 'Retrieve version suffix'
- powershell: |
Write-Host "Updating Build Number to Version Suffix"
[string]$versionSuffix = '$(VersionSuffix)'
if ([string]::IsNullOrEmpty($versionSuffix))
{
$versionSuffix = $env:BUILD_BUILDNUMBER
}
else
{
$versionSuffix = $versionSuffix + "-" + $env:BUILD_BUILDNUMBER
}
Write-Host "Updated version Suffix: $versionSuffix"
Write-Host "##vso[task.setvariable variable=VersionSuffix]$versionSuffix"
displayName: 'Add buildnumber to version suffix'
condition: and(succeeded(), eq('${{ parameters.useVersionSuffix }}', 'true'))
- powershell: |
Write-Host "Determining if version suffix should be used"
[string]$useVersionSuffix = 'true'
[string]$versionSuffix = '$(VersionSuffix)'
Write-Host "Version Suffix: $versionSuffix"
if ([string]::IsNullOrEmpty($versionSuffix))
{
$useVersionSuffix = 'false'
}
Write-Host "Use Version Suffix: $useVersionSuffix"
Write-Host "##vso[task.setvariable variable=UseVersionSuffix]$useVersionSuffix"
displayName: 'Determine version suffix use'
- ${{ if eq(parameters.restoreDependencies, 'true') }}:
- template: restore.yml
parameters:
nuGetServiceConnections: ${{ parameters.nuGetServiceConnections }}
nuGetSources: ${{ parameters.nuGetSources }}
- script: dotnet build --configuration $(buildConfiguration) --no-restore
displayName: 'dotnet build $(buildConfiguration) with no restore'
condition: and(succeeded(), and(eq('${{ parameters.restoreDependencies }}', 'true'), eq(variables.UseVersionSuffix, 'false')))
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
condition: and(succeeded(), and(eq('${{ parameters.restoreDependencies }}', 'false'), eq(variables.UseVersionSuffix, 'false')))
- script: dotnet build --configuration $(buildConfiguration) --version-suffix $(VersionSuffix) --no-restore
displayName: 'dotnet build $(buildConfiguration) with version suffix and with no restore'
condition: and(succeeded(), and(eq('${{ parameters.restoreDependencies }}', 'true'), eq(variables.UseVersionSuffix, 'true')))
- script: dotnet build --configuration $(buildConfiguration) --version-suffix $(VersionSuffix)
displayName: 'dotnet build $(buildConfiguration) with version suffix'
condition: and(succeeded(), and(eq('${{ parameters.restoreDependencies }}', 'false'), eq(variables.UseVersionSuffix, 'true')))
- task: PowerShell@2
name: OutputVersion
displayName: Output Version
inputs:
failOnStderr: true
targetType: 'inline'
script: |
[string]$propsFile = '${{ parameters.propsFile }}'
[string]$versionPrefix = ''
[string]$version = ''
if ([string]::IsNullOrEmpty($propsFile) -eq $true)
{
Write-Host "No props file specified, not setting version output variable."
return
}
$xml = [xml](get-content $propsFile)
#Get the suffix version
$versionPrefix = $xml.Project.PropertyGroup.VersionPrefix
$versionPrefix = $versionPrefix.Trim()
$versionSuffix = '$(VersionSuffix)'
$useVersionSuffix = '$(UseVersionSuffix)'
Write-Host "Version Prefix: $versionPrefix, version suffix: $versionSuffix, use version suffix: $useVersionSuffix"
if ($useVersionSuffix -eq 'true' -and [string]::IsNullOrEmpty($versionSuffix) -eq $false) {
$version = $versionPrefix + "-" + $versionSuffix
}
else {
$version = $versionPrefix
}
#Setting output variable $Version (used for VSTS)
Write-Host "##vso[task.setvariable variable=Version;isOutput=true]$version"
- task: DotNetCoreCLI@2
displayName: 'dotnet test UnitTests'
condition: and(succeeded(), ne('${{ parameters.testFilter }}', ''))
inputs:
command: test
projects: '**/*Tests/*Tests.csproj'
arguments: '--configuration $(buildConfiguration) --no-restore --filter ${{ parameters.testFilter }}'
- task: DotNetCoreCLI@2
displayName: 'dotnet test UnitTests'
condition: and(succeeded(), eq('${{ parameters.testFilter }}', ''))
inputs:
command: test
projects: '**/*Tests/*Tests.csproj'
arguments: '--configuration $(buildConfiguration) --no-restore'
- ${{ if eq(parameters.packageArtifacts, 'true') }}:
- template: package.yml
parameters:
artifactName: ${{parameters.packageArtifactName}}
useVersionSuffix: ${{ parameters.useVersionSuffix }}
versionSuffix: $(VersionSuffix)
- ${{ if eq(parameters.publishArtifacts, 'true') }}:
- template: publish.yml
parameters:
useVersionSuffix: ${{ parameters.useVersionSuffix }}
publishWebProjects: ${{ parameters.publishWebProjects }}
zipAfterPublish: ${{ parameters.zipAfterPublish }}
versionSuffix: $(VersionSuffix)