Match ForestryMC/IC2: Gitea uses setup-gradle cache-provider external with no whole-home actions/cache. Keep wrapper-only cache so restores stay small on the Windows Docker runner.
117 lines
4.2 KiB
YAML
117 lines
4.2 KiB
YAML
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
|
|
timeout-minutes: 90
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
# Same pattern as TDLM ForestryMC/IndustrialCraft2 setup-build: cache the JDK toolchain.
|
|
- name: Set up JDK 17
|
|
uses: actions/setup-java@v6
|
|
with:
|
|
distribution: 'liberica'
|
|
java-version: '17'
|
|
java-package: 'jdk+fx'
|
|
cache-jdk: true
|
|
|
|
# Nest mirrors github.com/gradle/actions as actions/gradle-actions (also as gradle/actions).
|
|
# Match ForestryMC/IC2: on Gitea use cache-provider external (no setup-gradle Actions cache).
|
|
# Do NOT actions/cache the whole ~/.gradle/caches — that hit ~4GB here and OOM'd the
|
|
# Windows Docker runner on restore; siblings never cache that tree.
|
|
- name: Setup Gradle
|
|
uses: actions/gradle-actions/setup-gradle@v6
|
|
with:
|
|
cache-cleanup: never
|
|
cache-provider: ${{ github.server_url == 'https://github.com' && 'basic' || 'external' }}
|
|
|
|
# Wrapper only (small). Dependency jars re-download when cold — same as org mod CI on Gitea.
|
|
- name: Cache Gradle wrapper
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.gradle/wrapper
|
|
.gradle/wrapper-neo
|
|
key: gradle-wrapper-${{ runner.os }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties', 'gradle/wrapper/GradleWrapperNeo.java') }}
|
|
|
|
# Xvfb alone is not enough: JavaFX Glass needs GTK/X11 libs or Platform.startup fails with
|
|
# GtkPlatformFactory "Internal Error" and :HMCL:test can hang (looks like a checkstyle stall).
|
|
- name: Cache apt packages
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/apt-cache
|
|
key: apt-javafx-xvfb-${{ runner.os }}-${{ runner.arch }}-1
|
|
|
|
- name: Install Xvfb and JavaFX GTK deps
|
|
run: |
|
|
pkgs='xvfb libgtk-3-0 libxtst6 libxxf86vm1 libgl1 libxi6 libx11-6 libxext6 libxrender1'
|
|
sudo mkdir -p /var/cache/apt/archives/partial
|
|
if [ -d "${HOME}/apt-cache" ] && [ -n "$(ls -A "${HOME}/apt-cache" 2>/dev/null)" ]; then
|
|
sudo cp -a "${HOME}/apt-cache/." /var/cache/apt/archives/
|
|
fi
|
|
# Prefer cached debs; refresh the index only when install cannot resolve packages.
|
|
sudo apt-get install -y --no-install-recommends $pkgs \
|
|
|| { sudo apt-get update && sudo apt-get install -y --no-install-recommends $pkgs; }
|
|
mkdir -p "${HOME}/apt-cache"
|
|
cp -a /var/cache/apt/archives/*.deb "${HOME}/apt-cache/" 2>/dev/null || true
|
|
|
|
# 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 -Dprism.order=sw
|
|
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
|