[IMP] refactoring .venv.erplibre

- erplibre separate venv erplibre and odoo
- rename python-version to python-odoo-version
- add conf/python-erplibre-version
- rename .venv to .venv.erplibre
- move .venv/repo to .venv.erplibre/bin/repo
- install pyenv into .venv.erplibre
- install poetry into .venv.odooVERSION

- first installation show odoo version to install
- can install erplibre without odoo
- update README.md information about installation with TODO
- change image from github to locally
- remove link creation .venv

- update version: remove code to force create symbolic link .venv
- use dynamic merge manifest, will be able to merge different odoo
version
- can add dev tools
- default manifest is empty to remove conflict
This commit is contained in:
Mathieu Benoit 2025-05-05 04:43:13 -04:00
parent e7e3a37ed3
commit de9779cfc2
60 changed files with 771 additions and 429 deletions

5
.gitignore vendored
View file

@ -22,6 +22,8 @@ doc/itpp*
doc/odoo* doc/odoo*
script/OCA* script/OCA*
odoo odoo
odoo*/OCA_OpenUpgrade
odoo*/odoo_documentation-user
image_db image_db
get-poetry.py get-poetry.py
artifacts artifacts
@ -39,7 +41,10 @@ pyproject.toml
.odoo-version .odoo-version
.poetry-version .poetry-version
.python-version .python-version
.python-odoo-version
requirements.txt requirements.txt
requirement/ignore_requirements.txt requirement/ignore_requirements.txt
screenshots screenshots
screencasts screencasts
script/todo/todo_override.json
.erplibre.error.txt

View file

@ -10,6 +10,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Added ## Added
- Script for hardening the installation - Script for hardening the installation
- Support Odoo versions 12.0 to 18.0
- Separate ERPLibre python installation from Odoo python with .venv.erplibre and .venv.odoo18
- Implement auto-installation with TODO.py
## [1.6.0] - 2025-04-25 ## [1.6.0] - 2025-04-25

View file

@ -1,5 +1,5 @@
SHELL := /bin/bash SHELL := /bin/bash
LOG_FILE := ./.venv/make_test.log LOG_FILE := ./.venv.$(cat ".erplibre-version" | xargs)/make_test.log
############# #############
# General # # General #
############# #############
@ -123,7 +123,7 @@ open_terminal:
############## ##############
.PHONY: open_selenium .PHONY: open_selenium
open_selenium: open_selenium:
./.venv/bin/python ./script/selenium/web_login.py ./.venv.erplibre/bin/python ./script/selenium/web_login.py
############ ############
# format # # format #
@ -134,42 +134,42 @@ format:
.PHONY: format_code_generator .PHONY: format_code_generator
format_code_generator: format_code_generator:
.venv/bin/isort --profile black -l 79 ./addons/TechnoLibre_odoo-code-generator/ .venv.erplibre/bin/isort --profile black -l 79 ./addons/TechnoLibre_odoo-code-generator/
./script/maintenance/black.sh ./addons/TechnoLibre_odoo-code-generator/ ./script/maintenance/black.sh ./addons/TechnoLibre_odoo-code-generator/
./script/maintenance/prettier_xml.sh ./addons/TechnoLibre_odoo-code-generator/ ./script/maintenance/prettier_xml.sh ./addons/TechnoLibre_odoo-code-generator/
.PHONY: format_erplibre_addons .PHONY: format_erplibre_addons
format_erplibre_addons: format_erplibre_addons:
.venv/bin/isort --profile black -l 79 ./addons/ERPLibre_erplibre_addons/ .venv.erplibre/bin/isort --profile black -l 79 ./addons/ERPLibre_erplibre_addons/
./script/maintenance/black.sh ./addons/ERPLibre_erplibre_addons/ ./script/maintenance/black.sh ./addons/ERPLibre_erplibre_addons/
./script/maintenance/prettier_xml.sh ./addons/ERPLibre_erplibre_addons/ ./script/maintenance/prettier_xml.sh ./addons/ERPLibre_erplibre_addons/
.venv/bin/isort --profile black -l 79 ./addons/ERPLibre_erplibre_theme_addons/ .venv.erplibre/bin/isort --profile black -l 79 ./addons/ERPLibre_erplibre_theme_addons/
./script/maintenance/black.sh ./addons/ERPLibre_erplibre_theme_addons/ ./script/maintenance/black.sh ./addons/ERPLibre_erplibre_theme_addons/
#./script/maintenance/prettier_xml.sh ./addons/ERPLibre_erplibre_theme_addons/ #./script/maintenance/prettier_xml.sh ./addons/ERPLibre_erplibre_theme_addons/
.PHONY: format_supported_addons .PHONY: format_supported_addons
format_supported_addons: format_supported_addons:
.venv/bin/isort --profile black -l 79 ./addons/MathBenTech_erplibre-family-management/ .venv.erplibre/bin/isort --profile black -l 79 ./addons/MathBenTech_erplibre-family-management/
./script/maintenance/black.sh ./addons/MathBenTech_erplibre-family-management/ ./script/maintenance/black.sh ./addons/MathBenTech_erplibre-family-management/
#./script/maintenance/prettier_xml.sh ./addons/MathBenTech_erplibre-family-management/ #./script/maintenance/prettier_xml.sh ./addons/MathBenTech_erplibre-family-management/
.venv/bin/isort --profile black -l 79 ./addons/MathBenTech_odoo-business-spending-management-quebec-canada/ .venv.erplibre/bin/isort --profile black -l 79 ./addons/MathBenTech_odoo-business-spending-management-quebec-canada/
./script/maintenance/black.sh ./addons/MathBenTech_odoo-business-spending-management-quebec-canada/ ./script/maintenance/black.sh ./addons/MathBenTech_odoo-business-spending-management-quebec-canada/
#./script/maintenance/prettier_xml.sh ./addons/MathBenTech_erplibre-family-management/ #./script/maintenance/prettier_xml.sh ./addons/MathBenTech_erplibre-family-management/
.PHONY: format_code_generator_template .PHONY: format_code_generator_template
format_code_generator_template: format_code_generator_template:
.venv/bin/isort --profile black -l 79 ./addons/TechnoLibre_odoo-code-generator-template/ .venv.erplibre/bin/isort --profile black -l 79 ./addons/TechnoLibre_odoo-code-generator-template/
./script/maintenance/black.sh ./addons/TechnoLibre_odoo-code-generator-template/ ./script/maintenance/black.sh ./addons/TechnoLibre_odoo-code-generator-template/
#./script/maintenance/prettier_xml.sh ./addons/TechnoLibre_odoo-code-generator-template/ #./script/maintenance/prettier_xml.sh ./addons/TechnoLibre_odoo-code-generator-template/
.PHONY: format_script .PHONY: format_script
format_script: format_script:
#.venv/bin/isort --profile black -l 79 ./script/ --gitignore #.venv.erplibre/bin/isort --profile black -l 79 ./script/ --gitignore
./script/maintenance/black.sh ./script/ ./script/maintenance/black.sh ./script/
.PHONY: format_script_isort_only .PHONY: format_script_isort_only
format_script_isort_only: format_script_isort_only:
.venv/bin/isort --profile black -l 79 ./script/ --gitignore .venv.erplibre/bin/isort --profile black -l 79 ./script/ --gitignore
######### #########
# log # # log #
@ -210,7 +210,7 @@ repo_configure_group_code_generator:
# Show git status for all repo # Show git status for all repo
.PHONY: repo_show_status .PHONY: repo_show_status
repo_show_status: repo_show_status:
./.venv/repo forall -pc "git status -s" .venv.erplibre/bin/repo forall -pc "git status -s"
# Show divergence between actual repository and production manifest # Show divergence between actual repository and production manifest
.PHONY: repo_diff_manifest_production .PHONY: repo_diff_manifest_production

View file

