name: Gradle CI

on:
  push:
    branches:
      - '**'
    paths-ignore:
      - 'README.md'
      - 'LICENSE'
      - '.gitignore'
      - '.editorconfig'
      - 'changelogs/**'
  pull_request:
    branches:
      - '**'
    paths-ignore:
      - 'README.md'
      - 'LICENSE'
      - '.gitignore'
      - '.editorconfig'
      - 'changelogs/**'
      - 'src/*/resources/lang/*'
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    name: Build with gradle

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          java-version: 17
          distribution: temurin
      - uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
            ./.gradle/loom-cache
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
      - name: Build with Gradle
        run: ./gradlew build --no-daemon
      - uses: actions/upload-artifact@v3
        with:
          path: build/libs/*.jar

  client_test:
    runs-on: ubuntu-latest
    name: In-game test
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v3
        with:
          distribution: microsoft
          java-version: 17
      - name: Run auto test client
        uses: modmuss50/xvfb-action@v1
        with:
          run: ./gradlew runTestmod --stacktrace --warning-mode=fail --no-daemon
      - name: Upload test screenshots
        uses: actions/upload-artifact@v3
        if: always()
        with:
          name: test-screenshots
          path: run/screenshots
