ifneq ("$(wildcard .env)", "") include .env endif ifneq ("$(wildcard automation/automation.mk)", "") include automation/automation.mk endif .SHELLFLAGS += ${SHELLFLAGS} -e PWD = $(shell pwd) UID = $(shell id -u) GID = $(shell id -g) PIP=${PWD}/venv/bin/pip PYTHON=${PWD}/venv/bin/python VENV := $(shell [ -d "${PWD}/venv" ] && echo "exists" || echo "missing") DOCKERCMD=docker DOCKER_COMPOSE_CMD=docker-compose DOCKER_BUILD=$(DOCKERCMD) build DOCKER_PUSH=$(DOCKERCMD) push DOCKER_IMAGE=$(DOCKERCMD) image DOCKER_EXEC=$(DOCKERCMD) exec DEPLOY_PATH=${PWD}/deployment SETUP_PATH=${PWD}/setup CONFIG=odoo.conf HUB=hub.nextzenos.com CDN=https://cdn.nextzenos.com/CDN/NextERP ORGANIZATION=nexterp PROJECT := odoo18 ODOO_IMAGE=${HUB}/${ORGANIZATION}/$(PROJECT) TAG := $(shell git rev-parse --abbrev-ref HEAD) CONTAINER_ID=${PROJECT}-${TAG} VERSION := community ADDONS=${PWD}/addons,${PWD}/odoo/addons,${PWD}/extra-addons BACKUP=${CDN}/raw/branch/main/backup/${VERSION}/odoo18-main_2025-01-15_08-05-47.zip AUTOMATION_PATH=${PWD}/automation ########### Automation ######### deploy-native: @echo "Not implemented" ##### Virtual Environment ##### check-virtualenv: @if [ "$(VENV)" = "missing" ]; then \ echo "Creating virtual environment..."; \ python3 -m venv venv; \ echo "Installing pip dependencies..."; \ $(PIP) install --upgrade pip; \ else \ echo "Skipping Creating virtual environment..."; \ fi; ##### Native Deployment######### install: check-virtualenv sudo apt update -y && \ sudo apt install -y python3-pip libldap2-dev libpq-dev libsasl2-dev postgresql-client libreoffice wkhtmltopdf ansible terraform&& \ ${PIP} install --no-input -r requirements.txt --break-system-packages download_backup: @if [ -z "${LINKDB}" ]; then \ LinkDB=${BACKUP}; \ read -p "LinkDownload [default: ${BACKUP}]: " InputLinkDB; \ LinkDB=$${InputLinkDB:-${BACKUP}}; \ else \ LinkDB=${LINKDB}; \ fi; \ Filename=$$(basename $$LinkDB); \ echo "Downloading $$Filename from: $$LinkDB"; \ ${PWD}/setup/download_backup.sh $$LinkDB backup.zip gen_config: $(MAKE) download_backup LINKDB=${BACKUP} ${PWD}/setup/init_config.sh --native ${ADDONS} ${DB_USER} ${DB_PASSWORD} ${DB_SERVER} ${DB_PORT} run_server: ${PYTHON} odoo-bin --config=${CONFIG} run_test: ${PYTHON} odoo-bin --test-tags :TestAccountMove.test_out_invoice_auto_post_monthly,TestAccountMove.test_included_tax --log-level=test --test-enable -d testdb-${TAG} --stop-after-init --config=${CONFIG} ${PYTHON} odoo-bin db --config=${CONFIG} drop testdb-${TAG} restore_database: @read -p "Backup Path [default: ${PWD}/deployment/backup/backup.zip]: " InputbackupDB; \ BackupDB=$${InputbackupDB:-${PWD}/deployment/backup/backup.zip}; \ read -p "Enter the database name: " DBNAME; \ echo "Restoring database: $$DBNAME"; \ ${PYTHON} odoo-bin db --config=${CONFIG} load "$$DBNAME" "$$BackupDB" scaffold_module: read -p "Module Name: " ModuleName; \ read -p "addons Path[eg:addons, extra-addons, exercise]: " ModulePath; \ ${PYTHON} odoo-bin scaffold $$ModuleName && \ mv $$ModuleName ${PWD}/$$ModulePath; cleanup_addons: @bash ${PWD}/setup/clean_up_addons.sh $(shell echo $(ADDONS) | tr ',' ' ') install_modules: ${PYTHON} odoo-bin --config=${CONFIG} -d ${DATABASE} -i ${MODULES} --xmlrpc-port=${PORT} ##### Docker Deployment ######### run_test_docker: sudo ${DOCKER_EXEC} ${CONTAINER_ID} odoo --test-tags :TestAccountMove.test_out_invoice_auto_post_monthly,TestAccountMove.test_included_tax --log-level=test --test-enable -d testdb-${TAG} --stop-after-init --config=/etc/odoo/${CONFIG} --xmlrpc-port=8071 && \ sudo ${DOCKER_EXEC} ${CONTAINER_ID} odoo db --config=/etc/odoo/${CONFIG} drop testdb-${TAG} gen_config_docker: $(MAKE) download_backup LINKDB=${BACKUP} ${PWD}/setup/init_config.sh --docker ${ODOO_IMAGE} ${TAG} ${CONTAINER_ID} build_image: DOCKER_BUILDKIT=1 ${DOCKER_BUILD} . --progress plain --tag ${ODOO_IMAGE}:${TAG} push_image: $(DOCKER_PUSH) ${ODOO_IMAGE}:${TAG} run_server_docker: @if ! docker ps | grep -q "${CONTAINER_ID}"; then \ echo "Container not found. Running docker-compose up -d"; \ else \ echo "Container already running. Skipping docker-compose up -d."; \ fi cd ${DEPLOY_PATH} &&\ ${DOCKER_COMPOSE_CMD} up -d update_tag: ${SETUP_PATH}/update_tag.sh $(CURR_BRANCH) restore_database_docker: sudo ${DOCKER_EXEC} ${CONTAINER_ID} odoo db -c /etc/odoo/odoo.conf load backup /var/lib/odoo/backup/backup.zip stop_server_docker: @if ! docker ps | grep -q "${CONTAINER_ID}"; then \ echo "Container not found. Skipping"; \ else \ cd ${DEPLOY_PATH} &&\ ${DOCKER_COMPOSE_CMD} down; \ fi clean_up: @if ! docker ps | grep -q "${CONTAINER_ID}"; then \ echo "Container not found. Skipping"; \ else \ cd ${DEPLOY_PATH} &&\ ${DOCKER_COMPOSE_CMD} down; \ fi find "${DEPLOY_PATH}" -mindepth 1 -maxdepth 1 \ ! -name "etc" \ ! -name "addons" \ ! -name "backup" \ ! -name "*.sh" \ ! -name "*.template" \ ! -name "*.py" \ ! -name "*.yml" \ -print0 | sudo xargs -0 rm -rf {} && \ sudo rm -rf ${DEPLOY_PATH}/etc/*