[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*
script/OCA*
odoo
odoo*/OCA_OpenUpgrade
odoo*/odoo_documentation-user
image_db
get-poetry.py
artifacts
@ -39,7 +41,10 @@ pyproject.toml
.odoo-version
.poetry-version
.python-version
.python-odoo-version
requirements.txt
requirement/ignore_requirements.txt
screenshots
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
- 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

View file

@ -1,5 +1,5 @@
SHELL := /bin/bash
LOG_FILE := ./.venv/make_test.log
LOG_FILE := ./.venv.$(cat ".erplibre-version" | xargs)/make_test.log
#############
# General #
#############
@ -123,7 +123,7 @@ open_terminal:
##############
.PHONY: open_selenium
open_selenium:
./.venv/bin/python ./script/selenium/web_login.py
./.venv.erplibre/bin/python ./script/selenium/web_login.py
############
# format #
@ -134,42 +134,42 @@ format:
.PHONY: 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/prettier_xml.sh ./addons/TechnoLibre_odoo-code-generator/
.PHONY: 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/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/prettier_xml.sh ./addons/ERPLibre_erplibre_theme_addons/
.PHONY: 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/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/prettier_xml.sh ./addons/MathBenTech_erplibre-family-management/
.PHONY: 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/prettier_xml.sh ./addons/TechnoLibre_odoo-code-generator-template/
.PHONY: 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/
.PHONY: 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 #
@ -210,7 +210,7 @@ repo_configure_group_code_generator:
# Show git status for all repo
.PHONY: 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
.PHONY: repo_diff_manifest_production

View file

@ -1,8 +1,8 @@
# ERPLibre
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
upstream.
the Odoo community version. It is a "soft-fork" of the Odoo Community Edition (OCE), meaning it aims at contributing
back upstream.
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
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
Select a guide to install your environment.
## Easy install on Ubuntu or Debian using Docker
## Easy installation on Ubuntu or Debian using Docker
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>
```sudo apt install docker docker-compose nginx```
```sudo apt install docker docker-compose nginx```
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>
```sudo docker-compose up -d```
```sudo docker-compose up -d```
1. Open the final installation step at this web page :<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)
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.
```http://[server IP]:8069```<BR>
![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. 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)
You can now personalize your ERPLibre installation.
![odoo_application_list.png](doc/image/odoo_application_list.png)
You can now personalize your ERPLibre installation.
For more information, read [Docker guide](./docker/README.md).
## 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:
```bash
@ -81,6 +106,9 @@ Ready to execute:
make run
```
### For Windows
For Windows, read [WINDOWS_INSTALLATION.md](doc/WINDOWS_INSTALLATION.md)
## Discover guide
@ -94,26 +122,6 @@ make run
[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
[Guide to run ERPLibre with different case](./doc/RUN.md).

View file

@ -6,7 +6,7 @@ devops_erplibre need sshpass
## Simplify push tag
For RELEASE.md, replace next value by a script to select all remote by manifest file.
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
- 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
test_addons_code_generator:
./.venv/bin/coverage erase
./.venv.erplibre/bin/coverage erase
./odoo_bin.sh db --drop --database test_addons_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
./.venv/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage
.PHONY: test_addons_code_generator_code_generator
test_addons_code_generator_code_generator:
# 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
./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/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage
.PHONY: test_addons_code_generator_template_code_generator
test_addons_code_generator_template_code_generator:
# 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
./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
./.venv/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage
# generate config repo code_generator

View file

@ -31,7 +31,7 @@ open_doc_all:
# documentation dev
.PHONY: 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
open_doc_dev:
@ -44,7 +44,7 @@ doc_clean_dev:
# documentation migration
.PHONY: 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
open_doc_migration:
@ -57,7 +57,7 @@ doc_clean_migration:
# documentation test
.PHONY: 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
open_doc_test:
@ -71,7 +71,7 @@ doc_clean_test:
.PHONY: doc_user
doc_user:
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
open_doc_user:
@ -84,4 +84,4 @@ doc_clean_user:
# documentation markdown
.PHONY: 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:
./script/database/db_restore.py --clean_cache
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"
./.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/make.sh image_db_create_test_website_attachments
.PHONY: image_db_list_data
image_db_list_data:
./.venv/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
#./.venv.erplibre/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel --odoo_version 12.0
.PHONY: image_db_list
image_db_list:
./.venv/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 --show_list_only
#./.venv.erplibre/bin/python3 ./script/database/image_db.py --generate_bash_cmd_parallel --odoo_version 12.0
.PHONY: 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/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
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
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
.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/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
install_odoo_12:
./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
install_odoo_all_version:
./script/make.sh install_odoo_12
./script/make.sh install_odoo_14
./script/make.sh install_odoo_18
./script/make.sh install_odoo_17
./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
install_odoo_all_version_dev:
echo "Open Pycharm, close it before install Odoo and reopen at the end"
pycharm .
./script/make.sh install_odoo_12
./script/make.sh install_odoo_14
./script/make.sh install_odoo_16
./script/make.sh install_odoo_all_version
#.PHONY: install_update_odoo
#install_update_odoo:

View file

@ -2,7 +2,7 @@
# 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
open_test_coverage:
@ -48,14 +48,14 @@ test_full_fast_coverage:
./script/make.sh clean
# Need to create a BD to create cache _cache_erplibre_base
./script/database/db_restore.py --database test
./.venv/bin/coverage erase
./.venv.erplibre/bin/coverage erase
./script/test/run_parallel_test.py --coverage
# TODO This test is broken in parallel
#./script/make.sh test_coverage_code_generator_hello_world
./.venv/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
# run: make open_test_coverage
@ -64,12 +64,12 @@ test_cg_demo:
./script/make.sh clean
# Need to create a BD to create cache _cache_erplibre_base
./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
./.venv/bin/coverage combine -a
./.venv/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage html --include="addons/TechnoLibre_odoo-code-generator/*"
./.venv.erplibre/bin/coverage json --include="addons/TechnoLibre_odoo-code-generator/*"
.PHONY: test_base
test_base:
@ -102,20 +102,20 @@ test_installation_demo:
###############
.PHONY: test_addons_sale
test_addons_sale:
./.venv/bin/coverage erase
./.venv.erplibre/bin/coverage erase
./odoo_bin.sh db --drop --database test_addons_sale
./test.sh -d test_addons_sale --db-filter test_addons_sale -i sale
./.venv/bin/coverage combine -a
./.venv/bin/coverage report -m
./.venv/bin/coverage html
./.venv/bin/coverage json
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m
./.venv.erplibre/bin/coverage html
./.venv.erplibre/bin/coverage json
.PHONY: test_addons_helpdesk
test_addons_helpdesk:
./.venv/bin/coverage erase
./.venv.erplibre/bin/coverage erase
./odoo_bin.sh db --drop --database test_addons_helpdesk
./test.sh -d test_addons_helpdesk --db-filter test_addons_helpdesk -i helpdesk_mgmt
./.venv/bin/coverage combine -a
./.venv/bin/coverage report -m
./.venv/bin/coverage html
./.venv/bin/coverage json
./.venv.erplibre/bin/coverage combine -a
./.venv.erplibre/bin/coverage report -m
./.venv.erplibre/bin/coverage html
./.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": {
"base": "",
"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": {
"base": "",
"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
node_modules
.venv
.venv.erplibre
odoo
screencasts
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": {
"odoo_version": "12.0",
"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": {
"odoo_version": "14.0",
"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",
"python_version": "3.10.14",
"python_version": "3.10.18",
"poetry_version": "1.8.3",
"default": true,
"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
```bash
source ./.venv/bin/activate
source ./.venv.erplibre/bin/activate
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
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 .
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
rm -r .venv
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
## 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
```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
```bash
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b master
./.venv/repo sync
.venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b master
.venv.erplibre/bin/repo sync -c -j $(nproc --all)
```
## dev
```bash
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml
./.venv/repo sync
.venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml
.venv.erplibre/bin/repo sync -c -j $(nproc --all)
```
## local dev
@ -32,8 +32,8 @@ curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo
```bash
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/repo sync -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.erplibre/bin/repo sync -c -j $(nproc --all) -m ./manifest/default.dev.xml
```
# Create Manifest
@ -48,7 +48,7 @@ It freezes all repo, from dev to prod.
This will add revision git hash in the manifest.
```bash
./.venv/repo manifest -r -o ./default.xml
.venv.erplibre/bin/repo manifest -r -o ./default.xml
```
Commit.
@ -63,21 +63,21 @@ When dev contains specific revision with default revision, you need to replace d
keep specific version:
```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 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/repo sync -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.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
```bash
./.venv/repo manifest -o ./manifest/default.dev.xml
.venv.erplibre/bin/repo manifest -o ./manifest/default.dev.xml
```
Commit.
@ -91,19 +91,19 @@ git commit -am "[#ticket] subject: short sentence"
### Search all repos with a specific branch name
```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
```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
```bash
./.venv/repo forall -pc "git status -s"
.venv.erplibre/bin/repo forall -pc "git status -s"
```
### Clean all
@ -111,7 +111,7 @@ git commit -am "[#ticket] subject: short sentence"
Before cleaning, check changed file in all repos.
```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.

View file

@ -52,7 +52,7 @@ Execute migration with OpenUpgrade.
```bash
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

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.
```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
```
@ -102,7 +102,7 @@ To test it, you need to clean caches and install it:
Generate production manifest and freeze all repos versions.
```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)
@ -129,7 +129,7 @@ Understand differences from last release:
git diff v#.#.#..HEAD
# All repo
./.venv/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
.venv.erplibre/bin/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
```
Simplification tools:
@ -169,7 +169,7 @@ git tag v#.#.#
# Push your tags
git push --tags
# 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
```

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

View file

@ -12,7 +12,7 @@ then
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 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.
kill -9 $GIT_PID
@ -79,12 +79,12 @@ case "$1" in
if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then
sleep 999999
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
# --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
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
;;
@ -93,11 +93,11 @@ case "$1" in
if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then
sleep 999999
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
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
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
;;
*)

View file

@ -5,10 +5,11 @@ ERPLIBRE_VERSION="1.6.0"
EL_USER="erplibre"
EL_HOME="/${EL_USER}"
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_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)
# 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.
@ -26,4 +27,4 @@ EL_INSTALL_NGINX="False"
EL_WEBSITE_NAME="localhost"
EL_GITHUB_TOKEN=""
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
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)"
#export PATH=$ODOO_PATH:$PATH