@ -1,8 +1,8 @@
# ERPLibre # ERPLibre
ERPLibre is a CRM/ERP platform including automated installation, maintenance, and development of open source modules of ERPLibre is a CRM/ERP platform including automated installation, maintenance, and development of open source modules of
the Odoo community version. It is a "soft-fork" of the Odoo Community Edition (OCE), meaning it aims at contributing back the Odoo community version. It is a "soft-fork" of the Odoo Community Edition (OCE), meaning it aims at contributing
upstream. back upstream.
It is based on a set of production-ready modules, supported by the Odoo Community Association (OCA) and an It is based on a set of production-ready modules, supported by the Odoo Community Association (OCA) and an
ecosystem of specialized companies. This solution ensures digital sovereignty in a local environment while integrating ecosystem of specialized companies. This solution ensures digital sovereignty in a local environment while integrating
pre-trained Generative Transformers (GPT), bringing an additional dimension to data management and automation. pre-trained Generative Transformers (GPT), bringing an additional dimension to data management and automation.
@ -11,32 +11,57 @@ Follow us on Mastodon : https://fosstodon.org/@erplibre
# Installation # Installation
Select a guide to install your environment. ## Easy installation on Ubuntu or Debian using Docker
## Easy install on Ubuntu or Debian using Docker
This has been tested in Debian 12 and Ubuntu 24.04 LTS. This has been tested in Debian 12 and Ubuntu 24.04 LTS.
**Note** : This is meant for a test environment, on a local network or similar environment not directly exposed to the Internet. **Note** : This is meant for a test environment, on a local network or similar environment not directly exposed to the
Internet.
1. Make sure Docker and nginx web server are installed:<BR> 1. Make sure Docker and nginx web server are installed:<BR>
```sudo apt install docker docker-compose nginx``` ```sudo apt install docker docker-compose nginx```
1. Get the latest ERPLibre Docker compose file:<BR> 1. Get the latest ERPLibre Docker compose file:<BR>
```wget https://raw.githubusercontent.com/ERPLibre/ERPLibre/v1.6.0/docker-compose.yml``` ```wget https://raw.githubusercontent.com/ERPLibre/ERPLibre/v1.6.0/docker-compose.yml```
1. Install and run ERPLibre with Docker running as a daemon (web server):<BR> 1. Install and run ERPLibre with Docker running as a daemon (web server):<BR>
```sudo docker-compose up -d``` ```sudo docker-compose up -d```
1. Open the final installation step at this web page :<BR> 1. Open the final installation step at this web page :<BR>
```http://[server IP]:8069```<BR> ```http://[server IP]:8069```<BR>
![Capture du 2024-11-05 08-34-45](https://github.com/user-attachments/assets/7c6295b6-cc95-462d-822c-3ff72b772155) ![odoo_first_installation.png](doc/image/odoo_first_installation.png)
1. Finish the installation by providing a database name, email and password. then click on **Create Database**. Depending on your system resources **this may take more than 2 minutes without feedback !** Check your browser loading indicator. 1. Finish the installation by providing a database name, email and password. then click on **Create Database**.
Depending on your system resources **this may take more than 2 minutes without feedback !** Check your browser
loading indicator.
1. Next, the web page will reload itself, and you should see the Applications list in ERPLibre:<BR> 1. Next, the web page will reload itself, and you should see the Applications list in ERPLibre:<BR>
![2024-11-05_09-54](https://github.com/user-attachments/assets/1742c4a9-da96-466b-9c17-35eb5ca786ff) ![odoo_application_list.png](doc/image/odoo_application_list.png)
You can now personalize your ERPLibre installation.
You can now personalize your ERPLibre installation.
For more information, read [Docker guide](./docker/README.md). For more information, read [Docker guide](./docker/README.md).
## Install from source code ## Install from source code
### Automated installation
For Debian/Ubuntu
```bash
sudo apt install make python
```
Clone the project:
```bash
git clone https://github.com/ERPLibre/ERPLibre.git
cd ERPLibre
```
Follow the instruction on the following script, it will try to detect your environment.
```bash
./script/todo/todo.py
```
### Manually
Into Ubuntu, minimal dependency: Into Ubuntu, minimal dependency:
```bash ```bash
@ -81,6 +106,9 @@ Ready to execute:
make run make run
``` ```
### For Windows
For Windows, read [WINDOWS_INSTALLATION.md](doc/WINDOWS_INSTALLATION.md)
## Discover guide ## Discover guide
@ -94,26 +122,6 @@ make run
[Guide to run ERPLibre in development environment](./doc/DEVELOPMENT.md). [Guide to run ERPLibre in development environment](./doc/DEVELOPMENT.md).
### Pycharm
First open
```bash
make pycharm_open
```
Close it, and configure
```bash
make pycharm_configure
```
Open it
```bash
make pycharm_open
```
# Execution # Execution
[Guide to run ERPLibre with different case](./doc/RUN.md). [Guide to run ERPLibre with different case](./doc/RUN.md).

View file

@ -6,7 +6,7 @@ devops_erplibre need sshpass
## Simplify push tag ## Simplify push tag
For RELEASE.md, replace next value by a script to select all remote by manifest file. For RELEASE.md, replace next value by a script to select all remote by manifest file.
Actually, need to push manually all different remote. Actually, need to push manually all different remote.
> ./.venv/repo forall -pc "git push ERPLibre --tags" > .venv.erplibre/bin/repo forall -pc "git push ERPLibre --tags"
## Funding ## Funding
- Add funding for MathBenTech and TechnoLibre - Add funding for MathBenTech and TechnoLibre

2
conf/git_manifest.csv Normal file
View file

@ -0,0 +1,2 @@
"filepath"
manifest/git_manifest_erplibre.xml
1 filepath
2 manifest/git_manifest_erplibre.xml

View file

@ -0,0 +1,5 @@
"filepath"
manifest/git_manifest_erplibre.xml
manifest/git_manifest_erplibre_extra.xml
manifest/git_manifest_erplibre_odoo.xml
manifest/git_manifest_erplibre_odoo_dev.xml
1 filepath
2 manifest/git_manifest_erplibre.xml
3 manifest/git_manifest_erplibre_extra.xml
4 manifest/git_manifest_erplibre_odoo.xml
5 manifest/git_manifest_erplibre_odoo_dev.xml

View file

@ -288,39 +288,39 @@ test_code_generator_demo_mariadb_sql_example_1:
.PHONY: test_addons_code_generator .PHONY: test_addons_code_generator
test_addons_code_generator: test_addons_code_generator:
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./odoo_bin.sh db --drop --database test_addons_code_generator ./odoo_bin.sh db --drop --database test_addons_code_generator
# TODO missing test in code_generator # TODO missing test in code_generator
./test.sh --dev cg -d test_addons_code_generator --db-filter test_addons_code_generator -i code_generator ./test.sh --dev cg -d test_addons_code_generator --db-filter test_addons_code_generator -i code_generator
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage # run: make open_test_coverage
.PHONY: test_addons_code_generator_code_generator .PHONY: test_addons_code_generator_code_generator
test_addons_code_generator_code_generator: test_addons_code_generator_code_generator:
# TODO this test only generation, not test # TODO this test only generation, not test
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./script/database/db_restore.py --database test_addons_code_generator_code_generator ./script/database/db_restore.py --database test_addons_code_generator_code_generator
./test.sh --dev cg -d test_addons_code_generator_code_generator --db-filter test_addons_code_generator_code_generator -i code_generator_code_generator ./test.sh --dev cg -d test_addons_code_generator_code_generator --db-filter test_addons_code_generator_code_generator -i code_generator_code_generator
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage # run: make open_test_coverage
.PHONY: test_addons_code_generator_template_code_generator .PHONY: test_addons_code_generator_template_code_generator
test_addons_code_generator_template_code_generator: test_addons_code_generator_template_code_generator:
# TODO this test only generation, not test # TODO this test only generation, not test
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./script/database/db_restore.py --database test_addons_code_generator_template_code_generator ./script/database/db_restore.py --database test_addons_code_generator_template_code_generator
./test.sh --dev cg -d test_addons_code_generator_template_code_generator --db-filter test_addons_code_generator_template_code_generator -i code_generator ./test.sh --dev cg -d test_addons_code_generator_template_code_generator --db-filter test_addons_code_generator_template_code_generator -i code_generator
./test.sh --dev cg -d test_addons_code_generator_template_code_generator --db-filter test_addons_code_generator_template_code_generator -i code_generator_template_code_generator ./test.sh --dev cg -d test_addons_code_generator_template_code_generator --db-filter test_addons_code_generator_template_code_generator -i code_generator_template_code_generator
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage # run: make open_test_coverage
# generate config repo code_generator # generate config repo code_generator

View file

@ -31,7 +31,7 @@ open_doc_all:
# documentation dev # documentation dev
.PHONY: doc_dev .PHONY: doc_dev
doc_dev: doc_dev:
source ./.venv/bin/activate && make -C doc/itpp-labs_odoo-development/docs html || exit 1 source ./.venv.erplibre/bin/activate && make -C doc/itpp-labs_odoo-development/docs html || exit 1
.PHONY: open_doc_dev .PHONY: open_doc_dev
open_doc_dev: open_doc_dev:
@ -44,7 +44,7 @@ doc_clean_dev:
# documentation migration # documentation migration
.PHONY: doc_migration .PHONY: doc_migration
doc_migration: doc_migration:
source ./.venv/bin/activate && make -C doc/itpp-labs_odoo-port-docs/docs html || exit 1 source ./.venv.erplibre/bin/activate && make -C doc/itpp-labs_odoo-port-docs/docs html || exit 1
.PHONY: open_doc_migration .PHONY: open_doc_migration
open_doc_migration: open_doc_migration:
@ -57,7 +57,7 @@ doc_clean_migration:
# documentation test # documentation test
.PHONY: doc_test .PHONY: doc_test
doc_test: doc_test:
source ./.venv/bin/activate && make -C doc/itpp-labs_odoo-test-docs/doc-src html || exit 1 source ./.venv.erplibre/bin/activate && make -C doc/itpp-labs_odoo-test-docs/doc-src html || exit 1
.PHONY: open_doc_test .PHONY: open_doc_test
open_doc_test: open_doc_test:
@ -71,7 +71,7 @@ doc_clean_test:
.PHONY: doc_user .PHONY: doc_user
doc_user: doc_user:
ln -sf ../../odoo/odoo ./doc/odoo_documentation-user/odoo ln -sf ../../odoo/odoo ./doc/odoo_documentation-user/odoo
source ./.venv/bin/activate && make -C doc/odoo_documentation-user html || exit 1 source ./.venv.erplibre/bin/activate && make -C doc/odoo_documentation-user html || exit 1
.PHONY: open_doc_user .PHONY: open_doc_user
open_doc_user: open_doc_user:
@ -84,4 +84,4 @@ doc_clean_user:
# documentation markdown # documentation markdown
.PHONY: doc_markdown .PHONY: doc_markdown
doc_markdown: doc_markdown:
./.venv/bin/mmg --verbose --yes ./doc/CODE_GENERATOR.base.md ./.venv.erplibre/bin/mmg --verbose --yes ./doc/CODE_GENERATOR.base.md

View file

@ -15,21 +15,21 @@ image_db_create_erplibre_code_generator:
image_db_create_all_parallel: image_db_create_all_parallel:
./script/database/db_restore.py --clean_cache ./script/database/db_restore.py --clean_cache
echo "Search in-existing module" echo "Search in-existing module"
./.venv/bin/python3 ./script/database/image_db.py --check_addons_exist ./.venv.erplibre/bin/python3 ./script/database/image_db.py --check_addons_exist
echo "Create Image DB" echo "Create Image DB"
./.venv/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel | bash ./.venv.erplibre/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel | bash
./script/database/db_restore.py --clean_cache ./script/database/db_restore.py --clean_cache
#./script/make.sh image_db_create_test_website_attachments #./script/make.sh image_db_create_test_website_attachments
.PHONY: image_db_list_data .PHONY: image_db_list_data
image_db_list_data: image_db_list_data:
./.venv/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel ./.venv.erplibre/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel
#./.venv/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel --odoo_version 12.0 #./.venv.erplibre/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel --odoo_version 12.0
.PHONY: image_db_list .PHONY: image_db_list
image_db_list: image_db_list:
./.venv/bin/python3 ./script/database/image_db.py --show_list_only ./.venv.erplibre/bin/python3 ./script/database/image_db.py --show_list_only
#./.venv/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel --odoo_version 12.0 #./.venv.erplibre/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel --odoo_version 12.0
.PHONY: image_db_create_test_website_attachments .PHONY: image_db_create_test_website_attachments
image_db_create_test_website_attachments: image_db_create_test_website_attachments:

View file

@ -11,13 +11,40 @@ install_dev:
# ./script/install/install_locally_dev.sh # ./script/install/install_locally_dev.sh
./script/version/update_env_version.py --install_dev ./script/version/update_env_version.py --install_dev
.PHONY: install_odoo_18
install_odoo_18:
./script/version/update_env_version.py --erplibre_version odoo18.0_python3.12.10 --install_dev
.PHONY: switch_odoo_18
switch_odoo_18:
./script/version/update_env_version.py --erplibre_version odoo18.0_python3.12.10 --switch
./script/make.sh config_gen_all
.PHONY: install_odoo_17
install_odoo_17:
./script/version/update_env_version.py --erplibre_version odoo17.0_python3.10.18 --install_dev
.PHONY: switch_odoo_17
switch_odoo_17:
./script/version/update_env_version.py --erplibre_version odoo17.0_python3.10.18 --switch
./script/make.sh config_gen_all
.PHONY: install_odoo_16 .PHONY: install_odoo_16
install_odoo_16: install_odoo_16:
./script/version/update_env_version.py --erplibre_version odoo16.0_python3.10.14 --install_dev ./script/version/update_env_version.py --erplibre_version odoo16.0_python3.10.18 --install_dev
.PHONY: switch_odoo_16 .PHONY: switch_odoo_16
switch_odoo_16: switch_odoo_16:
./script/version/update_env_version.py --erplibre_version odoo16.0_python3.10.14 --switch ./script/version/update_env_version.py --erplibre_version odoo16.0_python3.10.18 --switch
./script/make.sh config_gen_all
.PHONY: install_odoo_15
install_odoo_15:
./script/version/update_env_version.py --erplibre_version odoo15.0_python3.8.20 --install_dev
.PHONY: switch_odoo_15
switch_odoo_15:
./script/version/update_env_version.py --erplibre_version odoo15.0_python3.8.20 --switch
./script/make.sh config_gen_all ./script/make.sh config_gen_all
.PHONY: install_odoo_14 .PHONY: install_odoo_14
@ -29,6 +56,15 @@ switch_odoo_14:
./script/version/update_env_version.py --erplibre_version odoo14.0_python3.8.20 --switch ./script/version/update_env_version.py --erplibre_version odoo14.0_python3.8.20 --switch
./script/make.sh config_gen_all ./script/make.sh config_gen_all
.PHONY: install_odoo_13
install_odoo_13:
./script/version/update_env_version.py --erplibre_version odoo13.0_python3.7.17 --install_dev
.PHONY: switch_odoo_13
switch_odoo_13:
./script/version/update_env_version.py --erplibre_version odoo13.0_python3.7.17 --switch
./script/make.sh config_gen_all
.PHONY: install_odoo_12 .PHONY: install_odoo_12
install_odoo_12: install_odoo_12:
./script/version/update_env_version.py --erplibre_version odoo12.0_python3.7.17 --install_dev ./script/version/update_env_version.py --erplibre_version odoo12.0_python3.7.17 --install_dev
@ -40,17 +76,19 @@ switch_odoo_12:
.PHONY: install_odoo_all_version .PHONY: install_odoo_all_version
install_odoo_all_version: install_odoo_all_version:
./script/make.sh install_odoo_12 ./script/make.sh install_odoo_18
./script/make.sh install_odoo_14 ./script/make.sh install_odoo_17
./script/make.sh install_odoo_16 ./script/make.sh install_odoo_16
./script/make.sh install_odoo_15
./script/make.sh install_odoo_14
./script/make.sh install_odoo_13
./script/make.sh install_odoo_12
.PHONY: install_odoo_all_version_dev .PHONY: install_odoo_all_version_dev
install_odoo_all_version_dev: install_odoo_all_version_dev:
echo "Open Pycharm, close it before install Odoo and reopen at the end" echo "Open Pycharm, close it before install Odoo and reopen at the end"
pycharm . pycharm .
./script/make.sh install_odoo_12 ./script/make.sh install_odoo_all_version
./script/make.sh install_odoo_14
./script/make.sh install_odoo_16
#.PHONY: install_update_odoo #.PHONY: install_update_odoo
#install_update_odoo: #install_update_odoo:

View file

@ -2,7 +2,7 @@
# TEST # # TEST #
######## ########
# TODO load specific test file : ./run.sh -d test_file --log-level=test --test-enable --stop-after-init --test-file ./.venv/test.py # TODO load specific test file : ./run.sh -d test_file --log-level=test --test-enable --stop-after-init --test-file ./.venv.erplibre/test.py
.PHONY: open_test_coverage .PHONY: open_test_coverage
open_test_coverage: open_test_coverage:
@ -48,14 +48,14 @@ test_full_fast_coverage:
./script/make.sh clean ./script/make.sh clean
# Need to create a BD to create cache _cache_erplibre_base # Need to create a BD to create cache _cache_erplibre_base
./script/database/db_restore.py --database test ./script/database/db_restore.py --database test
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./script/test/run_parallel_test.py --coverage ./script/test/run_parallel_test.py --coverage
# TODO This test is broken in parallel # TODO This test is broken in parallel
#./script/make.sh test_coverage_code_generator_hello_world #./script/make.sh test_coverage_code_generator_hello_world
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage # run: make open_test_coverage
@ -64,12 +64,12 @@ test_cg_demo:
./script/make.sh clean ./script/make.sh clean
# Need to create a BD to create cache _cache_erplibre_base # Need to create a BD to create cache _cache_erplibre_base
./script/database/db_restore.py --database test ./script/database/db_restore.py --database test
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./script/addons/coverage_install_addons_dev.sh test code_generator_demo ./script/addons/coverage_install_addons_dev.sh test code_generator_demo
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*" ./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
.PHONY: test_base .PHONY: test_base
test_base: test_base:
@ -102,20 +102,20 @@ test_installation_demo:
############### ###############
.PHONY: test_addons_sale .PHONY: test_addons_sale
test_addons_sale: test_addons_sale:
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./odoo_bin.sh db --drop --database test_addons_sale ./odoo_bin.sh db --drop --database test_addons_sale
./test.sh -d test_addons_sale --db-filter test_addons_sale -i sale ./test.sh -d test_addons_sale --db-filter test_addons_sale -i sale
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m ./.venv.erplibre/bin/coverage report -m
./.venv/bin/coverage html ./.venv.erplibre/bin/coverage html
./.venv/bin/coverage json ./.venv.erplibre/bin/coverage json
.PHONY: test_addons_helpdesk .PHONY: test_addons_helpdesk
test_addons_helpdesk: test_addons_helpdesk:
./.venv/bin/coverage erase ./.venv.erplibre/bin/coverage erase
./odoo_bin.sh db --drop --database test_addons_helpdesk ./odoo_bin.sh db --drop --database test_addons_helpdesk
./test.sh -d test_addons_helpdesk --db-filter test_addons_helpdesk -i helpdesk_mgmt ./test.sh -d test_addons_helpdesk --db-filter test_addons_helpdesk -i helpdesk_mgmt
./.venv/bin/coverage combine -a ./.venv.erplibre/bin/coverage combine -a
./.venv/bin/coverage report -m ./.venv.erplibre/bin/coverage report -m
./.venv/bin/coverage html ./.venv.erplibre/bin/coverage html
./.venv/bin/coverage json ./.venv.erplibre/bin/coverage json

View file

@ -239,6 +239,24 @@
} }
] ]
}, },
"odoo13.0_base": {
"base": "",
"disable": false,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"fetchmail_notify_error_to_sender",
"mail_debrand",
"remove_odoo_enterprise",
"web_responsive",
"web_timeline"
]
}
]
},
"odoo14.0_base": { "odoo14.0_base": {
"base": "", "base": "",
"disable": false, "disable": false,
@ -427,6 +445,34 @@
} }
] ]
}, },
"odoo15.0_base": {
"base": "",
"disable": false,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"mail_debrand",
"remove_odoo_enterprise",
"web_responsive",
"web_timeline",
"partner_firstname",
"web_search_with_and",
"web_listview_range_select",
"web_dialog_size",
"password_security",
"web_refresher",
"date_range",
"partner_contact_access_link",
"auditlog",
"queue_job",
"web_advanced_search"
]
}
]
},
"odoo16.0_base": { "odoo16.0_base": {
"base": "", "base": "",
"disable": false, "disable": false,
@ -639,5 +685,56 @@
] ]
} }
] ]
},
"odoo17.0_base": {
"base": "",
"disable": false,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"mail_debrand",
"remove_odoo_enterprise",
"web_responsive",
"web_timeline",
"server_action_mass_edit",
"partner_firstname",
"web_search_with_and",
"web_dialog_size",
"password_security",
"web_refresher",
"date_range",
"partner_contact_access_link",
"auditlog",
"queue_job"
]
}
]
},
"odoo18.0_base": {
"base": "",
"disable": false,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"disable_odoo_online",
"remove_odoo_enterprise",
"web_responsive",
"web_timeline",
"server_action_mass_edit",
"partner_firstname",
"web_search_with_and",
"web_dialog_size",
"password_security",
"web_refresher",
"date_range",
"partner_contact_access_link",
"queue_job"
]
}
]
} }
} }

View file

@ -11,6 +11,7 @@ cache
htmlcov htmlcov
node_modules node_modules
.venv .venv
.venv.erplibre
odoo odoo
screencasts screencasts
screenshots screenshots

View file

@ -0,0 +1 @@
.venv.erplibre

View file

@ -0,0 +1 @@
3.12.10

View file

@ -2,18 +2,48 @@
"odoo12.0_python3.7.17": { "odoo12.0_python3.7.17": {
"odoo_version": "12.0", "odoo_version": "12.0",
"python_version": "3.7.17", "python_version": "3.7.17",
"poetry_version": "1.5.0" "poetry_version": "1.5.0",
"is_deprecated": true,
"note": "Deprecated"
},
"odoo13.0_python3.7.17": {
"odoo_version": "13.0",
"python_version": "3.7.17",
"poetry_version": "1.5.0",
"is_deprecated": true,
"note": "Deprecated"
}, },
"odoo14.0_python3.8.20": { "odoo14.0_python3.8.20": {
"odoo_version": "14.0", "odoo_version": "14.0",
"python_version": "3.8.20", "python_version": "3.8.20",
"poetry_version": "1.5.0" "poetry_version": "1.5.0",
"is_deprecated": true,
"note": "Deprecated"
}, },
"odoo16.0_python3.10.14": { "odoo15.0_python3.8.20": {
"odoo_version": "15.0",
"python_version": "3.8.20",
"poetry_version": "1.8.3",
"is_deprecated": true,
"note": "Deprecated"
},
"odoo16.0_python3.10.18": {
"odoo_version": "16.0", "odoo_version": "16.0",
"python_version": "3.10.14", "python_version": "3.10.18",
"poetry_version": "1.8.3", "poetry_version": "1.8.3",
"default": true, "default": true,
"note": "Official support ERPLibre 1.6.0" "note": "Official support ERPLibre 1.6.0"
},
"odoo17.0_python3.10.18": {
"odoo_version": "17.0",
"python_version": "3.10.18",
"poetry_version": "1.8.3",
"note": "New GUI"
},
"odoo18.0_python3.12.10": {
"odoo_version": "18.0",
"python_version": "3.12.10",
"poetry_version": "2.1.3",
"note": "Last version"
} }
} }

View file

@ -198,7 +198,7 @@ rm -r ~/.local/share/Odoo/filestore/database_name
## Create module scaffold ## Create module scaffold
```bash ```bash
source ./.venv/bin/activate source ./.venv.erplibre/bin/activate
python odoo/odoo-bin scaffold MODULE_NAME addons/REPO_NAME/ python odoo/odoo-bin scaffold MODULE_NAME addons/REPO_NAME/
``` ```
@ -212,7 +212,7 @@ Read GIT_REPO.md to understand how changer version.
## Python version ## Python version
Your actual version is in file .python-version. Use script `./script/version/change_python_version.sh 3.7.16` to change Your actual version is in file .python-odoo-version. Use script `./script/version/change_python_version.sh 3.7.16` to change
to version 3.7.16 . to version 3.7.16 .
Run the installation, `make install_dev`. Run the installation, `make install_dev`.
@ -228,17 +228,9 @@ When you need to change python 3.7.17 to 3.8.10, do :
```bash ```bash
rm -r .venv rm -r .venv
make install_dev make install_dev
./.venv/bin/poetry lock --no-update ./.venv.$(cat ".erplibre-version" | xargs)/bin/poetry lock --no-update
``` ```
And update file script/install/install_locally.sh
`ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/.venv/lib/python3.7/site-packages/`
to
`ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/.venv/lib/python3.8/site-packages/`
# Pull request # Pull request
## Show all pull requests from organization ## Show all pull requests from organization

View file

@ -8,21 +8,21 @@ licence [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).
## Setup repo ## Setup repo
```bash ```bash
curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo curl https://storage.googleapis.com/git-repo-downloads/repo > .venv.erplibre/bin/repo
``` ```
## prod ## prod
```bash ```bash
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b master .venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b master
./.venv/repo sync .venv.erplibre/bin/repo sync -c -j $(nproc --all)
``` ```
## dev ## dev
```bash ```bash
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml .venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml
./.venv/repo sync .venv.erplibre/bin/repo sync -c -j $(nproc --all)
``` ```
## local dev ## local dev
@ -32,8 +32,8 @@ curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo
```bash ```bash
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose & git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.dev.xml .venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.dev.xml
./.venv/repo sync -m ./manifest/default.dev.xml .venv.erplibre/bin/repo sync -c -j $(nproc --all) -m ./manifest/default.dev.xml
``` ```
# Create Manifest # Create Manifest
@ -48,7 +48,7 @@ It freezes all repo, from dev to prod.
This will add revision git hash in the manifest. This will add revision git hash in the manifest.
```bash ```bash
./.venv/repo manifest -r -o ./default.xml .venv.erplibre/bin/repo manifest -r -o ./default.xml
``` ```
Commit. Commit.
@ -63,21 +63,21 @@ When dev contains specific revision with default revision, you need to replace d
keep specific version: keep specific version:
```bash ```bash
./script/git/git_merge_repo_manifest.py --input1 ./manifest/default.dev.xml --input2 ./default.xml --output ./manifest/default.staged.xml ./script/git/git_merge_repo_manifest.py --input "./manifest/default.dev.xml;./default.xml" --output ./manifest/default.staged.xml
git commit -am "Updated manifest/default.staged.xml" git commit -am "Updated manifest/default.staged.xml"
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose & git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.staged.xml .venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.staged.xml
./.venv/repo sync -m ./manifest/default.staged.xml .venv.erplibre/bin/repo sync -c -j $(nproc --all) -m ./manifest/default.staged.xml
./.venv/repo manifest -r -o ./default.xml .venv.erplibre/bin/repo manifest -r -o ./default.xml
``` ```
## Create a dev version ## Create a dev version
```bash ```bash
./.venv/repo manifest -o ./manifest/default.dev.xml .venv.erplibre/bin/repo manifest -o ./manifest/default.dev.xml
``` ```
Commit. Commit.
@ -91,19 +91,19 @@ git commit -am "[#ticket] subject: short sentence"
### Search all repos with a specific branch name ### Search all repos with a specific branch name
```bash ```bash
./.venv/repo forall -pc "git branch -a|grep BRANCH" .venv.erplibre/bin/repo forall -pc "git branch -a|grep BRANCH"
``` ```
### Search missing branch in all repos ### Search missing branch in all repos
```bash ```bash
./.venv/repo forall -pc 'git branch -a|(grep /BRANCH$||echo "no match")|grep "no match"' .venv.erplibre/bin/repo forall -pc 'git branch -a|(grep /BRANCH$||echo "no match")|grep "no match"'
``` ```
### Search changed file in all repos ### Search changed file in all repos
```bash ```bash
./.venv/repo forall -pc "git status -s" .venv.erplibre/bin/repo forall -pc "git status -s"
``` ```
### Clean all ### Clean all
@ -111,7 +111,7 @@ git commit -am "[#ticket] subject: short sentence"
Before cleaning, check changed file in all repos. Before cleaning, check changed file in all repos.
```bash ```bash
./.venv/repo forall -pc "git status -s" .venv.erplibre/bin/repo forall -pc "git status -s"
``` ```
Check the changed branch, and push changed if needed. Check the changed branch, and push changed if needed.

View file

@ -52,7 +52,7 @@ Execute migration with OpenUpgrade.
```bash ```bash
make config_gen_migration make config_gen_migration
./.venv/bin/python ./script/OCA_OpenUpgrade/odoo-bin -c ./config.conf --no-http --update all --stop-after-init -d BD ./.venv.erplibre/bin/python ./script/OCA_OpenUpgrade/odoo-bin -c ./config.conf --no-http --update all --stop-after-init -d BD
``` ```
## Migration Odoo 13 to Odoo 14 ## Migration Odoo 13 to Odoo 14

View file

@ -7,7 +7,7 @@ A guide on how to generate a release.
Before the cleaning, check if existing file isn't committed, not pushed or in stash. Before the cleaning, check if existing file isn't committed, not pushed or in stash.
```bash ```bash
./.venv/repo forall -pc "git stash list" .venv.erplibre/bin/repo forall -pc "git stash list"
./script/git/git_show_code_diff_repo_manifest.py ./script/git/git_show_code_diff_repo_manifest.py
``` ```
@ -102,7 +102,7 @@ To test it, you need to clean caches and install it:
Generate production manifest and freeze all repos versions. Generate production manifest and freeze all repos versions.
```bash ```bash
./.venv/repo manifest -r -o ./default.xml .venv.erplibre/bin/repo manifest -r -o ./default.xml
``` ```
Update ERPLIBRE_VERSION variable in [env_var.sh](../env_var.sh), [Dockerfile.prod](../docker/Dockerfile.prod.pkg) Update ERPLIBRE_VERSION variable in [env_var.sh](../env_var.sh), [Dockerfile.prod](../docker/Dockerfile.prod.pkg)
@ -129,7 +129,7 @@ Understand differences from last release:
git diff v#.#.#..HEAD git diff v#.#.#..HEAD
# All repo # All repo
./.venv/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD" .venv.erplibre/bin/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
``` ```
Simplification tools: Simplification tools:
@ -169,7 +169,7 @@ git tag v#.#.#
# Push your tags # Push your tags
git push --tags git push --tags
# Add tags for all repo # Add tags for all repo
./.venv/repo forall -pc "git tag ERPLibre/v#.#.#" .venv.erplibre/bin/repo forall -pc "git tag ERPLibre/v#.#.#"
make tag_push_all make tag_push_all
``` ```

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -35,12 +35,16 @@ RUN cd ; mkdir -p .bin/ && \
RUN cd $ODOO_PREFIX && \ RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \ ls -lha /ERPLibre && \
python -m venv .venv python -m venv .venv.$ERPLIBRE_VERSION
RUN cd $ODOO_PREFIX && \ RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \ ls -lha /ERPLibre && \
curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo && \ python -m venv .venv.erplibre
chmod +x ./.venv/repo
RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \
curl https://storage.googleapis.com/git-repo-downloads/repo > .venv.erplibre/bin/repo && \
chmod +x .venv.erplibre/bin/repo
RUN cd $ODOO_PREFIX && \ RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \ ls -lha /ERPLibre && \
@ -59,10 +63,10 @@ RUN apt update && \
RUN cd $ODOO_PREFIX && \ RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \ ls -lha /ERPLibre && \
echo "${ERPLIBRE_VERSION}" && \ echo "${ERPLIBRE_VERSION}" && \
./.venv/bin/pip install --upgrade pip && git branch && ls . -lha && \ ./.venv.$(cat ".erplibre-version" | xargs)/bin/pip install --upgrade pip && git branch && ls . -lha && \
./.venv/bin/pip install "poetry==${POETRY_VERSION}" && \ ./.venv.$(cat ".erplibre-version" | xargs)/bin/pip install "poetry==${POETRY_VERSION}" && \
./.venv/bin/poetry --version && \ ./.venv.$(cat ".erplibre-version" | xargs)/bin/poetry --version && \
./.venv/bin/poetry install ./.venv.$(cat ".erplibre-version" | xargs)/bin/poetry install
# Install local npm # Install local npm
RUN cd $ODOO_PREFIX && \ RUN cd $ODOO_PREFIX && \

View file

@ -12,7 +12,7 @@ then
echo "my repo" $(git rev-parse --abbrev-ref HEAD) echo "my repo" $(git rev-parse --abbrev-ref HEAD)
repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m default.dev.xml repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m default.dev.xml
repo sync repo sync -c -j $(nproc --all)
# After sync, terminate the git checkout. We don't need graceful kill as we don't do commit on the git repo during the operation. # After sync, terminate the git checkout. We don't need graceful kill as we don't do commit on the git repo during the operation.
kill -9 $GIT_PID kill -9 $GIT_PID
@ -79,12 +79,12 @@ case "$1" in
if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then
sleep 999999 sleep 999999
fi fi
/ERPLibre/.venv/bin/python ./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30 /ERPLibre/.venv.$(cat ".erplibre-version" | xargs)/bin/python ./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30
if [[ "${UPDATE_ALL_DB}" == "True" ]] ; then if [[ "${UPDATE_ALL_DB}" == "True" ]] ; then
# --stop-after-init # --stop-after-init
exec ./.venv/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf -u all -d "${DB_NAME}" exec ./.venv.$(cat ".erplibre-version" | xargs)/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf -u all -d "${DB_NAME}"
else else
exec ./.venv/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf exec ./.venv.$(cat ".erplibre-version" | xargs)/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf
fi fi
fi fi
;; ;;
@ -93,11 +93,11 @@ case "$1" in
if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then
sleep 999999 sleep 999999
fi fi
/ERPLibre/.venv/bin/python ./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30 /ERPLibre/.venv.$(cat ".erplibre-version" | xargs)/bin/python ./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30
if [[ "${UPDATE_ALL_DB}" == "True" ]] ; then if [[ "${UPDATE_ALL_DB}" == "True" ]] ; then
exec ./.venv/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf -u all -d "${DB_NAME}" exec ./.venv.$(cat ".erplibre-version" | xargs)/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf -u all -d "${DB_NAME}"
else else
exec ./.venv/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf exec ./.venv.$(cat ".erplibre-version" | xargs)/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf
fi fi
;; ;;
*) *)

View file

@ -5,10 +5,11 @@ ERPLIBRE_VERSION="1.6.0"
EL_USER="erplibre" EL_USER="erplibre"
EL_HOME="/${EL_USER}" EL_HOME="/${EL_USER}"
EL_HOME_ERPLIBRE="${EL_HOME}/erplibre" EL_HOME_ERPLIBRE="${EL_HOME}/erplibre"
EL_HOME_ODOO="${EL_HOME_ERPLIBRE}/odoo" EL_HOME_ODOO="${EL_HOME_ERPLIBRE}/odoo$(cat ".odoo-version" | xargs)/odoo"
EL_ODOO_VERSION=$(cat ".odoo-version" | xargs) EL_ODOO_VERSION=$(cat ".odoo-version" | xargs)
EL_POETRY_VERSION=$(cat ".poetry-version" | xargs) EL_POETRY_VERSION=$(cat ".poetry-version" | xargs)
EL_PYTHON_VERSION=$(cat ".python-version" | xargs) EL_PYTHON_ODOO_VERSION=$(cat ".python-odoo-version" | xargs)
EL_PYTHON_ERPLIBRE_VERSION=$(cat "./conf/python-erplibre-version" | xargs)
EL_ERPLIBRE_VERSION=$(cat ".erplibre-version" | xargs) EL_ERPLIBRE_VERSION=$(cat ".erplibre-version" | xargs)
# The default port where this Odoo instance will run under (provided you use the command -c in the terminal) # The default port where this Odoo instance will run under (provided you use the command -c in the terminal)
# Set to true if you want to install it, false if you don't need it or have it already installed. # Set to true if you want to install it, false if you don't need it or have it already installed.
@ -26,4 +27,4 @@ EL_INSTALL_NGINX="False"
EL_WEBSITE_NAME="localhost" EL_WEBSITE_NAME="localhost"
EL_GITHUB_TOKEN="" EL_GITHUB_TOKEN=""
EL_MANIFEST_PROD="./default.xml" EL_MANIFEST_PROD="./default.xml"
EL_MANIFEST_DEV="./manifest/default.dev.xml" EL_MANIFEST_DEV="./manifest/git_manifest_erplibre.xml"

3
install.sh Executable file
View file

@ -0,0 +1,3 @@
#!/usr/bin/env bash
./script/todo/todo.py

View file

@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source ./.venv/bin/activate # This is required to change environment for the running Odoo
source ./.venv.$(< .erplibre-version)/bin/activate
ODOO_PATH="$(pwd)/odoo$(< .odoo-version)" ODOO_PATH="$(pwd)/odoo$(< .odoo-version)"
#export PATH=$ODOO_PATH:$PATH #export PATH=$ODOO_PATH:$PATH

1
run.sh
View file

@ -2,6 +2,7 @@
Red='\033[0;31m' # Red Red='\033[0;31m' # Red
Color_Off='\033[0m' # Text Reset Color_Off='\033[0m' # Text Reset
# Search by default local configuration
CONFIG_PATH="./config.conf" CONFIG_PATH="./config.conf"
ORIGIN_CONFIG_PATH=CONFIG_PATH ORIGIN_CONFIG_PATH=CONFIG_PATH
if [ ! -f "${CONFIG_PATH}" ]; then if [ ! -f "${CONFIG_PATH}" ]; then

View file

@ -16,7 +16,7 @@ logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
PYTHON_BIN = ".venv/bin/python3" PYTHON_BIN = ".venv.erplibre/bin/python3"
IMAGE_DB_BIN = f"{PYTHON_BIN} ./script/database/image_db.py" IMAGE_DB_BIN = f"{PYTHON_BIN} ./script/database/image_db.py"

View file

@ -26,4 +26,4 @@ echo "Import SQL file"
mysql -u organization -porganization mariadb_sql_example_1 < ${SQL_PATH} mysql -u organization -porganization mariadb_sql_example_1 < ${SQL_PATH}
echo "Fix SQL in database" echo "Fix SQL in database"
./.venv/bin/python ./script/database/fix_mariadb_sql_example_1.py ./.venv.erplibre/bin/python ./script/database/fix_mariadb_sql_example_1.py

View file

@ -6,7 +6,7 @@ Color_Off='\033[0m' # Text Reset
ERPLIBRE_IMAGE_NAME=$(cat .erplibre-semver-version|xargs) ERPLIBRE_IMAGE_NAME=$(cat .erplibre-semver-version|xargs)
ERPLIBRE_VERSION_MAIN=$(cat .erplibre-version|xargs) ERPLIBRE_VERSION_MAIN=$(cat .erplibre-version|xargs)
ODOO_VERSION=$(cat .odoo-version|xargs) ODOO_VERSION=$(cat .odoo-version|xargs)
PYTHON_VERSION=$(cat .python-version|xargs) PYTHON_VERSION=$(cat .python-odoo-version|xargs)
POETRY_VERSION=$(cat .poetry-version|xargs) POETRY_VERSION=$(cat .poetry-version|xargs)
IS_DEBIAN_BOOKWORM=true IS_DEBIAN_BOOKWORM=true

View file

@ -9,7 +9,7 @@ BASENAME="${BASENAME,,}"
docker exec -u root -ti ${BASENAME}-ERPLibre-1 /bin/bash -c "\ docker exec -u root -ti ${BASENAME}-ERPLibre-1 /bin/bash -c "\
cd /ERPLibre; \ cd /ERPLibre; \
./.venv/repo forall -pc 'git status -s'; \ .venv.erplibre/bin/repo forall -pc 'git status -s'; \
echo ''; \ echo ''; \
git status -s; \ git status -s; \
" "
@ -18,7 +18,7 @@ retVal=$?
if [[ $retVal -ne 0 ]]; then if [[ $retVal -ne 0 ]]; then
docker exec -u root -ti ${BASENAME}_ERPLibre_1 /bin/bash -c "\ docker exec -u root -ti ${BASENAME}_ERPLibre_1 /bin/bash -c "\
cd /ERPLibre; \ cd /ERPLibre; \
./.venv/repo forall -pc 'git status -s'; \ .venv.erplibre/bin/repo forall -pc 'git status -s'; \
echo ''; \ echo ''; \
git status -s; \ git status -s; \
" "

View file

@ -4,7 +4,7 @@
EL_USER=${USER} EL_USER=${USER}
EL_HOME=$PWD EL_HOME=$PWD
EL_HOME_ODOO="${EL_HOME}/odoo" EL_HOME_ODOO="${EL_HOME}/odoo${EL_ODOO_VERSION}/odoo"
#EL_PORT="8069" #EL_PORT="8069"
#EL_LONGPOLLING_PORT="8072" #EL_LONGPOLLING_PORT="8072"
#EL_SUPERADMIN="admin" #EL_SUPERADMIN="admin"
@ -26,11 +26,7 @@ printf "longpolling_port = ${EL_LONGPOLLING_PORT}\n" >> "${EL_CONFIG_FILE}"
printf "addons_path = ${EL_HOME_ODOO}/addons,${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/addons," >> "${EL_CONFIG_FILE}" printf "addons_path = ${EL_HOME_ODOO}/addons,${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/addons," >> "${EL_CONFIG_FILE}"
if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/CybroOdoo_CybroAddons," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/CybroOdoo_OpenHRMS," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/CybroOdoo_OpenHRMS," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/ERPLibre_erplibre_addons," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/MathBenTech_development," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/MathBenTech_odoo-business-spending-management-quebec-canada," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-analytic," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-analytic," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-budgeting," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-budgeting," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-closing," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-closing," >> "${EL_CONFIG_FILE}"
@ -44,6 +40,7 @@ if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-reconcile," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-reconcile," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_apps-store," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_apps-store," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_bank-payment," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_bank-payment," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_bank-payment-alternative," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_bank-statement-import," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_bank-statement-import," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_brand," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_brand," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_business-requirement," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_business-requirement," >> "${EL_CONFIG_FILE}"
@ -58,10 +55,12 @@ if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_contract," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_contract," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_credit-control," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_credit-control," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_crm," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_crm," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_crowdfunding," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_currency," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_currency," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_data-protection," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_data-protection," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_ddmrp," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_ddmrp," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_delivery-carrier," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_delivery-carrier," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_dms," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_donation," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_donation," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_e-commerce," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_e-commerce," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_edi," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_edi," >> "${EL_CONFIG_FILE}"
@ -75,6 +74,7 @@ if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_interface-github," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_interface-github," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_knowledge," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_knowledge," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_l10n-canada," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_l10n-canada," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_mail," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_maintenance," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_maintenance," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_management-system," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_management-system," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_manufacture," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_manufacture," >> "${EL_CONFIG_FILE}"
@ -101,14 +101,11 @@ if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-backend," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-backend," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-brand," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-brand," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-env," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-env," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-tools," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-ux," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-ux," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_shift-planning," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_social," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_social," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_stock-logistics-putaway," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_stock-logistics-warehouse," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_stock-logistics-warehouse," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_storage," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_storage," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_survey," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_timesheet," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-association," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-association," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-hotel," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-hotel," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-isp," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-isp," >> "${EL_CONFIG_FILE}"
@ -119,14 +116,10 @@ if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_wms," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_wms," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OmniaGit_odooplm," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OmniaGit_odooplm," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/camptocamp_odoo-cloud-platform," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/camptocamp_odoo-cloud-platform," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/cetmix_cetmix-tower," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/dhongu_deltatech," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/dhongu_deltatech," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/it-projects-llc_saas-addons," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/muk-it_muk_web," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/novacode-nl_odoo-formio," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/novacode-nl_odoo-formio," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/odoomates_odooapps," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/odoomates_odooapps," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/openeducat_openeducat_erp," >> "${EL_CONFIG_FILE}" printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/openeducat_openeducat_erp," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/tegin_medical-fhir," >> "${EL_CONFIG_FILE}"
fi fi
printf "\n" >> "${EL_CONFIG_FILE}" printf "\n" >> "${EL_CONFIG_FILE}"
@ -140,6 +133,6 @@ fi
# Update and fix the config.conf # Update and fix the config.conf
# Fix only the configuration if installation is done # Fix only the configuration if installation is done
if [ -f "./.venv/bin/activate" ] && [ -f "./odoo/odoo-bin" ]; then if [ -f "./.venv.$(< .erplibre-version)/bin/activate" ] && [ -f "./odoo$(< .odoo-version)/odoo/odoo-bin" ]; then
make config_update make config_update
fi fi

