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: Install sccache run: | curl -L https://github.com/mozilla/sccache/releases/download/v0.7.7/sccache-v0.7.7-x86_64-unknown-linux-musl.tar.gz | tar xz mv sccache-v0.7.7-x86_64-unknown-linux-musl/sccache /usr/local/bin/ chmod +x /usr/local/bin/sccache - name: Build Backend env: RUSTC_WRAPPER: sccache SCCACHE_DIR: /home/runner/.cache/sccache 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