474 lines
12 KiB
Bash
Executable File
474 lines
12 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function help() {
|
|
echo
|
|
echo "$1 <command> [options]"
|
|
echo
|
|
echo "commands:"
|
|
echo
|
|
column -t -s"|" ./task.md | tail -n +3
|
|
echo
|
|
}
|
|
|
|
# load lib functions and env vars
|
|
. ./scripts/lib
|
|
|
|
function disable-auto-install() {
|
|
echo "Disable auto install for all enterprise modules."
|
|
find ./enterprise -type f -name '__manifest__.py' -exec sed -i'' $'s/\'auto_install\': True,/\'auto_install\': False,/g' {} +
|
|
}
|
|
|
|
function install-odoo-scripts() {
|
|
curl -L https://raw.githubusercontent.com/mint-system/ansible-playbooks/master/roles/odoo-scripts/files/install | sh
|
|
}
|
|
|
|
function install-src() {
|
|
echo "Install wkhtmltopdf"
|
|
sudo apt install wkhtmltopdf
|
|
init-venv
|
|
activate-venv
|
|
echo "Install pylint odoo"
|
|
pip install --upgrade --pre pylint-odoo
|
|
echo "Install odoo dependencies"
|
|
pip install setuptools wheel watchdog phonenumbers
|
|
pip install -r odoo/requirements.txt
|
|
echo "Install oca dev tools"
|
|
pip install pre-commit pyyaml
|
|
}
|
|
|
|
function start() {
|
|
if test -z "$1"; then
|
|
echo "Open http://localhost:8069 url in your browser."
|
|
docker-compose up -d
|
|
fi
|
|
|
|
if [ "$1" = "db" ]; then
|
|
docker-compose up -d db pgadmin
|
|
echo "Open http://localhost:8000 url in your browser."
|
|
fi
|
|
|
|
if [ "$1" = "mail" ]; then
|
|
docker-compose up -d mail
|
|
echo "Open http://localhost url in your browser."
|
|
fi
|
|
|
|
if [ "$1" = "src" ]; then
|
|
locale
|
|
activate-venv
|
|
echo "Open http://localhost:8069 url in your browser."
|
|
odoo-bin --config 'config/odoo-src.conf' --dev=all
|
|
fi
|
|
}
|
|
|
|
function restart() {
|
|
if test -z "$1"; then
|
|
docker-compose restart
|
|
fi
|
|
|
|
if [ "$1" = "db" ]; then
|
|
docker-compose restart db pgadmin
|
|
fi
|
|
|
|
if [ "$1" = "mail" ]; then
|
|
docker-compose restart mail
|
|
fi
|
|
}
|
|
|
|
function start-shell() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
locale
|
|
activate-venv
|
|
odoo-bin shell -d $1 --config 'config/odoo-src.conf' --no-http
|
|
}
|
|
|
|
function start-psql() {
|
|
DATABASE=$1
|
|
DATABASE=${DATABASE:="odoo"}
|
|
|
|
docker exec -it db psql postgres://odoo:odoo@localhost:5432/$DATABASE
|
|
}
|
|
|
|
|
|
function init-db() {
|
|
DATABASE=$1
|
|
DATABASE=${DATABASE:="odoo"}
|
|
|
|
locale
|
|
activate-venv
|
|
odoo-bin --init base -d $DATABASE --config 'config/odoo-src.conf' --stop-after-init --no-http
|
|
}
|
|
|
|
function odoo-cloc() {
|
|
DATABASE=$1
|
|
DATABASE=${DATABASE:="odoo"}
|
|
|
|
locale
|
|
activate-venv
|
|
odoo-bin cloc -d $DATABASE --config 'config/odoo-src.conf' --stop-after-init --no-http
|
|
}
|
|
|
|
function lint-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
activate-venv
|
|
pylint --load-plugins=pylint_odoo -d all -e odoolint $1
|
|
cd $1
|
|
pre-commit run -a
|
|
|
|
}
|
|
|
|
function update-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
if test -z "$2"; then echo "\$2 is empty"; exit; fi
|
|
|
|
locale
|
|
activate-venv
|
|
odoo-bin -d $1 -u $2 --config 'config/odoo-src.conf' --stop-after-init --no-http
|
|
}
|
|
|
|
function install-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
if test -z "$2"; then echo "\$2 is empty"; exit; fi
|
|
|
|
locale
|
|
activate-venv
|
|
odoo-bin -d $1 -i $2 --config 'config/odoo-src.conf' --stop-after-init --no-http
|
|
}
|
|
|
|
function remove-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
if test -z "$2"; then echo "\$2 is empty"; exit; fi
|
|
|
|
locale
|
|
activate-venv
|
|
echo "self.env['ir.module.module'].search([('name', '=', '$2')]).button_immediate_uninstall()" |
|
|
odoo-bin shell -d $1 --config 'config/odoo-src.conf' --no-http
|
|
}
|
|
|
|
function create-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
MODULE_NAME=$(basename "$1")
|
|
PARENT_DIR=$(dirname "$1")
|
|
|
|
locale
|
|
activate-venv
|
|
echo "Scaffolding module $MODULE_NAME in $PARENT_DIR ..."
|
|
odoo-bin scaffold "$MODULE_NAME" "$PARENT_DIR" -t template/ms_custom_module
|
|
}
|
|
|
|
function drop-db() {
|
|
DATABASE=$1
|
|
DATABASE=${DATABASE:="odoo"}
|
|
|
|
docker exec db psql postgres://odoo:odoo@localhost:5432/postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DATABASE';"
|
|
docker exec db psql postgres://odoo:odoo@localhost:5432/postgres -c "DROP DATABASE $DATABASE;"
|
|
}
|
|
|
|
function send-support-mail() {
|
|
curl smtp://localhost --mail-from admin@yourcompany.example.com --mail-rcpt support@localhost --upload-file ./data/email.txt
|
|
}
|
|
|
|
function clear-assets() {
|
|
DATABASE=$1
|
|
DATABASE=${DATABASE:="odoo"}
|
|
|
|
echo "Delete these assets:"
|
|
docker exec db psql postgres://odoo:odoo@localhost/$DATABASE -c "select id,name from ir_attachment where res_model='ir.ui.view' and name like '%assets_%';"
|
|
docker exec db psql postgres://odoo:odoo@localhost/$DATABASE -c "delete from ir_attachment where res_model='ir.ui.view' and name like '%assets_%';"
|
|
}
|
|
|
|
function convert-database() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
unzip "tmp/$1.zip" -d "./tmp/$1"
|
|
sed -i'' 's/AS integer//g' "./tmp/$1/dump.sql"
|
|
grep -i 'as integer' "./tmp/$1/dump.sql"
|
|
cd "tmp/$1" ; zip -r "../${1}2.zip" . ; cd ../..
|
|
rm -r "tmp/$1"
|
|
echo "Converted database file $1 to ${1}2"
|
|
}
|
|
|
|
function checkout() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
echo "Checkout branch"
|
|
# Checkout branch
|
|
git checkout $1
|
|
|
|
echo "Init submodules"
|
|
# Init submodules
|
|
git submodule update --init
|
|
|
|
# Reset enterprise
|
|
echo "Reset enterprise submodule"
|
|
cd enterprise
|
|
git reset --hard
|
|
cd ..
|
|
|
|
# Checkout all submodules
|
|
echo "Checkout branch on submodules"
|
|
git submodule foreach git checkout $1
|
|
|
|
# Sync files from last branch
|
|
echo "Sync common files"
|
|
git checkout $GIT_BRANCH README.md task task.md scripts snippets template data .vuepress package.json package-lock.json .gitignore .vercelignore config odoo_development.jpg
|
|
}
|
|
|
|
function release-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
VERSION=$(get-module-version $1)
|
|
echo "Create release $VERSION ..."
|
|
cd $1
|
|
gh release create "v$VERSION" -t "Release $VERSION"
|
|
}
|
|
|
|
function zip-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
# Get version and module name
|
|
VERSION=$(get-module-version $1)
|
|
MODULE=$(basename "$1")
|
|
|
|
# copy module to tmp folder
|
|
echo "Copy module $MODULE version $VERSION to tmp folder"
|
|
MODULE_NAME="$MODULE-$VERSION"
|
|
MODULE_PATH="tmp/$MODULE_NAME"
|
|
mkdir -p "$MODULE_PATH"
|
|
cp -r "$1/." "$MODULE_PATH"
|
|
|
|
# configure and zip module
|
|
echo "Remove auto install option"
|
|
sed -i'' -e "s/'auto_install': True,/'auto_install': False,/" "$MODULE_PATH/__manifest__.py"
|
|
echo "Zip module $MODULE"
|
|
cd tmp
|
|
zip -q -r $MODULE_NAME.zip $MODULE_NAME
|
|
cd ..
|
|
}
|
|
|
|
function clear-filestore() {
|
|
echo "Remove directory ~/.local/share/Odoo/filestore/$1"
|
|
rm -rf ~/.local/share/Odoo/filestore/$1
|
|
}
|
|
|
|
function init-odoo-env() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
echo "Init env file: .env.$1"
|
|
echo "#ODOO_URL=" > .env.$1
|
|
echo "ODOO_DATABASE=" >> .env.$1
|
|
echo "ODOO_USERNAME=" >> .env.$1
|
|
echo "ODOO_PASSWORD=" >> .env.$1
|
|
cat .env.$1
|
|
}
|
|
|
|
function disable-mailserver() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
activate-venv
|
|
load-env $1
|
|
scripts/odooctl --model 'ir.mail_server' --field 'active' --value False
|
|
scripts/odooctl --model 'fetchmail.server' --field 'active' --value False
|
|
}
|
|
|
|
function update-odoo-view() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
if test -z "$2"; then echo "\$2 is empty"; exit; fi
|
|
|
|
# Generate view name from filename
|
|
FILE=$(basename $2)
|
|
NAME="mint_system.${FILE%.xml}"
|
|
|
|
activate-venv
|
|
load-env $1
|
|
scripts/odooctl --model 'ir.ui.view' --domain "['name', '=', '$NAME']" --field 'arch_base' --value "'''$(cat $2)'''"
|
|
}
|
|
|
|
function update-app-list() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
locale
|
|
activate-venv
|
|
echo "env['ir.module.module'].update_list()" | odoo-bin shell -d $1 --config 'config/odoo-src.conf' --no-http
|
|
}
|
|
|
|
function init-next-env() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
echo "Init env file: .env.$1"
|
|
echo "NEXTCLOUD_URL=" > .env.$1
|
|
echo "NEXTCLOUD_USERNAME=" >> .env.$1
|
|
echo "NEXTCLOUD_PASSWORD=" >> .env.$1
|
|
cat .env.$1
|
|
}
|
|
|
|
function upload-module() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
if test -z "$2"; then echo "\$1 is empty"; exit; fi
|
|
|
|
zip-module $2
|
|
|
|
# Get path to zip file and upload url
|
|
FILE_PATH="tmp/$MODULE_NAME.zip"
|
|
pwd
|
|
load-env $1
|
|
NEXTCLOUD_UPLOAD_URL="$NEXTCLOUD_URL/remote.php/dav/files/$NEXTCLOUD_USERNAME/Odoo-Apps/"
|
|
|
|
# Upload zip file
|
|
curl -u "$NEXTCLOUD_USERNAME:$NEXTCLOUD_PASSWORD" -T "$FILE_PATH" "$NEXTCLOUD_UPLOAD_URL"
|
|
echo "File $FILE_PATH uploaded to $NEXTCLOUD_UPLOAD_URL."
|
|
}
|
|
|
|
function save-config() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
locale
|
|
activate-venv
|
|
odoo-bin -s -d $1 --config 'config/odoo-src.conf' --stop-after-init --no-http
|
|
}
|
|
|
|
function remove-submodule() {
|
|
if test -z "$1"; then echo "\$1 is empty"; exit; fi
|
|
|
|
echo "Move submodule to tmp folder"
|
|
mkdir -p tmp/$1
|
|
mv $1 tmp/$1
|
|
|
|
echo "Deinit submodule"
|
|
git submodule deinit -f $1
|
|
|
|
echo "Remove submodule from .git folder"
|
|
rm -rf .git/modules/$1
|
|
|
|
echo "Remove submodule from work tree"
|
|
git rm -f $1
|
|
|
|
echo "Remove $1 submodule from .gitmodules files manually."
|
|
|
|
}
|
|
|
|
|
|
function update-config() {
|
|
|
|
ADDONS="$(tr '\n' ',' < ./config/addons_path)"
|
|
sed -i'' -e "s|addons_path.*|addons_path = odoo/addons,$ADDONS|g" "./config/odoo-src.conf"
|
|
|
|
ADDONS="$(echo "$ADDONS" | sed 's|,|,/mnt/|g')"
|
|
sed -i'' -e "s|addons_path.*|addons_path = /mnt/$ADDONS|g" "./config/odoo.conf"
|
|
|
|
echo "Config updated."
|
|
}
|
|
|
|
case "$1" in
|
|
disable-auto-install)
|
|
disable-auto-install
|
|
;;
|
|
save-config)
|
|
save-config $2
|
|
;;
|
|
checkout)
|
|
checkout $2
|
|
;;
|
|
start)
|
|
start $2
|
|
;;
|
|
restart)
|
|
restart $2
|
|
;;
|
|
stop)
|
|
docker-compose stop
|
|
;;
|
|
kill)
|
|
docker-compose down -v
|
|
;;
|
|
logs)
|
|
docker logs odoo -f
|
|
;;
|
|
init-venv)
|
|
init-venv
|
|
;;
|
|
install-odoo-scripts)
|
|
install-odoo-scripts
|
|
;;
|
|
install-src)
|
|
install-src
|
|
;;
|
|
init-db)
|
|
init-db $2
|
|
;;
|
|
start-shell)
|
|
start-shell $2
|
|
;;
|
|
start-psql)
|
|
start-psql $2
|
|
;;
|
|
update-module)
|
|
update-module $2 $3
|
|
;;
|
|
create-module)
|
|
create-module $2
|
|
;;
|
|
drop-db)
|
|
drop-db $2
|
|
;;
|
|
send-support-mail)
|
|
send-support-mail
|
|
;;
|
|
clear-assets)
|
|
clear-assets $2
|
|
;;
|
|
odoo-cloc)
|
|
odoo-cloc $2
|
|
;;
|
|
convert-database)
|
|
convert-database $2
|
|
;;
|
|
install-module)
|
|
install-module $2 $3
|
|
;;
|
|
remove-module)
|
|
remove-module $2 $3
|
|
;;
|
|
remove-submodule)
|
|
remove-submodule $2
|
|
;;
|
|
release-module)
|
|
release-module $2
|
|
;;
|
|
lint-module)
|
|
lint-module $2
|
|
;;
|
|
zip-module)
|
|
zip-module $2
|
|
;;
|
|
clear-filestore)
|
|
clear-filestore $2
|
|
;;
|
|
init-odoo-env)
|
|
init-odoo-env $2
|
|
;;
|
|
disable-mailserver)
|
|
disable-mailserver $2 $3
|
|
;;
|
|
update-config)
|
|
update-config
|
|
;;
|
|
update-odoo-view)
|
|
update-odoo-view $2 $3
|
|
;;
|
|
update-app-list)
|
|
update-app-list $2
|
|
;;
|
|
init-next-env)
|
|
init-next-env $2
|
|
;;
|
|
upload-module)
|
|
upload-module $2 $3
|
|
;;
|
|
*)
|
|
help task
|
|
exit 1
|
|
;;
|
|
esac |