push.yml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. name: Build and Release
  2. on:
  3. push:
  4. paths:
  5. - '**.gradle'
  6. - '**.properties'
  7. - '**/src/**'
  8. branches:
  9. - "1.16"
  10. - "1.17"
  11. workflow_dispatch:
  12. inputs:
  13. norelease:
  14. description: 'Do not publish'
  15. required: true
  16. default: 'false'
  17. jobs:
  18. validate-gradle:
  19. name: "Validate Gradle wrapper"
  20. runs-on: ubuntu-20.04
  21. steps:
  22. - uses: actions/checkout@v2
  23. with:
  24. fetch-depth: 0
  25. - uses: gradle/wrapper-validation-action@v1
  26. license:
  27. name: "Verify License integrity"
  28. runs-on: ubuntu-20.04
  29. if: |
  30. !contains(github.event.head_commit.message, '[ci skip]')
  31. steps:
  32. - uses: actions/checkout@v2
  33. - name: Set up JDK 8
  34. uses: actions/setup-java@v2
  35. with:
  36. java-version: 8
  37. distribution: 'adopt'
  38. - name: Cache Gradle wrapper
  39. uses: actions/cache@v2
  40. with:
  41. path: ~/.gradle/wrapper
  42. key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }}
  43. restore-keys: gradle-wrapper-${{ runner.os }}-
  44. - name: Cache packages
  45. id: cache-packages
  46. uses: actions/cache@v2
  47. with:
  48. path: ~/.gradle/caches
  49. key: gradle-packages-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
  50. restore-keys: gradle-packages-${{ runner.os }}-
  51. - name: Make gradlew executable
  52. run: chmod +x ./gradlew
  53. - name: Verify license using Licenser
  54. run: |
  55. ./gradlew licenseCheck
  56. # Remove some potentially problematic files from the Gradle cache,
  57. # so that GitHub Actions doesn't cache them.
  58. - name: Cleanup Gradle Cache
  59. if: steps.cache-packages.outputs.cache-hit != 'true'
  60. run: |
  61. rm -f $HOME/.gradle/caches/*/*.lock
  62. rm -rf $HOME/.gradle/caches/*/plugin-resolution/
  63. rm -rf $HOME/.gradle/caches/*/scripts/
  64. rm -rf $HOME/.gradle/caches/*/scripts-remapped/
  65. rm -rf $HOME/.gradle/caches/*/fileHashes/
  66. rm -f $HOME/.gradle/caches/journal-1/file-access.bin
  67. build:
  68. name: "Build"
  69. strategy:
  70. matrix:
  71. java: [ 8, 15 ] # Build on Java 8 (version shipped with MC 1.16) and Java 15 (iirc the latest version supported by both loaders on 1.16)
  72. runs-on: ubuntu-20.04
  73. if: |
  74. !contains(github.event.head_commit.message, '[ci skip]')
  75. steps:
  76. - uses: actions/checkout@v2
  77. - name: Set up JDK ${{ matrix.java }}
  78. uses: actions/setup-java@v2
  79. with:
  80. java-version: ${{ matrix.java }}
  81. distribution: 'adopt'
  82. - name: Cache Gradle wrapper
  83. uses: actions/cache@v2
  84. with:
  85. path: ~/.gradle/wrapper
  86. key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }}
  87. restore-keys: gradle-wrapper-${{ runner.os }}-
  88. - name: Cache packages
  89. id: cache-packages
  90. uses: actions/cache@v2
  91. with:
  92. path: ~/.gradle/caches
  93. key: gradle-packages-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
  94. restore-keys: gradle-packages-${{ runner.os }}-
  95. - name: Make gradlew executable
  96. run: chmod +x ./gradlew
  97. - name: Build with Gradle
  98. run: |
  99. ./gradlew build --stacktrace --no-daemon
  100. # Remove some potentially problematic files from the Gradle cache,
  101. # so that GitHub Actions doesn't cache them.
  102. - name: Cleanup Gradle Cache
  103. if: steps.cache-packages.outputs.cache-hit != 'true'
  104. run: |
  105. rm -f $HOME/.gradle/caches/*/*.lock
  106. rm -rf $HOME/.gradle/caches/*/plugin-resolution/
  107. rm -rf $HOME/.gradle/caches/*/scripts/
  108. rm -rf $HOME/.gradle/caches/*/scripts-remapped/
  109. rm -rf $HOME/.gradle/caches/*/fileHashes/
  110. rm -f $HOME/.gradle/caches/journal-1/file-access.bin
  111. - name: Setting mod version
  112. if: ${{ matrix.java == '8' }} # Only upload Java 8 artifacts for MC 1.16
  113. run: |
  114. cat $GITHUB_WORKSPACE/gradle.properties | grep ^archives_base_name= >> $GITHUB_ENV
  115. cat $GITHUB_WORKSPACE/gradle.properties | grep ^minecraft_version= >> $GITHUB_ENV
  116. cat $GITHUB_WORKSPACE/gradle.properties | grep ^base_version= >> $GITHUB_ENV
  117. - name: Create package name
  118. if: ${{ matrix.java == '8' }} # Only upload Java 8 artifacts for MC 1.16
  119. run: echo "package_name=[$minecraft_version] $archives_base_name-$base_version.${{ github.run_number }}" >> $GITHUB_ENV
  120. - uses: actions/upload-artifact@v2
  121. if: ${{ matrix.java == '8' }} # Only upload Java 8 artifacts for MC 1.16
  122. with:
  123. name: ${{ env.package_name }}
  124. path: |
  125. **/build/libs/
  126. !build/libs/
  127. !**/*-dev.jar
  128. !**/*-shadow.jar
  129. !**/*-transformProduction*.jar
  130. !**/testmod*/
  131. publish:
  132. needs:
  133. - validate-gradle
  134. - license
  135. - build
  136. runs-on: ubuntu-20.04
  137. if: |
  138. !contains(github.event.head_commit.message, '[norelease]') && github.event.inputs.norelease != 'true'
  139. steps:
  140. - uses: actions/checkout@v2
  141. - name: Set up JDK 8
  142. uses: actions/setup-java@v2
  143. with:
  144. java-version: 8
  145. distribution: 'adopt'
  146. - name: Cache Gradle wrapper
  147. uses: actions/cache@v2
  148. with:
  149. path: ~/.gradle/wrapper
  150. key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/**/*') }}
  151. restore-keys: gradle-wrapper-${{ runner.os }}-
  152. - name: Cache packages
  153. id: cache-packages
  154. uses: actions/cache@v2
  155. with:
  156. path: ~/.gradle/caches
  157. key: gradle-packages-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
  158. restore-keys: gradle-packages-${{ runner.os }}-
  159. - name: Release to Maven and CurseForge
  160. env:
  161. # currently unused, may want to use these for changelogs though!
  162. # GIT_COMMIT: ${{ github.event.after }}
  163. # GIT_PREVIOUS_COMMIT: ${{ github.event.before }}
  164. MAVEN_PASS: ${{ secrets.MAVEN_PASS }}
  165. CURSE_API_KEY: ${{ secrets.CURSE_API_KEY }}
  166. # TODO: make this use the artifacts from the previous build step
  167. run: |
  168. ./gradlew build publish curseforgePublish --stacktrace --no-daemon
  169. # Remove some potentially problematic files from the Gradle cache,
  170. # so that GitHub Actions doesn't cache them.
  171. - name: Cleanup Gradle Cache
  172. if: steps.cache-packages.outputs.cache-hit != 'true'
  173. run: |
  174. rm -f $HOME/.gradle/caches/*/*.lock
  175. rm -rf $HOME/.gradle/caches/*/plugin-resolution/
  176. rm -rf $HOME/.gradle/caches/*/scripts/
  177. rm -rf $HOME/.gradle/caches/*/scripts-remapped/
  178. rm -rf $HOME/.gradle/caches/*/fileHashes/
  179. rm -f $HOME/.gradle/caches/journal-1/file-access.bin