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 with: shared-key: "netrunner-v2" cache-targets: "true" - 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: | printf "DATABASE_URL=%s\n" "${{ secrets.DATABASE_URL }}" > .env printf "TELOXIDE_TOKEN=%s\n" "${{ secrets.TELOXIDE_TOKEN }}" >> .env printf "JWT_SECRET=%s\n" "${{ secrets.JWT_SECRET }}" >> .env printf "DB_PASSWORD=%s\n" "${{ secrets.DB_PASSWORD }}" >> .env printf "DB_USER=%s\n" "${{ secrets.DB_USER }}" >> .env printf "DB_NAME=%s\n" "${{ secrets.DB_NAME }}" >> .env printf "GRAFANA_PASSWORD=%s\n" "${{ secrets.GRAFANA_PASSWORD }}" >> .env printf "BOT_USERNAME=%s\n" "${{ secrets.BOT_USERNAME }}" >> .env printf "WEB_APP_BASE_URL=%s\n" "${{ secrets.WEB_APP_BASE_URL }}" >> .env printf "PORT=8080\n" >> .env printf "FRONTEND_DIR=frontend/dist\n" >> .env # --- 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 --remove-orphans docker rm -f netrunner-app netrunner-db netrunner-redis netrunner-prometheus netrunner-grafana || true docker image prune -af chown -R root:root /root/netrunner-core chmod 600 .env docker compose up -d --build