on:
  push:
    branches:
      - "release"

jobs:
  Frontend-Tests:
    name: Frontend Tests
    runs-on: ubuntu-22.04
    timeout-minutes: 20
    steps:
      - name: 🔎 Check out repository code ...
        uses: actions/checkout@v4

      - name: ⏳ Setting Up Node ...
        uses: actions/setup-node@v4
        with:
          node-version: 18

      - name: ⏳ setting environment ...
        run: npm i

      - name: 🖥 typecheck Widget ...
        run: cd widget && npm run typecheck

      - name: 🖥 typecheck Frontend ...
        run: cd frontend && npm run typecheck

      - name: 🖋️ ESLint checks for widget ...
        run: cd widget && npm run lint

      - name: 🖋️ ESLint checks for Frontend ...
        run: cd frontend && npm run lint

      - name: 🛠️ build Widget ...
        run: cd widget && npm run build

      - name: 🛠️ build Frontend ...
        run: cd frontend && npm run build

  API-Tests:
    name: API Tests
    runs-on: ubuntu-22.04
    timeout-minutes: 20
    steps:
      - name: 🔎 Check out repository code ...
        uses: actions/checkout@v4

      - name: ⏳ Setting Up Node ...
        uses: actions/setup-node@v4
        with:
          node-version: 18

      - name: ⏳ setting environment for API ...
        run: cd api && npm i

      - name: 🖥 typecheck API ...
        run: cd api && npm run typecheck

      - name: 🖋️ ESLint checks for API ...
        run: cd api && npm run lint

      - name: 🔬 running unit tests for API ...
        run: cd api && npm run test

  build:
    name: Build (Release Branch)
    runs-on: ubuntu-latest
    needs: [Frontend-Tests, API-Tests] # Ensure build runs only if tests pass

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: executing remote ssh commands
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          username: ${{ secrets.SSH_USER }}
          script: |
            cd /home/***/hexabot
            git checkout release
            git pull origin release
            make stop NLU=1 
            make start NLU=1