[IMP] support change odoo and python version

- Makefile show version, switch version and install different version
- erplibre_version with odoo_version, poetry_version and python_version
- support multiple docker version
- support odoo 12, odoo 14, odoo 16
- bullseye, bookworm debian
- update latest version
- script update_env_version to detect actual version and refactor it
- adapt file path to support multiple version
- poetry with verbose by default, ignore python keyring
- python script to generate image db with parallel for all odoo version
- check_addons_exist before generate all image
- support delay to change queue parallel
- fix odoo 12 product configurator
- can show demo website
- swith odoo
- force create addons if missing
- update manifest, because gen config break with wrong manifest
This commit is contained in:
Mathieu Benoit 2024-08-25 15:54:24 -04:00
parent 4989c1edbf
commit d91c3c2e95
62 changed files with 25704 additions and 1695 deletions

17
.gitignore vendored
View file

@ -3,7 +3,7 @@
*.tmp
*.bak
.idea
.venv
.venv*
*.log
config.conf
*.DS_Store
@ -12,9 +12,12 @@ config.conf
coverage*
.repo
addons
!addons/
addons/*
addons*/*
!script/addons
addons.*
doc/itpp*
doc/odoo*
script/OCA*
@ -26,3 +29,15 @@ wkhtmltox*
cache
node_modules
docker-compose.override.yml
# Generated by ERPLibre
manifest/default.dev.xml
poetry.lock
pyproject.toml
.erplibre-semver-version
.erplibre-version
.odoo-version
.poetry-version
.python-version
requirements.txt
requirement/ignore_requirements.txt

View file

@ -1 +0,0 @@
3.7.16

352
Makefile
View file

@ -67,6 +67,13 @@ run_parallel_cg_template:
run_parallel_cg_migrator:
parallel < ./conf/list_cg_migrator_test.txt
############
# VERSION #
############
.PHONY: version
version:
./script/version/update_env_version.py
#############
# INSTALL #
#############
@ -75,12 +82,64 @@ install:install_os install_dev
.PHONY: install_dev
install_dev:
./script/install/install_locally_dev.sh
# ./script/version/update_env_version.py
# ./script/install/install_locally_dev.sh
./script/version/update_env_version.py --install_dev
.PHONY: install_odoo_16
install_odoo_16:
./script/version/update_env_version.py --erplibre_version odoo16.0_python3.10.14 --install_dev
.PHONY: switch_odoo_16
switch_odoo_16:
./script/version/update_env_version.py --erplibre_version odoo16.0_python3.10.14 --switch
./script/make.sh config_gen_all
.PHONY: install_odoo_14
install_odoo_14:
./script/version/update_env_version.py --erplibre_version odoo14.0_python3.8.20 --install_dev
.PHONY: switch_odoo_14
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_12
install_odoo_12:
./script/version/update_env_version.py --erplibre_version odoo12.0_python3.7.17 --install_dev
.PHONY: switch_odoo_12
switch_odoo_12:
./script/version/update_env_version.py --erplibre_version odoo12.0_python3.7.17 --switch
./script/make.sh config_gen_all
.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_16
.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
#.PHONY: install_update_odoo
#install_update_odoo:
# ./script/version/update_env_version.py --install_dev --update_addons
.PHONY: install_show_version
install_show_version:
./script/version/update_env_version.py -l
# Install this for the first time of dev environment
.PHONY: install_os
install_os:
./script/install/install_dev.sh
#./script/install/install_dev.sh
./script/version/update_env_version.py --install
.PHONY: install_production
install_production:
@ -95,6 +154,13 @@ install_docker_debian:
install_docker_ubuntu:
./script/install/install_ubuntu_docker.sh
###################
# Environnement #
###################
.PHONY: pyenv_update
pyenv_update:
~/.pyenv/bin/pyenv update
#####################
# DB installation #
#####################
@ -161,14 +227,6 @@ db_restore_prod_client:
db_restore_erplibre_base_db_test_image_test:
./script/database/db_restore.py --database test --image test
.PHONY: db_restore_erplibre_base_db_test2
db_restore_erplibre_base_db_test2:
./script/database/db_restore.py --database test2
.PHONY: db_restore_erplibre_base_db_test3
db_restore_erplibre_base_db_test3:
./script/database/db_restore.py --database test3
.PHONY: db_restore_erplibre_website_db_test
db_restore_erplibre_website_db_test:
./script/database/db_restore.py --database test --image erplibre_website
@ -217,52 +275,6 @@ db_test_re_export_website_attachments:
########################
# Image installation #
########################
.PHONY: image_db_create_erplibre_base
image_db_create_erplibre_base:
.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_base
.venv/bin/python3 ./odoo/odoo-bin db --create --database image_creation_erplibre_base
./script/addons/install_addons_from_file.sh image_creation_erplibre_base ./conf/module_list_image_erplibre_base.txt
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_base --restore_image erplibre_base
.PHONY: image_db_create_erplibre_website
image_db_create_erplibre_website:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_website
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_website
./script/addons/install_addons.sh image_creation_erplibre_website website,erplibre_website_snippets_basic_html,erplibre_website_snippets_cards,erplibre_website_snippets_structures,erplibre_website_snippets_timelines,website_form_builder,muk_website_branding,website_snippet_anchor,website_anchor_smooth_scroll,website_snippet_all
./script/addons/install_addons_theme.sh image_creation_erplibre_website theme_default
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_website
./script/addons/install_addons.sh image_creation_erplibre_website crm,website_crm,crm_team_quebec
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_website_crm
./script/addons/install_addons.sh image_creation_erplibre_website website_livechat
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_website_chat_crm
./script/addons/install_addons.sh image_creation_erplibre_website website_sale,erplibre_base_quebec,website_snippet_product_category,website_snippet_carousel_product
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_ecommerce_base
./script/addons/install_addons.sh image_creation_erplibre_website stock,purchase,website_sale_management
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_ecommerce_advance
./script/addons/install_addons.sh image_creation_erplibre_website project
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_ecommerce_project
./script/addons/install_addons.sh image_creation_erplibre_website pos_sale,muk_pos_branding
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_ecommerce_pos
./script/addons/install_addons.sh image_creation_erplibre_website hr
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_website --restore_image erplibre_ecommerce_pos_hr
.PHONY: image_db_create_erplibre_demo
image_db_create_erplibre_demo:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_demo
./.venv/bin/python3 ./odoo/odoo-bin db --create --database image_creation_demo --demo
./script/addons/install_addons_from_file.sh image_creation_demo ./conf/module_list_image_erplibre_base.txt
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_demo --restore_image erplibre_demo_base
./script/addons/install_addons.sh image_creation_demo website,erplibre_website_snippets_basic_html,erplibre_website_snippets_cards,erplibre_website_snippets_structures,erplibre_website_snippets_timelines,website_form_builder,muk_website_branding,website_snippet_anchor,website_anchor_smooth_scroll,website_snippet_all,crm,website_crm,crm_team_quebec,website_livechat,website_sale,erplibre_base_quebec,website_snippet_product_category,website_snippet_carousel_product,stock,purchase,website_sale_management,project,pos_sale,muk_pos_branding,hr
./script/addons/install_addons_theme.sh image_creation_demo theme_default
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_demo --restore_image erplibre_demo_full
.PHONY: image_db_create_erplibre_code_generator
image_db_create_erplibre_code_generator:
@ -273,175 +285,25 @@ image_db_create_erplibre_code_generator:
./script/make.sh addons_install_code_generator_full
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database code_generator --restore_image erplibre_code_generator_full
.PHONY: image_db_create_erplibre_package_accounting
image_db_create_erplibre_package_accounting:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_accounting
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_accounting
./script/addons/install_addons.sh image_creation_erplibre_package_accounting erplibre_base_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_accounting account_fiscal_year_closing,account_export_csv,account_financial_report,account_tax_balance,mis_builder_cash_flow,partner_statement,account_bank_statement_import_camt_oca,account_bank_statement_import_move_line,account_bank_statement_import_ofx,account_bank_statement_import_online,account_bank_statement_import_online_paypal,account_bank_statement_import_online_transferwise,account_bank_statement_import_paypal,account_bank_statement_import_split,account_bank_statement_import_txt_xlsx,accounting_pdf_reports,om_account_accountant,om_account_asset,om_account_budget
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_accounting --restore_image erplibre_package_accounting
.PHONY: image_db_create_erplibre_package_business_requirements
image_db_create_erplibre_package_business_requirements:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_business_requirements
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_business_requirements
./script/addons/install_addons.sh image_creation_erplibre_package_business_requirements crm_team_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_business_requirements business_requirement,business_requirement_crm,business_requirement_deliverable,business_requirement_sale,business_requirement_sale_timesheet
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_business_requirements --restore_image erplibre_package_business_requirements
.PHONY: image_db_create_erplibre_package_contract
image_db_create_erplibre_package_contract:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_contract
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_contract
./script/addons/install_addons.sh image_creation_erplibre_package_contract agreement,agreement_account,agreement_legal,agreement_legal_sale,agreement_project,agreement_sale,agreement_serviceprofile,agreement_stock,contract,contract_forecast,contract_invoice_start_end_dates,contract_layout_category_hide_detail,contract_mandate,contract_payment_mode,contract_sale,contract_sale_invoicing,contract_sale_mandate,contract_sale_payment_mode,contract_transmit_method,contract_variable_qty_prorated,contract_variable_qty_timesheet,contract_variable_quantity,product_contract,product_contract_variable_quantity
# ./script/addons/install_addons.sh image_creation agreement_legal_sale_fieldservice,agreement_maintenance,agreement_mrp,agreement_repair
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_contract --restore_image erplibre_package_contract
.PHONY: image_db_create_erplibre_package_crm
image_db_create_erplibre_package_crm:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_crm
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_crm
./script/addons/install_addons.sh image_creation_erplibre_package_crm erplibre_base_quebec,crm_team_quebec,crm,crm_livechat,crm_phone_validation,crm_project,crm_reveal
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_crm --restore_image erplibre_package_crm
.PHONY: image_db_create_erplibre_package_e_commerce
image_db_create_erplibre_package_e_commerce:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_e_commerce
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_e_commerce
./script/addons/install_addons.sh image_creation_erplibre_package_e_commerce erplibre_base_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_e_commerce website_sale,website_sale_comparison,website_sale_delivery,website_sale_digital,website_sale_link_tracker,website_sale_management,website_sale_stock,website_sale_wishlist,website_sale_attribute_filter_category,website_sale_attribute_filter_order,website_sale_attribute_filter_price,website_sale_cart_selectable,website_sale_category_description,website_sale_checkout_skip_payment,website_sale_exception,website_sale_hide_empty_category,website_sale_hide_price,website_sale_product_attachment,website_sale_product_attribute_filter_visibility,website_sale_product_attribute_value_filter_existing,website_sale_product_detail_attribute_image,website_sale_product_detail_attribute_value_image,website_sale_product_minimal_price,website_sale_product_reference_displayed,website_sale_product_sort,website_sale_product_style_badge,website_sale_require_legal,website_sale_require_login,website_sale_secondary_unit,website_sale_show_company_data,website_sale_stock_available,website_sale_stock_available_display,website_sale_stock_force_block,website_sale_suggest_create_account,website_sale_wishlist_keep,website_snippet_carousel_product,website_snippet_product_category,product_rating_review,product_configurator,product_configurator_mrp,product_configurator_purchase,product_configurator_sale,product_configurator_stock,website_product_configurator
./script/addons/install_addons_theme.sh image_creation_erplibre_package_e_commerce theme_default
# ./script/addons/install_addons.sh image_creation website_sale_product_brand,website_sale_tax_toggle,website_sale_vat_required,product_configurator_sale_mrp,product_configurator_stock_lots,product_configurator_subconfig,website_product_configurator_mrp
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_e_commerce --restore_image erplibre_package_e_commerce
.PHONY: image_db_create_erplibre_package_field_service
image_db_create_erplibre_package_field_service:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_field_service
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_field_service
./script/addons/install_addons.sh image_creation_erplibre_package_field_service erplibre_base_quebec,crm_team_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_field_service fieldservice,fieldservice_account,fieldservice_account_analytic,fieldservice_account_payment,fieldservice_activity,fieldservice_agreement,fieldservice_change_management,fieldservice_crm,fieldservice_delivery,fieldservice_distribution,fieldservice_fleet,fieldservice_geoengine,fieldservice_isp_account,fieldservice_isp_flow,fieldservice_location_builder,fieldservice_maintenance,fieldservice_partner_multi_relation,fieldservice_project,fieldservice_purchase,fieldservice_recurring,fieldservice_repair,fieldservice_route,fieldservice_route_account,fieldservice_route_stock,fieldservice_route_vehicle,fieldservice_sale,fieldservice_sale_recurring,fieldservice_sale_stock,fieldservice_size,fieldservice_skill,fieldservice_stage_server_action,fieldservice_stage_validation,fieldservice_stock,fieldservice_stock_account,fieldservice_stock_account_analytic,fieldservice_substatus,fieldservice_vehicle,fieldservice_vehicle_stock
# ./script/addons/install_addons.sh image_creation fieldservice_google_map,fieldservice_google_marker_icon_picker
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_field_service --restore_image erplibre_package_field_service
.PHONY: image_db_create_erplibre_package_helpdesk
image_db_create_erplibre_package_helpdesk:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_helpdesk
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_helpdesk
./script/addons/install_addons.sh image_creation_erplibre_package_helpdesk helpdesk_mgmt,helpdesk_mgmt_project,helpdesk_motive,helpdesk_type,helpdesk_mgmt_timesheet,helpdesk_mgmt_timesheet_time_control,helpdesk_mgmt_partner_sequence,helpdesk_mgmt_sla
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_helpdesk --restore_image erplibre_package_helpdesk
.PHONY: image_db_create_erplibre_package_hr
image_db_create_erplibre_package_hr:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_hr
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_hr
./script/addons/install_addons.sh image_creation_erplibre_package_hr erplibre_base_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_hr hr,hr_expense_associate_with_customer,hr_expense_tip,res_partner_fix_group_by_company,hr_attendance,hr_contract,hr_expense,hr_expense_check,hr_gamification,hr_holidays,hr_maintenance,hr_org_chart,hr_payroll,hr_payroll_account,hr_recruitment,hr_recruitment_survey,hr_timesheet,hr_timesheet_attendance,hr_attendance_autoclose,hr_attendance_geolocation,hr_attendance_modification_tracking,hr_attendance_reason,hr_attendance_report_theoretical_time,hr_attendance_rfid,hr_calendar_rest_time,hr_contract_currency,hr_contract_document,hr_contract_multi_job,hr_contract_rate,hr_course,hr_employee_age,hr_employee_birth_name,hr_employee_calendar_planning,hr_employee_display_own_info,hr_employee_document,hr_employee_emergency_contact,hr_employee_firstname,hr_employee_health,hr_employee_id,hr_employee_language,hr_employee_medical_examination,hr_employee_partner_external,hr_employee_phone_extension,hr_employee_relative,hr_employee_service,hr_employee_service_contract,hr_employee_social_media,hr_employee_ssn,hr_expense_advance_clearing,hr_expense_cancel,hr_expense_invoice,hr_expense_payment_difference,hr_expense_petty_cash,hr_expense_sequence,hr_expense_tier_validation,hr_experience,hr_holidays_accrual_advanced,hr_holidays_credit,hr_holidays_hour,hr_holidays_leave_auto_approve,hr_holidays_leave_repeated,hr_holidays_leave_request_wizard,hr_holidays_length_validation,hr_holidays_notify_employee_manager,hr_holidays_public,hr_holidays_settings,hr_holidays_validity_date,hr_job_category,hr_payroll_cancel,hr_payslip_change_state,hr_period,hr_skill,hr_worked_days_from_timesheet,resource_hook,hr_contract_single_open,hr_contract_wage_type,hr_employee_private_wizard,hr_employee_type,hr_employee_type_private_wizard,hr_event,hr_expense_same_month,hr_working_space,muk_hr_utils
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_hr --restore_image erplibre_package_hr
.PHONY: image_db_create_erplibre_package_project
image_db_create_erplibre_package_project:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_project
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_project
./script/addons/install_addons.sh image_creation_erplibre_package_project erplibre_base_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_project project,project_chatter,project_default_task_stage,project_form_with_dates,project_hide_create_sale_order,project_iteration,project_iteration_parent_only,project_iteration_parent_type_required,project_portal_hide_timesheets,project_portal_parent_task,project_remaining_hours_update,project_stage,project_stage_allow_timesheet,project_stage_no_quick_create,project_task_date_planned,project_task_deadline_from_project,project_task_full_text_search,project_task_id_in_display_name,project_task_link,project_task_reference,project_task_resource_type,project_task_search_parent_subtask,project_task_stage_external_mail,project_task_subtask_same_project,project_task_type,project_template,project_template_numigi,project_template_timesheet,project_type,project_time_budget,project_time_range
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_project --restore_image erplibre_package_project
.PHONY: image_db_create_erplibre_package_purchase
image_db_create_erplibre_package_purchase:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_purchase
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_purchase
./script/addons/install_addons.sh image_creation_erplibre_package_purchase erplibre_base_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_purchase purchase,purchase_mrp,purchase_requisition,purchase_stock,product_supplier_info_helpers,purchase_consignment,purchase_consignment_delivery_expense,purchase_consignment_inventory,purchase_consignment_inventory_line_domain,purchase_estimated_time_arrival,purchase_invoice_empty_lines,purchase_invoice_from_picking,purchase_partner_products,purchase_warning_minimum_amount
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_purchase --restore_image erplibre_package_purchase
.PHONY: image_db_create_erplibre_package_sale
image_db_create_erplibre_package_sale:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_sale
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_sale
./script/addons/install_addons.sh image_creation_erplibre_package_sale erplibre_base_quebec,crm_team_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_sale sale,sale_crm,sale_expense,sale_management,sale_margin,sale_mrp,sale_purchase,sale_quotation_builder,sale_stock,sale_timesheet,sales_team,product_create_group,product_dimension,product_dimension_numigi,product_extra_views,product_extra_views_purchase,product_extra_views_sale,product_extra_views_stock,product_kit,product_panel_shortcut,product_reference,product_reference_list_view,product_variant_button_complete_form,sale_order_line_limit,sale_degroup_tax,payment,payment_transfer,purchase,stock
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_sale --restore_image erplibre_package_sale
.PHONY: image_db_create_erplibre_package_scrummer
image_db_create_erplibre_package_scrummer:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_scrummer
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_scrummer
./script/addons/install_addons.sh image_creation_erplibre_package_scrummer erplibre_base_quebec
./script/addons/install_addons.sh image_creation_erplibre_package_scrummer scrummer,scrummer_git,scrummer_kanban,scrummer_scrum,scrummer_timesheet_category,scrummer_workflow_security,scrummer_workflow_transition_by_project,scrummer_workflow_transitions_by_task_type,web_diagram_position,web_syncer,web_widget_image_url,project_agile_sale_timesheet,project_agile_analytic,project_agile_scrum,project_git_github,project_git_gitlab,project_portal
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_scrummer --restore_image erplibre_package_scrummer
.PHONY: image_db_create_erplibre_package_stock
image_db_create_erplibre_package_stock:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_stock
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_stock
./script/addons/install_addons.sh image_creation_erplibre_package_stock stock,stock_account,stock_dropshipping,stock_landed_costs,stock_picking_batch,purchase_warehouse_access,stock_component,stock_component_account,stock_inventory_accounting_date_editable,stock_inventory_category_domain,stock_inventory_internal_location,stock_inventory_line_domain,stock_location_position_alphanum,stock_picking_change_destination,stock_serial_single_quant,stock_theorical_quantity_access,stock_turnover_rate,stock_warehouse_access,stock_warehouse_distance
# ./script/addons/install_addons.sh image_creation_erplibre_package_stock stock_zebra,stock_inventory_line_domain_barcode
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_stock --restore_image erplibre_package_stock
.PHONY: image_db_create_erplibre_package_timesheet
image_db_create_erplibre_package_timesheet:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_timesheet
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_timesheet
./script/addons/install_addons.sh image_creation_erplibre_package_timesheet payroll_code_on_task_type,payroll_period,payroll_preparation,payroll_preparation_export_wizard,payroll_preparation_from_timesheet,project_timesheet_time_control_enhanced,timesheet_edit_only_today,timesheet_list_description_after_task,timesheet_list_employee,timesheet_multi_line_wizard,timesheet_multi_line_wizard_security,timesheet_payroll_period,timesheet_validation_status
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_timesheet --restore_image erplibre_package_timesheet
.PHONY: image_db_create_erplibre_package_website
image_db_create_erplibre_package_website:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_website
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_website
./script/addons/install_addons.sh image_creation_erplibre_package_website portal,website,website_blog,website_crm,website_crm_partner_assign,website_crm_phone_validation,website_customer,website_event,website_event_questions,website_event_sale,website_event_track,website_form,website_form_project,website_forum,website_google_map,website_hr,website_hr_recruitment,website_links,website_livechat,website_mail,website_mail_channel,website_mass_mailing,website_membership,website_partner,website_payment,website_rating,website_slides,website_survey,website_theme_install,website_twitter,website_adv_image_optimization,website_anchor_smooth_scroll,website_blog_excerpt_img,website_breadcrumb,website_canonical_url,website_cookie_notice,website_crm_privacy_policy,website_crm_quick_answer,website_crm_recaptcha,website_form_builder,website_form_recaptcha,website_google_tag_manager,website_img_dimension,website_js_below_the_fold,website_lazy_load_image,website_legal_page,website_logo,website_media_size,website_megamenu,website_odoo_debranding,website_portal_address,website_portal_contact,website_snippet_anchor,website_snippet_big_button,website_snippet_country_dropdown,website_snippet_marginless_gallery,smile_website_login_as,website_snippet_all
./script/addons/install_addons_theme.sh image_creation_erplibre_package_website theme_default
# ./script/addons/install_addons.sh image_creation_erplibre_package_website website_no_crawler
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_website --restore_image erplibre_package_website
.PHONY: image_db_create_erplibre_package_wiki
image_db_create_erplibre_package_wiki:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_wiki
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_wiki
./script/addons/install_addons.sh image_creation_erplibre_package_wiki document_page,document_page_approval,document_page_group,document_page_project,document_page_reference,document_page_tag,document_url,knowledge,attachment_preview,document_page_procedure,document_page_quality_manual,document_page_work_instruction,mgmtsystem,mgmtsystem_action,mgmtsystem_audit,mgmtsystem_hazard,mgmtsystem_manual,mgmtsystem_nonconformity,mgmtsystem_nonconformity_hr,mgmtsystem_nonconformity_product,mgmtsystem_nonconformity_project,mgmtsystem_quality,mgmtsystem_review,mgmtsystem_survey
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_wiki --restore_image erplibre_package_wiki
.PHONY: image_db_create_erplibre_package_dms
image_db_create_erplibre_package_dms:
./.venv/bin/python3 ./odoo/odoo-bin db --drop --database image_creation_erplibre_package_dms
./.venv/bin/python3 ./odoo/odoo-bin db --clone --from_database image_creation_erplibre_base --database image_creation_erplibre_package_dms
./script/addons/install_addons.sh image_creation_erplibre_package_dms muk_dms,muk_dms_access,muk_dms_view,muk_web_preview,muk_web_preview_audio,muk_web_preview_csv,muk_web_preview_image,muk_web_preview_markdown,muk_web_preview_msoffice,muk_web_preview_opendocument,muk_web_preview_rst,muk_web_preview_text,muk_web_preview_video
./.venv/bin/python3 ./odoo/odoo-bin db --backup --database image_creation_erplibre_package_dms --restore_image erplibre_package_dms
.PHONY: image_db_create_all
image_db_create_all:
# TODO remove modules from addons/addons
#./script/make.sh config_gen_image_db
./script/database/db_restore.py --clean_cache
./script/make.sh image_db_create_erplibre_base
./script/make.sh image_db_create_erplibre_website
./script/make.sh image_db_create_erplibre_code_generator
./script/make.sh image_db_create_erplibre_demo
./script/make.sh image_db_create_erplibre_package_accounting
./script/make.sh image_db_create_erplibre_package_business_requirements
./script/make.sh image_db_create_erplibre_package_contract
./script/make.sh image_db_create_erplibre_package_crm
./script/make.sh image_db_create_erplibre_package_e_commerce
./script/make.sh image_db_create_erplibre_package_field_service
./script/make.sh image_db_create_erplibre_package_helpdesk
./script/make.sh image_db_create_erplibre_package_hr
./script/make.sh image_db_create_erplibre_package_project
./script/make.sh image_db_create_erplibre_package_purchase
./script/make.sh image_db_create_erplibre_package_sale
./script/make.sh image_db_create_erplibre_package_scrummer
./script/make.sh image_db_create_erplibre_package_stock
./script/make.sh image_db_create_erplibre_package_timesheet
./script/make.sh image_db_create_erplibre_package_website
./script/make.sh image_db_create_erplibre_package_wiki
./script/make.sh image_db_create_erplibre_package_dms
./script/make.sh image_db_create_test_website_attachments
#./script/make.sh config_gen_all
.PHONY: image_db_create_all_parallel
image_db_create_all_parallel:
./script/database/db_restore.py --clean_cache
./script/make.sh image_db_create_erplibre_base
parallel < ./conf/image_db_create.txt
echo "Search in-existing module"
./.venv/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
./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
.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
.PHONY: image_db_create_test_website_attachments
image_db_create_test_website_attachments:
@ -452,8 +314,8 @@ image_db_create_test_website_attachments:
.PHONY: image_diff_base_website
image_diff_base_website:
#./script/manifest/compare_backup.py --backup_file_1 ./image_db/erplibre_base.zip --backup_file_2 ./image_db/erplibre_website.zip
./script/manifest/compare_backup.py --backup_1 erplibre_base --backup_2 erplibre_website
#./script/database/compare_backup.py --backup_file_1 ./image_db/erplibre_base.zip --backup_file_2 ./image_db/erplibre_website.zip
./script/database/compare_backup.py --backup_1 odoo12.0_base --backup_2 odoo12.0_website
#########################
# Addons installation #
@ -918,6 +780,13 @@ format_script_isort_only:
log_show_test:
vim ${LOG_FILE}
##########
# poetry #
##########
.PHONY: poetry_update
poetry_update:
./script/poetry/poetry_update.py
###########
# clean #
###########
@ -979,9 +848,17 @@ docker_exec_erplibre_repo_show_status:
./script/docker/docker_repo_show_status.sh
# build docker
.PHONY: docker_build
docker_build:
./script/docker/docker_build.sh
.PHONY: docker_build_odoo_16
docker_build_odoo_16:
./script/docker/docker_build.sh --odoo_16
.PHONY: docker_build_odoo_14
docker_build_odoo_14:
./script/docker/docker_build.sh --odoo_14
.PHONY: docker_build_odoo_12
docker_build_odoo_12:
./script/docker/docker_build.sh --odoo_12
# build docker release
.PHONY: docker_build_release
@ -1059,9 +936,30 @@ repo_use_all_https:
config_install:
./script/generate_config.sh
.PHONY: config_update
config_update:
./run.sh -c config.conf -s --stop-after-init
.PHONY: config_update_over_proxy
config_update_over_proxy:
./run.sh -c config.conf -s --stop-after-init --max-cron-threads 2 --workers 2 --xmlrpc-interface 127.0.0.1 --proxy-mode
.PHONY: config_update_dev
config_update_dev:
./run.sh -c config.conf -s --stop-after-init --max-cron-threads 4 --workers 4
.PHONY: config_update_dev_mono
config_update_dev_mono:
./run.sh -c config.conf -s --stop-after-init --workers 0
.PHONY: config_clear
config_clear:
rm -f ./config.conf
# generate config all repo
.PHONY: config_gen_all
config_gen_all:
echo "config_gen_all"
./script/git/git_repo_update_group.py
./script/generate_config.sh

