name: Build Application

on:
  push:
    tags:
      - 'v[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?'
      - "v*"

jobs:
  build:
    runs-on: stable
    container:
      image: git.euph.dev/actions/runner-java-21:latest
    steps:
      - name: "Checkout"
        uses: "https://git.euph.dev/actions/checkout@v3"
      - uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: "Prepare Gradle"
        run: gradle clean
      - name: "Build Jar"
        run: gradle bootJar -Pversion=${{ github.ref_name }}
      - name: Upload Jar as Artifact
        uses: "https://git.euph.dev/actions/upload-artifact@v3"
        with:
          name: tower_defence_server.jar
          path: build/libs/Tower-Defence-Server-${{ github.ref_name }}.jar
      - name: Upload API Spec as Artifact
        uses: "https://git.euph.dev/actions/upload-artifact@v3"
        with:
          name: api.yml
          path: api/api.yml
      - name: "Stop Gradle"
        run: gradle --stop

  build-docker:
    runs-on: docker
    needs:
      - build
    steps:
      - name: "Checkout"
        uses: "https://git.euph.dev/actions/checkout@v3"
      - name: Download artifact from previous job
        uses: "https://git.euph.dev/actions/download-artifact@v3"
        with:
          name: tower_defence_server.jar
          path: .forgejo/workflows/
      - name: Login to Registry
        uses: "https://git.euph.dev/actions/docker-login@v3"
        with:
          registry: git.euph.dev
          username: ${{ secrets.DEPLOY_USER }}
          password: ${{ secrets.DEPLOY_SECRET }}
      - name: Build and push Web Image
        uses: "https://git.euph.dev/actions/docker-build-push@v5"
        with:
          context: ".forgejo/workflows/"
          push: true
          build-args: VERSION=${{ github.ref_name  }}
          tags: |
            git.euph.dev/towerdefence/server:${{ github.ref_name }}
            ${{ contains(github.ref_name, 'rc') == false && 'git.euph.dev/towerdefence/server:latest' || '' }}

  release:
    runs-on: stable
    container:
      image: git.euph.dev/actions/runner-basic:latest
    needs:
      - build
      - build-docker
    steps:
      - name: Download Server Jar
        uses: "https://git.euph.dev/actions/download-artifact@v3"
        with:
          name: tower_defence_server.jar
          path: release
      - name: Download API Spec
        uses: "https://git.euph.dev/actions/download-artifact@v3"
        with:
          name: api.yml
          path: release
      - name: Create Release
        uses: "https://git.euph.dev/actions/release@v2"
        with:
          direction: upload
          tag: ${{ github.ref_name }}
          token:  ${{ secrets.DEPLOY_TOKEN }}
          prerelease: ${{ contains( github.ref_name, "rc") }}
          release-dir: release
          release-notes: |
            # Tower Defence - Server ${{ github.ref_name }}
            Read the [Documentation](https://git.euph.dev/TowerDefence/Dokumentation/wiki/Server/Config) to see how to setup the server.