# Pre-baked cross-compiler for Linux arm64 Tauri releases (runs on Linux amd64).
# Bakes in: amd64 cross-toolchain, arm64 multiarch dev libs, Node.js, and Rust.
# This image takes ~15 min to build but is only rebuilt when deps change.
# Rebuild when: Rust toolchain version, webkit2gtk/gtk major version, Node.js major version,
# OpenSSL major version (used via OPENSSL_STATIC=1), or Tauri CLI changes that affect
# bundler system deps.
# Tag format: rust<VER>-node<VER>
FROM ubuntu:22.04

ARG DEBIAN_FRONTEND=noninteractive

# Step 1: amd64 host tools and cross-compiler
RUN apt-get update -qq \
    && apt-get install -y -qq --no-install-recommends \
       ca-certificates curl git gcc g++ make patchelf pkg-config perl jq \
       gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
       libsodium-dev \
    && rm -rf /var/lib/apt/lists/*

# Step 2: Enable arm64 multiarch.  Ubuntu uses ports.ubuntu.com for arm64 to avoid
# binary-all index conflicts with the amd64 archive.ubuntu.com mirror.
RUN dpkg --add-architecture arm64 \
    && sed -i 's|^deb http://archive.ubuntu.com|deb [arch=amd64] http://archive.ubuntu.com|g' /etc/apt/sources.list \
    && sed -i 's|^deb http://security.ubuntu.com|deb [arch=amd64] http://security.ubuntu.com|g' /etc/apt/sources.list \
    && printf '%s\n' \
       'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse' \
       'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse' \
       'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse' \
       > /etc/apt/sources.list.d/arm64-ports.list \
    && apt-get update -qq \
    && apt-get install -y -qq --no-install-recommends \
       libwebkit2gtk-4.1-dev:arm64 \
       libssl-dev:arm64 \
       libgtk-3-dev:arm64 \
       librsvg2-dev:arm64 \
       libsodium-dev:arm64 \
    && rm -rf /var/lib/apt/lists/*

# Step 3: Node.js 22
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
    && apt-get install -y --no-install-recommends nodejs \
    && rm -rf /var/lib/apt/lists/*

# Step 4: GitHub CLI
# tea (Gitea CLI) can be installed if needed:
# RUN curl -sL https://dl.gitea.com/tea/master/tea-master-linux-arm64 -o /usr/local/bin/tea \
#     && chmod +x /usr/local/bin/tea

# Step 5: Rust 1.88 with arm64 cross-compilation target
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
    --default-toolchain 1.88.0 --profile minimal --no-modify-path \
    && /root/.cargo/bin/rustup target add aarch64-unknown-linux-gnu \
    && /root/.cargo/bin/rustup component add rustfmt clippy

ENV PATH="/root/.cargo/bin:${PATH}"
