name: Build Beta

on:
  workflow_dispatch:
  merge_group:
  push:
    branches:
      - master
      - bleeding-edge
    paths-ignore:
      - 'src/main/resources/assets/skyblocker/lang/**'
      - 'CHANGELOG.md'
      - 'FEATURES.md'
      - 'README.md'
  pull_request:
    paths-ignore:
      - 'src/main/resources/assets/skyblocker/lang/**'
      - 'CHANGELOG.md'
      - 'FEATURES.md'
      - 'README.md'
env:
  REF_NAME: ${{ github.ref_name }}
  PR_NUMBER: ${{ github.event.number }}
  PR_SHA: ${{ github.event.pull_request.head.sha }}

jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set jar name
        uses: actions/github-script@v7
        with:
          result-encoding: string
          script: |
            let buildType;
            let commitSha;
            buildType = process.env.REF_NAME === "master" || process.env.REF_NAME === "main" ? "beta" : "alpha";
            if (process.env.PR_NUMBER) {
              buildType += `-pr-${process.env.PR_NUMBER}`;
              commitSha = process.env.PR_SHA;
            } else {
              commitSha = process.env.GITHUB_SHA;
            }
            console.log(`Set build type to ${buildType} and commit sha to ${commitSha}`);

            const fs = require("fs");
            let file = fs.readFileSync("./gradle.properties");
            file = file.toString().split("\n").map(e => e.trim().startsWith("mod_version") ? `${e}-${buildType}-${commitSha.substring(0, 7)}` : e).join("\n");
            fs.writeFileSync("./gradle.properties", file);

      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          distribution: 'microsoft'
          java-version: '21'

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v3
        with:
          validate-wrappers: true
      - name: Build with Gradle
        run: ./gradlew build

      - name: Store reports
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: reports
          path: |
            **/build/reports/
            **/build/test-results/

      - name: Process artifacts
        uses: actions/github-script@v7
        id: fname
        with:
          result-encoding: string
          script: |
            const fs = require("fs")
            return fs.readdirSync("build/libs/").filter(e => !e.endsWith("dev.jar") && !e.endsWith("sources.jar") && e.endsWith(".jar"))[0].replace(".jar", "");

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.fname.outputs.result }}
          path: build/libs/
