diff --git a/.theia/launch.json b/.theia/launch.json new file mode 100644 index 00000000..a43ff192 --- /dev/null +++ b/.theia/launch.json @@ -0,0 +1,49 @@ +{ + // 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" + } + ] +} + diff --git a/Dockerfile b/Dockerfile index 78a12ae4..69090b57 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM hibou/hibou-odoo:14.0 +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 @@ -7,3 +9,7 @@ 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 f63ca08d..c9d224c4 100644 --- a/Dockerfile-GitLab +++ b/Dockerfile-GitLab @@ -1,5 +1,7 @@ FROM registry.gitlab.com/hibou-io/hibou-odoo/odoo:RELEASE +USER odoo +COPY --from=registry.gitlab.com/hibou-io/athene /opt/athene /opt/athene COPY --from=registry.gitlab.com/hibou-io/hibou-odoo/flow /flow /flow COPY --chown=104 entrypoint.sh /entrypoint.sh COPY --chown=104 . /opt/odoo/hibou-suite @@ -7,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/entrypoint.sh b/entrypoint.sh index 679832ec..cf07e6a1 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..c84471ab --- /dev/null +++ b/odoo-reload.py @@ -0,0 +1,24 @@ +import psutil +import os +import signal + +PID = 1 +PNAME = 'odoo' +is_foreground = False +for proc in psutil.process_iter(): + try: + process_name = proc.name() + process_id = proc.pid + if process_id == PID: + is_foreground = process_name == PNAME + break + 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()