From 23381136553c3725f189da01d79a6567e0bea2f1 Mon Sep 17 00:00:00 2001 From: Raccoon Date: Wed, 26 May 2021 05:14:47 +0800 Subject: [PATCH] chore: add dev container Signed-off-by: Raccoon --- .devcontainer/Dockerfile | 14 ++++++++ .devcontainer/devcontainer.json | 58 ++++++++++++++++++++++++++++++++ .devcontainer/docker-compose.yml | 46 +++++++++++++++++++++++++ package.json | 2 +- 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..7ea372f6 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,14 @@ +# [Choice] Node.js version: 16, 14, 12 +ARG VARIANT=12-buster +FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment if you want to install an additional version of node using nvm +# ARG EXTRA_NODE_VERSION=10 +# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" + +# [Optional] Uncomment if you want to install more global node modules +RUN su node -c "npm install -g npm@6" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..9807ec0e --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,58 @@ +{ + "name": "CodiMD", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspace", + + // Set *default* container specific settings.json values on container create. + "settings": { + "terminal.integrated.shell.linux": "/bin/zsh", + "sqltools.connections": [{ + "name": "Container Database", + "driver": "PostgreSQL", + "previewLimit": 50, + "server": "localhost", + "port": 5432, + "database": "codimd", + "username": "codimd", + "password": "codimd" + }], + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "dbaeumer.vscode-eslint", + "visualstudioexptteam.vscodeintellicode", + "christian-kohler.path-intellisense", + "standard.vscode-standard", + "mtxr.sqltools", + "mtxr.sqltools-driver-pg", + "eamodio.gitlens", + "codestream.codestream", + "github.vscode-pull-request-github", + "cschleiden.vscode-github-actions", + "hbenl.vscode-mocha-test-adapter", + "hbenl.vscode-test-explorer" + ], + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + "portsAttributes": { + "3000": { + "label": "CodiMD server", + "onAutoForward": "notify" + }, + "5432": { + "label": "PostgreSQL", + "onAutoForward": "notify" + } + }, + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + "postCreateCommand": "sudo chown -R node:node node_modules && /workspace/bin/setup", + + // 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 00000000..7d0c2be3 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,46 @@ +version: '3' + +services: + app: + build: + context: .. + dockerfile: .devcontainer/Dockerfile + args: + VARIANT: 12-buster + environment: + - CMD_DB_URL=postgres://codimd:codimd@localhost/codimd + - CMD_USECDN=false + volumes: + - ..:/workspace:cached + - node_modules:/workspace/node_modules: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 + + # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. + + # Uncomment the next line to use a non-root user for all processes. + # user: vscode + + # 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: postgres:12.7-alpine + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=codimd + - POSTGRES_PASSWORD=codimd + - POSTGRES_DB=codimd + + # Add "forwardPorts": ["5432"] to **devcontainer.json** to forward PostgreSQL locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + +volumes: + node_modules: + postgres-data: \ No newline at end of file diff --git a/package.json b/package.json index a55ecc92..f9bff863 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "dev": "webpack --config webpack.dev.js --progress --colors --watch", "doctoc": "doctoc --title='# Table of Contents' README.md", "lint": "standard", - "jsonlint": "find . -type f -not -ipath \"./node_modules/*\" -not -ipath \"./.vscode/*\" \\( -name \"*.json\" -o -name \"*.json.*\" \\) | xargs -n 1 -I{} -- bash -c 'echo {}; jq . {} > /dev/null;'", + "jsonlint": "find . -type f -not -ipath \"./.devcontainer/*\" -not -ipath \"./node_modules/*\" -not -ipath \"./.vscode/*\" \\( -name \"*.json\" -o -name \"*.json.*\" \\) | xargs -n 1 -I{} -- bash -c 'echo {}; jq . {} > /dev/null;'", "start": "sequelize db:migrate && node app.js", "mocha": "mocha --require intelli-espower-loader --exit ./test --recursive", "mocha:ci": "mocha --no-color -R dot --require intelli-espower-loader --exit ./test --recursive",