name: Deploy Netrunner Core on: push: branches: [main] jobs: build-and-deploy: runs-on: ubuntu-24.04 # Жестко фиксируем ОС сборки steps: - name: Checkout Code uses: actions/checkout@v4 # --- 1. КЭШИРОВАНИЕ И СБОРКА RUST --- - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 - name: Build Backend run: cargo build --release # --- 2. СБОРКА ФРОНТЕНДА --- - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "20" - name: Install pnpm uses: pnpm/action-setup@v3 with: version: 9 - name: Build Frontend run: | cd frontend pnpm install pnpm build # --- 3. ГЕНЕРАЦИЯ .env ФАЙЛА ИЗ СЕКРЕТОВ --- - name: Generate .env run: | cat < .env DATABASE_URL=${{ secrets.DATABASE_URL }} TELOXIDE_TOKEN=${{ secrets.TELOXIDE_TOKEN }} JWT_SECRET=${{ secrets.JWT_SECRET }} DB_PASSWORD=${{ secrets.DB_PASSWORD }} DB_USER=${{ secrets.DB_USER }} DB_NAME=${{ secrets.DB_NAME }} GRAFANA_PASSWORD=${{ secrets.GRAFANA_PASSWORD }} BOT_USERNAME=${{ secrets.BOT_USERNAME }} WEB_APP_BASE_URL=${{ secrets.WEB_APP_BASE_URL }} PORT=8080 FRONTEND_DIR=frontend/dist EOF # --- 4. ОТПРАВКА НА СЕРВЕР --- - name: Copy Files to VPS uses: appleboy/scp-action@master with: host: ${{ secrets.VPS_IP }} username: root key: ${{ secrets.SSH_PRIVATE_KEY }} source: "target/release/netrunner-control-plane,migrations/,docker-compose.yml,Dockerfile,prometheus.yml,frontend/dist/,.env" target: "/root/netrunner-core" strip_components: 0 # --- 5. ЗАПУСК DOCKER НА СЕРВЕРЕ --- - name: Restart Services uses: appleboy/ssh-action@master with: host: ${{ secrets.VPS_IP }} username: root key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /root/netrunner-core # Даем права бинарнику на всякий случай chmod +x target/release/netrunner-control-plane docker compose down # Чистим систему от старых образов, чтобы не забить диск VPS docker image prune -af docker compose up -d --build