FROM ubuntu:24.04

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

# Dependências do SO + libs necessárias para o Cypress/Chrome rodarem headless
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 \
    # Libs necessárias para o Chrome/Cypress rodarem 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 && \
    rm -rf /var/lib/apt/lists/*

# Instala o MinIO Client (mc)
RUN curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc && \
    chmod +x /usr/local/bin/mc

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

# Instala o Docker (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/*

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

WORKDIR /home/azureuser/myagent

# Pré-baixa e extrai o Azure Pipelines Agent durante o build da imagem
# Elimina o download de ~150MB em cada inicialização do container
RUN AGENT_PACKAGE="vsts-agent-linux-x64-${AGENT_VERSION}.tar.gz" && \
    curl -fsSL -O "https://download.agent.dev.azure.com/agent/${AGENT_VERSION}/${AGENT_PACKAGE}" && \
    tar zxf "${AGENT_PACKAGE}" && \
    rm "${AGENT_PACKAGE}"

RUN chown -R azureuser:azureuser /home/azureuser

# Copia script de inicialização e de limpeza do docker
COPY start.sh /home/azureuser/start.sh
COPY docker-prune.sh /usr/local/bin/docker-prune.sh

# Configura permissões e cron job (5h da manhã)
RUN chmod +x /home/azureuser/start.sh && \
    chmod +x /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

# Define as variáveis de ambiente necessárias para o agente
ENV DOCKER_BUILDKIT=1
ENV AZP_URL=""
ENV AZP_TOKEN=""
ENV AZP_POOL=""
ENV AZP_AGENT_NAME=""
ENV MINIO_ACCESS_KEY=""
ENV MINIO_SECRET_KEY=""

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