# 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", "testaction" ] pull_request: branches: [ "v1.x.x", "v2.x.x", "testaction" ] 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 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: Prepare release env variable if: ${{ github.event_name != 'release' && success() }} run: | echo "RELEASE_CHANGELOG=${{ github.event.release.body }}" >> $GITHUB_ENV echo "IS_GITHUB_PRERELEASE=${{ github.event.release.prerelease }}" >> $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 # also get the actual version with the - 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 }} 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: customanvil version: ${{ env.ONLINE_JAR_NAME }} loaders: '["spigot", "paper", "purpur", "folia"]' game-versions: '["1.18.x", "1.19.x", "1.20.x", "1.21.x"]' channel: alpha files: build/libs/${{ env.ONLINE_JAR_NAME }} #- name: Modrinth publish release # if: ${{ github.event_name == 'release' && github.repository_owner == 'alexcrea' && success() && false}} # uses: cloudnode-pro/modrinth-publish@v2 # with: # token: ${{ secrets.MODRINTH_TOKEN }} # project: customanvil # version: ${{ env.ONLINE_JAR_NAME }}${{ github.event.release.prerelease == false && '' || '-pre' }} # loaders: '["spigot", "paper", "purpur", "folia"]' # game-versions: '["1.18.x", "1.19.x", "1.20.x", "1.21.x"]' # files: build/libs/${{ env.ONLINE_JAR_NAME }} - name: Release if: ${{ false }} uses: tsickert/discord-webhook@v7.0.0 with: webhook-url: ${{ secrets.TEST_WEBHOOK_URL }} content: | <@&1338546156325568642> # New version of custom anvil ! <:CustomAnvil:1262550667986342001>([modrinth](https://modrinth.com/plugin/customanvil) and [hangar](https://hangar.papermc.io/alexcrea/CustomAnvil) links) -# (note: automated release. spigot and modrinth will be uploaded soon) ${{ env.RELEASE_CHANGELOG }}