From 6d8fed9e265fdc3fc6119874caf64f729075e29b Mon Sep 17 00:00:00 2001 From: akrm al-hakimi Date: Mon, 5 Jan 2026 22:28:33 -0600 Subject: [PATCH] feat: docker image for reproducing testing/dev environment This PR allows for spinning up a reproducible environment when developing `nmrs` on non-linux machines. --- Dockerfile | 25 ++++++++++++++++++ docker-compose.yml | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..ffa07b34 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y \ + network-manager \ + dbus \ + build-essential \ + curl \ + && rm -rf /var/lib/apt/lists/* + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +ENV PATH="/root/.cargo/bin:${PATH}" + +RUN mkdir -p /run/dbus + +WORKDIR /app + +COPY Cargo.toml Cargo.lock ./ +COPY nmrs ./nmrs +COPY nmrs-gui ./nmrs-gui + +RUN mkdir -p /run/NetworkManager + +CMD ["sh", "-c", "dbus-daemon --system --fork && sleep 1 && NetworkManager --no-daemon & sleep 3 && cargo test -p nmrs"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..28169c3b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,66 @@ +services: + test: + build: + context: . + dockerfile: Dockerfile + privileged: true + volumes: + - .:/app + - cargo-cache:/root/.cargo/registry + - target-cache:/app/target + environment: + - RUST_BACKTRACE=1 + command: > + bash -c " + dbus-daemon --system --fork && + sleep 1 && + NetworkManager --no-daemon & + sleep 3 && + cargo test -p nmrs + " + + test-all: + build: + context: . + dockerfile: Dockerfile + privileged: true + volumes: + - .:/app + - cargo-cache:/root/.cargo/registry + - target-cache:/app/target + environment: + - RUST_BACKTRACE=1 + command: > + bash -c " + dbus-daemon --system --fork && + sleep 1 && + NetworkManager --no-daemon & + sleep 3 && + cargo test --all + " + + shell: + build: + context: . + dockerfile: Dockerfile + privileged: true + volumes: + - .:/app + - cargo-cache:/root/.cargo/registry + - target-cache:/app/target + environment: + - RUST_BACKTRACE=1 + command: > + bash -c " + dbus-daemon --system --fork && + sleep 1 && + NetworkManager --no-daemon & + sleep 3 && + /bin/bash + " + stdin_open: true + tty: true + +volumes: + cargo-cache: + target-cache: