FROM ubuntu:24.04

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

# Dependências do SO + libs necessárias para Chrome/Cypress headless + JRE para agent.jar + 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 \
    # Libs necessárias para Chrome/Cypress no Linux headless
    libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 \
    libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 \
    libxrandr2 libgbm1 libasound2t64 libpangocairo-1.0-0 libgtk-3-0 \
    libx11-xcb1 libxss1 fonts-liberation libappindicator3-1 \
    xdg-utils libvulkan1 \
    # Xvfb: obrigatório para o Cypress em Linux
    xvfb && \
    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
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ENV LANGUAGE=en_US.UTF-8

# MinIO Client (mc) — upload de artefatos para storage.sittax.com.br
RUN curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc && \
    chmod +x /usr/local/bin/mc

# Google Chrome Stable
RUN install -m 0755 -d /etc/apt/keyrings && \
    curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | \
    gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg && \
    echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] \
    https://dl.google.com/linux/chrome/deb/ stable main" | \
    tee /etc/apt/sources.list.d/google-chrome.list > /dev/null && \
    apt-get update && \
    apt-get install -y google-chrome-stable && \
    rm -rf /var/lib/apt/lists/*

# 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/*

# Node.js 18.19.x (versão usada hoje pelos pipelines Cypress)
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get install -y nodejs && \
    rm -rf /var/lib/apt/lists/*

# K6 (testes de carga — load-tests/upload-stress.js)
# Baixa a chave via HTTPS direto (em vez de gpg --recv-keys, que requer dirmngr
# rodando — nao funciona em buildkit/sandbox onde dirmngr nao consegue iniciar).
RUN install -m 0755 -d /etc/apt/keyrings && \
    curl -fsSL https://dl.k6.io/key.gpg | gpg --dearmor -o /etc/apt/keyrings/k6.gpg && \
    echo "deb [signed-by=/etc/apt/keyrings/k6.gpg] https://dl.k6.io/deb stable main" \
        | tee /etc/apt/sources.list.d/k6.list > /dev/null && \
    apt-get update && \
    apt-get install -y k6 && \
    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 NODE_OPTIONS=--max-old-space-size=4096
ENV CYPRESS_VERIFY_TIMEOUT=120000
ENV JENKINS_URL=""
ENV JENKINS_AGENT_NAME=""
ENV JENKINS_SECRET=""
ENV JENKINS_AGENT_WORKDIR="/home/jenkins/agent"
ENV MINIO_ACCESS_KEY=""
ENV MINIO_SECRET_KEY=""

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