1
run.sh
View file

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

View file

@ -16,7 +16,7 @@ logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
_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"

View file

@ -26,4 +26,4 @@ echo "Import SQL file"
mysql -u organization -porganization mariadb_sql_example_1 < ${SQL_PATH}
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_VERSION_MAIN=$(cat .erplibre-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)
IS_DEBIAN_BOOKWORM=true

View file

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

View file

@ -4,7 +4,7 @@
EL_USER=${USER}
EL_HOME=$PWD
EL_HOME_ODOO="${EL_HOME}/odoo"
EL_HOME_ODOO="${EL_HOME}/odoo${EL_ODOO_VERSION}/odoo"
#EL_PORT="8069"
#EL_LONGPOLLING_PORT="8072"
#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}"
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}/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-budgeting," >> "${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_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-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_brand," >> "${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_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_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_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_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_e-commerce," >> "${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_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_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_management-system," >> "${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-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-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_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_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_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-hotel," >> "${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}/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}/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}/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}/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}/tegin_medical-fhir," >> "${EL_CONFIG_FILE}"
fi
printf "\n" >> "${EL_CONFIG_FILE}"
@ -140,6 +133,6 @@ fi
# Update and fix the config.conf
# 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
fi

View file

@ -4,6 +4,7 @@
import argparse
import copy
import csv
import logging
import os
import sys
@ -18,6 +19,14 @@ from script.git.git_tool import GitTool
_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():
"""Parse command line arguments, extracting the config file name,
returning the union of config file and command line arguments
@ -32,16 +41,18 @@ def get_config():
""",
)
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(
"--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()
return args
@ -50,36 +61,122 @@ def main():
config = get_config()
git_tool = GitTool()
(
dct_remote_1,
dct_project_1,
default_remote_1,
) = git_tool.get_manifest_xml_info(filename=config.input1, add_root=True)
(
dct_remote_2,
dct_project_2,
default_remote_2,
) = git_tool.get_manifest_xml_info(filename=config.input2, add_root=True)
lst_input = config.input
if not lst_input:
lst_input = []
if config.with_OCA:
append_file_path_manifest(
lst_input, DEFAULT_PATH_MANIFEST_ODOO_CONF
)
if os.path.exists(".odoo-version"):
with open(".odoo-version", "r") as f:
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)
dct_project_3 = copy.deepcopy(dct_project_2)
if os.path.exists(DEFAULT_PATH_INSTALLED_ODOO_VERSION):
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:
dct_project_3[key]["@upstream"] = "12.0"
dct_project_3[key]["@dest-branch"] = "12.0"
append_file_path_manifest(lst_input, DEFAULT_PATH_MANIFEST_CONF)
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(
dct_remote=dct_remote_3,
dct_project=dct_project_3,
dct_remote=dct_remote_total,
dct_project=dct_project_total,
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__":
main()

View file

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

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash
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
git diff ${LAST_TAG}..HEAD

View file

@ -4,7 +4,7 @@ Color_Off='\033[0m' # Text Reset
BOLD='\033[1m' # Black
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 -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": "SDK_HOME",
"@value": "$PROJECT_DIR$/.venv/bin/python",
"@value": "$PROJECT_DIR$/.venv.erplibre/bin/python",
},
{
"@name": "WORKING_DIRECTORY",

View file

@ -49,11 +49,12 @@ sudo systemctl daemon-reload
sudo systemctl enable ${EL_CONFIG}.service
sudo su ${EL_USER} -c "sudo rm -f /tmp/${EL_USER}run.sh"
# TODO this is outdated
cat <<EOF > /tmp/${EL_USER}run.sh
#!/usr/bin/env bash
cd ${EL_HOME_ERPLIBRE}
source ./.venv/bin/activate
python3 ${EL_HOME_ERPLIBRE}/odoo/odoo-bin -c ${EL_HOME_ERPLIBRE}/config.conf --limit-time-real 99999 --limit-time-cpu 99999 $@
source ./.venv.erplibre/bin/activate
python3 ${EL_HOME_ERPLIBRE}/odoo18.0/odoo/odoo-bin -c ${EL_HOME_ERPLIBRE}/config.conf --limit-time-real 99999 --limit-time-cpu 99999 $@
EOF
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
EL_USER=${USER}
EL_HOME=$PWD
EL_HOME_ODOO="${EL_HOME}/odoo"
EL_HOME_ODOO="${EL_HOME}/odoo${EL_ODOO_VERSION}/odoo"
#EL_INSTALL_WKHTMLTOPDF="True"
#EL_PORT="8069"
#EL_LONGPOLLING_PORT="8072"
@ -12,132 +12,68 @@ EL_HOME_ODOO="${EL_HOME}/odoo"
#EL_CONFIG="${EL_USER}"
#EL_MINIMAL_ADDONS="False"
#EL_INSTALL_NGINX="True"
FILE_INSTALLATION_VERSION=".repo/installed_odoo_version.txt"
Red='\033[0;31m' # Red
Color_Off='\033[0m' # Text Reset
./script/generate_config.sh
#echo -e "\n---- Install Odoo with addons module ----"
#git submodule update --init
# Generate empty addons if missing
path_addons_addons="./addons.odoo${EL_ODOO_VERSION}/addons"
if [[ ! -d "${path_addons_addons}" ]]; then
mkdir -p "${path_addons_addons}"
fi
PYENV_PATH=~/.pyenv
# example, 3.7.8 will be 3.7 into PYTHON_VERSION_MAJOR
PYTHON_VERSION_MAJOR=$(echo "$EL_PYTHON_VERSION" | sed 's/\.[^\.]*$//')
PYENV_VERSION_PATH=${PYENV_PATH}/versions/${EL_PYTHON_VERSION}
PYTHON_EXEC=${PYENV_VERSION_PATH}/bin/python
VENV_PATH=./.venv
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
PYTHON_VERSION_MAJOR=$(echo "$EL_PYTHON_ODOO_VERSION" | sed 's/\.[^\.]*$//')
VENV_ERPLIBRE_PATH=$(cat "conf/python-erplibre-venv" | xargs)
VENV_ODOO_PATH=".venv.${EL_ERPLIBRE_VERSION}"
POETRY_ODOO_PATH=${VENV_ERPLIBRE_PATH}/bin/poetry
export WITH_POETRY_INSTALLATION=1
if [[ ! -n "${DOCKER_BUILD}" ]]; then
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} ----"
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
# Install ERPLibre venv
echo -e "Install ${VENV_ERPLIBRE_PATH} with ${EL_PYTHON_ERPLIBRE_VERSION}"
./script/install/install_venv.sh "ERPLibre" "${VENV_ERPLIBRE_PATH}" "${EL_PYTHON_ERPLIBRE_VERSION}"
# Install Odoo venv
echo -e "Install ${VENV_ODOO_PATH} with ${EL_PYTHON_ODOO_VERSION}"
./script/install/install_venv.sh "Odoo" "${VENV_ODOO_PATH}" "${EL_PYTHON_ODOO_VERSION}"
else
mkdir .venv
fi
#if [[ ! -d "${POETRY_PATH}" ]]; then
# # Delete directory ~/.poetry and .venv to force update to new version
# echo -e "\n---- Installing poetry ${LOCAL_PYTHON_EXEC} for reliable python package ----"
# # TODO self update poetry with `poetry self update ${POETRY_VERSION}`
# curl -sSL https://install.python-poetry.org | POETRY_VERSION=${EL_POETRY_VERSION} ${LOCAL_PYTHON_EXEC} - -y
#fi
source ./${VENV_ERPLIBRE_PATH}/bin/activate
echo -e "Upgrade pip to ${VENV_ERPLIBRE_PATH}"
pip install --upgrade pip
pip install -r requirement/erplibre_require-ments.txt
# 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/bin/python"
sed -i "1 i ${PYTHON_HASHBANG}" ${VENV_REPO_PATH}
fi
./script/install/install_git_repo.sh
source ${VENV_ODOO_PATH}/bin/activate
echo -e "Upgrade pip to ${VENV_ODOO_PATH}"
pip install --upgrade pip
# 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 ----"
${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
echo -e "${Red}Error${Color_Off} missing poetry version, please check file .poetry-version"
cat .poetry-version
ls -la
exit 1
fi
# Delete artifacts created by pip, cause error in next "poetry install"
if [[ ! -f "${POETRY_PATH}" ]]; then
${VENV_PATH}/bin/pip install poetry==${EL_POETRY_VERSION}
${VENV_PATH}/bin/poetry --version
if [[ ! -f "${POETRY_ODOO_PATH}" ]]; then
echo -e "Install Poetry ${POETRY_ODOO_PATH}"
pip install poetry==${EL_POETRY_VERSION}
poetry --version
# Fix broken poetry by installing ignored dependence
# ${VENV_PATH}/bin/pip install vatnumber
# ${VENV_PATH}/bin/pip install suds-jurko
# ${VENV_PATH}/bin/poetry lock --no-update
# poetry lock --no-update
# To fix keyring problem when installation is blocked, use
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
if [[ ${WITH_POETRY_INSTALLATION} -ne 0 ]]; then
${VENV_PATH}/bin/poetry install --no-root -vvv
poetry install --no-root -vvv
fi
retVal=$?
if [[ $retVal -ne 0 ]]; then
@ -149,6 +85,18 @@ fi
# Delete artifacts created by pip, cause error in next "poetry install"
rm -rf artifacts
# Link for dev
# Link for dev tools into Odoo
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
## virtualenv is not installed by default
##virtualenv env
#../../.venv/bin/python -m venv env
#../../.venv.erplibre/bin/python -m venv env
#. env/bin/activate
#pip install setuptools-rust
## 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
# argument 1: directory or file to format
NPROC=$(nproc)
source ./script/OCA_maintainer-tools/env/bin/activate
source ./.venv.erplibre/bin/activate
oca-autopep8 -j ${NPROC} --max-line-length 79 -ari $@
retVal=$?
if [[ $retVal -ne 0 ]]; then

View file

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

View file

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

View file

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

View file

@ -14,7 +14,10 @@ else
MANIFEST_TARGET="$EL_MANIFEST_DEV"
fi
./.venv/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}
# Generate local manifest
.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}

