From bff451de25c1f65b6a5a24578a1a06164e5b5e5c Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 22 May 2022 18:01:35 +0200 Subject: [PATCH] Add rudimentary support for modrinth publishing (#263) (cherry picked from commit 4da029729cc79305da6f89208e4526384b363b6f) Signed-off-by: Max --- .github/workflows/push.yml | 165 +++-------------------- build.gradle | 15 ++- fabric/build.gradle | 29 +++- forge/build.gradle | 27 +++- gradle.properties | 13 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 88 insertions(+), 163 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index e3651d9d..5fc7bba3 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,4 +1,4 @@ -name: Build and Release +name: Build and Release (1.16) on: push: @@ -16,125 +16,41 @@ on: default: 'false' jobs: - validate-gradle: - name: "Validate Gradle wrapper" - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - uses: gradle/wrapper-validation-action@v1 - license: - name: "Verify License integrity" + build: + name: "Build and Release" runs-on: ubuntu-20.04 if: | !contains(github.event.head_commit.message, '[ci skip]') steps: - uses: actions/checkout@v2 - + - name: Set up JDK 17 uses: actions/setup-java@v2 with: java-version: 17 distribution: 'temurin' - - - name: Cache Gradle wrapper - uses: actions/cache@v2 - with: - path: ~/.gradle/wrapper - key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }} - restore-keys: gradle-wrapper-${{ runner.os }}- - - name: Cache packages - id: cache-packages - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: gradle-packages-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: gradle-packages-${{ runner.os }}- - - - name: Make gradlew executable - run: chmod +x ./gradlew - + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Verify license using Licenser - run: | - ./gradlew licenseCheck - - # Remove some potentially problematic files from the Gradle cache, - # so that GitHub Actions doesn't cache them. - - name: Cleanup Gradle Cache - if: steps.cache-packages.outputs.cache-hit != 'true' - run: | - rm -f $HOME/.gradle/caches/*/*.lock - rm -rf $HOME/.gradle/caches/*/plugin-resolution/ - rm -rf $HOME/.gradle/caches/*/scripts/ - rm -rf $HOME/.gradle/caches/*/scripts-remapped/ - rm -rf $HOME/.gradle/caches/*/fileHashes/ - rm -f $HOME/.gradle/caches/journal-1/file-access.bin + uses: gradle/gradle-build-action@v2 + with: + arguments: licenseCheck - build: - name: "Build" - strategy: - matrix: - java: [ 17 ] - runs-on: ubuntu-20.04 - if: | - !contains(github.event.head_commit.message, '[ci skip]') - steps: - - uses: actions/checkout@v2 - - - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v2 + - name: Setup and Build with Gradle + uses: gradle/gradle-build-action@v2 with: - java-version: ${{ matrix.java }} - distribution: 'temurin' - - - name: Cache Gradle wrapper - uses: actions/cache@v2 - with: - path: ~/.gradle/wrapper - key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }} - restore-keys: gradle-wrapper-${{ runner.os }}- + arguments: build --stacktrace --no-daemon - - name: Cache packages - id: cache-packages - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: gradle-packages-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: gradle-packages-${{ runner.os }}- - - - name: Make gradlew executable - run: chmod +x ./gradlew - - - name: Build with Gradle - run: | - ./gradlew build --stacktrace --no-daemon - - # Remove some potentially problematic files from the Gradle cache, - # so that GitHub Actions doesn't cache them. - - name: Cleanup Gradle Cache - if: steps.cache-packages.outputs.cache-hit != 'true' - run: | - rm -f $HOME/.gradle/caches/*/*.lock - rm -rf $HOME/.gradle/caches/*/plugin-resolution/ - rm -rf $HOME/.gradle/caches/*/scripts/ - rm -rf $HOME/.gradle/caches/*/scripts-remapped/ - rm -rf $HOME/.gradle/caches/*/fileHashes/ - rm -f $HOME/.gradle/caches/journal-1/file-access.bin - - name: Setting mod version - if: ${{ matrix.java == '17' }} run: | cat $GITHUB_WORKSPACE/gradle.properties | grep ^archives_base_name= >> $GITHUB_ENV cat $GITHUB_WORKSPACE/gradle.properties | grep ^minecraft_version= >> $GITHUB_ENV cat $GITHUB_WORKSPACE/gradle.properties | grep ^base_version= >> $GITHUB_ENV - name: Create package name - if: ${{ matrix.java == '17' }} run: echo "package_name=[$minecraft_version] $archives_base_name-$base_version.${{ github.run_number }}" >> $GITHUB_ENV - uses: actions/upload-artifact@v2 - if: ${{ matrix.java == '17' }} with: name: ${{ env.package_name }} path: | @@ -144,58 +60,17 @@ jobs: !**/*-shadow.jar !**/*-transformProduction*.jar !**/testmod*/ - - publish: - needs: - - validate-gradle - - license - - build - runs-on: ubuntu-20.04 - if: | - !contains(github.event.head_commit.message, '[norelease]') && github.event.inputs.norelease != 'true' - steps: - - uses: actions/checkout@v2 - - - name: Set up JDK 17 - uses: actions/setup-java@v2 - with: - java-version: 17 - distribution: 'temurin' - - - name: Cache Gradle wrapper - uses: actions/cache@v2 - with: - path: ~/.gradle/wrapper - key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }} - restore-keys: gradle-wrapper-${{ runner.os }}- - - name: Cache packages - id: cache-packages - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: gradle-packages-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: gradle-packages-${{ runner.os }}- - - - name: Release to Maven and CurseForge + - name: Release to Maven, CurseForge and Modrinth + uses: gradle/gradle-build-action@v2 + if: | + !contains(github.event.head_commit.message, '[norelease]') && github.event.inputs.norelease != 'true' env: # currently unused, may want to use these for changelogs though! # GIT_COMMIT: ${{ github.event.after }} # GIT_PREVIOUS_COMMIT: ${{ github.event.before }} MAVEN_PASS: ${{ secrets.MAVEN_PASS }} CURSE_API_KEY: ${{ secrets.CURSE_API_KEY }} - # TODO: make this use the artifacts from the previous build step - run: | - ./gradlew build publish curseforgePublish --stacktrace --no-daemon - - # Remove some potentially problematic files from the Gradle cache, - # so that GitHub Actions doesn't cache them. - - name: Cleanup Gradle Cache - if: steps.cache-packages.outputs.cache-hit != 'true' - run: | - rm -f $HOME/.gradle/caches/*/*.lock - rm -rf $HOME/.gradle/caches/*/plugin-resolution/ - rm -rf $HOME/.gradle/caches/*/scripts/ - rm -rf $HOME/.gradle/caches/*/scripts-remapped/ - rm -rf $HOME/.gradle/caches/*/fileHashes/ - rm -f $HOME/.gradle/caches/journal-1/file-access.bin + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + with: + arguments: publish curseforge modrinth --stacktrace --no-daemon diff --git a/build.gradle b/build.gradle index 4d233b27..4c4a4978 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,17 @@ +import java.text.SimpleDateFormat + +buildscript { + configurations.classpath { + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' + } +} + plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.10.0-SNAPSHOT" apply false + id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false id "org.cadixdev.licenser" version "0.6.1" id "com.matthewprenger.cursegradle" version "1.4.0" apply false + id "com.modrinth.minotaur" version "2.2.0" apply false id "maven-publish" } @@ -78,7 +87,7 @@ allprojects { ext { releaseChangelog = { - def dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm") + def dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm") dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")) def branch if (System.env.BRANCH_NAME) { @@ -112,5 +121,3 @@ allprojects { task licenseFormatAll subprojects { p -> licenseFormatAll.dependsOn("${p.path}:licenseFormat") } - -task curseforgePublish diff --git a/fabric/build.gradle b/fabric/build.gradle index 4b07ddc7..b6136b70 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,6 +1,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.1.2" id "com.matthewprenger.cursegradle" + id "com.modrinth.minotaur" } loom { @@ -101,11 +102,12 @@ publishing { } curseforge { - if (project.hasProperty("CURSE_API_KEY") || System.getenv("CURSE_API_KEY") != null) { - apiKey = project.hasProperty("CURSE_API_KEY") ? project.property("CURSE_API_KEY") : System.getenv("CURSE_API_KEY") + var CURSE_API_KEY = project.findProperty("CURSE_API_KEY") ?: System.getenv("CURSE_API_KEY") + if (CURSE_API_KEY != null) { + apiKey = CURSE_API_KEY project { - id = "419699" - releaseType = "release" + id = rootProject.curseforge_id + releaseType = "$rootProject.artifact_type" changelogType = "html" changelog = releaseChangelog() addGameVersion "1.16-Snapshot" @@ -130,4 +132,21 @@ curseforge { } } -rootProject.tasks.getByName("curseforgePublish").dependsOn tasks.getByName("curseforge") +modrinth { + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + token = MODRINTH_TOKEN + projectId = rootProject.modrinth_id + versionType = "$rootProject.artifact_type" + versionNumber = "$project.version+$project.name" + versionName = "[Fabric $rootProject.supported_version] v$project.version" + changelog = releaseChangelog() + uploadFile = remapJar + gameVersions = ["1.18.2"] + loaders = ["fabric"] + dependencies { + // TODO: move to slugs if that functionality becomes available in minotaur + required.project("P7dR8mSH") // Fabric API + } + } +} diff --git a/forge/build.gradle b/forge/build.gradle index 6b3c1a14..75465458 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,6 +1,7 @@ plugins { id "com.github.johnrengelman.shadow" version "7.1.2" id "com.matthewprenger.cursegradle" + id "com.modrinth.minotaur" } loom { @@ -98,11 +99,12 @@ publishing { } curseforge { - if (project.hasProperty("CURSE_API_KEY") || System.getenv("CURSE_API_KEY") != null) { - apiKey = project.hasProperty("CURSE_API_KEY") ? project.property("CURSE_API_KEY") : System.getenv("CURSE_API_KEY") + var CURSE_API_KEY = project.findProperty("CURSE_API_KEY") ?: System.getenv("CURSE_API_KEY") + if (CURSE_API_KEY != null) { + apiKey = CURSE_API_KEY project { - id = "419699" - releaseType = "release" + id = rootProject.curseforge_id + releaseType = "$rootProject.artifact_type" changelogType = "html" changelog = releaseChangelog() addGameVersion "1.16.4" @@ -123,4 +125,19 @@ curseforge { } } -rootProject.tasks.getByName("curseforgePublish").dependsOn tasks.getByName("curseforge") +modrinth { + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + token = MODRINTH_TOKEN + projectId = rootProject.modrinth_id + versionType = "$rootProject.artifact_type" + versionNumber = "$project.version+$project.name" + versionName = "[Forge $rootProject.supported_version] v$project.version" + changelog = releaseChangelog() + uploadFile = remapJar + gameVersions = ["1.18.2"] + loaders = ["forge"] + dependencies { + } + } +} diff --git a/gradle.properties b/gradle.properties index 6ac200c1..141c5b90 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,12 @@ -org.gradle.jvmargs=-Xmx3G +org.gradle.jvmargs=-Xmx6G org.gradle.daemon=false -minecraft_version=1.16.5 -supported_version=1.16.4/5 +forgeEnabled=true + +minecraft_version=1.18.2 +supported_version=1.18.2 + +artifact_type=release archives_base_name=architectury archives_base_name_snapshot=architectury-snapshot @@ -14,3 +18,6 @@ fabric_api_version=0.42.0+1.16 mod_menu_version=1.16.11+ forge_version=36.0.42 + +curseforge_id=419699 +modrinth_id=lhGA9TYQ \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85f..aa991fce 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.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists