name: Java CI # Pushes to main and pull requests only. A branch with an open pull request used to build twice # (once for the push, once for the pull request), which kept the runners queued. on: push: branches: - main tags: - '*' pull_request: paths-ignore: - '**.md' # A newer run for the same pull request or branch replaces the older one. concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Set up JDK 17 uses: actions/setup-java@v6 with: distribution: 'liberica' java-version: '17' java-package: 'jdk+fx' - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 with: cache-cleanup: never # Only main writes the dependency cache; pull requests read it. cache-read-only: ${{ github.ref != 'refs/heads/main' }} # The repository's wrapper downloads Gradle itself, so cache that download too. - name: Cache Gradle distribution uses: actions/cache@v4 with: path: | ~/.gradle/wrapper .gradle/wrapper-neo key: gradle-dist-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties', 'gradle/wrapper/GradleWrapperNeo.java') }} - name: Install Xvfb run: | # Installing is the slowest setup step, so skip it when the runner already has xvfb, and # only refresh the package index when a plain install fails. command -v xvfb-run >/dev/null || sudo apt-get install -y --no-install-recommends xvfb \ || { sudo apt-get update && sudo apt-get install -y --no-install-recommends xvfb; } # One Gradle run builds, tests and runs the code and translation checks, so the # project is configured and compiled once instead of in two workflows. - name: Build and check with Gradle run: xvfb-run --auto-servernum ./gradlew build checkstyle checkTranslations --no-daemon --parallel env: JAVA_TOOL_OPTIONS: -Djava.awt.headless=true MICROSOFT_AUTH_ID: ${{ secrets.MICROSOFT_AUTH_ID }} CURSEFORGE_API_KEY: ${{ secrets.CURSEFORGE_API_KEY }} - name: Get short SHA run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV - name: Upload JAR uses: actions/upload-artifact@v7 with: name: HMCL-${{ env.SHORT_SHA }}-jar path: HMCL/build/libs/HMCL-*.jar archive: false - name: Upload EXE uses: actions/upload-artifact@v7 with: name: HMCL-${{ env.SHORT_SHA }}-exe path: HMCL/build/libs/HMCL-*.exe archive: false - name: Upload SH uses: actions/upload-artifact@v7 with: name: HMCL-${{ env.SHORT_SHA }}-sh path: HMCL/build/libs/HMCL-*.sh archive: false - name: Upload DEB uses: actions/upload-artifact@v7 with: name: HMCL-${{ env.SHORT_SHA }}-deb path: HMCL/build/libs/HMCL-*.deb archive: false