From 51a0c4a677d860c1ac1c0ad3e1d49a246f1b9021 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Wed, 26 Nov 2025 00:31:15 -0600 Subject: [PATCH] Moved back to debian base image; moved docker support scripts; updated language server java entry to not be appimage aligned in arg format --- Docker/Dockerfile | 127 ++++++++++-------- Docker/scripts/clean.sh | 26 ++++ .../interactive-shell.sh} | 7 +- Docker/scripts/run.sh | 28 ++++ Docker/scripts/start.sh | 31 +++++ Docker/{ => scripts}/stop.sh | 0 src/languageServers.js | 4 +- 7 files changed, 158 insertions(+), 65 deletions(-) create mode 100755 Docker/scripts/clean.sh rename Docker/{start.sh => scripts/interactive-shell.sh} (81%) create mode 100755 Docker/scripts/run.sh create mode 100755 Docker/scripts/start.sh rename Docker/{ => scripts}/stop.sh (100%) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 093a91c..fd647ba 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,19 +1,34 @@ # 1. A: Define a base image -# FROM python:3.12 +# FROM scratch +# FROM busybox # FROM alpine:3.22.1 -FROM alpine:latest -# FROM debian:bookworm-slim +# FROM alpine:latest +# FROM python:3.12 +FROM debian:bookworm-slim # 1. B: Set ENV Variables -ENV PYTHON_VERSION=3.12 -ENV JAVA_VERSION=22.0.2 +ENV NVM_VERSION=0.40.3 +ENV NODE_VERSION=24.9.0 +ENV PYTHON_VERSION=3.12.12 + +ENV NVM_DIR="/root/.nvm" +ENV PYENV_ROOT="/opt/pyenv" +ENV JEXTRACT_PATH="/opt/jextract" +ENV JAVA_LS_PATH="/opt/java-language-server" +ENV JDTLS_PATH="/opt/jdtls" +ENV MAVEN_PATH="/opt/maven" +ENV JAVA_HOME="/opt/jdk" + +ENV PATH="${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}" +ENV PATH="${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}" +ENV PATH="${JEXTRACT_PATH}/bin:${PATH}" +ENV PATH="${JAVA_LS_PATH}/:${PATH}" +ENV PATH="${JDTLS_PATH}/bin:${PATH}" +ENV PATH="${MAVEN_PATH}/bin:${PATH}" +ENV PATH="${JAVA_HOME}/bin:${PATH}" ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 -ENV PYENV_ROOT="/opt/pyenv" - -ENV PATH="${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}" - # 2. Set the working directory inside the container WORKDIR /app @@ -22,73 +37,67 @@ WORKDIR /app COPY requirements.txt . COPY package.json . COPY src/* . +COPY Docker/scripts/run.sh . +COPY Docker/opt/ /opt/ # 4. A: Install dependencies # RUN apt update -# RUN apt install -y pkg-config curl clang gopls git libgirepository1.0-dev libssl-dev libcairo2-dev - -RUN apk update -RUN apk add --no-cache \ - nodejs \ - npm \ - bash \ - bash-completion \ +# RUN apt install +RUN apt-get update +RUN apt-get install \ + --no-install-recommends \ + --no-install-suggests \ + -y \ + pkg-config \ + ca-certificates \ + libreadline-dev \ + liblzma-dev \ + libsqlite3-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libgirepository1.0-dev \ + libssl-dev libcairo2-dev \ curl \ clang \ - pkgconf \ - make \ - git \ gopls \ - linux-headers \ - build-base \ - openssh \ - tzdata \ - openssl-dev \ - bzip2-dev \ - zlib-dev \ - xz-dev \ - sqlite-dev \ - readline-dev \ - libffi-dev \ - gdbm-dev \ - gobject-introspection-dev \ - cairo-dev + git + +# RUN apk update +# RUN apk add --no-cache \ +# nodejs \ +# npm \ +# bash \ +# bash-completion \ +# curl \ +# clang \ +# pkgconf \ +# make \ +# git \ +# gopls \ +# gobject-introspection-dev \ +# cairo-dev RUN curl -fsSL https://pyenv.run | bash RUN pyenv install ${PYTHON_VERSION} && pyenv global ${PYTHON_VERSION} && pyenv local ${PYTHON_VERSION} RUN pip install --no-cache-dir -r requirements.txt -# 4. B: Install nvm and node -# RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash -# RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION} -# RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION} -# RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION} +# # 4. B: Install nvm and node +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v"${NVM_VERSION}"/install.sh | bash +RUN . "${NVM_DIR}/nvm.sh" && nvm install ${NODE_VERSION} +RUN . "${NVM_DIR}/nvm.sh" && nvm use v${NODE_VERSION} +RUN . "${NVM_DIR}/nvm.sh" && nvm alias default v${NODE_VERSION} + +RUN npm install RUN node --version RUN npm --version -RUN npm install - -# 5. A: Remove dependencies -RUN apk del \ - linux-headers \ - build-base \ - openssh \ - tzdata \ - openssl-dev \ - bzip2-dev \ - zlib-dev \ - xz-dev \ - sqlite-dev \ - readline-dev \ - libffi-dev \ - gdbm-dev \ - gobject-introspection-dev \ - cairo-dev +RUN java --version +# # 5. Cleanup RUN rm -rf /tmp/* -RUN rm -rf /opt/nvm/.cache +RUN rm -rf "${NVM_DIR}/.cache" RUN rm /app/requirements.txt # 6. Expose Port and define the command used to run the app EXPOSE 9999 -CMD ["npm", "run", "start-verbose"] \ No newline at end of file +CMD ["/app/run.sh"] diff --git a/Docker/scripts/clean.sh b/Docker/scripts/clean.sh new file mode 100755 index 0000000..63a14c7 --- /dev/null +++ b/Docker/scripts/clean.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# . CONFIG.sh + +# set -o xtrace ## To debug scripts +# set -o errexit ## To exit on error +# set -o errunset ## To exit if a variable is referenced but not set + + +function main() { + SCRIPTPATH="$( cd "$(dirname "")" >/dev/null 2>&1 ; pwd -P )" + cd "${SCRIPTPATH}" + echo "Working Dir: " $(pwd) + + podman container prune + podman image prune + podman volume prune + podman network prune + + podman machine stop + podman machine reset + podman machine init + podman machine start +} +main $@; + diff --git a/Docker/start.sh b/Docker/scripts/interactive-shell.sh similarity index 81% rename from Docker/start.sh rename to Docker/scripts/interactive-shell.sh index 4a3419a..f576abb 100755 --- a/Docker/start.sh +++ b/Docker/scripts/interactive-shell.sh @@ -13,12 +13,11 @@ function main() { echo "Working Dir: " $(pwd) ID=$(podman ps --filter "ancestor=localhost/newton-lsp:latest" --format "{{.ID}}") - if [ "${ID}" != "" ]; then - echo "Is up..." + if [ "${ID}" == "" ]; then + echo "Is not up..." exit 1 fi - podman run -p 9999:9999 newton-lsp:latest + podman exec -it "${ID}" /bin/sh } main $@; - diff --git a/Docker/scripts/run.sh b/Docker/scripts/run.sh new file mode 100755 index 0000000..f1a0982 --- /dev/null +++ b/Docker/scripts/run.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# . CONFIG.sh + +# set -o xtrace ## To debug scripts +# set -o errexit ## To exit on error +# set -o errunset ## To exit if a variable is referenced but not set + + +function main() { + SCRIPTPATH="$( cd "$(dirname "")" >/dev/null 2>&1 ; pwd -P )" + cd "${SCRIPTPATH}" + echo "Working Dir: " $(pwd) + + # Setup config paths and copy needed files over. + mkdir temp + mkdir -p "${JDTLS_DATA_PATH}" + mkdir -p "${JDTLS_CONFIG_PATH}/m2/logging" + mkdir -p "${JDTLS_CONFIG_PATH}/m2/repository" + mkdir -p "${JDTLS_CONFIG_PATH}/m2/conf/logging" + mkdir -p "${JDTLS_CONFIG_PATH}/m2/lib/ext" + + cp -r "${MAVEN_PATH}/conf/settings.xml" "${JDTLS_CONFIG_PATH}" + cp -r "${JDTLS_PATH}/config_linux" "${JDTLS_CONFIG_PATH}" + + npm run start-verbose +} +main $@; diff --git a/Docker/scripts/start.sh b/Docker/scripts/start.sh new file mode 100755 index 0000000..d5bba14 --- /dev/null +++ b/Docker/scripts/start.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# . CONFIG.sh + +# set -o xtrace ## To debug scripts +# set -o errexit ## To exit on error +# set -o errunset ## To exit if a variable is referenced but not set + + +function main() { + SCRIPTPATH="$( cd "$(dirname "")" >/dev/null 2>&1 ; pwd -P )" + cd "${SCRIPTPATH}" + echo "Working Dir: " $(pwd) + + ID=$(podman ps --filter "ancestor=localhost/newton-lsp:latest" --format "{{.ID}}") + if [ "${ID}" != "" ]; then + echo "Is up..." + exit 1 + fi + + podman run \ + -p 9999:9999 \ + -e HOME="${HOME}" \ + -e MAVEN_OPTS="-Duser.home=${HOME}" \ + -e JAVA_TOOL_OPTIONS="-Duser.home=${HOME}" \ + -e JDTLS_CONFIG_PATH="${HOME}/.config/lsps/jdtls" \ + -e JDTLS_DATA_PATH="${JDTLS_CONFIG_PATH}/data" \ + -v "${HOME}":"${HOME}" \ + newton-lsp:latest +} +main $@; diff --git a/Docker/stop.sh b/Docker/scripts/stop.sh similarity index 100% rename from Docker/stop.sh rename to Docker/scripts/stop.sh diff --git a/src/languageServers.js b/src/languageServers.js index 1592e33..c1b29e5 100644 --- a/src/languageServers.js +++ b/src/languageServers.js @@ -48,14 +48,14 @@ exports.servers = [ }, { endpointName: "java", args: [ - 'javals', ["jdtls"] + "jdtls" ], nameEndsWith: ".java", connectionType: "stdio" }, { endpointName: "java-other", args: [ - 'javals', ["java-language-server"] + "java-language-server" ], nameEndsWith: ".java", connectionType: "stdio"