pipeprogress 2023.3.0

Progress bar for long pipe operations
Documentation
##################################################
# Notes for GitHub Actions
#       * Dockerfile instructions: https://git.io/JfGwP
#       * Environment variables: https://git.io/JfGw5
##################################################

#########################
# STAGE: GLOBAL
# Description: Global args for reuse
#########################

ARG PROJECT="pipeprogress"
ARG PROJECT_BIN="pp"
ARG PROJECT_DESC="A command line utility to show progress during pipe operations"
ARG PROJECT_REPO="https://github.com/salt-labs/pipeprogress"
ARG VERSION="0"
ARG TOOLCHAIN="stable"
ARG TARGET="x86_64-unknown-linux-musl"

#########################
# STAGE: BUILD
# Description: Build the app
#########################

FROM docker.io/debian:buster as BUILD

ARG PROJECT
ARG PROJECT_BIN
ARG PROJECT_DESC
ARG PROJECT_REPO
ARG VERSION
ARG TOOLCHAIN
ARG TARGET

ENV DEBIAN_FRONTEND=noninteractive \
       RUST_BACKTRACE=1 \
       PKG_CONFIG_ALLOW_CROSS=1 \
       PKG_CONFIG_ALL_STATIC=1 \
       RUSTFLAGS='-C link-arg=-s' \
       RUST_LOG="info" \
       PATH="/root/.cargo/bin:$PATH"

WORKDIR /

RUN apt update -y \
       && apt upgrade -y \
       && apt install -y \
       --no-install-recommends \
       autoconf \
       automake \
       binutils \
       build-essential \
       ca-certificates \
       clang \
       cmake \
       curl \
       file \
       g++ \
       gcc \
       git \
       gnupg2 \
       jq \
       libasound2 \
       libasound2-dev \
       libgcc-8-dev \
       libgmp-dev \
       libmpc-dev \
       libmpfr-dev \
       libpq-dev \
       libssl-dev \
       libtool \
       make \
       musl-dev \
       musl-tools \
       openssh-client \
       pkgconf \
       tzdata \
       unzip \
       wget \
       xutils-dev \
       zlib1g-dev \
       && apt autoremove -y \
       && apt clean -y \
       && rm -rf /var/lib/apt/lists/*

RUN echo "##### Rustup Init #####" \
       && curl \
       --proto '=https' \
       --tlsv1.2 \
       --output rustup-init \
       https://sh.rustup.rs \
       && chmod +x rustup-init \
       && ./rustup-init \
       -y \
       --profile default \
       --no-modify-path \
       --default-toolchain ${TOOLCHAIN} \
       && rm rustup-init \
       && . ${HOME}/.cargo/env

RUN echo "##### Rustup #####" \
       && rustup target add ${TARGET} \
       --toolchain ${TOOLCHAIN} \
       && rustup show

# Hacky trick to stop the crates being built every
# run when they haven't even been changed by putting the
# crates into a seperate layer.
COPY Cargo.lock .
COPY Cargo.toml .

RUN echo "##### Cargo Cache #####" \
       && mkdir src \
       && echo "fn main() {print!(\"Dummy main\");} // dummy file" > src/main.rs \
       && cargo build \
       --release \
       --target ${TARGET} \
       && rm -f "target/${TARGET}/release/deps/${PROJECT_BIN}"*

ADD . /

RUN echo "##### Cargo Build #####" \
       && cargo build \
       --release \
       --target ${TARGET} \
       --bin ${PROJECT_BIN}

RUN echo "##### Target #####" \
       && ls -lah "/target/${TARGET}/release/" \
       && strip "/target/${TARGET}/release/${PROJECT_BIN}" \
       && ldd "/target/${TARGET}/release/${PROJECT_BIN}" || echo "" \
       && "/target/${TARGET}/release/${PROJECT_BIN}" --help

#########################
# STAGE: RUN
# Description: Run the app
#########################

# Minimal base
FROM gcr.io/distroless/static-debian10 as RUN

# Adds glibc, libssl, openssl
#FROM gcr.io/distroless/base-debian10 as RUN

# Adds libgcc1
#FROM gcr.io/distroless/cc-debian10 as RUN

ARG PROJECT
ARG PROJECT_BIN
ARG PROJECT_DESC
ARG PROJECT_REPO
ARG VERSION
ARG TOOLCHAIN
ARG TARGET

LABEL name="${PROJECT}" \
       maintainer="MAHDTech <MAHDTech@saltlabs.tech>" \
       vendor="Salt Labs" \
       version="${VERSION}" \
       summary="${PROJECT_DESC}" \
       url="${PROJECT_REPO}"

ENV APP=${PROJECT_BIN}

WORKDIR /

COPY --from=BUILD /target/${TARGET}/release/${PROJECT_BIN} /

COPY "LICENSE" "README.md" /

# No shell, no shell expansion
ENTRYPOINT [ "/pp" ]
CMD [ "--help" ]