FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive
RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes

# Dependências base + JRE para o agent.jar do Jenkins + locales (UTF-8)
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    curl jq git iputils-ping libcurl4 libssl-dev libunwind8 netcat-traditional \
    sudo cron apt-transport-https ca-certificates gnupg lsb-release \
    software-properties-common wget unzip zip locales \
    openjdk-21-jre-headless && \
    sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \
    locale-gen en_US.UTF-8 && \
    rm -rf /var/lib/apt/lists/*

# Locale UTF-8 — necessário para o JVM do agente ler nomes de arquivo com acentos
# (sem isso, o stash/archive do Jenkins falha com InvalidPathException em paths
# como "ArquivosAuxiliares/Inserção dos dados.sql")
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ENV LANGUAGE=en_US.UTF-8

# Docker CLI (Docker-Outside-Of-Docker)
RUN install -m 0755 -d /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && \
    chmod a+r /etc/apt/keyrings/docker.asc && \
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
    tee /etc/apt/sources.list.d/docker.list > /dev/null && \
    apt-get update && \
    apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \
    rm -rf /var/lib/apt/lists/*

# .NET SDK 9 via instalador oficial dotnet-install.sh.
# Mais robusto que usar feed apt: nao conflita com o pacote do Ubuntu 24.04
# (https://github.com/dotnet/core/issues/9484) e funciona tanto em amd64 quanto arm64.
RUN curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh && \
    chmod +x /tmp/dotnet-install.sh && \
    /tmp/dotnet-install.sh --channel 9.0 --install-dir /usr/share/dotnet && \
    ln -sf /usr/share/dotnet/dotnet /usr/local/bin/dotnet && \
    rm /tmp/dotnet-install.sh && \
    dotnet --info

ENV DOTNET_ROOT=/usr/share/dotnet
ENV PATH=/usr/share/dotnet:$PATH

# Node 22 LTS (compila Angular/Spa sem depender de NodeTool)
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
    apt-get install -y nodejs && \
    rm -rf /var/lib/apt/lists/*

# Usuário do agente
RUN useradd -m -d /home/jenkins -s /bin/bash jenkins && \
    usermod -aG sudo,docker jenkins && \
    echo "jenkins ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

WORKDIR /home/jenkins/agent
RUN chown -R jenkins:jenkins /home/jenkins

# Scripts de inicialização e limpeza
COPY start.sh /home/jenkins/start.sh
COPY docker-prune.sh /usr/local/bin/docker-prune.sh

RUN chmod +x /home/jenkins/start.sh /usr/local/bin/docker-prune.sh && \
    echo "0 */6 * * * root /usr/local/bin/docker-prune.sh" > /etc/cron.d/docker-prune && \
    chmod 0644 /etc/cron.d/docker-prune

# Variáveis padrão (sobrescritas pelo docker-compose)
ENV DOCKER_BUILDKIT=1
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
ENV DOTNET_NOLOGO=1
ENV NUGET_XMLDOC_MODE=skip
ENV JENKINS_URL=""
ENV JENKINS_AGENT_NAME=""
ENV JENKINS_SECRET=""
ENV JENKINS_AGENT_WORKDIR="/home/jenkins/agent"

USER jenkins
ENTRYPOINT ["/home/jenkins/start.sh"]
