name: Deploy Production Server

# Only run the workflow when a PR is merged on main and closed
on:
  pull_request:
    types:
      - closed
    branches:
      - 'master'

# Here we check that the PR was correctly merged to main
jobs:
  if_merged:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17.0.12'
          distribution: 'graalvm'
          cache: 'maven'

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'
          cache-dependency-path: src/main/webapp/package-lock.json

      - name: Build frontend
        run: |
          echo "${{ vars.VITE_ENV }}" > src/main/webapp/.env
          cd src/main/webapp
          npm install
          npm run build
          cd ../../..

      - name: Inject frontend in backend
        run: |
          rm -rf src/main/resources/META-INF/resources
          mkdir -p src/main/resources/META-INF/
          mv src/main/webapp/dist src/main/resources/META-INF/resources

      - name: Build backend make_pdf tool
        run: |
          chmod 740 mvnw
          cd src/main/pdf_gen
          ../../../mvnw clean compile assembly:single
          cd ../../..

      - name: Build backend
        run: |
          chmod 740 mvnw
          ./mvnw package -Pnative -DskipTests

      - name: Copy runner to vps via scp
        uses: appleboy/scp-action@v0.1.7 # Latest in date when creating the workflow
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.SSH_USER }}
          port: ${{ secrets.SSH_PORT }}
          key: ${{ secrets.SSH_KEY }}
          source: "target/*-runner,src/main/resources/cacerts,src/main/docker/Dockerfile.native,docker-compose.yml,.dockerignore,src/main/pdf_gen/target/pdf_gen-*.jar"
          target: ${{ secrets.TARGET_DIR }} # Need to create it first on the VPS

      - name: Re-start ffsaf container
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.SSH_USER }}
          port: ${{ secrets.SSH_PORT }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd ${{ secrets.TARGET_DIR }}
            docker logs ffsaf > "log/ffsaf_logs_$(date +"%Y-%m-%d_%H-%M-%S").log" 2>&1
            docker stop ffsaf
            docker rm ffsaf
            docker compose up --build -d ffsaf

      - name: Check ffsaf container
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.SSH_USER }}
          port: ${{ secrets.SSH_PORT }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            if docker ps | grep ffsaf; then
              echo 'Container is running'
            else
              echo 'Container is not running'
              exit 1 # This mark the pipeline as failed
            fi