aboutsummaryrefslogtreecommitdiff
path: root/.devcontainer
diff options
context:
space:
mode:
authorKevin J Hoerr <kjhoerr@protonmail.com>2021-09-17 21:35:11 +0000
committerKevin J Hoerr <kjhoerr@protonmail.com>2021-09-17 21:35:11 +0000
commit3edc57fa22ad378826c1ed35f2cb0e6d657a20d4 (patch)
tree49080bb4f0fc70bf112d0fb70df7ab9f0e4600f5 /.devcontainer
parent424a95e0ac4a43b53cf4660a5785b5d1115cc3a6 (diff)
downloadao-coverage-3edc57fa22ad378826c1ed35f2cb0e6d657a20d4.tar.gz
ao-coverage-3edc57fa22ad378826c1ed35f2cb0e6d657a20d4.tar.bz2
ao-coverage-3edc57fa22ad378826c1ed35f2cb0e6d657a20d4.zip
Add devcontainer files
Diffstat (limited to '.devcontainer')
-rw-r--r--.devcontainer/Dockerfile27
-rw-r--r--.devcontainer/devcontainer.json27
-rw-r--r--.devcontainer/docker-compose.yml46
-rw-r--r--.devcontainer/node.sh141
4 files changed, 241 insertions, 0 deletions
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000..4765d2d
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,27 @@
+# MongoDB doesn't provide devtools for Debian, so we adapt Ubuntu to use nodejs and MongoDB
+FROM ubuntu:bionic
+
+# Install needed packages, yarn, nvm and setup non-root user
+RUN groupadd --gid 1000 node \
+ && useradd --uid 1000 --gid node --shell /bin/bash --create-home node
+COPY node.sh ./
+RUN chmod +x ./node.sh
+RUN ./node.sh
+
+# Install MongoDB command line tools
+ARG MONGO_TOOLS_VERSION=4.2
+RUN curl -sSL "https://www.mongodb.org/static/pgp/server-${MONGO_TOOLS_VERSION}.asc" | (OUT=$(apt-key add - 2>&1) || echo $OUT) \
+ && echo "deb http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/${MONGO_TOOLS_VERSION} multiverse" | tee /etc/apt/sources.list.d/mongodb-org-${MONGO_TOOLS_VERSION}.list \
+ && apt-get update && export DEBIAN_FRONTEND=noninteractive \
+ && apt-get install -y mongodb-org-tools mongodb-org-shell \
+ && apt-get clean -y && rm -rf /var/lib/apt/lists/*
+
+# Update args in docker-compose.yaml to set the UID/GID of the "node" user
+ARG USER_UID=1000
+ARG USER_GID=$USER_UID
+RUN if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then groupmod --gid $USER_GID node && usermod --uid $USER_UID --gid $USER_GID node; fi
+
+# create /dist and assign it to a volume
+RUN mkdir -p /dist
+RUN chown $USER_UID:$USER_GID /dist
+VOLUME [ "/dist" ]
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000..438255d
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,27 @@
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
+// https://github.com/microsoft/vscode-dev-containers/tree/v0.194.0/containers/javascript-node-mongo
+// Update the VARIANT arg in docker-compose.yml to pick a Node.js version: 10, 12, 14
+{
+ "name": "Ubuntu, Node.js & Mongo DB",
+ "dockerComposeFile": "docker-compose.yml",
+ "service": "app",
+ "workspaceFolder": "/workspace",
+
+ // Set *default* container specific settings.json values on container create.
+ "settings": {},
+
+ // Add the IDs of extensions you want installed when the container is created.
+ "extensions": [
+ "dbaeumer.vscode-eslint",
+ "mongodb.mongodb-vscode"
+ ],
+
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
+ "forwardPorts": [3000, 27017],
+
+ // Use 'postCreateCommand' to run commands after the container is created.
+ // "postCreateCommand": "yarn install",
+
+ // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+ "remoteUser": "node"
+} \ No newline at end of file
diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml
new file mode 100644
index 0000000..3b17947
--- /dev/null
+++ b/.devcontainer/docker-compose.yml
@@ -0,0 +1,46 @@
+version: '3'
+
+services:
+ app:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ args:
+ # [Choice] Node.js version: 16, 14, 12
+ VARIANT: 14
+ # On Linux, you may need to update USER_UID and USER_GID below if not your local UID is not 1000.
+ USER_UID: 1000
+ USER_GID: 1000
+
+ volumes:
+ - ..:/workspace:cached
+
+ # Overrides default command so things don't shut down after the process ends.
+ command: sleep infinity
+
+ # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function.
+ network_mode: service:db
+
+ # Uncomment the next line to use a non-root user for all processes.
+ user: node
+
+ # Use "forwardPorts" in **devcontainer.json** to forward an app port locally.
+ # (Adding the "ports" property to this file will not forward from a Codespace.)
+
+ db:
+ image: mongo:latest
+ restart: unless-stopped
+ volumes:
+ - mongodb-data:/data/db
+
+ # Uncomment to change startup options
+ # environment:
+ # MONGO_INITDB_ROOT_USERNAME: root
+ # MONGO_INITDB_ROOT_PASSWORD: example
+ # MONGO_INITDB_DATABASE: your-database-here
+
+ # Add "forwardPorts": ["27017"] to **devcontainer.json** to forward MongoDB locally.
+ # (Adding the "ports" property to this file will not forward from a Codespace.)
+
+volumes:
+ mongodb-data: \ No newline at end of file
diff --git a/.devcontainer/node.sh b/.devcontainer/node.sh
new file mode 100644
index 0000000..3422fc1
--- /dev/null
+++ b/.devcontainer/node.sh
@@ -0,0 +1,141 @@
+#!/bin/bash
+export NVM_DIR="/usr/local/share/nvm"
+export NODE_VERSION="lts"
+export NVM_VERSION="0.38.0"
+
+USERNAME="node"
+
+updaterc() {
+ echo "Updating /etc/bash.bashrc and /etc/zsh/zshrc..."
+ echo -e "$1" >> /etc/bash.bashrc
+ if [ -f "/etc/zsh/zshrc" ]; then
+ echo -e "$1" >> /etc/zsh/zshrc
+ fi
+}
+
+# Function to run apt-get if needed
+apt_get_update_if_needed()
+{
+ if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then
+ echo "Running apt-get update..."
+ apt-get update
+ else
+ echo "Skipping apt-get update."
+ fi
+}
+
+# Checks if packages are installed and installs them if not
+check_packages() {
+ if ! dpkg -s "$@" > /dev/null 2>&1; then
+ apt_get_update_if_needed
+ apt-get -y install --no-install-recommends "$@"
+ fi
+}
+
+# Ensure apt is in non-interactive to avoid prompts
+export DEBIAN_FRONTEND=noninteractive
+
+# Install dependencies
+check_packages apt-utils \
+ apt-transport-https \
+ curl \
+ ca-certificates \
+ tar \
+ gnupg2 \
+ git \
+ openssh-client \
+ gnupg2 \
+ iproute2 \
+ procps \
+ lsof \
+ htop \
+ net-tools \
+ psmisc \
+ curl \
+ wget \
+ rsync \
+ ca-certificates \
+ unzip \
+ zip \
+ nano \
+ vim-tiny \
+ less \
+ jq \
+ lsb-release \
+ apt-transport-https \
+ dialog \
+ libc6 \
+ libgcc1 \
+ libkrb5-3 \
+ libgssapi-krb5-2 \
+ libicu[0-9][0-9] \
+ liblttng-ust0 \
+ libstdc++6 \
+ zlib1g \
+ locales \
+ sudo \
+ ncdu \
+ man-db \
+ strace \
+ manpages \
+ manpages-dev \
+ init-system-helpers
+
+# Install yarn
+if type yarn > /dev/null 2>&1; then
+ echo "Yarn already installed."
+else
+ # Import key safely (new method rather than deprecated apt-key approach) and install
+ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor > /usr/share/keyrings/yarn-archive-keyring.gpg
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/yarn-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list
+ apt-get update
+ apt-get -y install --no-install-recommends yarn
+fi
+
+# Adjust node version if required
+if [ "${NODE_VERSION}" = "none" ]; then
+ export NODE_VERSION=
+elif [ "${NODE_VERSION}" = "lts" ]; then
+ export NODE_VERSION="lts/*"
+fi
+
+# Install the specified node version if NVM directory already exists, then exit
+if [ -d "${NVM_DIR}" ]; then
+ echo "NVM already installed."
+ if [ "${NODE_VERSION}" != "" ]; then
+ su ${USERNAME} -c ". $NVM_DIR/nvm.sh && nvm install ${NODE_VERSION} && nvm clear-cache"
+ fi
+ exit 0
+fi
+
+# Create nvm group, nvm dir, and set sticky bit
+if ! cat /etc/group | grep -e "^nvm:" > /dev/null 2>&1; then
+ groupadd -r nvm
+fi
+umask 0002
+usermod -a -G nvm ${USERNAME}
+mkdir -p ${NVM_DIR}
+chown :nvm ${NVM_DIR}
+chmod g+s ${NVM_DIR}
+su $USERNAME -c "$(cat << EOF
+ set -e
+ umask 0002
+ # Do not update profile - we'll do this manually
+ export PROFILE=/dev/null
+ curl -so- https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh | bash
+ source ${NVM_DIR}/nvm.sh
+ if [ "${NODE_VERSION}" != "" ]; then
+ nvm alias default ${NODE_VERSION}
+ fi
+ nvm clear-cache
+EOF
+)" 2>&1
+# Update rc files
+updaterc "$(cat <<EOF
+export NVM_DIR="${NVM_DIR}"
+[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh"
+[ -s "\$NVM_DIR/bash_completion" ] && . "\$NVM_DIR/bash_completion"
+EOF
+)"
+
+echo "Done!" \ No newline at end of file