# Build context: repository root. Resolve/publish both targets with lock_images.py.
ARG BASE_IMAGE=ubuntu@sha256:a2d43bffc46670d7108bb3c0468c67c5557c4c92e83e1e34cbff1322ad1b94dc
FROM ${BASE_IMAGE} AS common
ENV DEBIAN_FRONTEND=noninteractive PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3 python3-pil python3-requests python3-venv ca-certificates \
    git xz-utils openssl util-linux coreutils && rm -rf /var/lib/apt/lists/*

FROM common AS builder-tools
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential clang flex bison g++ gawk libc6-dev-i386 lib32gcc-13-dev lib32stdc++-13-dev gettext libncurses-dev \
    libssl-dev libelf-dev zlib1g-dev file wget curl rsync unzip \
    bc cpio debhelper fakeroot kmod dpkg-dev pahole device-tree-compiler u-boot-tools gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf \
    gcc-13-plugin-dev-aarch64-linux-gnu gcc-13-plugin-dev-arm-linux-gnueabihf \
    pkg-config cmake ninja-build meson llvm libclang-dev swig time patch sudo \
    && rm -rf /var/lib/apt/lists/*
# Download fixed toolchain releases and verify their published SHA-256 files.
ARG NODE_VERSION=22.22.0
ARG RUST_VERSION=1.99.1
RUN set -eux; \
    curl -fsSLo /tmp/node.tar.xz https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz; \
    curl -fsSLo /tmp/node.sha256 https://nodejs.org/dist/v${NODE_VERSION}/SHASUMS256.txt; \
    awk -v f=node-v${NODE_VERSION}-linux-x64.tar.xz '$2==f {print $1 "  /tmp/node.tar.xz"}' /tmp/node.sha256 | sha256sum -c -; \
    tar -xJf /tmp/node.tar.xz --strip-components=1 -C /usr/local; \
    curl -fsSLo /tmp/rust.tar.xz https://static.rust-lang.org/dist/rust-${RUST_VERSION}-x86_64-unknown-linux-gnu.tar.xz; \
    curl -fsSLo /tmp/rust.sha256 https://static.rust-lang.org/dist/rust-${RUST_VERSION}-x86_64-unknown-linux-gnu.tar.xz.sha256; \
    awk '{print $1 "  /tmp/rust.tar.xz"}' /tmp/rust.sha256 | sha256sum -c -; \
    mkdir /tmp/rust; tar -xJf /tmp/rust.tar.xz --strip-components=1 -C /tmp/rust; \
    /tmp/rust/install.sh --prefix=/usr/local --without=rust-docs; \
    for target in aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf; do \
      curl -fsSLo /tmp/std.tar.xz https://static.rust-lang.org/dist/rust-std-${RUST_VERSION}-${target}.tar.xz; \
      curl -fsSLo /tmp/std.sha256 https://static.rust-lang.org/dist/rust-std-${RUST_VERSION}-${target}.tar.xz.sha256; \
      awk '{print $1 "  /tmp/std.tar.xz"}' /tmp/std.sha256 | sha256sum -c -; \
      mkdir /tmp/std; tar -xJf /tmp/std.tar.xz --strip-components=1 -C /tmp/std; \
      /tmp/std/install.sh --prefix=/usr/local; rm -rf /tmp/std; \
    done; rm -rf /tmp/*
RUN useradd -m -u 1000 builder

FROM builder-tools AS builder
WORKDIR /opt/one-kvm
COPY remake ./
COPY config ./config
COPY make-openwrt ./make-openwrt
COPY package ./package
COPY vendor ./vendor
COPY tests ./tests
COPY custom-platform/build ./custom-platform/build

USER 1000:1000

FROM common AS packer
RUN apt-get update && apt-get install -y --no-install-recommends \
    btrfs-progs dosfstools e2fsprogs fdisk kmod binutils patch u-boot-tools \
    device-tree-compiler qemu-user-static binfmt-support cpio tar \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /opt/one-kvm
COPY remake ./
COPY config ./config
COPY make-openwrt ./make-openwrt
COPY package ./package
COPY vendor ./vendor
COPY tests ./tests
COPY custom-platform/build ./custom-platform/build

USER 0:0
