azure-pipelines.yml 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. # Gradle
  2. # Build your Java project and run tests with Gradle using a Gradle wrapper script.
  3. # Add steps that analyze code, save build artifacts, deploy, and more:
  4. # https://docs.microsoft.com/azure/devops/pipelines/languages/java
  5. pool:
  6. vmImage: 'Ubuntu-latest'
  7. variables:
  8. artifactName: 'Release'
  9. GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
  10. SKIP_BUILD: $[contains(variables['Build.SourceBranch'], 'refs/heads/no-build/')]
  11. SKIP_DISCORD: 'true'
  12. ${{ if not(contains(variables['Build.SourceBranch'], 'refs/heads/no-build/')) }}:
  13. revision: $[counter('release-number', 0)]
  14. steps:
  15. - powershell: |
  16. $json = [Ordered]@{
  17. title = "Maven Publish Failed"
  18. url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)Twilight%20Forest/_build/results?buildId=$($Env:BUILD_BUILDID)&view=results"
  19. color = 16733440
  20. fields = (
  21. [Ordered]@{
  22. name = "Author"
  23. value = "$($env:BUILD_SOURCEVERSIONAUTHOR)"
  24. },
  25. [Ordered]@{
  26. name = "Commit"
  27. value = "[$(($env:BUILD_SOURCEVERSION).Substring(0, 7))]($($env:BUILD_REPOSITORY_URI)/commit/$($env:BUILD_SOURCEVERSION))"
  28. }
  29. )
  30. }
  31. Write-Host "##vso[task.setvariable variable=DiscordMessageMavenFailed]$($json | ConvertTo-Json -Compress)"
  32. displayName: Format failed maven publish discord message
  33. condition: always()
  34. env:
  35. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  36. - task: Cache@2
  37. inputs:
  38. key: 'gradle | "$(Agent.OS)" | build.gradle | settings.gradle | gradle.properties | src/main/resources/META-INF/accesstransformer.cfg'
  39. path: $(GRADLE_USER_HOME)
  40. displayName: Restore Gradle Cache
  41. condition: eq(variables.SKIP_BUILD, 'false')
  42. - task: Cache@2
  43. inputs:
  44. key: 'gradleLocal | "$(Agent.OS)" | build.gradle | settings.gradle | gradle.properties | src/main/resources/META-INF/accesstransformer.cfg'
  45. path: .gradle
  46. displayName: Restore Project Level Gradle Cache
  47. condition: eq(variables.SKIP_BUILD, 'false')
  48. - task: Cache@2
  49. inputs:
  50. key: 'gradleBuildTmpLocal | "$(Agent.OS)" | build.gradle | settings.gradle | gradle.properties | src/main/resources/META-INF/accesstransformer.cfg'
  51. path: build/tmp
  52. displayName: Restore Project Level build/tmp Cache
  53. condition: eq(variables.SKIP_BUILD, 'false')
  54. - powershell: |
  55. (Get-Content ./gradle.properties).Split([Environment]::NewLine) | % {
  56. $kvp = $_.Split('=')
  57. if ($kvp.Count -gt 1) {
  58. $key = $kvp[0] -replace "\.", "_";
  59. $value = $kvp[1];
  60. Write-Host "##vso[task.setvariable variable=javaprops_$key]$value"
  61. }
  62. }
  63. displayName: Create Azure DevOps variables from gradle properties file
  64. condition: eq(variables.SKIP_BUILD, 'false')
  65. - task: Gradle@3
  66. displayName: Create Release Build
  67. inputs:
  68. workingDirectory: ''
  69. options: '--build-cache --max-workers=1 -PCIRevision=$(javaprops_mod_version).$(revision) -PCIType=RELEASE'
  70. gradleWrapperFile: 'gradlew'
  71. gradleOptions: '-Xmx3072m'
  72. javaHomeOption: 'JDKVersion'
  73. jdkVersionOption: '21'
  74. jdkArchitectureOption: 'x64'
  75. publishJUnitResults: false
  76. testResultsFiles: '**/TEST-*.xml'
  77. tasks: 'build'
  78. condition: eq(variables.SKIP_BUILD, 'false')
  79. - task: CopyFiles@2
  80. displayName: Copy Release build to artifact staging
  81. inputs:
  82. sourceFolder: './build/libs/'
  83. contents: 'twilightforest-*-universal.jar'
  84. targetFolder: $(build.artifactStagingDirectory)
  85. condition: and(and(succeeded(), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_BUILD, 'false'))
  86. - task: PublishPipelineArtifact@1
  87. displayName: 'Publish Artifacts'
  88. condition: and(and(succeeded(), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_BUILD, 'false'))
  89. inputs:
  90. targetPath: '$(Build.ArtifactStagingDirectory)'
  91. artifact: '$(artifactName)'
  92. publishLocation: 'pipeline'
  93. - powershell: |
  94. $rawpath = "pipelineartifact://teamtwilight/projectId/1ef09d39-06cf-41fa-ad98-7258b70c2a72/buildId/$($Env:BUILD_BUILDID)/artifactName/Release"
  95. $path = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($rawpath))
  96. $jar = "twilightforest-$($env:JAVAPROPS_MINECRAFT_VERSION)-$($env:JAVAPROPS_MOD_VERSION).$($env:REVISION)-universal.jar"
  97. $downloadUrl = "https://artprodcus3.artifacts.visualstudio.com/Abaabfa6c-deea-4587-ba05-c308c2597b7a/1ef09d39-06cf-41fa-ad98-7258b70c2a72/_apis/artifact/$($path)0/content?format=file&subPath=%2F$($jar)"
  98. $jobResult = (Get-Culture).TextInfo.ToTitleCase(${env:agent.jobstatus})
  99. $Colour = 65280
  100. if ($jobResult -ne "Succeeded") {
  101. $Colour = 16711680
  102. }
  103. Write-Host "##vso[task.setvariable variable=DiscordMessageColour]$Colour"
  104. $json = [Ordered]@{
  105. title = "Build $jobResult"
  106. url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)Twilight%20Forest/_build/results?buildId=$($Env:BUILD_BUILDID)&view=results"
  107. color = $Colour
  108. fields = (
  109. [Ordered]@{
  110. name = "Author"
  111. value = "$($env:BUILD_SOURCEVERSIONAUTHOR)"
  112. },
  113. [Ordered]@{
  114. name = "Minecraft Version"
  115. value = "$($env:JAVAPROPS_MINECRAFT_VERSION)"
  116. },
  117. [Ordered]@{
  118. name = "Mod Version"
  119. value = "$($env:JAVAPROPS_MOD_VERSION).$($env:REVISION)"
  120. },
  121. [Ordered]@{
  122. name = "NeoForge Version"
  123. value = "$($env:JAVAPROPS_NEO_VERSION)"
  124. },
  125. [Ordered]@{
  126. name = "Commit"
  127. value = "[$(($env:BUILD_SOURCEVERSION).Substring(0, 7))]($($env:BUILD_REPOSITORY_URI)/commit/$($env:BUILD_SOURCEVERSION))"
  128. }
  129. )
  130. }
  131. if ($jobResult -eq "Succeeded") {
  132. $json["fields"] += [Ordered]@{
  133. name = "Download"
  134. value = "[$($downloadUrl.Split("subPath=%2F")[1])]($downloadUrl)"
  135. }
  136. }
  137. Write-Host "##vso[task.setvariable variable=DiscordMessage]$($json | ConvertTo-Json -Compress)"
  138. displayName: Format build status discord message
  139. condition: eq(variables.SKIP_BUILD, 'false')
  140. env:
  141. SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  142. - task: ado-discord-webhook@1
  143. displayName: Announce Build to discord
  144. inputs:
  145. channelId: '$(DiscordChannelID)'
  146. webhookKey: '$(DiscordChannelSecret)'
  147. messageType: 'embeds'
  148. embeds: |
  149. [$(DiscordMessage)]
  150. condition: and(and(eq(variables.SKIP_BUILD, 'false'), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_DISCORD, 'false'))
  151. - powershell: |
  152. Write-Host "##vso[task.setvariable variable=RunMavenPublishTask]True"
  153. displayName: Allow Maven Publish tasks
  154. condition: and(and(succeeded(), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_BUILD, 'false'))
  155. - task: Gradle@3
  156. displayName: Publish to Maven
  157. inputs:
  158. workingDirectory: ''
  159. options: '-PCIRevision=$(javaprops_mod_version).$(revision) -PCIType=RELEASE'
  160. gradleWrapperFile: 'gradlew'
  161. gradleOptions: '-Xmx3072m'
  162. javaHomeOption: 'JDKVersion'
  163. jdkVersionOption: '21'
  164. jdkArchitectureOption: 'x64'
  165. publishJUnitResults: false
  166. testResultsFiles: '**/TEST-*.xml'
  167. tasks: 'publish'
  168. condition: and(and(succeeded(), eq(variables['RunMavenPublishTask'], 'True')), eq(variables.SKIP_BUILD, 'false'))
  169. env:
  170. MAVEN_USER: $(Artifactory.User)
  171. MAVEN_PASS: $(Artifactory.Password)
  172. - task: ado-discord-webhook@1
  173. displayName: Announce Failed Maven Publish to discord
  174. inputs:
  175. channelId: '$(DiscordChannelID)'
  176. webhookKey: '$(DiscordChannelSecret)'
  177. messageType: 'embeds'
  178. embeds: |
  179. [$(DiscordMessageMavenFailed)]
  180. condition: and(and(failed(), eq(variables['RunMavenPublishTask'], 'True')), eq(variables.SKIP_BUILD, 'false'))
  181. - script: |
  182. # stop the Gradle daemon to ensure no files are left open (impacting the save cache operation later)
  183. ./gradlew --stop
  184. displayName: Kill Daemon
  185. condition: eq(variables.SKIP_BUILD, 'false')