From 83faa98df955028db873bc41196aac35e5853ff7 Mon Sep 17 00:00:00 2001 From: Marc Hermans Date: Tue, 1 Feb 2022 19:32:28 +0100 Subject: [PATCH] Implement teamcity project building on 1.16.z branch (#8440) --- .teamcity/pom.xml | 104 +++++++++++++++++++++ .teamcity/settings.kts | 113 +++++++++++++++++++++++ build.gradle | 52 +++++------ gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 243 insertions(+), 28 deletions(-) create mode 100644 .teamcity/pom.xml create mode 100644 .teamcity/settings.kts diff --git a/.teamcity/pom.xml b/.teamcity/pom.xml new file mode 100644 index 0000000000..a8a6f382b4 --- /dev/null +++ b/.teamcity/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + MinecraftForge_Forge Config DSL Script + MinecraftForge_Forge + MinecraftForge_Forge_dsl + 1.0-SNAPSHOT + + + org.jetbrains.teamcity + configs-dsl-kotlin-parent + 1.0-SNAPSHOT + + + + + jetbrains-all + https://download.jetbrains.com/teamcity-repository + + true + + + + teamcity-server + https://teamcity.minecraftforge.net/app/dsl-plugins-repository + + true + + + + + + + JetBrains + https://download.jetbrains.com/teamcity-repository + + + + + ${basedir} + + + kotlin-maven-plugin + org.jetbrains.kotlin + ${kotlin.version} + + + + + compile + process-sources + + compile + + + + test-compile + process-test-sources + + test-compile + + + + + + org.jetbrains.teamcity + teamcity-configs-maven-plugin + ${teamcity.dsl.version} + + kotlin + target/generated-configs + + + + + + + + org.jetbrains.teamcity + configs-dsl-kotlin + ${teamcity.dsl.version} + compile + + + org.jetbrains.teamcity + configs-dsl-kotlin-plugins + 1.0-SNAPSHOT + pom + compile + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + compile + + + org.jetbrains.kotlin + kotlin-script-runtime + ${kotlin.version} + compile + + + \ No newline at end of file diff --git a/.teamcity/settings.kts b/.teamcity/settings.kts new file mode 100644 index 0000000000..7b85a9ec5c --- /dev/null +++ b/.teamcity/settings.kts @@ -0,0 +1,113 @@ +import jetbrains.buildServer.configs.kotlin.v2019_2.* +import jetbrains.buildServer.configs.kotlin.v2019_2.projectFeatures.githubIssues + +/* +The settings script is an entry point for defining a TeamCity +project hierarchy. The script should contain a single call to the +project() function with a Project instance or an init function as +an argument. + +VcsRoots, BuildTypes, Templates, and subprojects can be +registered inside the project using the vcsRoot(), buildType(), +template(), and subProject() methods respectively. + +To debug settings scripts in command-line, run the + + mvnDebug org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate + +command and attach your debugger to the port 8000. + +To debug in IntelliJ Idea, open the 'Maven Projects' tool window (View +-> Tool Windows -> Maven Projects), find the generate task node +(Plugins -> teamcity-configs -> teamcity-configs:generate), the +'Debug' option is available in the context menu for the task. +*/ + +version = "2021.2" + +project { + + buildType(Build) + buildType(BuildSecondaryBranches) + buildType(PullRequests) + + params { + text("docker_jdk_version", "8", label = "Gradle version", description = "The version of the JDK to use during execution of tasks in a JDK.", display = ParameterDisplay.HIDDEN, allowEmpty = false) + text("docker_gradle_version", "7.3.3", label = "Gradle version", description = "The version of Gradle to use during execution of Gradle tasks.", display = ParameterDisplay.HIDDEN, allowEmpty = false) + text("git_main_branch", "1.18.x", label = "Git Main Branch", description = "The git main or default branch to use in VCS operations.", display = ParameterDisplay.HIDDEN, allowEmpty = false) + text("git_branch_spec", """ + +:refs/heads/(main*) + +:refs/heads/(master*) + +:refs/heads/(develop|release|staging|main|master) + +:refs/heads/(1.*) + """.trimIndent(), label = "The branch specification of the repository", description = "By default all main branches are build by the configuration. Modify this value to adapt the branches build.", display = ParameterDisplay.HIDDEN, allowEmpty = true) + text("github_repository_name", "MinecraftForge", label = "The github repository name. Used to connect to it in VCS Roots.", description = "This is the repository slug on github. So for example `MinecraftForge` or `MinecraftForge`. It is interpolated into the global VCS Roots.", display = ParameterDisplay.HIDDEN, allowEmpty = false) + text("env.PUBLISHED_JAVA_ARTIFACT_ID", "forge", label = "Published artifact id", description = "The maven coordinate artifact id that has been published by this build. Can not be empty.", allowEmpty = false) + text("env.PUBLISHED_JAVA_GROUP", "net.minecraftforge", label = "Published group", description = "The maven coordinate group that has been published by this build. Can not be empty.", allowEmpty = false) + //These are references and not actually keys + password("env.CROWDIN_KEY", "credentialsJSON:a3102dbe-805d-4177-9f54-3d2c2eb08fd5", display = ParameterDisplay.HIDDEN) + password("env.KEYSTORE_URL", "credentialsJSON:a7ae1c82-8058-4061-8d12-7f6bc2618d2e", display = ParameterDisplay.HIDDEN) + password("env.KEYSTORE_PASSWORD", "credentialsJSON:d7b964e3-a1fd-47a8-b892-6f601fe47479", display = ParameterDisplay.HIDDEN) + text("additional_publishing_gradle_parameters", "-PcrowdinKey=%env.CROWDIN_KEY% -PkeystoreKeyPass=%env.KEYSTORE_PASSWORD% -PkeystoreStorePass=%env.KEYSTORE_PASSWORD% -Pkeystore=%env.KEYSTORE_URL%", label = "Additional gradle parameters for publish", description = "Contains the additional gradle parameters used during publishing.", display = ParameterDisplay.HIDDEN, allowEmpty = true) + + checkbox("should_execute_build", "false", label = "Should build", description = "Indicates if the build task should be executed.", display = ParameterDisplay.HIDDEN, + checked = "true", unchecked = "false") + checkbox("should_execute_test", "false", label = "Should build", description = "Indicates if the build task should be executed.", display = ParameterDisplay.HIDDEN, + checked = "true", unchecked = "false") + } + + features { + githubIssues { + id = "MinecraftForge_MinecraftForge__IssueTracker" + displayName = "MinecraftForge/MinecraftForge" + repositoryURL = "https://github.com/MinecraftForge/MinecraftForge" + } + } +} + +object Build : BuildType({ + templates(AbsoluteId("MinecraftForge_SetupGradleUtilsCiEnvironmen"), AbsoluteId("MinecraftForge_BuildWithDiscordNotifications"), AbsoluteId("MinecraftForge_BuildMainBranches"), AbsoluteId("MinecraftForge_SetupProjectUsingGradle"), AbsoluteId("MinecraftForge_BuildUsingGradle"), AbsoluteId("MinecraftForge_PublishProjectUsingGradle"), AbsoluteId("MinecraftForge_TriggersStaticFilesWebpageGenerator")) + id("MinecraftForge_MinecraftForge__Build") + name = "Build" + description = "Builds and Publishes the main branches of the project." +}) + +object BuildSecondaryBranches : BuildType({ + templates(AbsoluteId("MinecraftForge_ExcludesBuildingDefaultBranch"), AbsoluteId("MinecraftForge_SetupGradleUtilsCiEnvironmen"), AbsoluteId("MinecraftForge_BuildWithDiscordNotifications"), AbsoluteId("MinecraftForge_BuildMainBranches"), AbsoluteId("MinecraftForge_SetupProjectUsingGradle"), AbsoluteId("MinecraftForge_BuildUsingGradle")) + id("MinecraftForge_MinecraftForge__BuildSecondaryBranches") + name = "Build - Secondary Branches" + description = "Builds and Publishes the secondary branches of the project." + params { + text("git_branch_spec", """ + +:refs/heads/(*) + -:refs/heads/noci* + """.trimIndent(), label = "The branch specification of the repository", description = "By default all main branches are build by the configuration. Modify this value to adapt the branches build.", display = ParameterDisplay.HIDDEN, allowEmpty = true) + } + vcs { + branchFilter = """ + +:* + -:1.* + -: + """.trimIndent() + } +}) + +object PullRequests : BuildType({ + templates(AbsoluteId("MinecraftForge_BuildPullRequests"), AbsoluteId("MinecraftForge_SetupGradleUtilsCiEnvironmen"), AbsoluteId("MinecraftForge_BuildWithDiscordNotifications"), AbsoluteId("MinecraftForge_SetupProjectUsingGradle"), AbsoluteId("MinecraftForge_BuildUsingGradle")) + id("MinecraftForge_MinecraftForge__PullRequests") + name = "Pull Requests" + description = "Builds pull requests for the project" + + params { + checkbox("should_execute_build", "true", label = "Should build", description = "Indicates if the build task should be executed.", display = ParameterDisplay.HIDDEN, + checked = "true", unchecked = "false") + text( + "gradle_build_task", + "assemble", + label = "Gradle build task to execute during build", + description = "Determines the build task that is executed to build the project.", + display = ParameterDisplay.HIDDEN, + allowEmpty = false + ) + } +}) diff --git a/build.gradle b/build.gradle index 53d96856c8..1854ec6283 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ import org.gradle.plugins.ide.eclipse.model.SourceFolder plugins { id 'org.cadixdev.licenser' version '0.6.1' id 'com.github.ben-manes.versions' version '0.36.0' - id 'net.minecraftforge.gradleutils' version '1.+' + id 'net.minecraftforge.gradleutils' version '2.+' id 'eclipse' } @@ -48,8 +48,11 @@ ext { MC_VERSION = '1.16.5' MCP_VERSION = '20210115.111550' SPI_VERSION = '3.2.0' + MIN_TAG_FOR_CHANGELOG = "36.0" } +version = gradleutils.getMCTagOffsetBranchVersion(MC_VERSION) + project(':mcp') { apply plugin: 'net.minecraftforge.gradle.mcp' repositories { @@ -450,13 +453,10 @@ project(':forge') { def extraTxts = [ rootProject.file('CREDITS.txt'), - rootProject.file('LICENSE.txt') + rootProject.file('LICENSE.txt'), + rootProject.file('build/changelog.txt'), ] - - def changelog = rootProject.file('build/changelog.txt') - if (changelog.exists()) - extraTxts += changelog - + task crowdin(type: Crowdin) { key = project.hasProperty('crowdinKey') ? project.crowdinKey : null //TODO: Merge our english.json? @@ -804,6 +804,10 @@ project(':forge') { } } } + + afterEvaluate { + dependsOn project.rootProject.tasks.createChangelog + } } task launcherJar(type: Jar) { @@ -872,6 +876,10 @@ project(':forge') { duplicatesStrategy = 'exclude' } } + + afterEvaluate { + dependsOn project.rootProject.tasks.createChangelog + } } [universalJar, launcherJar, installerJar].each { t -> @@ -923,6 +931,10 @@ project(':forge') { rename 'gitignore\\.txt', '.gitignore' rename 'gitattributes\\.txt', '.gitattributes' } + + afterEvaluate { + dependsOn project.rootProject.tasks.createChangelog + } } userdevConfig { @@ -995,7 +1007,7 @@ project(':forge') { } } } - + license { header = file("$rootDir/LICENSE-header.txt") @@ -1075,11 +1087,6 @@ project(':forge') { publications { mavenJava(MavenPublication) { artifact universalJar - if (changelog.exists()) { - artifact(changelog) { - classifier = 'changelog' - } - } artifact installerJar //TODO: installer-win artifact makeMdk @@ -1114,20 +1121,7 @@ project(':forge') { } } repositories { - maven { - if (System.env.MAVEN_USER) { - url "https://maven.minecraftforge.net/releases/" - authentication { - basic(BasicAuthentication) - } - credentials { - username = System.env.MAVEN_USER ?: 'not' - password = System.env.MAVEN_PASSWORD ?: 'set' - } - } else { - url 'file://' + rootProject.file('repo').getAbsolutePath() - } - } + maven gradleutils.getPublishingForgeMaven() } } } @@ -1137,3 +1131,7 @@ task setup() { dependsOn ':clean:extractMapped' dependsOn ':forge:extractMapped' //These must be strings so that we can do lazy resolution. Else we need evaluationDependsOnChildren above } + +changelog { + fromTag MIN_TAG_FOR_CHANGELOG +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc3c1..2e6e5897b5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists