name: Deploy to Test
on:
  push
    branches: dev

jobs:
  deploy:
    runs-on: [self-hosted, php-7.3]
    timeout-minutes: 20  # 延长超时时间[1](@ref)

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

      - name: Install SSH tools
        run: |
          sudo apt-get update && sudo apt-get install -y openssh-client rsync

      - name: Configure SSH
        env:
          SSH_PRIVATE_KEY: ${{ secrets.TEST_SSH_KEY }}
        run: |
          SSH_DIR="/home/runner/.ssh"
          mkdir -p $SSH_DIR
          echo "$SSH_PRIVATE_KEY" > $SSH_DIR/id_rsa
          chmod 700 $SSH_DIR
          chmod 600 $SSH_DIR/id_rsa
          ssh-keyscan 43.142.97.39 >> $SSH_DIR/known_hosts

      - name: Sync code
        run: |
          rsync -avz --delete --exclude=".env" \
            -e "ssh -o StrictHostKeyChecking=no -i /home/runner/.ssh/id_rsa" \
            ./ deploy-user@43.142.97.39:/data/laravel_test/

      - name: Deploy containers
        env:
          COMPOSE_PROJECT: "laravel_test"
        run: |
          ssh -i /home/runner/.ssh/id_rsa deploy-user@43.142.97.39 << 'EOF'
          cd /data/laravel_test

          # 使用docker-compose插件模式
          docker compose -p $COMPOSE_PROJECT down --volumes
          docker compose -p $COMPOSE_PROJECT up -d --build

          # 等待容器启动
          sleep 10

          docker exec ${COMPOSE_PROJECT}-php-1 php artisan config:cache
          docker exec ${COMPOSE_PROJECT}-php-1 php artisan migrate --force
          docker exec ${COMPOSE_PROJECT}-nginx-1 nginx -s reload
          EOF