FROM rust:1.94.0-alpine3.23 AS builder

RUN --mount=type=cache,target=/root/.cargo \
    rustup component add clippy && \
    rustup component add rustfmt --toolchain nightly

RUN \
    cargo install cargo-sort && \
    cargo install machete

WORKDIR /build

COPY . .

RUN --mount=type=cache,target=/build/target \
    cargo sort ./**/Cargo.toml --check && \
    cargo machete --with-metadata && \
    cargo clippy && \
    cargo +nightly fmt --check

RUN --mount=type=cache,target=/build/target \
    mkdir release && \
    cargo build --workspace --release && \
    cp target/release/master release && \
    cp target/release/worker release



FROM alpine:3.23 AS master

WORKDIR /app

COPY --from=builder /build/release/master .

WORKDIR /data

CMD ["/app/master"]



FROM alpine:3.23 AS worker

RUN \
    apk add --no-cache python3 ffmpeg deno opus

RUN \
    wget https://github.com/yt-dlp/yt-dlp/releases/download/2026.03.13/yt-dlp -O /usr/local/bin/yt-dlp && \
    chmod +x /usr/local/bin/yt-dlp

WORKDIR /app

COPY --from=builder /build/release/worker  .

WORKDIR /data

CMD ["/app/worker"]