View file

@ -4,6 +4,7 @@
import argparse import argparse
import copy import copy
import csv
import logging import logging
import os import os
import sys import sys
@ -18,6 +19,14 @@ from script.git.git_tool import GitTool
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
DEFAULT_PATH_MANIFEST_CONF = os.path.join("conf", "git_manifest.csv")
DEFAULT_PATH_MANIFEST_ODOO_CONF = os.path.join("conf", "git_manifest_odoo.csv")
DEFAULT_PATH_MANIFEST_PRIVATE_CONF = os.path.join(
"private", "default_git_manifest.csv"
)
DEFAULT_PATH_INSTALLED_ODOO_VERSION = os.path.join(".repo", "installed_odoo_version.txt")
def get_config(): def get_config():
"""Parse command line arguments, extracting the config file name, """Parse command line arguments, extracting the config file name,
returning the union of config file and command line arguments returning the union of config file and command line arguments
@ -32,16 +41,18 @@ def get_config():
""", """,
) )
parser.add_argument( parser.add_argument(
"--input1", required=True, help="First manifest to merge into input2." "--input",
help="First manifest to merge into input2. Second manifest, overwrite by input1.",
)
parser.add_argument("--output", default=".repo/local_manifests/erplibre_manifest.xml", help="Output of new manifest")
parser.add_argument(
"--att_revision_only",
action="store_true",
help="Output of new manifest",
) )
parser.add_argument( parser.add_argument(
"--input2", required=True, help="Second manifest, overwrite by input1." "--with_OCA", action="store_true", help="Add OCA manifest"
) )
parser.add_argument(
"--output", required=True, help="Output of new manifest"
)
# parser.add_argument('--clear', action="store_true",
# help="Create a new manifest and clear old configuration.")
args = parser.parse_args() args = parser.parse_args()
return args return args
@ -50,36 +61,122 @@ def main():
config = get_config() config = get_config()
git_tool = GitTool() git_tool = GitTool()
( lst_input = config.input
dct_remote_1, if not lst_input:
dct_project_1, lst_input = []
default_remote_1, if config.with_OCA:
) = git_tool.get_manifest_xml_info(filename=config.input1, add_root=True) append_file_path_manifest(
( lst_input, DEFAULT_PATH_MANIFEST_ODOO_CONF
dct_remote_2, )
dct_project_2, if os.path.exists(".odoo-version"):
default_remote_2, with open(".odoo-version", "r") as f:
) = git_tool.get_manifest_xml_info(filename=config.input2, add_root=True) odoo_version = f.readline()
if odoo_version:
path_manifest_odoo_version = os.path.join(
"manifest", f"git_manifest_odoo{odoo_version}.xml"
)
if os.path.exists(path_manifest_odoo_version):
lst_input.append(path_manifest_odoo_version)
else:
print(
f"ERROR: {path_manifest_odoo_version} does not exist"
)
path_manifest_odoo_version = os.path.join(
"manifest", f"git_manifest_odoo{odoo_version}_dev.xml"
)
if os.path.exists(path_manifest_odoo_version):
lst_input.append(path_manifest_odoo_version)
dct_remote_3 = copy.deepcopy(dct_remote_2) if os.path.exists(DEFAULT_PATH_INSTALLED_ODOO_VERSION):
dct_project_3 = copy.deepcopy(dct_project_2) with open(DEFAULT_PATH_INSTALLED_ODOO_VERSION, "r") as f:
lst_installed_odoo_version = [a.strip() for a in f.readlines()]
if lst_installed_odoo_version:
for installed_odoo_version in lst_installed_odoo_version:
path_manifest_odoo_version = os.path.join(
"manifest", f"git_manifest_{installed_odoo_version}.xml"
)
if os.path.exists(path_manifest_odoo_version):
lst_input.append(path_manifest_odoo_version)
else:
print(
f"ERROR: {path_manifest_odoo_version} does not exist"
)
path_manifest_odoo_version = os.path.join(
"manifest", f"git_manifest_{installed_odoo_version}_dev.xml"
)
if os.path.exists(path_manifest_odoo_version):
lst_input.append(path_manifest_odoo_version)
for key, value in dct_project_1.items():
revision = value.get("@revision")
if revision:
dct_project_3[key]["@revision"] = revision
else: else:
dct_project_3[key]["@upstream"] = "12.0" append_file_path_manifest(lst_input, DEFAULT_PATH_MANIFEST_CONF)
dct_project_3[key]["@dest-branch"] = "12.0" append_file_path_manifest(
lst_input, DEFAULT_PATH_MANIFEST_PRIVATE_CONF
)
dct_remote_total = {}
dct_project_total = {}
default_remote_total = None
# Be sure all input is unique
lst_input = list(set(lst_input))
for index, input_path in enumerate(lst_input):
(
dct_remote,
dct_project,
default_remote,
) = git_tool.get_manifest_xml_info(filename=input_path, add_root=True)
# Support multiple version odoo
dct_project_copy = dct_project
dct_project = {}
for key, value in dct_project_copy.items():
new_key = f"{key}+{value.get('@path')}"
dct_project[new_key] = value
if len(lst_input) == 1:
# Only 1 input, same output
dct_remote_total = dct_remote
dct_project_total = dct_project
break
elif not index:
# Preparation to accumulate data
dct_remote_total = copy.deepcopy(dct_remote)
dct_project_total = copy.deepcopy(dct_project)
continue
for key, value in dct_project.items():
if key in dct_project_total.keys():
if config.att_revision_only:
revision = value.get("@revision")
if revision:
dct_project_total[key]["@revision"] = revision
else:
dct_project_total[key].update(value)
else:
dct_project_total[key] = copy.deepcopy(value)
for key, value in dct_remote.items():
if key in dct_remote_total.keys():
dct_remote_total[key].update(value)
else:
dct_remote_total[key] = copy.deepcopy(value)
# Update origin to new repo
git_tool.generate_repo_manifest( git_tool.generate_repo_manifest(
dct_remote=dct_remote_3, dct_remote=dct_remote_total,
dct_project=dct_project_3, dct_project=dct_project_total,
output=config.output, output=config.output,
default_remote=default_remote_2, default_remote=default_remote_total,
) )
def append_file_path_manifest(lst_input, path_manifest):
if os.path.exists(path_manifest):
with open(path_manifest, "r") as f:
csv_file = csv.DictReader(f)
for row in csv_file:
filepath = row.get("filepath")
lst_input.append(filepath)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View file

