From c78e9c40c01d87aa466518ff540438cd5b31e403 Mon Sep 17 00:00:00 2001 From: Marcus Ahlfors Date: Tue, 17 Oct 2023 09:46:14 +0300 Subject: [PATCH] Make odoo build separate action --- .github/workflows/Odoo16ArmBuild.yaml | 9 ++--- Odoo16Docker/entrypoint.sh | 49 +++++++++++++++++++++++++++ Odoo16Docker/odoo.conf | 37 ++++++++++++++++++++ Odoo16Docker/wait-for-psql.py | 33 +++++++++++++++++- 4 files changed, 123 insertions(+), 5 deletions(-) mode change 100644 => 100755 Odoo16Docker/entrypoint.sh diff --git a/.github/workflows/Odoo16ArmBuild.yaml b/.github/workflows/Odoo16ArmBuild.yaml index 1c58528..950925f 100644 --- a/.github/workflows/Odoo16ArmBuild.yaml +++ b/.github/workflows/Odoo16ArmBuild.yaml @@ -2,12 +2,13 @@ name: Odoo16ArmBuild # # Since Odoo doesnt' provide an Arm build we need to do one ourselves -# +# NOTE! This is triggered with odoo-v0.0.1 style tag so we don't always +# do this on: push: - #tags: - # - 'odoo*' + tags: + - 'odoo-*' env: REGISTRY: ghcr.io @@ -15,7 +16,7 @@ env: jobs: build: - runs-on: ubuntu-latest + runs-on: buildjet-8vcpu-ubuntu-2204-arm permissions: contents: read packages: write diff --git a/Odoo16Docker/entrypoint.sh b/Odoo16Docker/entrypoint.sh old mode 100644 new mode 100755 index e69de29..9016439 --- a/Odoo16Docker/entrypoint.sh +++ b/Odoo16Docker/entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +set -e + +if [ -v PASSWORD_FILE ]; then + PASSWORD="$(< $PASSWORD_FILE)" +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'}} +: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}} +: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}} +: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}} + +DB_ARGS=() +function check_config() { + param="$1" + value="$2" + if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then + value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g') + fi; + DB_ARGS+=("--${param}") + DB_ARGS+=("${value}") +} +check_config "db_host" "$HOST" +check_config "db_port" "$PORT" +check_config "db_user" "$USER" +check_config "db_password" "$PASSWORD" + +case "$1" in + -- | odoo) + shift + if [[ "$1" == "scaffold" ]] ; then + exec odoo "$@" + else + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + fi + ;; + -*) + wait-for-psql.py ${DB_ARGS[@]} --timeout=30 + exec odoo "$@" "${DB_ARGS[@]}" + ;; + *) + exec "$@" +esac + +exit 1 \ No newline at end of file diff --git a/Odoo16Docker/odoo.conf b/Odoo16Docker/odoo.conf index e69de29..8e60fef 100644 --- a/Odoo16Docker/odoo.conf +++ b/Odoo16Docker/odoo.conf @@ -0,0 +1,37 @@ +[options] +addons_path = /mnt/extra-addons +data_dir = /var/lib/odoo +; admin_passwd = admin +; csv_internal_sep = , +; db_maxconn = 64 +; db_name = False +; db_template = template1 +; dbfilter = .* +; debug_mode = False +; email_from = False +; limit_memory_hard = 2684354560 +; limit_memory_soft = 2147483648 +; limit_request = 8192 +; limit_time_cpu = 60 +; limit_time_real = 120 +; list_db = True +; log_db = False +; log_handler = [':INFO'] +; log_level = info +; logfile = None +; longpolling_port = 8072 +; max_cron_threads = 2 +; osv_memory_age_limit = 1.0 +; osv_memory_count_limit = False +; smtp_password = False +; smtp_port = 25 +; smtp_server = localhost +; smtp_ssl = False +; smtp_user = False +; workers = 0 +; xmlrpc = True +; xmlrpc_interface = +; xmlrpc_port = 8069 +; xmlrpcs = True +; xmlrpcs_interface = +; xmlrpcs_port = 8071 \ No newline at end of file diff --git a/Odoo16Docker/wait-for-psql.py b/Odoo16Docker/wait-for-psql.py index 4f6c4ee..7996397 100644 --- a/Odoo16Docker/wait-for-psql.py +++ b/Odoo16Docker/wait-for-psql.py @@ -1 +1,32 @@ -p \ No newline at end of file +#!/usr/bin/env python3 +import argparse +import psycopg2 +import sys +import time + + +if __name__ == '__main__': + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('--db_host', required=True) + arg_parser.add_argument('--db_port', required=True) + arg_parser.add_argument('--db_user', required=True) + arg_parser.add_argument('--db_password', required=True) + arg_parser.add_argument('--timeout', type=int, default=5) + + args = arg_parser.parse_args() + + start_time = time.time() + while (time.time() - start_time) < args.timeout: + try: + conn = psycopg2.connect(user=args.db_user, host=args.db_host, port=args.db_port, password=args.db_password, dbname='postgres') + error = '' + break + except psycopg2.OperationalError as e: + error = e + else: + conn.close() + time.sleep(1) + + if error: + print("Database connection failure: %s" % error, file=sys.stderr) + sys.exit(1) \ No newline at end of file