name: "Quality Check"

on:
  - push
  - pull_request

jobs:
  oas:
    name: "Validate OAS"
    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: "Validate OAS Spec"
        run: gradle validateSwagger
      - name: "Stop Gradle"
        run: gradle --stop

  linting:
    name: "Linting"
    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: "Generate OAS Boilerplate"
        run: gradle generateSwaggerCode
      - name: "Linting Main"
        run: gradle checkstyleMain
      - name: "Linting Test"
        run: gradle checkstyleTest
      - name: "Stop Gradle"
        run: gradle --stop

  static:
    name: "Static Analysis"
    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: "Generate OAS Boilerplate"
        run: gradle generateSwaggerCode
      - name: "Static Analysis Main"
        run: gradle spotbugsMain
      - name: "Static Analysis Test"
        run: gradle spotbugsTest
      - name: "Stop Gradle"
        run: gradle --stop

  test:
    name: "Testing"
    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: "Generate OAS Boilerplate"
        run: gradle generateSwaggerCode
      - name: "Run Tests"
        run: gradle test
      - name: "Stop Gradle"
        run: gradle --stop