diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000000..0778820d98 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,28 @@ +name: Publish + +on: + push: + branches: [ '1.14.x' ] + +permissions: + contents: read + +jobs: + build: + uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@main + with: + java: 8 + gradle_tasks: 'setup build publish' + artifact_name: 'forge' + secrets: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }} + PROMOTE_ARTIFACT_USERNAME: ${{ secrets.PROMOTE_ARTIFACT_USERNAME }} + PROMOTE_ARTIFACT_PASSWORD: ${{ secrets.PROMOTE_ARTIFACT_PASSWORD }} + MAVEN_USER: ${{ secrets.MAVEN_USER }} + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + # Unused for now until we upgrade gradle + # SIGN_KEY_ALIAS: ${{ secrets.SIGN_KEY_ALIAS }} + # SIGN_KEY_PASSWORD: ${{ secrets.SIGN_KEY_PASSWORD }} + # SIGN_KEYSTORE_PASSWORD: ${{ secrets.SIGN_KEYSTORE_PASSWORD }} + # SIGN_KEYSTORE_DATA: ${{ secrets.SIGN_KEYSTORE_DATA }} diff --git a/.gitignore b/.gitignore index 3f09e102aa..dd0a934602 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,8 @@ #gradle /build /.gradle -/mdk/.gradle -/mdk/build +/**/.gradle +/**/build #occupational hazards /projects/mcp/ diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d9c4453ec5..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -sudo: required -dist: trusty - -language: java -jdk: oraclejdk8 - -env: - - BUILD_NUMBER=9999 - -before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ - - rm -f $HOME/.gradle/caches/minecraft/deobfedDeps/providedDummy.jar - - rm -f $HOME/.gradle/caches/minecraft/deobfedDeps/compileDummy.jar -cache: - directories: - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ - - $TRAVIS_BUILD_DIR/build/localCache/Forge/ - -before_install: chmod +x gradlew -install: - - ./gradlew --refresh-dependencies - - ./gradlew ciWriteBuildNumber -script: - - travis_wait ./gradlew build -x createExe -S - - ./gradlew -p projects/Forge test -S -i - -notifications: - email: false - -# skip building travis on 1.13+ - it doesn't work there -branches: - except: - - 1.13-pre - - 1.13.x - - 1.14.x - - /^noci-.*$/ diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index a054f3faf5..0000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,112 +0,0 @@ -@Library('forge-shared-library')_ - -pipeline { - options { - disableConcurrentBuilds() - } - agent { - docker { - image 'gradle:jdk8' - args '-v forgegc:/home/gradle/.gradle/' - } - } - environment { - GRADLE_ARGS = '--no-daemon --console=plain' // No daemon for now as FG3 kinda derps. //'-Dorg.gradle.daemon.idletimeout=5000' - DISCORD_WEBHOOK = credentials('forge-discord-jenkins-webhook') - DISCORD_PREFIX = "Job: Forge Branch: ${BRANCH_NAME} Build: #${BUILD_NUMBER}" - JENKINS_HEAD = 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png' - } - - stages { - stage('notify_start') { - when { - not { - changeRequest() - } - } - steps { - discordSend( - title: "${DISCORD_PREFIX} Started", - successful: true, - result: 'ABORTED', //White border - thumbnail: JENKINS_HEAD, - webhookURL: DISCORD_WEBHOOK - ) - } - } - stage('setup') { - steps { - sh './gradlew ${GRADLE_ARGS} --refresh-dependencies --continue setup' - script { - env.MYVERSION = sh(returnStdout: true, script: './gradlew :forge:properties -q | grep "version:" | awk \'{print $2}\'').trim() - } - } - } - stage('changelog') { - when { - not { - changeRequest() - } - } - steps { - writeChangelog(currentBuild, 'build/changelog.txt') - } - } - stage('publish') { - when { - not { - changeRequest() - } - } - environment { - CROWDIN = credentials('forge-crowdin') - KEYSTORE = credentials('forge-jenkins-keystore-old') - KEYSTORE_KEYPASS = credentials('forge-jenkins-keystore-old-keypass') - KEYSTORE_STOREPASS = credentials('forge-jenkins-keystore-old-keypass') - } - steps { - withCredentials([usernamePassword(credentialsId: 'maven-forge-user', usernameVariable: 'MAVEN_USER', passwordVariable: 'MAVEN_PASSWORD')]) { - withGradle { - sh './gradlew ${GRADLE_ARGS} :forge:publish -PkeystoreKeyPass=${KEYSTORE_KEYPASS} -PkeystoreStorePass=${KEYSTORE_STOREPASS} -Pkeystore=${KEYSTORE} -PcrowdinKey=${CROWDIN}' - } - } - } - post { - success { - build job: 'filegenerator', parameters: [string(name: 'COMMAND', value: "promote net.minecraftforge:forge ${env.MYVERSION} latest")], propagate: false, wait: false - } - } - } - stage('test_publish_pr') { //Publish to local repo to test full process, but don't include credentials so it can't sign/publish to maven - when { - changeRequest() - } - environment { - CROWDIN = credentials('forge-crowdin') - } - steps { - withGradle { - sh './gradlew ${GRADLE_ARGS} :forge:publish -PcrowdinKey=${CROWDIN}' - } - } - } - } - post { - always { - script { - archiveArtifacts artifacts: 'projects/forge/build/libs/**/*.*', fingerprint: true, onlyIfSuccessful: true, allowEmptyArchive: true - - if (env.CHANGE_ID == null) { // This is unset for non-PRs - discordSend( - title: "${DISCORD_PREFIX} Finished ${currentBuild.currentResult}", - description: '```\n' + getChanges(currentBuild) + '\n```', - successful: currentBuild.resultIsBetterOrEqualTo("SUCCESS"), - result: currentBuild.currentResult, - thumbnail: JENKINS_HEAD, - webhookURL: DISCORD_WEBHOOK - ) - } - } - } - } -} diff --git a/build.gradle b/build.gradle index f26dfbe1eb..d43f1769e3 100644 --- a/build.gradle +++ b/build.gradle @@ -5,9 +5,9 @@ buildscript { mavenCentral() } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' - classpath 'org.ow2.asm:asm:7.1' - classpath 'org.ow2.asm:asm-tree:7.1' + classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.197' + classpath 'org.ow2.asm:asm:7.2' + classpath 'org.ow2.asm:asm-tree:7.2' } } import groovy.json.JsonSlurper @@ -41,21 +41,15 @@ import org.objectweb.asm.ClassReader plugins { id 'net.minecrell.licenser' version '0.4' - id 'org.ajoberstar.grgit' version '3.1.1' + id 'org.ajoberstar.grgit' version '4.1.1' id 'de.undercouch.download' version '3.3.0' id 'com.github.ben-manes.versions' version '0.22.0' + // Does not support this old of gradle + //id 'net.minecraftforge.gradlejarsigner' version '1.0.5' } apply plugin: 'eclipse' ext { - JAR_SIGNER = null - if (project.hasProperty('keystore')) { - JAR_SIGNER = [ - storepass: project.properties.keystoreStorePass, - keypass: project.properties.keystoreKeyPass, - keystore: project.properties.keystore - ] - } MAPPING_CHANNEL = 'snapshot' MAPPING_VERSION = '20190719-1.14.3' MC_VERSION = '1.14.4' @@ -70,6 +64,7 @@ project(':mcp') { } } +if (findProject(':clean') != null) { project(':clean') { evaluationDependsOn(':mcp') apply plugin: 'eclipse' @@ -113,9 +108,10 @@ project(':clean') { } } } +} -project(':forge') { - evaluationDependsOn(':clean') +project(':forge') { + evaluationDependsOn(findProject(':clean') != null ? ':clean' : ':mcp') apply plugin: 'java-library' apply plugin: 'maven-publish' apply plugin: 'eclipse' @@ -214,7 +210,9 @@ project(':forge') { patcher { exc = file("$rootDir/src/main/resources/forge.exc") - parent = project(':clean') + parent = project(':mcp') + mcVersion = MC_VERSION + mappings channel: MAPPING_CHANNEL, version: MAPPING_VERSION patches = file("$rootDir/patches/minecraft") patchedSrc = file('src/main/java') srgPatches = true @@ -415,8 +413,8 @@ project(':forge') { installer 'com.electronwill.night-config:toml:3.6.0' installer 'org.jline:jline:3.12.+' installer 'org.apache.maven:maven-artifact:3.6.0' - installer 'net.jodah:typetools:0.6.0' installer 'java3d:vecmath:1.5.2' + installer 'net.jodah:typetools:0.8.3' installer 'org.apache.logging.log4j:log4j-api:2.15.0' //TODO: Unpin in 1.18.1 or when Mojang bumps the Log4J version installer 'org.apache.logging.log4j:log4j-core:2.15.0' //TODO: Unpin in 1.18.1 or when Mojang bumps the Log4J version installer 'org.apache.logging.log4j:log4j-slf4j18-impl:2.15.0' //TODO: Unpin in 1.18.1 or when Mojang bumps the Log4J version @@ -443,48 +441,21 @@ project(':forge') { if (changelog.exists()) extraTxts += changelog - task downloadCrowdin() { - ext { - output = file('build/crowdin_raw.zip') - update = file('build/crowdin.json') - id = 'minecraft-forge' - } - onlyIf { - project.hasProperty('crowdinKey') && !project.gradle.startParameter.isOffline() - } - doLast { - download { - src "https://api.crowdin.com/api/project/${id}/export?key=${project.crowdinKey}&json" - dest update - overwrite true - } - if (!update.text.contains('success')) { - throw new RuntimeException("Crowdin export failed, see ${update} for more info") - } - download { - src "https://api.crowdin.com/api/project/${id}/download/all.zip?key=${project.crowdinKey}" - dest output - overwrite true - } - } + + tasks.register('downloadCrowdin', Download) { + src 'https://files.minecraftforge.net/crowdin.zip' + dest file('build/crowdin.zip') + onlyIfModified true + quiet true } task crowdin(type: Zip) { dependsOn downloadCrowdin - onlyIf { - !downloadCrowdin.state.skipped - } baseName = project.name version = project.version classifier = 'crowdin' destinationDir = file('build/distributions') - from(zipTree(downloadCrowdin.output)){ - eachFile { //Tired of waiting for crowdin API, rename things myself. Remove once crowdin stops being dumb - if (it.name.equals('en_us.json') && !it.path.startsWith('assets/')) { - it.name = it.path.split('/')[0] + '.json' - it.path = 'assets/forge/lang/' + it.name - } - } + from(zipTree(downloadCrowdin.dest)){ exclude { it.isDirectory() } rename { it.toLowerCase() }//Minecraft needs it lowercase. exclude '**/*.lang' //Pre-1.13 format @@ -687,7 +658,7 @@ project(':forge') { } } - task launcherJson(dependsOn: ['signUniversalJar', 'signLauncherJar']) { + task launcherJson(dependsOn: ['universalJar', 'launcherJar']) { inputs.file universalJar.archivePath inputs.file { launcherJar.archivePath } ext { @@ -900,6 +871,11 @@ project(':forge') { } } + jar { + // this needs filtering because its a package that doesn't have any classes. Its a bug in FG but I dont care to fix it there. + exclude('net/minecraft/client/entity/package-info.class') + } + universalJar { from extraTxts @@ -923,7 +899,7 @@ project(':forge') { */ // add crowdin locales - from { !crowdin.state.skipped ? zipTree(crowdin.archivePath) : null} + from zipTree(crowdin.archivePath) dependsOn crowdin doFirst { @@ -970,11 +946,11 @@ project(':forge') { } task downloadInstaller(type: DownloadMavenArtifact) { - artifact = 'net.minecraftforge:installer:2.1.+:shrunk' + artifact = 'net.minecraftforge:installer:2.2.9:fatjar' changing = true } - task installerJar(type: Zip, dependsOn: [downloadInstaller, installerJson, launcherJson, genClientBinPatches, genServerBinPatches, 'signUniversalJar', 'signLauncherJar']) { + task installerJar(type: Zip, dependsOn: [downloadInstaller, installerJson, launcherJson, genClientBinPatches, genServerBinPatches, universalJar, launcherJar]) { classifier = 'installer' extension = 'jar' //Needs to be Zip task to not override Manifest, so set extension destinationDir = file('build/libs') @@ -1003,24 +979,12 @@ project(':forge') { } } - [universalJar, launcherJar, installerJar].each { t -> - task "sign${t.name.capitalize()}"(type: SignJar, dependsOn: t) { - onlyIf { - JAR_SIGNER != null && t.state.failure == null - } - def jarsigner = JAR_SIGNER == null ? [:] : JAR_SIGNER - alias = 'forge' - storePass = jarsigner.storepass - keyPass = jarsigner.keypass - keyStore = jarsigner.keystore - inputFile = t.archivePath - outputFile = t.archivePath - doFirst { - project.logger.lifecycle('Signing: ' + inputFile) - } - } - t.finalizedBy(tasks.getByName("sign${t.name.capitalize()}")) - } + /* + jarSigner.autoDetect() + jarSigner.sign(universalJar) + jarSigner.sign(launcherJar) + jarSigner.sign(installerJar) + */ task makeMdk(type: Zip) { baseName = project.name @@ -1316,6 +1280,7 @@ def getClasspath(project, libs, artifact) { //evaluationDependsOnChildren() task setup() { + if (findProject(':clean') != null) dependsOn ':clean:extractMapped' dependsOn ':forge:extractMapped' //These must be strings so that we can do lazy resolution. Else we need evaluationDependsOnChildren above } diff --git a/settings.gradle b/settings.gradle index cee62b8965..795cc1538f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,9 +1,13 @@ rootProject.name = 'Forge' include ':mcp' -include ':clean' include ':forge' project(":mcp").projectDir = file("projects/mcp") -project(":clean").projectDir = file("projects/clean") project(":forge").projectDir = file("projects/forge") + + +if (false) { + include ':clean' + project(":clean").projectDir = file("projects/clean") +}