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 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)'