瀏覽代碼

Add rudimentary support for modrinth publishing (#263)

(cherry picked from commit 4da029729cc79305da6f89208e4526384b363b6f)
Signed-off-by: Max <maxh2709@gmail.com>
Max 3 年之前
父節點
當前提交
bff451de25
共有 6 個文件被更改,包括 88 次插入163 次删除
  1. 20 145
      .github/workflows/push.yml
  2. 11 4
      build.gradle
  3. 24 5
      fabric/build.gradle
  4. 22 5
      forge/build.gradle
  5. 10 3
      gradle.properties
  6. 1 1
      gradle/wrapper/gradle-wrapper.properties

+ 20 - 145
.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: 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  
+      - name: Validate Gradle Wrapper
+        uses: gradle/wrapper-validation-action@v1
 
-  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
-        with:
-          java-version: ${{ matrix.java }}
-          distribution: 'temurin'
-      
-      - name: Cache Gradle wrapper
-        uses: actions/cache@v2
+      - name: Verify license using Licenser
+        uses: gradle/gradle-build-action@v2
         with:
-          path: ~/.gradle/wrapper
-          key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }}
-          restore-keys: gradle-wrapper-${{ runner.os }}-
+          arguments: licenseCheck
 
-      - name: Cache packages
-        id: cache-packages
-        uses: actions/cache@v2
+      - name: Setup and Build with Gradle
+        uses: gradle/gradle-build-action@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
-          
+          arguments: build --stacktrace --no-daemon
+
       - 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

+ 11 - 4
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

+ 24 - 5
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
+        }
+    }
+}

+ 22 - 5
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 {
+        }
+    }
+}

+ 10 - 3
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

+ 1 - 1
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