@ -3,6 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import os import os
import pathlib
import webbrowser import webbrowser
from collections import OrderedDict from collections import OrderedDict
from typing import List from typing import List
@ -20,8 +21,6 @@ CST_EL_GITHUB_TOKEN = "EL_GITHUB_TOKEN"
DEFAULT_PROJECT_NAME = "ERPLibre" DEFAULT_PROJECT_NAME = "ERPLibre"
DEFAULT_WEBSITE = "erplibre.ca" DEFAULT_WEBSITE = "erplibre.ca"
DEFAULT_REMOTE_URL = "https://github.com/ERPLibre/ERPLibre.git" DEFAULT_REMOTE_URL = "https://github.com/ERPLibre/ERPLibre.git"
with open(".odoo-version", "r") as f:
DEFAULT_BRANCH = f.readline()
class Struct(object): class Struct(object):
@ -44,7 +43,17 @@ class GitTool:
@property @property
def default_branch(self): def default_branch(self):
return DEFAULT_BRANCH return self.odoo_version
@property
def odoo_version(self):
with open(".odoo-version", "r") as f:
default_branch = f.readline()
return default_branch
@property
def odoo_version_long(self):
return f"odoo{self.odoo_version}"
@staticmethod @staticmethod
def get_url(url: str) -> object: def get_url(url: str) -> object:
@ -270,7 +279,12 @@ class GitTool:
xml_as_string = xml.read() xml_as_string = xml.read()
xml_dict = xmltodict.parse(xml_as_string) xml_dict = xmltodict.parse(xml_as_string)
dct_manifest = xml_dict.get("manifest") dct_manifest = xml_dict.get("manifest")
default_remote = dct_manifest.get("default").get("@remote") if not dct_manifest:
return []
if dct_manifest.get("default"):
default_remote = dct_manifest.get("default").get("@remote")
else:
default_remote = None
lst_remote = dct_manifest.get("remote") lst_remote = dct_manifest.get("remote")
if type(lst_remote) is dict: if type(lst_remote) is dict:
lst_remote = [lst_remote] lst_remote = [lst_remote]
@ -306,7 +320,7 @@ class GitTool:
"path": path, "path": path,
"relative_path": f"{repo_path}/{path}", "relative_path": f"{repo_path}/{path}",
"name": name, "name": name,
"group": group, "group": groups,
} }
lst_repo.append(data) lst_repo.append(data)
@ -349,16 +363,28 @@ class GitTool:
""" """
if filename is None: if filename is None:
manifest_file = self.get_manifest_file(repo_path=repo_path) manifest_file = self.get_manifest_file(repo_path=repo_path)
filename = f"{repo_path}/{manifest_file}" filename = os.path.normpath(os.path.join(repo_path, manifest_file))
with open(filename) as xml: with open(filename) as xml:
xml_as_string = xml.read() xml_as_string = xml.read()
xml_dict = xmltodict.parse(xml_as_string) xml_dict = xmltodict.parse(xml_as_string)
dct_manifest = xml_dict.get("manifest") dct_manifest = xml_dict.get("manifest")
if not dct_manifest:
return {}, {}, None
default_remote = dct_manifest.get("default") default_remote = dct_manifest.get("default")
lst_remote = dct_manifest.get("remote") lst_remote = dct_manifest.get("remote")
if type(lst_remote) is dict:
lst_remote = [lst_remote]
lst_project = dct_manifest.get("project") lst_project = dct_manifest.get("project")
dct_remote = {a.get("@name"): a for a in lst_remote} if type(lst_project) is dict:
dct_project = {a.get("@name"): a for a in lst_project} lst_project = [lst_project]
if lst_remote:
dct_remote = {a.get("@name"): a for a in lst_remote}
else:
dct_remote = {}
if lst_project:
dct_project = {a.get("@name"): a for a in lst_project}
else:
dct_project = {}
return dct_remote, dct_project, default_remote return dct_remote, dct_project, default_remote
@staticmethod @staticmethod
@ -395,6 +421,8 @@ class GitTool:
def generate_generate_config(self, repo_path="./", filter_group=None): def generate_generate_config(self, repo_path="./", filter_group=None):
filename_locally = f"{repo_path}script/generate_config.sh" filename_locally = f"{repo_path}script/generate_config.sh"
if not filter_group:
filter_group = self.odoo_version_long
lst_repo = self.get_repo_info( lst_repo = self.get_repo_info(
repo_path=repo_path, filter_group=filter_group repo_path=repo_path, filter_group=filter_group
) )
@ -403,6 +431,7 @@ class GitTool:
# Exception, ignore addons/OCA_web and root # Exception, ignore addons/OCA_web and root
if repo.get("path") in ["addons/OCA_web", "odoo", "image_db"]: if repo.get("path") in ["addons/OCA_web", "odoo", "image_db"]:
continue continue
# groups = repo.get("group")
update_repo = repo.get("path") update_repo = repo.get("path")
# Use variable instead of hardcoded path # Use variable instead of hardcoded path
if update_repo.startswith("addons.odoo"): if update_repo.startswith("addons.odoo"):
@ -460,7 +489,7 @@ class GitTool:
dct_project={}, dct_project={},
default_remote=None, default_remote=None,
keep_original=False, keep_original=False,
default_branch=DEFAULT_BRANCH, default_branch=None,
): ):
""" """
Generate repo manifest Generate repo manifest
@ -474,10 +503,6 @@ class GitTool:
:param default_branch: default branch name :param default_branch: default branch name
:return: :return:
""" """
if not output:
raise Exception(
"Cannot generate manifest with missing output filename."
)
lst_remote = [] lst_remote = []
lst_remote_name = [] lst_remote_name = []
lst_project = [] lst_project = []
@ -604,7 +629,7 @@ class GitTool:
lst_default, key=lambda key: key.get("@remote") lst_default, key=lambda key: key.get("@remote")
) )
lst_order_project = sorted( lst_order_project = sorted(
lst_project, key=lambda key: key.get("@name") lst_project, key=lambda key: key.get("@name") + key.get("@path")
) )
dct_repo = OrderedDict( dct_repo = OrderedDict(
@ -647,8 +672,14 @@ class GitTool:
str_xml_text = str_xml_text.replace("\t", " ") str_xml_text = str_xml_text.replace("\t", " ")
# create file # create file
with open(output, mode="w") as file: output_dirname = os.path.dirname(output)
file.writelines(str_xml_text + "\n") if not os.path.exists(output_dirname):
pathlib.Path(output_dirname).mkdir(parents=True, exist_ok=True)
if output:
with open(output, mode="w") as file:
file.writelines(str_xml_text + "\n")
else:
print(str_xml_text + "\n")
def generate_git_modules( def generate_git_modules(
self, lst_repo: List[Struct], repo_path: str = "./" self, lst_repo: List[Struct], repo_path: str = "./"
@ -742,6 +773,11 @@ class GitTool:
:param repo_path: path to search .repo :param repo_path: path to search .repo
:return: manifest file used for Repo :return: manifest file used for Repo
""" """
file = os.path.join(
repo_path, ".repo", "local_manifests", "erplibre_manifest.xml"
)
if os.path.exists(file):
return file
file = f"{repo_path}/.repo/manifest.xml" file = f"{repo_path}/.repo/manifest.xml"
if not os.path.exists(file): if not os.path.exists(file):
return "" return ""

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
LAST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) LAST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
./.venv/repo forall -pc "git diff ERPLibre/${LAST_TAG}..HEAD" .venv.erplibre/bin/repo forall -pc "git diff ERPLibre/${LAST_TAG}..HEAD"
# For actual repo # For actual repo
git diff ${LAST_TAG}..HEAD git diff ${LAST_TAG}..HEAD

View file

@ -4,7 +4,7 @@ Color_Off='\033[0m' # Text Reset
BOLD='\033[1m' # Black BOLD='\033[1m' # Black
LAST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) LAST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
./.venv/repo forall -pc "git diff --stat ERPLibre/${LAST_TAG}..HEAD" .venv.erplibre/bin/repo forall -pc "git diff --stat ERPLibre/${LAST_TAG}..HEAD"
echo "" echo ""
echo -e "${BOLD}project /${Color_Off}" echo -e "${BOLD}project /${Color_Off}"

View file

@ -376,7 +376,7 @@ def add_configuration(dct_xml, file_name, config):
{"@name": "PARENT_ENVS", "@value": "true"}, {"@name": "PARENT_ENVS", "@value": "true"},
{ {
"@name": "SDK_HOME", "@name": "SDK_HOME",
"@value": "$PROJECT_DIR$/.venv/bin/python", "@value": "$PROJECT_DIR$/.venv.erplibre/bin/python",
}, },
{ {
"@name": "WORKING_DIRECTORY", "@name": "WORKING_DIRECTORY",

View file

@ -49,11 +49,12 @@ sudo systemctl daemon-reload
sudo systemctl enable ${EL_CONFIG}.service sudo systemctl enable ${EL_CONFIG}.service
sudo su ${EL_USER} -c "sudo rm -f /tmp/${EL_USER}run.sh" sudo su ${EL_USER} -c "sudo rm -f /tmp/${EL_USER}run.sh"
# TODO this is outdated
cat <<EOF > /tmp/${EL_USER}run.sh cat <<EOF > /tmp/${EL_USER}run.sh
#!/usr/bin/env bash #!/usr/bin/env bash
cd ${EL_HOME_ERPLIBRE} cd ${EL_HOME_ERPLIBRE}
source ./.venv/bin/activate source ./.venv.erplibre/bin/activate
python3 ${EL_HOME_ERPLIBRE}/odoo/odoo-bin -c ${EL_HOME_ERPLIBRE}/config.conf --limit-time-real 99999 --limit-time-cpu 99999 $@ python3 ${EL_HOME_ERPLIBRE}/odoo18.0/odoo/odoo-bin -c ${EL_HOME_ERPLIBRE}/config.conf --limit-time-real 99999 --limit-time-cpu 99999 $@
EOF EOF
echo -e "* Security Run File" echo -e "* Security Run File"

View file

@ -0,0 +1,5 @@
#!/usr/bin/env bash
# TODO deprecated, this is moved into install_locally.sh to be sure venv is installed and force take specified supported version
python3 -m venv .venv.erplibre
source .venv.erplibre/bin/activate
pip3 install -r requirement/erplibre_require-ments.txt

View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
VENV_ERPLIBRE_PATH=$(cat "conf/python-erplibre-venv" | xargs)
VENV_REPO_PATH=${VENV_ERPLIBRE_PATH}/bin/repo
# Install git-repo if missing
if [[ ! -f ${VENV_REPO_PATH} ]]; then
echo "\n---- Install git-repo from Google APIS ----"
curl https://storage.googleapis.com/git-repo-downloads/repo > ${VENV_REPO_PATH}
chmod +x ${VENV_REPO_PATH}
sed -i 1d ${VENV_REPO_PATH}
PYTHON_HASHBANG="#!./${VENV_ERPLIBRE_PATH}/bin/python"
sed -i "1 i ${PYTHON_HASHBANG}" ${VENV_REPO_PATH}
fi

View file

@ -3,7 +3,7 @@
. ./env_var.sh . ./env_var.sh
EL_USER=${USER} EL_USER=${USER}
EL_HOME=$PWD EL_HOME=$PWD
EL_HOME_ODOO="${EL_HOME}/odoo" EL_HOME_ODOO="${EL_HOME}/odoo${EL_ODOO_VERSION}/odoo"
#EL_INSTALL_WKHTMLTOPDF="True" #EL_INSTALL_WKHTMLTOPDF="True"
#EL_PORT="8069" #EL_PORT="8069"
#EL_LONGPOLLING_PORT="8072" #EL_LONGPOLLING_PORT="8072"
@ -12,132 +12,68 @@ EL_HOME_ODOO="${EL_HOME}/odoo"
#EL_CONFIG="${EL_USER}" #EL_CONFIG="${EL_USER}"
#EL_MINIMAL_ADDONS="False" #EL_MINIMAL_ADDONS="False"
#EL_INSTALL_NGINX="True" #EL_INSTALL_NGINX="True"
FILE_INSTALLATION_VERSION=".repo/installed_odoo_version.txt"
Red='\033[0;31m' # Red Red='\033[0;31m' # Red
Color_Off='\033[0m' # Text Reset Color_Off='\033[0m' # Text Reset
./script/generate_config.sh ./script/generate_config.sh
#echo -e "\n---- Install Odoo with addons module ----"
#git submodule update --init
# Generate empty addons if missing # Generate empty addons if missing
path_addons_addons="./addons.odoo${EL_ODOO_VERSION}/addons" path_addons_addons="./addons.odoo${EL_ODOO_VERSION}/addons"
if [[ ! -d "${path_addons_addons}" ]]; then if [[ ! -d "${path_addons_addons}" ]]; then
mkdir -p "${path_addons_addons}" mkdir -p "${path_addons_addons}"
fi fi
PYENV_PATH=~/.pyenv
# example, 3.7.8 will be 3.7 into PYTHON_VERSION_MAJOR # example, 3.7.8 will be 3.7 into PYTHON_VERSION_MAJOR
PYTHON_VERSION_MAJOR=$(echo "$EL_PYTHON_VERSION" | sed 's/\.[^\.]*$//') PYTHON_VERSION_MAJOR=$(echo "$EL_PYTHON_ODOO_VERSION" | sed 's/\.[^\.]*$//')
PYENV_VERSION_PATH=${PYENV_PATH}/versions/${EL_PYTHON_VERSION} VENV_ERPLIBRE_PATH=$(cat "conf/python-erplibre-venv" | xargs)
PYTHON_EXEC=${PYENV_VERSION_PATH}/bin/python VENV_ODOO_PATH=".venv.${EL_ERPLIBRE_VERSION}"
VENV_PATH=./.venv POETRY_ODOO_PATH=${VENV_ERPLIBRE_PATH}/bin/poetry
LOCAL_PYTHON_EXEC=${VENV_PATH}/bin/python
VENV_REPO_PATH=${VENV_PATH}/repo
VENV_MULTILINGUAL_MARKDOWN_PATH=${VENV_PATH}/multilang_md.py
#POETRY_PATH=~/.local/bin/poetry
POETRY_PATH=${VENV_PATH}/bin/poetry
export WITH_POETRY_INSTALLATION=1 export WITH_POETRY_INSTALLATION=1
if [[ ! -n "${DOCKER_BUILD}" ]]; then if [[ ! -n "${DOCKER_BUILD}" ]]; then
echo "Python path version home" # Install ERPLibre venv
echo ${PYENV_VERSION_PATH} echo -e "Install ${VENV_ERPLIBRE_PATH} with ${EL_PYTHON_ERPLIBRE_VERSION}"
echo "Python path version local" ./script/install/install_venv.sh "ERPLibre" "${VENV_ERPLIBRE_PATH}" "${EL_PYTHON_ERPLIBRE_VERSION}"
echo ${LOCAL_PYTHON_EXEC} # Install Odoo venv
echo -e "Install ${VENV_ODOO_PATH} with ${EL_PYTHON_ODOO_VERSION}"
if [[ ! -d "${PYENV_PATH}" ]]; then ./script/install/install_venv.sh "Odoo" "${VENV_ODOO_PATH}" "${EL_PYTHON_ODOO_VERSION}"
echo -e "\n---- Installing pyenv in ${PYENV_PATH} ----"
# export PYENV_GIT_TAG=v2.3.35
# To change version
# rm ~/.pyenv to uninstall it
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
fi
echo -e "\n---- Export pyenv in ${PYENV_PATH} ----"
export PATH="${PYENV_PATH}/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
if [[ ! -d "${PYENV_VERSION_PATH}" ]]; then
echo -e "\n---- Installing python ${PYTHON_VERSION} with pyenv in ${PYENV_VERSION_PATH} ----"
yes n|pyenv install ${PYTHON_VERSION}
if [[ $retVal -ne 0 ]]; then
echo -e "${Red}Error${Color_Off} when installing pyenv"
exit 1
fi
fi
pyenv local ${PYTHON_VERSION}
if [[ ! -d ${VENV_PATH} ]]; then
echo -e "\n---- Create Virtual environment Python ----"
if [[ -e ${PYTHON_EXEC} ]]; then
${PYTHON_EXEC} -m venv .venv
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "Virtual environment, error when creating .venv"
exit 1
fi
else
echo "Missing pyenv, please refer installation guide."
exit 1
fi
fi
source ./.venv/bin/activate
else else
mkdir .venv mkdir .venv
fi fi
#if [[ ! -d "${POETRY_PATH}" ]]; then source ./${VENV_ERPLIBRE_PATH}/bin/activate
# # Delete directory ~/.poetry and .venv to force update to new version echo -e "Upgrade pip to ${VENV_ERPLIBRE_PATH}"
# echo -e "\n---- Installing poetry ${LOCAL_PYTHON_EXEC} for reliable python package ----" pip install --upgrade pip
# # TODO self update poetry with `poetry self update ${POETRY_VERSION}` pip install -r requirement/erplibre_require-ments.txt
# curl -sSL https://install.python-poetry.org | POETRY_VERSION=${EL_POETRY_VERSION} ${LOCAL_PYTHON_EXEC} - -y
#fi
# Install git-repo if missing ./script/install/install_git_repo.sh
if [[ ! -f ${VENV_REPO_PATH} ]]; then
echo "\n---- Install git-repo from Google APIS ----" source ${VENV_ODOO_PATH}/bin/activate
curl https://storage.googleapis.com/git-repo-downloads/repo > ${VENV_REPO_PATH} echo -e "Upgrade pip to ${VENV_ODOO_PATH}"
chmod +x ${VENV_REPO_PATH} pip install --upgrade pip
sed -i 1d ${VENV_REPO_PATH}
PYTHON_HASHBANG="#!./.venv/bin/python"
sed -i "1 i ${PYTHON_HASHBANG}" ${VENV_REPO_PATH}
fi
# Make .venv active
if [[ "${OSTYPE}" == "darwin"* ]]; then
echo -e "=======>source .venv/bin/activate here!!! <==============="
source .venv/bin/activate
fi
echo -e "\n---- Installing poetry dependency ----" echo -e "\n---- Installing poetry dependency ----"
${VENV_PATH}/bin/pip install --upgrade pip
# Force python instead of changing env
#/home/"${USER}"/.poetry/bin/poetry env use ${LOCAL_PYTHON_EXEC}
# source $HOME/.poetry/env
#${LOCAL_PYTHON_EXEC} ~/.poetry/bin/poetry env use ${VENV_PATH}/bin/python3
#${LOCAL_PYTHON_EXEC} ~/.poetry/bin/poetry install
#${POETRY_PATH} install
if [[ -z "${EL_POETRY_VERSION}" ]]; then if [[ -z "${EL_POETRY_VERSION}" ]]; then
echo -e "${Red}Error${Color_Off} missing poetry version, please check file .poetry-version" echo -e "${Red}Error${Color_Off} missing poetry version, please check file .poetry-version"
cat .poetry-version cat .poetry-version
ls -la
exit 1 exit 1
fi fi
# Delete artifacts created by pip, cause error in next "poetry install" # Delete artifacts created by pip, cause error in next "poetry install"
if [[ ! -f "${POETRY_PATH}" ]]; then if [[ ! -f "${POETRY_ODOO_PATH}" ]]; then
${VENV_PATH}/bin/pip install poetry==${EL_POETRY_VERSION} echo -e "Install Poetry ${POETRY_ODOO_PATH}"
${VENV_PATH}/bin/poetry --version pip install poetry==${EL_POETRY_VERSION}
poetry --version
# Fix broken poetry by installing ignored dependence # Fix broken poetry by installing ignored dependence
# ${VENV_PATH}/bin/pip install vatnumber # poetry lock --no-update
# ${VENV_PATH}/bin/pip install suds-jurko
# ${VENV_PATH}/bin/poetry lock --no-update
# To fix keyring problem when installation is blocked, use # To fix keyring problem when installation is blocked, use
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
if [[ ${WITH_POETRY_INSTALLATION} -ne 0 ]]; then if [[ ${WITH_POETRY_INSTALLATION} -ne 0 ]]; then
${VENV_PATH}/bin/poetry install --no-root -vvv poetry install --no-root -vvv
fi fi
retVal=$? retVal=$?
if [[ $retVal -ne 0 ]]; then if [[ $retVal -ne 0 ]]; then
@ -149,6 +85,18 @@ fi
# Delete artifacts created by pip, cause error in next "poetry install" # Delete artifacts created by pip, cause error in next "poetry install"
rm -rf artifacts rm -rf artifacts
# Link for dev # Link for dev tools into Odoo
echo -e "\n---- Add link dependency in site-packages of Python ----" echo -e "\n---- Add link dependency in site-packages of Python ----"
ln -fs "${EL_HOME_ODOO}/odoo" "${EL_HOME}/.venv/lib/python${PYTHON_VERSION_MAJOR}/site-packages/" # TODO this link can break, the symbolic link is maybe not created
ln -fs "${EL_HOME_ODOO}/odoo" "${EL_HOME}/${VENV_ODOO_PATH}/lib/python${PYTHON_VERSION_MAJOR}/site-packages/"
# Force to return to erplibre source
source ./${VENV_ERPLIBRE_PATH}/bin/activate
# Add trace of installation
LINE_TO_ADD="odoo${EL_ODOO_VERSION}"
mkdir -p "$(dirname "$FILE_INSTALLATION_VERSION")"
touch "$FILE_INSTALLATION_VERSION"
if ! grep -qxF "$LINE_TO_ADD" "$FILE_INSTALLATION_VERSION"; then
echo "$LINE_TO_ADD" >> "$FILE_INSTALLATION_VERSION"
fi

View file

@ -32,7 +32,7 @@ npm install
#cd script/OCA_maintainer-tools || exit #cd script/OCA_maintainer-tools || exit
## virtualenv is not installed by default ## virtualenv is not installed by default
##virtualenv env ##virtualenv env
#../../.venv/bin/python -m venv env #../../.venv.erplibre/bin/python -m venv env
#. env/bin/activate #. env/bin/activate
#pip install setuptools-rust #pip install setuptools-rust
## Delete all tag before installing, or break installation, will generate a new one after ## Delete all tag before installing, or break installation, will generate a new one after

68
script/install/install_venv.sh Executable file
View file

@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Check if all 3 parameters are present
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
echo "Error: One or more parameters are missing."
echo "Usage: $0 <Context> <Venv_Path> <Python_Version>"
exit 1
fi
# Assign arguments to variables
CONTEXT="$1"
VENV_PATH="$2"
PYTHON_VERSION="$3"
# Display variables (for verification)
echo "Context: $CONTEXT"
echo "Venv Path: $VENV_PATH"
echo "Python Version: $PYTHON_VERSION"
PYENV_PATH=~/.pyenv
PYENV_VERSION_PATH=${PYENV_PATH}/versions/${PYTHON_VERSION}
PYTHON_EXEC=${PYENV_VERSION_PATH}/bin/python
echo "Python path version home"
echo ${PYENV_VERSION_PATH}
#echo "Python path version local"
#echo ${LOCAL_PYTHON_EXEC}
if [[ ! -d "${PYENV_PATH}" ]]; then
echo -e "\n---- Installing pyenv in ${PYENV_PATH} ----"
# export PYENV_GIT_TAG=v2.3.35
# To change version
# rm ~/.pyenv to uninstall it
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
fi
echo -e "\n---- Export pyenv in ${PYENV_PATH} ----"
export PATH="${PYENV_PATH}/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
if [[ ! -d "${PYENV_VERSION_PATH}" ]]; then
echo -e "\n---- Installing python ${PYTHON_VERSION} with pyenv in ${PYENV_VERSION_PATH} ----"
# Update all python version list
cd "${PYENV_PATH}" && git pull && cd -
yes n|pyenv install ${PYTHON_VERSION}
if [[ $retVal -ne 0 ]]; then
echo -e "${Red}Error${Color_Off} when installing pyenv"
exit 1
fi
fi
# This will write .python-version
# pyenv local ${PYTHON_VERSION}
if [[ ! -d ${VENV_PATH} ]]; then
echo -e "\n---- Create Virtual environment Python ----"
if [[ -e ${PYTHON_EXEC} ]]; then
${PYTHON_EXEC} -m venv "${VENV_PATH}"
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "Virtual environment, error when creating ${VENV_PATH}"
exit 1
fi
else
echo "Missing pyenv, please refer installation guide. Check variable '${PYTHON_EXEC}'."
exit 1
fi
fi

View file

@ -5,7 +5,7 @@ Color_Off='\033[0m' # Text Reset
# This will format all python file # This will format all python file
# argument 1: directory or file to format # argument 1: directory or file to format
NPROC=$(nproc) NPROC=$(nproc)
source ./script/OCA_maintainer-tools/env/bin/activate source ./.venv.erplibre/bin/activate
oca-autopep8 -j ${NPROC} --max-line-length 79 -ari $@ oca-autopep8 -j ${NPROC} --max-line-length 79 -ari $@
retVal=$? retVal=$?
if [[ $retVal -ne 0 ]]; then if [[ $retVal -ne 0 ]]; then

View file

@ -4,7 +4,7 @@ Color_Off='\033[0m' # Text Reset
# This will format all python file # This will format all python file
# argument 1: directory or file to format # argument 1: directory or file to format
source ./.venv/bin/activate source ./.venv.erplibre/bin/activate
black -l 79 --preview -t py37 "$@" black -l 79 --preview -t py37 "$@"
retVal=$? retVal=$?
if [[ $retVal -ne 0 ]]; then if [[ $retVal -ne 0 ]]; then

View file

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source ./.venv/bin/activate source ./.venv.erplibre/bin/activate
isort --profile black -l 79 "$@" isort --profile black -l 79 "$@"
#./.venv/bin/isort --profile black -l 79 "$@" #./.venv.erplibre/bin/isort --profile black -l 79 "$@"
./script/maintenance/black.sh "$@" ./script/maintenance/black.sh "$@"

View file

@ -6,5 +6,5 @@
#EL_MANIFEST_DEV="./manifest/default.dev.xml" #EL_MANIFEST_DEV="./manifest/default.dev.xml"
# Update git-repo # Update git-repo
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b $(git rev-parse --verify HEAD) -m ${EL_MANIFEST_DEV} .venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b $(git rev-parse --verify HEAD) -m ${EL_MANIFEST_DEV}
./.venv/repo sync -v .venv.erplibre/bin/repo sync -v

View file

@ -14,7 +14,10 @@ else
MANIFEST_TARGET="$EL_MANIFEST_DEV" MANIFEST_TARGET="$EL_MANIFEST_DEV"
fi fi
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${MANIFEST_TARGET} "$@" # Generate local manifest
./.venv/repo sync -v -m ${MANIFEST_TARGET} .venv.erplibre/bin/python ./script/git/git_merge_repo_manifest.py --output .repo/local_manifests/erplibre_manifest.xml --with_OCA
.venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${MANIFEST_TARGET} "$@"
.venv.erplibre/bin/repo sync -c -j $(nproc --all) -v -m ${MANIFEST_TARGET}
kill ${DAEMON_PID} kill ${DAEMON_PID}

View file

@ -15,7 +15,7 @@ else
MANIFEST_TARGET="$EL_MANIFEST_DEV" MANIFEST_TARGET="$EL_MANIFEST_DEV"
fi fi
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${MANIFEST_TARGET} -g base,code_generator .venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${MANIFEST_TARGET} -g base,code_generator
./.venv/repo sync -v -m ${MANIFEST_TARGET} .venv.erplibre/bin/repo sync -c -j $(nproc --all) -v -m ${MANIFEST_TARGET}
kill ${DAEMON_PID} kill ${DAEMON_PID}

View file

@ -15,7 +15,7 @@ else
MANIFEST_TARGET="$EL_MANIFEST_DEV" MANIFEST_TARGET="$EL_MANIFEST_DEV"
fi fi
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${MANIFEST_TARGET} .venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${MANIFEST_TARGET}
./.venv/repo sync -v -m ${MANIFEST_TARGET} .venv.erplibre/bin/repo sync -c -j $(nproc --all) -v -m ${MANIFEST_TARGET}
kill ${DAEMON_PID} kill ${DAEMON_PID}

View file

@ -6,5 +6,5 @@
#EL_MANIFEST_DEV="./manifest/default.dev.xml" #EL_MANIFEST_DEV="./manifest/default.dev.xml"
# Update git-repo # Update git-repo
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b $(git rev-parse --verify HEAD) .venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b $(git rev-parse --verify HEAD)
./.venv/repo sync -v .venv.erplibre/bin/repo sync -v -j $(nproc --all)

View file

@ -2,7 +2,7 @@
Red='\033[0;31m' # Red Red='\033[0;31m' # Red
Color_Off='\033[0m' # Text Reset Color_Off='\033[0m' # Text Reset
./.venv/bin/poetry add -vv $(grep -v ";" ./.venv/build_dependency.txt | grep -v "*" ) ./.venv.$(cat ".erplibre-version" | xargs)/bin/poetry add -vv $(grep -v ";" ./.venv.$(cat ".erplibre-version" | xargs)/build_dependency.txt | grep -v "*" )
# poetry add -vv $(grep -v ";" ./.venv/build_dependency.txt | grep -v "*" | sed 's/==/@^/' ) # poetry add -vv $(grep -v ";" ./.venv/build_dependency.txt | grep -v "*" | sed 's/==/@^/' )
# poetry export -f ./.venv/build_dependency.txt --dev | poetry run -- pip install -r /dev/stdin # poetry export -f ./.venv/build_dependency.txt --dev | poetry run -- pip install -r /dev/stdin
retVal=$? retVal=$?

View file

@ -1,6 +1,6 @@
wget https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux64.tar.gz wget https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux64.tar.gz
tar xvf geckodriver-v0.34.0-linux64.tar.gz tar xvf geckodriver-v0.34.0-linux64.tar.gz
sudo mv ./.venv/geckodriver /usr/bin/geckdriver sudo mv ./.venv.erplibre/geckodriver /usr/bin/geckdriver
pip install selenium pip install selenium

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# all argument is directory/file separate by space # all argument is directory/file separate by space
./.venv/bin/pygount --duplicates --folders-to-skip="[...],*/libs/*,*/lib/*,lib" --names-to-skip="[...],*.min.*" --suffix=py,xml,html,js,csv,css,scss --format=summary "$@" ./.venv.erplibre/bin/pygount --duplicates --folders-to-skip="[...],*/libs/*,*/lib/*,lib" --names-to-skip="[...],*.min.*" --suffix=py,xml,html,js,csv,css,scss --format=summary "$@"

View file

@ -38,7 +38,7 @@ if not os.path.isfile(FILENAME_ODOO_VERSION):
with open(".odoo-version", "r") as f: with open(".odoo-version", "r") as f:
ODOO_VERSION = f.readline() ODOO_VERSION = f.readline()
LOG_FILE = "./.venv/make_test.log" LOG_FILE = "./.venv.erplibre/make_test.log"
CONFIG_TESTCASE_JSON = f"./script/test/config_testcase.odoo{ODOO_VERSION}.json" CONFIG_TESTCASE_JSON = f"./script/test/config_testcase.odoo{ODOO_VERSION}.json"

View file

@ -18,7 +18,7 @@
"function": [ "function": [
{ {
"prompt_description": "Ouvrir ERPLibre avec TODO \uD83E\uDD16", "prompt_description": "Ouvrir ERPLibre avec TODO \uD83E\uDD16",
"command": "./.venv/bin/python ./script/selenium/web_login.py" "command": "./.venv.erplibre/bin/python ./script/selenium/web_login.py"
} }
], ],
"update_from_makefile": [ "update_from_makefile": [

View file

@ -6,7 +6,7 @@ input=".python-version"
while IFS= read -r line while IFS= read -r line
do do
echo -e "Actual version $line" echo -e "Actual version $line"
sed -i -e "s/$line/$1/g" ./.python-version sed -i -e "s/$line/$1/g" ./.python-odoo-version
sed -i -e "s/$line/$1/g" ./docker/Dockerfile.base sed -i -e "s/$line/$1/g" ./docker/Dockerfile.base
sed -i -e "s/$line/$1/g" ./script/install/install_OSX_dependency.sh sed -i -e "s/$line/$1/g" ./script/install/install_OSX_dependency.sh
sed -i -e "s/$line/$1/g" ./pyproject.toml sed -i -e "s/$line/$1/g" ./pyproject.toml

View file

@ -2,7 +2,7 @@
# © 2021-2024 TechnoLibre (http://www.technolibre.ca) # © 2021-2024 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
# This script need only basic importation # This script need only basic importation, it needs to be supported by python of your system
import argparse import argparse
import json import json
import logging import logging
@ -18,11 +18,11 @@ _logger = logging.getLogger(__name__)
PROJECT_NAME = os.path.basename(os.getcwd()) PROJECT_NAME = os.path.basename(os.getcwd())
VERSION_DATA_FILE = os.path.join("conf", "supported_version_erplibre.json") VERSION_DATA_FILE = os.path.join("conf", "supported_version_erplibre.json")
VERSION_PYTHON_FILE = os.path.join(".python-version") VERSION_PYTHON_FILE = os.path.join(".python-odoo-version")
INSTALLED_ODOO_VERSION_FILE = ".repo/installed_odoo_version.txt"
VERSION_ERPLIBRE_FILE = os.path.join(".erplibre-version") VERSION_ERPLIBRE_FILE = os.path.join(".erplibre-version")
VERSION_ODOO_FILE = os.path.join(".odoo-version") VERSION_ODOO_FILE = os.path.join(".odoo-version")
VERSION_POETRY_FILE = os.path.join(".poetry-version") VERSION_POETRY_FILE = os.path.join(".poetry-version")
VENV_FILE = os.path.join(".venv")
ADDONS_PATH = os.path.join("addons") ADDONS_PATH = os.path.join("addons")
ODOO_PATH = os.path.join(".", "odoo") ODOO_PATH = os.path.join(".", "odoo")
VENV_TEMPLATE_FILE = ".venv.%s" VENV_TEMPLATE_FILE = ".venv.%s"
@ -110,7 +110,7 @@ def get_config():
parser.add_argument( parser.add_argument(
"--force_install", "--force_install",
action="store_true", action="store_true",
help="Will erase .venv and create symbolic link after installation.", help="Will erase .venv.odooVersion and create symbolic link after installation.",
) )
parser.add_argument( parser.add_argument(
"--force_repo", "--force_repo",
@ -157,7 +157,6 @@ class Update:
self.expected_pyproject_path = None self.expected_pyproject_path = None
self.expected_poetry_lock_name = None self.expected_poetry_lock_name = None
self.expected_poetry_lock_path = None self.expected_poetry_lock_path = None
self.do_backup_venv = False
def check_version_data(self): def check_version_data(self):
die( die(
@ -184,10 +183,13 @@ class Update:
self.python_version = txt.read().strip() self.python_version = txt.read().strip()
with open(VERSION_ODOO_FILE) as txt: with open(VERSION_ODOO_FILE) as txt:
self.odoo_version = txt.read().strip() self.odoo_version = txt.read().strip()
with open(VERSION_POETRY_FILE) as txt:
poetry_version = txt.read().strip()
# Show actual version # Show actual version
_logger.info(f"Python version: {self.python_version}") _logger.info(f"Python version: {self.python_version}")
_logger.info(f"Odoo version: {self.odoo_version}") _logger.info(f"Odoo version: {self.odoo_version}")
_logger.info(f"Poetry version: {poetry_version}")
erplibre_version_to_search = ERPLIBRE_TEMPLATE_VERSION % ( erplibre_version_to_search = ERPLIBRE_TEMPLATE_VERSION % (
self.odoo_version, self.odoo_version,
self.python_version, self.python_version,
@ -212,6 +214,13 @@ class Update:
) )
return False return False
if os.path.exists(INSTALLED_ODOO_VERSION_FILE):
with open(INSTALLED_ODOO_VERSION_FILE) as txt:
lst_version_installed = sorted(txt.read().splitlines())
str_installed_version = "Installed version: " + ", ".join(
lst_version_installed
)
_logger.info(str_installed_version)
return True return True
def validate_version(self): def validate_version(self):
@ -323,7 +332,9 @@ class Update:
ADDONS_TEMPLATE_FILE % self.new_version_odoo ADDONS_TEMPLATE_FILE % self.new_version_odoo
) )
self.expected_odoo_name = ODOO_TEMPLATE_FILE % self.new_version_odoo self.expected_odoo_name = ODOO_TEMPLATE_FILE % self.new_version_odoo
self.expected_odoo_path = os.path.join(".", self.expected_odoo_name, "odoo", ".") self.expected_odoo_path = os.path.join(
".", self.expected_odoo_name, "odoo", "."
)
self.expected_pip_requirement_path = os.path.join( self.expected_pip_requirement_path = os.path.join(
".", "requirement", self.expected_pip_requirement_name ".", "requirement", self.expected_pip_requirement_name
) )
@ -339,16 +350,7 @@ class Update:
def validate_environment(self): def validate_environment(self):
status = True status = True
# Validate .venv venv_exist = os.path.exists(self.expected_venv_name)
status &= self.update_link_file(
"Virtual environnement",
VENV_FILE,
self.expected_venv_name,
is_directory=True,
do_delete_source=self.config.install_dev
or self.config.force_install,
)
venv_exist = os.path.exists(VENV_FILE)
if not venv_exist and not self.config.install_dev: if not venv_exist and not self.config.install_dev:
_logger.info("Relaunch this script with --install_dev argument.") _logger.info("Relaunch this script with --install_dev argument.")
# Validate Odoo repo # Validate Odoo repo
@ -405,24 +407,21 @@ class Update:
def update_environment(self): def update_environment(self):
status = True status = True
do_action = bool(any([self.config.install_dev, self.config.install]))
if self.do_backup_venv and do_action:
venv_backup_name = (
f".venv_backup_{time.strftime('%Yy%mm%dd-%Hh%Mm%Ss')}"
)
shutil.move(VENV_FILE, venv_backup_name)
self.execute_log.append(f"Move .venv to backup {venv_backup_name}")
if self.config.force_repo: if self.config.force_repo:
# TODO add script to check difference before erase all # TODO add script to check difference before erase all
os.system("./script/git/clean_repo_manifest.sh") os.system("./script/git/clean_repo_manifest.sh")
self.execute_log.append( self.execute_log.append(
f"Clear all repo from manifest, everything is deleted" f"Clear all repo from manifest, everything is deleted"
) )
if self.config.force_install:
os.system(f"rm -rf ./{VENV_FILE}")
self.execute_log.append(f"Remove ./{VENV_FILE}")
# Always overwrite version # Always overwrite version
_logger.info(
f"Update local file, "
f"python version '{self.new_version_python}', "
f"erplibre version '{self.new_version_erplibre}', "
f"odoo version '{self.new_version_odoo}', "
f"poetry version '{self.new_version_poetry}'"
)
with open(VERSION_PYTHON_FILE, "w") as txt: with open(VERSION_PYTHON_FILE, "w") as txt:
txt.write(self.new_version_python) txt.write(self.new_version_python)
with open(VERSION_ERPLIBRE_FILE, "w") as txt: with open(VERSION_ERPLIBRE_FILE, "w") as txt:
@ -433,28 +432,21 @@ class Update:
txt.write(self.new_version_poetry) txt.write(self.new_version_poetry)
if self.config.is_in_installation or self.config.is_in_switch: if self.config.is_in_installation or self.config.is_in_switch:
addons_path_with_version = ( # addons_path_with_version = (
ADDONS_TEMPLATE_FILE % self.new_version_odoo # ADDONS_TEMPLATE_FILE % self.new_version_odoo
) # )
# To support multiple addons directory, change name before run git repo # # To support multiple addons directory, change name before run git repo
for addons_path in os.listdir("."): # for addons_path in os.listdir("."):
if ( # if (
addons_path.startswith("addons") # addons_path.startswith("addons")
and addons_path != addons_path_with_version # and addons_path != addons_path_with_version
): # ):
os.rename(addons_path, addons_path + "TEMP") # os.rename(addons_path, addons_path + "TEMP")
# TODO need to be force if installation path is all good, return True # TODO need to be force if installation path is all good, return True
if self.config.install_dev: if self.config.install_dev:
_logger.info("Installation.") _logger.info("Installation.")
status = self.install_erplibre() status = self.install_erplibre()
# Re-update if launch installation
if self.config.install_dev:
self._update_directory_to_link(
VENV_FILE, self.expected_venv_name
)
# self._update_directory_to_link(ADDONS_PATH, self.expected_addons_name)
elif self.config.is_in_switch: elif self.config.is_in_switch:
_logger.info("Switch") _logger.info("Switch")
self.execute_log.append(f"System update") self.execute_log.append(f"System update")
@ -463,13 +455,13 @@ class Update:
) )
# To support multiple addons directory, remove TEMP # To support multiple addons directory, remove TEMP
for addons_path in os.listdir("."): # for addons_path in os.listdir("."):
if ( # if (
addons_path.startswith("addons") # addons_path.startswith("addons")
and addons_path != addons_path_with_version # and addons_path != addons_path_with_version
and addons_path.endswith("TEMP") # and addons_path.endswith("TEMP")
): # ):
os.rename(addons_path, addons_path[:-4]) # os.rename(addons_path, addons_path[:-4])
for addons_path in os.listdir("."): for addons_path in os.listdir("."):
if addons_path.startswith("addons"): if addons_path.startswith("addons"):
# In same time, force to create addons if not existing # In same time, force to create addons if not existing
@ -478,29 +470,19 @@ class Update:
os.makedirs(addons_dir_path) os.makedirs(addons_dir_path)
# Force create addons link # Force create addons link
if os.path.isdir(ADDONS_PATH): # if os.path.isdir(ADDONS_PATH):
if os.path.islink(ADDONS_PATH): # if os.path.islink(ADDONS_PATH):
os.remove(ADDONS_PATH) # os.remove(ADDONS_PATH)
else: # else:
os.rename( # os.rename(
ADDONS_PATH, # ADDONS_PATH,
ADDONS_PATH # ADDONS_PATH
+ "_" # + "_"
+ time.strftime("%Yy%mm%dd-%Hh%Mm%Ss"), # + time.strftime("%Yy%mm%dd-%Hh%Mm%Ss"),
) # )
os.symlink(addons_path_with_version, ADDONS_PATH) # os.symlink(addons_path_with_version, ADDONS_PATH)
return status return status
def _update_directory_to_link(self, dir_to_check, link_name):
actuel_venv_is_symlink = os.path.islink(dir_to_check)
if not actuel_venv_is_symlink:
# Move it and create a symlink
shutil.move(dir_to_check, link_name)
os.symlink(link_name, dir_to_check)
msg = f"Create symbolic link {link_name} to {dir_to_check}"
_logger.info(msg)
self.execute_log.append(msg)
def print_log(self): def print_log(self):
if not self.execute_log: if not self.execute_log:
_logger.info("Nothing to do") _logger.info("Nothing to do")
@ -514,7 +496,7 @@ class Update:
if not pycharm_is_installed or not self.execute_log: if not pycharm_is_installed or not self.execute_log:
return return
os.system( os.system(
"./.venv/bin/python ./script/ide/pycharm_configuration.py --init" "./.venv.erplibre/bin/python ./script/ide/pycharm_configuration.py --init"
) )
def install_erplibre(self): def install_erplibre(self):
@ -554,7 +536,7 @@ class Update:
source_file_is_symlink = os.path.islink(source_file) source_file_is_symlink = os.path.islink(source_file)
target_file_exist = os.path.exists(target_file) target_file_exist = os.path.exists(target_file)
if not target_file_exist: if not target_file_exist:
_logger.warning(f"'{target_file}' not exist.") _logger.error(f"'{target_file}' not exist.")
do_symlink = False do_symlink = False
# Case 4 # Case 4
if source_file_is_symlink and not source_file_exist: if source_file_is_symlink and not source_file_exist:
@ -581,8 +563,8 @@ class Update:
) )
os.system(f"ls -lha {source_file}") os.system(f"ls -lha {source_file}")
sys.exit(1) sys.exit(1)
else: # else:
do_switch_origin_sim = True # do_switch_origin_sim = True
else: else:
source_file_is_file = os.path.isfile(source_file) source_file_is_file = os.path.isfile(source_file)
if not source_file_is_file: if not source_file_is_file:
@ -592,18 +574,18 @@ class Update:
) )
os.system(f"ls -lha {source_file}") os.system(f"ls -lha {source_file}")
sys.exit(1) sys.exit(1)
else: # else:
do_switch_origin_sim = True # do_switch_origin_sim = True
if do_switch_origin_sim: # if do_switch_origin_sim:
# Check if not erase an existing # # Check if not erase an existing
if target_file_exist: # if target_file_exist:
# Create a backup # # Create a backup
new_target_file = f"{target_file}.backup_{time.strftime('%Yy%mm%dd-%Hh%Mm%Ss')}" # new_target_file = f"{target_file}.backup_{time.strftime('%Yy%mm%dd-%Hh%Mm%Ss')}"
else: # else:
new_target_file = target_file # new_target_file = target_file
# Move it and create a symlink # Move it and create a symlink
shutil.move(source_file, new_target_file) # shutil.move(source_file, new_target_file)
do_symlink = True # do_symlink = True
else: else:
# Case 3 # Case 3
# Is symlink # Is symlink
@ -742,18 +724,20 @@ def main():
update.pycharm_update() update.pycharm_update()
# Update OCB configuration # Update OCB configuration
os.system("./.venv/bin/python ./script/git/git_repo_update_group.py") os.system(
"./.venv.erplibre/bin/python ./script/git/git_repo_update_group.py"
)
os.system("./script/generate_config.sh") os.system("./script/generate_config.sh")
# TODO ignore this if installation fail # TODO ignore this if installation fail
# TODO this cause an error at first execution, need to source ./.venv/bin/activate and rerun # TODO this cause an error at first execution, need to source ./.venv.erplibre/bin/activate and rerun
# subprocess.run(['source', './.venv/bin/activate'], shell=True) # subprocess.run(['source', './.venv.erplibre/bin/activate'], shell=True)
# subprocess.run(['make', 'config_gen_all']) # subprocess.run(['make', 'config_gen_all'])
# status = os.system(f"make config_gen_all") # status = os.system(f"make config_gen_all")
# #
# if not status: # if not status:
# print("Please run:") # print("Please run:")
# print("source ./.venv/bin/activate") # print("source ./.venv.erplibre/bin/activate")
# print("make config_gen_all") # print("make config_gen_all")