name: Build and Test on: push: branches: - main - develop pull_request: branches: - main jobs: build-server: name: Build Server (Linux) runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable target: x86_64-unknown-linux-gnu override: true components: rustfmt, clippy - name: Cache Cargo dependencies uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-server-${{ hashFiles('server/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-server- - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y pkg-config libssl-dev protobuf-compiler - name: Check formatting run: cd server && cargo fmt --all -- --check - name: Run Clippy run: cd server && cargo clippy --all-targets --all-features -- -D warnings - name: Build server run: | cd server cargo build --release --target x86_64-unknown-linux-gnu - name: Run tests run: | cd server cargo test --release - name: Upload server binary uses: actions/upload-artifact@v3 with: name: guruconnect-server-linux path: server/target/x86_64-unknown-linux-gnu/release/guruconnect-server retention-days: 30 build-agent: name: Build Agent (Windows) runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable target: x86_64-pc-windows-msvc override: true - name: Install cross-compilation tools run: | sudo apt-get update sudo apt-get install -y mingw-w64 - name: Cache Cargo dependencies uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-agent-${{ hashFiles('agent/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-agent- - name: Build agent (cross-compile for Windows) run: | rustup target add x86_64-pc-windows-gnu cd agent cargo build --release --target x86_64-pc-windows-gnu - name: Upload agent binary uses: actions/upload-artifact@v3 with: name: guruconnect-agent-windows path: agent/target/x86_64-pc-windows-gnu/release/guruconnect.exe retention-days: 30 security-audit: name: Security Audit runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable - name: Install cargo-audit run: cargo install cargo-audit - name: Run security audit on server run: cd server && cargo audit - name: Run security audit on agent run: cd agent && cargo audit build-summary: name: Build Summary runs-on: ubuntu-latest needs: [build-server, build-agent, security-audit] steps: - name: Build succeeded run: | echo "All builds completed successfully" echo "Server: Linux x86_64" echo "Agent: Windows x86_64" echo "Security: Passed"