docs: rewrite README following PulseEngine org conventions #160
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| pull_request: | |
| branches: [ main, master, develop ] | |
| push: | |
| branches: [ main, master, develop ] | |
| env: | |
| RUST_VERSION: "stable" | |
| jobs: | |
| # ============================================================================ | |
| # RUST IMPLEMENTATION CI JOBS | |
| # ============================================================================ | |
| rust-lint: | |
| name: Rust Lint & Format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ env.RUST_VERSION }} | |
| components: rustfmt, clippy | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Check Rust formatting | |
| run: cargo fmt --all -- --check | |
| - name: Run Clippy linter | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| - name: Check for unused dependencies | |
| run: | | |
| cargo install cargo-machete || true | |
| cargo machete || true | |
| rust-test: | |
| name: Rust Tests | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| rust: ["1.85", "1.94", "stable"] # 1.85 is MSRV for Rust 2024 edition | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain ${{ matrix.rust }} | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ matrix.rust }} | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run unit tests | |
| run: cargo test --lib --verbose | |
| env: | |
| RUST_BACKTRACE: 1 | |
| - name: Run integration tests | |
| run: cargo test --tests --features "test-utils" --verbose | |
| env: | |
| RUST_BACKTRACE: 1 | |
| - name: Free disk space before all-features test | |
| run: | | |
| cargo clean | |
| df -h | |
| - name: Test library with all features | |
| run: cargo test --lib --all-features --verbose | |
| env: | |
| RUST_BACKTRACE: 1 | |
| rust-build: | |
| name: Rust Build | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ env.RUST_VERSION }} | |
| targets: ${{ matrix.target }} | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Build debug binary | |
| run: cargo build --verbose | |
| - name: Build release binary | |
| run: cargo build --release --verbose | |
| - name: Test binary startup (Linux) | |
| if: runner.os == 'Linux' | |
| run: | | |
| timeout 10s ./target/release/loxone-mcp-server --help | |
| exit_code=$? | |
| if [ $exit_code -eq 124 ]; then | |
| echo "✅ Binary started successfully (timeout expected)" | |
| elif [ $exit_code -eq 0 ]; then | |
| echo "✅ Binary help command worked" | |
| else | |
| echo "❌ Binary startup failed with exit code $exit_code" | |
| exit 1 | |
| fi | |
| - name: Test binary startup (macOS) | |
| if: runner.os == 'macOS' | |
| run: | | |
| echo "✅ Binary build completed successfully (server startup test skipped on macOS)" | |
| - name: Test binary startup (Windows) | |
| if: runner.os == 'Windows' | |
| run: | | |
| echo "✅ Binary build completed successfully (server startup test skipped on Windows)" | |
| - name: Upload release artifacts | |
| if: matrix.os == 'ubuntu-latest' | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: rust-binary-${{ matrix.target }} | |
| path: target/release/loxone-mcp-server* | |
| rust-security: | |
| name: Rust Security Audit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ env.RUST_VERSION }} | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Install cargo-audit | |
| run: cargo install cargo-audit | |
| - name: Run security audit | |
| run: cargo audit --ignore RUSTSEC-2025-0134 | |
| - name: Check for unsafe code blocks | |
| run: | | |
| if grep -r "unsafe" src/ --include="*.rs"; then | |
| echo "⚠️ Found unsafe blocks - please review for security implications" | |
| else | |
| echo "✅ No unsafe blocks found" | |
| fi | |
| # rust-wasm: | |
| # name: Rust WASM Build | |
| # runs-on: ubuntu-latest | |
| # defaults: | |
| # run: | |
| # working-directory: ./loxone-mcp-rust | |
| # steps: | |
| # - uses: actions/checkout@v6 | |
| # | |
| # - name: Install Rust toolchain | |
| # uses: dtolnay/rust-toolchain@stable | |
| # with: | |
| # toolchain: ${{ env.RUST_VERSION }} | |
| # targets: wasm32-wasip2 | |
| # - name: Cache Rust dependencies | |
| # uses: Swatinem/rust-cache@v2 | |
| # with: | |
| # workspaces: loxone-mcp-rust | |
| # - name: Install wasmtime | |
| # run: | | |
| # curl https://wasmtime.dev/install.sh -sSf | bash | |
| # echo "$HOME/.wasmtime/bin" >> $GITHUB_PATH | |
| # - name: Build WASM target | |
| # run: cargo build --target wasm32-wasip2 --release --verbose | |
| # - name: Test WASM binary | |
| # run: | | |
| # # Test that WASM binary can be loaded | |
| # wasmtime --version | |
| # echo "✅ WASM binary built successfully" | |
| # ls -la target/wasm32-wasip2/release/ | |
| # - name: Upload WASM artifacts | |
| # uses: actions/upload-artifact@v7 | |
| # with: | |
| # name: rust-wasm-binary | |
| # path: target/wasm32-wasip2/release/*.wasm | |
| rust-performance: | |
| name: Rust Performance Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ env.RUST_VERSION }} | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Install cargo-criterion | |
| run: cargo install cargo-criterion || echo "Failed to install cargo-criterion, skipping" | |
| - name: Run benchmark tests | |
| run: | | |
| if command -v cargo-criterion &> /dev/null; then | |
| cargo criterion || echo "No benchmarks found, skipping" | |
| else | |
| echo "Cargo-criterion not available, running basic performance test" | |
| cargo test --release bench -- --nocapture || echo "No benchmark tests found" | |
| fi | |
| - name: Memory usage test | |
| run: | | |
| # Build and check binary size | |
| cargo build --release | |
| ls -lh target/release/loxone-mcp-server* | |
| echo "✅ Binary size check completed" | |
| rust-documentation: | |
| name: Rust Documentation | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ env.RUST_VERSION }} | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Generate documentation | |
| run: cargo doc --all-features --no-deps --verbose | |
| - name: Check for missing documentation | |
| run: | | |
| cargo doc --all-features --no-deps 2>&1 | tee doc_output.txt | |
| if grep -i "warning.*missing documentation" doc_output.txt; then | |
| echo "⚠️ Found missing documentation warnings" | |
| else | |
| echo "✅ Documentation checks passed" | |
| fi | |
| - name: Upload documentation | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: rust-documentation | |
| path: target/doc/ | |
| # Rust integration test | |
| integration-test: | |
| name: Rust Integration Test | |
| runs-on: ubuntu-latest | |
| needs: [rust-build] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ env.RUST_VERSION }} | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Build Rust binary | |
| run: cargo build --release | |
| - name: Test Rust MCP server functionality | |
| run: | | |
| echo "=== Rust MCP Server Tests ===" | |
| ./target/release/loxone-mcp-server --help | head -10 | |
| echo "✅ Rust MCP server help command works" | |
| - name: Test server startup modes | |
| run: | | |
| echo "=== Testing different server modes ===" | |
| # Test that different modes are recognized (will fail on credentials but should parse args) | |
| timeout 5s ./target/release/loxone-mcp-server stdio || echo "✅ stdio mode recognized" | |
| timeout 5s ./target/release/loxone-mcp-server http || echo "✅ http mode recognized" | |
| echo "✅ Server mode parsing functional" | |
| - name: Validate MCP protocol compliance | |
| run: | | |
| echo "=== MCP Protocol Validation ===" | |
| # Basic validation that server can start and respond to help | |
| ./target/release/loxone-mcp-server --version 2>/dev/null || echo "Version check attempted" | |
| echo "✅ Rust MCP server integration tests completed" |