diff --git a/.gitignore b/.gitignore index 04d387e..0904e0f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ venv config.conf *.DS_Store *.pyc + +.repo +addons +odoo \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index ff18d23..0000000 --- a/.gitmodules +++ /dev/null @@ -1,261 +0,0 @@ -[submodule "addons/ERPLibre_erplibre_addons"] - url = https://github.com/ERPLibre/erplibre_addons.git - path = addons/ERPLibre_erplibre_addons -[submodule "addons/MathBenTech_development"] - url = https://github.com/ERPLibre/development.git - path = addons/MathBenTech_development -[submodule "addons/MathBenTech_odoo-business-spending-management-quebec-canada"] - url = https://github.com/ERPLibre/odoo-business-spending-management-quebec-canada.git - path = addons/MathBenTech_odoo-business-spending-management-quebec-canada -[submodule "addons/MathBenTech_scrummer"] - url = https://github.com/ERPLibre/scrummer.git - path = addons/MathBenTech_scrummer -[submodule "addons/muk-it_muk_base"] - url = https://github.com/ERPLibre/muk_base.git - path = addons/muk-it_muk_base -[submodule "addons/muk-it_muk_dms"] - url = https://github.com/ERPLibre/muk_dms.git - path = addons/muk-it_muk_dms -[submodule "addons/muk-it_muk_docs"] - url = https://github.com/ERPLibre/muk_docs.git - path = addons/muk-it_muk_docs -[submodule "addons/muk-it_muk_misc"] - url = https://github.com/ERPLibre/muk_misc.git - path = addons/muk-it_muk_misc -[submodule "addons/muk-it_muk_quality"] - url = https://github.com/ERPLibre/muk_quality.git - path = addons/muk-it_muk_quality -[submodule "addons/muk-it_muk_web"] - url = https://github.com/ERPLibre/muk_web.git - path = addons/muk-it_muk_web -[submodule "addons/muk-it_muk_website"] - url = https://github.com/ERPLibre/muk_website.git - path = addons/muk-it_muk_website -[submodule "addons/Numigi_odoo-base-addons"] - url = https://github.com/ERPLibre/odoo-base-addons.git - path = addons/Numigi_odoo-base-addons -[submodule "addons/Numigi_odoo-entertainment-addons"] - url = https://github.com/ERPLibre/odoo-entertainment-addons.git - path = addons/Numigi_odoo-entertainment-addons -[submodule "addons/Numigi_odoo-git-addons"] - url = https://github.com/ERPLibre/odoo-git-addons.git - path = addons/Numigi_odoo-git-addons -[submodule "addons/Numigi_odoo-hr-addons"] - url = https://github.com/ERPLibre/odoo-hr-addons.git - path = addons/Numigi_odoo-hr-addons -[submodule "addons/Numigi_odoo-partner-addons"] - url = https://github.com/ERPLibre/odoo-partner-addons.git - path = addons/Numigi_odoo-partner-addons -[submodule "addons/Numigi_odoo-product-addons"] - url = https://github.com/ERPLibre/odoo-product-addons.git - path = addons/Numigi_odoo-product-addons -[submodule "addons/Numigi_odoo-project-addons"] - url = https://github.com/ERPLibre/odoo-project-addons.git - path = addons/Numigi_odoo-project-addons -[submodule "addons/Numigi_odoo-purchase-addons"] - url = https://github.com/ERPLibre/odoo-purchase-addons.git - path = addons/Numigi_odoo-purchase-addons -[submodule "addons/Numigi_odoo-stock-addons"] - url = https://github.com/ERPLibre/odoo-stock-addons.git - path = addons/Numigi_odoo-stock-addons -[submodule "addons/Numigi_odoo-survey-addons"] - url = https://github.com/ERPLibre/odoo-survey-addons.git - path = addons/Numigi_odoo-survey-addons -[submodule "addons/Numigi_odoo-timesheet-addons"] - url = https://github.com/ERPLibre/odoo-timesheet-addons.git - path = addons/Numigi_odoo-timesheet-addons -[submodule "addons/Numigi_odoo-web-addons"] - url = https://github.com/ERPLibre/odoo-web-addons.git - path = addons/Numigi_odoo-web-addons -[submodule "addons/OCA_account-analytic"] - url = https://github.com/ERPLibre/account-analytic.git - path = addons/OCA_account-analytic -[submodule "addons/OCA_account-budgeting"] - url = https://github.com/ERPLibre/account-budgeting.git - path = addons/OCA_account-budgeting -[submodule "addons/OCA_account-closing"] - url = https://github.com/ERPLibre/account-closing.git - path = addons/OCA_account-closing -[submodule "addons/OCA_account-consolidation"] - url = https://github.com/ERPLibre/account-consolidation.git - path = addons/OCA_account-consolidation -[submodule "addons/OCA_account-financial-reporting"] - url = https://github.com/ERPLibre/account-financial-reporting.git - path = addons/OCA_account-financial-reporting -[submodule "addons/OCA_account-financial-tools"] - url = https://github.com/ERPLibre/account-financial-tools - path = addons/OCA_account-financial-tools -[submodule "addons/OCA_account-fiscal-rule"] - url = https://github.com/ERPLibre/account-fiscal-rule.git - path = addons/OCA_account-fiscal-rule -[submodule "addons/OCA_account-invoicing"] - url = https://github.com/ERPLibre/account-invoicing.git - path = addons/OCA_account-invoicing -[submodule "addons/OCA_account-invoice-reporting"] - url = https://github.com/ERPLibre/account-invoice-reporting.git - path = addons/OCA_account-invoice-reporting -[submodule "addons/OCA_account-payment"] - url = https://github.com/ERPLibre/account-payment.git - path = addons/OCA_account-payment -[submodule "addons/OCA_account-reconcile"] - url = https://github.com/ERPLibre/account-reconcile.git - path = addons/OCA_account-reconcile -[submodule "addons/OCA_apps-store"] - url = https://github.com/ERPLibre/apps-store.git - path = addons/OCA_apps-store -[submodule "addons/OCA_bank-payment"] - url = https://github.com/ERPLibre/bank-payment.git - path = addons/OCA_bank-payment -[submodule "addons/OCA_bank-statement-import"] - url = https://github.com/ERPLibre/bank-statement-import.git - path = addons/OCA_bank-statement-import -[submodule "addons/OCA_brand"] - url = https://github.com/ERPLibre/brand.git - path = addons/OCA_brand -[submodule "addons/OCA_business-requirement"] - url = https://github.com/ERPLibre/business-requirement.git - path = addons/OCA_business-requirement -[submodule "addons/OCA_commission"] - url = https://github.com/ERPLibre/commission.git - path = addons/OCA_commission -[submodule "addons/OCA_community-data-files"] - url = https://github.com/ERPLibre/community-data-files.git - path = addons/OCA_community-data-files -[submodule "addons/OCA_connector-telephony"] - url = https://github.com/ERPLibre/connector-telephony.git - path = addons/OCA_connector-telephony -[submodule "addons/OCA_contract"] - url = https://github.com/ERPLibre/contract.git - path = addons/OCA_contract -[submodule "addons/OCA_credit-control"] - url = https://github.com/ERPLibre/credit-control.git - path = addons/OCA_credit-control -[submodule "addons/OCA_currency"] - url = https://github.com/ERPLibre/currency.git - path = addons/OCA_currency -[submodule "addons/OCA_data-protection"] - url = https://github.com/ERPLibre/data-protection.git - path = addons/OCA_data-protection -[submodule "addons/OCA_donation"] - url = https://github.com/ERPLibre/donation.git - path = addons/OCA_donation -[submodule "addons/OCA_e-commerce"] - url = https://github.com/ERPLibre/e-commerce.git - path = addons/OCA_e-commerce -[submodule "addons/OCA_edi"] - url = https://github.com/ERPLibre/edi.git - path = addons/OCA_edi -[submodule "addons/OCA_event"] - url = https://github.com/ERPLibre/event.git - path = addons/OCA_event -[submodule "addons/OCA_helpdesk"] - url = https://github.com/ERPLibre/helpdesk.git - path = addons/OCA_helpdesk -[submodule "addons/OCA_hr"] - url = https://github.com/ERPLibre/hr.git - path = addons/OCA_hr -[submodule "addons/OCA_knowledge"] - url = https://github.com/ERPLibre/knowledge.git - path = addons/OCA_knowledge -[submodule "addons/OCA_l10n-canada"] - url = https://github.com/ERPLibre/l10n-canada.git - path = addons/OCA_l10n-canada -[submodule "addons/OCA_maintenance"] - url = https://github.com/ERPLibre/maintenance.git - path = addons/OCA_maintenance -[submodule "addons/OCA_management-system"] - url = https://github.com/ERPLibre/management-system.git - path = addons/OCA_management-system -[submodule "addons/OCA_manufacture"] - url = https://github.com/ERPLibre/manufacture.git - path = addons/OCA_manufacture -[submodule "addons/OCA_margin-analysis"] - url = https://github.com/ERPLibre/margin-analysis.git - path = addons/OCA_margin-analysis -[submodule "addons/OCA_mis-builder"] - url = https://github.com/ERPLibre/mis-builder.git - path = addons/OCA_mis-builder -[submodule "addons/OCA_multi-company"] - url = https://github.com/ERPLibre/multi-company.git - path = addons/OCA_multi-company -[submodule "addons/OCA_partner-contact"] - url = https://github.com/ERPLibre/partner-contact.git - path = addons/OCA_partner-contact -[submodule "addons/OCA_pos"] - url = https://github.com/ERPLibre/pos.git - path = addons/OCA_pos -[submodule "addons/OCA_product-attribute"] - url = https://github.com/ERPLibre/product-attribute.git - path = addons/OCA_product-attribute -[submodule "addons/OCA_product-pack"] - url = https://github.com/ERPLibre/product-pack.git - path = addons/OCA_product-pack -[submodule "addons/OCA_product-variant"] - url = https://github.com/ERPLibre/product-variant.git - path = addons/OCA_product-variant -[submodule "addons/OCA_project"] - url = https://github.com/ERPLibre/project.git - path = addons/OCA_project -[submodule "addons/OCA_project-reporting"] - url = https://github.com/ERPLibre/project-reporting.git - path = addons/OCA_project-reporting -[submodule "addons/OCA_purchase-workflow"] - url = https://github.com/ERPLibre/purchase-workflow.git - path = addons/OCA_purchase-workflow -[submodule "addons/OCA_queue"] - url = https://github.com/ERPLibre/queue.git - path = addons/OCA_queue -[submodule "addons/OCA_reporting-engine"] - url = https://github.com/ERPLibre/reporting-engine.git - path = addons/OCA_reporting-engine -[submodule "addons/OCA_sale-workflow"] - url = https://github.com/ERPLibre/sale-workflow.git - path = addons/OCA_sale-workflow -[submodule "addons/OCA_server-auth"] - url = https://github.com/ERPLibre/server-auth.git - path = addons/OCA_server-auth -[submodule "addons/OCA_server-brand"] - url = https://github.com/ERPLibre/server-brand.git - path = addons/OCA_server-brand -[submodule "addons/OCA_server-env"] - url = https://github.com/ERPLibre/server-env.git - path = addons/OCA_server-env -[submodule "addons/OCA_server-tools"] - url = https://github.com/ERPLibre/server-tools.git - path = addons/OCA_server-tools -[submodule "addons/OCA_server-ux"] - url = https://github.com/ERPLibre/server-ux.git - path = addons/OCA_server-ux -[submodule "addons/OCA_social"] - url = https://github.com/ERPLibre/social.git - path = addons/OCA_social -[submodule "addons/OCA_stock-logistics-warehouse"] - url = https://github.com/ERPLibre/stock-logistics-warehouse.git - path = addons/OCA_stock-logistics-warehouse -[submodule "addons/OCA_timesheet"] - url = https://github.com/ERPLibre/timesheet.git - path = addons/OCA_timesheet -[submodule "addons/OCA_web"] - url = https://github.com/ERPLibre/web.git - path = addons/OCA_web -[submodule "addons/OCA_website"] - url = https://github.com/ERPLibre/website.git - path = addons/OCA_website -[submodule "addons/OCA_wms"] - url = https://github.com/ERPLibre/wms.git - path = addons/OCA_wms -[submodule "odoo"] - url = https://github.com/ERPLibre/odoo.git - path = odoo -[submodule "addons/odooaktiv_QuotationRevision"] - url = https://github.com/ERPLibre/QuotationRevision.git - path = addons/odooaktiv_QuotationRevision -[submodule "addons/openeducat_openeducat_erp"] - url = https://github.com/ERPLibre/openeducat_erp.git - path = addons/openeducat_openeducat_erp -[submodule "addons/SanteLibre_santelibre_addons"] - url = https://github.com/ERPLibre/santelibre_addons.git - path = addons/SanteLibre_santelibre_addons -[submodule "addons/Smile-SA_odoo_addons"] - url = https://github.com/ERPLibre/odoo_addons.git - path = addons/Smile-SA_odoo_addons diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..395c7fc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,47 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] +### Added +- Docker + +### Changed +- Update to Odoo Community 12.0 + +### Fixed +- Web module display + +## [1.0.0] - 2020-07-04 +### Added +- Environment of development, discovery and production with documentation and script. +- git-repo of Google to support addons repository instead of using Git submodule. + +### Removed +- Git submodule + +## [0.1.1] - 2020-04-28 +### Added +- Support helpdesk supplier, helper, employee and services +- Support [SanteLibre.ca](https://santelibre.ca) with MRP, website, hr, ecommerce +- Donation module with thermometer for website +- Script to fork project and all repos in submodule to create ERPLibre + +## [0.1.0] - 2020-04-20 +### Added +- Move project from https://github.com/mathbentech/InstallScript to ERPLibre. +- Support of Odoo Community 12.0 2019-11-19 94bcbc92e5e5a6fd3de7267e3c01f8c11fb045f4. + +### Changed +- Support scrummer, project, sale, website, helpdesk and hr +- Support Nginx and improve installation + +### Fixed +- Support only python3.6 and python3.7, python3.8 causes error in runtime. + +[Unreleased]: http://git.erplibre.ca/ERPLibre/compare/v1.0.0...HEAD +[1.0.0]: http://git.erplibre.ca/ERPLibre/compare/v0.1.1...v1.0.0 +[0.1.1]: http://git.erplibre.ca/ERPLibre/compare/v0.1.0...v0.1.1 +[0.1.0]: http://git.erplibre.ca/ERPLibre/releases/tag/v0.1.0 diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md deleted file mode 100644 index 07114b1..0000000 --- a/DEVELOPMENT.md +++ /dev/null @@ -1,7 +0,0 @@ -# ERPLibre - -## Move database prod to dev - -When moving database prod to your dev environment, you want to remove email servers, and install user test to test the database. -Run : -> -c config.conf --stop-after-init -i user_test,disable_mail_server --dev all -d DATABASE \ No newline at end of file diff --git a/HOWTO.md b/HOWTO.md deleted file mode 100644 index 3bf0c31..0000000 --- a/HOWTO.md +++ /dev/null @@ -1,4 +0,0 @@ -# How to clone me - -First, -pip install -r requirements.txt diff --git a/PRODUCTION.md b/PRODUCTION.md deleted file mode 100644 index 07114b1..0000000 --- a/PRODUCTION.md +++ /dev/null @@ -1,7 +0,0 @@ -# ERPLibre - -## Move database prod to dev - -When moving database prod to your dev environment, you want to remove email servers, and install user test to test the database. -Run : -> -c config.conf --stop-after-init -i user_test,disable_mail_server --dev all -d DATABASE \ No newline at end of file diff --git a/README.md b/README.md index d41b676..0ea50a9 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,17 @@ -# ERPLibre +# ERPLibre documentation +Select a guide to install your environment! -## Installation procedure production +## Discover guide +[Guide to run ERPLibre in discover to learn it](./doc/DISCOVER.md). -##### 1. Clone the project: -``` -git clone https://github.com/ERPLibre/ERPLibre.git -``` -##### 2. Modify the parameters -Modify the file env_var.sh for production installation. +## Production guide +[Guide to run ERPLibre in production server](./doc/PRODUCTION.md). -##### 3. Execute the script: -``` -sudo ./script/odoo_install_production.sh -``` - -## Installation procedure locally - -##### 1. Clone the project: -``` -git clone https://github.com/ERPLibre/ERPLibre.git -``` - -##### 2. Execute the script: -``` -sudo ./script/odoo_install_locally.sh -``` +## Development guide +[Guide to run ERPLibre in development environment](./doc/DEVELOPMENT.md). # Execution -## First run -``` -source ./venv/bin/activate -python odoo/odoo-bin -c config.conf --log-level debug -``` +[Guide to run ERPLibre with different case](./doc/RUN.md). -## Update all -Great idea to run it when update Odoo, update database of each modules. -``` -python odoo/odoo-bin -c config.conf -d [DATABASE] -u all --log-level debug -``` - -## Update module -``` -python odoo/odoo-bin -c config.conf -d [DATABASE] -u [module] --log-level debug -``` - -## Test -``` -python odoo/odoo-bin -c config.conf -d [DATABASE] -i [module to test] --test-enable --stop-after-init --log-level=test --test-tags [module_name][tags] -``` - -# Production -``` -python odoo/odoo-bin -c config.conf -d [DATABASE] --no-database-list -``` - -# Thanks -Thanks Yenthe Van Ginneken for your guides. \ No newline at end of file +# git-repo +To change repository like addons, see [GIT_REPO.md](doc/GIT_REPO.md) diff --git a/addons/ERPLibre_erplibre_addons b/addons/ERPLibre_erplibre_addons deleted file mode 160000 index e682637..0000000 --- a/addons/ERPLibre_erplibre_addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e68263793556cc0ec0af91be612421613b5cf7a2 diff --git a/addons/MathBenTech_development b/addons/MathBenTech_development deleted file mode 160000 index 097a500..0000000 --- a/addons/MathBenTech_development +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 097a5002dd6ec91512406f3add8bb7cad5372218 diff --git a/addons/MathBenTech_odoo-business-spending-management-quebec-canada b/addons/MathBenTech_odoo-business-spending-management-quebec-canada deleted file mode 160000 index 745cb2e..0000000 --- a/addons/MathBenTech_odoo-business-spending-management-quebec-canada +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 745cb2ec3df909e6f3622b4ef19971e6e83b46b5 diff --git a/addons/MathBenTech_scrummer b/addons/MathBenTech_scrummer deleted file mode 160000 index 38c04c8..0000000 --- a/addons/MathBenTech_scrummer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 38c04c8f7b7fe897d166ded74dda9d8d76f7f4c4 diff --git a/addons/Numigi_odoo-base-addons b/addons/Numigi_odoo-base-addons deleted file mode 160000 index 60bc1e5..0000000 --- a/addons/Numigi_odoo-base-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 60bc1e5414ff3bf81a6d72831da2eaad94ccbcb2 diff --git a/addons/Numigi_odoo-entertainment-addons b/addons/Numigi_odoo-entertainment-addons deleted file mode 160000 index 82c3325..0000000 --- a/addons/Numigi_odoo-entertainment-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 82c33255261eff361a91da13b28e4e68a95b25dd diff --git a/addons/Numigi_odoo-git-addons b/addons/Numigi_odoo-git-addons deleted file mode 160000 index 96db417..0000000 --- a/addons/Numigi_odoo-git-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 96db417669a631877c1439f617ac8c0cc6edfff9 diff --git a/addons/Numigi_odoo-hr-addons b/addons/Numigi_odoo-hr-addons deleted file mode 160000 index 0034395..0000000 --- a/addons/Numigi_odoo-hr-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0034395bcdb38c02749644607f43ccac760dfb49 diff --git a/addons/Numigi_odoo-partner-addons b/addons/Numigi_odoo-partner-addons deleted file mode 160000 index f0c54ff..0000000 --- a/addons/Numigi_odoo-partner-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f0c54ffb3409cd8e748ae5db19077c7c966cd57f diff --git a/addons/Numigi_odoo-product-addons b/addons/Numigi_odoo-product-addons deleted file mode 160000 index 36751bd..0000000 --- a/addons/Numigi_odoo-product-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 36751bd3c6baced6a0b3f5ddb675d87cb04a745c diff --git a/addons/Numigi_odoo-project-addons b/addons/Numigi_odoo-project-addons deleted file mode 160000 index 4388a4c..0000000 --- a/addons/Numigi_odoo-project-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4388a4ca61b87032e2c3783dc2740b299cd31b6f diff --git a/addons/Numigi_odoo-purchase-addons b/addons/Numigi_odoo-purchase-addons deleted file mode 160000 index 5d226ca..0000000 --- a/addons/Numigi_odoo-purchase-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5d226ca3887c77e31467a192a0fbe4066bf7842c diff --git a/addons/Numigi_odoo-stock-addons b/addons/Numigi_odoo-stock-addons deleted file mode 160000 index 3fe57c3..0000000 --- a/addons/Numigi_odoo-stock-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3fe57c3cad122d5a448239b46fda8bf76ea32493 diff --git a/addons/Numigi_odoo-survey-addons b/addons/Numigi_odoo-survey-addons deleted file mode 160000 index 9e897ba..0000000 --- a/addons/Numigi_odoo-survey-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9e897bae38ff0d6d3180296a552d994bb10c0eff diff --git a/addons/Numigi_odoo-timesheet-addons b/addons/Numigi_odoo-timesheet-addons deleted file mode 160000 index d2bbb19..0000000 --- a/addons/Numigi_odoo-timesheet-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d2bbb19dc8f917272694ff0a6231275083fb7e74 diff --git a/addons/Numigi_odoo-web-addons b/addons/Numigi_odoo-web-addons deleted file mode 160000 index 3a4aa46..0000000 --- a/addons/Numigi_odoo-web-addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3a4aa46439a794429d5939cff561f42c4f312a99 diff --git a/addons/OCA_account-analytic b/addons/OCA_account-analytic deleted file mode 160000 index 7ce9fe2..0000000 --- a/addons/OCA_account-analytic +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7ce9fe25a7c977c5338001bc32d58b1cadffe51e diff --git a/addons/OCA_account-budgeting b/addons/OCA_account-budgeting deleted file mode 160000 index e175ffa..0000000 --- a/addons/OCA_account-budgeting +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e175ffa84fb61f70de67a2732292e43bd490cefd diff --git a/addons/OCA_account-closing b/addons/OCA_account-closing deleted file mode 160000 index 40d40c7..0000000 --- a/addons/OCA_account-closing +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 40d40c73574bf65c91c879e0607b4ac455df06b2 diff --git a/addons/OCA_account-consolidation b/addons/OCA_account-consolidation deleted file mode 160000 index 741fc50..0000000 --- a/addons/OCA_account-consolidation +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 741fc50366bd70fceb88a2a3fcb0449b2582ed31 diff --git a/addons/OCA_account-financial-reporting b/addons/OCA_account-financial-reporting deleted file mode 160000 index 1e0f830..0000000 --- a/addons/OCA_account-financial-reporting +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1e0f8301ca015b3c4c456401bc30c5f211ccae3f diff --git a/addons/OCA_account-financial-tools b/addons/OCA_account-financial-tools deleted file mode 160000 index 9721abd..0000000 --- a/addons/OCA_account-financial-tools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9721abd4c9db653e1d009f8a023e9f750523989f diff --git a/addons/OCA_account-fiscal-rule b/addons/OCA_account-fiscal-rule deleted file mode 160000 index f396ba6..0000000 --- a/addons/OCA_account-fiscal-rule +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f396ba6a2e2acebaaff579f0e6991b669812d64d diff --git a/addons/OCA_account-invoice-reporting b/addons/OCA_account-invoice-reporting deleted file mode 160000 index 320dd9f..0000000 --- a/addons/OCA_account-invoice-reporting +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 320dd9fce4d212b2dcf5dc4447494964ad1e246d diff --git a/addons/OCA_account-invoicing b/addons/OCA_account-invoicing deleted file mode 160000 index 9db1c10..0000000 --- a/addons/OCA_account-invoicing +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9db1c104341f422b8545c3f2906d83bcb69d46ac diff --git a/addons/OCA_account-payment b/addons/OCA_account-payment deleted file mode 160000 index 888debe..0000000 --- a/addons/OCA_account-payment +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 888debebd8e42c1ee5107577ca2f3bc5f38d72e1 diff --git a/addons/OCA_account-reconcile b/addons/OCA_account-reconcile deleted file mode 160000 index 0390b11..0000000 --- a/addons/OCA_account-reconcile +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0390b112def3d362d95232d382317511616ee6dd diff --git a/addons/OCA_apps-store b/addons/OCA_apps-store deleted file mode 160000 index 022d24d..0000000 --- a/addons/OCA_apps-store +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 022d24db4c6463f38b9f4452fe03c9fb8b3a44ce diff --git a/addons/OCA_bank-payment b/addons/OCA_bank-payment deleted file mode 160000 index 7e0e572..0000000 --- a/addons/OCA_bank-payment +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7e0e572fb4772c8ebacfe52d58c396bdbd9e01f9 diff --git a/addons/OCA_bank-statement-import b/addons/OCA_bank-statement-import deleted file mode 160000 index 1983065..0000000 --- a/addons/OCA_bank-statement-import +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 198306503b51371c8603fd8defef65fcd82bf954 diff --git a/addons/OCA_brand b/addons/OCA_brand deleted file mode 160000 index 601a8c5..0000000 --- a/addons/OCA_brand +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 601a8c5c741b3035000f2337feab16325e6b9a49 diff --git a/addons/OCA_business-requirement b/addons/OCA_business-requirement deleted file mode 160000 index dd74e74..0000000 --- a/addons/OCA_business-requirement +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dd74e74583861b44c6120473ba0b56c90b887334 diff --git a/addons/OCA_commission b/addons/OCA_commission deleted file mode 160000 index e679120..0000000 --- a/addons/OCA_commission +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e679120a6d8f910cba81d949ecddd7b89f48fc01 diff --git a/addons/OCA_community-data-files b/addons/OCA_community-data-files deleted file mode 160000 index 2b17e55..0000000 --- a/addons/OCA_community-data-files +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2b17e5567d1bcb8ca377268615f209fdd57dc66e diff --git a/addons/OCA_connector-telephony b/addons/OCA_connector-telephony deleted file mode 160000 index 6d9df10..0000000 --- a/addons/OCA_connector-telephony +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d9df1037a97dbf791a7f0a717846a63144174bb diff --git a/addons/OCA_contract b/addons/OCA_contract deleted file mode 160000 index 3e53134..0000000 --- a/addons/OCA_contract +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3e531348cb51aeb2cc16c16ab8a2b693756ba47f diff --git a/addons/OCA_credit-control b/addons/OCA_credit-control deleted file mode 160000 index a97496a..0000000 --- a/addons/OCA_credit-control +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a97496a829cadc0d9be07d7825e93062417ab670 diff --git a/addons/OCA_currency b/addons/OCA_currency deleted file mode 160000 index 5c0d54e..0000000 --- a/addons/OCA_currency +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5c0d54e37789ecc24bebbe53fa56a92a492575bb diff --git a/addons/OCA_data-protection b/addons/OCA_data-protection deleted file mode 160000 index ce4f334..0000000 --- a/addons/OCA_data-protection +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ce4f334a1077b5c15d457f22daaa48b9f639409e diff --git a/addons/OCA_donation b/addons/OCA_donation deleted file mode 160000 index aa6478a..0000000 --- a/addons/OCA_donation +++ /dev/null @@ -1 +0,0 @@ -Subproject commit aa6478a72c9673ad6458de19aa2362397c613fae diff --git a/addons/OCA_e-commerce b/addons/OCA_e-commerce deleted file mode 160000 index d7c99e5..0000000 --- a/addons/OCA_e-commerce +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d7c99e565f25b495b3c0d252f181d8df4490a757 diff --git a/addons/OCA_edi b/addons/OCA_edi deleted file mode 160000 index 742b131..0000000 --- a/addons/OCA_edi +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 742b1316773f8a1b224e42c65c3c3a7685481a30 diff --git a/addons/OCA_event b/addons/OCA_event deleted file mode 160000 index e2bdf12..0000000 --- a/addons/OCA_event +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e2bdf12c61e9967eeb9abc618c79ca43b464ea7f diff --git a/addons/OCA_helpdesk b/addons/OCA_helpdesk deleted file mode 160000 index 6b84f81..0000000 --- a/addons/OCA_helpdesk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6b84f81c81ff3184526c0ca86ced7bbcdcc4c0b3 diff --git a/addons/OCA_hr b/addons/OCA_hr deleted file mode 160000 index 4743acf..0000000 --- a/addons/OCA_hr +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4743acf7ab796ea3738743a44c62cd516126ec53 diff --git a/addons/OCA_knowledge b/addons/OCA_knowledge deleted file mode 160000 index 9ae45f7..0000000 --- a/addons/OCA_knowledge +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9ae45f798bbefa854b03f612e22291ac1b95568d diff --git a/addons/OCA_l10n-canada b/addons/OCA_l10n-canada deleted file mode 160000 index 5680b48..0000000 --- a/addons/OCA_l10n-canada +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5680b485cdfa0b6f1c2f4e32356b5938a9752c00 diff --git a/addons/OCA_maintenance b/addons/OCA_maintenance deleted file mode 160000 index 4e521ec..0000000 --- a/addons/OCA_maintenance +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4e521ec35f6e8b66f86a62db644dadc9206b476e diff --git a/addons/OCA_management-system b/addons/OCA_management-system deleted file mode 160000 index 479afcc..0000000 --- a/addons/OCA_management-system +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 479afcc65ee29530e2bcaa7342f93b6783d14d97 diff --git a/addons/OCA_manufacture b/addons/OCA_manufacture deleted file mode 160000 index ce36844..0000000 --- a/addons/OCA_manufacture +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ce36844281754a75b527c4ace21837c8a16b75ab diff --git a/addons/OCA_margin-analysis b/addons/OCA_margin-analysis deleted file mode 160000 index 4a50437..0000000 --- a/addons/OCA_margin-analysis +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4a50437ecfa591a72e12255448d38d0fb1037a42 diff --git a/addons/OCA_mis-builder b/addons/OCA_mis-builder deleted file mode 160000 index 5d76972..0000000 --- a/addons/OCA_mis-builder +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5d7697296ad90794599373940e6fc6cead8ca1a2 diff --git a/addons/OCA_multi-company b/addons/OCA_multi-company deleted file mode 160000 index fdb4d25..0000000 --- a/addons/OCA_multi-company +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fdb4d255b6a3b51925f8a226bfebf2eccabd2786 diff --git a/addons/OCA_partner-contact b/addons/OCA_partner-contact deleted file mode 160000 index a79e576..0000000 --- a/addons/OCA_partner-contact +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a79e57685caad7d0dec9318378fdd46862e31be4 diff --git a/addons/OCA_pos b/addons/OCA_pos deleted file mode 160000 index 6a922b3..0000000 --- a/addons/OCA_pos +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6a922b3d87491d59128a097f286be1e3f3fc11df diff --git a/addons/OCA_product-attribute b/addons/OCA_product-attribute deleted file mode 160000 index ea48097..0000000 --- a/addons/OCA_product-attribute +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ea48097094462e67d7e1558b333da78c6038b89c diff --git a/addons/OCA_product-pack b/addons/OCA_product-pack deleted file mode 160000 index b9eccbd..0000000 --- a/addons/OCA_product-pack +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b9eccbdb9ae0fdd3ed1138270c3eff3142a015c3 diff --git a/addons/OCA_product-variant b/addons/OCA_product-variant deleted file mode 160000 index fb4f404..0000000 --- a/addons/OCA_product-variant +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fb4f4042b3ca0ee6cde6ab0625e2c914b96b174f diff --git a/addons/OCA_project b/addons/OCA_project deleted file mode 160000 index 4390f1f..0000000 --- a/addons/OCA_project +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4390f1ffa9f00058b0d1aa7fae27fb74bbefb83b diff --git a/addons/OCA_project-reporting b/addons/OCA_project-reporting deleted file mode 160000 index 7f71f08..0000000 --- a/addons/OCA_project-reporting +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7f71f086dd732170e7605dfdf80e6cc4969a711e diff --git a/addons/OCA_purchase-workflow b/addons/OCA_purchase-workflow deleted file mode 160000 index d174367..0000000 --- a/addons/OCA_purchase-workflow +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d17436791bcfbe0985af137163564af3fe90bbe1 diff --git a/addons/OCA_queue b/addons/OCA_queue deleted file mode 160000 index 0b71a39..0000000 --- a/addons/OCA_queue +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0b71a3951b583f154f170adacf4920e6d7138329 diff --git a/addons/OCA_reporting-engine b/addons/OCA_reporting-engine deleted file mode 160000 index 14fba65..0000000 --- a/addons/OCA_reporting-engine +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 14fba657a0dbda1258edcf3c92886866e7cecf67 diff --git a/addons/OCA_sale-workflow b/addons/OCA_sale-workflow deleted file mode 160000 index 4b20035..0000000 --- a/addons/OCA_sale-workflow +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4b200358312689d944aaaf012c5723bb2bc9cb77 diff --git a/addons/OCA_server-auth b/addons/OCA_server-auth deleted file mode 160000 index f911c9f..0000000 --- a/addons/OCA_server-auth +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f911c9f31a064cca3012431b70e60a7b89448138 diff --git a/addons/OCA_server-brand b/addons/OCA_server-brand deleted file mode 160000 index d8f27b0..0000000 --- a/addons/OCA_server-brand +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d8f27b04475d3cc74a7bebb1e086f647f5e01569 diff --git a/addons/OCA_server-env b/addons/OCA_server-env deleted file mode 160000 index 19af535..0000000 --- a/addons/OCA_server-env +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 19af535b3aedd5c1fdfbe911dacfc43ae31edb71 diff --git a/addons/OCA_server-tools b/addons/OCA_server-tools deleted file mode 160000 index d97aaa9..0000000 --- a/addons/OCA_server-tools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d97aaa9fa2f01f64ebf7100668e0901fde35d42f diff --git a/addons/OCA_server-ux b/addons/OCA_server-ux deleted file mode 160000 index 655b3cc..0000000 --- a/addons/OCA_server-ux +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 655b3cc291a7e3718371a45ebe6f2e0952896adf diff --git a/addons/OCA_social b/addons/OCA_social deleted file mode 160000 index 7b0836b..0000000 --- a/addons/OCA_social +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7b0836bf7a5c40db332dd90d5ebef619234060ac diff --git a/addons/OCA_stock-logistics-warehouse b/addons/OCA_stock-logistics-warehouse deleted file mode 160000 index a591de1..0000000 --- a/addons/OCA_stock-logistics-warehouse +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a591de15150f7b16c1ef23d2fc30c814874dea27 diff --git a/addons/OCA_timesheet b/addons/OCA_timesheet deleted file mode 160000 index 8625e65..0000000 --- a/addons/OCA_timesheet +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8625e65414801780c91e91bf93b2ed32567f8117 diff --git a/addons/OCA_web b/addons/OCA_web deleted file mode 160000 index b65c492..0000000 --- a/addons/OCA_web +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b65c492f4011fe4e9dac8c0a26eeef8c43cb1c39 diff --git a/addons/OCA_website b/addons/OCA_website deleted file mode 160000 index 603a44d..0000000 --- a/addons/OCA_website +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 603a44d53a2e7a457560a0f99bdcc95780399ee5 diff --git a/addons/OCA_wms b/addons/OCA_wms deleted file mode 160000 index e7a1541..0000000 --- a/addons/OCA_wms +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e7a1541f8c513cf755bd82780c6c035d2fafc2ce diff --git a/addons/SanteLibre_santelibre_addons b/addons/SanteLibre_santelibre_addons deleted file mode 160000 index ee94058..0000000 --- a/addons/SanteLibre_santelibre_addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ee94058aecee418b3652864f23b54a86ba0f92f4 diff --git a/addons/Smile-SA_odoo_addons b/addons/Smile-SA_odoo_addons deleted file mode 160000 index 2be318c..0000000 --- a/addons/Smile-SA_odoo_addons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2be318c18ac5b0fe2129cc61d86419033ff07d5f diff --git a/addons/addons/.gitkeep b/addons/addons/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/addons/muk-it_muk_base b/addons/muk-it_muk_base deleted file mode 160000 index d888c96..0000000 --- a/addons/muk-it_muk_base +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d888c9695292295a732fcdd4a7b9820978df5e7f diff --git a/addons/muk-it_muk_dms b/addons/muk-it_muk_dms deleted file mode 160000 index 020e604..0000000 --- a/addons/muk-it_muk_dms +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 020e604d635a229c09a07e839d95f8e37706606a diff --git a/addons/muk-it_muk_docs b/addons/muk-it_muk_docs deleted file mode 160000 index a8ea02b..0000000 --- a/addons/muk-it_muk_docs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a8ea02b9f00ae9fe5d2ea25ac43d23532cc11d45 diff --git a/addons/muk-it_muk_misc b/addons/muk-it_muk_misc deleted file mode 160000 index 37b9d6d..0000000 --- a/addons/muk-it_muk_misc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 37b9d6dc20fa686a323057b160015bfc2c2c8143 diff --git a/addons/muk-it_muk_quality b/addons/muk-it_muk_quality deleted file mode 160000 index 1a4c6f2..0000000 --- a/addons/muk-it_muk_quality +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1a4c6f25c5e4fe0029d406d6283555bd23a44d27 diff --git a/addons/muk-it_muk_web b/addons/muk-it_muk_web deleted file mode 160000 index 431d86d..0000000 --- a/addons/muk-it_muk_web +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 431d86d6694e846b407c84f00a31a10f0cf5b83b diff --git a/addons/muk-it_muk_website b/addons/muk-it_muk_website deleted file mode 160000 index c1e6c17..0000000 --- a/addons/muk-it_muk_website +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c1e6c1755d09562f66247832bd01a0d580c43e23 diff --git a/addons/odooaktiv_QuotationRevision b/addons/odooaktiv_QuotationRevision deleted file mode 160000 index 701438f..0000000 --- a/addons/odooaktiv_QuotationRevision +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 701438f9c59bd657de516d9ef4de1ba6167bf30b diff --git a/addons/openeducat_openeducat_erp b/addons/openeducat_openeducat_erp deleted file mode 160000 index 4a2a1d9..0000000 --- a/addons/openeducat_openeducat_erp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4a2a1d930d88a127959fd39af22f7d818e08663d diff --git a/doc/CONTRIBUTION.md b/doc/CONTRIBUTION.md new file mode 100644 index 0000000..c68c584 --- /dev/null +++ b/doc/CONTRIBUTION.md @@ -0,0 +1,16 @@ +# Thanks +## AGILE OPS +Thanks for contributing to GIT_REPO. +- [Agile OPS](https://www.linkedin.com/in/michaelfaille/) + +## MathBenTech +Thanks for creating this project. +- [MathBen.Tech](https://mathben.tech) + +## TechnoLibre +Thanks for making enterprise edition of ERPLibre. +- [TechnoLibre](https://technolibre.ca) + +## Yenthe Van Ginneken +Thanks Yenthe Van Ginneken for your scripting guides and tutorial. +- [Yenthe666 InstallScript](https://github.com/Yenthe666/InstallScript) diff --git a/doc/DEVELOPMENT.md b/doc/DEVELOPMENT.md new file mode 100644 index 0000000..2e45e18 --- /dev/null +++ b/doc/DEVELOPMENT.md @@ -0,0 +1,87 @@ +# Development guide +Setup your environment to develop modules and debug the platform. + +## Installation procedure locally +### 1. Clone the project: +```bash +git clone https://github.com/ERPLibre/ERPLibre.git +``` + +### 2. Execute the script: +```bash +cd ERPLibre +./script/install_dev.sh +./script/install_locally_dev.sh +``` + +### 3. Run ERPLibre +```bash +./run.sh +``` + +## Fork project to create a new project independent of ERPLibre (deprecated) +ERPLibre was created by this script. It's now deprecated. +Use this script when you need to fork directly from the original source. +Don't use this script if you want to update from ERPLibre and follow mainstream development. +```bash +./venv/bin/python ./script/fork_project.py --github_token GITHUB_KEY --organization NAME +``` + +# Fork all repo for you own organization +Go to your github account and generate a token to access fork option with your user. Create an organization (or you can choose your user name). + +This command will fork all repos and ERPLibre to your own organization. It keeps track to ERPLibre. +```bash +./venv/bin/python ./script/fork_project_ERPLibre.py --github_token GITHUB_KEY --organization NAME +``` + +## Generate manifest from csv repo +Add repo in file [./source_repo_addons.csv](./source_repo_addons.csv) + +Execute to generate manifest of Repo +```bash +./venv/bin/python ./script/fork_project_ERPLibre.py --skip_fork +``` + +## Move database prod to dev +When moving database prod to your dev environment, you want to remove email servers, and install user test in order to test the database. +Run: +```bash +./run.sh --stop-after-init -i user_test,disable_mail_server --dev all -d DATABASE +``` + +# TODO +```bash +./venv/bin/python ./script/git_change_remote.py +``` + +## Change git url https to git +This will update all urls in git format: +```bash +./venv/bin/python ./script/git_change_remote_https_to_git.py +``` + +## Diff repo with another project +Tools to display the differences between the repo and another project. +```bash +./venv/bin/python ./script/list_repo_diff.py --sync_to /path/to/project/erplibre --dyr_sync +``` + +## Sync repo with another project +Tools to synchronise the repo with another project. This will show differences and try to checkout on the same commit in all repo. +```bash +./venv/bin/python ./script/git_change_remote.py --sync_to /path/to/project/erplibre +``` + +## Add repo +Access to a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv) + +Fork the repo to be able to push new code: +```bash +./venv/bin/python ./script/fork_project_ERPLibre.py +``` + +To regenerate only manifest.xml. +```bash +./venv/bin/python ./script/fork_project_ERPLibre.py --skip_fork +``` diff --git a/doc/DISCOVER.md b/doc/DISCOVER.md new file mode 100644 index 0000000..7a1fc0f --- /dev/null +++ b/doc/DISCOVER.md @@ -0,0 +1,31 @@ +# Discover +Explore the ERPLibre solution. + +## Fast installation +### 1. Clone the project: +```bash +git clone https://github.com/ERPLibre/ERPLibre.git +``` + +### 2. Run installation locally: +```bash +cd ERPLibre +./script/install_dev.sh +./script/install_locally_dev.sh +``` + +### 3. Run ERPLibre +```bash +./run.sh +``` + +## Add repo +Access to a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv) + +Execute script: +```bash +./venv/bin/python ./script/git_repo_manifest.py +./script/install_locally_dev.sh +git commit -am "Add new repo" +``` +[Update your repo.](./GIT_REPO.md) diff --git a/doc/FAQ.md b/doc/FAQ.md new file mode 100644 index 0000000..d5a29cc --- /dev/null +++ b/doc/FAQ.md @@ -0,0 +1,21 @@ +# FAQ +## git-repo +### error.GitError fatal bad revision +Example: +``` +error.GitError: manifests rev-list (u'^2736dfd46e8a30cf59a9cd6e93d9e56e87021f2a', 'HEAD', '--'): fatal: bad revision 'HEAD' +``` + +Did you modify files in .repo? + +Anyways, to reset files from your branch into .repo: +```bash +cd .repo/manifests +git branch -av +> remotes/m/rel/8953/zd552kl/7.1.1-11.40.208 -> origin/rel/8953/zd552kl/7.1.1-11.40.208 +> remotes/origin/dev/ze550kl/asus/5.0.0-20150208 11a37fe set dev/ze550kl/asus/5.0.0-20150208 +> remotes/origin/rel/8953/zd552kl/7.1.1-11.40.208 2736dfd Remove opencv3 from the manifest +# To reset the "remotes/origin" use the same as "remotes/m" +git reset --hard REF_OF_REMOTES/m +> git reset --hard remotes/origin/rel/8953/zd552kl/7.1.1-11.40.208 +``` \ No newline at end of file diff --git a/doc/GIT_REPO.md b/doc/GIT_REPO.md new file mode 100644 index 0000000..a2608c1 --- /dev/null +++ b/doc/GIT_REPO.md @@ -0,0 +1,54 @@ +# git-repo +This is a guide to understand git-repo. Scripts in ERPLibre use git-repo automatically. + +[git-repo of Google](https://code.google.com/archive/p/git-repo) is used to manage all git repository under licence [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html). + +## Setup repo +```bash +curl https://storage.googleapis.com/git-repo-downloads/repo > ./venv/repo +``` + +## prod +```bash +./venv/repo init -u http://git.erplibre.ca/ERPLibre -b 12.0_repo +./venv/repo sync +``` + +## dev +```bash +./venv/repo init -u http://git.erplibre.ca/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml +./venv/repo sync +``` + +## dev locally +[Guide to setup locally git](https://railsware.com/blog/taming-the-git-daemon-to-quickly-share-git-repository/). +```bash +git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose & + +./venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.dev.xml +./venv/repo sync -m ./manifest/default.dev.xml +``` + +# Create Manifest +A [Manifest](https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md), is a XML file managed by git-repo to generate repo. + +## Make a new version of prod +Freezes all repo, from dev to prod. + +This will add revision git hash in the Manifest. +```bash +./venv/repo manifest -r -o ./manifest/default.xml +``` +Do your commit. +```bash +git commit -am "[#ticket] subject: short sentence" +``` + +## Create a dev version +```bash +./venv/repo manifest -o ./manifest/default.dev.xml +``` +Do your commit. +```bash +git commit -am "[#ticket] subject: short sentence" +``` \ No newline at end of file diff --git a/doc/HOWTO.md b/doc/HOWTO.md new file mode 100644 index 0000000..b337e76 --- /dev/null +++ b/doc/HOWTO.md @@ -0,0 +1,3 @@ +# HOW TO +## Update changelog +Please, read documentation (keepachangelog.com)[https://keepachangelog.com] \ No newline at end of file diff --git a/MIGRATION.md b/doc/MIGRATION.md similarity index 98% rename from MIGRATION.md rename to doc/MIGRATION.md index 4dcfab3..77298e9 100644 --- a/MIGRATION.md +++ b/doc/MIGRATION.md @@ -6,7 +6,7 @@ TODO ## Migration procedure dev -Example : +Example: update module helpdesk_mgmt and helpdesk_join_team diff --git a/doc/PRODUCTION.md b/doc/PRODUCTION.md new file mode 100644 index 0000000..880dfc3 --- /dev/null +++ b/doc/PRODUCTION.md @@ -0,0 +1,32 @@ +# ERPLibre production guide + +## Installation procedure production + +### 1. Clone the project: +```bash +git clone https://git.erplibre.ca/ERPLibre.git +``` + +### 2. Modify the parameters +Modify the file env_var.sh for production installation. + +### 3. Execute the script: +```bash +cd ERPLibre +./script/install_dev.sh +./script/install_production.sh +``` + +## Production execution +```bash +cd /[EL_USER]/erplibre +./run.sh -d [DATABASE] --no-database-list +``` + +## Move database prod to dev + +When moving database prod to your dev environment, you want to remove email servers, and install user test to test the database. +Run: +```bash +./run.sh --stop-after-init -i user_test,disable_mail_server --dev all -d DATABASE +``` diff --git a/doc/RELEASE.md b/doc/RELEASE.md new file mode 100644 index 0000000..9e21f25 --- /dev/null +++ b/doc/RELEASE.md @@ -0,0 +1,21 @@ +# Release +A guide on how to do a release. + +## Generate new prod +```bash +./venv/repo manifest -r -o ./manifest/default.xml +``` +Do your commit. +```bash +git commit -am "[#ticket] subject: short sentence" +``` + +## Merge release +Merge your feature to master. Generate a new tag. Fill CHANGELOG.md + +# TIPS +## Compare diff repo with another ERPLibre project +To generate a list of differences between repo git commit, do +```bash +./venv/bin/python ./script/git_change_remote.py --sync_to /path/to/directory +``` \ No newline at end of file diff --git a/doc/RUN.md b/doc/RUN.md new file mode 100644 index 0000000..c1e1d0b --- /dev/null +++ b/doc/RUN.md @@ -0,0 +1,41 @@ +# Execute ERPLibre + +## Start database +```bash +sudo systemctl start postgresql.service +``` + +## Run ERPLibre +### Method 1 +Simply +```bash +./run.sh +``` + +With arguments +```bash +./run.sh -h +``` + +### Method 2 +Execute your own python script: +```bash +source ./venv/bin/activate +python odoo/odoo-bin -c config.conf --log-level debug +``` + +### Update all +Great idea to run it when updating Odoo, it updates database of each modules. +```bash +python odoo/odoo-bin -c config.conf -d [DATABASE] -u all --log-level debug +``` + +### Update module +```bash +python odoo/odoo-bin -c config.conf -d [DATABASE] -u [module] --log-level debug +``` + +### Test +```bash +python odoo/odoo-bin -c config.conf -d [DATABASE] -i [module to test] --test-enable --stop-after-init --log-level=test --test-tags [module_name][tags] +``` \ No newline at end of file diff --git a/doc/TODO.md b/doc/TODO.md new file mode 100644 index 0000000..5650e49 --- /dev/null +++ b/doc/TODO.md @@ -0,0 +1,11 @@ +# Note healtcheck +Table à vérifier dans pgsql: ir_ui_view + +Restore une BD: +- un module est installé mais n'est pas physiquement là + +Une DB est installé mais on n'arrive pas à l'exécuté + + HEALTHCHECK CMD curl --fail http://localhost:8069/web || exit 1 + + TODO: having the DB variable configurable \ No newline at end of file diff --git a/env_var.sh b/env_var.sh index b7a945b..d919be9 100755 --- a/env_var.sh +++ b/env_var.sh @@ -1,30 +1,23 @@ -#!/bin/bash -################################################################################ -# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) -# Author: Yenthe Van Ginneken -#------------------------------------------------------------------------------- -# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances -# in one Ubuntu because of the different xmlrpc_ports -#------------------------------------------------------------------------------- -################################################################################ +#!/usr/bin/env bash -OE_USER="odoo" -OE_HOME="/${OE_USER}" -OE_HOME_ODOO="${OE_HOME}/odoo" -OE_HOME_EXT="${OE_HOME_ODOO}/odoo" +EL_USER="erplibre" +EL_HOME="/${EL_USER}" +EL_HOME_ERPLIBRE="${EL_HOME}/erplibre" +EL_HOME_ODOO="${EL_HOME_ERPLIBRE}/odoo" # 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. -INSTALL_WKHTMLTOPDF="True" -# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.) -OE_PORT="8069" -OE_LONGPOLLING_PORT="8072" +EL_INSTALL_WKHTMLTOPDF="True" +# Set the default Odoo port +EL_PORT="8069" +EL_LONGPOLLING_PORT="8072" # set the superadmin password -OE_SUPERADMIN="admin" -OE_VERSION="stable_prod_12.0" -OE_CONFIG="${OE_USER}" -MINIMAL_ADDONS="False" +EL_SUPERADMIN="admin" +EL_CONFIG="${EL_USER}" +EL_MINIMAL_ADDONS="False" # Set this to True if you want to install Nginx! -INSTALL_NGINX="True" +EL_INSTALL_NGINX="True" # Set the website name -WEBSITE_NAME="_" -GITHUB_TOKEN="" +EL_WEBSITE_NAME="_" +EL_GITHUB_TOKEN="" +EL_MANIFEST_PROD="./manifest/default.xml" +EL_MANIFEST_DEV="./manifest/default.dev.xml" diff --git a/manifest/default.dev.xml b/manifest/default.dev.xml new file mode 100644 index 0000000..51c95b1 --- /dev/null +++ b/manifest/default.dev.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/manifest/default.xml b/manifest/default.xml new file mode 100644 index 0000000..bc968b9 --- /dev/null +++ b/manifest/default.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/odoo b/odoo deleted file mode 160000 index 94bcbc9..0000000 --- a/odoo +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 94bcbc92e5e5a6fd3de7267e3c01f8c11fb045f4 diff --git a/requirements.txt b/requirements.txt index ca82ce2..124164f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ giturlparse agithub gitpython PyYAML -retrying \ No newline at end of file +retrying +xmltodict \ No newline at end of file diff --git a/run.md b/run.md deleted file mode 100644 index ba722dc..0000000 --- a/run.md +++ /dev/null @@ -1,5 +0,0 @@ -== Start database == -sudo systemctl start postgresql.service - -== Run Odoo == -./venv/bin/python ./odoo/odoo-bin -c config.conf diff --git a/run.sh b/run.sh index 58f64fd..28b1df3 100755 --- a/run.sh +++ b/run.sh @@ -1,2 +1,2 @@ #!/usr/bin/env bash -./venv/bin/python ./odoo/odoo-bin -c ./config.conf +./venv/bin/python ./odoo/odoo-bin -c ./config.conf $@ diff --git a/script/addons_repo_origin.py b/script/addons_repo_origin.py deleted file mode 100644 index 1112471..0000000 --- a/script/addons_repo_origin.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -# dict config contains information about repository of original source -# level 1: website of git -# level 2: entity, organization, user -# level 3: project name -config = { - "github.com": { - "odoo": [ - "odoo", - ], - } -} -config_addons = { - "github.com": { - "MathBenTech": [ - "development", - "odoo-business-spending-management-quebec-canada", - "scrummer", - ], - "muk-it": [ - "muk_base", - "muk_dms", - "muk_docs", - "muk_misc", - "muk_quality", - "muk_web", - "muk_website", - ], - "Numigi": [ - "odoo-base-addons", - "odoo-entertainment-addons", - "odoo-git-addons", - "odoo-hr-addons", - "odoo-partner-addons", - "odoo-product-addons", - "odoo-project-addons", - "odoo-purchase-addons", - "odoo-stock-addons", - "odoo-survey-addons", - "odoo-timesheet-addons", - "odoo-web-addons", - ], - "OCA": [ - "account-analytic", - "account-budgeting", - "account-closing", - "account-consolidation", - "account-financial-reporting", - "account-fiscal-rule", - "account-invoicing", - "account-invoice-reporting", - "account-payment", - "account-reconcile", - "apps-store", - "bank-payment", - "bank-statement-import", - "brand", - "business-requirement", - "commission", - "community-data-files", - "connector-telephony", - "contract", - "credit-control", - "currency", - "data-protection", - "donation", - "e-commerce", - "edi", - "event", - "helpdesk", - "hr", - "knowledge", - "l10n-canada", - "maintenance", - "management-system", - "manufacture", - "margin-analysis", - "mis-builder", - "multi-company", - "partner-contact", - "pos", - "product-attribute", - "product-pack", - "product-variant", - "project", - "project-reporting", - "purchase-workflow", - "queue", - "reporting-engine", - "sale-workflow", - "server-auth", - "server-brand", - "server-env", - "server-tools", - "server-ux", - "social", - "stock-logistics-warehouse", - "timesheet", - "web", - "website", - "wms", - ], - "odooaktiv": [ - "QuotationRevision", - ], - "openeducat": [ - "openeducat_erp", - ], - "Smile-SA": [ - "odoo_addons", - ], - } -} diff --git a/script/fork_github_repo/__init__.py b/script/fork_github_repo/__init__.py index fd213f4..1d7d081 100644 --- a/script/fork_github_repo/__init__.py +++ b/script/fork_github_repo/__init__.py @@ -147,7 +147,7 @@ def fork_and_clone_repo( print("Error when forking repo %s" % forked_repo) exit(1) else: - print("Forked %s to %s" % (upstream_url, forked_repo['ssh_url'])) + print("Forked %s to %s" % (upstream_url, forked_repo['html_url'])) elif status == 202: print("Forked repo %s already exists" % forked_repo['full_name']) elif status != 200: diff --git a/script/fork_project.py b/script/fork_project.py index ce9a958..c2396a7 100644 --- a/script/fork_project.py +++ b/script/fork_project.py @@ -13,7 +13,7 @@ from script import fork_github_repo from script.git_tool import GitTool _logger = logging.getLogger(__name__) -CST_GITHUB_TOKEN = "GITHUB_TOKEN" +CST_EL_GITHUB_TOKEN = "EL_GITHUB_TOKEN" def get_config(): @@ -37,7 +37,7 @@ def get_config(): parser.add_argument('--organization', dest="organization", default="ERPLibre", help="Choose organization to fork and change all repo.") parser.add_argument('--github_token', dest="github_token", - default=config.get(CST_GITHUB_TOKEN), + default=config.get(CST_EL_GITHUB_TOKEN), help="GitHub token generated by user") args = parser.parse_args() return args @@ -50,7 +50,6 @@ def main(): if not github_token: raise ValueError("Missing github_token") repo_root = Repo(config.dir) - lst_repo = GitTool().get_source_repo_addons(repo_path=config.dir) i = 0 total = len(lst_repo) @@ -115,7 +114,7 @@ def main(): # Update origin to new repo - GitTool().generate_odoo_install_locally() + GitTool().generate_install_locally() if __name__ == '__main__': diff --git a/script/fork_project_ERPLibre.py b/script/fork_project_ERPLibre.py index 4917946..fb25b19 100644 --- a/script/fork_project_ERPLibre.py +++ b/script/fork_project_ERPLibre.py @@ -12,7 +12,7 @@ sys.path.append(new_path) from script.git_tool import GitTool _logger = logging.getLogger(__name__) -CST_GITHUB_TOKEN = "GITHUB_TOKEN" +CST_EL_GITHUB_TOKEN = "EL_GITHUB_TOKEN" def get_config(): @@ -36,12 +36,11 @@ def get_config(): parser.add_argument('--organization', dest="organization", default="ERPLibre", help="Choose organization to fork and change all repo.") parser.add_argument("--skip_fork", action="store_true", - help="Ignore fork to generate only dependancies like " - ".gitmodules and odoo_install_locally.sh") + help="Ignore fork to generate only manifest.") parser.add_argument('-f', "--force", action="store_true", help="Force rewrite remote.") parser.add_argument('--github_token', dest="github_token", - default=config.get(CST_GITHUB_TOKEN), + default=config.get(CST_EL_GITHUB_TOKEN), help="GitHub token generated by user") args = parser.parse_args() return args @@ -53,79 +52,83 @@ def main(): git_tool = GitTool() root_repo = Repo(config.dir) - if not github_token: + if not github_token and not config.skip_fork: raise ValueError("Missing github_token") organization_name = config.organization lst_repo = git_tool.get_source_repo_addons(repo_path=config.dir, add_repo_root=True) lst_repo_organization = [git_tool.get_transformed_repo_info_from_url( a.get("url"), repo_path=config.dir, organization_force=organization_name, - is_submodule=a.get("is_submodule"), sub_path=a.get("sub_path")) + is_submodule=a.get("is_submodule"), sub_path=a.get("sub_path"), + revision=a.get("revision"), clone_depth=a.get("clone_depth")) for a in lst_repo] - i = 0 - total = len(lst_repo) - for repo in lst_repo: - i += 1 - print(f"Nb element {i}/{total}") - url = repo.get("url") - try: - working_repo = Repo(repo.get("relative_path")) - except git.exc.NoSuchPathError: - # Check to fork - # repo_info = git_tool.get_transformed_repo_info_from_url( - # url, organization_force="ERPLibre", - # is_submodule=repo.get("is_submodule"), - # sub_path=repo.get("sub_path")) - git_tool.fork_repo(upstream_url=url, - github_token=github_token, - organization_name="ERPLibre") - repo_info = git_tool.get_transformed_repo_info_from_url( - url, organization_force=organization_name, - is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path")) - git_tool.fork_repo(upstream_url=url, - github_token=github_token, - organization_name=organization_name) + if not config.skip_fork: + i = 0 + total = len(lst_repo) + for repo in lst_repo: + i += 1 + print(f"Nb element {i}/{total} - {repo.get('project_name')}") + url = repo.get("url") - git_tool.add_and_fetch_remote(repo_info, root_repo=root_repo) - continue + try: + working_repo = Repo(repo.get("relative_path")) + except git.exc.NoSuchPathError: + # Check to fork + # repo_info = git_tool.get_transformed_repo_info_from_url( + # url, organization_force="ERPLibre", + # is_submodule=repo.get("is_submodule"), + # sub_path=repo.get("sub_path")) + git_tool.fork_repo(upstream_url=url, + github_token=github_token, + organization_name="ERPLibre") + repo_info = git_tool.get_transformed_repo_info_from_url( + url, organization_force=organization_name, + is_submodule=repo.get("is_submodule"), + sub_path=repo.get("sub_path")) + git_tool.fork_repo(upstream_url=url, + github_token=github_token, + organization_name=organization_name) - dct_remote_name = {a.name: a for a in working_repo.remotes} - remote_origin = dct_remote_name.get("origin") - remote_erplibre = dct_remote_name.get("ERPLibre") - remote_organization = dct_remote_name.get(organization_name) + # git_tool.add_and_fetch_remote(repo_info, root_repo=root_repo) + continue + + dct_remote_name = {a.name: a for a in working_repo.remotes} + remote_origin = dct_remote_name.get("origin") + remote_erplibre = dct_remote_name.get("ERPLibre") + remote_organization = dct_remote_name.get(organization_name) - if not config.skip_fork: if not remote_erplibre: repo_info = git_tool.get_transformed_repo_info_from_url( url, organization_force="ERPLibre", is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path")) - git_tool.add_and_fetch_remote(repo_info) + # git_tool.add_and_fetch_remote(repo_info) git_tool.fork_repo(url, github_token, organization_name=organization_name, ) - repo_info = git_tool.get_transformed_repo_info_from_url( - url, organization_force=organization_name, - is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path")) - if remote_origin: - working_repo.git.remote("remove", "origin") - repo_info.organization = "origin" - try: - git_tool.add_and_fetch_remote(repo_info, root_repo=root_repo) - except Exception as e: - print(e) - if config.force and remote_organization: - working_repo.git.remote("remove", organization_name) + repo_info = git_tool.get_transformed_repo_info_from_url( + url, organization_force=organization_name, + is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path")) + if remote_origin: + working_repo.git.remote("remove", "origin") + repo_info.organization = "origin" + # try: + # git_tool.add_and_fetch_remote(repo_info, root_repo=root_repo) + # except Exception as e: + # print(e) + if config.force and remote_organization: + working_repo.git.remote("remove", organization_name) - repo_info.organization = organization_name - git_tool.add_and_fetch_remote(repo_info) + repo_info.organization = organization_name + # git_tool.add_and_fetch_remote(repo_info) # Update origin to new repo - git_tool.generate_git_modules(lst_repo_organization, repo_path=config.dir) - git_tool.generate_odoo_install_locally() + # git_tool.generate_git_modules(lst_repo_organization, repo_path=config.dir) + git_tool.generate_repo_manifest(lst_repo_organization, repo_path=config.dir) + git_tool.generate_install_locally() if __name__ == '__main__': diff --git a/script/git_change_remote.py b/script/git_change_remote.py index 4679d96..91b1282 100755 --- a/script/git_change_remote.py +++ b/script/git_change_remote.py @@ -10,11 +10,10 @@ from retrying import retry # pip install retrying new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) sys.path.append(new_path) -from script import fork_github_repo from script import git_tool _logger = logging.getLogger(__name__) -CST_GITHUB_TOKEN = "GITHUB_TOKEN" +CST_EL_GITHUB_TOKEN = "EL_GITHUB_TOKEN" def get_config(): @@ -36,18 +35,20 @@ def get_config(): parser.add_argument('-d', '--dir', dest="dir", default="./", help="Path of repo to change remote, including submodule.") parser.add_argument('--github_token', dest="github_token", - default=config.get(CST_GITHUB_TOKEN), + default=config.get(CST_EL_GITHUB_TOKEN), help="GitHub token generated by user") parser.add_argument("--open_web_browser", action="store_true", help="Open web browser for each repo.") parser.add_argument("--generate_only_install_locally", action="store_true", - help="Only generate script odoo_install_locally.sh.") - parser.add_argument("--generate_repo_source_from_building", action="store_true", - help=f"Only generate " - f"{git_tool.CST_FILE_SOURCE_REPO_ADDONS_ODOO}") + help="Only generate script install_locally.sh.") parser.add_argument("--sync_to", dest="sync_to", - help=f"Only synchronize matching repo, use path compare to " - f"repo.") + help="Only synchronize matching repo, use path compare to " + "repo.") + parser.add_argument("--dry_sync", dest="dry_sync", action="store_true", + help="Don't apply modification when sync_to.") + parser.add_argument("--sync_with_submodule", dest="sync_with_submodule", + action="store_true", + help="Remote directory use submodule to sync.") args = parser.parse_args() return args @@ -58,24 +59,23 @@ def main(): config = get_config() if config.generate_only_install_locally: + print("Generate config file locally.") gt = git_tool.GitTool() - gt.generate_odoo_install_locally() - return - - if config.generate_repo_source_from_building: - gt = git_tool.GitTool() - gt.generate_repo_source_from_building() + gt.generate_install_locally() return if config.sync_to: + if config.sync_to[-1] != "/": + config.sync_to += "/" gt = git_tool.GitTool() result = gt.get_matching_repo(repo_compare_to=config.sync_to, - force_normalize_compare=True) - gt.sync_to(result) + force_normalize_compare=True, + sync_with_submodule=config.sync_with_submodule) + gt.sync_to(result, checkout_when_diff=not config.dry_sync) return # repo_root = Repo(".") - lst_repo = git_tool.GitTool.get_repo_info_submodule(repo_path=config.dir) + lst_repo = git_tool.GitTool.get_repo_info(repo_path=config.dir) i = 0 total = len(lst_repo) for repo in lst_repo: diff --git a/script/git_change_remote_https_to_git.py b/script/git_change_remote_https_to_git.py index 5b055bb..ebdbeec 100755 --- a/script/git_change_remote_https_to_git.py +++ b/script/git_change_remote_https_to_git.py @@ -34,11 +34,9 @@ def get_config(): ) parser.add_argument('-d', '--dir', dest="dir", default="./", help="Path of repo to change remote, including submodule.") - parser.add_argument('-f', '--upstream', dest="upstream", default="origin", - help="Upstream name to change address https to git.") - # TODO support all_upstream - # parser.add_argument("--all_upstream", action="store_true", - # help="Replace for all existing upstream for each repo.") + parser.add_argument('-f', '--upstream', dest="upstream", + help="Upstream name to change address https to git. " + "When empty, all upstream is updated.") parser.add_argument("--git_to_https", action="store_true", help="Replace all repo git to https.") args = parser.parse_args() @@ -50,20 +48,24 @@ def main(): config = get_config() upstream_name = config.upstream - lst_repo = git_tool.get_repo_info_submodule(config.dir, add_root=True, - upstream=upstream_name) + lst_repo = git_tool.get_repo_info(config.dir, add_root=True) i = 0 total = len(lst_repo) for repo in lst_repo: i += 1 print(f"Nb element {i}/{total}") repo_sm = Repo(repo.get("name")) - remote_upstream_name = [a for a in repo_sm.remotes if upstream_name == a.name] - new_url = repo.get("url_https") if config.git_to_https else repo.get("url_git") + if upstream_name: + remote_upstream_name = [a for a in repo_sm.remotes + if upstream_name == a.name] + else: + remote_upstream_name = [a for a in repo_sm.remotes] for remote in remote_upstream_name: + url, url_https, url_git = git_tool.get_url(remote.url) + new_url = url_https if config.git_to_https else url_git remote.set_url(new_url) - print('Remote "%s" created for %s' % (upstream_name, new_url)) + print(f'Remote "{remote.name}" update for {new_url}') if __name__ == '__main__': diff --git a/script/git_repo_manifest.py b/script/git_repo_manifest.py new file mode 100644 index 0000000..e2b634a --- /dev/null +++ b/script/git_repo_manifest.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +import os +import sys +import argparse +import logging + +new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(new_path) + +from script.git_tool import GitTool + +_logger = logging.getLogger(__name__) + + +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='''\ +''', + epilog='''\ +''' + ) + parser.add_argument('-d', '--dir', dest="dir", default="./", + help="Path of repo to change remote, including submodule.") + parser.add_argument('--clear', action="store_true", + help="Create a new manifest and clear old configuration.") + args = parser.parse_args() + return args + + +def main(): + config = get_config() + git_tool = GitTool() + + lst_repo = git_tool.get_source_repo_addons(repo_path=config.dir, add_repo_root=True) + lst_repo_organization = [git_tool.get_transformed_repo_info_from_url( + a.get("url"), repo_path=config.dir, get_obj=True, + is_submodule=a.get("is_submodule"), sub_path=a.get("sub_path"), + revision=a.get("revision"), clone_depth=a.get("clone_depth")) + for a in lst_repo] + + # Update origin to new repo + if not config.clear: + dct_remote, dct_project = git_tool.get_manifest_xml_info(repo_path=config.dir, + add_root=True) + else: + dct_remote = {} + dct_project = {} + git_tool.generate_repo_manifest(lst_repo_organization, repo_path=config.dir, + dct_remote=dct_remote, dct_project=dct_project) + git_tool.generate_install_locally() + + +if __name__ == '__main__': + main() diff --git a/script/git_tool.py b/script/git_tool.py index e8d647f..8bec5d2 100644 --- a/script/git_tool.py +++ b/script/git_tool.py @@ -2,18 +2,19 @@ # © 2020 TechnoLibre (http://www.technolibre.ca) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import os -from . import addons_repo_origin import webbrowser from retrying import retry # pip install retrying from agithub.GitHub import GitHub # pip install agithub from giturlparse import parse # pip install giturlparse +import xmltodict +from collections import OrderedDict from git import Repo import git from typing import List -CST_FILE_SOURCE_REPO_ADDONS_ODOO = "source_repo_addons_odoo.csv" -CST_GITHUB_TOKEN = "GITHUB_TOKEN" +CST_FILE_SOURCE_REPO_ADDONS = "source_repo_addons.csv" +CST_EL_GITHUB_TOKEN = "EL_GITHUB_TOKEN" class Struct(object): @@ -42,15 +43,20 @@ class GitTool: get_obj: bool = True, is_submodule: bool = True, organization_force: str = None, - sub_path: str = "addons") -> object: + sub_path: str = "addons", + revision: str = "", + clone_depth: str = "") -> object: """ :param url: :param repo_path: :param get_obj: :param is_submodule: - :param path: :param organization_force: Keep repo_path and change organization + :param sub_path: + :param revision: Tag or branch name. When empty, use default branch. + :param clone_depth: length of git history to clone. Clone all git when empty. + Set to 0 to increase speed to clone, set to empty for development. :return: """ _, url_https, url_git = self.get_url(url) @@ -72,18 +78,30 @@ class GitTool: relative_path = f"{repo_path}/{path}" relative_path = os.path.normpath(relative_path) + original_organization = organization + url_https_original_organization = url_https[:url_https.rfind("/")] + project_name = url_https[url_https.rfind("/") + 1:] + # begin_original = url_git[url_git.find(":") + 1:] + # original_organization = begin_original[:begin_original.find("/")] if organization_force: organization = organization_force url_split = url_https.split("/") url_split[3] = organization url_https = "/".join(url_split) url, _, url_git = self.get_url(url_https) + url_https_organization = url_https[:url_https.rfind("/")] d = { "url": url, "url_git": url_git, "url_https": url_https, "organization": organization, + "original_organization": original_organization, + "url_https_organization": url_https_organization, + "url_https_original_organization": url_https_original_organization, + "project_name": project_name, + "revision": revision, + "clone_depth": clone_depth, "repo_name": repo_name, "path": path, "relative_path": relative_path, @@ -94,9 +112,15 @@ class GitTool: return Struct(**d) return d - @staticmethod - def get_repo_info_submodule(repo_path: str = "./", add_root: bool = False, - upstream: str = "origin") -> list: + def get_repo_info(self, repo_path: str = "./", + add_root: bool = False, is_manifest: bool = True): + if is_manifest: + return self.get_repo_info_manifest_xml(repo_path=repo_path, + add_root=add_root) + return self.get_repo_info_submodule(repo_path=repo_path, add_root=add_root) + + def get_repo_info_submodule(self, repo_path: str = "./", + add_root: bool = False) -> list: """ Get information about submodule from repo_path :param repo_path: path of repo to get information about submodule @@ -139,12 +163,7 @@ class GitTool: continue elif line[:7] == "\turl = ": url = line[7:-1] - if "https" in url: - url_git = f"git@{url[8:].replace('/', ':', 1)}" - url_https = url - else: - url_https = f"https://{(url[4:]).replace(':', '/')}" - url_git = url + url, url_https, url_git = self.get_url(url) continue elif line[:8] == "\tpath = ": path = line[8:-1] @@ -168,12 +187,7 @@ class GitTool: if add_root: repo_root = Repo(repo_path) url = repo_root.git.remote("get-url", "origin") - if "https" in url: - url_git = f"git@{url[8:].replace('/', ':', 1)}" - url_https = url - else: - url_https = f"https://{(url[4:]).replace(':', '/')}" - url_git = url + url, url_https, url_git = self.get_url(url) data = { "url": url, @@ -187,10 +201,12 @@ class GitTool: lst_repo = sorted(lst_repo, key=lambda k: k.get("name")) return lst_repo - @staticmethod - def get_repo_info_from_data_structure(repo_path="./", ignore_odoo=False): + def get_repo_info_manifest_xml(self, repo_path: str = "./", + add_root: bool = False) -> list: """ - Deprecated, read file addons_repo_origin to obtains repo list. + Get information about manifest of Repo from repo_path + :param repo_path: path of repo to get information about submodule + :param add_root: add information about root repository :return: [{ "url": original_url, @@ -201,36 +217,79 @@ class GitTool: "name": name of the submodule }] """ - dct_config = { - "addons": addons_repo_origin.config_addons - } - if not ignore_odoo: - dct_config[""] = addons_repo_origin.config - result = [] - for c_path, dct_config in dct_config.items(): - for server, dct_organization in dct_config.items(): - for organization, lst_repo in dct_organization.items(): - for repo in lst_repo: - url = f"https://{server}/{organization}/{repo}.git" - url_https = f"https://{server}/{organization}/{repo}.git" - url_git = f"git@{server}:{organization}/{repo}.git" - if not c_path: - path = f"{repo}" - else: - path = f"{c_path}/{organization}_{repo}" + manifest_file = self.get_manifest_file(repo_path=repo_path) + filename = f"{repo_path}{manifest_file}" + lst_repo = [] + with open(filename) as xml: + xml_as_string = xml.read() + xml_dict = xmltodict.parse(xml_as_string, dict_constructor=dict) + dct_manifest = xml_dict.get("manifest") + default_remote = dct_manifest.get("default").get("@remote") + lst_remote = dct_manifest.get("remote") + if type(lst_remote) is dict: + lst_remote = [lst_remote] + lst_project = dct_manifest.get("project") + if type(lst_project) is dict: + lst_project = [lst_project] + dct_remote = {a.get("@name"): a.get("@fetch") for a in lst_remote} + for project in lst_project: + # get name and remote .git + path = project.get("@path") + name = path + url_prefix = dct_remote.get(project.get("@remote")) + if not url_prefix: + # get default remote + url_prefix = dct_remote.get(default_remote) + url = f"{url_prefix}{project.get('@name')}" + url, url_https, url_git = self.get_url(url) + data = { + "url": url, + "url_https": url_https, + "url_git": url_git, + "path": path, + "relative_path": f"{repo_path}/{path}", + "name": name, + } + lst_repo.append(data) - name = path - result.append( - { - "url": url, - "url_https": url_https, - "url_git": url_git, - "relative_path": f"{repo_path}/{path}", - "path": path, - "name": name, - } - ) - return result + if add_root: + repo_root = Repo(repo_path) + url = repo_root.git.remote("get-url", "origin") + url, url_https, url_git = self.get_url(url) + + data = { + "url": url, + "url_https": url_https, + "url_git": url_git, + "path": repo_path, + "name": "", + } + lst_repo.insert(0, data) + # Sort + lst_repo = sorted(lst_repo, key=lambda k: k.get("name")) + return lst_repo + + def get_manifest_xml_info(self, repo_path: str = "./", + add_root: bool = False) -> list: + """ + Get contain of manifest + :param repo_path: path of repo to get information about submodule + :param add_root: add information about root repository + :return: dct_remote, dct_project + + """ + manifest_file = self.get_manifest_file(repo_path=repo_path) + filename = f"{repo_path}/manifest/{manifest_file}" + with open(filename) as xml: + xml_as_string = xml.read() + xml_dict = xmltodict.parse(xml_as_string, dict_constructor=dict) + dct_manifest = xml_dict.get("manifest") + default_remote = dct_manifest.get("default").get("@remote") + lst_remote = dct_manifest.get("remote") + lst_project = dct_manifest.get("project") + dct_remote = {a.get("@name"): a for a in lst_remote} + dct_project = {a.get("@name"): a for a in lst_project} + return dct_remote, dct_project @staticmethod def get_project_config(repo_path="./"): @@ -239,7 +298,7 @@ class GitTool: :param repo_path: path of repo to get information env_var.sh :return: { - CST_GITHUB_TOKEN: TOKEN, + CST_EL_GITHUB_TOKEN: TOKEN, } """ filename = f"{repo_path}env_var.sh" @@ -247,7 +306,7 @@ class GitTool: txt = file.readlines() txt = [a[:-1] for a in txt if "=" in a] - lst_filter = [CST_GITHUB_TOKEN] + lst_filter = [CST_EL_GITHUB_TOKEN] dct_config = {} # Take filtered value and get bash string values for f in lst_filter: @@ -255,7 +314,7 @@ class GitTool: if f in v: lst_v = v.split("=") if len(lst_v) > 1: - dct_config[CST_GITHUB_TOKEN] = v.split("=")[1][1:-1] + dct_config[CST_EL_GITHUB_TOKEN] = v.split("=")[1][1:-1] return dct_config @staticmethod @@ -264,39 +323,25 @@ class GitTool: if url: webbrowser.open_new_tab(url) - def generate_repo_source_from_building(self, repo_path="./"): - """ - DEPRECATED - Generate csv file with information about all source addons repo of Odoo - :param repo_path: Path to build repo source - :return: - """ - file_name = f"{repo_path}{CST_FILE_SOURCE_REPO_ADDONS_ODOO}" - lst_repo_info = self.get_repo_info_from_data_structure(ignore_odoo=True) - lst_result = [f"{a.get('url_https')}\n" for a in lst_repo_info] - with open(file_name, "w") as file: - file.writelines(lst_result) - - def generate_odoo_install_locally(self, repo_path="./"): - # lst_repo = self.get_repo_info_from_data_structure(ignore_odoo=True) - lst_repo = self.get_repo_info_submodule(repo_path=repo_path) + def generate_install_locally(self, repo_path="./"): + lst_repo = self.get_repo_info(repo_path=repo_path) lst_result = [] for repo in lst_repo: # Exception, ignore addons/OCA_web and root if "addons/OCA_web" == repo.get("path") or \ "odoo" == repo.get("path"): continue - str_repo = f' printf "${{OE_HOME}}/{repo.get("path")}," >> ' \ - f'${{OE_CONFIG_FILE}}\n' + str_repo = f' printf "${{EL_HOME}}/{repo.get("path")}," >> ' \ + f'${{EL_CONFIG_FILE}}\n' lst_result.append(str_repo) - with open(f"{repo_path}script/odoo_install_locally.sh") as file: + with open(f"{repo_path}script/install_locally.sh") as file: all_lines = file.readlines() # search place to add/replace lines index = 0 find_index = False index_find = 0 for line in all_lines: - if not find_index and "if [[ $MINIMAL_ADDONS = \"False\" ]]; then\n" == line: + if not find_index and "if [[ $EL_MINIMAL_ADDONS = \"False\" ]]; then\n" == line: index_find = index + 1 for insert_line in lst_result: all_lines.insert(index_find, insert_line) @@ -310,9 +355,119 @@ class GitTool: index += 1 # create file - with open(f"{repo_path}script/odoo_install_locally.sh", mode="w") as file: + with open(f"{repo_path}script/install_locally.sh", mode="w") as file: file.writelines(all_lines) + @staticmethod + def str_insert(source_str, insert_str, pos): + return source_str[:pos] + insert_str + source_str[pos:] + + def generate_repo_manifest(self, lst_repo: List[Struct], repo_path: str = "./", + dct_remote={}, dct_project={}): + lst_remote = [] + lst_remote_name = [] + lst_project = [] + lst_project_name = [] + lst_default = [] + + # Fill with configuration + for dct_value in dct_remote.values(): + lst_remote.append(OrderedDict( + [('@name', dct_value.get("@name")), + ('@fetch', dct_value.get("@fetch"))] + )) + lst_remote_name.append(dct_value.get("@name")) + for dct_value in dct_project.values(): + lst_project_info = [ + ('@name', dct_value.get("@name")), + ('@path', dct_value.get("@path")), + ('@remote', dct_value.get("@remote")) + ] + if "@revision" in dct_value.keys(): + lst_project_info.append(('@revision', dct_value.get("@revision"))) + if "@clone-depth" in dct_value.keys(): + lst_project_info.append(('@clone-depth', dct_value.get("@clone-depth"))) + if "@groups" in dct_value.keys(): + lst_project_info.append(('@groups', dct_value.get("@groups"))) + lst_project.append(OrderedDict(lst_project_info)) + lst_project_name.append(dct_value.get("@name")) + + for repo in lst_repo: + if not repo.is_submodule: + # Default + if lst_default: + raise Exception("Cannot have many root repo. " + "Validate why 2 or more is not submodule.") + lst_default.append(OrderedDict([ + ('@remote', repo.original_organization), + ('@revision', "12.0"), + ('@sync-j', "4"), + ('@sync-c', "true"), + ])) + else: + # Add remote, only unique remote + if repo.original_organization not in lst_remote_name: + lst_remote.append(OrderedDict( + [('@name', repo.original_organization), + ('@fetch', repo.url_https_organization + "/")] + )) + lst_remote_name.append(repo.original_organization) + # Add project, only unique project + if repo.project_name not in lst_project_name: + lst_project_name.append(repo.project_name) + lst_project_info = [ + ('@name', repo.project_name), + ('@path', repo.path), + ('@remote', repo.original_organization), + ] + if repo.revision: + lst_project_info.append(('@revision', repo.revision)) + if repo.clone_depth: + lst_project_info.append(('@clone-depth', repo.clone_depth)) + if repo.sub_path == "addons": + lst_project_info.append(('@groups', "addons")) + else: + lst_project_info.append(('@groups', "odoo")) + lst_project.append(OrderedDict(lst_project_info)) + + # Order in alphabetic + lst_order_remote = sorted(lst_remote, key=lambda key: key.get("@name")) + lst_order_default = sorted(lst_default, key=lambda key: key.get("@remote")) + lst_order_project = sorted(lst_project, key=lambda key: key.get("@name")) + + dct_repo = OrderedDict( + [('manifest', OrderedDict([ + ('remote', lst_order_remote), + ('default', lst_order_default), + ('project', lst_order_project), + ]))]) + str_xml_text = xmltodict.unparse(dct_repo, pretty=True) + + pos_insert = str_xml_text.rfind("") + if pos_insert: + pos_insert += len("") + str_xml_text = self.str_insert(str_xml_text, "\n ", pos_insert) + + pos_insert = str_xml_text.rfind("") + if pos_insert: + pos_insert += len("") + str_xml_text = self.str_insert(str_xml_text, "\n ", pos_insert) + + # pos_insert = str_xml_text.rfind("") + # if pos_insert: + # pos_insert += len("") + # str_xml_text = self.str_insert(str_xml_text, "\n ", pos_insert) + + str_xml_text = str_xml_text.replace("> 5 and url[0:4] == "http" and url[-4:] != ".git": + url = f"{url}.git" repo_info = self.get_transformed_repo_info_from_url(url, repo_path=repo_path, get_obj=False, - sub_path=path) + sub_path=path, + revision=revision, + clone_depth=clone_depth) lst_result.append(repo_info) return lst_result + def get_manifest_file(self, repo_path: str = "./"): + """ + Find .repo and return default manifest file. + :param repo_path: path to search .repo + :return: manifest file used for Repo + """ + file = f"{repo_path}/.repo/manifest.xml" + with open(file) as xml: + xml_as_string = xml.read() + xml_dict = xmltodict.parse(xml_as_string, dict_constructor=dict) + manifest_filename = xml_dict.get("manifest").get("include").get("@name") + return manifest_filename + def get_matching_repo(self, actual_repo="./", repo_compare_to="./", - force_normalize_compare=False): + force_normalize_compare=False, sync_with_submodule=False): """ Compare repo with .gitmodules files :param actual_repo: :param repo_compare_to: :param force_normalize_compare: update name of compare repo - :return: + :param sync_with_submodule: force use submodule with repo_compare_to + :return: (list of matches, list of missing, list of more) """ - lst_repo_info_actual = self.get_repo_info_submodule(actual_repo) + lst_repo_info_actual = self.get_repo_info_manifest_xml(actual_repo) dct_repo_info_actual = {a.get("name"): a for a in lst_repo_info_actual} - set_actual = set(dct_repo_info_actual.keys()) + # set_actual = set(dct_repo_info_actual.keys()) # set_actual_repo = set( # [a[a.find("_") + 1:] for a in dct_repo_info_actual.keys()]) @@ -389,13 +574,16 @@ class GitTool: dct_repo_info_actual.items()} set_actual_repo = set(dct_repo_info_actual_adapted.keys()) - lst_repo_info_compare = self.get_repo_info_submodule(repo_compare_to) + lst_repo_info_compare = self.get_repo_info(repo_compare_to, + is_manifest=not sync_with_submodule) if force_normalize_compare: for repo_info in lst_repo_info_compare: url_https = repo_info.get("url_https") url_split = url_https.split("/") organization = url_split[3] - repo_name = url_split[4][:-4] + repo_name = url_split[4] + if repo_name[-4:] == ".git": + repo_name = repo_name[:-4] # name = f"addons/{organization}_{repo_name}" name = f"{repo_name}" repo_info["name"] = name @@ -421,14 +609,34 @@ class GitTool: dct_repo_info_compare[key] )) - return lst_match + return lst_match, lst_missing_name_normalize, lst_over_name_normalize @staticmethod - def sync_to(lst_compare_repo_info): - i = 0 + def sync_to(result, checkout_when_diff=False): + lst_compare_repo_info, lst_missing_info, lst_over_info = result + total = len(lst_missing_info) + if total: + print(f"\nList of missing : {total}") + i = 0 + for info in lst_missing_info: + i += 1 + print(f"Nb element {i}/{total}") + print(f"Missing '{info}'") + + total = len(lst_over_info) + if total: + print(f"\nList of over : {total}") + i = 0 + for info in lst_over_info: + i += 1 + print(f"Nb element {i}/{total}") + print(f"Missing '{info}'") + total = len(lst_compare_repo_info) + print(f"\nList of normalize : {total}") lst_same = [] lst_diff = [] + i = 0 for original, compare_to in lst_compare_repo_info: i += 1 print(f"Nb element {i}/{total}") @@ -437,9 +645,15 @@ class GitTool: repo_compare = Repo(compare_to.get("relative_path")) commit_compare = repo_compare.head.object.hexsha if commit_original != commit_compare: - print(f"DIFF - {original.get('name')}") + print(f"DIFF - {original.get('name')} - O {commit_original} - " + f"R {commit_compare}") lst_diff.append((original, compare_to)) - repo_original.git.checkout(commit_compare) + if checkout_when_diff: + # Update all remote + for remote in repo_original.remotes: + retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + remote.fetch)() + repo_original.git.checkout(commit_compare) else: print(f"SAME - {original.get('name')}") lst_same.append((original, compare_to)) @@ -448,6 +662,13 @@ class GitTool: @staticmethod def add_and_fetch_remote(repo_info: Struct, root_repo: Repo = None, branch_name: str = ""): + """ + Deprecated function, not use anymore git submodule + :param repo_info: + :param root_repo: + :param branch_name: + :return: + """ try: working_repo = Repo(repo_info.relative_path) if repo_info.organization in [a.name for a in working_repo.remotes]: @@ -509,7 +730,7 @@ class GitTool: print("Error when forking repo %s" % forked_repo) exit(1) else: - print("Forked %s to %s" % (upstream_url, forked_repo['ssh_url'])) + print("Forked %s to %s" % (upstream_url, forked_repo['html_url'])) elif status == 202: print("Forked repo %s already exists" % forked_repo['full_name']) elif status != 200: diff --git a/script/odoo_install_OSX_dependancy.sh b/script/install_OSX_dependancy.sh similarity index 88% rename from script/odoo_install_OSX_dependancy.sh rename to script/install_OSX_dependancy.sh index f6e3398..4ec32c3 100755 --- a/script/odoo_install_OSX_dependancy.sh +++ b/script/install_OSX_dependancy.sh @@ -1,13 +1,13 @@ -#!/bin/bash +#!/usr/bin/env bash ################################################################################ -# Script for installing Odoo on OSX +# Script for installing ERPLibre on OSX # Author: Alexandre Ferreira Benevides #------------------------------------------------------------------------------- -# This script will install dependency for Odoo on your OSX server. +# This script will install dependency for ERPLibre on your OSX server. #------------------------------------------------------------------------------- ################################################################################ -OE_USER=$(whoami) +EL_USER=$(whoami) #-------------------------------------------------- # Install PostgreSQL Server @@ -15,8 +15,8 @@ OE_USER=$(whoami) echo "\n---- Install PostgreSQL Server ----" brew install postgresql -echo "\n---- Creating the ODOO PostgreSQL User ----" -sudo su - postgres -c "createuser -s ${OE_USER}" 2> /dev/null || true +echo "\n---- Creating the ERPLibre PostgreSQL User ----" +sudo su - postgres -c "createuser -s ${EL_USER}" 2> /dev/null || true #-------------------------------------------------- # Install Dependencies diff --git a/script/install_daemon.sh b/script/install_daemon.sh new file mode 100755 index 0000000..586d95c --- /dev/null +++ b/script/install_daemon.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +. ./env_var.sh + +#EL_USER="erplibre" +#EL_HOME="/${EL_USER}" +#EL_HOME_ERPLIBRE="${EL_HOME}/erplibre" +#EL_HOME_ODOO="${EL_HOME_ERPLIBRE}/odoo" +#EL_INSTALL_WKHTMLTOPDF="True" +#EL_PORT="8069" +#EL_SUPERADMIN="admin" +#EL_CONFIG="${EL_USER}" + +#-------------------------------------------------- +# Adding ERPLibre as a daemon with SystemD +#-------------------------------------------------- +echo -e "\n* Create init file" +sudo rm -f /tmp/${EL_CONFIG} +cat < /tmp/${EL_CONFIG} +[Unit] +Description=${EL_USER} +Requires=postgresql.service +After=network.target network-online.target postgresql.service + +[Service] +Type=simple +SyslogIdentifier=${EL_USER} +PermissionsStartOnly=true +User=${EL_USER} +Group=${EL_USER} +Restart=always +RestartSec=5 +PIDFile=${EL_HOME_ERPLIBRE}/venv/service.pid +ExecStart=${EL_HOME_ERPLIBRE}/venv/run.sh +StandardOutput=journal+console + +[Install] +WantedBy=multi-user.target +EOF + +echo -e "* Security Init File" +sudo cp /tmp/${EL_CONFIG} /etc/systemd/system/${EL_CONFIG}.service +sudo chmod 755 /etc/systemd/system/${EL_CONFIG}.service +sudo chown root: /etc/systemd/system/${EL_CONFIG}.service + +echo -e "* Start ERPLibre on Startup" +sudo systemctl daemon-reload +sudo systemctl enable ${EL_CONFIG}.service + +sudo su ${EL_USER} -c "sudo rm -f /tmp/${EL_USER}run.sh" +cat < /tmp/${EL_USER}run.sh +#!/usr/bin/env bash +cd ${EL_HOME_ERPLIBRE} +source ./venv/bin/activate +python3 ${EL_HOME_ERPLIBRE}/odoo/odoo-bin -c ${EL_HOME_ERPLIBRE}/config.conf $@ +EOF + +echo -e "* Security Run File" +sudo cp /tmp/${EL_USER}run.sh ${EL_HOME_ERPLIBRE}/venv/run.sh +sudo chmod 755 ${EL_HOME_ERPLIBRE}/venv/run.sh +sudo chown ${EL_USER}: ${EL_HOME_ERPLIBRE}/venv/run.sh + +echo "-----------------------------------------------------------" +echo "Done! The ERPLibre server is up and running. Specifications:" +echo "Port: ${EL_PORT}" +echo "Port Long Polling: ${EL_LONGPOLLING_PORT}" +echo "User service: ${EL_USER}" +echo "User PostgreSQL: ${EL_USER}" +echo "Code location: ${EL_USER}" +echo "Addons folder: ${EL_USER}/${EL_CONFIG}/addons/" +echo "Start ERPLibre service: sudo systemctl start ${EL_CONFIG}" +echo "Stop ERPLibre service: sudo systemctl stop ${EL_CONFIG}" +echo "Restart ERPLibre service: sudo systemctl restart ${EL_CONFIG}" +echo "-----------------------------------------------------------" + +echo -e "* Starting ERPLibre Service" +sudo systemctl restart ${EL_CONFIG}.service diff --git a/script/odoo_install_debian_dependancy.sh b/script/install_debian_dependancy.sh similarity index 68% rename from script/odoo_install_debian_dependancy.sh rename to script/install_debian_dependancy.sh index a01419b..333a5d9 100755 --- a/script/odoo_install_debian_dependancy.sh +++ b/script/install_debian_dependancy.sh @@ -1,19 +1,9 @@ -#!/bin/bash -################################################################################ -# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) -# Author: Yenthe Van Ginneken -#------------------------------------------------------------------------------- -# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances -# in one Ubuntu because of the different xmlrpc_ports -#------------------------------------------------------------------------------- -################################################################################ +#!/usr/bin/env bash . ./env_var.sh -OE_USER=$(whoami) -# 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. -#INSTALL_WKHTMLTOPDF="True" +EL_USER=$(whoami) +#EL_INSTALL_WKHTMLTOPDF="True" ## ### WKHTMLTOPDF download links @@ -43,30 +33,30 @@ sudo apt-get upgrade -y echo -e "\n---- Install PostgreSQL Server ----" sudo apt-get install postgresql -y -echo -e "\n---- Creating the ODOO PostgreSQL User ----" -sudo su - postgres -c "createuser -s $OE_USER" 2> /dev/null || true +echo -e "\n---- Creating the ERPLibre PostgreSQL User ----" +sudo su - postgres -c "createuser -s $EL_USER" 2> /dev/null || true #-------------------------------------------------- # Install Dependencies #-------------------------------------------------- echo -e "\n--- Installing Python 3 + pip3 --" -sudo apt-get install git python3 python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng12-0 gdebi -y +sudo apt-get install git python3 python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng12-0 gdebi-core -y echo -e "\n---- Installing nodeJS NPM and rtlcss for LTR support ----" sudo apt-get install nodejs npm -y sudo npm install -g rtlcss -if [ ${INSTALL_NGINX} = "True" ]; then +if [ ${EL_INSTALL_NGINX} = "True" ]; then sudo apt install nginx -y fi #-------------------------------------------------- # Install Wkhtmltopdf if needed #-------------------------------------------------- -if [ ${INSTALL_WKHTMLTOPDF} = "True" ]; then +if [ ${EL_INSTALL_WKHTMLTOPDF} = "True" ]; then INSTALLED=$(dpkg -s wkhtmltox|grep installed) if [ "" == "${INSTALLED}" ]; then - echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 12 ----" + echo -e "\n---- Install wkhtml and place shortcuts on correct place ----" #pick up correct one from x64 & x32 versions: if [ "`getconf LONG_BIT`" == "64" ];then _url=$WKHTMLTOX_X64 diff --git a/script/odoo_install_dev.sh b/script/install_dev.sh similarity index 69% rename from script/odoo_install_dev.sh rename to script/install_dev.sh index aa9d204..3572c4f 100755 --- a/script/odoo_install_dev.sh +++ b/script/install_dev.sh @@ -1,22 +1,18 @@ -#!/bin/bash +#!/usr/bin/env bash ################################################################################ -# Script for installing Odoo locally for dev +# Script for installing ERPLibre locally for dev # Author: Alexandre Ferreira Benevides ################################################################################ -. ./env_var.sh - if [[ "${OSTYPE}" == "linux-gnu" ]]; then OS=$(lsb_release -si) if [[ "${OS}" == "Ubuntu" ]]; then echo "\n---- linux-gnu installation process started ----" - ./script/odoo_install_debian_dependancy.sh - ./script/odoo_install_locally.sh + ./script/install_debian_dependancy.sh else echo "Your Linux system is not supported." fi elif [[ "${OSTYPE}" == "darwin"* ]]; then echo "\n---- Darwin installation process started ----" - ./script/odoo_install_OSX_dependancy.sh - ./script/odoo_install_locally.sh + ./script/install_OSX_dependancy.sh fi diff --git a/script/install_locally.sh b/script/install_locally.sh new file mode 100755 index 0000000..07cced5 --- /dev/null +++ b/script/install_locally.sh @@ -0,0 +1,163 @@ +#!/usr/bin/env bash + +. ./env_var.sh + +EL_USER=$(whoami) +EL_HOME=$PWD +EL_HOME_ODOO="${EL_HOME}/odoo" +#EL_INSTALL_WKHTMLTOPDF="True" +#EL_PORT="8069" +#EL_LONGPOLLING_PORT="8072" +#EL_SUPERADMIN="admin" +EL_CONFIG_FILE="${EL_HOME}/config.conf" +#EL_CONFIG="${EL_USER}" +#EL_MINIMAL_ADDONS="False" +#EL_INSTALL_NGINX="True" + +if hash python3.7 2>/dev/null; then + PYTHON37="True" + PYTHON36="False" +elif hash python3.6 2>/dev/null; then + PYTHON37="False" + PYTHON36="True" +else + echo "Missing python3.7 or python3.6. Python3.8 is not compatible." + exit 1 +fi + +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} +printf "admin_passwd = ${EL_SUPERADMIN}\n" >> ${EL_CONFIG_FILE} +printf "db_host = False\n" >> ${EL_CONFIG_FILE} +printf "db_port = False\n" >> ${EL_CONFIG_FILE} +printf "db_user = ${EL_USER}\n" >> ${EL_CONFIG_FILE} +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} +if [[ $EL_MINIMAL_ADDONS = "False" ]]; then + printf "${EL_HOME}/addons/ERPLibre_erplibre_addons," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/MathBenTech_development," >> ${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-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_currency," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/OCA_data-protection," >> ${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_helpdesk," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/OCA_hr," >> ${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_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_sale-workflow," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/OCA_server-auth," >> ${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_timesheet," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/OCA_website," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/OCA_wms," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/SanteLibre_santelibre_addons," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/Smile-SA_odoo_addons," >> ${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/odooaktiv_QuotationRevision," >> ${EL_CONFIG_FILE} + printf "${EL_HOME}/addons/openeducat_openeducat_erp," >> ${EL_CONFIG_FILE} +fi +printf "\n" >> ${EL_CONFIG_FILE} + +printf "workers = 0\n" >> ${EL_CONFIG_FILE} +printf "max_cron_threads = 2\n" >> ${EL_CONFIG_FILE} + +if [ ${EL_INSTALL_NGINX} = "True" ]; then + printf "xmlrpc_interface = 127.0.0.1\n" >> ${EL_CONFIG_FILE} + printf "netrpc_interface = 127.0.0.1\n" >> ${EL_CONFIG_FILE} + printf "proxy_mode = True\n" >> ${EL_CONFIG_FILE} +fi + +echo -e "\n---- Install Odoo with addons module ----" +git submodule update --init + +# Generate empty addons if missing +if [ ! -d "./addons/addons" ]; then + mkdir -p ./addons/addons +fi + +echo -e "\n---- Create Virtual environment Python ----" +cd ${EL_HOME} +if [[ ${PYTHON37} = "True" ]]; then + python3.7 -m venv venv +elif [[ ${PYTHON36} = "True" ]]; then + python3.6 -m venv venv +fi +cd - + +# Install git-repo if missing +if [ ! -f "./venv/repo" ]; then + echo "Install git-repo from Google APIS" + curl https://storage.googleapis.com/git-repo-downloads/repo > ./venv/repo + chmod +x ./venv/repo +fi diff --git a/script/install_locally_dev.sh b/script/install_locally_dev.sh new file mode 100755 index 0000000..671f74d --- /dev/null +++ b/script/install_locally_dev.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +. ./env_var.sh + +EL_USER=$(whoami) +EL_HOME=$PWD +EL_HOME_ODOO="${EL_HOME}/odoo" +#EL_INSTALL_WKHTMLTOPDF="True" +#EL_PORT="8069" +#EL_LONGPOLLING_PORT="8072" +#EL_SUPERADMIN="admin" +EL_CONFIG_FILE="${EL_HOME}/config.conf" +#EL_CONFIG="${EL_USER}" +#EL_MINIMAL_ADDONS="False" +#EL_INSTALL_NGINX="True" +#EL_MANIFEST_PROD="./manifest/default.xml" +#EL_MANIFEST_DEV="./manifest/default.dev.xml" + +./script/install_locally.sh + +# Update git-repo +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 --abbrev-ref HEAD) -m ${EL_MANIFEST_DEV} +./venv/repo sync -m ${EL_MANIFEST_DEV} + +kill ${DAEMON_PID} + +echo -e "\n---- Install python packages/requirements ----" +${EL_HOME}/venv/bin/pip3 install --upgrade pip +${EL_HOME}/venv/bin/pip3 install wheel phonenumbers +${EL_HOME}/venv/bin/pip3 install -r "${EL_HOME}/odoo/requirements.txt" +${EL_HOME}/venv/bin/pip3 install -r "${EL_HOME}/requirements.txt" + +# For dev/testing +${EL_HOME}/venv/bin/pip3 install websocket-client + +echo -e "\n---- Add link dependency in site-packages of Python ----" +if [[ ${PYTHON37} = "True" ]]; then + ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/venv/lib/python3.7/site-packages/ +elif [[ ${PYTHON36} = "True" ]]; then + ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/venv/lib/python3.6/site-packages/ +fi diff --git a/script/install_locally_prod.sh b/script/install_locally_prod.sh new file mode 100755 index 0000000..77f158d --- /dev/null +++ b/script/install_locally_prod.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +. ./env_var.sh + +EL_USER=$(whoami) +EL_HOME=$PWD +EL_HOME_ODOO="${EL_HOME}/odoo" +#EL_INSTALL_WKHTMLTOPDF="True" +#EL_PORT="8069" +#EL_LONGPOLLING_PORT="8072" +#EL_SUPERADMIN="admin" +EL_CONFIG_FILE="${EL_HOME}/config.conf" +#EL_CONFIG="${EL_USER}" +#EL_MINIMAL_ADDONS="False" +#EL_INSTALL_NGINX="True" +#EL_MANIFEST_PROD="./manifest/default.xml" +#EL_MANIFEST_DEV="./manifest/default.dev.xml" + +./script/install_locally.sh + +# Update git-repo +./venv/repo init -u http://git.erplibre.ca/ERPLibre -b 12.0_repo +#./venv/repo sync --force-sync +./venv/repo sync + +echo -e "\n---- Install python packages/requirements ----" +${EL_HOME}/venv/bin/pip3 install --upgrade pip +${EL_HOME}/venv/bin/pip3 install wheel phonenumbers +${EL_HOME}/venv/bin/pip3 install -r "${EL_HOME}/odoo/requirements.txt" +${EL_HOME}/venv/bin/pip3 install -r "${EL_HOME}/requirements.txt" + +# For dev/testing +${EL_HOME}/venv/bin/pip3 install websocket-client + +echo -e "\n---- Add link dependency in site-packages of Python ----" +if [[ ${PYTHON37} = "True" ]]; then + ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/venv/lib/python3.7/site-packages/ +elif [[ ${PYTHON36} = "True" ]]; then + ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/venv/lib/python3.6/site-packages/ +fi diff --git a/script/install_production.sh b/script/install_production.sh new file mode 100755 index 0000000..397fb0a --- /dev/null +++ b/script/install_production.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +. ./env_var.sh + +./script/install_debian_dependancy.sh + +echo -e "\n---- Create ERPLIBRE system user ----" +sudo adduser --system --quiet --shell=/bin/bash --home=/${EL_USER} --gecos 'ERPLIBRE' --group ${EL_USER} +#The user should also be added to the sudo'ers group. +sudo adduser ${EL_USER} sudo + +echo -e "\n---- Creating the ERPLIBRE PostgreSQL User ----" +sudo su - postgres -c "createuser -s ${EL_USER}" 2> /dev/null || true + +#echo -e "\n---- Create Log directory ----" +#sudo mkdir /var/log/${EL_USER} +#sudo chown ${EL_USER}:${EL_USER} /var/log/${EL_USER} + +echo -e "\n---- Setting permissions on home folder ----" +sudo mkdir -p ${EL_HOME} +sudo chown -R ${EL_USER}:${EL_USER} ${EL_HOME} + +#-------------------------------------------------- +# Install ERPLIBRE +#-------------------------------------------------- +echo -e "\n==== Clone this installation ====" +REMOTE_URL_GIT=`git remote get-url origin` +BRANCH_GIT=`git rev-parse --abbrev-ref HEAD` +sudo su ${EL_USER} -c "git clone --branch ${BRANCH_GIT} ${REMOTE_URL_GIT} ${EL_HOME_ERPLIBRE}" +sudo cp ./env_var.sh ${EL_HOME_ERPLIBRE} +sudo chown -R ${EL_USER}:${EL_USER} ${EL_HOME_ERPLIBRE}/env_var.sh + +LAST_PWD=$PWD +cd ${EL_HOME_ERPLIBRE} +sudo su ${EL_USER} -c "./script/install_locally_prod.sh" +cd ${LAST_PWD} +#echo -e "\n* Updating server config file" +#sudo su ${EL_USER} -c "printf 'logfile = /var/log/${EL_USER}/${EL_CONFIG}.log\n' >> /${EL_USER}/erplibre/config.conf" + +#-------------------------------------------------- +# Adding ERPLIBRE as a daemon +#-------------------------------------------------- +./script/install_daemon.sh + +#-------------------------------------------------- +# Install Nginx if needed +#-------------------------------------------------- +./script/install_production_nginx.sh \ No newline at end of file diff --git a/script/odoo_install_production_nginx.sh b/script/install_production_nginx.sh similarity index 57% rename from script/odoo_install_production_nginx.sh rename to script/install_production_nginx.sh index 5f613d4..84693ac 100755 --- a/script/odoo_install_production_nginx.sh +++ b/script/install_production_nginx.sh @@ -1,34 +1,26 @@ -#!/bin/bash -################################################################################ -# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) -# Author: Yenthe Van Ginneken -#------------------------------------------------------------------------------- -# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances -# in one Ubuntu because of the different xmlrpc_ports -#------------------------------------------------------------------------------- -################################################################################ +#!/usr/bin/env bash . ./env_var.sh #-------------------------------------------------- # Install Nginx if needed #-------------------------------------------------- -if [ ${INSTALL_NGINX} = "True" ]; then +if [ ${EL_INSTALL_NGINX} = "True" ]; then echo -e "\n---- Installing and setting up Nginx ----" - cat < /tmp/nginx${OE_USER} -upstream odoo${OE_USER} { - server 127.0.0.1:${OE_PORT}; + cat < /tmp/nginx${EL_USER} +upstream erplibre${EL_USER} { + server 127.0.0.1:${EL_PORT}; } -upstream odoo${OE_USER}chat { - server 127.0.0.1:${OE_LONGPOLLING_PORT}; +upstream erplibre${EL_USER}chat { + server 127.0.0.1:${EL_LONGPOLLING_PORT}; } server { listen 80; - server_name ${WEBSITE_NAME}; + server_name ${EL_WEBSITE_NAME}; - # Add Headers for odoo proxy mode + # Add Headers for erplibre proxy mode proxy_set_header X-Forwarded-Host \$host; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; @@ -36,9 +28,9 @@ server { add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; - # odoo request log files - access_log /var/log/nginx/${OE_USER}-access.log; - error_log /var/log/nginx/${OE_USER}-error.log; + # erplibre request log files + access_log /var/log/nginx/${EL_USER}-access.log; + error_log /var/log/nginx/${EL_USER}-error.log; # Increase proxy buffer size proxy_buffers 16 64k; @@ -68,13 +60,13 @@ server { client_max_body_size 1024M; location / { - proxy_pass http://odoo${OE_USER}; + proxy_pass http://erplibre${EL_USER}; # by default, do not forward anything proxy_redirect off; } location /longpolling { - proxy_pass http://odoo${OE_USER}chat; + proxy_pass http://erplibre${EL_USER}chat; } # cache some static data in memory for 60mins. @@ -83,16 +75,16 @@ server { proxy_cache_valid 404 1m; proxy_buffering on; expires 864000; - proxy_pass http://odoo${OE_USER}; + proxy_pass http://erplibre${EL_USER}; } } EOF - sudo mv -f /tmp/nginx${OE_USER} /etc/nginx/sites-available/${WEBSITE_NAME} - sudo ln -fs /etc/nginx/sites-available/${WEBSITE_NAME} /etc/nginx/sites-enabled/${WEBSITE_NAME} + sudo mv -f /tmp/nginx${EL_USER} /etc/nginx/sites-available/${EL_WEBSITE_NAME} + sudo ln -fs /etc/nginx/sites-available/${EL_WEBSITE_NAME} /etc/nginx/sites-enabled/${EL_WEBSITE_NAME} sudo rm -f /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default sudo systemctl restart nginx - echo "Done! The Nginx server is up and running. Configuration can be found at /etc/nginx/sites-enabled/${WEBSITE_NAME}" + echo "Done! The Nginx server is up and running. Configuration can be found at /etc/nginx/sites-enabled/${EL_WEBSITE_NAME}" echo "Run manually certbot : sudo certbot --nginx" else echo "Nginx isn't installed due to choice of the user!" diff --git a/script/list_repo_diff.py b/script/list_repo_diff.py deleted file mode 100644 index dd9fa11..0000000 --- a/script/list_repo_diff.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python -import os -import sys -import webbrowser -import argparse -import logging -from git import Repo - -from retrying import retry # pip install retrying - -new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) -sys.path.append(new_path) - -from script.git_tool import GitTool -from script import fork_github_repo - -_logger = logging.getLogger(__name__) -CST_GITHUB_TOKEN = "GITHUB_TOKEN" - - -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='''\ -''', - epilog='''\ -''' - ) - parser.add_argument('-d', '--dir', dest="dir", default="./", - help="Path of repo to change remote, including submodule.") - args = parser.parse_args() - return args - - -def main(): - config = get_config() - lst_repo = GitTool.get_repo_info_submodule(repo_path=config.dir) - branch_search = "12.0" - # repo = Repo(root_path) - # repo_root = Repo(".") - lst_result = [] - - i = 0 - total = len(lst_repo) - for repo in lst_repo: - i += 1 - print(f"Nb element {i}/{total}") - repo_dir_root = repo.get("path") - remote_path = f"{config.dir}/{repo_dir_root}" - repo_root = Repo(remote_path) - repo_branch_search_sha = [a.object.hexsha for a in repo_root.branches if - branch_search in a.name] - if repo_branch_search_sha: - repo_branch_search_sha = repo_branch_search_sha[0] - else: - print(f"Error, missing branch {branch_search} in {remote_path}") - continue - lst_result.append((remote_path, repo_root.head.commit.hexsha, - repo_root.head.commit.hexsha != repo_branch_search_sha)) - - # print(repo_root) - - # # Create the remote upstream - # split_url = url.split("/") - # split_url[-2] = upstream_name - # upstream_url = "/".join(split_url) - # - # cloned_repo = Repo(repo_dir_root) - # try: - # upstream_remote = cloned_repo.remote(upstream_name) - # print('Remote "%s" already exists in %s' % - # (upstream_name, repo_dir_root)) - # except ValueError: - # upstream_remote = retry( - # wait_exponential_multiplier=1000, - # stop_max_delay=15000 - # )(cloned_repo.create_remote)(upstream_name, upstream_url) - # print('Remote "%s" created for %s' % (upstream_name, upstream_url)) - # - # try: - # # Fetch the remote upstream - # retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( - # upstream_remote.fetch)() - # print('Remote "%s" fetched' % upstream_name) - # except Exception: - # print(f"ERROR git {repo_dir_root} remote {upstream_name} not exist.") - # upstream_remote.remove(upstream_remote, upstream_name) - - i = 0 - i_len = len(lst_result) - for path, hash, diff in lst_result: - i += 1 - if diff: - print(f"{i:02d}/{i_len} {diff} {path}\t{hash}") - - # lst_repo = GitTool.get_repo_info_from_data_structure() - # for repo in lst_repo: - # repo_dir_root = repo.get("path") - # repo_root = Repo(remote_path) - # repo_root.git.checkout() - - -if __name__ == '__main__': - main() diff --git a/script/odoo_install_daemon.sh b/script/odoo_install_daemon.sh deleted file mode 100755 index ecf2b13..0000000 --- a/script/odoo_install_daemon.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -################################################################################ -# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) -# Author: Yenthe Van Ginneken -#------------------------------------------------------------------------------- -# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances -# in one Ubuntu because of the different xmlrpc_ports -#------------------------------------------------------------------------------- -################################################################################ - -. ./env_var.sh - -#OE_USER="odoo" -#OE_HOME="/${OE_USER}/odoo" -#OE_HOME_EXT="/${OE_USER}/odoo/odoo/odoo" -## 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. -#INSTALL_WKHTMLTOPDF="True" -## Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.) -#OE_PORT="8069" -## set the superadmin password -#OE_SUPERADMIN="admin" -#OE_CONFIG="${OE_USER}" - -#-------------------------------------------------- -# Adding ODOO as a deamon with SystemD -#-------------------------------------------------- -echo -e "\n* Create init file" -sudo rm -f /tmp/${OE_CONFIG} -cat < /tmp/${OE_CONFIG} -[Unit] -Description=${OE_USER} -Requires=postgresql.service -After=network.target network-online.target postgresql.service - -[Service] -Type=simple -SyslogIdentifier=${OE_USER} -PermissionsStartOnly=true -User=${OE_USER} -Group=${OE_USER} -Restart=always -RestartSec=5 -PIDFile=${OE_HOME_ODOO}/venv/service.pid -ExecStart=${OE_HOME_ODOO}/venv/run.sh -StandardOutput=journal+console - -[Install] -WantedBy=multi-user.target -EOF - -echo -e "* Security Init File" -sudo cp /tmp/${OE_CONFIG} /etc/systemd/system/${OE_CONFIG}.service -sudo chmod 755 /etc/systemd/system/${OE_CONFIG}.service -sudo chown root: /etc/systemd/system/${OE_CONFIG}.service - -echo -e "* Start ODOO on Startup" -sudo systemctl daemon-reload -sudo systemctl enable ${OE_CONFIG}.service - -sudo su ${OE_USER} -c "sudo rm -f /tmp/${OE_USER}run.sh" -cat < /tmp/${OE_USER}run.sh -#!/usr/bin/env bash -cd ${OE_HOME_ODOO} -source ./venv/bin/activate -python3 ${OE_HOME_ODOO}/odoo/odoo-bin -c ${OE_HOME_ODOO}/config.conf -EOF - -echo -e "* Security Run File" -sudo cp /tmp/${OE_USER}run.sh ${OE_HOME_ODOO}/venv/run.sh -sudo chmod 755 ${OE_HOME_ODOO}/venv/run.sh -sudo chown ${OE_USER}: ${OE_HOME_ODOO}/venv/run.sh - -echo "-----------------------------------------------------------" -echo "Done! The Odoo server is up and running. Specifications:" -echo "Port: ${OE_PORT}" -echo "Port Long Polling: ${OE_LONGPOLLING_PORT}" -echo "User service: ${OE_USER}" -echo "User PostgreSQL: ${OE_USER}" -echo "Code location: ${OE_USER}" -echo "Addons folder: ${OE_USER}/${OE_CONFIG}/addons/" -echo "Start Odoo service: sudo systemctl start ${OE_CONFIG}" -echo "Stop Odoo service: sudo systemctl stop ${OE_CONFIG}" -echo "Restart Odoo service: sudo systemctl restart ${OE_CONFIG}" -echo "-----------------------------------------------------------" - -echo -e "* Starting Odoo Service" -sudo systemctl restart ${OE_CONFIG}.service diff --git a/script/odoo_install_locally.sh b/script/odoo_install_locally.sh deleted file mode 100755 index 6489b71..0000000 --- a/script/odoo_install_locally.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash -################################################################################ -# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) -# Author: Yenthe Van Ginneken -#------------------------------------------------------------------------------- -# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances -# in one Ubuntu because of the different xmlrpc_ports -#------------------------------------------------------------------------------- -# Make a new file: -# sudo nano odoo-install.sh -# Place this content in it and then make the file executable: -# sudo chmod +x odoo-install.sh -# Execute the script to install Odoo: -# ./odoo-install -################################################################################ - -. ./env_var.sh - -OE_USER=$(whoami) -OE_HOME=$PWD -OE_HOME_EXT="${OE_HOME}/odoo" -# 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. -#INSTALL_WKHTMLTOPDF="True" -# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.) -#OE_PORT="8069" -#OE_LONGPOLLING_PORT="8072" -# Choose the Odoo version which you want to install. For example: 12.0, 11.0, 10.0 or saas-18. When using 'master' the master version will be installed. -# IMPORTANT! This script contains extra libraries that are specifically needed for Odoo 12.0 -#OE_VERSION="stable_prod_12.0" -# set the superadmin password -#OE_SUPERADMIN="admin" -OE_CONFIG_FILE="${OE_HOME}/config.conf" -#OE_CONFIG="${OE_USER}" -#MINIMAL_ADDONS="False" -#INSTALL_NGINX="True" - -if hash python3.7 2>/dev/null; then - PYTHON37="True" - PYTHON36="False" -elif hash python3.6 2>/dev/null; then - PYTHON37="False" - PYTHON36="True" -else - echo "Missing python3.7 or python3.6. Python3.8 is not compatible." - exit 1 -fi - -echo -e "* Create server config file" - -touch ${OE_CONFIG_FILE} -echo -e "* Creating server config file" -printf '[options] \n; This is the password that allows database operations:\n' > ${OE_CONFIG_FILE} -printf "admin_passwd = ${OE_SUPERADMIN}\n" >> ${OE_CONFIG_FILE} -printf "db_host = False\n" >> ${OE_CONFIG_FILE} -printf "db_port = False\n" >> ${OE_CONFIG_FILE} -printf "db_user = ${OE_USER}\n" >> ${OE_CONFIG_FILE} -printf "db_password = False\n" >> ${OE_CONFIG_FILE} -printf "xmlrpc_port = ${OE_PORT}\n" >> ${OE_CONFIG_FILE} -printf "longpolling_port = ${OE_LONGPOLLING_PORT}\n" >> ${OE_CONFIG_FILE} - -printf "addons_path = ${OE_HOME_EXT}/addons,${OE_HOME}/addons/addons," >> ${OE_CONFIG_FILE} -printf "${OE_HOME}/addons/OCA_web," >> ${OE_CONFIG_FILE} -if [[ $MINIMAL_ADDONS = "False" ]]; then - printf "${OE_HOME}/addons/ERPLibre_erplibre_addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/MathBenTech_development," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/MathBenTech_odoo-business-spending-management-quebec-canada," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/MathBenTech_scrummer," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-base-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-entertainment-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-git-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-hr-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-partner-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-product-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-project-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-purchase-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-stock-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-survey-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-timesheet-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Numigi_odoo-web-addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-analytic," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-budgeting," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-closing," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-consolidation," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-financial-reporting," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-financial-tools," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-fiscal-rule," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-invoice-reporting," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-invoicing," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-payment," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_account-reconcile," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_apps-store," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_bank-payment," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_bank-statement-import," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_brand," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_business-requirement," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_commission," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_community-data-files," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_connector-telephony," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_contract," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_credit-control," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_currency," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_data-protection," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_donation," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_e-commerce," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_edi," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_event," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_helpdesk," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_hr," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_knowledge," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_l10n-canada," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_maintenance," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_management-system," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_manufacture," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_margin-analysis," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_mis-builder," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_multi-company," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_partner-contact," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_pos," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_product-attribute," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_product-pack," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_product-variant," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_project," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_project-reporting," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_purchase-workflow," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_queue," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_reporting-engine," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_sale-workflow," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_server-auth," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_server-brand," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_server-env," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_server-tools," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_server-ux," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_social," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_stock-logistics-warehouse," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_timesheet," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_website," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/OCA_wms," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/SanteLibre_santelibre_addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/Smile-SA_odoo_addons," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_base," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_dms," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_docs," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_misc," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_quality," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_web," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/muk-it_muk_website," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/odooaktiv_QuotationRevision," >> ${OE_CONFIG_FILE} - printf "${OE_HOME}/addons/openeducat_openeducat_erp," >> ${OE_CONFIG_FILE} -fi -printf "\n" >> ${OE_CONFIG_FILE} - -printf "workers = 0\n" >> ${OE_CONFIG_FILE} -printf "max_cron_threads = 2\n" >> ${OE_CONFIG_FILE} - -if [ ${INSTALL_NGINX} = "True" ]; then - printf "xmlrpc_interface = 127.0.0.1\n" >> ${OE_CONFIG_FILE} - printf "netrpc_interface = 127.0.0.1\n" >> ${OE_CONFIG_FILE} - printf "proxy_mode = True\n" >> ${OE_CONFIG_FILE} -fi - -echo -e "\n---- Install Odoo with addons module ----" -git submodule update --init - -echo -e "\n---- Create Virtual environment Python ----" -cd ${OE_HOME} -if [[ ${PYTHON37} = "True" ]]; then - python3.7 -m venv venv -elif [[ ${PYTHON36} = "True" ]]; then - python3.6 -m venv venv -fi -cd - - -echo -e "\n---- Install python packages/requirements ----" -${OE_HOME}/venv/bin/pip3 install --upgrade pip -${OE_HOME}/venv/bin/pip3 install wheel phonenumbers -${OE_HOME}/venv/bin/pip3 install -r "${OE_HOME}/odoo/requirements.txt" -${OE_HOME}/venv/bin/pip3 install -r "${OE_HOME}/requirements.txt" - -# For dev/testing -${OE_HOME}/venv/bin/pip3 install websocket-client - -echo -e "\n---- Add link dependency in site-packages of Python ----" -if [[ ${PYTHON37} = "True" ]]; then - ln -fs ${OE_HOME_EXT}/odoo ${OE_HOME}/venv/lib/python3.7/site-packages/ -elif [[ ${PYTHON36} = "True" ]]; then - ln -fs ${OE_HOME_EXT}/odoo ${OE_HOME}/venv/lib/python3.6/site-packages/ -fi diff --git a/script/odoo_install_production.sh b/script/odoo_install_production.sh deleted file mode 100755 index c770f4f..0000000 --- a/script/odoo_install_production.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -################################################################################ -# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) -# Author: Yenthe Van Ginneken -#------------------------------------------------------------------------------- -# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances -# in one Ubuntu because of the different xmlrpc_ports -#------------------------------------------------------------------------------- -################################################################################ - -. ./env_var.sh - -./script/odoo_install_debian_dependancy.sh - -echo -e "\n---- Create ODOO system user ----" -sudo adduser --system --quiet --shell=/bin/bash --home=/${OE_USER} --gecos 'ODOO' --group ${OE_USER} -#The user should also be added to the sudo'ers group. -sudo adduser ${OE_USER} sudo - -echo -e "\n---- Creating the ODOO PostgreSQL User ----" -sudo su - postgres -c "createuser -s ${OE_USER}" 2> /dev/null || true - -#echo -e "\n---- Create Log directory ----" -#sudo mkdir /var/log/${OE_USER} -#sudo chown ${OE_USER}:${OE_USER} /var/log/${OE_USER} - -echo -e "\n---- Setting permissions on home folder ----" -sudo mkdir -p ${OE_HOME} -sudo chown -R ${OE_USER}:${OE_USER} ${OE_HOME} - -#-------------------------------------------------- -# Install ODOO -#-------------------------------------------------- -echo -e "\n==== Clone this installation ====" -REMOTE_URL_GIT=`git remote get-url origin` -BRANCH_GIT=`git rev-parse --abbrev-ref HEAD` -sudo su ${OE_USER} -c "git clone --branch ${BRANCH_GIT} ${REMOTE_URL_GIT} ${OE_HOME_ODOO}" -sudo cp ./env_var.sh ${OE_HOME_ODOO} -sudo chown -R ${OE_USER}:${OE_USER} ${OE_HOME_ODOO}/env_var.sh - -LAST_PWD=$PWD -cd ${OE_HOME_ODOO} -sudo su ${OE_USER} -c "./script/odoo_install_locally.sh" -cd ${LAST_PWD} -#echo -e "\n* Updating server config file" -#sudo su ${OE_USER} -c "printf 'logfile = /var/log/${OE_USER}/${OE_CONFIG}.log\n' >> /${OE_USER}/odoo/config.conf" - -#-------------------------------------------------- -# Adding ODOO as a daemon -#-------------------------------------------------- -./script/odoo_install_daemon.sh - -#-------------------------------------------------- -# Install Nginx if needed -#-------------------------------------------------- -./script/odoo_install_production_nginx.sh \ No newline at end of file diff --git a/source_repo_addons.csv b/source_repo_addons.csv new file mode 100644 index 0000000..2f64738 --- /dev/null +++ b/source_repo_addons.csv @@ -0,0 +1,88 @@ +url,path,revision,clone-depth +https://github.com/ERPLibre/erplibre_addons.git,addons,, +https://github.com/MathBenTech/development.git,addons,, +https://github.com/MathBenTech/odoo-business-spending-management-quebec-canada.git,addons,stable_prod_12.0, +https://github.com/MathBenTech/scrummer.git,addons,, +https://github.com/muk-it/muk_base.git,addons,, +https://github.com/muk-it/muk_dms.git,addons,, +https://github.com/muk-it/muk_docs.git,addons,, +https://github.com/muk-it/muk_misc.git,addons,, +https://github.com/muk-it/muk_quality.git,addons,, +https://github.com/muk-it/muk_web.git,addons,, +https://github.com/muk-it/muk_website.git,addons,, +https://github.com/Numigi/odoo-base-addons.git,addons,, +https://github.com/Numigi/odoo-entertainment-addons.git,addons,, +https://github.com/Numigi/odoo-git-addons.git,addons,, +https://github.com/Numigi/odoo-hr-addons.git,addons,, +https://github.com/Numigi/odoo-partner-addons.git,addons,, +https://github.com/Numigi/odoo-product-addons.git,addons,, +https://github.com/Numigi/odoo-project-addons.git,addons,, +https://github.com/Numigi/odoo-purchase-addons.git,addons,, +https://github.com/Numigi/odoo-stock-addons.git,addons,, +https://github.com/Numigi/odoo-survey-addons.git,addons,, +https://github.com/Numigi/odoo-timesheet-addons.git,addons,, +https://github.com/Numigi/odoo-web-addons.git,addons,, +https://github.com/OCA/account-analytic.git,addons,, +https://github.com/OCA/account-budgeting.git,addons,, +https://github.com/OCA/account-closing.git,addons,, +https://github.com/OCA/account-consolidation.git,addons,, +https://github.com/OCA/account-financial-reporting.git,addons,, +https://github.com/OCA/account-financial-tools.git,addons,, +https://github.com/OCA/account-fiscal-rule.git,addons,, +https://github.com/OCA/account-invoicing.git,addons,, +https://github.com/OCA/account-invoice-reporting.git,addons,, +https://github.com/OCA/account-payment.git,addons,, +https://github.com/OCA/account-reconcile.git,addons,, +https://github.com/OCA/apps-store.git,addons,, +https://github.com/OCA/bank-payment.git,addons,, +https://github.com/OCA/bank-statement-import.git,addons,, +https://github.com/OCA/brand.git,addons,, +https://github.com/OCA/business-requirement.git,addons,, +https://github.com/OCA/commission.git,addons,, +https://github.com/OCA/community-data-files.git,addons,, +https://github.com/OCA/connector-telephony.git,addons,, +https://github.com/OCA/contract.git,addons,, +https://github.com/OCA/credit-control.git,addons,, +https://github.com/OCA/currency.git,addons,, +https://github.com/OCA/data-protection.git,addons,, +https://github.com/OCA/donation.git,addons,, +https://github.com/OCA/e-commerce.git,addons,, +https://github.com/OCA/edi.git,addons,, +https://github.com/OCA/event.git,addons,, +https://github.com/OCA/helpdesk.git,addons,, +https://github.com/OCA/hr.git,addons,, +https://github.com/OCA/knowledge.git,addons,, +https://github.com/OCA/l10n-canada.git,addons,, +https://github.com/OCA/maintenance.git,addons,, +https://github.com/OCA/management-system.git,addons,, +https://github.com/OCA/manufacture.git,addons,, +https://github.com/OCA/margin-analysis.git,addons,, +https://github.com/OCA/mis-builder.git,addons,, +https://github.com/OCA/multi-company.git,addons,, +https://github.com/OCA/partner-contact.git,addons,, +https://github.com/OCA/pos.git,addons,, +https://github.com/OCA/product-attribute.git,addons,, +https://github.com/OCA/product-pack.git,addons,, +https://github.com/OCA/product-variant.git,addons,, +https://github.com/OCA/project.git,addons,, +https://github.com/OCA/project-reporting.git,addons,, +https://github.com/OCA/purchase-workflow.git,addons,, +https://github.com/OCA/queue.git,addons,, +https://github.com/OCA/reporting-engine.git,addons,, +https://github.com/OCA/sale-workflow.git,addons,, +https://github.com/OCA/server-auth.git,addons,, +https://github.com/OCA/server-brand.git,addons,, +https://github.com/OCA/server-env.git,addons,, +https://github.com/OCA/server-tools.git,addons,, +https://github.com/OCA/server-ux.git,addons,, +https://github.com/OCA/social.git,addons,, +https://github.com/OCA/stock-logistics-warehouse.git,addons,, +https://github.com/OCA/timesheet.git,addons,, +https://github.com/OCA/web.git,addons,, +https://github.com/OCA/website.git,addons,, +https://github.com/OCA/wms.git,addons,, +https://github.com/odoo/odoo.git,.,12.0_feature_5_star_CRM,1 +https://github.com/odooaktiv/QuotationRevision.git,addons,, +https://github.com/openeducat/openeducat_erp.git,addons,, +https://github.com/SanteLibre/santelibre_addons.git,addons,master, +https://github.com/Smile-SA/odoo_addons.git,addons,, diff --git a/source_repo_addons_odoo.csv b/source_repo_addons_odoo.csv deleted file mode 100644 index 0206b11..0000000 --- a/source_repo_addons_odoo.csv +++ /dev/null @@ -1,88 +0,0 @@ -url,path -https://github.com/ERPLibre/erplibre_addons.git,addons -https://github.com/MathBenTech/development.git,addons -https://github.com/MathBenTech/odoo-business-spending-management-quebec-canada.git,addons -https://github.com/MathBenTech/scrummer.git,addons -https://github.com/muk-it/muk_base.git,addons -https://github.com/muk-it/muk_dms.git,addons -https://github.com/muk-it/muk_docs.git,addons -https://github.com/muk-it/muk_misc.git,addons -https://github.com/muk-it/muk_quality.git,addons -https://github.com/muk-it/muk_web.git,addons -https://github.com/muk-it/muk_website.git,addons -https://github.com/Numigi/odoo-base-addons.git,addons -https://github.com/Numigi/odoo-entertainment-addons.git,addons -https://github.com/Numigi/odoo-git-addons.git,addons -https://github.com/Numigi/odoo-hr-addons.git,addons -https://github.com/Numigi/odoo-partner-addons.git,addons -https://github.com/Numigi/odoo-product-addons.git,addons -https://github.com/Numigi/odoo-project-addons.git,addons -https://github.com/Numigi/odoo-purchase-addons.git,addons -https://github.com/Numigi/odoo-stock-addons.git,addons -https://github.com/Numigi/odoo-survey-addons.git,addons -https://github.com/Numigi/odoo-timesheet-addons.git,addons -https://github.com/Numigi/odoo-web-addons.git,addons -https://github.com/OCA/account-analytic.git,addons -https://github.com/OCA/account-budgeting.git,addons -https://github.com/OCA/account-closing.git,addons -https://github.com/OCA/account-consolidation.git,addons -https://github.com/OCA/account-financial-reporting.git,addons -https://github.com/OCA/account-financial-tools,addons -https://github.com/OCA/account-fiscal-rule.git,addons -https://github.com/OCA/account-invoicing.git,addons -https://github.com/OCA/account-invoice-reporting.git,addons -https://github.com/OCA/account-payment.git,addons -https://github.com/OCA/account-reconcile.git,addons -https://github.com/OCA/apps-store.git,addons -https://github.com/OCA/bank-payment.git,addons -https://github.com/OCA/bank-statement-import.git,addons -https://github.com/OCA/brand.git,addons -https://github.com/OCA/business-requirement.git,addons -https://github.com/OCA/commission.git,addons -https://github.com/OCA/community-data-files.git,addons -https://github.com/OCA/connector-telephony.git,addons -https://github.com/OCA/contract.git,addons -https://github.com/OCA/credit-control.git,addons -https://github.com/OCA/currency.git,addons -https://github.com/OCA/data-protection.git,addons -https://github.com/OCA/donation.git,addons -https://github.com/OCA/e-commerce.git,addons -https://github.com/OCA/edi.git,addons -https://github.com/OCA/event.git,addons -https://github.com/OCA/helpdesk.git,addons -https://github.com/OCA/hr.git,addons -https://github.com/OCA/knowledge.git,addons -https://github.com/OCA/l10n-canada.git,addons -https://github.com/OCA/maintenance.git,addons -https://github.com/OCA/management-system.git,addons -https://github.com/OCA/manufacture.git,addons -https://github.com/OCA/margin-analysis.git,addons -https://github.com/OCA/mis-builder.git,addons -https://github.com/OCA/multi-company.git,addons -https://github.com/OCA/partner-contact.git,addons -https://github.com/OCA/pos.git,addons -https://github.com/OCA/product-attribute.git,addons -https://github.com/OCA/product-pack.git,addons -https://github.com/OCA/product-variant.git,addons -https://github.com/OCA/project.git,addons -https://github.com/OCA/project-reporting.git,addons -https://github.com/OCA/purchase-workflow.git,addons -https://github.com/OCA/queue.git,addons -https://github.com/OCA/reporting-engine.git,addons -https://github.com/OCA/sale-workflow.git,addons -https://github.com/OCA/server-auth.git,addons -https://github.com/OCA/server-brand.git,addons -https://github.com/OCA/server-env.git,addons -https://github.com/OCA/server-tools.git,addons -https://github.com/OCA/server-ux.git,addons -https://github.com/OCA/social.git,addons -https://github.com/OCA/stock-logistics-warehouse.git,addons -https://github.com/OCA/timesheet.git,addons -https://github.com/OCA/web.git,addons -https://github.com/OCA/website.git,addons -https://github.com/OCA/wms.git,addons -https://github.com/odoo/odoo.git,. -https://github.com/odooaktiv/QuotationRevision.git,addons -https://github.com/openeducat/openeducat_erp.git,addons -https://github.com/SanteLibre/santelibre_addons.git,addons -https://github.com/Smile-SA/odoo_addons.git,addons