Commit e62fc8bb authored by Dave Cooper's avatar Dave Cooper
Browse files

piecing the docker build back together.

parent 532aca77
Loading
Loading
Loading
Loading
+25 −51
Original line number Diff line number Diff line
@@ -2,69 +2,43 @@ FROM debian:latest

ARG DEBIAN_FRONTEND=noninteractive

ARG CONT_USER=gendl-user

RUN apt-get -y update && apt-get -y upgrade && apt-get -y autoremove && \
    apt-get -y install openssl libssl-dev iputils-ping telnet ghostscript \
    wamerican rsync curl \
    zlib1g-dev libc6-dev && \
    rm -rf /var/cache/apt/* && apt-get clean

# Install Docker CLI using static binary (matching lisply-mcp and skewed-emacs approach)
RUN curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz | tar xz --strip-components=1 -C /usr/local/bin docker/docker \
    && chmod +x /usr/local/bin/docker

#RUN deluser ubuntu && \
#    groupadd -g 1000 gendl-user && \
#    useradd -rm -s /bin/bash -u 1000 -g gendl-user -G sudo gendl-user && \
#    ln -s /home /Users

RUN groupadd -g 1000 gendl-user && \
    useradd -m -s /bin/bash -u 1000 -g gendl-user gendl-user && \
    ln -s /home /Users


RUN mkdir -p /opt/gendl && chown gendl-user:gendl-user /opt/gendl/ && \
    mkdir -p /home/gendl-user/projects && \
    chown gendl-user:gendl-user /home/gendl-user/projects && \
    ln -s /home/gendl-user/projects /projects  


COPY --chown=gendl-user:gendl-user gendl-build/. /opt/gendl/
RUN rm /opt/gendl/run-gdl
COPY --chown=gendl-user:gendl-user gendl/docker/build-build/run-gendl-services /opt/gendl/run-gendl-services
COPY --chown=gendl-user:gendl-user gendl/docker/build-build/start-services.lisp /opt/gendl/gdl/start-services.lisp
COPY --chown=gendl-user:gendl-user gendl/docker/build-build/etc/rc.local /etc/rc.local
COPY --chown=gendl-user:gendl-user gendl/docker/pipeline-tests.lisp /opt/gendl/gdl/pipeline-tests.lisp
COPY --chown=gendl-user:gendl-user ./gendl/regression/ /opt/gendl-regression/
    wamerican rsync curl zlib1g-dev libc6-dev && \
    rm -rf /var/cache/apt/* && apt-get clean && \
    groupadd -g 1000 $CONT_USER && \
    useradd -rm -s /bin/bash -u 1000 -g $CONT_USER $CONT_USER && \
    ln -s /home /Users && \
    mkdir -p /opt/gendl && chown -R $CONT_USER:$CONT_USER /opt && \
    curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz | \
    tar xz --strip-components=1 -C /usr/local/bin docker/docker \ &&
    chmod +x /usr/local/bin/docker	  

# Copy CLAUDE.md documentation files for backend access
RUN mkdir -p /projects/gendl/gwl/lisply-backend
COPY --chown=gendl-user:gendl-user ./gendl/CLAUDE.md /projects/gendl/CLAUDE.md
COPY --chown=gendl-user:gendl-user ./gendl/gwl/lisply-backend/CLAUDE.md /projects/gendl/gwl/lisply-backend/CLAUDE.md

COPY --chown=$CONT_USER:$CONT_USER gendl-build/. /opt/gendl/
COPY --chown=$CONT_USER:$CONT_USER gendl/docker/build-build/run-gendl-services \
  gendl/docker/build-build/start-services.lisp \
  gendl/docker/build-build/run-pipeline-tests.sh \
  ./gendl/CLAUDE.md /opt/gendl/

USER gendl-user
COPY --chown=$CONT_USER:$CONT_USER gendl/docker/pipeline-tests.lisp /opt/gendl/gdl/

# Verify gdl-ccl binary and its dependencies
RUN if [ -e /opt/gendl/gdl/program/gdl-ccl ]; then \
        echo "Checking gdl-ccl binary..."; \
        ldd /opt/gendl/gdl/program/gdl-ccl || true; \
        /opt/gendl/gdl/program/gdl-ccl --version || true; \
    else \
        echo "gdl-ccl not found, will fall back to gdl-sbcl"; \
    fi
COPY --chown=$CONT_USER:$CONT_USER gendl/docker/build-build/etc/rc.local /etc/

WORKDIR /home/gendl-user
COPY --chown=$CONT_USER:$CONT_USER ./gendl/regression/ /opt/gendl-regression/

# Copy a helper script to run pipeline tests
COPY --chown=gendl-user:gendl-user gendl/docker/build-build/run-pipeline-tests.sh /opt/gendl/run-pipeline-tests.sh
RUN chmod +x /opt/gendl/run-pipeline-tests.sh
COPY --chown=$CONT_USER:$CONT_USER ./gendl/gwl/lisply-backend/CLAUDE.md /opt/gendl/CLAUDE-Lisply.md

# Run pipeline tests with a 60-second timeout
RUN /opt/gendl/run-pipeline-tests.sh
USER $CONT_USER
WORKDIR /home/$CONT_USER
ENV HOME=/home/$CONT_USER

RUN chmod +x /opt/gendl/run-pipeline-tests.sh && /opt/gendl/run-pipeline-tests.sh

USER root

RUN chown gendl-user /opt
RUN chown $CONT_USER /opt

CMD ["/etc/rc.local"]
 No newline at end of file
+4 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ do

    dist_zip_release_beta_local=~/genworks/builds/${dist_name_release_beta}.zip


    dist_zip_fallback=/tmp/gendl.zip


    if [ -f "$dist_zip_server_release_beta" ]; then
@@ -68,6 +68,9 @@ do
    elif  [ -f "$dist_zip_release_beta_local" ]; then
        dist_zip=$dist_zip_release_beta_local
        dist_name=$dist_name_release_beta
    elif  [ -f "$dist_zip_fallback" ]; then
        dist_zip=$dist_zip_fallback
	dist_name=gendl-bare-local-${impl}
    else
        echo "Neither $dist_zip_server_release nor $dist_zip_server nor $dist_zip_local was found. Exiting."
        exit 1
+10 −12
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#

CURRDIR=$(dirname "$0")
cd "${CURRDIR}"

if [[ "$*" == *"--sbcl"* ]]; then
    impl="sbcl"
@@ -42,7 +43,9 @@ export ENABLE_DOCKER=${ENABLE_DOCKER:-false}
# Default to ~/projects if USER_PROJECTS is not set
USER_PROJECTS=${USER_PROJECTS:-$HOME/projects}

#
# Normalize USER_PROJECTS with realpath if it exists, otherwise use as-is
#
if [ -e "$USER_PROJECTS" ]; then
    USER_PROJECTS=$(realpath "$USER_PROJECTS") || {
        echo "Error: Failed to resolve USER_PROJECTS ($USER_PROJECTS)."
@@ -89,11 +92,10 @@ get_docker_group_id() {
    echo "999"
}

cd "${CURRDIR}"

PROJECTS_BASENAME="projects"
HOST_USER_UID=$(id -u)
HOST_USER_NAME=${USER}

gendl_user="gendl-user"

branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); ret_code=$?; branch=${branch//\//--}
@@ -102,12 +104,13 @@ if [ "$ret_code" -ne "0" ]; then
fi

echo "impl: $impl"
gendl_container=$(docker ps -q --filter name=gendl-${impl})
gendl_container=$(docker ps | grep "gendl:${branch}${impl}")

echo "gendl_container: ${gendl_container}"

if [ -n "${gendl_container}" ]; then
    echo "Container gendl already exists. Stop it and start a new one? (Y/n)"
    echo "Container running image gendl:${branch}-${impl} already exists."
    echo "Stop it and start a new one? (Y/n)"
    read -r y_or_n
    if [ -z "${y_or_n}" ] || [ "${y_or_n}" = "Y" ] || [ "${y_or_n}" = "y" ]; then
        echo "Stopping existing container gendl..."
@@ -164,12 +167,11 @@ if [ -d "/tmp/.X11-unix" ]; then
    echo "X11 forwarding enabled"
fi

DOCKER_GENDL_CID=$(docker run -id --rm -h gendl-backend --name gendl-${impl} \
DOCKER_GENDL_CID=$(docker run -id --rm -h gendl --name gendl-${branch}-${impl} \
                          -p ${SWANK_HOST_PORT}:${SWANK_PORT} -p ${HTTP_HOST_PORT}:${HTTP_PORT} \
                          -p ${HTTPS_HOST_PORT}:${HTTPS_PORT} \
                          -e HTTP_PORT -e HTTPS_PORT -e SWANK_PORT -e TELNET_PORT \
                          -e HTTP_HOST_PORT -e HTTPS_HOST_PORT \
                          -e SWANK_HOST_PORT -e TELNET_HOST_PORT \
                          -e HTTP_PORT -e HTTPS_PORT -e HTTP_HOST_PORT -e HTTPS_HOST_PORT \
			  -e SWANK_PORT -e SWANK_HOST_PORT -e TELNET_PORT -e TELNET_HOST_PORT \
                          -e START_HTTP -e START_HTTPS -e START_SWANK -e START_TELNET \
                          -e HOST_USER_UID -e GENDL_MODE \
                          ${DOCKER_MOUNT_OPTIONS} \
@@ -192,11 +194,7 @@ else
    echo "in the container."
    echo ""
    echo "The new container ID is ${DOCKER_GENDL_CID}."
    echo ""
    if [ "${START_SWANK}" != "false" ]; then
        echo "If you need SLIME loaded into your Emacs, you can get it with:"
        echo "M-x load-file RET ${GENDL_SRC}/docker/slime/slime.el RET"
        echo ""
        echo "Swank is listening on port ${SWANK_HOST_PORT} on the host,"
        echo "so you can connect from a SLIME-enabled Emacs with:"
        echo ""
+11 −10
Original line number Diff line number Diff line
@@ -125,30 +125,31 @@ What we got was:
           (with-http-response (req ent)
             (with-http-body (req ent)
               (json:encode-json 
                 `((:docs . ,(vector
                              `((:id . "claude-md")
                                (:description . "Gendl backend API and HTTP service documentation")
                                (:path . "/projects/gendl/gwl/lisply-backend/CLAUDE.md"))
                              `((:id . "main-claude-md")
                                (:description . "Main Gendl framework documentation and development guide")
                                (:path . "/projects/gendl/CLAUDE.md")))))
                `((:docs
		   .
		   ,(vector
                     `((:id . "claude-lisply-md")
                       (:description . "Gendl Lisply backend API and HTTP service documentation")
                       (:path . "/opt/gendl/CLAUDE-Lisply.md"))
                     `((:id . "claude-gendl-md")
                       (:description . "Main Gendl documentation and development guide")
                       (:path . "/opt/gendl/CLAUDE.md")))))
                 *html-stream*)))))

      ;; Documentation content endpoint (backend-specific CLAUDE.md)
      (publish-file
       :path (concatenate 'string *lisply-endpoint-prefix* "/docs/claude-md")
       :server server
       :file "/projects/gendl/gwl/lisply-backend/CLAUDE.md"
       :file "/opt/gendl/CLAUDE-Lisply.md"
       :content-type "text/markdown")

      ;; Main documentation content endpoint
      (publish-file
       :path (concatenate 'string *lisply-endpoint-prefix* "/docs/main-claude-md")
       :server server
       :file "/projects/gendl/CLAUDE.md"
       :file "/opt/gendl/CLAUDE.md"
       :content-type "text/markdown")))




(initialize-lisply-endpoints)