diff --git a/.dockerignore b/.dockerignore index 36170e5..f53753f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -41,3 +41,5 @@ /.forgejo/ /core* + +/.devenv diff --git a/.gitignore b/.gitignore index 1298bd2..f77ab27 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,5 @@ public/504.html public/505.html public/507.html public/510.html + +/.devenv diff --git a/Dockerfile b/Dockerfile index c502e7d..f588cdd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,20 @@ +ARG RUBY_VERSION=3.2.5 + +FROM ruby:${RUBY_VERSION} + +LABEL maintainer='david@hohl.cloud' + ARG NAME=app ARG UID=1000 ARG GID=1000 ARG APP_PORT=3000 ARG INSTALL_DIR=/${NAME} -ARG RUBY_VERSION=3.2.5 -FROM ruby:${RUBY_VERSION} AS development - ARG NAME ARG UID ARG GID ARG APP_PORT ARG INSTALL_DIR -LABEL maintainer='david@hohl.cloud' - WORKDIR ${INSTALL_DIR} ENV GEM_HOME=${INSTALL_DIR}/.bundle @@ -24,9 +25,7 @@ ENV \ RAILS_ENV=development \ TZ=Europe/Zurich \ PATH=${INSTALL_DIR}/bin:$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH \ - EDITOR=vim \ - RUBY_DEBUG_DAP_SHOW_PROTOCOL=1 \ - RUBY_DEBUG_OPEN=true + EDITOR=vim RUN \ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ @@ -51,212 +50,50 @@ RUN \ apt-get install -yqq --no-install-recommends \ sqlite3 nodejs npm sassc yarn libvips fish ranger pandoc libjemalloc2 && \ apt-get clean && \ - npm i -g tabby-agent \ - vscode-langservers-extracted \ + npm i -g vscode-langservers-extracted \ dockerfile-language-server-nodejs \ @microsoft/compose-language-service \ - yaml-language-server@next && \ + yaml-language-server@next \ + bash-language-server \ + typescript-language-server typescript && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ truncate -s 0 /var/log/*log && \ gem update --system && \ - bundle config set app_config ${GEM_HOME} + bundle config set app_config ${GEM_HOME} && \ + mkdir -p /home/${NAME}/.ssh && \ + echo "|1|MY0IaoqveusfUdYlTFzGnB95mhI=|XyUGTfOoKc7vGP5WTlFwT1RU+5E= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOLCA3O6oc0+BplWjB5Vi4jPNnGAYo24oANcylCc9i8W\ + |1|pYFp+C6PAszoVmLOZliWYonpzC0=|QbeRMKsmnFBrqoH38UKkjZdISJI= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2PqML1VEXRdMc/WTjjN00FWw2vDl11q+0glBLQwQiBV5r3kL1kXWP7rUtuBPfivz4/ZpzkpHhWbKbnrLazpvSRHqwgMm6S1mQoH4Gb3wLwCqvoE/M8BSJsXvlJem63y/W4mtQEboZ+YyBzW1Yss41jBW9tfQxXCVlikPWm/O20hr3uealymIH5GaONE65mY9JfPr7z6AAJZ8bAfO69HWp+Q1dRD2sin3/cY+a25eQ6PWmR7g/Xw3/6pNikOj2LMErZdyCxVhCKmHeDDrWzn8qJgfPRqz9Pneb3qIBOw6kJnTfQGc+7KLZmmqRUChoLuw5jTYthngZVXJ/A0XJG30mqtrQj9uD7vqmTFXZl8wNuv52ELOwPrvJIpEFvjjNGbg8iRkjElHKub8eGvQhy/sH96Xv6WqxfGiXvyUTWrBOdhhL102fA+nXcsx90Ln0/Rjg5v5meFCT1a+3SLgQeQ44c9xasDwGFrwlR1x4uP8249SldIhKFO+1oXnskTN8Prs=\ +|1|FisNvukDUhT0l2SVq4qFF1WFoBQ=|rBWKChHJabb1lM0Og5zcH3lxrOQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPknmThDfyVupOSMcGdjP14VEX6e5rXrI3ny+FnLjaCNyGYt7hKyRTfvl32UVXFZqvp+gp6BVdqaKI6ey5Mygfs=" >> /home/${NAME}/.ssh/known_hosts ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 + +RUN curl -fsSL https://github.com/tamasfe/taplo/releases/latest/download/taplo-full-linux-x86_64.gz \ + | gzip -d - | install -m 755 /dev/stdin /usr/local/bin/taplo + +# RUN curl -fsSL https://github.com/Feel-ix-343/markdown-oxide/releases/download/v0.24.3/markdown-oxide-v0.24.3-x86_64-unknown-linux-gnu | install -m 755 /dev/stdin /usr/local/bin/markdown-oxide + +RUN curl -fsSL https://github.com/artempyanykh/marksman/releases/download/2024-11-20/marksman-linux-x64 | install -m 755 /dev/stdin /usr/local/bin/marksman + ARG HELIX_VERSION=24.07 RUN curl -L https://github.com/helix-editor/helix/releases/download/${HELIX_VERSION}/helix-${HELIX_VERSION}-x86_64-linux.tar.xz -o /tmp/helix.tar.xz && \ cd /opt/ && \ tar -xf /tmp/helix.tar.xz && \ - ln -s /opt/helix-${HELIX_VERSION}-x86_64-linux/hx /usr/local/bin chmod +x /usr/local/bin/ + ln -s /opt/helix-${HELIX_VERSION}-x86_64-linux/hx /usr/local/bin -RUN mkdir -p ~/.config/fish ~/.config/helix +RUN mkdir -p /home/app/.config/{helix, fish} -COPY <> .build_version - -USER ${NAME} - -ENTRYPOINT [ "bin/entrypoint" ] - -CMD [ "rails", "server", "--binding", "0.0.0.0", "--no-daemon", "--port" , "3000" ] +ENTRYPOINT ["/usr/local/bin/dev_entrypoint"] +CMD ["/bin/sh", "-c", "dev"] diff --git a/Procfile.dev b/Procfile.dev index 66fe22e..5c7ab2e 100644 --- a/Procfile.dev +++ b/Procfile.dev @@ -1,3 +1,3 @@ -web: env RUBY_DEBUG_OPEN=true bin/rails server -b 0 -js: yarn build --watch +web: RUBY_DEBUG_OPEN=true bin/rails server -b 0 +js: yarn build --watch css: yarn watch:css diff --git a/bin/dev_entrypoint b/bin/dev_entrypoint new file mode 100755 index 0000000..3062b49 --- /dev/null +++ b/bin/dev_entrypoint @@ -0,0 +1,8 @@ +#!/bin/bash + +if [ -f /app/tmp/pids/server.pid ]; then + rm /app/tmp/pids/server.pid +fi + +exec "$@" + diff --git a/docker-compose.yml b/docker-compose.yml index dc06931..5ce4a06 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,12 +9,14 @@ services: app: &app build: context: . - target: development + restart: "unless-stopped" + command: ["/bin/sh", "-c", "/app/bin/dev"] volumes: - ./:/app:cached - ${PWD}:${PWD} - - ${HOME}/.tabby-client:/home/app/.tabby-client - ${SSH_AUTH_SOCK}:/ssh-agent + - .devenv/helix:/home/app/.config/helix + - .devenv/fish:/home/app/.config/fish env_file: - .env environment: @@ -37,6 +39,16 @@ services: - traefik - default + edit: + <<: *app + restart: "no" + labels: [] + depends_on: [] + command: ["hx", "."] + entrypoint: null + networks: + - default + chrome: image: selenium/standalone-chrome shm_size: 2g