update : refactor file and add native workflow integration
Some checks failed
Setup Docker Action / setup_docker (3.12.7) (push) Has been cancelled
Some checks failed
Setup Docker Action / setup_docker (3.12.7) (push) Has been cancelled
This commit is contained in:
parent
be1ffd9aac
commit
3a1e0f2b00
@ -3,9 +3,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
setup_docker:
|
||||
if: contains(github.event.head_commit.message, '@docker')
|
||||
runs-on: host
|
||||
strategy:
|
||||
matrix:
|
||||
@ -46,7 +46,7 @@ jobs:
|
||||
run: make stop_server_docker
|
||||
|
||||
- name: Generate Config
|
||||
run: make gen_config
|
||||
run: make gen_config_docker
|
||||
|
||||
- name: Build Image
|
||||
run: make build_image
|
||||
|
49
.gitea/workflows/setup_native.yml
Normal file
49
.gitea/workflows/setup_native.yml
Normal file
@ -0,0 +1,49 @@
|
||||
name: Setup Docker Action
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
setup_docker:
|
||||
runs-on: host
|
||||
strategy:
|
||||
matrix:
|
||||
python:
|
||||
- 3.12.7
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.ref_name }}
|
||||
- name: Clean up Virtual Environment by branch
|
||||
run: ./setup/clean_up_virtualenvs.sh 0
|
||||
|
||||
- name: Create Virtual Environment
|
||||
run: |
|
||||
export PATH="$HOME/.pyenv/bin:$PATH"
|
||||
eval "$(pyenv init --path)"
|
||||
eval "$(pyenv init -)"
|
||||
eval "$(pyenv virtualenv-init -)"
|
||||
pyenv virtualenv ${{ matrix.python }} "${{ github.ref_name }}-$(git rev-parse --short "$GITHUB_SHA")"
|
||||
|
||||
- name: Activate Virtual Environment
|
||||
run: |
|
||||
export PATH="$HOME/.pyenv/bin:$PATH"
|
||||
eval "$(pyenv init --path)"
|
||||
eval "$(pyenv init -)"
|
||||
eval "$(pyenv virtualenv-init -)"
|
||||
pyenv activate "${{ github.ref_name }}-$(git rev-parse --short "$GITHUB_SHA")"
|
||||
python --version # Confirm Python version
|
||||
|
||||
- name: Install dotenv
|
||||
run: pip install python-dotenv
|
||||
|
||||
- name: Setup
|
||||
run: make install
|
||||
|
||||
- name: Generate Config
|
||||
run: make gen_config
|
||||
|
||||
- name: Run Tests
|
||||
run: make run_test
|
2
.github/workflows/setup_docker.yml
vendored
2
.github/workflows/setup_docker.yml
vendored
@ -40,7 +40,7 @@ jobs:
|
||||
run: make stop_server_docker
|
||||
|
||||
- name: Generate Config
|
||||
run: make gen_config
|
||||
run: make gen_config_docker
|
||||
|
||||
- name: Build Image
|
||||
run: make build_image
|
||||
|
2
Jenkinsfile
vendored
2
Jenkinsfile
vendored
@ -11,7 +11,7 @@ node('Node-Dev-100163') {
|
||||
stage('Build') {
|
||||
// sh 'make install'
|
||||
sh 'make stop_server_docker'
|
||||
sh 'make gen_config'
|
||||
sh 'make gen_config_docker'
|
||||
sh 'make build_image'
|
||||
}
|
||||
stage('Start'){
|
||||
|
27
Makefile
27
Makefile
@ -14,28 +14,35 @@ SETUP_PATH=${PWD}/setup
|
||||
CONFIG=odoo.conf
|
||||
DOCKER_SERVER=hub.nextzenos.com
|
||||
ORGANIZATION=nexterp
|
||||
PROJECT=$(shell git remote get-url origin | sed 's/.*\/\([^\/]*\)\.git$/\1/' || echo "odoo")
|
||||
PROJECT := $(shell git remote get-url origin 2>/dev/null | sed 's/.*\/\([^\/]*\)\.git$$/\1/' || echo "odoo")
|
||||
ODOO_IMAGE=${DOCKER_SERVER}/${ORGANIZATION}/$(PROJECT)
|
||||
TAG := $(shell rev-parse --abbrev-ref HEAD)
|
||||
TAG := $(shell git rev-parse --abbrev-ref HEAD)
|
||||
CONTAINER_ID=${PROJECT}-${TAG}
|
||||
VERSION := community
|
||||
ADDONS=${PWD}/addons,${PWD}/odoo/addons
|
||||
|
||||
install:
|
||||
sudo apt -y update && \
|
||||
sudo apt install -y build-essential python3-full python3-pip libldap2-dev libpq-dev libsasl2-dev && \
|
||||
pip install -r requirements.txt
|
||||
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 --stop-after-init --config=/etc/odoo/${CONFIG} --xmlrpc-port=8071 && \
|
||||
sudo ${DOCKER_EXEC} ${CONTAINER_ID} odoo db --config=/etc/odoo/${CONFIG} drop testdb
|
||||
run_test_local:
|
||||
odoo-bin -i all_modules --log-level=test --test-enable -d testdb --stop-after-init --config=${CONFIG}
|
||||
gen_config:
|
||||
${PWD}/setup/init_config.sh ${ODOO_IMAGE} ${TAG} ${CONTAINER_ID} ${VERSION}
|
||||
${PWD}/setup/init_config.sh --native ${ADDONS}
|
||||
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}
|
||||
|
||||
##### 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:
|
||||
${PWD}/setup/init_config.sh --docker ${ODOO_IMAGE} ${TAG} ${CONTAINER_ID} ${VERSION}
|
||||
build_image:
|
||||
DOCKER_BUILDKIT=1 ${DOCKER_BUILD} . --progress plain --tag ${ODOO_IMAGE}:${TAG}
|
||||
push_image:
|
||||
$(DOCKER_PUSH) ${ODOO_IMAGE}:${TAG}
|
||||
run_server_local:
|
||||
${PYTHON} odoo-bin --config=${CONFIG}
|
||||
run_server_docker:
|
||||
@if ! docker ps | grep -q "${CONTAINER_ID}"; then \
|
||||
echo "Container not found. Running docker-compose up -d"; \
|
||||
|
@ -10,7 +10,6 @@ ODOO_CONFIG=./etc
|
||||
ODOO_BACKUP=./backup/ce
|
||||
#Database
|
||||
PG_PORT=
|
||||
PG_DB=
|
||||
PG_USER=
|
||||
PG_PASS=
|
||||
ENTRYPOINT=./entrypoint.sh
|
||||
|
9
deployment/etc/odoo.conf
Normal file
9
deployment/etc/odoo.conf
Normal file
@ -0,0 +1,9 @@
|
||||
[options]
|
||||
addons_path = /mnt/extra-addons
|
||||
data_dir = /var/lib/odoo
|
||||
db_host = db
|
||||
db_port = 5432
|
||||
db_user = nexterp
|
||||
db_password = smartyourlife
|
||||
proxy_mode = True
|
||||
|
@ -3,4 +3,7 @@ db_host =
|
||||
db_port = 5432
|
||||
db_user =
|
||||
db_password =
|
||||
|
||||
xmlrpc_port =
|
||||
addons_path =
|
||||
dbfilter =
|
||||
proxy_mode =
|
65
setup/gen_config.py
Normal file
65
setup/gen_config.py
Normal file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import configparser
|
||||
import shutil
|
||||
import os
|
||||
from dotenv import set_key
|
||||
from pathlib import Path
|
||||
import socket
|
||||
import secrets
|
||||
import string
|
||||
import color_log
|
||||
def find_available_port(start_port=80):
|
||||
"""Finds an available port starting from the given port."""
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
||||
while True:
|
||||
try:
|
||||
sock.bind(('localhost', start_port))
|
||||
color_log.Show(3,f" {start_port} is Open")
|
||||
return start_port
|
||||
except OSError as e:
|
||||
if e.errno == 98: # Address already in use
|
||||
print(f"{start_port} already in use , Try other port ...")
|
||||
start_port += 1
|
||||
else:
|
||||
raise
|
||||
def main():
|
||||
"""
|
||||
Generates a random password and finds an available port.
|
||||
Updates the Odoo configuration file and .env file with these values.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(description="Generate Odoo configuration")
|
||||
parser.add_argument('--db_user', type=str, help='')
|
||||
parser.add_argument('--db_pass', type=str, help='')
|
||||
parser.add_argument('--deploy_path', type=str, help='')
|
||||
parser.add_argument('--addons_path', type=str, help='')
|
||||
parser.add_argument('--db_filter', type=str, help='')
|
||||
parser.add_argument('--db_port', type=int, help='')
|
||||
args = parser.parse_args()
|
||||
db_port = args.db_port
|
||||
db_user = args.db_user
|
||||
db_pass = args.db_pass
|
||||
app_port = find_available_port(8069)
|
||||
addons_path = args.addons_path
|
||||
base_dir= args.deploy_path
|
||||
db_filter= args.db_filter
|
||||
# Copy template files
|
||||
os.makedirs(f"{base_dir}/etc", exist_ok=True)
|
||||
color_log.Show(3,f"Copy {base_dir}/odoo.conf.template to {base_dir}/etc/odoo.conf")
|
||||
shutil.copyfile(f'{base_dir}/odoo.conf.template', f'{base_dir}/odoo.conf')
|
||||
|
||||
# Update Odoo configuration file
|
||||
config = configparser.ConfigParser()
|
||||
config.read(f'{base_dir}/odoo.conf')
|
||||
config['options']['db_host'] = "localhost"
|
||||
config['options']['db_user'] = db_user
|
||||
config['options']['db_password'] = db_pass
|
||||
config['options']['db_port'] = str(db_port)
|
||||
config['options']['addons_path'] = addons_path
|
||||
config['options']['xmlrpc_port'] = str(app_port)
|
||||
config['options']['dbfilter'] = str(db_filter)
|
||||
config['options']['proxy_mode'] = "True"
|
||||
with open(f'{base_dir}/odoo.conf', 'w') as configfile:
|
||||
config.write(configfile)
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -5,16 +5,14 @@ export DEBIAN_FRONTEND=noninteractive
|
||||
set -euo pipefail
|
||||
DEPLOY_PATH=$(pwd)/deployment
|
||||
SETUP_PATH=$(pwd)/setup
|
||||
ODOO_IMAGE=$1
|
||||
ODOO_TAG=$2
|
||||
ODOO_CONTAINER=$3
|
||||
VERSION=$4
|
||||
|
||||
|
||||
PG_USER=nexterp
|
||||
ODOO_ADDONS=./addons
|
||||
ODOO_CONFIG=./etc
|
||||
# System
|
||||
DEPENDS_PACKAGE=('wget' 'curl' 'git' 'unzip' 'make' 'wkhtmltopdf')
|
||||
DEPENDS_COMMAND=('wget' 'curl' 'git' 'unzip' 'make' 'wkhtmltopdf')
|
||||
DEPENDS_PACKAGE=('wget' 'curl' 'git' 'unzip' 'make' 'wkhtmltopdf' 'postgresql-client')
|
||||
DEPENDS_COMMAND=('wget' 'curl' 'git' 'unzip' 'make' 'wkhtmltopdf' 'psql')
|
||||
((EUID)) && sudo_cmd="sudo" || sudo_cmd=""
|
||||
readonly MINIMUM_DOCER_VERSION="20"
|
||||
UNAME_U="$(uname -s)"
|
||||
@ -87,16 +85,6 @@ Check_OS() {
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
Generate_Config(){
|
||||
if [[ ! -f "${DEPLOY_PATH}/.env" ]]; then
|
||||
cp "${DEPLOY_PATH}/env.template" "${DEPLOY_PATH}/.env"
|
||||
fi
|
||||
python "$SETUP_PATH/gen-config.py" --db_port 5432 --db_user $PG_USER --deploy_path "$DEPLOY_PATH" \
|
||||
--image "${ODOO_IMAGE}" --container "${ODOO_CONTAINER}" --tag "${ODOO_TAG:=latest}" \
|
||||
--addons "${ODOO_ADDONS}" --config "${ODOO_CONFIG}" --backup "${VERSION}"
|
||||
Show 0 " Generate Config Complete"
|
||||
}
|
||||
|
||||
Install_Depends() {
|
||||
for ((i = 0; i < ${#DEPENDS_COMMAND[@]}; i++)); do
|
||||
cmd=${DEPENDS_COMMAND[i]}
|
||||
@ -189,9 +177,62 @@ Check_Docker_Install_Final() {
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
Check_OS
|
||||
# Update_Package_Resource
|
||||
# Install_Depends
|
||||
# Check_Dependency_Installation
|
||||
# Check_Docker_Install
|
||||
Generate_Config
|
||||
Generate_Config_Docker(){
|
||||
ODOO_IMAGE=${1:-}
|
||||
ODOO_TAG=${2:-}
|
||||
ODOO_CONTAINER=${3:-}
|
||||
VERSION=${4:-}
|
||||
if [[ ! -f "${DEPLOY_PATH}/.env" ]]; then
|
||||
cp "${DEPLOY_PATH}/env.template" "${DEPLOY_PATH}/.env"
|
||||
fi
|
||||
python "$SETUP_PATH/gen_config_docker.py" --db_port 5432 --db_user $PG_USER --deploy_path "$DEPLOY_PATH" \
|
||||
--image "${ODOO_IMAGE}" --container "${ODOO_CONTAINER}" --tag "${ODOO_TAG:=latest}" \
|
||||
--addons "${ODOO_ADDONS}" --config "${ODOO_CONFIG}" --backup "${VERSION}"
|
||||
Show 0 " Generate Config Complete"
|
||||
}
|
||||
Generate_Config_Native(){
|
||||
ADDONS=${1:-}
|
||||
REPO_NAME=$(basename "$(git rev-parse --show-toplevel)" | sed -E 's/[.-]/_/g')
|
||||
USER="${REPO_NAME:-"default_repo"}"
|
||||
DB_PORT=$(sudo -u postgres psql -t -c "SHOW port;" | awk '{print $1}' || echo 5432)
|
||||
PASSWORD="$(openssl rand -hex 24)"
|
||||
# Check if the user already exists
|
||||
USER_EXISTS=$(sudo -u postgres psql -t -c "SELECT 1 FROM pg_roles WHERE rolname='$USER';")
|
||||
|
||||
if [ -z "$USER_EXISTS" ]; then
|
||||
# User does not exist, create the user
|
||||
Show 2 "Create the new PostgreSQL username: $USER with password: $PASSWORD"
|
||||
sudo -u postgres psql -c "CREATE USER $USER WITH PASSWORD '$PASSWORD';"
|
||||
Show 2 " Grant $USER superuser (admin) privileges"
|
||||
sudo -u postgres psql -c "ALTER USER $USER WITH SUPERUSER;"
|
||||
else
|
||||
# User exists, update the password
|
||||
Show 2 "User $USER already exists, updating password to $PASSWORD"
|
||||
sudo -u postgres psql -c "ALTER USER $USER WITH PASSWORD '$PASSWORD';"
|
||||
fi
|
||||
python "$SETUP_PATH/gen_config.py" --db_user $USER --db_pass $PASSWORD --deploy_path "$(pwd)" \
|
||||
--addons_path $ADDONS --db_port $DB_PORT
|
||||
Show 0 " Generate Config Complete"
|
||||
}
|
||||
main(){
|
||||
TYPE=${1:-}
|
||||
Check_OS
|
||||
# Update_Package_Resource
|
||||
# Install_Depends
|
||||
# Check_Dependency_Installation
|
||||
# Check_Docker_Install
|
||||
case "$TYPE" in
|
||||
--native)
|
||||
Generate_Config_Native $2
|
||||
;;
|
||||
--docker)
|
||||
Generate_Config_Docker $2 $3 $4 $5
|
||||
;;
|
||||
*)
|
||||
# else
|
||||
Show 1 "Invalid argument (--docker|--native)"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main ${1:-} ${2:-} ${3:-} ${4:-} ${5:-}
|
||||
|
Loading…
Reference in New Issue
Block a user