
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022 AS windowsserver2025
USER ContainerAdministrator
WORKDIR C:\\Windows\\temp
ADD https://cygwin.com/setup-x86_64.exe .
ADD https://live.sysinternals.com/procmon.exe .

# Lucky find... This was once tagged latest, but I'm unable to identify its base
# image. It's 4.81 GB, with a the smallest tagged sibling image
# (lts-7.4-windowsservercore-ltsc2022) being 5.45 GB in size...
# TODO: Open an issue about this
FROM mcr.microsoft.com/powershell@sha256:810c4f1e0c9d23022c3ec18c50a6205ee4b60766f1739d329b2948df1fd7d5b0 AS windowsserver2022
LABEL org.opencontainers.image.description="Minimal GNU Toolchain for Windows Server"
WORKDIR C:\\Windows\\temp
#ADD --link https://7-zip.org/a/7z2409-x64.msi .
ADD --link http://localhost:8000/7z2409-x64.msi .
RUN 7z2409-x64.msi INSTALLDIR="C:\\Program Files\\7-Zip" & \
    del 7z2409-x64.msi & \
    mkdir C:\\Program Files\\7-Zip\\shims
WORKDIR C:\\Program Files\\7-Zip\\shims
RUN mklink 7z.exe ..\\7z.exe & \
    setx /M path "%PATH%C:\\Program Files\\7-Zip\\shims;"
WORKDIR C:\\Windows\\temp
#ADD --link http://repo.msys2.org/distrib/msys2-x86_64-latest.tar.xz .
ADD --link http://localhost:8000/msys2-x86_64-latest.tar.xz .
RUN 7z e msys2-x86_64-latest.tar.xz & \
    7z x msys2-x86_64-latest.tar -o"C:\\Program Files" & \
    setx /M path "%PATH%C:\Program Files\msys64\usr\bin;" & \
    del msys2-x86_64-latest.tar & \
    del msys2-x86_64-latest.tar.xz
RUN bash -l & \
    pacman -S --noconfirm git gzip tar make unzip curl gnupg
LABEL org.opencontainers.image.rev=$REVISION

FROM windowsserver2022 AS windowsserver

FROM windowsserver AS openjdk21-windowsserver
LABEL org.opencontainers.image.description="Build environment for Microsoft OpenJDK 21 on Windows Server"
#ADD --checksum=3666844f620635cf07315c9c8fa423655b91f2bde4aa079b3a33d09f6b05f285 https://aka.ms/download-jdk/microsoft-jdk-21.0.7-windows-x64.zip .
ADD http://localhost:8000/microsoft-jdk-21.0.7-windows-x64.zip .
RUN powershell -Command "\
7z x microsoft-jdk-21.0.7-windows-x64.zip -o'C:\\Program Files\\Microsoft'; \
del microsoft-jdk-21.0.7-windows-x64.zip; \
$base = Get-ChildItem \
    -Path 'C:\\Program Files\\Microsoft' \
    -Filter java.exe -Recurse; \
setx /M path "${env:PATH}$($base.Directory.FullName);"; \
setx /M JAVA_HOME "$($base.Directory.Parent.FullName)"";

FROM docker.io/ubuntu:25.04@sha256:79efa276fdefa2ee3911db29b0608f8c0561c347ec3f4d4139980d43b168d991 AS ubuntu2504
LABEL org.opencontainers.image.description="minimal build environment on Ubuntu 25.04"
RUN apt-get update && apt-get install -y git gzip tar make unzip curl gpg

FROM ubuntu2504 AS ubuntu

FROM ubuntu AS pyenv-ubuntu
LABEL org.opencontainers.image.description="build environment with latest Ubuntu for latest pyenv"
RUN apt-get update && apt-get install -y gcc build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev \
libxmlsec1-dev libffi-dev liblzma-dev git curl make
COPY Makefile Makefile
ARG VERBOSE=0
ARG PYENV_ROOT=/opt/pyenv
RUN make pyenv PYENV_ROOT=$PYENV_ROOT VERBOSE=$VERBOSE

FROM ubuntu AS nvm-ubuntu
LABEL org.opencontainers.image.description="build environment with latest Ubuntu for latest nvm"
RUN apt-get update && apt-get install -y curl make coreutils util-linux \
bsdutils file openssl libssl-dev locales ca-certificates curl git gcc g++ \
xz-utils build-essential bash-completion
COPY Makefile Makefile
ARG NVM_DIR=/opt/nvm

