# This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. # This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle name: Java CI with Gradle on: push: branches: [ "v1.x.x", "v2.x.x" ] pull_request: branches: [ "v1.x.x", "v2.x.x" ] release: types: [published] concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest permissions: contents: write env: MODRINTH_VERSIONS: '["1.18.x", "1.19.x", "1.20.x", "1.21.x", "26.1.x", "26.2.x"]' MODRINTH_PLATFORMS: '["spigot", "paper", "purpur", "folia"]' steps: - uses: actions/checkout@v4 - name: Set up JDKs uses: actions/setup-java@v4 with: java-version: | 21 distribution: 'temurin' cache: gradle - name: Cache Gradle root and wrapper uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: gradle-root-${{ runner.os }}-${{ hashFiles('build.gradle*') }} restore-keys: gradle-root-${{ runner.os }}- # Setup paperweight cache - name: Cache paperweight uses: actions/cache@v3 with: path: | ./nms/*/.gradle/caches/paperweight key: paperweight-submodules-${{ runner.os }}-${{ hashFiles('nms/*/build.gradle*') }} restore-keys: | paperweight-submodules-${{ runner.os }}- # Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies. # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 - name: Make gradlew executable run: chmod +x ./gradlew - name: Get small commit hash if: ${{ github.event_name != 'release' && success() }} run: echo "SMALL_COMMIT_HASH=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV - name: Build with Gradle Wrapper run: ./gradlew build --parallel --stacktrace # only submit dependency on push - name: Generate and submit dependency graph uses: gradle/actions/dependency-submission@v4 if: ${{ github.event_name == 'push' && success() }} continue-on-error: true # Get the names of the online and offline jars # grep -v "offline" to exclude offline jar as the regex would catch it otherwise - name: Get file name for jars run: | ONLINE_JAR_PATH=$(ls build/libs/CustomAnvil-*.jar | grep -v "offline") OFFLINE_JAR_PATH=$(ls build/libs/CustomAnvil-*-offline.jar) echo "ONLINE_JAR_NAME=$(basename $ONLINE_JAR_PATH)" >> $GITHUB_ENV echo "OFFLINE_JAR_NAME=$(basename $OFFLINE_JAR_PATH)" >> $GITHUB_ENV # upload the named jars as artifact - name: Upload online JAR artifact uses: actions/upload-artifact@v4 with: name: CustomAnvil.jar path: build/libs/${{ env.ONLINE_JAR_NAME }} - name: Upload offline JAR file uses: actions/upload-artifact@v4 with: name: CustomAnvil-offline.jar path: build/libs/${{ env.OFFLINE_JAR_NAME }} - name: Summarize tests results uses: jeantessier/test-summary-action@v1 if: ${{ always() }} # upload the jar to release - name: Upload jar to release if: ${{ github.event_name == 'release' && success() }} uses: softprops/action-gh-release@v2 with: files: | build/libs/${{ env.ONLINE_JAR_NAME }} build/libs/${{ env.OFFLINE_JAR_NAME }} - name: Hangar release if: ${{ (github.event_name != 'release' || github.event_name != 'push') && github.repository_owner == 'alexcrea' && success() }} env: HANGAR_API_TOKEN: ${{ secrets.HANGAR_API_TOKEN }} RELEASE_CHANGELOG: ${{ github.event.release.body }} run: ./gradlew publishAllPublicationsToHangar --stacktrace - name: Modrinth publish alpha if: ${{ github.event_name == 'push' && github.repository_owner == 'alexcrea' && success() }} uses: cloudnode-pro/modrinth-publish@v2 with: token: ${{ secrets.MODRINTH_TOKEN }} project: S75Ueiq9 name: dev-${{ env.SMALL_COMMIT_HASH }} version: dev-${{ env.SMALL_COMMIT_HASH }} loaders: ${{ env.MODRINTH_PLATFORMS }} game-versions: ${{ env.MODRINTH_VERSIONS }} channel: alpha files: build/libs/${{ env.ONLINE_JAR_NAME }} changelog: ${{ github.event.head_commit.message }} - name: Modrinth publish release if: ${{ github.event_name == 'release' && github.repository_owner == 'alexcrea' && success() }} uses: cloudnode-pro/modrinth-publish@v2 with: token: ${{ secrets.MODRINTH_TOKEN }} project: S75Ueiq9 name: ${{ github.event.release.name }} version: ${{ github.event.release.tag_name }}${{ github.event.release.prerelease && '-pre' || '' }} loaders: ${{ env.MODRINTH_PLATFORMS }} game-versions: ${{ env.MODRINTH_VERSIONS }} channel: ${{ github.event.release.prerelease == false && 'release' || 'beta' }} files: build/libs/${{ env.ONLINE_JAR_NAME }} changelog: ${{ github.event.release.body }} - name: Send release note to discord if: ${{ github.event_name == 'release' && github.repository_owner == 'alexcrea' && success() }} uses: tsickert/discord-webhook@v7.0.0 with: webhook-url: ${{ secrets.RELEASE_WEBHOOK_URL }} content: | ${{ github.event.release.prerelease == false && '<@&1338546156325568642>' || '<@&1352296092989001768>' }} # New ${{ github.event.release.prerelease && 'beta ' || '' }}version of custom anvil ! <:CustomAnvil:1262550667986342001>([Modrinth](https://modrinth.com/plugin/customanvil), [Hangar](https://hangar.papermc.io/alexcrea/CustomAnvil) and [GitHub](${{ github.event.release.html_url }}) links) -# note: automated release. spigot is not uploaded yet. ${{ github.event.release.body }}