Loading docker/Dockerfile +25 −51 Original line number Diff line number Diff line Loading @@ -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 docker/build +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading docker/run +10 −12 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ # CURRDIR=$(dirname "$0") cd "${CURRDIR}" if [[ "$*" == *"--sbcl"* ]]; then impl="sbcl" Loading Loading @@ -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)." Loading Loading @@ -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//\//--} Loading @@ -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..." Loading Loading @@ -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} \ Loading @@ -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 "" Loading gwl/lisply-backend/source/endpoints.lisp +11 −10 Original line number Diff line number Diff line Loading @@ -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) Loading
docker/Dockerfile +25 −51 Original line number Diff line number Diff line Loading @@ -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
docker/build +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
docker/run +10 −12 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ # CURRDIR=$(dirname "$0") cd "${CURRDIR}" if [[ "$*" == *"--sbcl"* ]]; then impl="sbcl" Loading Loading @@ -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)." Loading Loading @@ -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//\//--} Loading @@ -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..." Loading Loading @@ -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} \ Loading @@ -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 "" Loading
gwl/lisply-backend/source/endpoints.lisp +11 −10 Original line number Diff line number Diff line Loading @@ -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)