| #!/bin/bash |
| set -e |
| GIT_ROOT=$(git rev-parse --show-toplevel) |
| |
| port=8080 |
| build_avm=0 |
| build_docker=1 |
| while [[ "$#" -gt 0 ]]; do |
| case $1 in |
| --port) port="$2"; shift ;; |
| --streams_dir) streams_dir="$2"; shift ;; |
| --avm_build_dir) build_avm=0; avm_build_dir="$2"; shift ;; |
| --build_avm_standalone) build_avm=1 ;; |
| --nobuild) build_docker=0 ;; |
| *) echo "Unknown arg: $1"; exit 1 ;; |
| esac |
| shift |
| done |
| |
| if [[ -z ${streams_dir} ]]; then |
| echo "Usage: ./launch_server_docker.sh --streams_dir <STREAMS_PATH> [--nobuild] [--avm_build_dir <CUSTOM_AVM_BUILD_DIR>] [--port <PORT>] [--build_avm_standalone]" |
| exit 1 |
| fi |
| # Note: When switching between local and docker builds, there may be permissions errors on the streams dir since the file owner with docker will be root. |
| # Wiping the dir before switching is recommended. |
| mkdir -p ${streams_dir} |
| |
| if [[ ${build_docker} -eq 1 ]]; then |
| # Build the runtime base image first. This contains no Rust dependencies, only what's needed to build libavm. |
| docker build -t avm_analyzer_runtime -f Dockerfile.runtime ${GIT_ROOT} |
| docker build -t avm_analyzer -f Dockerfile.builder ${GIT_ROOT} |
| fi |
| |
| if [[ ${build_avm} -eq 1 ]]; then |
| ./build_avm_docker.sh --avm_build_dir ${avm_build_dir} |
| fi |
| |
| avm_build_dir_mount=() |
| if [[ -n ${avm_build_dir} ]]; then |
| avm_build_dir_mount=("-v $(realpath ${avm_build_dir}):/avm_build:ro") |
| fi |
| |
| SERVER_CMD="/app/avm-analyzer-server --extract-proto /avm_build/extract_proto\ |
| --dump-obu /avm_build/tools/dump_obu --working-dir /streams\ |
| --frontend-root /app/dist --ip 0.0.0.0 --port 8080" |
| |
| |
| docker run -it --init --rm -p 127.0.0.1:${port}:8080 -v ${streams_dir}:/streams ${avm_build_dir_mount[@]} avm_analyzer ${SERVER_CMD} |