From 1beff06751440e64acda82819a639b22b37c943c Mon Sep 17 00:00:00 2001 From: Judith Owens Date: Fri, 16 May 2025 15:05:23 +0000 Subject: [PATCH 1/5] chore: update devcontainer to easy version --- .devcontainer/.ssh.sh | 57 ----------- .devcontainer/Dockerfile | 160 ++++--------------------------- .devcontainer/devcontainer.json | 11 ++- .devcontainer/docker-compose.yml | 8 +- 4 files changed, 28 insertions(+), 208 deletions(-) delete mode 100644 .devcontainer/.ssh.sh diff --git a/.devcontainer/.ssh.sh b/.devcontainer/.ssh.sh deleted file mode 100644 index e246d8d..0000000 --- a/.devcontainer/.ssh.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -if [ -d ~/.ssh ]; then - if echo "$(mountpoint ~/.ssh)" | grep -q "is a mountpoint"; then - # ~/.ssh is a bind mount from the host - return 0; - fi - echo "$(/bin/ls -a /mnt/ssh 2>/dev/null)" > /tmp/ls_mnt_ssh - echo "$(/bin/ls -a ~/.ssh 2>/dev/null)" > /tmp/ls_ssh - echo "$(/bin/ls -a /tmp/.ssh 2>/dev/null)" > /tmp/ls_tmp_ssh - if [ -d /mnt/ssh ] && [ -z "$(comm -3 /tmp/ls_mnt_ssh /tmp/ls_ssh)" ]; then - # /mnt/ssh and ~/.ssh are the same in terms of file names. - rm /tmp/ls_mnt_ssh - rm /tmp/ls_ssh - rm /tmp/ls_tmp_ssh - return 0; - fi - if [ -d /tmp/.ssh ] && [ -z "$(comm -3 /tmp/ls_tmp_ssh /tmp/ls_ssh)" ]; then - # Retro-compatibility: /tmp/.ssh and ~/.ssh are the same in terms of file names. - rm /tmp/ls_mnt_ssh - rm /tmp/ls_ssh - rm /tmp/ls_tmp_ssh - return 0; - fi - rm /tmp/ls_mnt_ssh - rm /tmp/ls_ssh - rm /tmp/ls_tmp_ssh -fi - -if [ -d /tmp/.ssh ]; then - # Retro-compatibility - echo "Copying content of /tmp/.ssh to ~/.ssh" - mkdir -p ~/.ssh - cp -r /tmp/.ssh/* ~/.ssh/ - chmod 600 ~/.ssh/* - chmod 644 ~/.ssh/*.pub &> /dev/null - return 0 -fi - -if [ ! -d /mnt/ssh ]; then - echo "No bind mounted ssh directory found (~/.ssh, /tmp/.ssh, /mnt/ssh), exiting" - return 0 -fi - -if [ "$(stat -c '%U' /mnt/ssh)" != "UNKNOWN" ]; then - echo "Unix host detected, symlinking /mnt/ssh to ~/.ssh" - rm -r ~/.ssh - ln -s /mnt/ssh ~/.ssh - return 0 -fi - -echo "Windows host detected, copying content of /mnt/ssh to ~/.ssh" -mkdir -p ~/.ssh -cp -rf /mnt/ssh/* ~/.ssh/ -chmod 600 ~/.ssh/* -chmod 644 ~/.ssh/*.pub &> /dev/null - diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 4b78946..97730ed 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,139 +1,13 @@ -FROM qmcgaw/basedevcontainer:v0.25.0-debian +# Use an official Elixir image as the base +FROM elixir:1.18.3-slim +# Set-up for switching to non-root user ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=${USER_UID} -ARG EXTHOME -ENV OTP_VERSION="26.2.5" \ - REBAR3_VERSION="3.23.0" \ - ELIXIR_VERSION="v1.16.3" \ - LANG=C.UTF-8 -# Erlang prerequisites (from buildpack-deps) -RUN set -ex; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - autoconf \ - automake \ - bzip2 \ - curl \ - default-libmysqlclient-dev \ - dpkg-dev \ - file \ - g++ \ - gcc \ - imagemagick \ - libbz2-dev \ - libc6-dev \ - libcurl4-openssl-dev \ - libdb-dev \ - libevent-dev \ - libffi-dev \ - libgdbm-dev \ - libglib2.0-dev \ - libgmp-dev \ - libjpeg-dev \ - libkrb5-dev \ - liblzma-dev \ - libmagickcore-dev \ - libmagickwand-dev \ - libmaxminddb-dev \ - libncurses5-dev \ - libncursesw5-dev \ - libpng-dev \ - libpq-dev \ - libreadline-dev \ - libsqlite3-dev \ - libssl-dev \ - libtool \ - libwebp-dev \ - libxml2-dev \ - libxslt-dev \ - libyaml-dev \ - make \ - patch \ - unzip \ - xz-utils \ - zlib1g-dev \ - ; \ - rm -rf /var/lib/apt/lists/* - -# Install Erlang - taken from: -# https://github.com/erlang/docker-erlang-otp/blob/8b812830f95216a3d8a253c24af2c55a1da4935b/26/Dockerfile -RUN set -xe \ - && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ - && OTP_DOWNLOAD_SHA256="d34b409cb5968ae47dd5a0c4f85b925d5601898d90788bbb08d514964a3a141d" \ - && runtimeDeps='libodbc1 \ - libsctp1 \ - libwxgtk3.2-1 \ - libwxgtk-webview3.2-1' \ - && buildDeps='unixodbc-dev \ - libsctp-dev \ - libwxgtk-webview3.2-dev' \ - && apt-get update \ - && apt-get install -y --no-install-recommends $runtimeDeps \ - && apt-get install -y --no-install-recommends $buildDeps \ - && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ - && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ - && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ - && mkdir -vp $ERL_TOP \ - && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ - && rm otp-src.tar.gz \ - && ( cd $ERL_TOP \ - && ./otp_build autoconf \ - && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ - && ./configure --build="$gnuArch" \ - && make -j$(nproc) \ - && make -j$(nproc) docs DOC_TARGETS=chunks \ - && make install install-docs DOC_TARGETS=chunks ) \ - && find /usr/local -name examples | xargs rm -rf \ - && apt-get purge -y --auto-remove $buildDeps \ - && rm -rf $ERL_TOP /var/lib/apt/lists/* - -# extra useful tools here: rebar & rebar3 - -ENV REBAR_VERSION="2.6.4" - -RUN set -xe \ - && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ - && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ - && mkdir -p /usr/src/rebar-src \ - && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ - && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ - && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ - && rm rebar-src.tar.gz \ - && cd /usr/src/rebar-src \ - && ./bootstrap \ - && install -v ./rebar /usr/local/bin/ \ - && rm -rf /usr/src/rebar-src - -RUN set -xe \ - && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ - && REBAR3_DOWNLOAD_SHA256="00646b692762ffd340560e8f16486dbda840e1546749ee5a7f58feeb77e7b516" \ - && mkdir -p /usr/src/rebar3-src \ - && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ - && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ - && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ - && rm rebar3-src.tar.gz \ - && cd /usr/src/rebar3-src \ - && HOME=$PWD ./bootstrap \ - && install -v ./rebar3 /usr/local/bin/ \ - && rm -rf /usr/src/rebar3-src - -# Install Elixir - taken from: -# https://github.com/erlef/docker-elixir/blob/f749dfb8a5b1e6945b2369e143107b9ad3b16664/1.16/Dockerfile -RUN set -xe \ - && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/${ELIXIR_VERSION}.tar.gz" \ - && ELIXIR_DOWNLOAD_SHA256="a163128e618e5205ea749f8effafa5b540008fd0bed863e75e2e09663a00ec45" \ - && curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL \ - && echo "$ELIXIR_DOWNLOAD_SHA256 elixir-src.tar.gz" | sha256sum -c - \ - && mkdir -p /usr/local/src/elixir \ - && tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz \ - && rm elixir-src.tar.gz \ - && cd /usr/local/src/elixir \ - && make install clean \ - && find /usr/local/src/elixir/ -type f -not -regex "/usr/local/src/elixir/lib/[^\/]*/lib.*" -exec rm -rf {} + \ - && find /usr/local/src/elixir/ -type d -depth -empty -delete +ENV LANG=C.UTF-8 +ENV TERM=xterm-256color # Set up non-root user RUN groupadd --gid $USER_GID $USERNAME \ @@ -141,16 +15,17 @@ RUN groupadd --gid $USER_GID $USERNAME \ && apt-get update \ && apt-get install -y sudo \ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ - && chmod 0440 /etc/sudoers.d/$USERNAME \ - && usermod --shell /bin/zsh root + && chmod 0440 /etc/sudoers.d/$USERNAME RUN cp -r /root/. /home/${USERNAME} \ && chown -R ${USER_UID}:${USER_GID} /home/${USERNAME} \ && chmod a+rx /usr/local/bin/* -RUN sed -i -e s/root/home\\/${USERNAME}/ /home/${USERNAME}/.zshrc + +# Install dependencies and inotify-tools RUN apt-get update -y \ && apt-get install -y --no-install-recommends \ - inotify-tools \ + curl \ + git \ pgcli \ libpq-dev \ httpie \ @@ -160,9 +35,14 @@ RUN apt-get update -y \ python3-typing-extensions \ pre-commit \ && rm -r /var/cache/* /var/lib/apt/lists/* + +# Set up project folder +ENV APP_HOME=/app +RUN mkdir $APP_HOME && chown -R ${USER_UID}:${USER_GID} ${APP_HOME} +WORKDIR $APP_HOME + +RUN usermod --shell /bin/bash ${USERNAME} USER ${USERNAME} -COPY .ssh.sh /home/${USERNAME}/.ssh.sh -USER root -RUN chmod +x /home/${USERNAME}/.ssh.sh -RUN usermod --shell /usr/bin/zsh ${USERNAME} -USER ${USERNAME} + +# Install Hex and Rebar3 +RUN mix local.hex --force && mix local.rebar --force diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 59c2fe4..25e1a47 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "project-dev", + "name": "BathLARP Backend", "remoteUser": "vscode", "dockerComposeFile": [ "docker-compose.yml" @@ -10,9 +10,9 @@ "database" ], "shutdownAction": "stopCompose", - "postCreateCommand": "~/.ssh.sh", + "postCreateCommand": "pre-commit install --hook-type commit-msg", "workspaceFolder": "/workspace", - // "overrideCommand": "", + "overrideCommand": true, // Hack while debugging "customizations": { "vscode": { "extensions": [ @@ -47,5 +47,8 @@ ] } } - } + }, + "mounts": [ + "type=bind,source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home//.ssh,readonly" + ] } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index b90363d..09a0bca 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -9,20 +9,14 @@ services: - ~/.docker:/home/vscode/.docker # Docker socket to access Docker server - /var/run/docker.sock:/var/run/docker.sock - # SSH directory for Linux, OSX and WSL - # On Linux and OSX, a symlink /mnt/ssh <-> ~/.ssh is - # created in the container. On Windows, files are copied - # from /mnt/ssh to ~/.ssh to fix permissions. - - ~/.ssh:/mnt/ssh # Shell history persistence - ~/.zsh_history:/home/vscode/.zsh_history # Git config - ~/.gitconfig:/home/vscode/.gitconfig environment: - TZ= - entrypoint: ["zsh", "-c", "while sleep 1000; do :; done"] + entrypoint: [ "zsh", "-c", "while sleep 1000; do :; done" ] database: image: postgres restart: always env_file: ../.env - From 960587358ef6610ae464f95623e5fe70c3f0e40a Mon Sep 17 00:00:00 2001 From: Judith Owens Date: Fri, 16 May 2025 15:08:34 +0000 Subject: [PATCH 2/5] chore: switch to full not slim base image --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 97730ed..5798ecf 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,5 +1,5 @@ # Use an official Elixir image as the base -FROM elixir:1.18.3-slim +FROM elixir:1.18.3 # Set-up for switching to non-root user ARG USERNAME=vscode From 9043a582b9a8a62d28f3686318a9066a9f293f2d Mon Sep 17 00:00:00 2001 From: Judith Owens Date: Fri, 16 May 2025 15:12:05 +0000 Subject: [PATCH 3/5] chore: fix accidental user creation --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 25e1a47..d0309f6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -49,6 +49,6 @@ } }, "mounts": [ - "type=bind,source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home//.ssh,readonly" + "type=bind,source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/vscode/.ssh,readonly" ] } From 9509ba03b75e2b806a871339d9359660f9a775a3 Mon Sep 17 00:00:00 2001 From: Judith Owens Date: Fri, 16 May 2025 15:39:00 +0000 Subject: [PATCH 4/5] build(devcontainer): gets commitizen running locally --- .cz.toml | 2 ++ .devcontainer/Dockerfile | 6 ++++++ .devcontainer/devcontainer.json | 3 ++- .devcontainer/docker-compose.yml | 2 -- 4 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 .cz.toml diff --git a/.cz.toml b/.cz.toml new file mode 100644 index 0000000..e9e8dbe --- /dev/null +++ b/.cz.toml @@ -0,0 +1,2 @@ +[tool.commitizen] +version = "0.3.0" \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 5798ecf..7b2040b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -34,6 +34,7 @@ RUN apt-get update -y \ libc-dev \ python3-typing-extensions \ pre-commit \ + pipx \ && rm -r /var/cache/* /var/lib/apt/lists/* # Set up project folder @@ -46,3 +47,8 @@ USER ${USERNAME} # Install Hex and Rebar3 RUN mix local.hex --force && mix local.rebar --force + +# Install Commitizen locally +RUN pipx ensurepath \ + && pipx install commitizen \ + && pipx upgrade commitizen \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d0309f6..a822d00 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -30,7 +30,8 @@ "vscode-icons-team.vscode-icons", "ms-azuretools.vscode-docker", "jakebecker.elixir-ls", - "snyk-security.snyk-vulnerability-scanner" + "snyk-security.snyk-vulnerability-scanner", + "samuel-pordeus.elixir-test" ], "settings": { // General settings diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 09a0bca..f152ad1 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.7" - services: vscode: build: . From e0646cca5dba0ce1abb1c4d6fe6b288cccd0cdea Mon Sep 17 00:00:00 2001 From: Judith Owens Date: Thu, 5 Jun 2025 14:07:52 +0000 Subject: [PATCH 5/5] build(devcontainer): updates extensions --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a822d00..6f516ed 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -28,7 +28,7 @@ "spikespaz.vscode-smoothtype", "stkb.rewrap", "vscode-icons-team.vscode-icons", - "ms-azuretools.vscode-docker", + "ms-azuretools.vscode-containers", "jakebecker.elixir-ls", "snyk-security.snyk-vulnerability-scanner", "samuel-pordeus.elixir-test"