FROM ubuntu AS trivy063-ubuntu
RUN curl https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | tee /usr/share/keyrings/trivy.gpg > /dev/null; \
    echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | tee -a /etc/apt/sources.list.d/trivy.list; \
    apt-get update; \
    apt-get install trivy

FROM nvm-ubuntu AS nvm19-ubuntu
RUN make nvm19 NVM_DIR=$NVM_DIR

FROM nvm-ubuntu AS nvm20-ubuntu
RUN make nvm20 NVM_DIR=$NVM_DIR

FROM nvm-ubuntu AS nvm21-ubuntu
RUN make nvm21 NVM_DIR=$NVM_DIR

FROM nvm-ubuntu AS nvm22-ubuntu
RUN make nvm22 NVM_DIR=$NVM_DIR

FROM nvm-ubuntu AS nvm23-ubuntu
RUN make nvm23 NVM_DIR=$NVM_DIR

FROM pyenv-ubuntu AS pyenv39-ubuntu
RUN make pyenv39 PYENV_ROOT=$PYENV_ROOT VERBOSE=$VERBOSE

FROM pyenv-ubuntu AS pyenv310-ubuntu
RUN make pyenv310 PYENV_ROOT=$PYENV_ROOT VERBOSE=$VERBOSE

FROM pyenv-ubuntu AS pyenv311-ubuntu
RUN make pyenv311 PYENV_ROOT=$PYENV_ROOT VERBOSE=$VERBOSE

FROM pyenv-ubuntu AS pyenv312-ubuntu
RUN make pyenv312 PYENV_ROOT=$PYENV_ROOT VERBOSE=$VERBOSE

FROM pyenv-ubuntu AS pyenv313-ubuntu
RUN make pyenv313 PYENV_ROOT=$PYENV_ROOT VERBOSE=$VERBOSE

FROM ubuntu AS node19-ubuntu
COPY --from=nvm19-ubuntu /opt/nvm /opt/nvm
RUN cd /usr/local/bin; ln -vs ../../..$NVM_DIR/shims/* .

FROM ubuntu AS node20-ubuntu
COPY --from=nvm20-ubuntu /opt/nvm /opt/nvm
RUN cd /usr/local/bin; ln -vs ../../..$NVM_DIR/shims/* .

FROM ubuntu AS node21-ubuntu
COPY --from=nvm21-ubuntu /opt/nvm /opt/nvm
RUN cd /usr/local/bin; ln -vs ../../..$NVM_DIR/shims/* .

FROM ubuntu AS node22-ubuntu
COPY --from=nvm22-ubuntu /opt/nvm /opt/nvm
RUN cd /usr/local/bin; ln -vs ../../..$NVM_DIR/shims/* .

FROM ubuntu AS node23-ubuntu
COPY --from=nvm23-ubuntu /opt/nvm /opt/nvm
RUN cd /usr/local/bin; ln -vs ../../..$NVM_DIR/shims/* .

FROM ubuntu AS python39-ubuntu
COPY --from=pyenv39-ubuntu /opt/pyenv /opt/pyenv
RUN cd /usr/local/bin; ln -vs ../../..$PYENV_ROOT/shims/* .

FROM ubuntu AS python310-ubuntu
COPY --from=pyenv310-ubuntu /opt/pyenv /opt/pyenv
RUN cd /usr/local/bin; ln -vs ../../..$PYENV_ROOT/shims/* .

FROM ubuntu AS python311-ubuntu
COPY --from=pyenv311-ubuntu /opt/pyenv /opt/pyenv
RUN cd /usr/local/bin; ln -vs ../../..$PYENV_ROOT/shims/* .

FROM ubuntu AS python312-ubuntu
COPY --from=pyenv312-ubuntu /opt/pyenv /opt/pyenv
RUN cd /usr/local/bin; ln -vs ../../..$PYENV_ROOT/shims/* .

FROM ubuntu AS python313-ubuntu
COPY --from=pyenv313-ubuntu /opt/pyenv /opt/pyenv
RUN cd /usr/local/bin; ln -vs ../../..$PYENV_ROOT/shims/* .
