-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
1 changed file
with
180 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,180 @@ | ||
# HAPI FHIR Build Pipeline | ||
|
||
variables: | ||
MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository | ||
MAVEN_OPTS: '' | ||
NEW_RELEASE_VERSION: | ||
BRANCH: | ||
|
||
trigger: 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: Cache@2 | ||
inputs: | ||
key: 'maven | "$(Agent.OS)" | ./pom.xml' | ||
path: $(MAVEN_CACHE_FOLDER) | ||
- task: DockerInstaller@0 | ||
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 ALLMODULES,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 -DskipTests' | ||
# 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 | ||
|
||
|
||
|
||
|