View file

@ -15,7 +15,7 @@ else
MANIFEST_TARGET="$EL_MANIFEST_DEV"
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/repo sync -v -m ${MANIFEST_TARGET}
.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.erplibre/bin/repo sync -c -j $(nproc --all) -v -m ${MANIFEST_TARGET}
kill ${DAEMON_PID}

View file

@ -15,7 +15,7 @@ else
MANIFEST_TARGET="$EL_MANIFEST_DEV"
fi
./.venv/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 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}

View file

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

View file

@ -2,7 +2,7 @@
Red='\033[0;31m' # Red
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 export -f ./.venv/build_dependency.txt --dev | poetry run -- pip install -r /dev/stdin
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
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

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash
# 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:
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"

View file

@ -18,7 +18,7 @@
"function": [
{
"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": [

View file

@ -6,7 +6,7 @@ input=".python-version"
while IFS= read -r line
do
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" ./script/install/install_OSX_dependency.sh
sed -i -e "s/$line/$1/g" ./pyproject.toml

View file

@ -2,7 +2,7 @@
# © 2021-2024 TechnoLibre (http://www.technolibre.ca)
# 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 json
import logging
@ -18,11 +18,11 @@ _logger = logging.getLogger(__name__)
PROJECT_NAME = os.path.basename(os.getcwd())
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_ODOO_FILE = os.path.join(".odoo-version")
VERSION_POETRY_FILE = os.path.join(".poetry-version")
VENV_FILE = os.path.join(".venv")
ADDONS_PATH = os.path.join("addons")
ODOO_PATH = os.path.join(".", "odoo")
VENV_TEMPLATE_FILE = ".venv.%s"
@ -110,7 +110,7 @@ def get_config():
parser.add_argument(
"--force_install",
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(
"--force_repo",
@ -157,7 +157,6 @@ class Update:
self.expected_pyproject_path = None
self.expected_poetry_lock_name = None
self.expected_poetry_lock_path = None
self.do_backup_venv = False
def check_version_data(self):
die(
@ -184,10 +183,13 @@ class Update:
self.python_version = txt.read().strip()
with open(VERSION_ODOO_FILE) as txt:
self.odoo_version = txt.read().strip()
with open(VERSION_POETRY_FILE) as txt:
poetry_version = txt.read().strip()
# Show actual version
_logger.info(f"Python version: {self.python_version}")
_logger.info(f"Odoo version: {self.odoo_version}")
_logger.info(f"Poetry version: {poetry_version}")
erplibre_version_to_search = ERPLIBRE_TEMPLATE_VERSION % (
self.odoo_version,
self.python_version,
@ -212,6 +214,13 @@ class Update:
)
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
def validate_version(self):
@ -323,7 +332,9 @@ class Update:
ADDONS_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(
".", "requirement", self.expected_pip_requirement_name
)
@ -339,16 +350,7 @@ class Update:
def validate_environment(self):
status = True
# Validate .venv
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)
venv_exist = os.path.exists(self.expected_venv_name)
if not venv_exist and not self.config.install_dev:
_logger.info("Relaunch this script with --install_dev argument.")
# Validate Odoo repo
@ -405,24 +407,21 @@ class Update:
def update_environment(self):
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:
# TODO add script to check difference before erase all
os.system("./script/git/clean_repo_manifest.sh")
self.execute_log.append(
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
_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:
txt.write(self.new_version_python)
with open(VERSION_ERPLIBRE_FILE, "w") as txt:
@ -433,28 +432,21 @@ class Update:
txt.write(self.new_version_poetry)
if self.config.is_in_installation or self.config.is_in_switch:
addons_path_with_version = (
ADDONS_TEMPLATE_FILE % self.new_version_odoo
)
# To support multiple addons directory, change name before run git repo
for addons_path in os.listdir("."):
if (
addons_path.startswith("addons")
and addons_path != addons_path_with_version
):
os.rename(addons_path, addons_path + "TEMP")
# addons_path_with_version = (
# ADDONS_TEMPLATE_FILE % self.new_version_odoo
# )
# # To support multiple addons directory, change name before run git repo
# for addons_path in os.listdir("."):
# if (
# addons_path.startswith("addons")
# and addons_path != addons_path_with_version
# ):
# os.rename(addons_path, addons_path + "TEMP")
# TODO need to be force if installation path is all good, return True
if self.config.install_dev:
_logger.info("Installation.")
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:
_logger.info("Switch")
self.execute_log.append(f"System update")
@ -463,13 +455,13 @@ class Update:
)
# To support multiple addons directory, remove TEMP
for addons_path in os.listdir("."):
if (
addons_path.startswith("addons")
and addons_path != addons_path_with_version
and addons_path.endswith("TEMP")
):
os.rename(addons_path, addons_path[:-4])
# for addons_path in os.listdir("."):
# if (
# addons_path.startswith("addons")
# and addons_path != addons_path_with_version
# and addons_path.endswith("TEMP")
# ):
# os.rename(addons_path, addons_path[:-4])
for addons_path in os.listdir("."):
if addons_path.startswith("addons"):
# In same time, force to create addons if not existing
@ -478,29 +470,19 @@ class Update:
os.makedirs(addons_dir_path)
# Force create addons link
if os.path.isdir(ADDONS_PATH):
if os.path.islink(ADDONS_PATH):
os.remove(ADDONS_PATH)
else:
os.rename(
ADDONS_PATH,
ADDONS_PATH
+ "_"
+ time.strftime("%Yy%mm%dd-%Hh%Mm%Ss"),
)
os.symlink(addons_path_with_version, ADDONS_PATH)
# if os.path.isdir(ADDONS_PATH):
# if os.path.islink(ADDONS_PATH):
# os.remove(ADDONS_PATH)
# else:
# os.rename(
# ADDONS_PATH,
# ADDONS_PATH
# + "_"
# + time.strftime("%Yy%mm%dd-%Hh%Mm%Ss"),
# )
# os.symlink(addons_path_with_version, ADDONS_PATH)
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):
if not self.execute_log:
_logger.info("Nothing to do")
@ -514,7 +496,7 @@ class Update:
if not pycharm_is_installed or not self.execute_log:
return
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):
@ -554,7 +536,7 @@ class Update:
source_file_is_symlink = os.path.islink(source_file)
target_file_exist = os.path.exists(target_file)
if not target_file_exist:
_logger.warning(f"'{target_file}' not exist.")
_logger.error(f"'{target_file}' not exist.")
do_symlink = False
# Case 4
if source_file_is_symlink and not source_file_exist:
@ -581,8 +563,8 @@ class Update:
)
os.system(f"ls -lha {source_file}")
sys.exit(1)
else:
do_switch_origin_sim = True
# else:
# do_switch_origin_sim = True
else:
source_file_is_file = os.path.isfile(source_file)
if not source_file_is_file:
@ -592,18 +574,18 @@ class Update:
)
os.system(f"ls -lha {source_file}")
sys.exit(1)
else:
do_switch_origin_sim = True
if do_switch_origin_sim:
# Check if not erase an existing
if target_file_exist:
# Create a backup
new_target_file = f"{target_file}.backup_{time.strftime('%Yy%mm%dd-%Hh%Mm%Ss')}"
else:
new_target_file = target_file
# else:
# do_switch_origin_sim = True
# if do_switch_origin_sim:
# # Check if not erase an existing
# if target_file_exist:
# # Create a backup
# new_target_file = f"{target_file}.backup_{time.strftime('%Yy%mm%dd-%Hh%Mm%Ss')}"
# else:
# new_target_file = target_file
# Move it and create a symlink
shutil.move(source_file, new_target_file)
do_symlink = True
# shutil.move(source_file, new_target_file)
# do_symlink = True
else:
# Case 3
# Is symlink
@ -742,18 +724,20 @@ def main():
update.pycharm_update()
# 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")
# TODO ignore this if installation fail
# TODO this cause an error at first execution, need to source ./.venv/bin/activate and rerun
# subprocess.run(['source', './.venv/bin/activate'], shell=True)
# TODO this cause an error at first execution, need to source ./.venv.erplibre/bin/activate and rerun
# subprocess.run(['source', './.venv.erplibre/bin/activate'], shell=True)
# subprocess.run(['make', 'config_gen_all'])
# status = os.system(f"make config_gen_all")
#
# if not status:
# print("Please run:")
# print("source ./.venv/bin/activate")
# print("source ./.venv.erplibre/bin/activate")
# print("make config_gen_all")