123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- # Gradle
- # Build your Java project and run tests with Gradle using a Gradle wrapper script.
- # Add steps that analyze code, save build artifacts, deploy, and more:
- # https://docs.microsoft.com/azure/devops/pipelines/languages/java
- pool:
- vmImage: 'Ubuntu-latest'
- variables:
- artifactName: 'Release'
- GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
- SKIP_BUILD: $[contains(variables['Build.SourceBranch'], 'refs/heads/no-build/')]
- ${{ if not(contains(variables['Build.SourceBranch'], 'refs/heads/no-build/')) }}:
- revision: $[counter('release-number', 0)]
- steps:
- - powershell: |
- $json = [Ordered]@{
- title = "Maven Publish Failed"
- url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)Twilight%20Forest/_build/results?buildId=$($Env:BUILD_BUILDID)&view=results"
- color = 16733440
- fields = (
- [Ordered]@{
- name = "Author"
- value = "$($env:BUILD_SOURCEVERSIONAUTHOR)"
- },
- [Ordered]@{
- name = "Commit"
- value = "[$(($env:BUILD_SOURCEVERSION).Substring(0, 7))]($($env:BUILD_REPOSITORY_URI)/commit/$($env:BUILD_SOURCEVERSION))"
- }
- )
- }
- Write-Host "##vso[task.setvariable variable=DiscordMessageMavenFailed]$($json | ConvertTo-Json -Compress)"
- displayName: Format failed maven publish discord message
- condition: always()
- env:
- SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- - task: Cache@2
- inputs:
- key: 'gradle | "$(Agent.OS)" | build.gradle | settings.gradle | gradle.properties | src/main/resources/META-INF/accesstransformer.cfg'
- path: $(GRADLE_USER_HOME)
- displayName: Restore Gradle Cache
- condition: eq(variables.SKIP_BUILD, 'false')
- - task: Cache@2
- inputs:
- key: 'gradleLocal | "$(Agent.OS)" | build.gradle | settings.gradle | gradle.properties | src/main/resources/META-INF/accesstransformer.cfg'
- path: .gradle
- displayName: Restore Project Level Gradle Cache
- condition: eq(variables.SKIP_BUILD, 'false')
- - task: Cache@2
- inputs:
- key: 'gradleBuildTmpLocal | "$(Agent.OS)" | build.gradle | settings.gradle | gradle.properties | src/main/resources/META-INF/accesstransformer.cfg'
- path: build/tmp
- displayName: Restore Project Level build/tmp Cache
- condition: eq(variables.SKIP_BUILD, 'false')
- - powershell: |
- (Get-Content ./gradle.properties).Split([Environment]::NewLine) | % {
- $kvp = $_.Split('=')
- if ($kvp.Count -gt 1) {
- $key = $kvp[0] -replace "\.", "_";
- $value = $kvp[1];
- Write-Host "##vso[task.setvariable variable=javaprops_$key]$value"
- }
- }
- displayName: Create Azure DevOps variables from gradle properties file
- condition: eq(variables.SKIP_BUILD, 'false')
- - task: Gradle@2
- displayName: Create Release Build
- inputs:
- workingDirectory: ''
- options: '--build-cache --max-workers=1 -PCIRevision=$(javaprops_mod_version).$(revision) -PCIType=RELEASE'
- gradleWrapperFile: 'gradlew'
- gradleOptions: '-Xmx3072m'
- javaHomeOption: 'JDKVersion'
- jdkVersionOption: '21'
- jdkArchitectureOption: 'x64'
- publishJUnitResults: false
- testResultsFiles: '**/TEST-*.xml'
- tasks: 'build'
- condition: eq(variables.SKIP_BUILD, 'false')
- - task: CopyFiles@2
- displayName: Copy Release build to artifact staging
- inputs:
- sourceFolder: './build/libs/'
- contents: 'twilightforest-*-universal.jar'
- targetFolder: $(build.artifactStagingDirectory)
- condition: and(and(succeeded(), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_BUILD, 'false'))
- - task: PublishPipelineArtifact@1
- displayName: 'Publish Artifacts'
- condition: and(and(succeeded(), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_BUILD, 'false'))
- inputs:
- targetPath: '$(Build.ArtifactStagingDirectory)'
- artifact: '$(artifactName)'
- publishLocation: 'pipeline'
- - powershell: |
- $rawpath = "pipelineartifact://teamtwilight/projectId/1ef09d39-06cf-41fa-ad98-7258b70c2a72/buildId/$($Env:BUILD_BUILDID)/artifactName/Release"
- $path = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($rawpath))
- $jar = "twilightforest-$($env:JAVAPROPS_MINECRAFT_VERSION)-$($env:JAVAPROPS_MOD_VERSION).$($env:REVISION)-universal.jar"
- $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)"
- $jobResult = (Get-Culture).TextInfo.ToTitleCase(${env:agent.jobstatus})
- $Colour = 65280
- if ($jobResult -ne "Succeeded") {
- $Colour = 16711680
- }
- Write-Host "##vso[task.setvariable variable=DiscordMessageColour]$Colour"
- $json = [Ordered]@{
- title = "Build $jobResult"
- url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)Twilight%20Forest/_build/results?buildId=$($Env:BUILD_BUILDID)&view=results"
- color = $Colour
- fields = (
- [Ordered]@{
- name = "Author"
- value = "$($env:BUILD_SOURCEVERSIONAUTHOR)"
- },
- [Ordered]@{
- name = "Minecraft Version"
- value = "$($env:JAVAPROPS_MINECRAFT_VERSION)"
- },
- [Ordered]@{
- name = "Mod Version"
- value = "$($env:JAVAPROPS_MOD_VERSION).$($env:REVISION)"
- },
- [Ordered]@{
- name = "NeoForge Version"
- value = "$($env:JAVAPROPS_NEO_VERSION)"
- },
- [Ordered]@{
- name = "Commit"
- value = "[$(($env:BUILD_SOURCEVERSION).Substring(0, 7))]($($env:BUILD_REPOSITORY_URI)/commit/$($env:BUILD_SOURCEVERSION))"
- }
- )
- }
- if ($jobResult -eq "Succeeded") {
- $json["fields"] += [Ordered]@{
- name = "Download"
- value = "[$($downloadUrl.Split("subPath=%2F")[1])]($downloadUrl)"
- }
- }
- Write-Host "##vso[task.setvariable variable=DiscordMessage]$($json | ConvertTo-Json -Compress)"
- displayName: Format build status discord message
- condition: eq(variables.SKIP_BUILD, 'false')
- env:
- SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- - task: ado-discord-webhook@1
- displayName: Announce Build to discord
- inputs:
- channelId: '$(DiscordChannelID)'
- webhookKey: '$(DiscordChannelSecret)'
- messageType: 'embeds'
- embeds: |
- [$(DiscordMessage)]
- condition: and(eq(variables.SKIP_BUILD, 'false'), eq(variables['CreateArtifacts'], 'True'))
- - task: Gradle@2
- displayName: Publish to Maven
- inputs:
- workingDirectory: ''
- options: '-PCIRevision=$(javaprops_mod_version).$(revision) -PCIType=RELEASE'
- gradleWrapperFile: 'gradlew'
- gradleOptions: '-Xmx3072m'
- javaHomeOption: 'JDKVersion'
- jdkVersionOption: '21'
- jdkArchitectureOption: 'x64'
- publishJUnitResults: false
- testResultsFiles: '**/TEST-*.xml'
- tasks: 'publish'
- condition: and(and(succeeded(), eq(variables['CreateArtifacts'], 'True')), eq(variables.SKIP_BUILD, 'false'))
- env:
- ARTIFACTORY_USER: $(Artifactory.User)
- ARTIFACTORY_PASS: $(Artifactory.Password)
- - task: ado-discord-webhook@1
- displayName: Announce Failed Maven Publish to discord
- inputs:
- channelId: '$(DiscordChannelID)'
- webhookKey: '$(DiscordChannelSecret)'
- messageType: 'embeds'
- embeds: |
- [$(DiscordMessageMavenFailed)]
- condition: failed()
- - script: |
- # stop the Gradle daemon to ensure no files are left open (impacting the save cache operation later)
- ./gradlew --stop
- displayName: Kill Daemon
- condition: eq(variables.SKIP_BUILD, 'false')
|