diff --git a/.theia/launch.json b/.theia/launch.json new file mode 100644 index 00000000..3c9d23f4 --- /dev/null +++ b/.theia/launch.json @@ -0,0 +1,57 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal" + }, + { + "name": "Odoo: shell", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-run.py", + "args": ["shell", "--no-xmlrpc"], + "console": "integratedTerminal" + }, + { + "name": "Odoo: TEST 'sale'", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-run.py", + "args": ["-i", "sale", + "-u", "sale", + "--test-enable", "--no-xmlrpc", "--stop-after-init"], + "console": "integratedTerminal" + }, + { + "name": "Odoo: server", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-run.py", + "args": [], + "console": "integratedTerminal" + }, + { + "name": "Odoo: reload foreground server", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-reload.py", + "args": [], + "console": "integratedTerminal" + }, + { + "name": "Odoo: reload foreground server, Kill Others", + "type": "python", + "request": "launch", + "program": "/opt/odoo/hibou-suite/odoo-reload.py", + "args": ["KILL_OTHER"], + "console": "integratedTerminal" + } + ] +} + diff --git a/.theia/settings.json b/.theia/settings.json new file mode 100644 index 00000000..720fd1c4 --- /dev/null +++ b/.theia/settings.json @@ -0,0 +1,17 @@ +{ + "workbench.colorTheme": "Hibou Dark", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/*.pyc": {"when": "$(basename).py"}, + "**/__pycache__": true + }, + "files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/node_modules/**": true + } +} diff --git a/Dockerfile b/Dockerfile index 6f84391a..195716b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ FROM hibou/hibou-odoo:12.0 -USER 104 +USER odoo +COPY --from=registry.gitlab.com/hibou-io/athene /opt/athene /opt/athene COPY --from=hibou/flow /flow /flow COPY --chown=104 entrypoint.sh /entrypoint.sh COPY --chown=104 . /opt/odoo/hibou-suite @@ -8,3 +9,8 @@ RUN rm /etc/odoo/odoo.conf \ && cp /opt/odoo/hibou-suite/debian/odoo.conf /etc/odoo/odoo.conf \ ; +EXPOSE 3000 +ENV SHELL=/bin/bash \ + THEIA_DEFAULT_PLUGINS=local-dir:/opt/athene/plugins +ENV USE_LOCAL_GIT true + diff --git a/Dockerfile-GitLab b/Dockerfile-GitLab index 6680edec..23ecf558 100644 --- a/Dockerfile-GitLab +++ b/Dockerfile-GitLab @@ -1,10 +1,16 @@ FROM registry.gitlab.com/hibou-io/hibou-odoo/odoo:RELEASE -USER 104 -COPY --from=registry.gitlab.com/hibou-io/hibou-odoo/flow /flow /flow +USER odoo +COPY --from=registry.gitlab.com/hibou-io/athene /opt/athene /opt/athene +COPY --from=hibou/flow /flow /flow COPY --chown=104 entrypoint.sh /entrypoint.sh COPY --chown=104 . /opt/odoo/hibou-suite RUN rm /etc/odoo/odoo.conf \ && cp /opt/odoo/hibou-suite/debian/odoo.conf /etc/odoo/odoo.conf \ ; +EXPOSE 3000 +ENV SHELL=/bin/bash \ + THEIA_DEFAULT_PLUGINS=local-dir:/opt/athene/plugins +ENV USE_LOCAL_GIT true + diff --git a/entrypoint.sh b/entrypoint.sh index 679832ec..74ca0bc0 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -2,6 +2,29 @@ set -e +# DEV_MODE=exclusive +# Will start the Theia IDE in the foreground, you can then start Odoo from a terminal. +# DEV_MODE=1 +# Will start the Theia IDE in the background, regular Odoo commands will still work. +# Note that in Theia you can re-start Odoo e.g. +# `kill -s SIGHUP 1` to reload/restart Odoo +# `kill -s SIGQUIT 1` to cause Odoo to dump stacktrace in standard out +# Note that with Odoo running in the foreground, killing Odoo will kill the container. +# DEV_MODE= +# Unset to not use Theia at all. +# +# DEV_MODE_PATH=/opt/odoo/addons +# To change the path to start Theia in, useful to get git working. + +if [ "$DEV_MODE_PATH" == "" ] +then + export DEV_MODE_PATH=/opt/odoo/hibou-suite +fi +if [[ -x "/opt/athene/entrypoint.sh" ]] +then + /opt/athene/entrypoint.sh +fi + # set the postgres database host, port, user and password according to the environment # and pass them as arguments to the odoo process if not present in the config file : ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} diff --git a/odoo-reload.py b/odoo-reload.py new file mode 100755 index 00000000..a633c8e8 --- /dev/null +++ b/odoo-reload.py @@ -0,0 +1,38 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + +import psutil +import os +import signal +import sys + +PID = 1 +PNAME = 'odoo' +PNAME_PYTHON = ['python'] +PNAME_KILL_OTHER = [PNAME] + PNAME_PYTHON +KILL_OTHER = sys.argv[1] == 'KILL_OTHER' if len(sys.argv) >= 2 else False +if KILL_OTHER: + print('Will find other Odoo Processes and Kill them.') + +is_foreground = False +for proc in psutil.process_iter(): + try: + process_name = proc.name() + process_id = proc.pid + print('Inspecting %s:%s' % (process_id, process_name)) + if process_id == PID: + is_foreground = process_name == PNAME + if not KILL_OTHER: + break + if process_id != PID and KILL_OTHER and process_name in PNAME_KILL_OTHER: + print('Killing %s:%s' % (process_id, process_name)) + os.kill(process_id, signal.SIGKILL) + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + pass + +if not is_foreground: + print('Odoo is not the foreground process.') + exit(-1) + +print('Signalling reload to Odoo') +os.kill(PID, signal.SIGHUP) + diff --git a/odoo-run.py b/odoo-run.py new file mode 100755 index 00000000..7984b22d --- /dev/null +++ b/odoo-run.py @@ -0,0 +1,5 @@ +__import__('os').environ['TZ'] = 'UTC' +import odoo + +if __name__ == "__main__": + odoo.cli.main()