| | |
| | | set -euo pipefail
|
| | |
|
| | | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| | | WORKSPACE_ROOT="${COMBRABO_VOICE_RUNTIME_HELPER_WORKDIR:-${SCRIPT_DIR}}" |
| | | WORKSPACE_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" |
| | | MANIFEST_PATH="${SCRIPT_DIR}/Cargo.toml" |
| | | BINARY_PATH="${SCRIPT_DIR}/target/release/combrabo-voice-runtime-helper" |
| | | DOCKERFILE_PATH="${SCRIPT_DIR}/Dockerfile"
|
| | |
| | | printf '%s' "${url}"
|
| | | }
|
| | |
|
| | | rewrite_http_url_for_docker() { |
| | | local url="$1" |
| | | if [[ "${url}" =~ ^(http|https)://(127\.0\.0\.1|localhost)([:/].*)?$ ]]; then |
| | | printf '%s://host.docker.internal%s' "${BASH_REMATCH[1]}" "${BASH_REMATCH[3]:-}" |
| | | return 0 |
| | | fi |
| | | printf '%s' "${url}" |
| | | } |
| | | |
| | | is_truthy() { |
| | | case "${1:-}" in |
| | | true|TRUE|1|yes|YES|on|ON) |
| | | return 0 |
| | | ;; |
| | | *) |
| | | return 1 |
| | | ;; |
| | | esac |
| | | } |
| | | |
| | | docker_service_host() { |
| | | local bind_addr="${1:-127.0.0.1:18080}" |
| | | if [[ "${bind_addr}" =~ ^([^:]+):([0-9]+)$ ]]; then |
| | | printf '%s' "${BASH_REMATCH[1]}" |
| | | return 0 |
| | | fi |
| | | printf '%s' "127.0.0.1" |
| | | } |
| | | |
| | | docker_service_port() { |
| | | local bind_addr="${1:-127.0.0.1:18080}" |
| | | if [[ "${bind_addr}" =~ ^([^:]+):([0-9]+)$ ]]; then |
| | | printf '%s' "${BASH_REMATCH[2]}" |
| | | return 0 |
| | | fi |
| | | printf '%s' "18080" |
| | | } |
| | | |
| | | run_host() {
|
| | | if [[ ! -x "${BINARY_PATH}" ]]; then
|
| | | prepare_host
|
| | |
| | | -e CV_GREETING_AUDIO_FILE |
| | | -e CV_GREETING_AUDIO_URL |
| | | -e CV_GREETING_TEXT |
| | | -e CV_ROLE_ID |
| | | -e CV_DEVICE_OUTPUT_SMOKE_ENABLED |
| | | -e CV_DEVICE_OUTPUT_DESTINATION_IDENTITIES |
| | | -e CV_AUDIO_DEBUG_DUMP_DIR |
| | | -e CV_ENABLE_USER_AUDIO_OBSERVER |
| | | -e CV_ENABLE_SIMPLE_VAD |
| | | -e CV_VAD_RMS_THRESHOLD |
| | | -e CV_VAD_PEAK_THRESHOLD |
| | | -e CV_VAD_START_FRAMES |
| | | -e CV_VAD_END_SILENCE_MS |
| | | -e CV_VAD_MIN_SPEECH_MS |
| | | -e CV_VAD_MAX_TURN_MS |
| | | -e CV_VAD_INITIAL_IGNORE_MS |
| | | -e CV_VAD_GATE_UNTIL_GREETING_DONE |
| | | -e CV_VAD_POST_GREETING_DELAY_MS |
| | | -e CV_RUNTIME_TURN_BRIDGE_URL |
| | | -e CV_RUNTIME_TURN_BRIDGE_TOKEN |
| | | -e CV_RUNTIME_TURN_ARTIFACT_DIR |
| | | -e CV_RUNTIME_SESSION_NONCE |
| | | -e CV_HELPER_SERVICE_ENABLED |
| | | -e CV_HELPER_SERVICE_BIND |
| | | -e CV_HELPER_AUTH_TOKEN |
| | | -e CV_HELPER_AUTH_TOKEN_LOCAL_DEV |
| | | -e CV_TURN_BRIDGE_TOKEN_LOCAL_DEV |
| | | -e CV_HELPER_AUTH_TOKEN_DEV |
| | | -e CV_TURN_BRIDGE_TOKEN_DEV |
| | | ) |
| | | if is_truthy "${CV_HELPER_SERVICE_ENABLED:-}"; then |
| | | local service_bind service_host service_port |
| | | service_bind="${CV_HELPER_SERVICE_BIND:-127.0.0.1:18080}" |
| | | service_host="$(docker_service_host "${service_bind}")" |
| | | service_port="$(docker_service_port "${service_bind}")" |
| | | export CV_HELPER_SERVICE_BIND="0.0.0.0:${service_port}" |
| | | docker_args+=(-p "${service_host}:${service_port}:${service_port}") |
| | | fi |
| | | if [[ -n "${livekit_url}" ]]; then
|
| | | export CV_LIVEKIT_URL="$(rewrite_livekit_url_for_docker "${livekit_url}")"
|
| | | fi |
| | | if [[ -n "${CV_RUNTIME_TURN_BRIDGE_URL:-}" ]]; then |
| | | export CV_RUNTIME_TURN_BRIDGE_URL="$(rewrite_http_url_for_docker "${CV_RUNTIME_TURN_BRIDGE_URL}")" |
| | | fi
|
| | | if [[ -n "${CV_GREETING_AUDIO_FILE:-}" && -f "${CV_GREETING_AUDIO_FILE}" ]]; then
|
| | | local audio_parent
|
| | |
| | | docker_args+=(-v "${audio_parent}:${audio_parent}:ro")
|
| | | fi
|
| | | fi
|
| | | if [[ -n "${CV_AUDIO_DEBUG_DUMP_DIR:-}" ]]; then |
| | | mkdir -p "${CV_AUDIO_DEBUG_DUMP_DIR}" |
| | | local debug_dump_dir |
| | | debug_dump_dir="$(cd "${CV_AUDIO_DEBUG_DUMP_DIR}" && pwd)" |
| | | export CV_AUDIO_DEBUG_DUMP_DIR="${debug_dump_dir}" |
| | | if [[ "${debug_dump_dir}" != "${WORKSPACE_ROOT}" && "${debug_dump_dir}" != "${WORKSPACE_ROOT}/"* ]]; then |
| | | docker_args+=(-v "${debug_dump_dir}:${debug_dump_dir}") |
| | | fi |
| | | fi |
| | | if [[ -n "${CV_RUNTIME_TURN_ARTIFACT_DIR:-}" ]]; then |
| | | mkdir -p "${CV_RUNTIME_TURN_ARTIFACT_DIR}" |
| | | local turn_artifact_dir |
| | | turn_artifact_dir="$(cd "${CV_RUNTIME_TURN_ARTIFACT_DIR}" && pwd)" |
| | | export CV_RUNTIME_TURN_ARTIFACT_DIR="${turn_artifact_dir}" |
| | | if [[ "${turn_artifact_dir}" != "${WORKSPACE_ROOT}" && "${turn_artifact_dir}" != "${WORKSPACE_ROOT}/"* ]]; then |
| | | docker_args+=(-v "${turn_artifact_dir}:${turn_artifact_dir}") |
| | | fi |
| | | fi |
| | | exec docker run "${docker_args[@]}" "${IMAGE_NAME}"
|
| | | }
|
| | |
|