177 lines
8.3 KiB
YAML
177 lines
8.3 KiB
YAML
# HAPI FHIR Release Pipeline
|
|
|
|
variables:
|
|
MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository
|
|
MAVEN_OPTS: ''
|
|
NEW_RELEASE_VERSION:
|
|
BRANCH:
|
|
|
|
trigger: none
|
|
pr: none
|
|
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
|
|
jobs:
|
|
- 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_from_pom=$pomXml.project.version
|
|
Write-Host "##vso[task.setvariable variable=version_from_pom]$version_from_pom"
|
|
displayName: Save pom file version to local variable.
|
|
- task: Bash@3
|
|
# Prints out the pom version, for debugging purposes
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: echo Pulled version from pom.xml => $(version_from_pom)
|
|
displayName: Print out pom version.
|
|
- task: Bash@3
|
|
# Determines the new release tag label. For existing release branches, this is straightforward,
|
|
# as we just take the current project pom version (ie. 5.7.1). However, for the current master
|
|
# branch we often have a branch name like "6.1.5-PRE2-SNAPSHOT", in which case, we need to normalize
|
|
# the release label from that project version to get the "maj.min.patch" version we will release.
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: |
|
|
echo Current project version set as $version_from_pom
|
|
if [[ "$(Build.SourceBranchName)" == "master" ]];
|
|
then
|
|
echo On master branch. We need to remove PRE tag from pom version.
|
|
new_release_version="${version_from_pom%-PRE*}"
|
|
else
|
|
new_release_version=$(version_from_pom)
|
|
fi
|
|
echo "##vso[task.setvariable variable=NEW_RELEASE_VERSION]$new_release_version"
|
|
echo release HAPI version $new_release_version
|
|
displayName: Determine new release version.
|
|
- task: Bash@3
|
|
# Here we check if the tag we plan to release is already tagged in git, if it is we bomb out
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: |
|
|
tag_label="v${NEW_RELEASE_VERSION}"
|
|
echo verifying that release version $tag_label does not already exist in git project...
|
|
if git rev-list $tag_label >/dev/null
|
|
then
|
|
echo tag $tag_label already exists in project, please update you pom version and try again
|
|
exit 1
|
|
else
|
|
echo 'tag does not already exist in project, proceeding...'
|
|
fi
|
|
displayName: Check if deployment already exists.
|
|
- task: Bash@3
|
|
# Azure pipelines cannot pass variables between pipelines, but it can pass files, so we
|
|
# pass the determined build tag (ex: 5.7.4) as a string in a file.
|
|
# This is used in the release pipeline, so we create it here.
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: |
|
|
echo $(NEW_RELEASE_VERSION)
|
|
echo "$(NEW_RELEASE_VERSION)" > $(System.DefaultWorkingDirectory)/NEW_RELEASE_VERSION
|
|
displayName: Save release label to file.
|
|
- task: CopyFiles@2
|
|
# Copies the NEW_RELEASE_VERSION file containing the pom version to the staging directory
|
|
inputs:
|
|
SourceFolder: '$(System.Defaultworkingdirectory)'
|
|
Contents: "$(System.DefaultWorkingDirectory)/NEW_RELEASE_VERSION"
|
|
TargetFolder: '$(build.artifactstagingdirectory)'
|
|
displayName: Copy the version file to the artifact staging directory.
|
|
- task: PublishBuildArtifacts@1
|
|
# Publishes the files we've moved into the staging directory, so they can be accessed by the
|
|
# release pipeline.
|
|
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_name = '$(Build.SourceBranchName)'
|
|
Write-Host "##vso[task.setvariable variable=branch_name]$branch_name"
|
|
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.
|
|
- task: PublishBuildArtifacts@1
|
|
# Publishes the files we've moved into the staging directory, so they can be accessed by the
|
|
# release pipeline.
|
|
displayName: 'Publish Build Artifacts'
|
|
inputs:
|
|
PathtoPublish: '$(build.artifactstagingdirectory)'
|
|
|
|
- job: buildaroni
|
|
# We're going to do a full build, including all unit and intergration tests. We do this here, before any
|
|
# actual release pipeilne 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']
|
|
container: maven:3.8-openjdk-17
|
|
steps:
|
|
- task: DockerInstaller@0.209.00
|
|
displayName: Docker Installer
|
|
inputs:
|
|
dockerVersion: 17.09.0-ce
|
|
releaseType: stable
|
|
- task: Maven@3
|
|
env:
|
|
JAVA_HOME_11_X64: /usr/java/openjdk-17
|
|
displayName: Checkstyle Build
|
|
inputs:
|
|
mavenPomFile: 'hapi-fhir-checkstyle/pom.xml'
|
|
goals: 'clean install'
|
|
options: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'
|
|
jdkVersionOption: 1.11
|
|
- task: Bash@3
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: mkdir -p $(MAVEN_CACHE_FOLDER); pwd; ls -al $(MAVEN_CACHE_FOLDER)
|
|
- task: Maven@3
|
|
env:
|
|
JAVA_HOME_11_X64: /usr/java/openjdk-17
|
|
inputs:
|
|
goals: 'clean install'
|
|
# These are Maven CLI options (and show up in the build logs) - "-nsu"=Don't update snapshots. We can remove this when Maven OSS is more healthy
|
|
options: '-P JACOCO,CI,ERRORPRONE -e -B -Dmaven.repo.local=$(MAVEN_CACHE_FOLDER) -Dmaven.wagon.http.pool=false -Dhttp.keepAlive=false -Dstyle.color=always -Djansi.force=true'
|
|
# These are JVM options (and don't show up in the build logs)
|
|
mavenOptions: '-Xmx1024m $(MAVEN_OPTS) -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS -Duser.timezone=America/Toronto'
|
|
jdkVersionOption: 1.11
|
|
|
|
|
|
|
|
|