mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-30 20:55:42 +00:00 
			
		
		
		
	vscode devcontainer (#3474)
* Added devcontainer configuration files * Added launch.json and improved devcontainer * Added tasks.json * fix: lint * fix: lint * Applied suggestions from codereview * Added more system dependencies and preserve history * devcontainer updates - Add extra environment variables for InvenTree config - Move venv into dev directory (cleaner structure) - Ensure base package requirements get installed - Handle write-permission error for compiling translations - Install test data inside dev directory * Auto create plugin dir and added gh cli * Refactored postCreateCommand into own file * Applied suggestions from codereview Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
This commit is contained in:
		
							
								
								
									
										47
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.241.1/containers/python-3/.devcontainer/base.Dockerfile | ||||||
|  |  | ||||||
|  | # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster | ||||||
|  | ARG VARIANT="3.10-bullseye" | ||||||
|  | FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} | ||||||
|  |  | ||||||
|  | # [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 | ||||||
|  | ARG NODE_VERSION="none" | ||||||
|  | RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi | ||||||
|  |  | ||||||
|  | # [Optional] If your pip requirements rarely change, uncomment this section to add them to the image. | ||||||
|  | # COPY requirements.txt /tmp/pip-tmp/ | ||||||
|  | # RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \ | ||||||
|  | #    && rm -rf /tmp/pip-tmp | ||||||
|  |  | ||||||
|  | # [Optional] Uncomment this section to install additional OS packages. | ||||||
|  | RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && \ | ||||||
|  |     apt-get -y install --no-install-recommends \ | ||||||
|  |     git gcc g++ gettext gnupg libffi-dev \ | ||||||
|  |     # Weasyprint requirements : https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#debian-11 | ||||||
|  |     poppler-utils libpango-1.0-0 libpangoft2-1.0-0 \ | ||||||
|  |     # Image format support | ||||||
|  |     libjpeg-dev webp \ | ||||||
|  |     # SQLite support | ||||||
|  |     sqlite3 \ | ||||||
|  |     # PostgreSQL support | ||||||
|  |     libpq-dev \ | ||||||
|  |     # MySQL / MariaDB support | ||||||
|  |     default-libmysqlclient-dev mariadb-client && \ | ||||||
|  |     apt-get autoclean && apt-get autoremove | ||||||
|  |  | ||||||
|  | # [Optional] Uncomment this line to install global node packages. | ||||||
|  | # RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1 | ||||||
|  |  | ||||||
|  | # Update pip | ||||||
|  | RUN pip install --upgrade pip | ||||||
|  |  | ||||||
|  | # Install required base-level python packages | ||||||
|  | COPY ./docker/requirements.txt base_requirements.txt | ||||||
|  | RUN pip install --disable-pip-version-check -U -r base_requirements.txt | ||||||
|  |  | ||||||
|  | # preserve command history between container starts | ||||||
|  | # Ref: https://code.visualstudio.com/remote/advancedcontainers/persist-bash-history | ||||||
|  | # Folder will be created in 'postCreateCommand' in devcontainer.json as it's not preserved due to the bind mount | ||||||
|  | RUN echo "export PROMPT_COMMAND='history -a' && export HISTFILE=/workspaces/InvenTree/dev/commandhistory/.bash_history" >> "/home/vscode/.bashrc" | ||||||
|  |  | ||||||
|  | WORKDIR /workspaces/InvenTree | ||||||
							
								
								
									
										87
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | |||||||
|  | // 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.241.1/containers/python-3 | ||||||
|  | { | ||||||
|  |   "name": "InvenTree", | ||||||
|  |   "build": { | ||||||
|  |     "dockerfile": "Dockerfile", | ||||||
|  |     "context": "..", | ||||||
|  |     "args": { | ||||||
|  |       // Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6 | ||||||
|  |       // Append -bullseye or -buster to pin to an OS version. | ||||||
|  |       // Use -bullseye variants on local on arm64/Apple Silicon. | ||||||
|  |       "VARIANT": "3.10-bullseye", | ||||||
|  |       // Options | ||||||
|  |       "NODE_VERSION": "lts/*" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   // Configure tool-specific properties. | ||||||
|  |   "customizations": { | ||||||
|  |     // Configure properties specific to VS Code. | ||||||
|  |     "vscode": { | ||||||
|  |       // Set *default* container specific settings.json values on container create. | ||||||
|  |       "settings": { | ||||||
|  |         "python.defaultInterpreterPath": "/workspaces/InvenTree/dev/venv/bin/python", | ||||||
|  |         "python.linting.enabled": true, | ||||||
|  |         "python.linting.pylintEnabled": false, | ||||||
|  |         "python.linting.flake8Enabled": true, | ||||||
|  |         "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", | ||||||
|  |         "python.formatting.blackPath": "/usr/local/py-utils/bin/black", | ||||||
|  |         "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", | ||||||
|  |         "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", | ||||||
|  |         "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", | ||||||
|  |         "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", | ||||||
|  |         "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", | ||||||
|  |         "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", | ||||||
|  |         "batisteo.vscode-django" | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   // Use 'forwardPorts' to make a list of ports inside the container available locally. | ||||||
|  |   "forwardPorts": [8000], | ||||||
|  |   "portsAttributes": { | ||||||
|  |     "8000": { | ||||||
|  |       "label": "InvenTree server" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   // Use 'postCreateCommand' to run commands after the container is created. | ||||||
|  |   "postCreateCommand": "./.devcontainer/postCreateCommand.sh", | ||||||
|  |  | ||||||
|  |   // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. | ||||||
|  |   "remoteUser": "vscode", | ||||||
|  |   "features": { | ||||||
|  |     "git": "os-provided", | ||||||
|  |     "github-cli": "latest" | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   "remoteEnv": { | ||||||
|  |     // Inventree config | ||||||
|  |     "INVENTREE_DEBUG": "True", | ||||||
|  |     "INVENTREE_DEBUG_LEVEL": "INFO", | ||||||
|  |     "INVENTREE_DB_ENGINE": "sqlite3", | ||||||
|  |     "INVENTREE_DB_NAME": "/workspaces/InvenTree/dev/database.sqlite3", | ||||||
|  |     "INVENTREE_MEDIA_ROOT": "/workspaces/InvenTree/dev/media", | ||||||
|  |     "INVENTREE_STATIC_ROOT": "/workspaces/InvenTree/dev/static", | ||||||
|  |     "INVENTREE_CONFIG_FILE": "/workspaces/InvenTree/dev/config.yaml", | ||||||
|  |     "INVENTREE_SECRET_KEY_FILE": "/workspaces/InvenTree/dev/secret_key.txt", | ||||||
|  |     "INVENTREE_PLUGIN_DIR": "/workspaces/InvenTree/dev/plugins", | ||||||
|  |     "INVENTREE_PLUGIN_FILE": "/workspaces/InvenTree/dev/plugins.txt", | ||||||
|  |  | ||||||
|  |     // Python config | ||||||
|  |     "PIP_USER": "no", | ||||||
|  |  | ||||||
|  |     // used to load the venv into the PATH and avtivate it | ||||||
|  |     // Ref: https://stackoverflow.com/a/56286534 | ||||||
|  |     "VIRTUAL_ENV": "/workspaces/InvenTree/dev/venv", | ||||||
|  |     "PATH": "/workspaces/InvenTree/dev/venv/bin:${containerEnv:PATH}" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										14
									
								
								.devcontainer/postCreateCommand.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								.devcontainer/postCreateCommand.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | # create folders | ||||||
|  | mkdir -p /workspaces/InvenTree/dev/{commandhistory,plugins} | ||||||
|  | cd /workspaces/InvenTree | ||||||
|  |  | ||||||
|  | # create venv | ||||||
|  | python3 -m venv dev/venv | ||||||
|  | . dev/venv/bin/activate | ||||||
|  |  | ||||||
|  | # setup inventree server | ||||||
|  | pip install invoke | ||||||
|  | inv update | ||||||
|  | inv setup-dev | ||||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -66,9 +66,16 @@ secret_key.txt | |||||||
| # IDE / development files | # IDE / development files | ||||||
| .idea/ | .idea/ | ||||||
| *.code-workspace | *.code-workspace | ||||||
| .vscode/ |  | ||||||
| .bash_history | .bash_history | ||||||
|  |  | ||||||
|  | # https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore | ||||||
|  | .vscode/* | ||||||
|  | #!.vscode/settings.json | ||||||
|  | !.vscode/tasks.json | ||||||
|  | !.vscode/launch.json | ||||||
|  | #!.vscode/extensions.json | ||||||
|  | #!.vscode/*.code-snippets | ||||||
|  |  | ||||||
| # Coverage reports | # Coverage reports | ||||||
| .coverage | .coverage | ||||||
| htmlcov/ | htmlcov/ | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | { | ||||||
|  |   // Use IntelliSense to learn about possible attributes. | ||||||
|  |   // Hover to view descriptions of existing attributes. | ||||||
|  |   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||||
|  |   "version": "0.2.0", | ||||||
|  |   "configurations": [ | ||||||
|  |     { | ||||||
|  |       "name": "InvenTree Server", | ||||||
|  |       "type": "python", | ||||||
|  |       "request": "launch", | ||||||
|  |       "program": "${workspaceFolder}/InvenTree/manage.py", | ||||||
|  |       "args": ["runserver"], | ||||||
|  |       "django": true, | ||||||
|  |       "justMyCode": true | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "name": "Python: Django - 3rd party", | ||||||
|  |       "type": "python", | ||||||
|  |       "request": "launch", | ||||||
|  |       "program": "${workspaceFolder}/InvenTree/manage.py", | ||||||
|  |       "args": ["runserver"], | ||||||
|  |       "django": true, | ||||||
|  |       "justMyCode": false | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | { | ||||||
|  |   // See https://go.microsoft.com/fwlink/?LinkId=733558 | ||||||
|  |   // for the documentation about the tasks.json format | ||||||
|  |   "version": "2.0.0", | ||||||
|  |   "tasks": [ | ||||||
|  |     { | ||||||
|  |       "label": "clean-settings", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv clean-settings", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "delete-data", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv delete-data", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "migrate", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv migrate", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "server", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv server", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "setup-dev", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv setup-dev", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "setup-test", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv setup-test --path dev/inventree-demo-dataset", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "superuser", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv superuser", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "test", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv test", | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "label": "update", | ||||||
|  |       "type": "shell", | ||||||
|  |       "command": "inv update", | ||||||
|  |     }, | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								tasks.py
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tasks.py
									
									
									
									
									
								
							| @@ -230,7 +230,10 @@ def update(c): | |||||||
|     """ |     """ | ||||||
|     # Recompile the translation files (.mo) |     # Recompile the translation files (.mo) | ||||||
|     # We do not run 'invoke translate' here, as that will touch the source (.po) files too! |     # We do not run 'invoke translate' here, as that will touch the source (.po) files too! | ||||||
|  |     try: | ||||||
|         manage(c, 'compilemessages', pty=True) |         manage(c, 'compilemessages', pty=True) | ||||||
|  |     except Exception: | ||||||
|  |         print("WARNING: Translation files could not be compiled:") | ||||||
|  |  | ||||||
|  |  | ||||||
| # Data tasks | # Data tasks | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user