# Jenkins Build And Deploy Runbook ## Build artifact `lm-livekit-helper` should be deployed as its own artifact. It is not part of the LiveKit server image and does not modify LiveKit source code. Recommended Jenkins build steps: 1. Checkout `lm-livekit-helper`. 2. Run lightweight checks: ```bash cargo fmt --check ``` 3. Build Docker image: ```bash docker build -t ${HELPER_IMAGE}:${GIT_COMMIT} . ``` 4. Push image to the internal registry. 5. Record the image tag in Jenkins build metadata. Full host `cargo check` is not required for every commit until the Rust toolchain and WebRTC native dependency cache are fixed. Docker image build is the deployment verification path. ## Runtime integration `lmrobot-app` starts the helper through runtime configuration. A staging deployment should provide: ```bash COMBRABO_VOICE_RUNTIME_WORKDIR=/opt/lmrobot/lm-livekit-helper COMBRABO_VOICE_RUNTIME_LAUNCH_COMMAND=/opt/lmrobot/lm-livekit-helper/run-local.sh COMBRABO_VOICE_RUNTIME_HELPER_MODE=docker COMBRABO_VOICE_RUNTIME_HELPER_IMAGE=${HELPER_IMAGE}:${GIT_COMMIT} ``` LiveKit connection material remains generated by `lmrobot-app` for each call and is injected as `CV_*` variables when launching the helper. ## Staging smoke After deploying a new helper image, run the minimal smoke: 1. SDK token exchange through the staging token provider. 2. `call-greetings/prepare` returns `READY`. 3. `calls/start` with `greetingId` returns success. 4. Activity contains: - `runtime_start_requested` - `runtime_ready` - `bot_participant_joined` - `bot_track_ready` - `greeting_consumed` 5. `calls/end` returns success. For S7 bidirectional smoke, additionally require: - `turn_bridge_requested` - `turn_bridge_completed` - `bot_reply_audio_write_started` - `bot_reply_audio_write_finished` - `turn_completed` ## Rollback Rollback is helper-image level first: 1. Switch `COMBRABO_VOICE_RUNTIME_HELPER_IMAGE` to the previous known-good tag. 2. Restart affected `lmrobot-app` runtime if it keeps helper launch config in process env. 3. Re-run the minimal smoke. If rollback does not recover, disable Combrabo Voice feature flag on `lmrobot-app` side and keep LiveKit server unchanged.