name: Concurrency and resource soak audit on: push: paths: - ".gitea/workflows/concurrency-audit.yml" - "ci/concurrency-thresholds.json" - "tools/concurrency-audit/**" - "docs/concurrency-hardening.md" - "crates/libremetaverse/src/client_core.rs" - "crates/libremetaverse/src/download_manager.rs" - "crates/libremetaverse/src/appearance_manager.rs" - "crates/libremetaverse/src/asset_manager.rs" - "crates/libremetaverse/src/inventory_manager.rs" - "crates/libremetaverse-voice-webrtc/**" - "Cargo.toml" - "Cargo.lock" pull_request: paths: - ".gitea/workflows/concurrency-audit.yml" - "ci/concurrency-thresholds.json" - "tools/concurrency-audit/**" - "docs/concurrency-hardening.md" - "crates/libremetaverse/src/client_core.rs" - "crates/libremetaverse/src/download_manager.rs" - "crates/libremetaverse/src/appearance_manager.rs" - "crates/libremetaverse/src/asset_manager.rs" - "crates/libremetaverse/src/inventory_manager.rs" - "crates/libremetaverse-voice-webrtc/**" - "Cargo.toml" - "Cargo.lock" workflow_dispatch: env: CARGO_BUILD_JOBS: 1 CARGO_INCREMENTAL: 0 CARGO_PROFILE_DEV_DEBUG: 0 CARGO_PROFILE_TEST_DEBUG: 0 jobs: soak: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: Install native voice prerequisite run: | sudo apt-get update sudo apt-get install --yes libopus-dev pkg-config - name: Check formatting and focused race regressions run: | cargo fmt --all -- --check cargo test --locked -p libremetaverse --lib shutdown_does_not_hold_service_registry_lock_across_callbacks -j 1 cargo test --locked -p libremetaverse --lib event_registry_isolates_panics_and_releases_subscriptions -j 1 cargo test --locked -p libremetaverse --lib dispatch_isolates_panics_and_does_not_retain_dropped_handlers -j 1 cargo test --locked -p libremetaverse --test caps_http download_queue_applies_backpressure_and_cancellation_drains_every_job -j 1 cargo test --locked -p libremetaverse-voice-webrtc concurrent_provisioning_admits_one_session_without_leaking_the_loser -j 1 - name: Run bounded native soak run: | mkdir -p artifacts cargo run --locked -p metacrate-concurrency-audit -j 1 -- \ --cycles 16 --evidence artifacts/concurrency-audit.json - name: Upload sanitized resource evidence if: always() uses: actions/upload-artifact@v3 with: name: concurrency-audit-evidence path: artifacts/concurrency-audit.json if-no-files-found: error