name: deploy

on:
  push:
    branches:
      - main

jobs:
  qa:
    name: QA gates
    runs-on: ubuntu-latest
    env:
      COMPOSE_PROJECT_NAME: breadcrumb-ci
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Create .env for CI
        run: cp .env.example .env

      - name: Start project services
        run: |
          docker compose down --remove-orphans 2>/dev/null || true
          docker compose up -d --force-recreate php db memcached
          sleep 15

      - name: Install Composer dependencies
        run: docker compose exec -T php bash -c "composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader"

      - name: Run required QA gates
        run: bin/qa-required.sh

  build-and-deploy:
    name: Build & deploy
    runs-on: ubuntu-latest
    needs: qa
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Build production image
        run: |
          docker build \
            --target prod \
            -f docker/php/Dockerfile \
            -t breadcrumb-the-shire:latest \
            .

      - name: Export image to tar.gz
        run: docker save breadcrumb-the-shire:latest | gzip > breadcrumb-the-shire.tar.gz

      - name: Copy image to server
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.DEPLOY_HOST }}
          username: ${{ secrets.DEPLOY_USER }}
          key: ${{ secrets.DEPLOY_SSH_KEY }}
          source: breadcrumb-the-shire.tar.gz
          target: /root/dockerfiles-breadcrumb-infra/projects/

      - name: Copy updated deploy files to server
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.DEPLOY_HOST }}
          username: ${{ secrets.DEPLOY_USER }}
          key: ${{ secrets.DEPLOY_SSH_KEY }}
          source: "deploy/docker-compose.yml,deploy/nginx/"
          target: /root/dockerfiles-breadcrumb-infra/projects/
          strip_components: 1

      - name: Deploy on server
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.DEPLOY_HOST }}
          username: ${{ secrets.DEPLOY_USER }}
          key: ${{ secrets.DEPLOY_SSH_KEY }}
          script: |
            set -e
            cd /root/dockerfiles-breadcrumb-infra/projects

            echo "=== Load image ==="
            docker load < breadcrumb-the-shire.tar.gz
            rm breadcrumb-the-shire.tar.gz

            echo "=== Restart containers ==="
            docker compose up -d --remove-orphans

            echo "=== Wait for PHP container ==="
            sleep 5

            echo "=== Run module sync ==="
            docker compose exec -T php php bin/console module:sync

            echo "=== Done ==="