View file

@ -18,7 +18,7 @@ Into Ubuntu, minimal dependency:
sudo apt install make git curl
```
Into Ubuntu, developper dependency:
Into Ubuntu, developer dependency:
```bash
sudo apt install make build-essential libssl-dev zlib1g-dev libreadline-dev libsqlite3-dev curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev libbz2-dev libldap2-dev libsasl2-dev
@ -31,10 +31,10 @@ git clone https://github.com/ERPLibre/ERPLibre.git
cd ERPLibre
```
Support Ubuntu 18.04, 20.04 and OSX. The installation duration is more than 30 minutes.
Support Ubuntu 20.04, 22.04, 24.04 and OSX. The installation duration is more than 30 minutes.
```bash
make install
make install_odoo_16
```
Update your configuration if you need to run from another interface than 127.0.0.1, file `config.conf`
@ -43,6 +43,12 @@ Update your configuration if you need to run from another interface than 127.0.0
xmlrpc_interface = 0.0.0.0
```
Show version :
```bash
make version
```
Ready to execute:
```bash

View file

@ -1,21 +0,0 @@
./script/make.sh image_db_create_erplibre_package_contract
./script/make.sh image_db_create_erplibre_package_crm
./script/make.sh image_db_create_erplibre_package_e_commerce
./script/make.sh image_db_create_erplibre_package_field_service
./script/make.sh image_db_create_erplibre_package_helpdesk
./script/make.sh image_db_create_erplibre_package_hr
./script/make.sh image_db_create_erplibre_package_project
./script/make.sh image_db_create_erplibre_package_purchase
./script/make.sh image_db_create_erplibre_package_sale
./script/make.sh image_db_create_erplibre_package_scrummer
./script/make.sh image_db_create_erplibre_package_stock
./script/make.sh image_db_create_erplibre_package_timesheet
./script/make.sh image_db_create_erplibre_package_website
./script/make.sh image_db_create_erplibre_package_wiki
./script/make.sh image_db_create_erplibre_package_dms
./script/make.sh image_db_create_erplibre_package_accounting
./script/make.sh image_db_create_erplibre_package_business_requirements
./script/make.sh image_db_create_erplibre_website
./script/make.sh image_db_create_test_website_attachments
./script/make.sh image_db_create_erplibre_code_generator
./script/make.sh image_db_create_erplibre_demo

View file

@ -0,0 +1,603 @@
{
"odoo12.0_base": {
"base": "",
"disable": false,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"erplibre_info",
"fetchmail_notify_error_to_sender",
"fetchmail_thread_default",
"mail_debrand",
"mail_history",
"muk_branding",
"muk_mail_branding",
"muk_utils",
"muk_web_branding",
"muk_web_theme",
"muk_web_theme_mail",
"muk_web_utils",
"partner_no_vat",
"partner_quebec_tz",
"remove_odoo_enterprise",
"web_diagram_position",
"web_responsive",
"web_timeline"
]
}
]
},
"odoo12.0_website": {
"base": "odoo12.0_base",
"disable": false,
"image_list": [
{
"module": [
"erplibre_website_snippets_basic_html",
"erplibre_website_snippets_cards",
"erplibre_website_snippets_structures",
"erplibre_website_snippets_timelines",
"muk_website_branding",
"website",
"website_anchor_smooth_scroll",
"website_form_builder",
"website_odoo_debranding",
"website_snippet_all",
"website_snippet_anchor"
],
"theme": "theme_default"
}
]
},
"odoo12.0_website_crm": {
"base": "odoo12.0_website",
"disable": false,
"image_list": [
{
"module": [
"crm",
"crm_team_quebec",
"website_crm"
]
},
{
"pkg_name": "chat",
"module": [
"website_livechat"
]
}
]
},
"odoo12.0_website_ecommerce": {
"base": "odoo12.0_website",
"disable": false,
"delay": 1,
"image_list": [
{
"module": [
"configure_quebec_tax",
"l10n_ca",
"website_sale"
]
}
]
},
"odoo12.0_base_demo": {
"base": "",
"disable": false,
"with_demo": true,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"erplibre_info",
"fetchmail_notify_error_to_sender",
"fetchmail_thread_default",
"mail_debrand",
"mail_history",
"muk_branding",
"muk_mail_branding",
"muk_utils",
"muk_web_branding",
"muk_web_theme",
"muk_web_theme_mail",
"muk_web_utils",
"partner_no_vat",
"partner_quebec_tz",
"remove_odoo_enterprise",
"web_diagram_position",
"web_responsive",
"web_timeline"
]
}
]
},
"odoo12.0_base_demo_adv": {
"base": "odoo12.0_base_demo",
"disable": false,
"with_demo": true,
"image_list": [
{
"pkg_name": "website_ecommerce",
"theme": "theme_default",
"module": [
"configure_quebec_tax",
"crm",
"crm_team_quebec",
"l10n_ca",
"purchase",
"stock",
"website_crm",
"website_livechat",
"website_sale",
"website_sale_management",
"website_snippet_carousel_product",
"website_snippet_product_category"
]
},
{
"pkg_name": "full",
"module": [
"account_financial_report",
"account_fiscal_year_closing",
"account_tax_balance",
"accounting_pdf_reports",
"agreement",
"agreement_legal",
"business_requirement",
"document_page",
"fieldservice",
"fleet",
"geoengine_partner",
"helpdesk_mgmt",
"hr_attendance",
"hr_timesheet",
"maintenance",
"mgmtsystem",
"mis_builder_cash_flow",
"mrp",
"muk_dms",
"muk_dms_access",
"muk_dms_view",
"muk_pos_branding",
"muk_web_preview",
"muk_web_preview_audio",
"muk_web_preview_csv",
"muk_web_preview_image",
"muk_web_preview_markdown",
"muk_web_preview_msoffice",
"muk_web_preview_opendocument",
"muk_web_preview_rst",
"muk_web_preview_text",
"muk_web_preview_video",
"note",
"om_account_accountant",
"om_account_asset",
"om_account_budget",
"partner_statement",
"payment",
"payment_transfer",
"plm",
"portal",
"pos_sale",
"product_configurator",
"product_extra_views",
"product_extra_views_purchase",
"product_extra_views_sale",
"product_extra_views_stock",
"product_supplier_info_helpers",
"product_variant_button_complete_form",
"project",
"purchase_estimated_time_arrival",
"purchase_mrp",
"purchase_requisition",
"purchase_stock",
"repair",
"rma",
"sale",
"sale_crm",
"sale_expense",
"sale_management",
"sale_margin",
"sale_mrp",
"sale_purchase",
"sale_quotation_builder",
"sale_stock",
"sale_timesheet",
"sales_team",
"survey",
"website_blog",
"website_crm_privacy_policy",
"website_event",
"website_event_questions",
"website_event_sale",
"website_event_track",
"website_form",
"website_form_project",
"website_forum",
"website_hr_recruitment",
"website_legal_page",
"website_links",
"website_livechat",
"website_mail",
"website_mail_channel",
"website_mass_mailing",
"website_membership",
"website_odoo_debranding",
"website_partner",
"website_payment",
"website_product_configurator",
"website_slides",
"website_snippet_country_dropdown",
"wms"
]
}
]
},
"odoo14.0_base": {
"base": "",
"disable": false,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"fetchmail_notify_error_to_sender",
"mail_debrand",
"partner_no_vat",
"remove_odoo_enterprise",
"smile_many2many_tags_clickable",
"web_responsive",
"web_timeline"
]
}
]
},
"odoo14.0_website": {
"base": "odoo14.0_base",
"disable": false,
"image_list": [
{
"module": [
"website",
"website_odoo_debranding"
],
"theme": "theme_default"
}
]
},
"odoo14.0_website_crm": {
"base": "odoo14.0_website",
"disable": false,
"image_list": [
{
"module": [
"crm",
"website_crm"
]
},
{
"pkg_name": "chat",
"module": [
"website_livechat"
]
}
]
},
"odoo14.0_website_ecommerce": {
"base": "odoo14.0_website",
"disable": false,
"delay": 1,
"image_list": [
{
"module": [
"l10n_ca",
"website_sale"
]
}
]
},
"odoo14.0_base_demo": {
"base": "",
"disable": false,
"with_demo": true,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"fetchmail_notify_error_to_sender",
"mail_debrand",
"partner_no_vat",
"remove_odoo_enterprise",
"smile_many2many_tags_clickable",
"web_responsive",
"web_timeline"
]
}
]
},
"odoo14.0_base_demo_adv": {
"base": "odoo14.0_base_demo",
"disable": false,
"with_demo": true,
"image_list": [
{
"pkg_name": "website_ecommerce",
"theme": "theme_default",
"module": [
"crm",
"l10n_ca",
"purchase",
"stock",
"website_crm",
"website_livechat",
"website_sale",
"website_sale_management"
]
},
{
"pkg_name": "full",
"module": [
"account_financial_report",
"account_fiscal_year_closing",
"account_tax_balance",
"accounting_pdf_reports",
"agreement_legal",
"document_page",
"fieldservice",
"helpdesk_mgmt",
"hr_attendance",
"hr_holidays",
"hr_payroll_community",
"hr_timesheet",
"hr_skills",
"fleet",
"maintenance",
"mis_builder_cash_flow",
"mgmtsystem",
"mrp",
"note",
"om_account_accountant",
"om_account_asset",
"om_account_budget",
"partner_statement",
"payment",
"payment_transfer",
"plm",
"portal",
"pos_sale",
"product_extra_views",
"product_extra_views_purchase",
"product_extra_views_sale",
"product_extra_views_stock",
"product_supplier_info_helpers",
"product_variant_button_complete_form",
"project",
"purchase_estimated_time_arrival",
"purchase_mrp",
"purchase_requisition",
"purchase_stock",
"rma",
"sale",
"sale_crm",
"sale_expense",
"sale_management",
"sale_margin",
"sale_mrp",
"sale_purchase",
"sale_quotation_builder",
"sale_stock",
"sale_timesheet",
"sales_team",
"survey",
"repair",
"web_pwa_oca",
"website_blog",
"website_crm_privacy_policy",
"website_event",
"website_event_questions",
"website_event_sale",
"website_event_track",
"website_form",
"website_form_project",
"website_forum",
"website_google_tag_manager",
"website_hr_recruitment",
"website_legal_page",
"website_links",
"website_livechat",
"website_mail",
"website_mail_channel",
"website_mass_mailing",
"website_membership",
"website_odoo_debranding",
"website_partner",
"website_payment",
"website_slides",
"website_snippet_country_dropdown"
]
}
]
},
"odoo16.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"
]
}
]
},
"odoo16.0_website": {
"base": "odoo16.0_base",
"disable": false,
"image_list": [
{
"module": [
"website",
"website_odoo_debranding"
]
}
]
},
"odoo16.0_website_crm": {
"base": "odoo16.0_website",
"disable": false,
"image_list": [
{
"module": [
"crm",
"website_crm"
]
},
{
"pkg_name": "chat",
"module": [
"website_livechat"
]
}
]
},
"odoo16.0_website_ecommerce": {
"base": "odoo16.0_website",
"disable": false,
"delay": 1,
"image_list": [
{
"module": [
"l10n_ca",
"website_sale"
]
}
]
},
"odoo16.0_base_demo": {
"base": "",
"disable": false,
"with_demo": true,
"image_list": [
{
"module": [
"auth_user_case_insensitive",
"auto_backup",
"disable_odoo_online",
"mail_debrand",
"remove_odoo_enterprise",
"web_responsive",
"web_timeline"
]
}
]
},
"odoo16.0_base_demo_adv_broke": {
"base": "odoo16.0_base_demo",
"disable": true,
"with_demo": true,
"image_list": [
{
"module": [
"project_mrp",
"mrp",
"purchase_mrp",
"hr_payroll_community",
"sale_mrp"
]
}
]
},
"odoo16.0_base_demo_adv": {
"base": "odoo16.0_base_demo",
"disable": false,
"with_demo": true,
"image_list": [
{
"pkg_name": "full",
"module": [
"crm",
"l10n_ca",
"purchase",
"stock",
"website_crm",
"website_sale",
"account_financial_report",
"account_tax_balance",
"accounting_pdf_reports",
"document_page",
"fieldservice",
"helpdesk_mgmt",
"hr_attendance",
"hr_holidays",
"hr_timesheet",
"hr_skills",
"fleet",
"maintenance",
"mis_builder_cash_flow",
"mgmtsystem",
"note",
"om_account_accountant",
"om_account_asset",
"om_account_budget",
"partner_statement",
"payment",
"plm",
"portal",
"pos_sale",
"project",
"purchase_requisition",
"purchase_stock",
"rma",
"sale",
"sale_crm",
"sale_expense",
"sale_management",
"sale_margin",
"sale_purchase",
"sale_quotation_builder",
"sale_stock",
"sale_timesheet",
"sales_team",
"survey",
"repair",
"web_pwa_oca",
"website_blog",
"website_crm_privacy_policy",
"website_event",
"website_event_questions",
"website_event_sale",
"website_event_track",
"website_form_project",
"website_forum",
"website_google_tag_manager",
"website_hr_recruitment",
"website_legal_page",
"website_links",
"website_livechat",
"website_mail",
"website_mass_mailing",
"website_membership",
"website_odoo_debranding",
"website_partner",
"website_payment",
"website_slides",
"website_snippet_country_dropdown"
]
}
]
}
}

View file

@ -1 +0,0 @@
web_responsive,disable_odoo_online,remove_odoo_enterprise,auth_user_case_insensitive,muk_web_theme,muk_utils,muk_branding,muk_mail_branding,muk_web_branding,muk_web_theme_mail,muk_web_utils,fetchmail_notify_error_to_sender,mail_debrand,partner_quebec_tz,erplibre_info,web_timeline,web_diagram_position,auto_backup,partner_no_vat,fetchmail_thread_default,mail_history

View file

@ -1,4 +1,3 @@
.venv
.repo
script/OCA_maintainer-tools
script/OCA_odoo-module-migrator

View file

@ -0,0 +1,19 @@
{
"odoo12.0_python3.7.17": {
"odoo_version": "12.0",
"python_version": "3.7.17",
"poetry_version": "1.5.0",
"default": true,
"note": "Official support ERPLibre 1.5.0"
},
"odoo14.0_python3.8.20": {
"odoo_version": "14.0",
"python_version": "3.8.20",
"poetry_version": "1.5.0"
},
"odoo16.0_python3.10.14": {
"odoo_version": "16.0",
"python_version": "3.10.14",
"poetry_version": "1.8.3"
}
}

View file

@ -53,7 +53,7 @@ make doc_markdown
To generate a docker, run:
```bash
make docker_build
make docker_build_odoo_16
```
### Rename old version to new version

View file

@ -29,6 +29,7 @@ RUN apt-get update \
python3-watchdog \
python3-xlrd \
python3-xlwt \
cython \
xz-utils \
git \
iproute2 \

View file

@ -1,5 +1,9 @@
FROM python:3.7.17-slim-bullseye
MAINTAINER TechnoLibre <docker@technolibre.ca>
# syntax=docker/dockerfile:1
ARG PYTHON_VERSION=3.10.14
ARG DEBIAN_NAME=bookworm
FROM python:${PYTHON_VERSION}-slim-${DEBIAN_NAME}
#MAINTAINER TechnoLibre <docker@technolibre.ca>
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
@ -15,6 +19,9 @@ ENV LANG="C.UTF-8" \
ENV ODOO_PREFIX /ERPLibre
ENV ODOO_EXEC_BIN $ODOO_PREFIX/odoo/odoo-bin
ARG URL_WKHTMLTOX=github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb
ARG SHA1SUM_WKTHMLTOX=e9f95436298c77cc9406bd4bbd242f4771d0a4b2
# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
@ -65,14 +72,17 @@ RUN apt-get update \
libncursesw5-dev \
libffi-dev \
uuid-dev \
portaudio19-dev \
swig \
&& curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb \
&& echo 'd9f259a67e05e1c221d48b504453645e6c491fab wkhtmltox.deb' | sha1sum -c - \
&& curl -o wkhtmltox.deb -sSL https://${URL_WKHTMLTOX}/ \
&& echo "${SHA1SUM_WKTHMLTOX} wkhtmltox.deb" | sha1sum -c - \
&& apt-get install -y --no-install-recommends ./wkhtmltox.deb \
&& rm -rf /var/lib/apt/lists/* wkhtmltox.deb
ARG DEBIAN_NAME=bookworm
# Install latest postgresql-client
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ ${DEBIAN_NAME}-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& GNUPGHOME="$(mktemp -d)" \
&& export GNUPGHOME \
&& repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
@ -88,19 +98,6 @@ RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > /etc/
RUN npm install -g rtlcss less prettier @prettier/plugin-xml \
&& ln -fs /usr/local/bin/lessc /usr/bin/lessc
# Install python with pyenv
# Reference https://github.com/bopen/docker-ubuntu-pyenv
#COPY pyenv-version.txt python-versions.txt /
#RUN git clone -b `cat /pyenv-version.txt` --single-branch --depth 1 https://github.com/pyenv/pyenv.git $PYENV_ROOT \
# && for version in `cat /python-versions.txt`; do pyenv install $version; done \
# && pyenv global `cat /python-versions.txt` \
# && find $PYENV_ROOT/versions -type d '(' -name '__pycache__' -o -name 'test' -o -name 'tests' ')' -exec rm -rf '{}' + \
# && find $PYENV_ROOT/versions -type f '(' -name '*.pyo' -o -name '*.exe' ')' -exec rm -f '{}' + \
# && rm -rf /tmp/* \
# && python --version \
# && python3 --version
# Install git-repo
RUN cd ; mkdir -p .bin/ && \
git config --global color.ui false && \

View file

@ -1,37 +0,0 @@
FROM technolibre/erplibre-base:12.0
USER root
RUN apt update && \
apt install -y -y --no-install-recommends \
build-essential \
wget \
python3-dev \
python3-venv \
python3-wheel \
libxslt-dev \
libzip-dev \
libldap2-dev \
libsasl2-dev \
python3-setuptools \
libpng16-16 \
gdebi \
&& rm -rf /var/lib/apt/lists/* \
&& npm install -g rtlcss
# RUN pip3 install -r https://raw.githubusercontent.com/odoo/odoo/12.0/requirements.txt --ignore-installed psycopg2 && pip3a cache purge
ENV ADDONS_BASE_DIR /ERPLibre
ENV ENV=dev
# Copy entrypoint script and Odoo configuration file
COPY ./entrypoint.sh /
RUN chmod +x /entrypoint.sh
COPY repo_manifest_gen_org_prefix_path.py /usr/bin/
RUN chmod +x /usr/bin/repo_manifest_gen_org_prefix_path.py
USER odoo
ENTRYPOINT ["/entrypoint.sh"]
CMD ["odoo"]

View file

@ -1,10 +1,17 @@
FROM technolibre/erplibre-base:1.5.0
ARG ERPLIBRE_IMAGE_NAME=1.5.0
FROM technolibre/erplibre-base:${ERPLIBRE_IMAGE_NAME}
ARG ERPLIBRE_VERSION=odoo16.0_python3.10.14
ARG ODOO_VERSION=16.0
ARG POETRY_VERSION=1.8.3
ENV REPO_MANIFEST_URL https://github.com/ERPLibre/ERPLibre
ARG WORKING_BRANCH
ARG WORKING_HASH
ENV BRANCH_ERPLIBRE $WORKING_BRANCH
ENV COMMIT_ERPLIBRE $WORKING_HASH
ENV COMMIT_ERPLIBRE $WORKING_HASH
ENV DOCKER_BUILD=true
RUN cat /etc/os-release
@ -27,27 +34,48 @@ RUN cd ; mkdir -p .bin/ && \
git checkout $COMMIT_ERPLIBRE
RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \
python -m venv .venv
RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \
curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo && \
chmod +x ./.venv/repo
RUN cd $ODOO_PREFIX && \
./script/manifest/update_manifest_dev.sh
ls -lha /ERPLibre && \
echo "${ERPLIBRE_VERSION}" && \
./script/version/update_env_version.py --erplibre_version "${ERPLIBRE_VERSION}"
RUN cd $ODOO_PREFIX && ls ./manifest -la && \
ls -lha /ERPLibre && \
./script/manifest/update_manifest_local_dev.sh
RUN apt update && \
apt install -y libgirepository1.0-dev && \
rm -rf /var/lib/apt/lists/*
# Install Poetry
RUN cd $ODOO_PREFIX && \
./.venv/bin/pip install --upgrade pip && \
./.venv/bin/pip install poetry==1.3.1 && \
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
# Install local npm
RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \
npm install
# Create link to addons
RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \
ln -s "addons.odoo${ODOO_VERSION}" addons
RUN cd $ODOO_PREFIX && \
ls -lha /ERPLibre && \
head /etc/odoo/odoo.conf && \
./docker/repo_manifest_gen_org_prefix_path.py $ODOO_PREFIX/addons /etc/odoo/odoo.conf /etc/odoo/odoo.conf && \
head /etc/odoo/odoo.conf

View file

@ -1,41 +0,0 @@
FROM technolibre/erplibre-base:12.0
# TODO
# ENV REPO_MANIFEST_URL https://github.com/agileops/ERPLibre.git
# RUN cat /etc/os-release
# USER root
# # Install Odoo
# ENV ODOO_VERSION 12.0
# ARG ODOO_RELEASE=20200417
# ARG ODOO_SHA=ca4a7485b0b75850ffe1458a8f3266839400a501
# RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \
# && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \
# && apt-get update \
# && apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install --no-install-recommends ./odoo.deb \
# && rm -rf /var/lib/apt/lists/* odoo.deb
# RUN mkdir ~/.ssh/ && echo "StrictHostKeyChecking no" >> ~/.ssh/config && apt update && apt install ssh-client git -y --no-install-recommends && \
# rm -rf /var/lib/apt/lists/*
# RUN cd ; mkdir -p .bin/ && \
# git config --global color.ui false && \
# git config --global user.email "foo@bar.io" && \
# git config --global user.name "Foo Bar" && \
# mkdir -p $ODOO_PREFIX && cd $ODOO_PREFIX && \
# repo init -u $REPO_MANIFEST_URL -b 12.0_repo && \
# repo sync -j 4 -c
# ADD repo_manifest_gen_org_prefix_path.py /root/.bin/
# RUN chmod +x ~/.bin/repo_manifest_gen_org_prefix_path.py
# RUN head /etc/odoo/odoo.conf && /root/.bin/repo_manifest_gen_org_prefix_path.py $ODOO_PREFIX/addons /etc/odoo/odoo.conf /etc/odoo/odoo.conf && head /etc/odoo/odoo.conf
# user odoo
# ENTRYPOINT ["/entrypoint.sh"]
# CMD ["odoo"]

View file

@ -2,7 +2,7 @@
Those images are prepared to permit better portability and reproducibility of ERPLibre release.
Due the the growing code of ERPLibre, it could also simplify development.
Due the growing code of ERPLibre, it could also simplify development.
NOTE: Those Dockerfiles themselves are in heavy development for now. Incompatibilities between releases are normal until the interface is stabilized.
@ -114,7 +114,7 @@ And restart docker service. You can delete or move all older locations of docker
# Update docker
When building your docker with script
> make docker_build
> make docker_build_odoo_16
List your docker version
> docker images

View file

@ -79,7 +79,7 @@ case "$1" in
if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then
sleep 999999
fi
./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30
/ERPLibre/.venv/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}"
@ -93,7 +93,7 @@ case "$1" in
if [[ "${STOP_BEFORE_INIT}" == "True" ]] ; then
sleep 999999
fi
./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30
/ERPLibre/.venv/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}"
else

View file

@ -1,32 +0,0 @@
FROM technolibre/erplibre-base:12.0
ENV REPO_MANIFEST_URL https://github.com/agileops/ERPLibre.git
RUN cat /etc/os-release
ENV ADDONS_BASE_DIR /odoo
USER root
RUN mkdir ~/.ssh/ && echo "StrictHostKeyChecking no" >> ~/.ssh/config && apt update && apt install ssh-client git -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
RUN cd ; mkdir -p .bin/ && \
git config --global color.ui false && \
git config --global user.email "foo@bar.io" && \
git config --global user.name "Foo Bar" && \
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo && \
chmod +x ~/.bin/repo && sed -i '1 s/python$/python3/' ~/.bin/repo && head ~/.bin/repo && \
export PATH="${HOME}/.bin:${PATH}" && \
mkdir -p $ADDONS_BASE_DIR && cd $ADDONS_BASE_DIR && \
repo init -u $REPO_MANIFEST_URL -b 12.0_repo && \
repo sync -j 4 -c
ADD repo_manifest_gen_org_prefix_path.py /root/.bin/ RUN chmod +x
~/.bin/repo_manifest_gen_org_prefix_path.py
RUN head /etc/odoo/odoo.conf && /root/.bin/repo_manifest_gen_org_prefix_path.py $ADDONS_BASE_DIR/addons /etc/odoo/odoo.conf /etc/odoo/odoo.conf && head /etc/odoo/odoo.conf
user odoo
ENTRYPOINT ["/entrypoint.sh"]
CMD ["odoo"]

View file

@ -1 +0,0 @@
v1.2.20

View file

@ -1 +0,0 @@
3.7.16

View file

@ -6,6 +6,10 @@ EL_USER="erplibre"
EL_HOME="/${EL_USER}"
EL_HOME_ERPLIBRE="${EL_HOME}/erplibre"
EL_HOME_ODOO="${EL_HOME_ERPLIBRE}/odoo"
EL_ODOO_VERSION=$(cat ".odoo-version" | xargs)
EL_POETRY_VERSION=$(cat ".poetry-version" | xargs)
EL_PYTHON_VERSION=$(cat ".python-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.
EL_INSTALL_WKHTMLTOPDF="True"

View file

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="CybroOdoo" fetch="https://github.com/ERPLibre/"/>
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="MathBenTech" fetch="https://github.com/ERPLibre/"/>
<remote name="Numigi" fetch="https://github.com/ERPLibre/"/>
<remote name="OCA" fetch="https://github.com/ERPLibre/"/>
<remote name="OmniaGit" fetch="https://github.com/ERPLibre/"/>
<remote name="Smile-SA" fetch="https://github.com/ERPLibre/"/>
<remote name="TechnoLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="ajepe" fetch="https://github.com/ERPLibre/"/>
<remote name="camptocamp" fetch="https://github.com/ERPLibre/"/>
<remote name="dhongu" fetch="https://github.com/ERPLibre/"/>
<remote name="it-projects-llc" fetch="https://github.com/ERPLibre/"/>
<remote name="itpp-labs" fetch="https://github.com/ERPLibre/"/>
<remote name="JayVora-SerpentCS" fetch="https://github.com/ERPLibre/"/>
<remote name="kinjal-sorathiya" fetch="https://github.com/ERPLibre/"/>
<remote name="muk-it" fetch="https://github.com/ERPLibre/"/>
<remote name="novacode-nl" fetch="https://github.com/ERPLibre/"/>
<remote name="obayit" fetch="https://github.com/ERPLibre/"/>
<remote name="odoo" fetch="https://github.com/ERPLibre/"/>
<remote name="odooaktiv" fetch="https://github.com/ERPLibre/"/>
<remote name="odoomates" fetch="https://github.com/ERPLibre/"/>
<remote name="openeducat" fetch="https://github.com/ERPLibre/"/>
<remote name="pledra" fetch="https://github.com/ERPLibre/"/>
<remote name="tegin" fetch="https://github.com/ERPLibre/"/>
<default remote="ERPLibre" revision="12.0" sync-j="4" sync-c="true"/>
<project name="ERPLibre_image_db.git" path="image_db" remote="ERPLibre" clone-depth="1" revision="main" groups="base"/>
<project name="OpenHRMS.git" path="addons.odoo12.0/CybroOdoo_OpenHRMS" remote="CybroOdoo" revision="dev_12.0" groups="addons"/>
<project name="Property-Management_odoo.git" path="addons.odoo12.0/kinjal-sorathiya_Property-Management_odoo" remote="kinjal-sorathiya" revision="master" groups="addons"/>
<project name="QuotationRevision.git" path="addons.odoo12.0/MathBenTech_QuotationRevision" remote="MathBenTech" groups="addons"/>
<project name="access-addons.git" path="addons.odoo12.0/itpp-labs_access-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
<project name="account-analytic.git" path="addons.odoo12.0/OCA_account-analytic" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="account-budgeting.git" path="addons.odoo12.0/OCA_account-budgeting" remote="OCA" groups="addons"/>
<project name="account-closing.git" path="addons.odoo12.0/OCA_account-closing" remote="OCA" groups="addons"/>
<project name="account-consolidation.git" path="addons.odoo12.0/OCA_account-consolidation" remote="OCA" groups="addons"/>
<project name="account-financial-reporting.git" path="addons.odoo12.0/OCA_account-financial-reporting" remote="OCA" groups="addons"/>
<project name="account-financial-tools.git" path="addons.odoo12.0/OCA_account-financial-tools" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="account-fiscal-rule.git" path="addons.odoo12.0/OCA_account-fiscal-rule" remote="OCA" groups="addons"/>
<project name="account-invoice-reporting.git" path="addons.odoo12.0/OCA_account-invoice-reporting" remote="OCA" groups="addons"/>
<project name="account-invoicing.git" path="addons.odoo12.0/OCA_account-invoicing" remote="OCA" groups="addons"/>
<project name="account-payment.git" path="addons.odoo12.0/OCA_account-payment" remote="OCA" groups="addons"/>
<project name="account-reconcile.git" path="addons.odoo12.0/OCA_account-reconcile" remote="OCA" groups="addons"/>
<project name="apps-store.git" path="addons.odoo12.0/OCA_apps-store" remote="OCA" groups="addons"/>
<project name="bank-payment.git" path="addons.odoo12.0/OCA_bank-payment" remote="OCA" groups="addons"/>
<project name="bank-statement-import.git" path="addons.odoo12.0/OCA_bank-statement-import" remote="OCA" groups="addons"/>
<project name="brand.git" path="addons.odoo12.0/OCA_brand" remote="OCA" groups="addons"/>
<project name="business-requirement.git" path="addons.odoo12.0/OCA_business-requirement" remote="OCA" groups="addons"/>
<project name="commission.git" path="addons.odoo12.0/OCA_commission" remote="OCA" groups="addons"/>
<project name="community-data-files.git" path="addons.odoo12.0/OCA_community-data-files" remote="OCA" groups="addons"/>
<project name="connector-ecommerce.git" path="addons.odoo12.0/OCA_connector-ecommerce" remote="OCA" groups="addons"/>
<project name="connector-interfaces.git" path="addons.odoo12.0/OCA_connector-interfaces" remote="OCA" groups="addons"/>
<project name="connector-jira.git" path="addons.odoo12.0/OCA_connector-jira" remote="OCA" groups="addons"/>
<project name="connector-telephony.git" path="addons.odoo12.0/OCA_connector-telephony" remote="OCA" groups="addons"/>
<project name="connector.git" path="addons.odoo12.0/OCA_connector" remote="OCA" groups="addons"/>
<project name="contract.git" path="addons.odoo12.0/OCA_contract" remote="OCA" groups="addons,code_generator,image_db"/>
<project name="credit-control.git" path="addons.odoo12.0/OCA_credit-control" remote="OCA" groups="addons"/>
<project name="crm.git" path="addons.odoo12.0/OCA_crm" remote="OCA" groups="addons"/>
<project name="currency.git" path="addons.odoo12.0/OCA_currency" remote="OCA" groups="addons"/>
<project name="data-protection.git" path="addons.odoo12.0/OCA_data-protection" remote="OCA" groups="addons"/>
<project name="ddmrp.git" path="addons.odoo12.0/OCA_ddmrp" remote="OCA" groups="addons"/>
<project name="delivery-carrier.git" path="addons.odoo12.0/OCA_delivery-carrier" remote="OCA" groups="addons"/>
<project name="deltatech.git" path="addons.odoo12.0/dhongu_deltatech" remote="dhongu" groups="addons"/>
<project name="design-themes.git" path="addons.odoo12.0/odoo_design-themes" remote="odoo" groups="addons,code_generator,image_db"/>
<project name="development.git" path="addons.odoo12.0/MathBenTech_development" remote="MathBenTech" groups="addons,base"/>
<project name="documentation-user.git" path="doc/odoo_documentation-user" remote="odoo" groups="odoo"/>
<project name="donation.git" path="addons.odoo12.0/OCA_donation" remote="OCA" revision="12.0_module_donation_website" groups="addons"/>
<project name="e-commerce.git" path="addons.odoo12.0/OCA_e-commerce" remote="OCA" groups="addons"/>
<project name="edi.git" path="addons.odoo12.0/OCA_edi" remote="OCA" groups="addons"/>
<project name="erplibre-3D-printing-addons.git" path="addons.odoo12.0/ERPLibre_erplibre-3D-printing-addons" remote="ERPLibre" groups="addons"/>
<project name="erplibre-family-management.git" path="addons.odoo12.0/MathBenTech_erplibre-family-management" remote="MathBenTech" groups="addons,code_generator"/>
<project name="erplibre_addons.git" path="addons.odoo12.0/ERPLibre_erplibre_addons" remote="ERPLibre" revision="12.0_erplibre_devops" groups="addons,base"/>
<project name="erplibre_theme_addons.git" path="addons.odoo12.0/ERPLibre_erplibre_theme_addons" remote="ERPLibre" groups="addons,code_generator,image_db"/>
<project name="event.git" path="addons.odoo12.0/OCA_event" remote="OCA" groups="addons"/>
<project name="field-service.git" path="addons.odoo12.0/OCA_field-service" remote="OCA" groups="addons"/>
<project name="fleet.git" path="addons.odoo12.0/OCA_fleet" remote="OCA" groups="addons"/>
<project name="geospatial.git" path="addons.odoo12.0/OCA_geospatial" remote="OCA" groups="addons,code_generator,image_db"/>
<project name="helpdesk.git" path="addons.odoo12.0/OCA_helpdesk" remote="OCA" revision="12.0_dev" groups="addons,code_generator,image_db"/>
<project name="hr.git" path="addons.odoo12.0/OCA_hr" remote="OCA" groups="addons"/>
<project name="interface-github.git" path="addons.odoo12.0/OCA_interface-github" remote="OCA" groups="addons"/>
<project name="knowledge.git" path="addons.odoo12.0/OCA_knowledge" remote="OCA" groups="addons"/>
<project name="l10n-canada.git" path="addons.odoo12.0/OCA_l10n-canada" remote="OCA" groups="addons"/>
<project name="maintainer-tools.git" path="script/OCA_maintainer-tools" remote="OCA" revision="master" groups="odoo,code_generator"/>
<project name="maintenance.git" path="addons.odoo12.0/OCA_maintenance" remote="OCA" groups="addons"/>
<project name="management-system.git" path="addons.odoo12.0/OCA_management-system" remote="OCA" groups="addons"/>
<project name="manufacture.git" path="addons.odoo12.0/OCA_manufacture" remote="OCA" groups="addons"/>
<project name="margin-analysis.git" path="addons.odoo12.0/OCA_margin-analysis" remote="OCA" revision="12.0_sale_margin_editor" groups="addons"/>
<project name="medical-fhir.git" path="addons.odoo12.0/tegin_medical-fhir" remote="tegin" groups="addons"/>
<project name="mis-builder.git" path="addons.odoo12.0/OCA_mis-builder" remote="OCA" groups="addons"/>
<project name="muk_base.git" path="addons.odoo12.0/muk-it_muk_base" remote="muk-it" revision="12.0_dev" groups="addons,base"/>
<project name="muk_dms.git" path="addons.odoo12.0/muk-it_muk_dms" remote="muk-it" groups="addons"/>
<project name="muk_docs.git" path="addons.odoo12.0/muk-it_muk_docs" remote="muk-it" groups="addons"/>
<project name="muk_misc.git" path="addons.odoo12.0/muk-it_muk_misc" remote="muk-it" revision="12.0_dev" groups="addons,base"/>
<project name="muk_quality.git" path="addons.odoo12.0/muk-it_muk_quality" remote="muk-it" groups="addons"/>
<project name="muk_web.git" path="addons.odoo12.0/muk-it_muk_web" remote="muk-it" revision="12.0_dev" groups="addons,base,code_generator"/>
<project name="muk_website.git" path="addons.odoo12.0/muk-it_muk_website" remote="muk-it" revision="12.0_remove_autoinstall" groups="addons,base"/>
<project name="multi-company.git" path="addons.odoo12.0/OCA_multi-company" remote="OCA" groups="addons"/>
<project name="odoo-addons.git" path="addons.odoo12.0/ajepe_odoo-addons" remote="ajepe" revision="12.0_dev" groups="addons,base"/>
<project name="odoo-base-addons.git" path="addons.odoo12.0/Numigi_odoo-base-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-business-spending-management-quebec-canada.git" path="addons.odoo12.0/MathBenTech_odoo-business-spending-management-quebec-canada" remote="MathBenTech" groups="addons,base"/>
<project name="odoo-cloud-platform.git" path="addons.odoo12.0/camptocamp_odoo-cloud-platform" remote="camptocamp" revision="12.0_dev" groups="addons"/>
<project name="odoo-code-generator-template.git" path="addons.odoo12.0/TechnoLibre_odoo-code-generator-template" revision="12.0_new_format" remote="TechnoLibre" groups="addons,code_generator,image_db"/>
<project name="odoo-code-generator.git" path="addons.odoo12.0/TechnoLibre_odoo-code-generator" remote="TechnoLibre" revision="12.0_support_wizard" groups="addons,code_generator,image_db"/>
<project name="odoo-development.git" path="doc/itpp-labs_odoo-development" remote="itpp-labs" revision="12.0_dev" groups="odoo"/>
<project name="odoo-entertainment-addons.git" path="addons.odoo12.0/Numigi_odoo-entertainment-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-git-addons.git" path="addons.odoo12.0/Numigi_odoo-git-addons" remote="Numigi" groups="addons"/>
<project name="odoo-formio.git" path="addons.odoo12.0/novacode-nl_odoo-formio" remote="novacode-nl" groups="addons"/>
<project name="odoo-hr-addons.git" path="addons.odoo12.0/Numigi_odoo-hr-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-module-migrator.git" path="script/OCA_odoo-module-migrator" remote="OCA" revision="master" groups="odoo"/>
<project name="odoo-partner-addons.git" path="addons.odoo12.0/Numigi_odoo-partner-addons" remote="Numigi" revision="12.0_dev" groups="addons,base,image_db"/>
<project name="odoo-product-addons.git" path="addons.odoo12.0/Numigi_odoo-product-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-port-docs.git" path="doc/itpp-labs_odoo-port-docs" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-product-configurator.git" path="addons.odoo12.0/pledra_odoo-product-configurator" remote="pledra" revision="12.0_dev" groups="addons"/>
<project name="odoo-project-addons.git" path="addons.odoo12.0/Numigi_odoo-project-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-purchase-addons.git" path="addons.odoo12.0/Numigi_odoo-purchase-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-stock-addons.git" path="addons.odoo12.0/Numigi_odoo-stock-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-survey-addons.git" path="addons.odoo12.0/Numigi_odoo-survey-addons" remote="Numigi" groups="addons"/>
<project name="odoo-test-docs.git" path="doc/itpp-labs_odoo-test-docs" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-timesheet-addons.git" path="addons.odoo12.0/Numigi_odoo-timesheet-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-web-addons.git" path="addons.odoo12.0/Numigi_odoo-web-addons" remote="Numigi" groups="addons,base"/>
<project name="odoo.git" path="odoo" remote="odoo" revision="ERPLibre/12.0" clone-depth="10" groups="odoo,base"/>
<project name="odoo_addons.git" path="addons.odoo12.0/Smile-SA_odoo_addons" remote="Smile-SA" revision="12.0_remote_autoinstall" groups="addons"/>
<project name="odoo_dhtmlxgantt.git" path="addons.odoo12.0/obayit_odoo_dhtmlxgantt" remote="obayit" groups="addons"/>
<project name="odooapps.git" path="addons.odoo12.0/odoomates_odooapps" remote="odoomates" groups="addons"/>
<project name="odooplm.git" path="addons.odoo12.0/OmniaGit_odooplm" remote="OmniaGit" groups="addons"/>
<project name="openeducat_erp.git" path="addons.odoo12.0/openeducat_openeducat_erp" remote="openeducat" groups="addons"/>
<project name="operating-unit.git" path="addons.odoo12.0/OCA_operating-unit" remote="OCA" groups="addons"/>
<project name="partner-contact.git" path="addons.odoo12.0/OCA_partner-contact" remote="OCA" groups="addons"/>
<project name="pos-addons.git" path="addons.odoo12.0/itpp-labs_pos-addons" remote="itpp-labs" groups="addons"/>
<project name="pos.git" path="addons.odoo12.0/OCA_pos" remote="OCA" groups="addons"/>
<project name="product-attribute.git" path="addons.odoo12.0/OCA_product-attribute" remote="OCA" groups="addons"/>
<project name="product-pack.git" path="addons.odoo12.0/OCA_product-pack" remote="OCA" groups="addons"/>
<project name="product-variant.git" path="addons.odoo12.0/OCA_product-variant" remote="OCA" groups="addons"/>
<project name="product_rating_app.git" path="addons.odoo12.0/odooaktiv_product_rating_app" remote="odooaktiv" groups="addons"/>
<project name="project-reporting.git" path="addons.odoo12.0/OCA_project-reporting" remote="OCA" groups="addons"/>
<project name="project.git" path="addons.odoo12.0/OCA_project" remote="OCA" revision="12.0_fix_conflict_project_key" groups="addons"/>
<project name="purchase-workflow.git" path="addons.odoo12.0/OCA_purchase-workflow" remote="OCA" groups="addons"/>
<project name="queue.git" path="addons.odoo12.0/OCA_queue" remote="OCA" groups="addons"/>
<project name="reporting-engine.git" path="addons.odoo12.0/OCA_reporting-engine" remote="OCA" groups="addons"/>
<project name="rma.git" path="addons.odoo12.0/OCA_rma" remote="OCA" groups="addons"/>
<project name="saas-addons.git" path="addons.odoo12.0/it-projects-llc_saas-addons" remote="it-projects-llc" groups="addons"/>
<project name="sale-reporting.git" path="addons.odoo12.0/OCA_sale-reporting" remote="OCA" groups="addons"/>
<project name="sale-workflow.git" path="addons.odoo12.0/OCA_sale-workflow" remote="OCA" revision="12.0_modules_sale_order_line" groups="addons"/>
<project name="scrummer.git" path="addons.odoo12.0/MathBenTech_scrummer" remote="MathBenTech" revision="12.0_dev" groups="addons,base"/>
<project name="SerpentCS_Contributions.git" path="addons.odoo12.0/JayVora-SerpentCS_SerpentCS_Contributions" remote="JayVora-SerpentCS" groups="addons,code_generator,base"/>
<project name="server-auth.git" path="addons.odoo12.0/OCA_server-auth" remote="OCA" groups="addons,base,image_db"/>
<project name="server-backend.git" path="addons.odoo12.0/OCA_server-backend" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="server-brand.git" path="addons.odoo12.0/OCA_server-brand" remote="OCA" groups="addons,base"/>
<project name="server-env.git" path="addons.odoo12.0/OCA_server-env" remote="OCA" groups="addons"/>
<project name="server-tools.git" path="addons.odoo12.0/OCA_server-tools" remote="OCA" revision="12.0_dev" groups="addons,base"/>
<project name="server-ux.git" path="addons.odoo12.0/OCA_server-ux" remote="OCA" groups="addons,base"/>
<project name="social.git" path="addons.odoo12.0/OCA_social" remote="OCA" groups="addons,base"/>
<project name="stock-logistics-warehouse.git" path="addons.odoo12.0/OCA_stock-logistics-warehouse" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="storage.git" path="addons.odoo12.0/OCA_storage" remote="OCA" groups="addons"/>
<project name="timesheet.git" path="addons.odoo12.0/OCA_timesheet" remote="OCA" revision="12.0_support_project_agile_timesheet" groups="addons"/>
<project name="vertical-association.git" path="addons.odoo12.0/OCA_vertical-association" remote="OCA" groups="addons"/>
<project name="vertical-hotel.git" path="addons.odoo12.0/OCA_vertical-hotel" remote="OCA" groups="addons"/>
<project name="vertical-isp.git" path="addons.odoo12.0/OCA_vertical-isp" remote="OCA" groups="addons"/>
<project name="vertical-travel.git" path="addons.odoo12.0/OCA_vertical-travel" remote="OCA" groups="addons"/>
<project name="web.git" path="addons.odoo12.0/OCA_web" remote="OCA" revision="12.0_dev" groups="addons,base"/>
<project name="website-addons.git" path="addons.odoo12.0/itpp-labs_website-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
<project name="website-cms.git" path="addons.odoo12.0/OCA_website-cms" remote="OCA" groups="addons"/>
<project name="website.git" path="addons.odoo12.0/OCA_website" remote="OCA" revision="12.0_dev" groups="addons,code_generator,image_db"/>
<project name="wms.git" path="addons.odoo12.0/OCA_wms" remote="OCA" groups="addons"/>
</manifest>

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="CybroOdoo" fetch="https://github.com/CybroOdoo/"/>
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="MathBenTech" fetch="https://github.com/MathBenTech/"/>
<remote name="Numigi" fetch="https://github.com/Numigi/"/>
<remote name="OCA" fetch="https://github.com/OCA/"/>
<remote name="OmniaGit" fetch="https://github.com/OmniaGit/"/>
<remote name="Smile-SA" fetch="https://github.com/ERPLibre/"/>
<remote name="TechnoLibre" fetch="https://github.com/TechnoLibre/"/>
<remote name="ajepe" fetch="https://github.com/ajepe/"/>
<remote name="camptocamp" fetch="https://github.com/camptocamp/"/>
<remote name="dhongu" fetch="https://github.com/dhongu/"/>
<remote name="it-projects-llc" fetch="https://github.com/it-projects-llc/"/>
<remote name="itpp-labs" fetch="https://github.com/itpp-labs/"/>
<remote name="kinjal-sorathiya" fetch="https://github.com/kinjal-sorathiya/"/>
<remote name="muk-it" fetch="https://github.com/muk-it/"/>
<remote name="novacode-nl" fetch="https://github.com/novacode-nl/"/>
<remote name="obayit" fetch="https://github.com/obayit/"/>
<remote name="odoo" fetch="https://github.com/ERPLibre/"/>
<remote name="odooaktiv" fetch="https://github.com/odooaktiv/"/>
<remote name="odoomates" fetch="https://github.com/odoomates/"/>
<remote name="openeducat" fetch="https://github.com/openeducat/"/>
<remote name="pledra" fetch="https://github.com/pledra/"/>
<remote name="tegin" fetch="https://github.com/tegin/"/>
<default remote="ERPLibre" revision="14.0" sync-j="4" sync-c="true"/>
<project name="ERPLibre_image_db.git" path="image_db" remote="ERPLibre" clone-depth="1" revision="main" groups="base"/>
<project name="OpenHRMS.git" path="addons.odoo14.0/CybroOdoo_OpenHRMS" remote="CybroOdoo" groups="addons"/>
<project name="access-addons.git" path="addons.odoo14.0/itpp-labs_access-addons" remote="itpp-labs" groups="addons"/>
<project name="account-analytic.git" path="addons.odoo14.0/OCA_account-analytic" remote="OCA" groups="addons"/>
<project name="account-budgeting.git" path="addons.odoo14.0/OCA_account-budgeting" remote="OCA" groups="addons"/>
<project name="account-closing.git" path="addons.odoo14.0/OCA_account-closing" remote="OCA" groups="addons"/>
<project name="account-consolidation.git" path="addons.odoo14.0/OCA_account-consolidation" remote="OCA" groups="addons"/>
<project name="account-financial-reporting.git" path="addons.odoo14.0/OCA_account-financial-reporting" remote="OCA" groups="addons"/>
<project name="account-financial-tools.git" path="addons.odoo14.0/OCA_account-financial-tools" remote="OCA" groups="addons"/>
<project name="account-fiscal-rule.git" path="addons.odoo14.0/OCA_account-fiscal-rule" remote="OCA" groups="addons"/>
<project name="account-invoice-reporting.git" path="addons.odoo14.0/OCA_account-invoice-reporting" remote="OCA" groups="addons"/>
<project name="account-invoicing.git" path="addons.odoo14.0/OCA_account-invoicing" remote="OCA" groups="addons"/>
<project name="account-payment.git" path="addons.odoo14.0/OCA_account-payment" remote="OCA" groups="addons"/>
<project name="account-reconcile.git" path="addons.odoo14.0/OCA_account-reconcile" remote="OCA" groups="addons"/>
<project name="apps-store.git" path="addons.odoo14.0/OCA_apps-store" remote="OCA" groups="addons"/>
<project name="bank-payment.git" path="addons.odoo14.0/OCA_bank-payment" remote="OCA" groups="addons"/>
<project name="bank-statement-import.git" path="addons.odoo14.0/OCA_bank-statement-import" remote="OCA" groups="addons"/>
<project name="brand.git" path="addons.odoo14.0/OCA_brand" remote="OCA" groups="addons"/>
<project name="business-requirement.git" path="addons.odoo14.0/OCA_business-requirement" remote="OCA" groups="addons"/>
<project name="commission.git" path="addons.odoo14.0/OCA_commission" remote="OCA" groups="addons"/>
<project name="community-data-files.git" path="addons.odoo14.0/OCA_community-data-files" remote="OCA" groups="addons"/>
<project name="connector-ecommerce.git" path="addons.odoo14.0/OCA_connector-ecommerce" remote="OCA" groups="addons"/>
<project name="connector-interfaces.git" path="addons.odoo14.0/OCA_connector-interfaces" remote="OCA" groups="addons"/>
<project name="connector-jira.git" path="addons.odoo14.0/OCA_connector-jira" remote="OCA" groups="addons"/>
<project name="connector-telephony.git" path="addons.odoo14.0/OCA_connector-telephony" remote="OCA" groups="addons"/>
<project name="connector.git" path="addons.odoo14.0/OCA_connector" remote="OCA" groups="addons"/>
<project name="contract.git" path="addons.odoo14.0/OCA_contract" remote="OCA" groups="addons"/>
<project name="credit-control.git" path="addons.odoo14.0/OCA_credit-control" remote="OCA" groups="addons"/>
<project name="crm.git" path="addons.odoo14.0/OCA_crm" remote="OCA" groups="addons"/>
<project name="currency.git" path="addons.odoo14.0/OCA_currency" remote="OCA" groups="addons"/>
<project name="data-protection.git" path="addons.odoo14.0/OCA_data-protection" remote="OCA" groups="addons"/>
<project name="ddmrp.git" path="addons.odoo14.0/OCA_ddmrp" remote="OCA" groups="addons"/>
<project name="delivery-carrier.git" path="addons.odoo14.0/OCA_delivery-carrier" remote="OCA" groups="addons"/>
<project name="deltatech.git" path="addons.odoo14.0/dhongu_deltatech" remote="dhongu" groups="addons"/>
<project name="design-themes.git" path="addons.odoo14.0/odoo_design-themes" remote="odoo" groups="addons"/>
<project name="donation.git" path="addons.odoo14.0/OCA_donation" remote="OCA" groups="addons"/>
<project name="e-commerce.git" path="addons.odoo14.0/OCA_e-commerce" remote="OCA" groups="addons"/>
<project name="edi.git" path="addons.odoo14.0/OCA_edi" remote="OCA" groups="addons"/>
<project name="event.git" path="addons.odoo14.0/OCA_event" remote="OCA" groups="addons"/>
<project name="field-service.git" path="addons.odoo14.0/OCA_field-service" remote="OCA" groups="addons"/>
<project name="fleet.git" path="addons.odoo14.0/OCA_fleet" remote="OCA" groups="addons"/>
<project name="geospatial.git" path="addons.odoo14.0/OCA_geospatial" remote="OCA" groups="addons"/>
<project name="helpdesk.git" path="addons.odoo14.0/OCA_helpdesk" remote="ERPLibre" revision="14.0_dev" groups="addons"/>
<project name="hr.git" path="addons.odoo14.0/OCA_hr" remote="OCA" groups="addons"/>
<project name="interface-github.git" path="addons.odoo14.0/OCA_interface-github" remote="OCA" groups="addons"/>
<project name="knowledge.git" path="addons.odoo14.0/OCA_knowledge" remote="OCA" groups="addons"/>
<project name="l10n-canada.git" path="addons.odoo14.0/OCA_l10n-canada" remote="OCA" groups="addons"/>
<project name="maintainer-tools.git" path="script/OCA_maintainer-tools" remote="OCA" revision="master" groups="odoo"/>
<project name="maintenance.git" path="addons.odoo14.0/OCA_maintenance" remote="OCA" groups="addons"/>
<project name="management-system.git" path="addons.odoo14.0/OCA_management-system" remote="OCA" groups="addons"/>
<project name="manufacture.git" path="addons.odoo14.0/OCA_manufacture" remote="OCA" groups="addons"/>
<project name="margin-analysis.git" path="addons.odoo14.0/OCA_margin-analysis" remote="OCA" groups="addons"/>
<project name="medical-fhir.git" path="addons.odoo14.0/tegin_medical-fhir" remote="tegin" groups="addons"/>
<project name="mis-builder.git" path="addons.odoo14.0/OCA_mis-builder" remote="OCA" groups="addons"/>
<project name="multi-company.git" path="addons.odoo14.0/OCA_multi-company" remote="OCA" groups="addons"/>
<project name="muk_web.git" path="addons.odoo14.0/muk-it_muk_web" remote="muk-it" groups="addons"/>
<project name="odoo-addons.git" path="addons.odoo14.0/ajepe_odoo-addons" remote="ajepe" groups="addons"/>
<project name="odoo-base-addons.git" path="addons.odoo14.0/Numigi_odoo-base-addons" remote="Numigi" groups="addons"/>
<project name="odoo-cloud-platform.git" path="addons.odoo14.0/camptocamp_odoo-cloud-platform" remote="camptocamp" groups="addons"/>
<project name="odoo-development.git" path="doc/itpp-labs_odoo-development" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-entertainment-addons.git" path="addons.odoo14.0/Numigi_odoo-entertainment-addons" remote="Numigi" groups="addons"/>
<project name="odoo-formio.git" path="addons.odoo14.0/novacode-nl_odoo-formio" remote="novacode-nl" groups="addons"/>
<project name="odoo-git-addons.git" path="addons.odoo14.0/Numigi_odoo-git-addons" remote="Numigi" groups="addons"/>
<project name="odoo-hr-addons.git" path="addons.odoo14.0/Numigi_odoo-hr-addons" remote="Numigi" groups="addons"/>
<project name="odoo-module-migrator.git" path="script/OCA_odoo-module-migrator" remote="OCA" revision="master" groups="odoo"/>
<project name="odoo-partner-addons.git" path="addons.odoo14.0/Numigi_odoo-partner-addons" remote="Numigi" groups="addons"/>
<project name="odoo-port-docs.git" path="doc/itpp-labs_odoo-port-docs" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-product-addons.git" path="addons.odoo14.0/Numigi_odoo-product-addons" remote="Numigi" groups="addons"/>
<project name="odoo-project-addons.git" path="addons.odoo14.0/Numigi_odoo-project-addons" remote="Numigi" groups="addons"/>
<project name="odoo-purchase-addons.git" path="addons.odoo14.0/Numigi_odoo-purchase-addons" remote="Numigi" groups="addons"/>
<project name="odoo-stock-addons.git" path="addons.odoo14.0/Numigi_odoo-stock-addons" remote="Numigi" groups="addons"/>
<project name="odoo-survey-addons.git" path="addons.odoo14.0/Numigi_odoo-survey-addons" remote="Numigi" groups="addons"/>
<project name="odoo-test-docs.git" path="doc/itpp-labs_odoo-test-docs" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-timesheet-addons.git" path="addons.odoo14.0/Numigi_odoo-timesheet-addons" remote="Numigi" groups="addons"/>
<project name="odoo-web-addons.git" path="addons.odoo14.0/Numigi_odoo-web-addons" remote="Numigi" groups="addons"/>
<project name="odoo.git" path="odoo" remote="odoo" clone-depth="10" revision="ERPLibre/14.0" groups="odoo"/>
<project name="odoo_addons.git" path="addons.odoo14.0/Smile-SA_odoo_addons" remote="Smile-SA" revision="14.0_dev" groups="addons"/>
<project name="odoo_dhtmlxgantt.git" path="addons.odoo14.0/obayit_odoo_dhtmlxgantt" remote="obayit" groups="addons"/>
<project name="odooapps.git" path="addons.odoo14.0/odoomates_odooapps" remote="odoomates" groups="addons"/>
<project name="odooplm.git" path="addons.odoo14.0/OmniaGit_odooplm" remote="OmniaGit" groups="addons"/>
<project name="openeducat_erp.git" path="addons.odoo14.0/openeducat_openeducat_erp" remote="openeducat" groups="addons"/>
<project name="OpenUpgrade.git" path="script/OCA_OpenUpgrade" remote="OCA" clone-depth="10" groups="migration"/>
<project name="operating-unit.git" path="addons.odoo14.0/OCA_operating-unit" remote="OCA" groups="addons"/>
<project name="partner-contact.git" path="addons.odoo14.0/OCA_partner-contact" remote="OCA" groups="addons"/>
<project name="pos-addons.git" path="addons.odoo14.0/itpp-labs_pos-addons" remote="itpp-labs" groups="addons"/>
<project name="pos.git" path="addons.odoo14.0/OCA_pos" remote="OCA" groups="addons"/>
<project name="product-attribute.git" path="addons.odoo14.0/OCA_product-attribute" remote="OCA" groups="addons"/>
<project name="product-configurator.git" path="addons.odoo14.0/OCA_product-configurator" remote="OCA" groups="addons"/>
<project name="product-pack.git" path="addons.odoo14.0/OCA_product-pack" remote="OCA" groups="addons"/>
<project name="product-variant.git" path="addons.odoo14.0/OCA_product-variant" remote="OCA" groups="addons"/>
<project name="project-reporting.git" path="addons.odoo14.0/OCA_project-reporting" remote="OCA" groups="addons"/>
<project name="project-agile.git" path="addons.odoo14.0/OCA_project-agile" remote="OCA" groups="addons"/>
<project name="project.git" path="addons.odoo14.0/OCA_project" remote="OCA" groups="addons"/>
<project name="purchase-workflow.git" path="addons.odoo14.0/OCA_purchase-workflow" remote="OCA" groups="addons"/>
<project name="queue.git" path="addons.odoo14.0/OCA_queue" remote="OCA" groups="addons"/>
<project name="reporting-engine.git" path="addons.odoo14.0/OCA_reporting-engine" remote="OCA" groups="addons"/>
<project name="rma.git" path="addons.odoo14.0/OCA_rma" remote="OCA" groups="addons"/>
<project name="saas-addons.git" path="addons.odoo14.0/it-projects-llc_saas-addons" remote="it-projects-llc" groups="addons"/>
<project name="sale-reporting.git" path="addons.odoo14.0/OCA_sale-reporting" remote="OCA" groups="addons"/>
<project name="sale-workflow.git" path="addons.odoo14.0/OCA_sale-workflow" remote="OCA" groups="addons"/>
<project name="server-auth.git" path="addons.odoo14.0/OCA_server-auth" remote="OCA" groups="addons"/>
<project name="server-backend.git" path="addons.odoo14.0/OCA_server-backend" remote="OCA" groups="addons"/>
<project name="server-brand.git" path="addons.odoo14.0/OCA_server-brand" remote="OCA" groups="addons"/>
<project name="server-env.git" path="addons.odoo14.0/OCA_server-env" remote="OCA" groups="addons"/>
<project name="server-tools.git" path="addons.odoo14.0/OCA_server-tools" remote="ERPLibre" revision="14.0_dev" groups="addons"/>
<project name="server-ux.git" path="addons.odoo14.0/OCA_server-ux" remote="OCA" groups="addons"/>
<project name="social.git" path="addons.odoo14.0/OCA_social" remote="ERPLibre" revision="14.0_dev" groups="addons"/>
<project name="stock-logistics-warehouse.git" path="addons.odoo14.0/OCA_stock-logistics-warehouse" remote="OCA" groups="addons"/>
<project name="storage.git" path="addons.odoo14.0/OCA_storage" remote="OCA" groups="addons"/>
<project name="timesheet.git" path="addons.odoo14.0/OCA_timesheet" remote="OCA" groups="addons"/>
<project name="vertical-association.git" path="addons.odoo14.0/OCA_vertical-association" remote="OCA" groups="addons"/>
<project name="vertical-hotel.git" path="addons.odoo14.0/OCA_vertical-hotel" remote="OCA" groups="addons"/>
<project name="vertical-isp.git" path="addons.odoo14.0/OCA_vertical-isp" remote="OCA" groups="addons"/>
<project name="vertical-travel.git" path="addons.odoo14.0/OCA_vertical-travel" remote="OCA" groups="addons"/>
<project name="web.git" path="addons.odoo14.0/OCA_web" remote="OCA" groups="addons"/>
<project name="website-addons.git" path="addons.odoo14.0/itpp-labs_website-addons" remote="itpp-labs" groups="addons"/>
<project name="website-cms.git" path="addons.odoo14.0/OCA_website-cms" remote="OCA" groups="addons"/>
<project name="website.git" path="addons.odoo14.0/OCA_website" remote="OCA" groups="addons"/>
<project name="wms.git" path="addons.odoo14.0/OCA_wms" remote="OCA" groups="addons"/>
</manifest>

View file

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="CybroOdoo" fetch="https://github.com/CybroOdoo/"/>
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="MathBenTech" fetch="https://github.com/MathBenTech/"/>
<remote name="Numigi" fetch="https://github.com/Numigi/"/>
<remote name="OCA" fetch="https://github.com/OCA/"/>
<remote name="OmniaGit" fetch="https://github.com/OmniaGit/"/>
<remote name="Smile-SA" fetch="https://github.com/ERPLibre/"/>
<remote name="TechnoLibre" fetch="https://github.com/TechnoLibre/"/>
<remote name="ajepe" fetch="https://github.com/ajepe/"/>
<remote name="camptocamp" fetch="https://github.com/camptocamp/"/>
<remote name="dhongu" fetch="https://github.com/dhongu/"/>
<remote name="it-projects-llc" fetch="https://github.com/it-projects-llc/"/>
<remote name="itpp-labs" fetch="https://github.com/itpp-labs/"/>
<remote name="kinjal-sorathiya" fetch="https://github.com/kinjal-sorathiya/"/>
<remote name="muk-it" fetch="https://github.com/muk-it/"/>
<remote name="novacode-nl" fetch="https://github.com/novacode-nl/"/>
<remote name="obayit" fetch="https://github.com/obayit/"/>
<remote name="odoo" fetch="https://github.com/ERPLibre/"/>
<remote name="odooaktiv" fetch="https://github.com/odooaktiv/"/>
<remote name="odoomates" fetch="https://github.com/odoomates/"/>
<remote name="openeducat" fetch="https://github.com/openeducat/"/>
<remote name="pledra" fetch="https://github.com/pledra/"/>
<remote name="tegin" fetch="https://github.com/tegin/"/>
<default remote="ERPLibre" revision="16.0" sync-j="4" sync-c="true"/>
<project name="ERPLibre_image_db.git" path="image_db" remote="ERPLibre" clone-depth="1" revision="main" groups="base"/>
<project name="OpenHRMS.git" path="addons.odoo16.0/CybroOdoo_OpenHRMS" remote="CybroOdoo" groups="addons"/>
<project name="CybroAddons.git" path="addons.odoo16.0/CybroOdoo_CybroAddons" remote="ERPLibre" revision="16.0_dev" groups="addons"/>
<project name="account-analytic.git" path="addons.odoo16.0/OCA_account-analytic" remote="OCA" groups="addons"/>
<project name="account-budgeting.git" path="addons.odoo16.0/OCA_account-budgeting" remote="OCA" groups="addons"/>
<project name="account-closing.git" path="addons.odoo16.0/OCA_account-closing" remote="OCA" groups="addons"/>
<project name="account-consolidation.git" path="addons.odoo16.0/OCA_account-consolidation" remote="OCA" groups="addons"/>
<project name="account-financial-reporting.git" path="addons.odoo16.0/OCA_account-financial-reporting" remote="OCA" groups="addons"/>
<project name="account-financial-tools.git" path="addons.odoo16.0/OCA_account-financial-tools" remote="OCA" groups="addons"/>
<project name="account-fiscal-rule.git" path="addons.odoo16.0/OCA_account-fiscal-rule" remote="OCA" groups="addons"/>
<project name="account-invoice-reporting.git" path="addons.odoo16.0/OCA_account-invoice-reporting" remote="OCA" groups="addons"/>
<project name="account-invoicing.git" path="addons.odoo16.0/OCA_account-invoicing" remote="OCA" groups="addons"/>
<project name="account-payment.git" path="addons.odoo16.0/OCA_account-payment" remote="OCA" groups="addons"/>
<project name="account-reconcile.git" path="addons.odoo16.0/OCA_account-reconcile" remote="OCA" groups="addons"/>
<project name="apps-store.git" path="addons.odoo16.0/OCA_apps-store" remote="OCA" groups="addons"/>
<project name="bank-payment.git" path="addons.odoo16.0/OCA_bank-payment" remote="OCA" groups="addons"/>
<project name="bank-statement-import.git" path="addons.odoo16.0/OCA_bank-statement-import" remote="OCA" groups="addons"/>
<project name="brand.git" path="addons.odoo16.0/OCA_brand" remote="OCA" groups="addons"/>
<project name="business-requirement.git" path="addons.odoo16.0/OCA_business-requirement" remote="OCA" groups="addons"/>
<project name="commission.git" path="addons.odoo16.0/OCA_commission" remote="OCA" groups="addons"/>
<project name="community-data-files.git" path="addons.odoo16.0/OCA_community-data-files" remote="OCA" groups="addons"/>
<project name="connector-ecommerce.git" path="addons.odoo16.0/OCA_connector-ecommerce" remote="OCA" groups="addons"/>
<project name="connector-interfaces.git" path="addons.odoo16.0/OCA_connector-interfaces" remote="OCA" groups="addons"/>
<project name="connector-jira.git" path="addons.odoo16.0/OCA_connector-jira" remote="OCA" groups="addons"/>
<project name="connector-telephony.git" path="addons.odoo16.0/OCA_connector-telephony" remote="OCA" groups="addons"/>
<project name="connector.git" path="addons.odoo16.0/OCA_connector" remote="OCA" groups="addons"/>
<project name="contract.git" path="addons.odoo16.0/OCA_contract" remote="OCA" groups="addons"/>
<project name="credit-control.git" path="addons.odoo16.0/OCA_credit-control" remote="OCA" groups="addons"/>
<project name="crm.git" path="addons.odoo16.0/OCA_crm" remote="OCA" groups="addons"/>
<project name="currency.git" path="addons.odoo16.0/OCA_currency" remote="OCA" groups="addons"/>
<project name="data-protection.git" path="addons.odoo16.0/OCA_data-protection" remote="OCA" groups="addons"/>
<project name="ddmrp.git" path="addons.odoo16.0/OCA_ddmrp" remote="OCA" groups="addons"/>
<project name="delivery-carrier.git" path="addons.odoo16.0/OCA_delivery-carrier" remote="OCA" groups="addons"/>
<project name="deltatech.git" path="addons.odoo16.0/dhongu_deltatech" remote="dhongu" groups="addons"/>
<project name="donation.git" path="addons.odoo16.0/OCA_donation" remote="OCA" groups="addons"/>
<project name="e-commerce.git" path="addons.odoo16.0/OCA_e-commerce" remote="OCA" groups="addons"/>
<project name="edi.git" path="addons.odoo16.0/OCA_edi" remote="OCA" groups="addons"/>
<project name="erplibre_addons.git" path="addons.odoo16.0/ERPLibre_erplibre_addons" remote="ERPLibre" groups="addons,base"/>
<project name="event.git" path="addons.odoo16.0/OCA_event" remote="OCA" groups="addons"/>
<project name="field-service.git" path="addons.odoo16.0/OCA_field-service" remote="OCA" groups="addons"/>
<project name="fleet.git" path="addons.odoo16.0/OCA_fleet" remote="OCA" groups="addons"/>
<project name="geospatial.git" path="addons.odoo16.0/OCA_geospatial" remote="OCA" groups="addons"/>
<project name="helpdesk.git" path="addons.odoo16.0/OCA_helpdesk" remote="OCA" groups="addons"/>
<project name="hr.git" path="addons.odoo16.0/OCA_hr" remote="OCA" groups="addons"/>
<project name="interface-github.git" path="addons.odoo16.0/OCA_interface-github" remote="OCA" groups="addons"/>
<project name="knowledge.git" path="addons.odoo16.0/OCA_knowledge" remote="OCA" groups="addons"/>
<project name="l10n-canada.git" path="addons.odoo16.0/OCA_l10n-canada" remote="OCA" groups="addons"/>
<project name="maintainer-tools.git" path="script/OCA_maintainer-tools" remote="OCA" revision="master" groups="odoo"/>
<project name="maintenance.git" path="addons.odoo16.0/OCA_maintenance" remote="OCA" groups="addons"/>
<project name="management-system.git" path="addons.odoo16.0/OCA_management-system" remote="OCA" groups="addons"/>
<project name="manufacture.git" path="addons.odoo16.0/OCA_manufacture" remote="OCA" groups="addons"/>
<project name="margin-analysis.git" path="addons.odoo16.0/OCA_margin-analysis" remote="OCA" groups="addons"/>
<project name="medical-fhir.git" path="addons.odoo16.0/tegin_medical-fhir" remote="tegin" groups="addons"/>
<project name="mis-builder.git" path="addons.odoo16.0/OCA_mis-builder" remote="OCA" groups="addons"/>
<project name="multi-company.git" path="addons.odoo16.0/OCA_multi-company" remote="OCA" groups="addons"/>
<project name="muk_web.git" path="addons.odoo16.0/muk-it_muk_web" remote="muk-it" groups="addons"/>
<project name="odoo-cloud-platform.git" path="addons.odoo16.0/camptocamp_odoo-cloud-platform" remote="camptocamp" groups="addons"/>
<project name="odoo-formio.git" path="addons.odoo16.0/novacode-nl_odoo-formio" remote="novacode-nl" groups="addons"/>
<project name="odoo-module-migrator.git" path="script/OCA_odoo-module-migrator" remote="OCA" revision="master" groups="odoo"/>
<project name="odoo.git" path="odoo" remote="odoo" clone-depth="10" revision="ERPLibre/16.0" groups="odoo"/>
<project name="odooapps.git" path="addons.odoo16.0/odoomates_odooapps" remote="odoomates" groups="addons"/>
<project name="odooplm.git" path="addons.odoo16.0/OmniaGit_odooplm" remote="OmniaGit" groups="addons"/>
<project name="openeducat_erp.git" path="addons.odoo16.0/openeducat_openeducat_erp" remote="openeducat" groups="addons"/>
<project name="OpenUpgrade.git" path="script/OCA_OpenUpgrade" remote="OCA" clone-depth="10" groups="migration"/>
<project name="operating-unit.git" path="addons.odoo16.0/OCA_operating-unit" remote="OCA" groups="addons"/>
<project name="partner-contact.git" path="addons.odoo16.0/OCA_partner-contact" remote="OCA" groups="addons"/>
<project name="pos.git" path="addons.odoo16.0/OCA_pos" remote="OCA" groups="addons"/>
<project name="product-attribute.git" path="addons.odoo16.0/OCA_product-attribute" remote="OCA" groups="addons"/>
<project name="product-configurator.git" path="addons.odoo16.0/OCA_product-configurator" remote="OCA" groups="addons"/>
<project name="product-pack.git" path="addons.odoo16.0/OCA_product-pack" remote="OCA" groups="addons"/>
<project name="product-variant.git" path="addons.odoo16.0/OCA_product-variant" remote="OCA" groups="addons"/>
<project name="project-reporting.git" path="addons.odoo16.0/OCA_project-reporting" remote="OCA" groups="addons"/>
<project name="project-agile.git" path="addons.odoo16.0/OCA_project-agile" remote="OCA" groups="addons"/>
<project name="project.git" path="addons.odoo16.0/OCA_project" remote="OCA" groups="addons"/>
<project name="purchase-workflow.git" path="addons.odoo16.0/OCA_purchase-workflow" remote="OCA" groups="addons"/>
<project name="queue.git" path="addons.odoo16.0/OCA_queue" remote="OCA" groups="addons"/>
<project name="reporting-engine.git" path="addons.odoo16.0/OCA_reporting-engine" remote="OCA" groups="addons"/>
<project name="rma.git" path="addons.odoo16.0/OCA_rma" remote="OCA" groups="addons"/>
<project name="saas-addons.git" path="addons.odoo16.0/it-projects-llc_saas-addons" remote="it-projects-llc" groups="addons"/>
<project name="sale-reporting.git" path="addons.odoo16.0/OCA_sale-reporting" remote="OCA" groups="addons"/>
<project name="sale-workflow.git" path="addons.odoo16.0/OCA_sale-workflow" remote="OCA" groups="addons"/>
<project name="server-auth.git" path="addons.odoo16.0/OCA_server-auth" remote="OCA" groups="addons"/>
<project name="server-backend.git" path="addons.odoo16.0/OCA_server-backend" remote="OCA" groups="addons"/>
<project name="server-brand.git" path="addons.odoo16.0/OCA_server-brand" remote="OCA" groups="addons"/>
<project name="server-env.git" path="addons.odoo16.0/OCA_server-env" remote="OCA" groups="addons"/>
<project name="server-tools.git" path="addons.odoo16.0/OCA_server-tools" remote="ERPLibre" revision="ERPLibre/16.0" groups="addons"/>
<project name="server-ux.git" path="addons.odoo16.0/OCA_server-ux" remote="OCA" groups="addons"/>
<project name="social.git" path="addons.odoo16.0/OCA_social" remote="OCA" groups="addons"/>
<project name="survey.git" path="addons.odoo16.0/OCA_survey" remote="ERPLibre" revision="16.0_survey_odoo_debranding" groups="addons"/>
<project name="stock-logistics-warehouse.git" path="addons.odoo16.0/OCA_stock-logistics-warehouse" remote="OCA" groups="addons"/>
<project name="storage.git" path="addons.odoo16.0/OCA_storage" remote="OCA" groups="addons"/>
<project name="timesheet.git" path="addons.odoo16.0/OCA_timesheet" remote="OCA" groups="addons"/>
<project name="vertical-association.git" path="addons.odoo16.0/OCA_vertical-association" remote="OCA" groups="addons"/>
<project name="vertical-hotel.git" path="addons.odoo16.0/OCA_vertical-hotel" remote="OCA" groups="addons"/>
<project name="vertical-isp.git" path="addons.odoo16.0/OCA_vertical-isp" remote="OCA" groups="addons"/>
<project name="vertical-travel.git" path="addons.odoo16.0/OCA_vertical-travel" remote="OCA" groups="addons"/>
<project name="web.git" path="addons.odoo16.0/OCA_web" remote="OCA" groups="addons"/>
<project name="website-cms.git" path="addons.odoo16.0/OCA_website-cms" remote="OCA" groups="addons"/>
<project name="website.git" path="addons.odoo16.0/OCA_website" remote="OCA" groups="addons"/>
<project name="wms.git" path="addons.odoo16.0/OCA_wms" remote="OCA" groups="addons"/>
</manifest>

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="CybroOdoo" fetch="https://github.com/ERPLibre/"/>
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="MathBenTech" fetch="https://github.com/ERPLibre/"/>
<remote name="Numigi" fetch="https://github.com/ERPLibre/"/>
<remote name="OCA" fetch="https://github.com/ERPLibre/"/>
<remote name="OmniaGit" fetch="https://github.com/ERPLibre/"/>
<remote name="Smile-SA" fetch="https://github.com/ERPLibre/"/>
<remote name="TechnoLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="ajepe" fetch="https://github.com/ERPLibre/"/>
<remote name="camptocamp" fetch="https://github.com/ERPLibre/"/>
<remote name="dhongu" fetch="https://github.com/ERPLibre/"/>
<remote name="it-projects-llc" fetch="https://github.com/ERPLibre/"/>
<remote name="itpp-labs" fetch="https://github.com/ERPLibre/"/>
<remote name="JayVora-SerpentCS" fetch="https://github.com/ERPLibre/"/>
<remote name="kinjal-sorathiya" fetch="https://github.com/ERPLibre/"/>
<remote name="muk-it" fetch="https://github.com/ERPLibre/"/>
<remote name="novacode-nl" fetch="https://github.com/ERPLibre/"/>
<remote name="obayit" fetch="https://github.com/ERPLibre/"/>
<remote name="odoo" fetch="https://github.com/ERPLibre/"/>
<remote name="odooaktiv" fetch="https://github.com/ERPLibre/"/>
<remote name="odoomates" fetch="https://github.com/ERPLibre/"/>
<remote name="openeducat" fetch="https://github.com/ERPLibre/"/>
<remote name="pledra" fetch="https://github.com/ERPLibre/"/>
<remote name="tegin" fetch="https://github.com/ERPLibre/"/>
<default remote="ERPLibre" revision="12.0" sync-j="4" sync-c="true"/>
<project name="ERPLibre_image_db.git" path="image_db" remote="ERPLibre" clone-depth="1" groups="base"/>
<project name="OpenHRMS.git" path="addons/CybroOdoo_OpenHRMS" remote="CybroOdoo" revision="dev_12.0" groups="addons"/>
<project name="Property-Management_odoo.git" path="addons/kinjal-sorathiya_Property-Management_odoo" remote="kinjal-sorathiya" revision="master" groups="addons"/>
<project name="QuotationRevision.git" path="addons/MathBenTech_QuotationRevision" remote="MathBenTech" groups="addons"/>
<project name="access-addons.git" path="addons/itpp-labs_access-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
<project name="account-analytic.git" path="addons/OCA_account-analytic" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="account-budgeting.git" path="addons/OCA_account-budgeting" remote="OCA" groups="addons"/>
<project name="account-closing.git" path="addons/OCA_account-closing" remote="OCA" groups="addons"/>
<project name="account-consolidation.git" path="addons/OCA_account-consolidation" remote="OCA" groups="addons"/>
<project name="account-financial-reporting.git" path="addons/OCA_account-financial-reporting" remote="OCA" groups="addons"/>
<project name="account-financial-tools.git" path="addons/OCA_account-financial-tools" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="account-fiscal-rule.git" path="addons/OCA_account-fiscal-rule" remote="OCA" groups="addons"/>
<project name="account-invoice-reporting.git" path="addons/OCA_account-invoice-reporting" remote="OCA" groups="addons"/>
<project name="account-invoicing.git" path="addons/OCA_account-invoicing" remote="OCA" groups="addons"/>
<project name="account-payment.git" path="addons/OCA_account-payment" remote="OCA" groups="addons"/>
<project name="account-reconcile.git" path="addons/OCA_account-reconcile" remote="OCA" groups="addons"/>
<project name="apps-store.git" path="addons/OCA_apps-store" remote="OCA" groups="addons"/>
<project name="bank-payment.git" path="addons/OCA_bank-payment" remote="OCA" groups="addons"/>
<project name="bank-statement-import.git" path="addons/OCA_bank-statement-import" remote="OCA" groups="addons"/>
<project name="brand.git" path="addons/OCA_brand" remote="OCA" groups="addons"/>
<project name="business-requirement.git" path="addons/OCA_business-requirement" remote="OCA" groups="addons"/>
<project name="commission.git" path="addons/OCA_commission" remote="OCA" groups="addons"/>
<project name="community-data-files.git" path="addons/OCA_community-data-files" remote="OCA" groups="addons"/>
<project name="connector-ecommerce.git" path="addons/OCA_connector-ecommerce" remote="OCA" groups="addons"/>
<project name="connector-interfaces.git" path="addons/OCA_connector-interfaces" remote="OCA" groups="addons"/>
<project name="connector-jira.git" path="addons/OCA_connector-jira" remote="OCA" groups="addons"/>
<project name="connector-telephony.git" path="addons/OCA_connector-telephony" remote="OCA" groups="addons"/>
<project name="connector.git" path="addons/OCA_connector" remote="OCA" groups="addons"/>
<project name="contract.git" path="addons/OCA_contract" remote="OCA" groups="addons,code_generator,image_db"/>
<project name="credit-control.git" path="addons/OCA_credit-control" remote="OCA" groups="addons"/>
<project name="crm.git" path="addons/OCA_crm" remote="OCA" groups="addons"/>
<project name="currency.git" path="addons/OCA_currency" remote="OCA" groups="addons"/>
<project name="data-protection.git" path="addons/OCA_data-protection" remote="OCA" groups="addons"/>
<project name="ddmrp.git" path="addons/OCA_ddmrp" remote="OCA" groups="addons"/>
<project name="delivery-carrier.git" path="addons/OCA_delivery-carrier" remote="OCA" groups="addons"/>
<project name="deltatech.git" path="addons/dhongu_deltatech" remote="dhongu" groups="addons"/>
<project name="design-themes.git" path="addons/odoo_design-themes" remote="odoo" groups="addons,code_generator,image_db"/>
<project name="development.git" path="addons/MathBenTech_development" remote="MathBenTech" groups="addons,base"/>
<project name="documentation-user.git" path="doc/odoo_documentation-user" remote="odoo" groups="odoo"/>
<project name="donation.git" path="addons/OCA_donation" remote="OCA" revision="12.0_module_donation_website" groups="addons"/>
<project name="e-commerce.git" path="addons/OCA_e-commerce" remote="OCA" groups="addons"/>
<project name="edi.git" path="addons/OCA_edi" remote="OCA" groups="addons"/>
<project name="erplibre-3D-printing-addons.git" path="addons/ERPLibre_erplibre-3D-printing-addons" remote="ERPLibre" groups="addons"/>
<project name="erplibre-family-management.git" path="addons/MathBenTech_erplibre-family-management" remote="MathBenTech" groups="addons,code_generator"/>
<project name="erplibre_addons.git" path="addons/ERPLibre_erplibre_addons" remote="ERPLibre" groups="addons,base"/>
<project name="erplibre_theme_addons.git" path="addons/ERPLibre_erplibre_theme_addons" remote="ERPLibre" groups="addons,code_generator,image_db"/>
<project name="event.git" path="addons/OCA_event" remote="OCA" groups="addons"/>
<project name="field-service.git" path="addons/OCA_field-service" remote="OCA" groups="addons"/>
<project name="fleet.git" path="addons/OCA_fleet" remote="OCA" groups="addons"/>
<project name="geospatial.git" path="addons/OCA_geospatial" remote="OCA" groups="addons,code_generator,image_db"/>
<project name="helpdesk.git" path="addons/OCA_helpdesk" remote="OCA" revision="12.0_dev" groups="addons,code_generator,image_db"/>
<project name="hr.git" path="addons/OCA_hr" remote="OCA" groups="addons"/>
<project name="interface-github.git" path="addons/OCA_interface-github" remote="OCA" groups="addons"/>
<project name="knowledge.git" path="addons/OCA_knowledge" remote="OCA" groups="addons"/>
<project name="l10n-canada.git" path="addons/OCA_l10n-canada" remote="OCA" groups="addons"/>
<project name="maintainer-tools.git" path="script/OCA_maintainer-tools" remote="OCA" revision="master" groups="odoo,code_generator"/>
<project name="maintenance.git" path="addons/OCA_maintenance" remote="OCA" groups="addons"/>
<project name="management-system.git" path="addons/OCA_management-system" remote="OCA" groups="addons"/>
<project name="manufacture.git" path="addons/OCA_manufacture" remote="OCA" groups="addons"/>
<project name="margin-analysis.git" path="addons/OCA_margin-analysis" remote="OCA" revision="12.0_sale_margin_editor" groups="addons"/>
<project name="medical-fhir.git" path="addons/tegin_medical-fhir" remote="tegin" groups="addons"/>
<project name="mis-builder.git" path="addons/OCA_mis-builder" remote="OCA" groups="addons"/>
<project name="muk_base.git" path="addons/muk-it_muk_base" remote="muk-it" revision="12.0_dev" groups="addons,base"/>
<project name="muk_dms.git" path="addons/muk-it_muk_dms" remote="muk-it" groups="addons"/>
<project name="muk_docs.git" path="addons/muk-it_muk_docs" remote="muk-it" groups="addons"/>
<project name="muk_misc.git" path="addons/muk-it_muk_misc" remote="muk-it" revision="12.0_dev" groups="addons,base"/>
<project name="muk_quality.git" path="addons/muk-it_muk_quality" remote="muk-it" groups="addons"/>
<project name="muk_web.git" path="addons/muk-it_muk_web" remote="muk-it" revision="12.0_dev" groups="addons,base,code_generator"/>
<project name="muk_website.git" path="addons/muk-it_muk_website" remote="muk-it" revision="12.0_remove_autoinstall" groups="addons,base"/>
<project name="multi-company.git" path="addons/OCA_multi-company" remote="OCA" groups="addons"/>
<project name="odoo-addons.git" path="addons/ajepe_odoo-addons" remote="ajepe" revision="12.0_dev" groups="addons,base"/>
<project name="odoo-base-addons.git" path="addons/Numigi_odoo-base-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-business-spending-management-quebec-canada.git" path="addons/MathBenTech_odoo-business-spending-management-quebec-canada" remote="MathBenTech" groups="addons,base"/>
<project name="odoo-cloud-platform.git" path="addons/camptocamp_odoo-cloud-platform" remote="camptocamp" revision="12.0_dev" groups="addons"/>
<project name="odoo-code-generator-template.git" path="addons/TechnoLibre_odoo-code-generator-template" revision="12.0" remote="TechnoLibre" groups="addons,code_generator,image_db"/>
<project name="odoo-code-generator.git" path="addons/TechnoLibre_odoo-code-generator" remote="TechnoLibre" revision="12.0" groups="addons,code_generator,image_db"/>
<project name="odoo-development.git" path="doc/itpp-labs_odoo-development" remote="itpp-labs" revision="12.0_dev" groups="odoo"/>
<project name="odoo-entertainment-addons.git" path="addons/Numigi_odoo-entertainment-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-git-addons.git" path="addons/Numigi_odoo-git-addons" remote="Numigi" groups="addons"/>
<project name="odoo-formio.git" path="addons/novacode-nl_odoo-formio" remote="novacode-nl" groups="addons"/>
<project name="odoo-hr-addons.git" path="addons/Numigi_odoo-hr-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-module-migrator.git" path="script/OCA_odoo-module-migrator" remote="OCA" revision="master" groups="odoo"/>
<project name="odoo-partner-addons.git" path="addons/Numigi_odoo-partner-addons" remote="Numigi" revision="12.0_dev" groups="addons,base,image_db"/>
<project name="odoo-product-addons.git" path="addons/Numigi_odoo-product-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-port-docs.git" path="doc/itpp-labs_odoo-port-docs" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-product-configurator.git" path="addons/pledra_odoo-product-configurator" remote="pledra" groups="addons"/>
<project name="odoo-project-addons.git" path="addons/Numigi_odoo-project-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-purchase-addons.git" path="addons/Numigi_odoo-purchase-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-stock-addons.git" path="addons/Numigi_odoo-stock-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-survey-addons.git" path="addons/Numigi_odoo-survey-addons" remote="Numigi" groups="addons"/>
<project name="odoo-test-docs.git" path="doc/itpp-labs_odoo-test-docs" remote="itpp-labs" revision="master" groups="odoo"/>
<project name="odoo-timesheet-addons.git" path="addons/Numigi_odoo-timesheet-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
<project name="odoo-web-addons.git" path="addons/Numigi_odoo-web-addons" remote="Numigi" groups="addons,base"/>
<project name="odoo.git" path="odoo" remote="odoo" revision="ERPLibre/12.0" clone-depth="10" groups="odoo,base"/>
<project name="odoo_addons.git" path="addons/Smile-SA_odoo_addons" remote="Smile-SA" revision="12.0_remote_autoinstall" groups="addons"/>
<project name="odoo_dhtmlxgantt.git" path="addons/obayit_odoo_dhtmlxgantt" remote="obayit" groups="addons"/>
<project name="odooapps.git" path="addons/odoomates_odooapps" remote="odoomates" groups="addons"/>
<project name="odooplm.git" path="addons/OmniaGit_odooplm" remote="OmniaGit" groups="addons"/>
<project name="openeducat_erp.git" path="addons/openeducat_openeducat_erp" remote="openeducat" groups="addons"/>
<project name="operating-unit.git" path="addons/OCA_operating-unit" remote="OCA" groups="addons"/>
<project name="partner-contact.git" path="addons/OCA_partner-contact" remote="OCA" groups="addons"/>
<project name="pos-addons.git" path="addons/itpp-labs_pos-addons" remote="itpp-labs" groups="addons"/>
<project name="pos.git" path="addons/OCA_pos" remote="OCA" groups="addons"/>
<project name="product-attribute.git" path="addons/OCA_product-attribute" remote="OCA" groups="addons"/>
<project name="product-pack.git" path="addons/OCA_product-pack" remote="OCA" groups="addons"/>
<project name="product-variant.git" path="addons/OCA_product-variant" remote="OCA" groups="addons"/>
<project name="product_rating_app.git" path="addons/odooaktiv_product_rating_app" remote="odooaktiv" groups="addons"/>
<project name="project-reporting.git" path="addons/OCA_project-reporting" remote="OCA" groups="addons"/>
<project name="project.git" path="addons/OCA_project" remote="OCA" revision="12.0_fix_conflict_project_key" groups="addons"/>
<project name="purchase-workflow.git" path="addons/OCA_purchase-workflow" remote="OCA" groups="addons"/>
<project name="queue.git" path="addons/OCA_queue" remote="OCA" groups="addons"/>
<project name="reporting-engine.git" path="addons/OCA_reporting-engine" remote="OCA" groups="addons"/>
<project name="rma.git" path="addons/OCA_rma" remote="OCA" groups="addons"/>
<project name="saas-addons.git" path="addons/it-projects-llc_saas-addons" remote="it-projects-llc" groups="addons"/>
<project name="sale-reporting.git" path="addons/OCA_sale-reporting" remote="OCA" groups="addons"/>
<project name="sale-workflow.git" path="addons/OCA_sale-workflow" remote="OCA" revision="12.0_modules_sale_order_line" groups="addons"/>
<project name="scrummer.git" path="addons/MathBenTech_scrummer" remote="MathBenTech" revision="12.0_dev" groups="addons,base"/>
<project name="SerpentCS_Contributions.git" path="addons/JayVora-SerpentCS_SerpentCS_Contributions" remote="JayVora-SerpentCS" groups="addons,code_generator,base"/>
<project name="server-auth.git" path="addons/OCA_server-auth" remote="OCA" groups="addons,base,image_db"/>
<project name="server-backend.git" path="addons/OCA_server-backend" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="server-brand.git" path="addons/OCA_server-brand" remote="OCA" groups="addons,base"/>
<project name="server-env.git" path="addons/OCA_server-env" remote="OCA" groups="addons"/>
<project name="server-tools.git" path="addons/OCA_server-tools" remote="OCA" revision="12.0_dev" groups="addons,base"/>
<project name="server-ux.git" path="addons/OCA_server-ux" remote="OCA" groups="addons,base"/>
<project name="social.git" path="addons/OCA_social" remote="OCA" groups="addons,base"/>
<project name="stock-logistics-warehouse.git" path="addons/OCA_stock-logistics-warehouse" remote="OCA" revision="12.0_dev" groups="addons"/>
<project name="storage.git" path="addons/OCA_storage" remote="OCA" groups="addons"/>
<project name="timesheet.git" path="addons/OCA_timesheet" remote="OCA" revision="12.0_support_project_agile_timesheet" groups="addons"/>
<project name="vertical-association.git" path="addons/OCA_vertical-association" remote="OCA" groups="addons"/>
<project name="vertical-hotel.git" path="addons/OCA_vertical-hotel" remote="OCA" groups="addons"/>
<project name="vertical-isp.git" path="addons/OCA_vertical-isp" remote="OCA" groups="addons"/>
<project name="vertical-travel.git" path="addons/OCA_vertical-travel" remote="OCA" groups="addons"/>
<project name="web.git" path="addons/OCA_web" remote="OCA" revision="12.0_dev" groups="addons,base"/>
<project name="website-addons.git" path="addons/itpp-labs_website-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
<project name="website-cms.git" path="addons/OCA_website-cms" remote="OCA" groups="addons"/>
<project name="website.git" path="addons/OCA_website" remote="OCA" revision="12.0_dev" groups="addons,code_generator,image_db"/>
<project name="wms.git" path="addons/OCA_wms" remote="OCA" groups="addons"/>
</manifest>

View file

@ -20,3 +20,4 @@ xlsxwriter
suds-jurko
vatnumber
dns
pypiwin32

View file

@ -0,0 +1,25 @@
chess
csv
dateutil
facturx
formiodata
git
keystoneclient
ldap
mercurial
MySQLdb
paho
pyrfc
python-alipay-sdk
pythonjsonlogger
stdnum
swiftclient
u2flib_server
voicent
xlsxwriter
suds-jurko
vatnumber
dns
dataclasses
extract_msg
pypiwin32

View file

@ -0,0 +1,25 @@
chess
csv
dateutil
facturx
formiodata
git
keystoneclient
ldap
mercurial
MySQLdb
paho
pyrfc
python-alipay-sdk
pythonjsonlogger
stdnum
swiftclient
u2flib_server
voicent
xlsxwriter
suds-jurko
vatnumber
dns
dataclasses
extract_msg
pypiwin32

View file

@ -0,0 +1,16 @@
dateutil
keystoneclient
ldap
swiftclient
cv2
speech_recognition
PIL
en_core_web_sm
googletrans
infobip-api-python-sdk
pygount
dataclasses
pypiwin32
cadquery

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
[build-system]
requires = [ "poetry>=1.1.14",]
requires = [ "poetry>=1.5.0",]
build-backend = "poetry.masonry.api"
[tool.isort]
@ -36,27 +36,28 @@ cachetools = ">=2.0.1"
cerberus = "^1.3.5"
chardet = "5.0.0"
click = "^8.1.7"
cloudflare = "^3.0.1"
cloudflare = "3.0.1"
code-writer = "1.1.1"
colorama = "^0.4.6"
configparser = "5.0.2"
coverage = "7.2.7"
cryptography = "39.0.1"
css-html-prettify = "^2.5.5"
cython = "^3.0.10"
cython = "3.0.10"
ddt = "1.2.0"
decorator = "4.0.10"
dnspython = "2.3.0"
docutils = "0.17.1"
ebaysdk = "2.1.5"
email-validator = "2.0.0"
emoji = "^2.12.1"
emoji = "^2.14.0"
extract-msg = "0.36.1"
factur-x = "^3.1"
feedparser = "6.0.10"
flake8 = "<6.0.0"
formio-data = "^2.0.3"
formio-data = "^2.1.0"
freezegun = "1.2.2"
furo = "2021.2.21b25"
future = "0.18.3"
geojson = "<3.0.0"
gevent = "1.5.0"
@ -90,18 +91,19 @@ oauthlib = "2.1.0"
oca-decorators = "^0.0.1"
odoorpc = "^0.10.1"
ofxparse = "0.16"
olefile = "0.47"
openpyxl = "3.1.3"
openupgradelib = "^3.6.1"
openupgradelib = "^3.7.1"
orjson = "3.6.0"
ovh = "^1.1.2"
ovh = "1.1.2"
paho-mqtt = "^2.1.0"
pandas = "1.3.5"
paramiko = "^3.4.0"
paramiko = "^3.5.0"
passlib = "1.6.5"
pdf2image = "^1.17.0"
pdfminer = "^20191125"
pexpect = "^4.9.0"
phonenumbers = "^8.13.40"
phonenumbers = "^8.13.47"
pillow = "9.3.0"
plotly = "4.1.0"
portalocker = "1.7.1"
@ -122,7 +124,7 @@ pyjsparser = "^2.7.1"
pyjwt = "2.5.0"
pyldap = "2.4.28"
pylint-odoo = "8.0.19"
pymssql = "^2.3.0"
pymssql = "2.3.0"
pymysql = "^1.1.1"
pyotp = "^2.9.0"
pyparsing = "2.1.10"
@ -138,7 +140,7 @@ python-jose = "^3.3.0"
python-json-logger = "0.1.5"
python-keystoneclient = "3.22.0"
python-ldap = "^3.4.4"
python-pptx = "^0.6.23"
python-pptx = "0.6.23"
python-randomword-fr = "^1.0.0"
python-slugify = ">=3.0.2"
python-stdnum = "^1.20"
@ -158,7 +160,8 @@ requests-oauthlib = "1.1.0"
requests-toolbelt = "0.9.1"
responses = "0.23.1"
retrying = "^1.3.4"
sentry-sdk = "^2.8.0"
selenium = "4.11.2"
sentry-sdk = "^2.17.0"
serial = "^0.0.97"
setuptools = "65.5.1"
shapely = "1.8.5"
@ -168,12 +171,12 @@ soappy = "^0.12.22"
sphinx = "3.0"
sphinx-intl = "^2.2.0"
sphinx-rtd-theme = "1.2.2"
sqlalchemy = "^2.0.31"
sqlalchemy = "^2.0.36"
sqlparse = "0.4.4"
statsd = "3.2.1"
toml = "^0.10.2"
tornado = "6.1"
tqdm = "^4.66.4"
tqdm = "^4.66.5"
unidecode = "1.0.22"
unidiff = "^0.7.5"
urllib3 = ">=1.26.13"
@ -193,8 +196,8 @@ xlrd = "1.0.0"
xlsxwriter = "0.9.3"
xlwt = "1.3"
xmlformatter = "^0.2.6"
xmltodict = "^0.13.0"
zeep = "^4.2.1"
xmltodict = "^0.14.2"
zeep = "4.2.1"
zipp = ">=3.6.0"
zxcvbn = "^4.4.28"

View file

@ -0,0 +1,197 @@
[build-system]
requires = [ "poetry>=1.5.0",]
build-backend = "poetry.masonry.api"
[tool.isort]
profile = "black"
py_version = 37
[tool.black]
line-length = 79
target-version = [ "py37",]
[tool.poetry]
name = "ERPLibre"
version = "1.5.0"
description = "Easy way to configure Odoo community"
license = "AGPL-3.0-or-later"
authors = [ "Mathieu Benoit <mathben@technolibre.ca>",]
[tool.poetry.dependencies]
python = "^3.8.10"
acme = "^2.11.0"
agithub = "^2.2.2"
aiohttp = "^3.10.5"
aioshutil = "<1.2"
argcomplete = "^3.5.0"
astor = "0.8.1"
avalara = "^24.8.2"
azure-identity = "1.13.0"
azure-storage-blob = "12.16.0"
babel = "2.9.1"
beautifulsoup4 = "^4.12.3"
bokeh = "2.3.1"
boto3 = ">=1.20.41"
cachetools = "^5.5.0"
chardet = "5.0.0"
chromedriver-binary = "^130.0.6710.0.0"
click = "^8.1.7"
cloudflare = "2.20.0"
colorama = "^0.4.6"
contextvars = "^2.4"
coverage = "^7.6.1"
cryptography = "39.0.1"
css-html-prettify = "^2.5.5"
cython = "^3.0.11"
dateparser = "^1.2.0"
ddt = "1.2.1"
decorator = "4.3.0"
dicttoxml = "^1.7.16"
dnspython = "^2.6.1"
docutils = "0.16.0"
ebaysdk = "2.1.5"
email-validator = "^2.2.0"
emoji = "^2.12.1"
endesive = "^2.17.2"
extract-msg = "0.36.1"
factur-x = "^3.1"
fdfgen = "^0.16.1"
feedparser = "6.0.10"
flake8 = "<6.0.0"
formio-data = "^2.1.0"
freezegun = "0.3.15"
future = "0.18.3"
geojson = "<3.0.0"
gevent = "20.9.0"
gitpython = "3.1.30"
giturlparse = "^0.12.0"
google-api-python-client = "^2.145.0"
google-auth-httplib2 = "^0.2.0"
google-auth-oauthlib = "^1.2.1"
greenlet = "0.4.17"
gst = "^0.1.0"
html2text = "^2024.2.26"
idna = "2.6"
img2pdf = "^0.5.1"
invoice2data = "^0.4.5"
iscompatible = "^0.1.1"
isort = "<5.12.0"
jinja2 = "2.11.3"
josepy = "^1.14.0"
keystoneauth1 = "3.14.0"
libsass = "0.17.0"
lxml = "4.9.1"
mako = "1.2.2"
markupsafe = "1.1.0"
mmg = "1.0.3"
mpld3 = "^0.5.10"
mysqlclient = "2.1.1"
num2words = "0.5.6"
numpy = "1.21.1"
numpy-financial = "<=1.0.0"
odoo-test-helper = "^2.1.1"
odoorpc = "^0.10.1"
ofxparse = "0.19"
openpyxl = "^3.1.5"
openupgradelib = "^3.7.0"
ovh = "1.1.2"
packaging = "21.3"
pandas = "1.3.5"
paramiko = "^3.4.1"
passlib = "1.7.1"
pathspec = "0.12.1"
pdf2image = "^1.17.0"
phonenumbers = "^8.13.45"
pillow = "9.3.0"
plotly = "5.4.0"
polib = "1.1.0"
premailer = "^3.10.0"
prometheus-client = "0.11.0"
psutil = "5.9.0"
psycopg2 = "2.9.5"
py-asterisk = "^0.5.18"
py3o-formats = "^0.3"
py3o-template = "^0.10.0"
pycountry = "^24.6.1"
pydot = "1.4.1"
pyftpdlib = "^2.0.0"
pygithub = "2.3.0"
pygments = "2.7.4"
pygobject = "3.44.1"
pygount = "1.5.1"
pyjwt = "2.5.0"
pyopenssl = "21.0.0"
pypdf = ">=3.1.0"
pypdf2 = "1.27.9"
pyproj = "3.2.1"
pysaml2 = "7.2.1"
pyserial = "3.4"
pysftp = "^0.2.9"
python-chess = "^1.999"
python-dateutil = "2.7.3"
python-git = "^2018.2.1"
python-jose = "^3.3.0"
python-json-logger = "0.1.5"
python-keystoneclient = "3.22.0"
python-ldap = "3.1.0"
python-magic = "^0.4.27"
python-randomword-fr = "^1.0.0"
python-slugify = "^8.0.4"
python-stdnum = "1.8"
python-swiftclient = "3.9.0"
python-u2flib-server = "^5.0.1"
pytz = ">=2022.7"
pyusb = "1.0.2"
pyyaml = "6.0"
pyzbar = "^0.1.9"
qrcode = "6.1"
redis = "3.2.1"
regex = "2022.3.2"
reportlab = "3.6.5"
requests = "2.28.1"
retrying = "^1.3.4"
roulier = "^1.1.1"
selenium = "^4.24.0"
sentry-sdk = "<=1.9.0"
setuptools = "65.5.1"
shapely = "1.8.5"
simplejson = "3.16.0"
sphinx = "4.3.2"
sphinx-intl = "^2.2.0"
sphinx-rtd-theme = "1.3.0"
statsd = "3.2.1"
toml = "^0.10.2"
tqdm = "^4.66.5"
unicodecsv = "^0.14.1"
unidecode = "1.0.23"
unidiff = "^0.7.5"
urllib3 = ">=1.26.13"
uvloop = "^0.20.0"
validators = "0.24.0"
vobject = "0.9.6.1"
voicent-python = "^1.0"
webcolors = "^24.8.0"
websocket-client = "^1.8.0"
werkzeug = "0.16.1"
wheel = "^0.44.0"
win-unicode-console = "^0.5"
xlrd = "1.2.0"
xlsxwriter = "1.1.2"
xlwt = "1.3"
xmlformatter = "^0.2.6"
xmlrunner = "^1.7.7"
xmlschema = "^3.4.0"
xmltodict = "^0.13.0"
zeep = "3.2.0"
zipp = ">=3.6.0"
zxcvbn = "^4.4.28"
[tool.poetry.dev-dependencies]
websocket_client = "^1.1.0"
[tool.poetry.dependencies.black]
git = "https://github.com/psf/black.git"
rev = "22.3.0"
[tool.poetry.dependencies.pylint-odoo]
git = "https://github.com/oca/pylint-odoo.git"

View file

@ -0,0 +1,197 @@
[build-system]
requires = [ "poetry>=1.5.0",]
build-backend = "poetry.masonry.api"
[tool.isort]
profile = "black"
py_version = 37
[tool.black]
line-length = 79
target-version = [ "py37",]
[tool.poetry]
name = "ERPLibre"
version = "1.5.0"
description = "Easy way to configure Odoo community"
license = "AGPL-3.0-or-later"
authors = [ "Mathieu Benoit <mathben@technolibre.ca>",]
[tool.poetry.dependencies]
python = "^3.8.20"
acme = "^2.11.0"
agithub = "^2.2.2"
aiohttp = "^3.10.10"
aioshutil = "<1.2"
argcomplete = "^3.5.1"
astor = "0.8.1"
avalara = "^24.10.0"
azure-identity = "1.13.0"
azure-storage-blob = "12.16.0"
babel = "2.9.1"
beautifulsoup4 = "^4.12.3"
bokeh = "2.3.1"
boto3 = ">=1.20.41"
cachetools = "^5.5.0"
chardet = "5.0.0"
chromedriver-binary = "^132.0.6786.0.0"
click = "^8.1.7"
cloudflare = "2.20.0"
colorama = "^0.4.6"
contextvars = "^2.4"
coverage = "7.6.1"
cryptography = "39.0.1"
css-html-prettify = "^2.5.5"
cython = "^3.0.11"
dateparser = "^1.2.0"
ddt = "1.2.1"
decorator = "4.3.0"
dicttoxml = "^1.7.16"
dnspython = "2.6.1"
docutils = "0.16.0"
ebaysdk = "2.1.5"
email-validator = "^2.2.0"
emoji = "^2.14.0"
endesive = "^2.17.3"
extract-msg = "0.36.1"
factur-x = "^3.1"
fdfgen = "^0.16.1"
feedparser = "6.0.10"
flake8 = "<6.0.0"
formio-data = "^2.1.0"
freezegun = "0.3.15"
future = "0.18.3"
geojson = "<3.0.0"
gevent = "20.9.0"
gitpython = "3.1.30"
giturlparse = "^0.12.0"
google-api-python-client = "^2.149.0"
google-auth-httplib2 = "^0.2.0"
google-auth-oauthlib = "^1.2.1"
greenlet = "0.4.17"
gst = "^0.1.0"
html2text = "^2024.2.26"
idna = "2.6"
img2pdf = "^0.5.1"
invoice2data = "^0.4.5"
iscompatible = "^0.1.1"
isort = "<5.12.0"
jinja2 = "2.11.3"
josepy = "^1.14.0"
keystoneauth1 = "3.14.0"
libsass = "0.17.0"
lxml = "4.9.1"
mako = "1.2.2"
markupsafe = "1.1.0"
mmg = "1.0.3"
mpld3 = "^0.5.10"
mysqlclient = "2.1.1"
num2words = "0.5.6"
numpy = "1.21.1"
numpy-financial = "<=1.0.0"
odoo-test-helper = "^2.1.1"
odoorpc = "^0.10.1"
ofxparse = "0.19"
openpyxl = "^3.1.5"
openupgradelib = "^3.7.1"
ovh = "1.1.2"
packaging = "21.3"
pandas = "1.3.5"
paramiko = "^3.5.0"
passlib = "1.7.1"
pathspec = "0.12.1"
pdf2image = "^1.17.0"
phonenumbers = "^8.13.47"
pillow = "9.3.0"
plotly = "5.4.0"
polib = "1.1.0"
premailer = "^3.10.0"
prometheus-client = "0.11.0"
psutil = "5.9.0"
psycopg2 = "2.9.5"
py-asterisk = "^0.5.18"
py3o-formats = "^0.3"
py3o-template = "^0.10.0"
pycountry = "^24.6.1"
pydot = "1.4.1"
pyftpdlib = "^2.0.0"
pygithub = "2.3.0"
pygments = "2.7.4"
pygobject = "3.44.1"
pygount = "1.5.1"
pyjwt = "2.5.0"
pyopenssl = "21.0.0"
pypdf = ">=3.1.0,<5.0"
pypdf2 = "1.27.9"
pyproj = "3.2.1"
pysaml2 = "7.2.1"
pyserial = "3.4"
pysftp = "^0.2.9"
python-chess = "^1.999"
python-dateutil = "2.7.3"
python-git = "^2018.2.1"
python-jose = "^3.3.0"
python-json-logger = "0.1.5"
python-keystoneclient = "3.22.0"
python-ldap = "3.1.0"
python-magic = "^0.4.27"
python-randomword-fr = "^1.0.0"
python-slugify = "^8.0.4"
python-stdnum = "1.8"
python-swiftclient = "3.9.0"
python-u2flib-server = "^5.0.1"
pytz = ">=2022.7"
pyusb = "1.0.2"
pyyaml = "6.0"
pyzbar = "^0.1.9"
qrcode = "6.1"
redis = "3.2.1"
regex = "2022.3.2"
reportlab = "3.6.5"
requests = "2.28.1"
retrying = "^1.3.4"
roulier = "^1.1.1"
selenium = "^4.25.0"
sentry-sdk = "<=1.9.0"
setuptools = "65.5.1"
shapely = "1.8.5"
simplejson = "3.16.0"
sphinx = "4.3.2"
sphinx-intl = "^2.2.0"
sphinx-rtd-theme = "1.3.0"
statsd = "3.2.1"
toml = "^0.10.2"
tqdm = "^4.66.5"
unicodecsv = "^0.14.1"
unidecode = "1.0.23"
unidiff = "^0.7.5"
urllib3 = ">=1.26.13"
uvloop = "^0.21.0"
validators = "0.24.0"
vobject = "0.9.6.1"
voicent-python = "^1.0"
webcolors = "^24.8.0"
websocket-client = "^1.8.0"
werkzeug = "0.16.1"
wheel = "^0.44.0"
win-unicode-console = "^0.5"
xlrd = "1.1.0"
xlsxwriter = "1.1.2"
xlwt = "1.3"
xmlformatter = "^0.2.6"
xmlrunner = "^1.7.7"
xmlschema = "^3.4.2"
xmltodict = "^0.14.2"
zeep = "3.2.0"
zipp = ">=3.6.0"
zxcvbn = "^4.4.28"
[tool.poetry.dev-dependencies]
websocket_client = "^1.1.0"
[tool.poetry.dependencies.black]
git = "https://github.com/psf/black.git"
rev = "22.3.0"
[tool.poetry.dependencies.pylint-odoo]
git = "https://github.com/oca/pylint-odoo.git"

View file

@ -0,0 +1,205 @@
[build-system]
requires = [ "poetry>=1.8.3",]
build-backend = "poetry.masonry.api"
[tool.isort]
profile = "black"
py_version = 37
[tool.black]
line-length = 79
target-version = [ "py37",]
[tool.poetry]
name = "ERPLibre"
version = "1.5.0"
description = "Easy way to configure Odoo community"
license = "AGPL-3.0-or-later"
authors = [ "Mathieu Benoit <mathben@technolibre.ca>",]
[tool.poetry.dependencies]
python = "^3.10.14"
agithub = "^2.2.2"
argcomplete = "^3.5.1"
asana = "^5.0.10"
asn1crypto = "^1.5.1"
astor = "^0.8.1"
avalara = "^24.10.0"
azure-identity = "1.13.0"
azure-storage-blob = "12.16.0"
babel = "2.9.1"
base64io = "^1.0.3"
beautifulsoup4 = "^4.12.3"
bokeh = "3.1.1"
boto3 = "1.26.7"
bs4 = "^0.0.2"
cachetools = "^5.5.0"
cairosvg = "^2.7.1"
chardet = "4.0.0"
clicksend-client = "^5.0.78"
cloudflare = "^3.1.0"
cmake = "^3.30.5"
colorama = "^0.4.6"
countryinfo = "^0.1.2"
cryptography = "3.4.8"
cybersource-rest-client-python = "0.0.56"
cython = "^3.0.11"
decorator = "4.4.2"
dlib = "^19.24.6"
docutils = "0.16"
dotty-dict = "^1.3.1"
dropbox = "^12.0.2"
ebaysdk = "2.1.5"
email-validator = "^2.2.0"
endesive = "^2.17.3"
extract-msg = "^0.51.1"
ezdxf = "^1.3.4"
face-recognition = "^1.3.0"
factur-x = "^3.1"
filetype = "^1.2.0"
formio-data = "^2.1.0"
freezegun = "0.3.15"
fsspec = ">=2024.5.0"
gdown = "^5.2.0"
geocoder = "^1.38.1"
geojson = "^3.1.0"
geopy = "^2.4.1"
gevent = "21.8.0"
gitpython = "3.1.30"
giturlparse = "^0.12.0"
googletrans-py = "4.0.0"
greenlet = "1.1.2"
gst = "^0.1.0"
httpagentparser = "1.8.1"
hubspot-api-client = "^10.0.0"
idna = "2.10"
iscompatible = "^0.1.1"
jinja2 = "2.11.3"
keystoneauth1 = "5.0.0"
libsass = "0.20.1"
linkedin = "^0.1.5"
lottie = "^0.7.1"
lxml = "4.6.5"
lxml-html-clean = "^0.3.1"
mako = "^1.3.5"
markupsafe = "1.1.1"
matplotlib = "^3.9.2"
mechanize = "^0.4.10"
messagebird = "^2.2.0"
mock = "^5.1.0"
mpld3 = "0.5.9"
mysqlclient = "^2.2.5"
nextcloud-api-wrapper = "^0.2.3"
num2words = "0.5.13"
numpy = ">=1.15"
numpy-financial = "<=1.0.0"
numpy-stl = "^3.1.2"
odoo-test-helper = "^2.1.1"
odoorpc = "^0.10.1"
ofxparse = "0.21"
ofxtools = "^0.9.5"
openai = "^1.52.0"
opencv-python = "^4.10.0.84"
openpyxl = "^3.1.5"
pandas = ">=0.25.3"
paramiko = "^3.5.0"
passlib = "1.7.4"
pathspec = "^0.12.1"
pay-ccavenue = "^1.0.0"
pdf2image = "^1.17.0"
phonenumbers = "^8.13.47"
pillow = "9.0.1"
plotly = "5.13.1"
polib = "1.1.0"
premailer = "^3.10.0"
printnodeapi = "^0.2.0"
prometheus-client = "0.15.0"
psutil = "5.8.0"
psycopg2 = "2.9.2"
py-asterisk = "^0.5.18"
py3dns = "^4.0.2"
py3o-formats = "^0.3"
py3o-template = "^0.10.0"
pyaudio = "^0.2.14"
pycountry = "^24.6.1"
pydifact = "^0.1.7"
pydot = "1.4.2"
pyfcm = "^2.0.7"
pygithub = "^2.4.0"
pygobject = "3.44.1"
pyjwt = "^2.9.0"
pymssql = "<=2.2.5"
pyncclient = "^0.7"
pyopenssl = "20.0.1"
pypdf2 = "1.26.0"
pyrfc6266 = "^1.0.2"
pysaml2 = "^7.5.0"
pyserial = "3.5"
pysftp = "^0.2.9"
pytesseract = "^0.3.13"
python-barcode = "^0.15.1"
python-dateutil = "2.8.1"
python-jose = "^3.3.0"
python-json-logger = "2.0.4"
python-keystoneclient = "5.0.0"
python-ldap = "3.4.0"
python-randomword-fr = "^1.0.0"
python-resize-image = "^1.1.20"
python-slugify = "^8.0.4"
python-stdnum = "1.16"
python-swiftclient = "4.1.0"
python-telegram-bot = "^21.6"
pytz = "^2024.2"
pyusb = "1.0.2"
pyyaml = "6.0"
pyzbar = "^0.1.9"
pyzk = "^0.9"
qrcode = "6.1"
redis = "4.3.4"
reportlab = "3.5.59"
requests = "2.30.0"
requests-toolbelt = "^1.0.0"
responses = "^0.25.3"
retrying = "^1.3.4"
rl-renderpm = "4.0.3"
roulier = "^1.1.1"
schwifty = "2024.4.0"
selenium = "^4.25.0"
sentry-sdk = "<=1.9.0"
shapely = "^2.0.6"
simplejson = "^3.19.3"
spacy = "^3.8.2"
speechrecognition = "3.10.0"
sqlalchemy = "^2.0.36"
statsd = "4.0.1"
telesign = "^2.2.3"
telnyx = "^2.1.3"
todoist-python = "^8.1.4"
toml = "^0.10.2"
tweepy = "^4.14.0"
twilio = "^9.3.4"
unidecode = "^1.3.8"
unidiff = "^0.7.5"
urllib3 = "1.26.5"
uvloop = "^0.21.0"
validate-email = "^1.3"
vobject = "0.9.6.1"
vonage = "^3.17.1"
werkzeug = "2.0.2"
wheel = "^0.44.0"
xlrd = "1.2.0"
xlsxwriter = "1.4.5"
xlwt = "1.3.0"
xmltodict = "0.13.0"
zeep = "4.0.0"
[tool.poetry.dev-dependencies]
websocket_client = "^1.1.0"
[tool.poetry.dependencies.black]
git = "https://github.com/psf/black.git"
rev = "24.8.0"
[tool.poetry.dependencies.openupgradelib]
git = "https://github.com/OCA/openupgradelib"
rev = "master"

View file

@ -24,6 +24,7 @@ factur-x
# For ERPLibre project
RandomWords
selenium==4.11.2
# For testing
websocket-client
@ -59,7 +60,11 @@ webcolors==1.13
openpyxl==3.1.3
# For deployment
cloudflare
cloudflare==3.0.1
# Fix build
pymssql==2.3.0
cython==3.0.10
# For multilang_md.py
click
@ -71,7 +76,7 @@ shapely==1.8.5
# Code generator
mysqlclient==2.1.1
python-pptx
python-pptx==0.6.23
humanize==4.6.0
# pyproj >=3.3.0 is not compatible with python 3.7
@ -89,6 +94,9 @@ numpy==1.21.1
feedparser==6.0.10
geojson<3.0.0
# Fix poetry
olefile==0.47
# asyncio
aioshutil<1.2
tqdm
@ -103,6 +111,11 @@ extract-msg==0.36.1
extract_msg==0.36.1
# Limitation because python3.7
furo==2021.2.21b25
ovh==1.1.2
#requests-oauthlib==1.3.1
greenlet==0.4.14
gevent==1.5.0
argcomplete==3.1.1
responses==0.23.1
dnspython==2.3.0
@ -129,6 +142,7 @@ azure.identity==1.15.0
azure-storage-blob==12.19.0
azure.storage.blob==12.19.0
sqlparse==0.4.4
zeep==4.2.1
# Force version for security update
pyyaml==6.0

View file

@ -0,0 +1,139 @@
# For script
giturlparse
agithub
GitPython==3.1.30
retrying
xmltodict
openupgradelib
unidiff
colorama
wheel
mmg==1.0.3
selenium
# For OSX
cython
# For Odoo
wheel
phonenumbers
# Force update version to latest, no break update
pytz>=2022.7
# For OCA
factur-x
# For smile
xmlrunner
# For testing
websocket-client
python-stdnum
python-u2flib_server
python-chess
python-git
voicent-python
python-swiftclient
python-keystoneclient
coverage
# For logical test
docutils==0.16.0
flake8<6.0.0
git+https://github.com/oca/pylint-odoo.git
# oca-maintainers-tools
# git+https://github.com/OCA/maintainer-tools.git#egg=oca-maintainers-tools
xmlformatter
css-html-prettify
BeautifulSoup4
git+https://github.com/psf/black.git@22.3.0
isort<5.12.0
# For updating poetry
toml
iscompatible
pandas==1.3.5
Jinja2==2.11.3
python-keystoneclient==3.22.0
# For deployment
cloudflare==2.20.0
# For multilang_md.py
click
emoji
# Fix bug geoengine
# https://github.com/OCA/geospatial/issues/318
shapely==1.8.5
# Code generator
mysqlclient==2.1.1
# pyproj >=3.3.0 is not compatible with python 3.7
pyproj==3.2.1
# to fix build
validators==0.24.0
sphinx==4.3.2
# Fix error
greenlet==0.4.17
gevent==20.9.0
# For some module
img2pdf
# fix zipp depend on importlib-metadata
zipp>=3.6.0
# Upgrade psycopg for better support python3
psycopg2==2.9.5
# Force update dependency to fix poetry
# numpy >=1.22 is not compatible with python 3.7
numpy==1.21.1
feedparser==6.0.10
geojson<3.0.0
regex==2022.3.2
pygount==1.5.1
pysaml2==7.2.1
gevent==1.5.0
freezegun==0.3.15
pyopenssl==21.0.0
ovh==1.1.2
sphinx-rtd-theme==1.3.0
sphinx_rtd_theme==1.3.0
dnspython==2.6.1
coverage==7.6.1
# asyncio
aioshutil<1.2
tqdm
uvloop
# Solve pcodedmp, oletools, rtfde and extract-msg
win_unicode_console
# Security issue, depend on extract-msg 0.36.1
chardet==5.0.0
extract-msg==0.36.1
# Force version for security update
pyyaml==6.0
lxml==4.9.1
cryptography==39.0.1
psutil==5.9.0
Pillow==9.3.0
Babel==2.9.1
reportlab==3.6.5
urllib3>=1.26.13
requests==2.28.1
boto3>=1.20.41
PyPDF2==1.27.9
mako==1.2.2
pyjwt==2.5.0
pygments==2.7.4
setuptools==65.5.1
Werkzeug==0.16.1
future==0.18.3

View file

@ -0,0 +1,74 @@
# ERPLibre Poetry requirement
iscompatible
toml
# ERPLibre script
giturlparse
agithub
GitPython==3.1.30
retrying
xmltodict
openupgradelib
unidiff
colorama
wheel
cloudflare
selenium
# mmg # depend on weasyprint 59.0 and depend on old version pillow 9.0.1
uvloop
# For OSX
cython
# Module voice_to_text
SpeechRecognition==3.10.0
# Module detect_unauthorized_login
opencv-python
# Module advanced_payment_cybersource
cybersource-rest-client-python==0.0.56
# Module translation_helper
googletrans-py==4.0.0
#googletrans==4.0.0-rc1
#chardet==3.0.4
#openai==1.20.0
# Module infobip_whatsapp_integration
# Ignore it, need another version of requests
# infobip-api-python-sdk==5.0.0
# Module extra unknown name
filetype
PyPDF2
# For logical test and quality
git+https://github.com/psf/black.git@24.8.0
# For python 3.10 from odoo/requirements.txt, poetry_update.py cannot support python_version
cryptography==3.4.8
freezegun==0.3.15
gevent==21.8.0
greenlet==1.1.2
Jinja2==2.11.3
libsass==0.20.1
lxml==4.6.5
MarkupSafe==1.1.1
ofxparse==0.21
Pillow==9.0.1
psutil==5.8.0
psycopg2==2.9.2
pyopenssl==20.0.1
PyPDF2==1.26.0
python-ldap==3.4.0
pyusb==1.0.2
requests==2.30.0
reportlab==3.5.59
urllib3==1.26.5
Werkzeug==2.0.2
xlrd==1.2.0
# Force python 3.10 over odoo/requirements.txt to remove warning
num2words==0.5.13
xlsxwriter==1.4.5

View file

@ -4,9 +4,18 @@ Color_Off='\033[0m' # Text Reset
# $1 BD NAME
# $2 file_path
./script/addons/install_addons.sh "$1" "$(<$2)"
# If addons is separate by ,
# ./script/addons/install_addons.sh "$1" "$(<$2)"
# If addons is separate by endline
# Read the file, put all line into string separate by ,
resultat=$(grep -v '^$' $2 | tr '\n' ',' | sed 's/,$//')
echo "Install modules ${resultat}"
./script/addons/install_addons.sh "$1" "$resultat"
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo -e "${Red}Error${Color_Off} ./script/addons/install_addons.sh into install_addons_from_file.sh"
echo -e "${Red}Error${Color_Off} ./script/addons/install_addons.sh into install_addons_from_file.sh"
exit 1
fi

View file

@ -39,7 +39,6 @@ SUGGESTION
parser.add_argument("-d", "--database", help="Database to manipulate.")
parser.add_argument(
"--image",
default="erplibre_base",
help=(
"Image name to restore, from directory image_db, filename without"
" '.zip'. Example, use erplibre_base to use image"
@ -77,6 +76,11 @@ def main():
arg_base = "./.venv/bin/python3 ./odoo/odoo-bin db"
if not config.image:
with open(".odoo-version", "r") as f:
odoo_version = f.readline()
config.image = f"odoo{odoo_version}_base"
# check if it needs master password from config file
has_config_file = True
config_path = "./config.conf"

390
script/database/image_db.py Executable file
View file

@ -0,0 +1,390 @@
#!/usr/bin/env python3
# © 2021-2024 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import argparse
import logging
import os
from collections import defaultdict
import uuid
import time
import json
import sys
import subprocess
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
_logger = logging.getLogger(__name__)
PYTHON_BIN = ".venv/bin/python3"
IMAGE_DB_BIN = f"{PYTHON_BIN} ./script/database/image_db.py"
def get_config():
"""Parse command line arguments, extracting the config file name,
returning the union of config file and command line arguments
:return: dict of config file settings and command line arguments
"""
# TODO update description
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description="""\
DESCRIPTION
Create image for database restoration to increase speed. Check file
SUGGESTION
./script/database/image_db.py --image erplibre_base --odoo_version 16.0
""",
epilog="""\
""",
)
parser.add_argument(
"--image",
help=(
"Image name to restore, from directory image_db, filename without"
" '.zip'. Example, use erplibre_base to use image"
" erplibre_base.zip. Default value is erplibre_base"
),
)
parser.add_argument(
"--odoo_version",
help=(
"Force Odoo version, example 12.0 or 16.0, if empty, use from"
" .odoo-version file"
),
)
parser.add_argument(
"--generate_list_only",
action="store_true",
help=(
"Generate list command in bash to run all package from"
" odoo_version"
),
)
parser.add_argument(
"--generate_bash_cmd_parallel",
action="store_true",
help=(
"Generate list with parallel command in bash to run all package"
" from odoo_version"
),
)
parser.add_argument(
"--show_list_only",
action="store_true",
help="Show list of all package about Odoo version",
)
parser.add_argument(
"--check_addons_exist",
action="store_true",
help=(
"Will return an error and stop execution if detect a non existing"
" addons from actual odoo version."
),
)
parser.add_argument(
"--keep_database",
action="store_true",
help="Keep temporary database",
)
args = parser.parse_args()
return args
def main():
config = get_config()
if not config.odoo_version:
# Fill it from system
filename_odoo_version = ".odoo-version"
if not os.path.isfile(filename_odoo_version):
_logger.error(f"Missing file {filename_odoo_version}")
sys.exit(1)
with open(".odoo-version", "r") as f:
config.odoo_version = f.readline()
# Open configuration file
config_file = os.path.join("conf", f"module_list_image_db_odoo.json")
if not os.path.exists(config_file):
_logger.error(f"Configuration file {config_file} does not exist.")
sys.exit(1)
with open(config_file, "r") as f:
dct_config_all_image = json.load(f)
odoo_prefix_version = f"odoo{config.odoo_version}"
if config.show_list_only:
lst_image_to_show = set()
for image_db_name, dct_image_db in dct_config_all_image.items():
if not image_db_name.startswith(
odoo_prefix_version
) or dct_image_db.get("disable"):
continue
# First always need to be a base
image_list = dct_image_db.get("image_list")
for dct_image in image_list:
pkg_name = dct_image.get("pkg_name")
if pkg_name:
sub_image_db_name = f"{image_db_name}_{pkg_name}"
else:
sub_image_db_name = image_db_name
lst_image_to_show.add(sub_image_db_name)
lst_to_show = sorted(lst_image_to_show)
for image_to_show in lst_to_show:
print(image_to_show)
sys.exit(0)
if config.generate_list_only:
for image_db_name, dct_image_db in dct_config_all_image.items():
if not image_db_name.startswith(
odoo_prefix_version
) or dct_image_db.get("disable"):
continue
# First always need to be a base
print(
f"{IMAGE_DB_BIN} --odoo_version"
f" {config.odoo_version} --image {image_db_name}"
)
sys.exit(0)
if config.check_addons_exist:
lst_module_to_check = set()
for image_db_name, dct_image_db in dct_config_all_image.items():
if not image_db_name.startswith(
odoo_prefix_version
) or dct_image_db.get("disable"):
continue
lst_image_list = dct_image_db.get("image_list")
for dct_image_config in lst_image_list:
lst_module = dct_image_config.get("module")
lst_module_to_check.update(lst_module)
lst_module_missing = []
for module_to_check in lst_module_to_check:
cmd_check = (
f"{PYTHON_BIN} ./script/addons/check_addons_exist.py -m"
f" {module_to_check}"
)
status = run_cmd(cmd_check, quiet=True, sys_exit=False)
if status:
lst_module_missing.append(module_to_check)
if lst_module_missing:
print(f"Missing module :")
print(sorted(lst_module_missing))
sys.exit(1)
else:
print("No module missing")
sys.exit(0)
if config.generate_bash_cmd_parallel:
dct_depend_image = defaultdict(list)
lst_total_image = []
lst_distribute_image = []
lst_queue_parallel = []
dct_image_delay = defaultdict(int)
# Search dependency
for image_db_name, dct_image_db in dct_config_all_image.items():
if not image_db_name.startswith(
odoo_prefix_version
) or dct_image_db.get("disable"):
continue
if image_db_name in lst_total_image:
_logger.error(f"Duplicate image_db_name: {image_db_name}")
sys.exit(1)
base_name = dct_image_db.get("base", "")
dct_depend_image[base_name].append(image_db_name)
lst_total_image.append(image_db_name)
dct_image_delay[image_db_name] = dct_image_db.get("delay", 0)
# Reorder it
max_iter = 1000
i = 0
while dct_depend_image and i < max_iter:
i += 1
if "" in dct_depend_image.keys():
# Get from empty key for root dependency
lst_module = dct_depend_image.get("")
lst_queue_parallel.append(lst_module)
lst_distribute_image = lst_module[:]
del dct_depend_image[""]
else:
# Search if dependency already into list
lst_module = []
lst_key_to_delete = []
lst_distribute_image_to_append = []
for key_to_check, lst_value in dct_depend_image.items():
if key_to_check in lst_distribute_image:
# Dependency find
# Search for delay
has_delay = False
for value_module in lst_value:
delay = dct_image_delay.get(value_module)
if delay:
has_delay = True
dct_image_delay[value_module] = delay - 1
elif value_module not in lst_distribute_image:
lst_distribute_image_to_append.append(
value_module
)
lst_module.append(value_module)
if not has_delay:
lst_key_to_delete.append(key_to_check)
lst_distribute_image.extend(lst_distribute_image_to_append)
if lst_module:
lst_queue_parallel.append(lst_module)
for key_to_delete in lst_key_to_delete:
del dct_depend_image[key_to_delete]
# not finish to empty the queue
if dct_depend_image:
_logger.info("Missing dependencies, auto-run all image generation for last execution")
for depend_image, lst_module in dct_depend_image.items():
lst_queue_parallel.append(lst_module)
# print command to execute
lst_cmd = []
for lst_mod in lst_queue_parallel:
if not lst_mod:
continue
str_module = " ".join(lst_mod)
cmd = f"echo 'Generate imageDB : [{str_module}]'\n"
if len(lst_mod) > 1:
cmd += "parallel ::: " + " ".join(
[
f'"{IMAGE_DB_BIN} --odoo_version'
f' {config.odoo_version} --image {a}"'
for a in lst_mod
]
)
else:
cmd += (
f"{IMAGE_DB_BIN} --odoo_version"
f" {config.odoo_version} --image {lst_mod[0]}"
)
cmd += "\nstatus=$?; [ $status -ne 0 ] && exit $status"
lst_cmd.append(cmd)
print("\n".join(lst_cmd))
sys.exit(0)
image_name_to_generate = (
config.image if config.image else f"{odoo_prefix_version}_base"
)
dct_config_image = dct_config_all_image.get(image_name_to_generate)
if not dct_config_image:
_logger.error(f"Cannot retrieve image name '{image_name_to_generate}'")
sys.exit(1)
if dct_config_image.get("disable"):
_logger.info("Ignore this image DB generation, because it's disabled.")
sys.exit(1)
bd_temp_name = (
f"temp_img_create_{image_name_to_generate}_{uuid.uuid4().hex[:6]}"
)
# Summary
# Step 0, drop and restore
# Step 1, install addons
# Step 2, uninstall if need it
# Step 3, install theme
# Step 4, create image_db by backup
# Step 5, loop to 1 with same bd name
base_image_name = dct_config_image.get("base")
all_temp_bd = []
# Step 0, drop and restore
cmd_drop_db = (
f"{PYTHON_BIN} ./odoo/odoo-bin db --drop --database {bd_temp_name}"
)
all_temp_bd.append(bd_temp_name)
run_cmd(cmd_drop_db)
if not base_image_name or base_image_name == image_name_to_generate:
with_demo = dct_config_image.get("with_demo")
# Create a new one
cmd = (
f"{PYTHON_BIN} ./odoo/odoo-bin db --create --database"
f" {bd_temp_name}"
)
if with_demo:
cmd += " --demo"
else:
cmd = (
"./script/database/db_restore.py --database"
f" {bd_temp_name} --image {base_image_name}"
)
run_cmd(cmd)
for dct_value in dct_config_image.get("image_list"):
pkg_name = dct_value.get("pkg_name", "")
# Step 1, install addons
lst_module = ",".join(dct_value.get("module"))
cmd = f"./script/addons/install_addons.sh {bd_temp_name} {lst_module}"
run_cmd(cmd)
# Step 2, uninstall if need it
# Step 3, install theme
module_theme = dct_value.get("theme")
if module_theme:
cmd = (
"./script/addons/install_addons_theme.sh"
f" {bd_temp_name} {module_theme}"
)
run_cmd(cmd)
# Step 4, create image_db by backup
module_image_name = (
image_name_to_generate
if not pkg_name
else f"{image_name_to_generate}_{pkg_name}"
)
cmd = (
f"{PYTHON_BIN} ./odoo/odoo-bin db --backup --database"
f" {bd_temp_name} --restore_image {module_image_name}"
)
run_cmd(cmd)
# Step 5, loop to 1 with same bd name for next package
# Step 6, clean if ask
if not config.keep_database:
for db_name in all_temp_bd:
cmd_drop_db = (
f"{PYTHON_BIN} ./odoo/odoo-bin db --drop --database {db_name}"
)
run_cmd(cmd_drop_db)
def run_cmd(cmd, quiet=False, sys_exit=True):
# status = os.system(cmd)
# if status != 0:
# _logger.error(f"Command failed : '{cmd}'")
# sys.exit(status)
if not quiet:
_logger.info(f"Run cmd: {cmd}")
debut = time.time()
process = subprocess.Popen(
cmd,
shell=True,
text=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
stdout, stderr = process.communicate()
fin = time.time()
status_code = process.returncode
if stderr and not quiet:
_logger.error(stderr)
execution_time = fin - debut
if not quiet:
_logger.info(f"Time execution: {execution_time:.2f} seconds\n")
if status_code != 0:
if not quiet:
_logger.error(f"Command failed : '{cmd}'")
if sys_exit:
sys.exit(status_code)
return status_code
if __name__ == "__main__":
main()

View file

@ -3,6 +3,15 @@
Red='\033[0;31m' # Red
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)
POETRY_VERSION=$(cat .poetry-version|xargs)
IS_DEBIAN_BOOKWORM=true
IS_DEBIAN_BULLSEYE=true
# or IS_DEBIAN_BUSTER
ARGS=""
IS_RELEASE=false
IS_RELEASE_ALPHA=false
@ -10,6 +19,8 @@ IS_RELEASE_BETA=false
ERPLIBRE_DOCKER_BASE="technolibre/erplibre-base"
ERPLIBRE_DOCKER_PROD="technolibre/erplibre"
output_version=""
for arg in "$@"
do
if [ "$arg" == "--no-cache" ]
@ -24,9 +35,35 @@ do
elif [ "$arg" == "--release_beta" ]
then
IS_RELEASE_BETA=true
elif [ "$arg" == "--odoo_16" ]
then
output_version=$(python ./script/version/get_version.py --odoo_version 16.0)
elif [ "$arg" == "--odoo_14" ]
then
IS_DEBIAN_BOOKWORM=false
IS_DEBIAN_BULLSEYE=false
output_version=$(python ./script/version/get_version.py --odoo_version 14.0)
elif [ "$arg" == "--odoo_12" ]
then
IS_DEBIAN_BOOKWORM=false
IS_DEBIAN_BULLSEYE=false
output_version=$(python ./script/version/get_version.py --odoo_version 12.0)
fi
done
if [ "$output_version" != "" ]; then
ODOO_VERSION=$(echo "$output_version" | awk 'NR==1')
POETRY_VERSION=$(echo "$output_version" | awk 'NR==2')
PYTHON_VERSION=$(echo "$output_version" | awk 'NR==3')
ERPLIBRE_VERSION_MAIN=$(echo "$output_version" | awk 'NR==4')
fi
echo "Build with"
echo $ERPLIBRE_VERSION_MAIN
echo $ODOO_VERSION
echo $PYTHON_VERSION
echo $POETRY_VERSION
if [ "$IS_RELEASE_ALPHA" == true ]
then
# Add commit hash when release alpha
@ -44,11 +81,14 @@ fi
ERPLIBRE_DOCKER_BASE_VERSION="${ERPLIBRE_DOCKER_BASE}:${ERPLIBRE_VERSION}"
ERPLIBRE_DOCKER_PROD_VERSION="${ERPLIBRE_DOCKER_PROD}:${ERPLIBRE_VERSION}"
ERPLIBRE_VERSION_MAIN="odoo${ODOO_VERSION}_python${PYTHON_VERSION}"
echo "Create docker ${ERPLIBRE_DOCKER_PROD_VERSION}"
# Rewrite docker-compose
./script/docker/docker_update_version.py --version=${ERPLIBRE_VERSION} --base=${ERPLIBRE_DOCKER_BASE} --prod=${ERPLIBRE_DOCKER_PROD}
./script/docker/docker_update_version.py --version=${ERPLIBRE_VERSION} --base=${ERPLIBRE_DOCKER_BASE} --prod=${ERPLIBRE_DOCKER_PROD} --ignore_edit_docker
ARGS="${ARGS} --build-arg ERPLIBRE_VERSION=${ERPLIBRE_VERSION_MAIN} --build-arg ODOO_VERSION=${ODOO_VERSION} --build-arg POETRY_VERSION=${POETRY_VERSION} --build-arg ERPLIBRE_IMAGE_NAME=${ERPLIBRE_VERSION} --build-arg PYTHON_VERSION=${PYTHON_VERSION}"
retVal=$?
if [[ $retVal -ne 0 ]]; then
@ -58,8 +98,15 @@ fi
cd docker
ARGS="${ARGS} --build-arg=WORKING_BRANCH=$(git rev-parse --abbrev-ref HEAD) --build-arg=WORKING_HASH=$(git rev-parse --verify HEAD)"
ARGS="${ARGS} --build-arg WORKING_BRANCH=$(git rev-parse --abbrev-ref HEAD) --build-arg WORKING_HASH=$(git rev-parse --verify HEAD)"
if [ "$IS_DEBIAN_BOOKWORM" == true ]; then
ARGS="${ARGS} --build-arg DEBIAN_NAME=bookworm --build-arg URL_WKHTMLTOX=github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb --build-arg SHA1SUM_WKTHMLTOX=e9f95436298c77cc9406bd4bbd242f4771d0a4b2"
elif [ "$IS_DEBIAN_BOOKWORM" != true ]; then
ARGS="${ARGS} --build-arg DEBIAN_NAME=bullseye --build-arg URL_WKHTMLTOX=github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.bullseye_amd64.deb --build-arg SHA1SUM_WKTHMLTOX=cecbf5a6abbd68d324a7cd6c51ec843d71e98951"
elif [ "IS_DEBIAN_BULLSEYE" != true ]; then
ARGS="${ARGS} --build-arg DEBIAN_NAME=buster --build-arg URL_WKHTMLTOX=github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb --build-arg SHA1SUM_WKTHMLTOX=d9f259a67e05e1c221d48b504453645e6c491fab"
fi
set -e
# Build base

View file

@ -51,6 +51,11 @@ def get_config():
default="./docker/Dockerfile.prod.pkg",
help="Docker prod file to update.",
)
parser.add_argument(
"--ignore_edit_docker",
action="store_true",
help="Will not edit dockerfile.",
)
args = parser.parse_args()
args.base_version = f"{args.base}:{args.version}"
args.prod_version = f"{args.prod}:{args.version}"
@ -119,7 +124,8 @@ def edit_docker_prod(config):
def main():
config = get_config()
edit_text(config)
edit_docker_prod(config)
if not config.ignore_edit_docker:
edit_docker_prod(config)
if __name__ == "__main__":

View file

@ -12,8 +12,6 @@ EL_CONFIG_FILE="${EL_HOME}/config.conf"
#EL_MINIMAL_ADDONS="False"
#EL_INSTALL_NGINX="True"
echo -e "* Create server config file"
touch "${EL_CONFIG_FILE}"
echo -e "* Creating server config file"
printf '[options] \n; This is the password that allows database operations:\n' > "${EL_CONFIG_FILE}"
@ -25,152 +23,117 @@ printf "db_password = False\n" >> "${EL_CONFIG_FILE}"
printf "xmlrpc_port = ${EL_PORT}\n" >> "${EL_CONFIG_FILE}"
printf "longpolling_port = ${EL_LONGPOLLING_PORT}\n" >> "${EL_CONFIG_FILE}"
printf "addons_path = ${EL_HOME_ODOO}/addons,${EL_HOME}/addons/addons," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons/OCA_web," >> "${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/CybroOdoo_OpenHRMS," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/ERPLibre_erplibre-3D-printing-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/ERPLibre_erplibre_addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/ERPLibre_erplibre_theme_addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/JayVora-SerpentCS_SerpentCS_Contributions," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/MathBenTech_QuotationRevision," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/MathBenTech_development," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/MathBenTech_erplibre-family-management," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/MathBenTech_odoo-business-spending-management-quebec-canada," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/MathBenTech_scrummer," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-base-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-entertainment-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-git-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-hr-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-partner-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-product-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-project-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-purchase-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-stock-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-survey-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-timesheet-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Numigi_odoo-web-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-analytic," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-budgeting," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-closing," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-consolidation," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-financial-reporting," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-financial-tools," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-fiscal-rule," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-invoice-reporting," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-invoicing," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-payment," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_account-reconcile," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_apps-store," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_bank-payment," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_bank-statement-import," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_brand," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_business-requirement," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_commission," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_community-data-files," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_connector," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_connector-ecommerce," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_connector-interfaces," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_connector-jira," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_connector-telephony," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_contract," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_credit-control," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_crm," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_currency," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_data-protection," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_ddmrp," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_delivery-carrier," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_donation," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_e-commerce," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_edi," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_event," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_field-service," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_fleet," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_geospatial," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_helpdesk," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_hr," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_interface-github," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_knowledge," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_l10n-canada," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_maintenance," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_management-system," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_manufacture," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_margin-analysis," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_mis-builder," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_multi-company," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_operating-unit," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_partner-contact," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_pos," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_product-attribute," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_product-pack," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_product-variant," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_project," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_project-reporting," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_purchase-workflow," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_queue," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_reporting-engine," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_rma," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_sale-reporting," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_sale-workflow," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_server-auth," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_server-backend," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_server-brand," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_server-env," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_server-tools," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_server-ux," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_social," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_stock-logistics-warehouse," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_storage," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_timesheet," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_vertical-association," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_vertical-hotel," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_vertical-isp," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_vertical-travel," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_website," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_website-cms," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OCA_wms," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/OmniaGit_odooplm," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/Smile-SA_odoo_addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/TechnoLibre_odoo-code-generator," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/TechnoLibre_odoo-code-generator-template," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/ajepe_odoo-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/camptocamp_odoo-cloud-platform," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/dhongu_deltatech," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/it-projects-llc_saas-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/itpp-labs_access-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/itpp-labs_pos-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/itpp-labs_website-addons," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/kinjal-sorathiya_Property-Management_odoo," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_base," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_dms," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_docs," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_misc," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_quality," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_web," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/muk-it_muk_website," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/novacode-nl_odoo-formio," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/obayit_odoo_dhtmlxgantt," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/odoo_design-themes," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/odooaktiv_product_rating_app," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/odoomates_odooapps," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/openeducat_openeducat_erp," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/pledra_odoo-product-configurator," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/addons/tegin_medical-fhir," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/doc/itpp-labs_odoo-development," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/doc/itpp-labs_odoo-port-docs," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/doc/itpp-labs_odoo-test-docs," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/doc/odoo_documentation-user," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/script/OCA_maintainer-tools," >> ${EL_CONFIG_FILE}
printf "${EL_HOME}/script/OCA_odoo-module-migrator," >> ${EL_CONFIG_FILE}
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}/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}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-consolidation," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-financial-reporting," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-financial-tools," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-fiscal-rule," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-invoice-reporting," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-invoicing," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_account-payment," >> "${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_bank-payment," >> "${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}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_commission," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_community-data-files," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_connector," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_connector-ecommerce," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_connector-interfaces," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_connector-jira," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_connector-telephony," >> "${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_crm," >> "${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_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}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_event," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_field-service," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_fleet," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_geospatial," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_helpdesk," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_hr," >> "${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_l10n-canada," >> "${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}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_margin-analysis," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_mis-builder," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_multi-company," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_operating-unit," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_partner-contact," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_pos," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_product-attribute," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_product-configurator," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_product-pack," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_product-variant," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_project," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_project-agile," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_project-reporting," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_purchase-workflow," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_queue," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_reporting-engine," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_rma," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_sale-reporting," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_sale-workflow," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_server-auth," >> "${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-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_social," >> "${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}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_vertical-travel," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_web," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_website," >> "${EL_CONFIG_FILE}"
printf "${EL_HOME}/addons.odoo${EL_ODOO_VERSION}/OCA_website-cms," >> "${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}/camptocamp_odoo-cloud-platform," >> "${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}"
printf "max_cron_threads = 2\n" >> "${EL_CONFIG_FILE}"
printf "workers = 2\n" >> "${EL_CONFIG_FILE}"
if [[ ${EL_INSTALL_NGINX} = "True" ]]; then
printf "workers = 2\n" >> "${EL_CONFIG_FILE}"
printf "xmlrpc_interface = 127.0.0.1\n" >> "${EL_CONFIG_FILE}"
printf "proxy_mode = True\n" >> "${EL_CONFIG_FILE}"
else
printf "workers = 0\n" >> "${EL_CONFIG_FILE}"
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
make config_update
fi

View file

@ -1,5 +1,6 @@
#!/usr/bin/env bash
rm -fr ./.repo
rm -rf ./odoo ./addons/* ./script/OCA* ./image_db ./doc/itpp* ./doc/odoo_*
mkdir -p addons/addons
rm -rf ./odoo ./addons*/* ./script/OCA* ./image_db ./doc/itpp* ./doc/odoo_*
rm -rf addons*
#mkdir -p addons/addons

View file

@ -400,11 +400,18 @@ class GitTool:
# Exception, ignore addons/OCA_web and root
if repo.get("path") in ["addons/OCA_web", "odoo", "image_db"]:
continue
update_repo = repo.get("path")
# Use variable instead of hardcoded path
if update_repo.startswith("addons.odoo"):
lst_path = update_repo.split("/", 1)
update_repo = f"addons.odoo${{EL_ODOO_VERSION}}/" + lst_path[1]
str_repo = (
f' printf "${{EL_HOME}}/{repo.get("path")}," >> '
f' printf "${{EL_HOME}}/{update_repo}," >> '
'"${EL_CONFIG_FILE}"\n'
)
lst_result.append(str_repo)
# Ignore repo if not starting by addons
if update_repo.startswith("addons"):
lst_result.append(str_repo)
with open(filename_locally) as file:
all_lines = file.readlines()
# search place to add/replace lines

View file

@ -109,8 +109,8 @@ def main():
break
die(
not project_path,
f"Missing .iml file into {IDEA_PATH}, wait after Pycharm analyze file to"
" create Python environnement.",
f"Missing .iml file into {IDEA_PATH}, wait after Pycharm analyze file"
" to create Python environnement.",
)
if config.init:
@ -415,6 +415,11 @@ def add_exclude_folder(dct_xml, file_name, config):
)
lst_exclude_folder = dct_content.get("excludeFolder")
# lst_to_exclude = ["./.venv.*", "./addons.*"]
lst_to_exclude = ["./.venv.*", "./addons"]
for s_exclude in lst_to_exclude:
for dir_venv in glob.glob(s_exclude):
LST_EXCLUDE_FOLDER.append(dir_venv[2:])
lst_exclude_item = [f"file://$MODULE_DIR$/{a}" for a in LST_EXCLUDE_FOLDER]
if lst_exclude_folder:

View file

@ -63,7 +63,7 @@ sudo su - postgres -c "createuser -s ${EL_USER}" 2>/dev/null || true
# Install Dependencies
#--------------------------------------------------
echo -e "\n--- Installing debian dependency --"
sudo apt-get install git build-essential wget libxslt-dev libzip-dev libldap2-dev libsasl2-dev gdebi-core libffi-dev libbz2-dev parallel pysassc swig -y
sudo apt-get install git build-essential wget libxslt-dev libzip-dev libldap2-dev libsasl2-dev gdebi-core libffi-dev libbz2-dev parallel pysassc swig cmake portaudio19-dev -y
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "apt-get debian tool installation error."

View file

@ -22,13 +22,15 @@ Color_Off='\033[0m' # Text Reset
#git submodule update --init
# Generate empty addons if missing
if [[ ! -d "./addons/addons" ]]; then
mkdir -p ./addons/addons
path_addons_addons="./addons.odoo${EL_ODOO_VERSION}/addons"
if [[ ! -d "${path_addons_addons}" ]]; then
mkdir -p "${path_addons_addons}"
fi
PYENV_PATH=~/.pyenv
PYTHON_VERSION=3.7.16
PYENV_VERSION_PATH=${PYENV_PATH}/versions/${PYTHON_VERSION}
# 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
@ -36,58 +38,61 @@ 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
POETRY_VERSION=1.5.1
echo "Python path version home"
echo ${PYENV_VERSION_PATH}
echo "Python path version local"
echo ${LOCAL_PYTHON_EXEC}
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
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
else
mkdir .venv
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
#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=${POETRY_VERSION} ${LOCAL_PYTHON_EXEC} - -y
# curl -sSL https://install.python-poetry.org | POETRY_VERSION=${EL_POETRY_VERSION} ${LOCAL_PYTHON_EXEC} - -y
#fi
# Install git-repo if missing
@ -113,20 +118,20 @@ ${VENV_PATH}/bin/pip install --upgrade pip
# Delete artifacts created by pip, cause error in next "poetry install"
if [[ ! -f "${POETRY_PATH}" ]]; then
${VENV_PATH}/bin/pip install poetry==${POETRY_VERSION}
${VENV_PATH}/bin/pip install poetry==${EL_POETRY_VERSION}
${VENV_PATH}/bin/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
${VENV_PATH}/bin/poetry install
# To fix keyring problem when installation is blocked, use
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
${VENV_PATH}/bin/poetry install --no-root -vvv
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "Poetry installation error."
echo "Poetry installation error with status ${retVal}"
exit 1
fi
# Fix pip installation missing package
${VENV_PATH}/bin/pip install selenium
fi
# Delete artifacts created by pip, cause error in next "poetry install"
@ -134,4 +139,4 @@ rm -rf artifacts
# Link for dev
echo -e "\n---- Add link dependency in site-packages of Python ----"
ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/.venv/lib/python3.7/site-packages/
ln -fs "${EL_HOME_ODOO}/odoo" "${EL_HOME}/.venv/lib/python${PYTHON_VERSION_MAJOR}/site-packages/"

View file

@ -5,6 +5,9 @@
Red='\033[0;31m' # Red
Color_Off='\033[0m' # Text Reset
echo ""
echo "RUN ./script/install/install_locally.sh"
echo ""
./script/install/install_locally.sh
retVal=$?
if [[ $retVal -ne 0 ]]; then
@ -13,6 +16,9 @@ if [[ $retVal -ne 0 ]]; then
fi
# Update git-repo
echo ""
echo "RUN ./script/manifest/update_manifest_local_dev.sh"
echo ""
./script/manifest/update_manifest_local_dev.sh
retVal=$?
if [[ $retVal -ne 0 ]]; then

View file

@ -7,5 +7,4 @@
# 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 --force-sync
./.venv/repo sync --force-sync -v
./.venv/repo sync -v

View file

@ -8,7 +8,13 @@
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
DAEMON_PID=$!
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${EL_MANIFEST_DEV} "$@"
./.venv/repo sync -v --force-sync -m ${EL_MANIFEST_DEV}
if [ -L "$EL_MANIFEST_DEV" ]; then
MANIFEST_TARGET=$(readlink -f "$EL_MANIFEST_DEV")
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}
kill ${DAEMON_PID}

View file

@ -9,7 +9,13 @@
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
DAEMON_PID=$!
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${EL_MANIFEST_DEV} -g base,code_generator
./.venv/repo sync -v --force-sync -m ${EL_MANIFEST_DEV}
if [ -L "$EL_MANIFEST_DEV" ]; then
MANIFEST_TARGET=$(readlink -f "$EL_MANIFEST_DEV")
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}
kill ${DAEMON_PID}

View file

@ -9,7 +9,13 @@
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
DAEMON_PID=$!
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --verify HEAD) -m ${EL_MANIFEST_PROD}
./.venv/repo sync -v -m ${EL_MANIFEST_PROD}
if [ -L "$EL_MANIFEST_DEV" ]; then
MANIFEST_TARGET=$(readlink -f "EL_MANIFEST_PROD")
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}
kill ${DAEMON_PID}

View file

@ -7,5 +7,4 @@
# Update git-repo
./.venv/repo init -u https://github.com/ERPLibre/ERPLibre -b $(git rev-parse --verify HEAD)
#./.venv/repo sync --force-sync
./.venv/repo sync -v

View file

@ -8,6 +8,6 @@ Color_Off='\033[0m' # Text Reset
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo -e "${Red}Error${Color_Off} ./script/poetry/poetry_add_build_dependency.sh"
cat ./.venv/build_dependency.txt
# cat ./.venv/build_dependency.txt
exit 1
fi

View file

@ -8,8 +8,6 @@ do
echo -e "Actual version $line"
sed -i -e "s/$line/$1/g" ./.python-version
sed -i -e "s/$line/$1/g" ./docker/Dockerfile.base
sed -i -e "s/$line/$1/g" ./docker/python-versions.txt
sed -i -e "s/$line/$1/g" ./script/install/install_locally.sh
sed -i -e "s/$line/$1/g" ./script/install/install_OSX_dependency.sh
sed -i -e "s/$line/$1/g" ./pyproject.toml
done < "$input"

106
script/version/get_version.py Executable file
View file

@ -0,0 +1,106 @@
#!/usr/bin/env python3
# © 2021-2024 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import argparse
import logging
import json
import os
import shutil
import sys
import time
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
_logger = logging.getLogger(__name__)
VERSION_DATA_FILE = os.path.join("conf", "supported_version_erplibre.json")
def get_config():
"""Parse command line arguments, extracting the config file name,
returning the union of config file and command line arguments
:return: dict of config file settings and command line arguments
"""
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description=f"""\
Change environnement from supported version, check file {VERSION_DATA_FILE}.
""",
epilog="""\
""",
)
parser.add_argument(
"-l",
"--list",
action="store_true",
help="List all supported version.",
)
# parser.add_argument(
# "--python_version",
# help="Select the python version.",
# )
# parser.add_argument(
# "--poetry_version",
# help="Select the poetry version.",
# )
parser.add_argument(
"--odoo_version",
help="Select the odoo version.",
)
# parser.add_argument(
# "--erplibre_version",
# help="Select the erplibre version.",
# )
args = parser.parse_args()
return args
def main():
die(
not os.path.isfile(VERSION_DATA_FILE),
f"Missing {VERSION_DATA_FILE} path, are you sure you run this"
" script at root of the project?",
)
config = get_config()
with open(VERSION_DATA_FILE) as txt:
data_version = json.load(txt)
# detect no argument
# if (
# not config.python_version
# or not config.poetry_version
# or not config.odoo_version
# or not config.erplibre_version
# ):
if not config.odoo_version:
config.list = True
if config.list:
for key, value in data_version.items():
print(f"{key}: {value}")
if config.odoo_version:
for key, value in data_version.items():
if value.get("odoo_version") == config.odoo_version:
print(
f"{value.get('odoo_version')}\n"
f"{value.get('poetry_version')}\n"
f"{value.get('python_version')}\n"
f"{key}\n"
)
def die(cond, message, code=1):
if cond:
print(message, file=sys.stderr)
sys.exit(code)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,723 @@
#!/usr/bin/env python3
# © 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
import argparse
import logging
import json
import os
import shutil
import sys
import time
import subprocess
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
_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_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")
VENV_TEMPLATE_FILE = ".venv.%s"
MANIFEST_FILE = "default.dev.xml"
MANIFEST_TEMPLATE_FILE = "default.dev.odoo%s.xml"
MANIFEST_FILE_PATH = os.path.join(".", "manifest", MANIFEST_FILE)
PYPROJECT_FILE = os.path.join("pyproject.toml")
PYPROJECT_TEMPLATE_FILE = "pyproject.%s.toml"
POETRY_LOCK_FILE = os.path.join("poetry.lock")
POETRY_LOCK_TEMPLATE_FILE = "poetry.%s.lock"
PIP_REQUIREMENT_FILE = os.path.join("requirements.txt")
PIP_REQUIREMENT_TEMPLATE_FILE = "requirements.%s.txt"
PIP_IGNORE_REQUIREMENT_FILE = os.path.join(
"requirement", "ignore_requirements.txt"
)
PIP_IGNORE_REQUIREMENT_TEMPLATE_FILE = "ignore_requirements.%s.txt"
ADDONS_TEMPLATE_FILE = "addons.odoo%s"
ERPLIBRE_TEMPLATE_VERSION = "odoo%s_python%s"
def get_config():
"""Parse command line arguments, extracting the config file name,
returning the union of config file and command line arguments
:return: dict of config file settings and command line arguments
"""
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description=f"""\
Change environnement from supported version, check file {VERSION_DATA_FILE}
""",
epilog="""\
""",
)
parser.add_argument(
"-l",
"--list",
action="store_true",
help="List all supported version.",
)
parser.add_argument(
"--python_version",
help="Select the python version.",
)
parser.add_argument(
"--poetry_version",
help="Select the poetry version.",
)
parser.add_argument(
"--odoo_version",
help="Select the odoo version.",
)
parser.add_argument(
"--erplibre_version",
help="Select the erplibre version.",
)
parser.add_argument(
"--erplibre_package",
help=(
"Select the erplibre package to configure environnement only for"
" this package."
),
)
parser.add_argument(
"--install",
action="store_true",
help="Install environnement.",
)
parser.add_argument(
"--switch",
action="store_true",
help="Will only update the system by switch environnement.",
)
parser.add_argument(
"--install_dev",
action="store_true",
help="Install developer environment.",
)
parser.add_argument(
"--force_install",
action="store_true",
help="Will erase .venv and create symbolic link after installation.",
)
parser.add_argument(
"--force_repo",
action="store_true",
help="Will erase all repo before install it.",
)
parser.add_argument(
"--force",
action="store_true",
help="Force all, include force_install, force_repo.",
)
args = parser.parse_args()
if args.force:
args.force_install = True
args.force_repo = True
args.is_in_installation = args.install or args.install_dev
args.is_in_switch = args.switch
if not (args.install or args.install_dev) and args.force_install:
args.force_install = False
return args
class Update:
def __init__(self):
self.execute_log = []
self.config = get_config()
self.data_version = None
self.odoo_version = None
self.python_version = None
self.detected_version_erplibre = None
self.new_version_erplibre = None
self.new_version_odoo = None
self.new_version_python = None
self.new_version_poetry = None
self.expected_venv_name = None
self.expected_manifest_name = None
self.expected_manifest_path = None
self.expected_pyproject_name = None
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(
not os.path.isfile(VERSION_DATA_FILE),
f"Missing {VERSION_DATA_FILE} path, are you sure you run this"
" script at root of the project?",
)
with open(VERSION_DATA_FILE) as txt:
self.data_version = json.load(txt)
if self.config.list:
for key, value in self.data_version.items():
print(f"{key}: {value}")
def detect_version(self):
# Detect actual version
if not os.path.exists(VERSION_PYTHON_FILE) or not os.path.exists(
VERSION_ODOO_FILE
):
_logger.info("New installation, cannot detect actual version.")
return False
with open(VERSION_PYTHON_FILE) as txt:
self.python_version = txt.read().strip()
with open(VERSION_ODOO_FILE) as txt:
self.odoo_version = txt.read().strip()
# Show actual version
_logger.info(f"Python version: {self.python_version}")
_logger.info(f"Odoo version: {self.odoo_version}")
erplibre_version_to_search = ERPLIBRE_TEMPLATE_VERSION % (
self.odoo_version,
self.python_version,
)
# Detect key actual version
for key, value in self.data_version.items():
if (
value.get("odoo_version") == self.odoo_version
and value.get("python_version") == self.python_version
):
self.detected_version_erplibre = key
_logger.info(
f"Detected erplibre version {erplibre_version_to_search}"
)
break
if not self.detected_version_erplibre:
_logger.error(
f"The actual version '{erplibre_version_to_search}' is not"
f" configured into '{VERSION_DATA_FILE}'. Please update this"
" file before continue."
)
return False
return True
def validate_version(self):
dct_data_version = {}
if (
not self.config.python_version
and not self.config.poetry_version
and not self.config.odoo_version
and not self.config.erplibre_version
and not self.config.erplibre_package
):
dct_data_version = {}
if self.detected_version_erplibre:
dct_data_version = self.data_version.get(
self.detected_version_erplibre
)
if not dct_data_version:
# Take default version
default_data = [
key
for key, value in self.data_version.items()
if value.get("default")
]
if not default_data:
_logger.error(
"Cannot find default version into file"
f" {VERSION_DATA_FILE}"
)
sys.exit(1)
dct_data_version = self.data_version.get(default_data[0])
has_new_version = False
if self.config.erplibre_version:
data = self.data_version.get(self.config.erplibre_version)
if not data:
_logger.error(
"Missing data for erplibre_version"
f" {self.config.erplibre_version}"
)
sys.exit(1)
self.new_version_odoo = data.get("odoo_version")
self.new_version_python = data.get("python_version")
self.new_version_poetry = data.get("poetry_version")
has_new_version = True
if self.config.python_version:
self.new_version_python = self.config.python_version
has_new_version = True
if self.config.poetry_version:
self.new_version_poetry = self.config.poetry_version
has_new_version = True
if self.config.odoo_version:
self.new_version_odoo = self.config.odoo_version
has_new_version = True
if has_new_version:
self.new_version_erplibre = ERPLIBRE_TEMPLATE_VERSION % (
self.new_version_odoo,
self.new_version_python,
)
else:
_logger.info(
"No difference between detected version and new version:"
f" {self.detected_version_erplibre}"
)
if not dct_data_version:
_logger.error("Cannot find dct_data_version")
else:
self.new_version_erplibre = ERPLIBRE_TEMPLATE_VERSION % (
dct_data_version.get("odoo_version"),
dct_data_version.get("python_version"),
)
self.new_version_odoo = dct_data_version.get("odoo_version")
self.new_version_python = dct_data_version.get(
"python_version"
)
self.new_version_poetry = dct_data_version.get(
"poetry_version"
)
# self.new_version_erplibre = self.detected_version_erplibre
# self.new_version_odoo = self.odoo_version
# self.new_version_python = self.python_version
# TODO needs to detect actual poetry? No?
self.expected_venv_name = (
VENV_TEMPLATE_FILE % self.new_version_erplibre
)
self.expected_manifest_name = (
MANIFEST_TEMPLATE_FILE % self.new_version_odoo
)
self.expected_manifest_path = os.path.join(
".", "manifest", self.expected_manifest_name
)
self.expected_pyproject_name = (
PYPROJECT_TEMPLATE_FILE % self.new_version_erplibre
)
self.expected_pyproject_path = os.path.join(
".", "requirement", self.expected_pyproject_name
)
self.expected_poetry_lock_name = (
POETRY_LOCK_TEMPLATE_FILE % self.new_version_erplibre
)
self.expected_poetry_lock_path = os.path.join(
".", "requirement", self.expected_poetry_lock_name
)
self.expected_pip_requirement_name = (
PIP_REQUIREMENT_TEMPLATE_FILE % self.new_version_erplibre
)
self.expected_addons_name = (
ADDONS_TEMPLATE_FILE % self.new_version_odoo
)
self.expected_pip_requirement_path = os.path.join(
".", "requirement", self.expected_pip_requirement_name
)
self.expected_pip_ignore_requirement_name = (
PIP_IGNORE_REQUIREMENT_TEMPLATE_FILE % self.new_version_erplibre
)
self.expected_pip_ignore_requirement_path = os.path.join(
".", "requirement", self.expected_pip_ignore_requirement_name
)
if self.config.erplibre_package:
_logger.warning("Not supported erplibre_package configuration")
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)
if not venv_exist and not self.config.install_dev:
_logger.info("Relaunch this script with --install_dev argument.")
# Validate Git repo
status &= self.update_link_file(
"Git repositories",
MANIFEST_FILE_PATH,
self.expected_manifest_path,
do_delete_source=True,
)
# Validate Poetry and pip
status &= self.update_link_file(
"Poetry project toml",
PYPROJECT_FILE,
self.expected_pyproject_path,
do_delete_source=True,
)
status &= self.update_link_file(
"Poetry lock",
POETRY_LOCK_FILE,
self.expected_poetry_lock_path,
do_delete_source=True,
)
status &= self.update_link_file(
"Pip requirement.txt",
PIP_REQUIREMENT_FILE,
self.expected_pip_requirement_path,
do_delete_source=True,
)
status &= self.update_link_file(
"Pip ignore_requirement.txt",
PIP_IGNORE_REQUIREMENT_FILE,
self.expected_pip_ignore_requirement_path,
do_delete_source=True,
)
if not os.path.isdir(self.expected_addons_name):
status = False
# status &= self.update_link_file(
# "Directory 'addons'",
# ADDONS_PATH,
# self.expected_addons_name,
# is_directory=True,
# do_delete_source=self.config.install_dev
# or self.config.force_install,
# )
return status
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
with open(VERSION_PYTHON_FILE, "w") as txt:
txt.write(self.new_version_python)
with open(VERSION_ERPLIBRE_FILE, "w") as txt:
txt.write(self.new_version_erplibre)
with open(VERSION_ODOO_FILE, "w") as txt:
txt.write(self.new_version_odoo)
with open(VERSION_POETRY_FILE, "w") as txt:
txt.write(self.new_version_poetry)
if self.config.is_in_installation or self.config.is_in_switch:
addons_path_with_version = f"addons.odoo{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.is_in_installation:
_logger.info("Installation.")
status = self.install_erplibre(
install_system=self.config.install,
install_dev=self.config.install_dev,
)
# Re-update if launch installation
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")
status = os.system(
"./script/manifest/update_manifest_local_dev.sh"
)
# 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"):
# In same time, force to create addons if not existing
addons_dir_path = os.path.join(addons_path, "addons")
if not os.path.isdir(addons_dir_path):
os.makedirs(addons_dir_path)
# Force create addons link
if os.path.isdir(ADDONS_PATH):
os.remove(ADDONS_PATH)
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")
return
_logger.info("List of execution log :")
for log_info in self.execute_log:
_logger.info("\t" + log_info)
def pycharm_update(self):
pycharm_is_installed = os.path.exists(".idea")
if not pycharm_is_installed or not self.execute_log:
return
os.system("./.venv/bin/python ./script/ide/pycharm_configuration.py --init")
def install_erplibre(self, install_system=False, install_dev=False):
status = 0
if install_system:
self.execute_log.append(f"System installation")
status = os.system("./script/install/install_dev.sh")
if install_dev and not status:
self.execute_log.append(f"Dev installation")
status = os.system("./script/install/install_locally_dev.sh")
return status
def update_link_file(
self,
component_name,
source_file,
target_file,
is_directory=False,
do_delete_source=False,
):
"""Call to create a symbolic link
0. check if file is symlink or file/directory
1.
Case 1 : origin file exist, need to be switched by a symlink and rename it;
Case 2 : no file, check if new version exist and symlink it;
Case 3 : source file is symlink, and wrong direction, erase it. If new version exist, symlink it.
Case 4: origin file exist, but it's a wrong symlink
Good case : source file is symlink, and good redirection.
"""
# TODO support case symlink is invalid
status = False
if not source_file or not target_file:
_logger.error(
f"{component_name}:Source file or target file is empty."
)
source_file_exist = os.path.exists(source_file)
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.")
do_symlink = False
# Case 4
if source_file_is_symlink and not source_file_exist:
_logger.error(
f"{component_name}:File '{source_file}' is a wrong symlink,"
" delete it."
)
os.system(f"rm {source_file}")
self.execute_log.append(
f"{component_name}:Delete file {source_file}"
)
source_file_is_symlink = False
# Case 1
if source_file_exist:
if not source_file_is_symlink:
# Check if source type
if is_directory:
source_file_is_directory = os.path.isdir(source_file)
if not source_file_is_directory:
_logger.error(
f"{component_name} - Source '{source_file}' is"
" expected to be a directory and it's not."
)
os.system(f"ls -lha {source_file}")
sys.exit(1)
else:
do_switch_origin_sim = True
else:
source_file_is_file = os.path.isfile(source_file)
if not source_file_is_file:
_logger.error(
f"{component_name} - Source '{source_file}' is"
" expected to be a file and it's not."
)
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
# Move it and create a symlink
shutil.move(source_file, new_target_file)
do_symlink = True
else:
# Case 3
# Is symlink
lst_path_source = [
a for a in os.path.split(remove_dot_path(source_file)) if a
]
ref_symlink_source = os.readlink(source_file).strip("/")
lst_path_symlink_source = [
a
for a in os.path.split(remove_dot_path(ref_symlink_source))
if a
]
if (
len(lst_path_source) != len(lst_path_symlink_source)
and len(lst_path_symlink_source) == 1
):
ref_symlink_source_from_root = os.path.join(
".",
os.sep.join(lst_path_source[:-1]),
ref_symlink_source,
)
else:
ref_symlink_source_from_root = ref_symlink_source
do_delete_source = do_delete_source or os.path.exists(
target_file
)
if ref_symlink_source_from_root == target_file:
_logger.info(
f"{component_name}:The system configuration is good."
)
status = True
elif do_delete_source:
_logger.warning(
f"{component_name}:The file '{source_file}' link"
f" '{ref_symlink_source_from_root}' will be delete and"
f" link to '{target_file}'."
)
# symlink, delete it if wrong
os.system(f"rm {source_file}")
self.execute_log.append(
f"{component_name}:Delete file {source_file}"
)
if target_file_exist:
do_symlink = True
else:
_logger.warning(
f"{component_name}:The actual link is"
f" '{ref_symlink_source_from_root}', but expect to be"
f" '{target_file}'."
)
elif target_file_exist:
# Case 2
do_symlink = True
if do_symlink:
lst_path_target = [
a for a in os.path.split(remove_dot_path(target_file)) if a
]
lst_path_source = [
a for a in os.path.split(remove_dot_path(source_file)) if a
]
if len(lst_path_source) == 1:
os.symlink(target_file, source_file)
msg = (
f"{component_name}:Create symbolic link {source_file} to"
f" {target_file}"
)
_logger.info(msg)
self.execute_log.append(msg)
else:
target_file_name = lst_path_target[-1]
source_file_name = lst_path_source[-1]
# TODO compare lst_path_source avec lst_path_target, si différent, faire le path
cd_path_target = (
"." + os.sep + os.sep.join(lst_path_target[:-1])
)
cmd_symlink_manifest = (
f"cd {cd_path_target};ln -s"
f" {target_file_name} {source_file_name};cd -"
)
os.system(cmd_symlink_manifest)
msg = (
f"{component_name}:Create symbolic link"
f" {source_file_name} to {target_file_name} from path"
f" {cd_path_target}"
)
_logger.info(msg)
self.execute_log.append(msg)
return status
def remove_dot_path(path):
"""
if path is ./path/2, will return path/2
"""
if path.startswith("./"):
return path[2:]
return path
def main():
update = Update()
_logger.info(f"Work on directory {os.getcwd()}")
_logger.info("Get data version")
update.check_version_data()
_logger.info("Detect version")
update.detect_version()
_logger.info("Validate version")
update.validate_version()
_logger.info("Validate environment")
status = update.validate_environment()
if update.config.force_install or not status:
update.update_environment()
update.print_log()
if update.config.is_in_installation:
# Update pycharm configuration
update.pycharm_update()
# Update OCB configuration
os.system("./.venv/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)
# 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("make config_gen_all")
def die(cond, message, code=1):
if cond:
print(message, file=sys.stderr)
sys.exit(code)
if __name__ == "__main__":
main()