ds1090 0.2.11

dump1090 to ZeroMQ datastream bridge
Documentation
# syntax=docker/dockerfile:1.1.7-experimental
##################################
# Base image for building things #
##################################
FROM rust:buster as builder_base

RUN apt-get update && apt-get install -y \
        curl \
        git \
        bash \
        build-essential \
        libffi-dev \
        openssl \
        librust-openssl-dev \
        tini \
        openssh-client \
        # Python needed for pre-commit
        python3-pip \
        python3-ruamel.yaml \
        python3-dev \
        # Deps for compiling
        libzmq5 \
        libzmq3-dev \
    && rm -rf /var/lib/apt/lists/* && apt-get clean \
    # githublab ssh
    && mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com github.com | sort > ~/.ssh/known_hosts \
    && pip3 install --ignore-installed pre-commit \
    && echo 'export PATH=/usr/local/cargo/bin:$PATH' >>$HOME/.profile \
    && true

WORKDIR /app
# Copy just the manifest so we can get deps
COPY ./Cargo.toml ./Cargo.lock /app/
# Make a dummy file in src so we can compile deps
RUN --mount=type=ssh mkdir src \
    && echo "pub fn main() {println!(\"if you see this, the build broke\")}" > src/lib.rs \
    # Compile deps both devel and release, then delete the dummy main executable
    && cargo fetch \
    && cargo build \
    && cargo build --release \
    && rm -f target/debug/deps/*ds1090* \
    && rm -f target/debug/*ds1090* \
    && rm -f target/release/deps/*ds1090* \
    && rm -f target/release/*ds1090* \
    && true


####################
# Production build #
####################
FROM builder_base as production_build
COPY . /app
WORKDIR /app
# Compile release version of full app
RUN --mount=type=ssh cargo fetch \
    && cargo build --release \
    && true


####################
# Production image #
####################
FROM debian:buster as production
COPY --from=production_build /app/docker/entrypoint.sh /docker-entrypoint.sh
# Add any other binaries you might compile here
COPY --from=production_build /app/target/release/ds1090 /usr/local/bin
WORKDIR /app
SHELL ["/bin/bash", "-c"]
RUN apt-get update && apt-get install -y \
        # Add any libraries needed to run the code here
        libzmq5 \
        tini \
    && rm -rf /var/lib/apt/lists/* && apt-get clean \
    && ds1090 --defaultconfig > docker_config.toml \
    && true
ENTRYPOINT ["/usr/bin/tini", "--", "/docker-entrypoint.sh"]


#####################################
# Base stage for development builds #
#####################################
FROM builder_base as devel_build
# Copy everything to the image
COPY . /app
WORKDIR /app
# Add rustfmt, we are going to need it.
RUN --mount=type=ssh rustup component add rustfmt \
    && true

#############
# Run tests #
#############
FROM devel_build as test
RUN --mount=type=ssh cargo fetch \
    && cargo build \
    && docker/pre_commit_init.sh \
    && true
ENTRYPOINT ["/usr/bin/tini", "--", "docker/entrypoint-test.sh"]


###########
# Hacking #
###########
FROM devel_build as devel_shell
RUN apt-get update && apt-get install -y zsh \
    && rm -rf /var/lib/apt/lists/* && apt-get clean \
    && sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" \
    && echo "source /root/.profile" >>/root/.zshrc \
    && true
ENTRYPOINT ["/bin/zsh", "-l"]