This is an automated email from the ASF dual-hosted git repository. cmarcum pushed a commit to branch task/geb-testcontainers in repository https://gitbox.apache.org/repos/asf/groovy-geb.git
commit beed13941bca65f5eb605d7f204aec6ca485f10a Author: Carl Marcum <[email protected]> AuthorDate: Sun Feb 22 10:07:35 2026 -0500 add Dockerfile that includes Docker. separate docker-entrypoint from build-in-docker.sh and add starting Docker daemon. --- Dockerfile | 74 ++++++++++++++++++++++++++++++ build-in-docker.sh | 19 +++----- build-in-docker.sh => docker-entrypoint.sh | 35 +++++++++----- 3 files changed, 104 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..5baa5cf7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,74 @@ +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# FROM gebish/ci:v13 +FROM eclipse-temurin:11-jdk + +RUN wget https://launchpad.net/~xtradeb/+archive/ubuntu/apps/+files/xtradeb-apt-source_0.4_all.deb +RUN dpkg -i xtradeb-apt-source_0.4_all.deb +RUN rm *.deb + +RUN apt-get update && \ + apt-get install -y \ + git \ + xvfb \ + curl \ + bzip2 \ + libgtk-3-dev \ + libdbus-glib-1-2 \ + wget \ + gnupg \ + firefox \ + firefox-geckodriver \ + chromium \ + chromium-driver \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + gosu && \ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) 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-compose-plugin && \ + apt-get clean + +RUN useradd -u 1001 -m circleci && \ + usermod -aG docker circleci + +WORKDIR /home/circleci + +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 + +# Set up Xvfb to start automatically +ENV DISPLAY=:99 + +# Configure Testcontainers to use the Docker daemon +ENV DOCKER_HOST=unix:///var/run/docker.sock +ENV TESTCONTAINERS_RYUK_DISABLED=true +ENV TESTCONTAINERS_CHECKS_DISABLE=true +ENV TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock + +# Create an entrypoint script +COPY --chmod=755 docker-entrypoint.sh /docker-entrypoint.sh + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["/bin/bash"] diff --git a/build-in-docker.sh b/build-in-docker.sh index 7d4f7af1..ff1848a0 100755 --- a/build-in-docker.sh +++ b/build-in-docker.sh @@ -20,16 +20,11 @@ export WORKING_DIRECTORY=`pwd` export HOME_DIRECTORY=`echo ~` -export IMAGE_REPOSITORY="gebish/ci" -export IMAGE_TAG="v13" +export IMAGE="geb-build:latest" -while getopts v: flag -do - case "${flag}" in - v) VERSION=${OPTARG};; - esac -done - -export IMAGE="${IMAGE_REPOSITORY}:${IMAGE_TAG}" - -docker run -v ${WORKING_DIRECTORY}:${WORKING_DIRECTORY} -v ${HOME_DIRECTORY}/.gradle:/gradle-home -w ${WORKING_DIRECTORY} ${IMAGE} /bin/bash -c "Xvfb :99 -screen 1 1280x1024x16 -nolisten tcp > /dev/null 2>&1 & export DISPLAY=:99 ; ./gradlew --no-daemon --max-workers 4 --parallel $*" \ No newline at end of file +docker run --privileged \ + -v ${WORKING_DIRECTORY}:${WORKING_DIRECTORY} \ + -v ${HOME_DIRECTORY}/.gradle:/gradle-home \ + -w ${WORKING_DIRECTORY} \ + ${IMAGE} \ + ./gradlew --no-daemon --max-workers 4 --parallel "$@" \ No newline at end of file diff --git a/build-in-docker.sh b/docker-entrypoint.sh old mode 100755 new mode 100644 similarity index 59% copy from build-in-docker.sh copy to docker-entrypoint.sh index 7d4f7af1..0ef2a51a --- a/build-in-docker.sh +++ b/docker-entrypoint.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # ---------------------------------------------------------------------------- # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -18,18 +18,29 @@ # under the License. # ---------------------------------------------------------------------------- -export WORKING_DIRECTORY=`pwd` -export HOME_DIRECTORY=`echo ~` -export IMAGE_REPOSITORY="gebish/ci" -export IMAGE_TAG="v13" +# Start Docker daemon in the background (as root) +dockerd > /tmp/dockerd.log 2>&1 & -while getopts v: flag -do - case "${flag}" in - v) VERSION=${OPTARG};; - esac +# Wait for Docker to be ready +echo "Waiting for Docker daemon to start..." +timeout=30 +while [ $timeout -gt 0 ]; do + if docker info > /dev/null 2>&1; then + echo "Docker daemon is ready" + break + fi + sleep 1 + timeout=$((timeout-1)) done -export IMAGE="${IMAGE_REPOSITORY}:${IMAGE_TAG}" +if [ $timeout -eq 0 ]; then + echo "Docker daemon failed to start within 30 seconds" + cat /tmp/dockerd.log + exit 1 +fi -docker run -v ${WORKING_DIRECTORY}:${WORKING_DIRECTORY} -v ${HOME_DIRECTORY}/.gradle:/gradle-home -w ${WORKING_DIRECTORY} ${IMAGE} /bin/bash -c "Xvfb :99 -screen 1 1280x1024x16 -nolisten tcp > /dev/null 2>&1 & export DISPLAY=:99 ; ./gradlew --no-daemon --max-workers 4 --parallel $*" \ No newline at end of file +# Start Xvfb for headless browser testing +Xvfb :99 -screen 1 1280x1024x16 -nolisten tcp > /dev/null 2>&1 & + +# Execute the command as the circleci user +exec gosu circleci "$@" \ No newline at end of file
