name: Deploy to production on: push: branches: - main jobs: deploy: name: SSH deploy to VPS runs-on: ubuntu-latest timeout-minutes: 15 steps: - name: Deploy via SSH uses: appleboy/ssh-action@v1.2.0 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: 1220 script_stop: true script: | set -euo pipefail PROJECT_DIR="/opt/03-business/Axil" COMPOSE_FILE="$PROJECT_DIR/docker-compose.prod.yml" ENV_FILE="$PROJECT_DIR/.env.production" echo "▶ Pulling latest code..." git -C "$PROJECT_DIR" fetch --all git -C "$PROJECT_DIR" reset --hard origin/main echo "▶ Building Docker image..." docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build --pull echo "▶ Restarting containers..." docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d --remove-orphans echo "▶ Pruning unused images..." docker image prune -f echo "✓ Deploy complete — $(git -C "$PROJECT_DIR" rev-parse --short HEAD)"