name: Test Tooltip Component on: push: branches: [ main, develop ] paths: - 'packages/*/tooltip/**' - 'tests/tooltip_integration_test.rs' - 'scripts/test_tooltip.sh' - '.github/workflows/test-tooltip.yml' pull_request: branches: [ main ] paths: - 'packages/*/tooltip/**' - 'tests/tooltip_integration_test.rs' - 'scripts/test_tooltip.sh' - '.github/workflows/test-tooltip.yml' env: CARGO_TERM_COLOR: always RUST_BACKTRACE: 1 jobs: test-tooltip: name: Test Tooltip Component runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown components: clippy, rustfmt - name: Install wasm-pack uses: jetli/wasm-pack-action@v0.4.0 with: version: 'latest' - name: Cache cargo registry uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo build uses: actions/cache@v4 with: path: target key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} - name: Install Node.js uses: actions/setup-node@v4 with: node-version: '18' - name: Run comprehensive tooltip tests run: ./scripts/test_tooltip.sh test-browser: name: Browser Compatibility Tests runs-on: ubuntu-latest strategy: matrix: browser: [firefox, chrome] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown - name: Install wasm-pack uses: jetli/wasm-pack-action@v0.4.0 with: version: 'latest' - name: Install Chrome if: matrix.browser == 'chrome' uses: browser-actions/setup-chrome@latest - name: Install Firefox if: matrix.browser == 'firefox' uses: browser-actions/setup-firefox@latest - name: Cache cargo registry uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Test Yew Tooltip in ${{ matrix.browser }} working-directory: packages/yew/tooltip run: | if [ "${{ matrix.browser }}" == "chrome" ]; then wasm-pack test --headless --chrome else wasm-pack test --headless --firefox fi - name: Test Leptos Tooltip in ${{ matrix.browser }} working-directory: packages/leptos/tooltip run: | if [ "${{ matrix.browser }}" == "chrome" ]; then wasm-pack test --headless --chrome else wasm-pack test --headless --firefox fi test-examples: name: Example Applications runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Cache cargo registry uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Test Leptos examples if: hashFiles('book-examples/leptos/Cargo.toml') != '' working-directory: book-examples/leptos run: cargo check - name: Test Yew examples if: hashFiles('book-examples/yew/Cargo.toml') != '' working-directory: book-examples/yew run: cargo check - name: Build example documentation run: | if [ -d book-examples ]; then cargo doc --no-deps --workspace fi lint-and-format: name: Code Quality Checks runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - name: Cache cargo registry uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Check formatting run: | cargo fmt --check -p shadcn-ui-yew-tooltip -p shadcn-ui-leptos-tooltip - name: Run Clippy run: | cargo clippy -p shadcn-ui-yew-tooltip -p shadcn-ui-leptos-tooltip -- -D warnings - name: Check documentation run: | cargo doc --no-deps -p shadcn-ui-yew-tooltip -p shadcn-ui-leptos-tooltip security-audit: name: Security Vulnerability Scan runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Install cargo-audit run: cargo install cargo-audit - name: Run security audit run: cargo audit - name: Check for known security vulnerabilities run: | # Check for vulnerable dependencies cargo audit --deny warnings performance-benchmark: name: Performance Benchmarks runs-on: ubuntu-latest if: github.event_name == 'pull_request' steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown - name: Install wasm-pack uses: jetli/wasm-pack-action@v0.4.0 with: version: 'latest' - name: Cache cargo registry uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Build optimized WASM bundles run: | cd packages/yew/tooltip wasm-pack build --target web --out-dir ../../../dist/yew-tooltip cd ../../leptos/tooltip wasm-pack build --target web --out-dir ../../../dist/leptos-tooltip - name: Measure bundle sizes run: | echo "Bundle size analysis:" if [ -d dist ]; then find dist -name "*.wasm" -exec ls -lh {} \; find dist -name "*.js" -exec ls -lh {} \; fi - name: Comment PR with bundle sizes if: github.event_name == 'pull_request' uses: actions/github-script@v7 with: script: | const fs = require('fs'); const path = require('path'); // This would analyze bundle sizes and comment on PR // Implementation depends on specific bundle analysis needs console.log('Bundle size analysis completed'); accessibility-audit: name: Accessibility Compliance runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown - name: Install wasm-pack uses: jetli/wasm-pack-action@v0.4.0 with: version: 'latest' - name: Install Node.js uses: actions/setup-node@v4 with: node-version: '18' - name: Install accessibility testing tools run: | npm install -g @axe-core/cli npm install -g lighthouse - name: Build test applications run: | # This would build test applications for accessibility testing echo "Building accessibility test applications..." - name: Run accessibility tests run: | # This would run axe-core and other accessibility tests echo "Running accessibility compliance tests..." - name: Generate accessibility report run: | echo "Generating accessibility compliance report..."