Add Odoo module update Makefile

This commit is contained in:
Ruslan Bakiev
2026-02-03 18:39:06 +07:00
parent a88ccf62da
commit 7ac8e75166

67
odoo/Makefile Normal file
View File

@@ -0,0 +1,67 @@
SHELL := /bin/bash
HOST ?= root@optovia
SSH ?= ssh $(HOST)
REMOTE_PROD ?= odoo-prod
BRANCH ?= main
MODULES ?= all
# Remote bare repo used to sync addons into the mounted /mnt/extra-addons path
REMOTE_BARE_REPO ?= /srv/git/odoo.git
ODOO_SERVICE_PREFIX ?= optoviaproject-odoo
ODOO_DB_NAME ?= odoo
ODOO_DB_USER ?= odoo
ODOO_DB_PASSWORD ?=
ODOO_DB_HOST ?=
ODOO_DB_PORT ?= 5432
.PHONY: update-modules install-modules check-vars
check-vars:
@if [ -z "$(ODOO_DB_PASSWORD)" ]; then echo "ODOO_DB_PASSWORD is required"; exit 1; fi
@if [ -z "$(ODOO_DB_HOST)" ]; then echo "ODOO_DB_HOST is required"; exit 1; fi
@if [ -z "$(REMOTE_BARE_REPO)" ]; then echo "REMOTE_BARE_REPO is required"; exit 1; fi
update-modules: check-vars
git push origin $(BRANCH) && git push $(REMOTE_PROD) $(BRANCH)
@container="$$( $(SSH) "docker ps --filter 'name=$(ODOO_SERVICE_PREFIX)' --format '{{.Names}}' | head -1" )"; \
if [ -z "$$container" ]; then \
echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \
exit 1; \
fi; \
addons_dir="$$( $(SSH) "docker inspect $$container --format '{{range .Mounts}}{{if eq .Destination \"/mnt/extra-addons\"}}{{.Source}}{{end}}{{end}}'" )"; \
if [ -z "$$addons_dir" ]; then \
echo "No /mnt/extra-addons mount found for $$container"; \
exit 1; \
fi; \
$(SSH) "git --git-dir=$(REMOTE_BARE_REPO) --work-tree=$$addons_dir checkout -f $(BRANCH)"; \
$(SSH) "docker exec $$container odoo -d '$(ODOO_DB_NAME)' -r '$(ODOO_DB_USER)' -w '$(ODOO_DB_PASSWORD)' --db_host='$(ODOO_DB_HOST)' --db_port='$(ODOO_DB_PORT)' -u '$(MODULES)' --stop-after-init"; \
service="$$( $(SSH) "docker service ls --format '{{.Name}}' | grep -m1 '^$(ODOO_SERVICE_PREFIX)'" )"; \
if [ -z "$$service" ]; then \
echo "No Odoo service found for prefix: $(ODOO_SERVICE_PREFIX)"; \
exit 1; \
fi; \
$(SSH) "docker service update --force --update-parallelism 1 --update-order stop-first $$service"
install-modules: check-vars
git push origin $(BRANCH) && git push $(REMOTE_PROD) $(BRANCH)
@container="$$( $(SSH) "docker ps --filter 'name=$(ODOO_SERVICE_PREFIX)' --format '{{.Names}}' | head -1" )"; \
if [ -z "$$container" ]; then \
echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \
exit 1; \
fi; \
addons_dir="$$( $(SSH) "docker inspect $$container --format '{{range .Mounts}}{{if eq .Destination \"/mnt/extra-addons\"}}{{.Source}}{{end}}{{end}}'" )"; \
if [ -z "$$addons_dir" ]; then \
echo "No /mnt/extra-addons mount found for $$container"; \
exit 1; \
fi; \
$(SSH) "git --git-dir=$(REMOTE_BARE_REPO) --work-tree=$$addons_dir checkout -f $(BRANCH)"; \
$(SSH) "docker exec $$container odoo -d '$(ODOO_DB_NAME)' -r '$(ODOO_DB_USER)' -w '$(ODOO_DB_PASSWORD)' --db_host='$(ODOO_DB_HOST)' --db_port='$(ODOO_DB_PORT)' -i '$(MODULES)' --stop-after-init"; \
service="$$( $(SSH) "docker service ls --format '{{.Name}}' | grep -m1 '^$(ODOO_SERVICE_PREFIX)'" )"; \
if [ -z "$$service" ]; then \
echo "No Odoo service found for prefix: $(ODOO_SERVICE_PREFIX)"; \
exit 1; \
fi; \
$(SSH) "docker service update --force --update-parallelism 1 --update-order stop-first $$service"