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 Otimizadas Apenas para o Agente Azure e Docker
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 && \
    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=""

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