-
Notifications
You must be signed in to change notification settings - Fork 162
/
release-branch-pipeline.yml
160 lines (156 loc) · 7.16 KB
/
release-branch-pipeline.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
trigger:
- release
pr: none
pool:
vmImage: "ubuntu-latest"
variables:
VERSION:
jobs:
- job: check_all_dependencies_are_releases
timeoutInMinutes: 5
steps:
- task: Maven@4
inputs:
mavenPomFile: 'pom.xml'
options: '-DcheckForSnapshotDependencies'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.11'
jdkArchitectureOption: 'x64'
publishJUnitResults: false
goals: 'enforcer:enforce'
- job: check_release_notes
timeoutInMinutes: 5
steps:
- task: Bash@3
# Checks if the release notes file is populated. Exits if it is not.
inputs:
targetType: 'inline'
script: |
if [ -n "$(cmp RELEASE_NOTES.md RELEASE_NOTES.template.md)" ]
then
echo "RELEASE_NOTES.md has changed, proceeding to next step"
else
echo "Your RELEASE_NOTES.md file is unchanged. Please provide release notes before creating a release."
exit 1
fi
displayName: Checks if the release notes file is populated.
- job: get_release_version
timeoutInMinutes: 5
steps:
- task: PowerShell@2
# This task pulls the <version> value from the hapi-fhir project pom.xml file. All modules are released as
# the same version, at the same time, as defined in the root level pom.xml.
inputs:
targetType: 'inline'
script: |
[xml]$pomXml = Get-Content -Path .\pom.xml
# version
Write-Host $pomXml.project.version
$VERSION=$pomXml.project.version
Write-Host "##vso[task.setvariable variable=version_from_pom;isOutput=true;]$VERSION"
displayName: Save pom file version to local variable.
name: setOutput
- task: Bash@3
# Prints out the build version, for debugging purposes
inputs:
targetType: 'inline'
script: |
echo Pulled version from pom.xml => $(setOutput.version_from_pom)
displayName: Debug print release version
- task: Bash@3
# Azure pipelines cannot pass variables between pipelines, but it can pass files, so we
# pass the build id (ex: 1.1.13-SNAPSHOT) as a string in a file.
# This is used in the release pipeline, so we create it here.
inputs:
targetType: 'inline'
script: |
echo $(setOutput.version_from_pom)
VERSION=$(setOutput.version_from_pom)
echo "$VERSION" > $(System.DefaultWorkingDirectory)/VERSION
displayName: Save Release Version to File
- task: CopyFiles@2
# Copies the VERSION file containing the build id (ex: 1.1.13-SNAPSHOT) to the staging directory
# This is done for release versions only.
inputs:
SourceFolder: '$(System.Defaultworkingdirectory)'
Contents: "$(System.DefaultWorkingDirectory)/VERSION"
TargetFolder: '$(build.artifactstagingdirectory)'
displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Build Artifacts'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
- job: get_branch_id
timeoutInMinutes: 5
steps:
- task: PowerShell@2
# This task pulls the branch name from the azure build environment and sets as a job-level variable.
inputs:
targetType: 'inline'
script: |
$BRANCH = '$(Build.SourceBranchName)'
Write-Host "##vso[task.setvariable variable=branch_name]$BRANCH"
displayName: Save branch name to local variable.
- task: Bash@3
# Prints out the branch name, for debugging purposes
inputs:
targetType: 'inline'
script: echo Current branch name => $(branch_name)
displayName: Print out the branch name.
- task: Bash@3
# Azure pipelines cannot pass variables between pipelines, but it can pass files, so we
# pass the branch name (ex: rel_2022_05) as a string in a file.
# This is used in the release pipeline, so we create it here.
inputs:
targetType: 'inline'
script: |
echo $(branch_name)
BRANCH=$(branch_name)
echo "$BRANCH" > $(System.DefaultWorkingDirectory)/BRANCH
displayName: Save branch name to file.
- task: CopyFiles@2
# Copies the BRANCH file containing the pom version to the staging directory
inputs:
SourceFolder: '$(System.Defaultworkingdirectory)'
Contents: "$(System.DefaultWorkingDirectory)/BRANCH"
TargetFolder: '$(build.artifactstagingdirectory)'
displayName: Copy the branch name file to the artifact staging directory.
# Publishes the files we've moved into the staging directory, so they can be accessed by the
# release pipeline.
- task: PublishBuildArtifacts@1
displayName: 'Publish Build Artifacts'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
- job: build_and_publish_artifacts
# We're going to do a full build, including all unit and intergration tests. We do this here, before any
# actual release pipeline kicks off, and we don't do it again at any point in the release pipeline. The assumption here
# is that once we pull the code, it won't change again on this branch until the release is complete. We
# want to fail fast if there is an issue, and avoid running the tests more than once so it doesn't take all day.
timeoutInMinutes: 360
dependsOn: ['get_release_version', 'get_branch_id', 'check_release_notes', 'check_all_dependencies_are_releases']
variables:
version_from_pom: $[ dependencies.get_release_version.outputs['setOutput.version_from_pom'] ]
steps:
# Runs 'mvn clean package'
- task: Maven@4
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx768m -Dmaven.resolver.transport=wagon'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.11'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'
# Publishes the built Validator jar to build artifacts. Primarily for testing and debugging builds.
- task: PublishPipelineArtifact@1
displayName: 'Publish Validator jar'
inputs:
targetPath: "$(System.DefaultWorkingDirectory)/org.hl7.fhir.validation/target/org.hl7.fhir.validation-$(version_from_pom).jar"
artifactName: Validator
# Publishes the files we've moved into the staging directory, so they can be accessed by the
# release pipeline.
- task: PublishBuildArtifacts@1
displayName: 'Publish Build Artifacts'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'