From 86b450fb8c73305a9cc6de9498ca5b7c55e4791f Mon Sep 17 00:00:00 2001 From: Daniel Palstra Date: Wed, 16 Mar 2022 17:37:56 +0100 Subject: [PATCH] Improve devcontainer and configure VSCode debugging (#1060) --- .devcontainer/Dockerfile | 18 ++++++++++-------- .devcontainer/devcontainer.json | 27 ++++++++++++++++----------- .pre-commit-config.yaml | 2 +- .vscode/launch.json | 30 +++++++++++------------------- .vscode/settings.json | 31 +++++++++++++++++++++++++------ .vscode/tasks.json | 18 ++++++++++++++++-- 6 files changed, 79 insertions(+), 47 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d9127a9e..936a3c27 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -10,21 +10,24 @@ RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/ # install poetry - respects $POETRY_VERSION & $POETRY_HOME +RUN echo "export PROMPT_COMMAND='history -a'" >> /home/vscode/.bashrc \ + && echo "export HISTFILE=~/commandhistory/.bash_history" >> /home/vscode/.bashrc \ + && chown vscode:vscode -R /home/vscode/ + + ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 \ POETRY_HOME="/opt/poetry" \ - POETRY_VIRTUALENVS_IN_PROJECT=true \ - POETRY_NO_INTERACTION=1 \ - PYSETUP_PATH="/opt/pysetup" \ - VENV_PATH="/opt/pysetup/.venv" + POETRY_VIRTUALENVS_CREATE=false # prepend poetry and venv to path -ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" +ENV PATH="$POETRY_HOME/bin:$PATH" RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python - +# RUN poetry config virtualenvs.create false RUN apt-get update \ && apt-get install --no-install-recommends -y \ @@ -32,7 +35,6 @@ RUN apt-get update \ build-essential \ libpq-dev \ libwebp-dev \ - # LDAP Dependencies libsasl2-dev libldap2-dev libssl-dev \ - gnupg gnupg2 gnupg1 \ - && pip install -U --no-cache-dir pip + gnupg gnupg2 gnupg1 +# && pip install -U --no-cache-dir pip diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9f13d65a..8c45c844 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,10 @@ "NODE_VERSION": "16" } }, - + "mounts": [ + "source=mealie-devcontainer-workspace,target=/workspaces/mealie/frontend/node_modules,type=volume", + "source=mealie-bashhistory,target=/home/vscode/commandhistory,type=volume" + ], // Set *default* container specific settings.json values on container create. "settings": { "python.defaultInterpreterPath": "/usr/local/bin/python", @@ -30,19 +33,21 @@ "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint" }, - // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance"], - + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance" + ], // Use 'forwardPorts' to make a list of ports inside the container available locally. - "forwardPorts": [3000, 9000], - + "forwardPorts": [ + 3000, + 9000 + ], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "make setup", - + "postCreateCommand": "sudo chown -R vscode:vscode /workspaces/mealie/frontend/node_modules && make setup", // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. "remoteUser": "vscode", - "features": { - "git": "latest" - } + // "features": { + // "git": "latest" + // } } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 92273046..b51de2cc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ repos: - id: check-yaml exclude: "mkdocs.yml" - id: check-json - exclude: "devcontainer.json" + exclude: (.vscode|.devcontainer) - id: check-toml - id: end-of-file-fixer - id: trailing-whitespace diff --git a/.vscode/launch.json b/.vscode/launch.json index 41b390fa..db3934d6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,29 +5,21 @@ "version": "0.2.0", "configurations": [ { - "name": "Python: FastAPI", + "name": "Mealie Backend", "type": "python", "request": "launch", "module": "uvicorn", - "args": ["mealie.app:app"], + "args": [ + "mealie.app:app", + "--port", + "9000" + ], + "env": { + "PRODUCTION": "False", + }, "justMyCode": false, - "jinja": true - }, - { - "name": "Python: Current File", - "type": "python", - "request": "launch", - "program": "${file}", - "console": "integratedTerminal", - "justMyCode": false - }, - { - "name": "Debug Tests", - "type": "python", - "request": "test", - "console": "integratedTerminal", - "justMyCode": false, - "env": { "PYTEST_ADDOPTS": "--no-cov" } + "jinja": true, + "preLaunchTask": "Init Database" } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 1b51f1ee..dd7015aa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,11 @@ "backend", "code-generation" ], - "cSpell.enableFiletypes": ["!javascript", "!python", "!yaml"], + "cSpell.enableFiletypes": [ + "!javascript", + "!python", + "!yaml" + ], "cSpell.words": [ "chowdown", "compression", @@ -20,7 +24,9 @@ "source.organizeImports": false }, "editor.formatOnSave": true, - "eslint.workingDirectories": ["./frontend"], + "eslint.workingDirectories": [ + "./frontend" + ], "files.exclude": { "**/__pycache__": true, "**/.DS_Store": true, @@ -29,7 +35,9 @@ "**/.svn": true, "**/CVS": true }, - "i18n-ally.enabledFrameworks": ["vue"], + "i18n-ally.enabledFrameworks": [ + "vue" + ], "i18n-ally.keystyle": "nested", "i18n-ally.localesPaths": "frontend/lang/messages", "i18n-ally.sourceLanguage": "en-US", @@ -37,9 +45,13 @@ "python.linting.enabled": true, "python.linting.flake8Enabled": true, "python.linting.pylintEnabled": false, - "python.linting.pylintArgs": ["--rcfile=${workspaceFolder}/.pylintrc"], + "python.linting.pylintArgs": [ + "--rcfile=${workspaceFolder}/.pylintrc" + ], "python.testing.autoTestDiscoverOnSaveEnabled": false, - "python.testing.pytestArgs": ["tests"], + "python.testing.pytestArgs": [ + "tests" + ], "python.testing.pytestEnabled": true, "python.testing.unittestEnabled": false, "python.analysis.typeCheckingMode": "basic", @@ -47,5 +59,12 @@ "python.sortImports.path": "${workspaceFolder}/.venv/bin/isort", "search.mode": "reuseEditor", "vetur.validation.template": false, - "coverage-gutters.lcovname": "${workspaceFolder}/.coverage" + "coverage-gutters.lcovname": "${workspaceFolder}/.coverage", + "python.testing.unittestArgs": [ + "-v", + "-s", + "./tests", + "-p", + "test_*.py" + ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 24b1da2e..8359af04 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -6,7 +6,9 @@ "command": "make docker-dev", "type": "shell", "args": [], - "problemMatcher": ["$tsc"], + "problemMatcher": [ + "$tsc" + ], "presentation": { "reveal": "always" }, @@ -17,7 +19,9 @@ "command": "make docker-prod", "type": "shell", "args": [], - "problemMatcher": ["$tsc"], + "problemMatcher": [ + "$tsc" + ], "presentation": { "reveal": "always" }, @@ -33,6 +37,16 @@ }, "problemMatcher": [] }, + { + "label": "Init Database", + "command": "poetry run python mealie/db/init_db.py", + "type": "shell", + "presentation": { + "reveal": "always", + "group": "groupA" + }, + "problemMatcher": [] + }, { "label": "Dev: Start Frontend", "command": "make frontend",