korrosync 0.3.0

A KOReader Sync Server
Documentation
# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM rust:1-slim AS builder

ARG BUILDPLATFORM
ARG TARGETPLATFORM
ARG ZIG_VERSION=0.15.1

SHELL ["/bin/bash", "-eo", "pipefail", "-c"]

# cross-compilation dependencies
# hadolint ignore=DL3008
RUN apt-get update && apt-get install -y \
    curl \
    xz-utils \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY . .

RUN case "$BUILDPLATFORM" in \
    "linux/amd64") ZIG_ARCH="x86_64" ;; \
    "linux/arm64") ZIG_ARCH="aarch64" ;; \
    "linux/arm/v7") ZIG_ARCH="arm" ;; \
    *) echo "Unsupported platform: $BUILDPLATFORM" && exit 1 ;; \
    esac \
    && curl -L "https://ziglang.org/download/${ZIG_VERSION}/zig-${ZIG_ARCH}-linux-${ZIG_VERSION}.tar.xz" | tar xJ --strip-components=1 -C /usr/local/bin 

RUN case "$TARGETPLATFORM" in \
    "linux/amd64") echo "x86_64-unknown-linux-musl" > /rust-target.txt ;; \
    "linux/arm64") echo "aarch64-unknown-linux-musl" > /rust-target.txt ;; \
    "linux/arm/v7") echo "armv7-unknown-linux-musleabihf" > /rust-target.txt ;; \
    *) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
    esac \
    && RUST_TARGET=$(cat /rust-target.txt) \
    && rustup target add "$RUST_TARGET" \
    && cargo install --locked cargo-zigbuild \
    && cargo zigbuild --release --target "$RUST_TARGET" \
    && mkdir -p /output \
    && cp target/"$RUST_TARGET"/release/korrosync /output/korrosync

FROM scratch

ENV KORROSYNC_DB_PATH=/db.redb
ENV KORROSYNC_SERVER_ADDRESS=0.0.0.0:3000

COPY --from=builder /output/korrosync /app/korrosync
EXPOSE 3000

ENTRYPOINT ["/app/korrosync"]