nata 0.1.0

Network packet manipulation toolkit
Documentation
# syntax=docker/dockerfile:1.7

FROM node:24-bookworm-slim AS node-runtime

FROM rust:1.88-slim-bookworm AS nata-build

ARG STABLE_TOOLCHAIN=stable
ARG MSRV_TOOLCHAIN=1.88.0
ARG BETA_TOOLCHAIN=beta
ARG JUST_VERSION=1.58.0
ARG WASM_PACK_VERSION=0.15.0
ARG CARGO_LLVM_COV_VERSION=0.8.7
ARG USER_UID=1000
ARG USER_GID=1000

COPY --from=node-runtime /usr/local/bin/node /usr/local/bin/node

RUN apt-get update \
    && apt-get install --yes --no-install-recommends \
        libpcap-dev \
        pkg-config \
    && rm -rf /var/lib/apt/lists/*

RUN rustup toolchain install "${MSRV_TOOLCHAIN}" --profile minimal \
    && rustup toolchain install "${STABLE_TOOLCHAIN}" --profile minimal \
    && rustup toolchain install "${BETA_TOOLCHAIN}" --profile minimal \
    && for toolchain in "${MSRV_TOOLCHAIN}" "${STABLE_TOOLCHAIN}" "${BETA_TOOLCHAIN}"; do \
        rustup component add --toolchain "${toolchain}" clippy rustfmt; \
        rustup target add --toolchain "${toolchain}" \
            thumbv7em-none-eabihf \
            thumbv6m-none-eabi \
            wasm32-unknown-unknown; \
    done \
    && rustup component add --toolchain "${STABLE_TOOLCHAIN}" llvm-tools-preview

RUN --mount=type=cache,id=nata-tools-registry,target=/usr/local/cargo/registry,sharing=locked \
    --mount=type=cache,id=nata-tools-git,target=/usr/local/cargo/git,sharing=locked \
    --mount=type=cache,id=nata-tools-target,target=/tmp/cargo-target,sharing=locked \
    export CARGO_TARGET_DIR=/tmp/cargo-target \
    && cargo +${STABLE_TOOLCHAIN} install just --version "${JUST_VERSION}" --locked \
    && cargo +${STABLE_TOOLCHAIN} install wasm-pack --version "${WASM_PACK_VERSION}" --locked \
    && cargo +${STABLE_TOOLCHAIN} install cargo-llvm-cov --version "${CARGO_LLVM_COV_VERSION}" --locked

RUN groupadd --gid "${USER_GID}" nata \
    && useradd --uid "${USER_UID}" --gid "${USER_GID}" --create-home --shell /bin/bash nata \
    && install -d -o nata -g nata \
        /home/nata/.cargo/registry \
        /home/nata/.cargo/git \
        /workspace/target

ENV CARGO_HOME=/home/nata/.cargo \
    CARGO_TARGET_DIR=/workspace/target \
    CARGO_TERM_COLOR=always \
    NATA_STABLE_TOOLCHAIN=${STABLE_TOOLCHAIN} \
    NATA_MSRV_TOOLCHAIN=${MSRV_TOOLCHAIN} \
    NATA_BETA_TOOLCHAIN=${BETA_TOOLCHAIN}

USER nata
WORKDIR /workspace