From f876600365399a86e76035bb41b4372f0de6ad5d Mon Sep 17 00:00:00 2001 From: codex-binaural Date: Tue, 17 Jun 2025 13:54:20 -0400 Subject: [PATCH 1/3] Add Docker support --- .dockerignore | 11 ++++++++++ Dockerfile | 18 ++++++++++++++++ README.md | 13 ++++++++++++ docker-compose.yml | 53 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/builder.sh | 11 ++++++++++ scripts/leader.sh | 11 ++++++++++ scripts/runbot.sh | 9 ++++++++ 7 files changed, 126 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 scripts/builder.sh create mode 100755 scripts/leader.sh create mode 100755 scripts/runbot.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..b095016bf --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +.git +__pycache__ +*.pyc +*.pyo +*.pyd +*.db +*.sqlite3 +*.egg-info +dist +build +*.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..0c9431ca0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM odoo:17 + +USER root + +WORKDIR /opt/odoo + +COPY requirements.txt /tmp/requirements.txt +RUN pip3 install --no-cache-dir -r /tmp/requirements.txt + +COPY . /opt/odoo/runbot +COPY scripts /opt/odoo/scripts + +ENV ADDONS_PATH=/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot + +RUN mkdir -p /var/log/odoo + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["odoo"] diff --git a/README.md b/README.md index 11da0dda0..9236ac785 100644 --- a/README.md +++ b/README.md @@ -315,3 +315,16 @@ Or by providing a plain Dockerfile in the template. Once the Dockerfile is created and the `to_build` field is checked, the Dockerfile will be built (pay attention that no other operations will occur during the build). A version or a bundle can be assigned a specific Dockerfile. + +## Docker Compose + +For a quick local setup the project can be started using Docker. After +building the image, simply run: + +```bash +docker compose up +``` + +This command will start PostgreSQL together with the Runbot, builder and +leader services. Once the initialization is complete the Runbot interface +will be reachable on [http://localhost:8069](http://localhost:8069). diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..c6c3cf260 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3.8' +services: + db: + image: postgres:15 + environment: + POSTGRES_DB: runbot + POSTGRES_USER: odoo + POSTGRES_PASSWORD: odoo + volumes: + - pgdata:/var/lib/postgresql/data + + runbot: + build: . + command: ["/opt/odoo/scripts/runbot.sh"] + depends_on: + - db + ports: + - "8069:8069" + environment: + DB_HOST: db + DB_USER: odoo + DB_PASSWORD: odoo + DB_NAME: runbot + ADDONS_PATH: "/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot" + + builder: + build: . + command: ["/opt/odoo/scripts/builder.sh"] + depends_on: + - db + environment: + DB_HOST: db + DB_USER: odoo + DB_PASSWORD: odoo + DB_NAME: runbot + ADDONS_PATH: "/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot" + FORCED_HOST_NAME: builder + + leader: + build: . + command: ["/opt/odoo/scripts/leader.sh"] + depends_on: + - db + environment: + DB_HOST: db + DB_USER: odoo + DB_PASSWORD: odoo + DB_NAME: runbot + ADDONS_PATH: "/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot" + FORCED_HOST_NAME: leader + +volumes: + pgdata: diff --git a/scripts/builder.sh b/scripts/builder.sh new file mode 100755 index 000000000..7f5dd67ec --- /dev/null +++ b/scripts/builder.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e +exec python3 /opt/odoo/runbot_builder/builder.py \ + --odoo-path=/usr/lib/python3/dist-packages/odoo \ + --addons-path=${ADDONS_PATH} \ + -d ${DB_NAME:-runbot} \ + --db_host=${DB_HOST:-db} \ + --db_port=${DB_PORT:-5432} \ + --db_user=${DB_USER:-odoo} \ + --db_password=${DB_PASSWORD:-odoo} \ + --forced-host-name=${FORCED_HOST_NAME:-builder} diff --git a/scripts/leader.sh b/scripts/leader.sh new file mode 100755 index 000000000..e1e1591f2 --- /dev/null +++ b/scripts/leader.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e +exec python3 /opt/odoo/runbot_builder/leader.py \ + --odoo-path=/usr/lib/python3/dist-packages/odoo \ + --addons-path=${ADDONS_PATH} \ + -d ${DB_NAME:-runbot} \ + --db_host=${DB_HOST:-db} \ + --db_port=${DB_PORT:-5432} \ + --db_user=${DB_USER:-odoo} \ + --db_password=${DB_PASSWORD:-odoo} \ + --forced-host-name=${FORCED_HOST_NAME:-leader} diff --git a/scripts/runbot.sh b/scripts/runbot.sh new file mode 100755 index 000000000..7eaf735cd --- /dev/null +++ b/scripts/runbot.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e +exec odoo --workers=2 --without-demo=1 --max-cron-threads=1 \ + --addons-path=${ADDONS_PATH} \ + -d ${DB_NAME:-runbot} \ + --db_host=${DB_HOST:-db} \ + --db_port=${DB_PORT:-5432} \ + --db_user=${DB_USER:-odoo} \ + --db_password=${DB_PASSWORD:-odoo} From 127ac3db6d2571a8a7e2b3e36c2aa5270d5ac529 Mon Sep 17 00:00:00 2001 From: codex-binaural Date: Tue, 17 Jun 2025 14:12:22 -0400 Subject: [PATCH 2/3] Fix paths and improve Compose --- docker-compose.yml | 18 +++++++++++++++--- scripts/builder.sh | 2 +- scripts/leader.sh | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c6c3cf260..47b4d6b06 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,12 +8,19 @@ services: POSTGRES_PASSWORD: odoo volumes: - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD", "pg_isready", "-U", "odoo"] + interval: 5s + timeout: 5s + retries: 5 + restart: unless-stopped runbot: build: . command: ["/opt/odoo/scripts/runbot.sh"] depends_on: - - db + db: + condition: service_healthy ports: - "8069:8069" environment: @@ -22,12 +29,14 @@ services: DB_PASSWORD: odoo DB_NAME: runbot ADDONS_PATH: "/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot" + restart: unless-stopped builder: build: . command: ["/opt/odoo/scripts/builder.sh"] depends_on: - - db + db: + condition: service_healthy environment: DB_HOST: db DB_USER: odoo @@ -35,12 +44,14 @@ services: DB_NAME: runbot ADDONS_PATH: "/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot" FORCED_HOST_NAME: builder + restart: unless-stopped leader: build: . command: ["/opt/odoo/scripts/leader.sh"] depends_on: - - db + db: + condition: service_healthy environment: DB_HOST: db DB_USER: odoo @@ -48,6 +59,7 @@ services: DB_NAME: runbot ADDONS_PATH: "/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot" FORCED_HOST_NAME: leader + restart: unless-stopped volumes: pgdata: diff --git a/scripts/builder.sh b/scripts/builder.sh index 7f5dd67ec..1ae88f521 100755 --- a/scripts/builder.sh +++ b/scripts/builder.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -exec python3 /opt/odoo/runbot_builder/builder.py \ +exec python3 /opt/odoo/runbot/runbot_builder/builder.py \ --odoo-path=/usr/lib/python3/dist-packages/odoo \ --addons-path=${ADDONS_PATH} \ -d ${DB_NAME:-runbot} \ diff --git a/scripts/leader.sh b/scripts/leader.sh index e1e1591f2..d853f98bf 100755 --- a/scripts/leader.sh +++ b/scripts/leader.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -exec python3 /opt/odoo/runbot_builder/leader.py \ +exec python3 /opt/odoo/runbot/runbot_builder/leader.py \ --odoo-path=/usr/lib/python3/dist-packages/odoo \ --addons-path=${ADDONS_PATH} \ -d ${DB_NAME:-runbot} \ From e80c34adc8e9c404e40d18cd9ba81710a4a5f671 Mon Sep 17 00:00:00 2001 From: codex-binaural Date: Tue, 17 Jun 2025 14:12:27 -0400 Subject: [PATCH 3/3] Fix builder paths and Dockerfile --- Dockerfile | 6 +++++- README.md | 5 +++-- scripts/builder.sh | 2 +- scripts/leader.sh | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0c9431ca0..d0fcf5471 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,11 +8,15 @@ COPY requirements.txt /tmp/requirements.txt RUN pip3 install --no-cache-dir -r /tmp/requirements.txt COPY . /opt/odoo/runbot +COPY runbot_builder /opt/odoo/runbot_builder COPY scripts /opt/odoo/scripts ENV ADDONS_PATH=/usr/lib/python3/dist-packages/odoo/addons,/opt/odoo/runbot -RUN mkdir -p /var/log/odoo +RUN mkdir -p /var/log/odoo && \ + chmod +x /opt/odoo/scripts/*.sh + +USER odoo ENTRYPOINT ["/entrypoint.sh"] CMD ["odoo"] diff --git a/README.md b/README.md index 9236ac785..c0eb218bd 100644 --- a/README.md +++ b/README.md @@ -318,8 +318,9 @@ A version or a bundle can be assigned a specific Dockerfile. ## Docker Compose -For a quick local setup the project can be started using Docker. After -building the image, simply run: +For a quick local setup the project can be started using Docker. If the +image is not built yet, run `docker compose build` first and then start +the services with: ```bash docker compose up diff --git a/scripts/builder.sh b/scripts/builder.sh index 1ae88f521..7f5dd67ec 100755 --- a/scripts/builder.sh +++ b/scripts/builder.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -exec python3 /opt/odoo/runbot/runbot_builder/builder.py \ +exec python3 /opt/odoo/runbot_builder/builder.py \ --odoo-path=/usr/lib/python3/dist-packages/odoo \ --addons-path=${ADDONS_PATH} \ -d ${DB_NAME:-runbot} \ diff --git a/scripts/leader.sh b/scripts/leader.sh index d853f98bf..e1e1591f2 100755 --- a/scripts/leader.sh +++ b/scripts/leader.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -exec python3 /opt/odoo/runbot/runbot_builder/leader.py \ +exec python3 /opt/odoo/runbot_builder/leader.py \ --odoo-path=/usr/lib/python3/dist-packages/odoo \ --addons-path=${ADDONS_PATH} \ -d ${DB_NAME:-runbot} \