Merge pull request #11 from ERPLibre/release/1.1.0
Release/1.1.0 - Support docker, pyenv, poetry - More repository of addons - More documentation and automation
This commit is contained in:
commit
ffad03eeb3
73 changed files with 6913 additions and 362 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -3,7 +3,7 @@
|
|||
*.tmp
|
||||
*.bak
|
||||
.idea
|
||||
venv
|
||||
.venv
|
||||
*.log
|
||||
config.conf
|
||||
*.DS_Store
|
||||
|
|
|
|||
1
.python-version
Normal file
1
.python-version
Normal file
|
|
@ -0,0 +1 @@
|
|||
3.7.7
|
||||
14
.travis.yml
Normal file
14
.travis.yml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
language: minimal
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
script:
|
||||
- docker build -f docker/Dockerfile.base -t technolibre/erplibre-base:12.0 docker/
|
||||
# - docker build -f docker/Dockerfile.dev -t technolibre/erplibre:12.0 docker/
|
||||
- docker build -f docker/Dockerfile.pkg -t technolibre/erplibre:12.0-pkg docker/
|
||||
|
||||
after_success:
|
||||
- docker login --username mikefaille --password "${DOCKER_TOKEN}"
|
||||
- docker push technolibre/erplibre-core:12.0
|
||||
- docker push technolibre/erplibre:12.0-pkg
|
||||
24
CHANGELOG.md
24
CHANGELOG.md
|
|
@ -5,19 +5,33 @@ 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]
|
||||
|
||||
## [1.1.0] - 2020-09-30
|
||||
### Added
|
||||
- Docker
|
||||
- Pyenv to manage python version
|
||||
- Poetry to manage python dependencies
|
||||
- Script poetry_update to search all dependencies in addons
|
||||
- Travis CI WIP
|
||||
- TODO.md
|
||||
- Guide to update all repositories with community
|
||||
- Update manifest
|
||||
- Add missing OCA repos
|
||||
- Add medical, property management and more
|
||||
- Add cloud/saas repo
|
||||
|
||||
### Changed
|
||||
- Update to Odoo Community 12.0
|
||||
- Update to Odoo Community 12.0 and all addons
|
||||
- Rename venv to .venv
|
||||
- More documentation on how to use ERPLibre
|
||||
|
||||
## [1.0.1] - 2020-07-14
|
||||
### Added
|
||||
- Improve documentation with development and production environment
|
||||
- Improve documentation with git repo
|
||||
- Improved documentation with development and production environment
|
||||
- Improved documentation with git repo
|
||||
- Move default.xml manifest to root, the default location
|
||||
- Support default.stage.xml to update prod with dev
|
||||
- Feature to show diff between manifest, between repo of different manifest
|
||||
- Feature to show diff between manifests or between repo of different manifests
|
||||
- Update manifest
|
||||
- Muk theme in erplibre_base
|
||||
- Add draft account invoice approbation in portal
|
||||
|
|
@ -31,7 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
## [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.
|
||||
- Google git-repo to support addons repository instead of using Git submodule.
|
||||
|
||||
### Removed
|
||||
- Git submodule
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Support Ubuntu 18.04 and OSX
|
|||
./script/install_dev.sh
|
||||
./script/install_locally_prod.sh
|
||||
```
|
||||
Update your configuration if you need to run somehere than 127.0.0.1, file config.conf
|
||||
Update your configuration if you need to run somehere than 127.0.0.1, file `config.conf`
|
||||
```
|
||||
#xmlrpc_interface = 127.0.0.1
|
||||
#netrpc_interface = 127.0.0.1
|
||||
|
|
|
|||
30
TODO.md
Normal file
30
TODO.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# TODO
|
||||
## Simplify push tag
|
||||
For RELEASE.md, replace next value by a script to select all remote by manifest file.
|
||||
Actually, need to push manually all different remote.
|
||||
> ./.venv/repo forall -pc "git push ERPLibre --tags"
|
||||
|
||||
## Funding
|
||||
- Add funding for MathBenTech and TechnoLibre
|
||||
|
||||
## Improve repo init usage
|
||||
- Support run repo init without human interaction. Do we need to create a temporary user name?
|
||||
|
||||
## Improve repo sync usage
|
||||
- Test repo sync with argument -d
|
||||
- Test repo sync with argument -t SMART_TAG, like tag ERPLibre/v1.0.0
|
||||
|
||||
## Git diff
|
||||
### Between 2 commits
|
||||
- Show all modified file, files list.
|
||||
- Show if probably has conflict if cherry-pick in wrong order,
|
||||
- Show modify same line in different commit
|
||||
|
||||
## Development
|
||||
### Run with another address ip than local
|
||||
- Remove xmlrpc_interface in config file when running dev installation
|
||||
- Improve config builder with a Python script
|
||||
|
||||
### Variable in new instance
|
||||
- Add technique to add variable when create a new instance from config files
|
||||
- Documentation for adding mail server, a guide for every one
|
||||
239
default.xml
239
default.xml
|
|
@ -1,103 +1,146 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<manifest>
|
||||
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="MathBenTech" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="Numigi" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="OCA" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="SanteLibre" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="Smile-SA" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="muk-it" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="odoo" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="odooaktiv" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="openeducat" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="CybroOdoo"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="ERPLibre"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="MathBenTech"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="Numigi"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="OCA"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="Smile-SA"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="camptocamp"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="dhongu"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="it-projects-llc"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="itpp-labs"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="kinjal-sorathiya"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="muk-it"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="obayit"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="odoo"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="odooaktiv"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="odoomates"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="openeducat"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="pledra"/>
|
||||
<remote fetch="https://github.com/ERPLibre/" name="tegin"/>
|
||||
|
||||
<default remote="ERPLibre" revision="12.0" sync-j="4" sync-c="true"/>
|
||||
<default remote="ERPLibre" revision="12.0" sync-c="true" sync-j="4"/>
|
||||
|
||||
<project name="QuotationRevision.git" path="addons/odooaktiv_QuotationRevision" remote="odooaktiv" revision="701438f9c59bd657de516d9ef4de1ba6167bf30b" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-analytic.git" path="addons/OCA_account-analytic" remote="OCA" revision="7ce9fe25a7c977c5338001bc32d58b1cadffe51e" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-budgeting.git" path="addons/OCA_account-budgeting" remote="OCA" revision="e175ffa84fb61f70de67a2732292e43bd490cefd" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-closing.git" path="addons/OCA_account-closing" remote="OCA" revision="40d40c73574bf65c91c879e0607b4ac455df06b2" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-consolidation.git" path="addons/OCA_account-consolidation" remote="OCA" revision="741fc50366bd70fceb88a2a3fcb0449b2582ed31" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-financial-reporting.git" path="addons/OCA_account-financial-reporting" remote="OCA" revision="1e0f8301ca015b3c4c456401bc30c5f211ccae3f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-financial-tools.git" path="addons/OCA_account-financial-tools" remote="OCA" revision="9721abd4c9db653e1d009f8a023e9f750523989f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-fiscal-rule.git" path="addons/OCA_account-fiscal-rule" remote="OCA" revision="f396ba6a2e2acebaaff579f0e6991b669812d64d" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-invoice-reporting.git" path="addons/OCA_account-invoice-reporting" remote="OCA" revision="320dd9fce4d212b2dcf5dc4447494964ad1e246d" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-invoicing.git" path="addons/OCA_account-invoicing" remote="OCA" revision="12c270d5ddeb72e0dee250289d24e3a8af4b26b3" upstream="12.0_account_invoice_approbation" dest-branch="12.0_account_invoice_approbation" groups="addons"/>
|
||||
<project name="account-payment.git" path="addons/OCA_account-payment" remote="OCA" revision="888debebd8e42c1ee5107577ca2f3bc5f38d72e1" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="account-reconcile.git" path="addons/OCA_account-reconcile" remote="OCA" revision="0390b112def3d362d95232d382317511616ee6dd" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="apps-store.git" path="addons/OCA_apps-store" remote="OCA" revision="022d24db4c6463f38b9f4452fe03c9fb8b3a44ce" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="bank-payment.git" path="addons/OCA_bank-payment" remote="OCA" revision="7e0e572fb4772c8ebacfe52d58c396bdbd9e01f9" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="bank-statement-import.git" path="addons/OCA_bank-statement-import" remote="OCA" revision="198306503b51371c8603fd8defef65fcd82bf954" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="brand.git" path="addons/OCA_brand" remote="OCA" revision="601a8c5c741b3035000f2337feab16325e6b9a49" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="business-requirement.git" path="addons/OCA_business-requirement" remote="OCA" revision="dd74e74583861b44c6120473ba0b56c90b887334" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="commission.git" path="addons/OCA_commission" remote="OCA" revision="e679120a6d8f910cba81d949ecddd7b89f48fc01" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="community-data-files.git" path="addons/OCA_community-data-files" remote="OCA" revision="2b17e5567d1bcb8ca377268615f209fdd57dc66e" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="connector-telephony.git" path="addons/OCA_connector-telephony" remote="OCA" revision="6d9df1037a97dbf791a7f0a717846a63144174bb" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="contract.git" path="addons/OCA_contract" remote="OCA" revision="3e531348cb51aeb2cc16c16ab8a2b693756ba47f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="credit-control.git" path="addons/OCA_credit-control" remote="OCA" revision="a97496a829cadc0d9be07d7825e93062417ab670" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="currency.git" path="addons/OCA_currency" remote="OCA" revision="5c0d54e37789ecc24bebbe53fa56a92a492575bb" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="data-protection.git" path="addons/OCA_data-protection" remote="OCA" revision="ce4f334a1077b5c15d457f22daaa48b9f639409e" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="development.git" path="addons/MathBenTech_development" remote="MathBenTech" revision="1f023cdf2a03b8b3fbb176b45657bae2db1c0e3d" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="donation.git" path="addons/OCA_donation" remote="OCA" revision="aa6478a72c9673ad6458de19aa2362397c613fae" upstream="12.0_module_donation_website" dest-branch="12.0_module_donation_website" groups="addons"/>
|
||||
<project name="e-commerce.git" path="addons/OCA_e-commerce" remote="OCA" revision="d7c99e565f25b495b3c0d252f181d8df4490a757" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="edi.git" path="addons/OCA_edi" remote="OCA" revision="742b1316773f8a1b224e42c65c3c3a7685481a30" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="erplibre_addons.git" path="addons/ERPLibre_erplibre_addons" revision="d66e9b4c9c026c02446664537b9d9a7e63cce002" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="event.git" path="addons/OCA_event" remote="OCA" revision="e2bdf12c61e9967eeb9abc618c79ca43b464ea7f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="helpdesk.git" path="addons/OCA_helpdesk" remote="OCA" revision="74da6d49a9493be6ea39eb6da0654e81aca65619" upstream="12.0_dev" dest-branch="12.0_dev" groups="addons"/>
|
||||
<project name="hr.git" path="addons/OCA_hr" remote="OCA" revision="4743acf7ab796ea3738743a44c62cd516126ec53" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="knowledge.git" path="addons/OCA_knowledge" remote="OCA" revision="9ae45f798bbefa854b03f612e22291ac1b95568d" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="l10n-canada.git" path="addons/OCA_l10n-canada" remote="OCA" revision="5680b485cdfa0b6f1c2f4e32356b5938a9752c00" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="maintenance.git" path="addons/OCA_maintenance" remote="OCA" revision="4e521ec35f6e8b66f86a62db644dadc9206b476e" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="management-system.git" path="addons/OCA_management-system" remote="OCA" revision="479afcc65ee29530e2bcaa7342f93b6783d14d97" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="manufacture.git" path="addons/OCA_manufacture" remote="OCA" revision="ce36844281754a75b527c4ace21837c8a16b75ab" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="margin-analysis.git" path="addons/OCA_margin-analysis" remote="OCA" revision="22907c7ee34dba85085d9459704e38592f00e0b2" upstream="12.0_sale_margin_editor" dest-branch="12.0_sale_margin_editor" groups="addons"/>
|
||||
<project name="mis-builder.git" path="addons/OCA_mis-builder" remote="OCA" revision="5d7697296ad90794599373940e6fc6cead8ca1a2" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="muk_base.git" path="addons/muk-it_muk_base" remote="muk-it" revision="d888c9695292295a732fcdd4a7b9820978df5e7f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="muk_dms.git" path="addons/muk-it_muk_dms" remote="muk-it" revision="020e604d635a229c09a07e839d95f8e37706606a" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="muk_docs.git" path="addons/muk-it_muk_docs" remote="muk-it" revision="a8ea02b9f00ae9fe5d2ea25ac43d23532cc11d45" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="muk_misc.git" path="addons/muk-it_muk_misc" remote="muk-it" revision="37b9d6dc20fa686a323057b160015bfc2c2c8143" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="muk_quality.git" path="addons/muk-it_muk_quality" remote="muk-it" revision="1a4c6f25c5e4fe0029d406d6283555bd23a44d27" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="muk_web.git" path="addons/muk-it_muk_web" remote="muk-it" revision="431d86d6694e846b407c84f00a31a10f0cf5b83b" upstream="12.0_fix_web_conflict_menu" dest-branch="12.0_fix_web_conflict_menu" groups="addons"/>
|
||||
<project name="muk_website.git" path="addons/muk-it_muk_website" remote="muk-it" revision="c1e6c1755d09562f66247832bd01a0d580c43e23" upstream="12.0_remove_autoinstall" dest-branch="12.0_remove_autoinstall" groups="addons"/>
|
||||
<project name="multi-company.git" path="addons/OCA_multi-company" remote="OCA" revision="fdb4d255b6a3b51925f8a226bfebf2eccabd2786" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-base-addons.git" path="addons/Numigi_odoo-base-addons" remote="Numigi" revision="60bc1e5414ff3bf81a6d72831da2eaad94ccbcb2" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-business-spending-management-quebec-canada.git" path="addons/MathBenTech_odoo-business-spending-management-quebec-canada" remote="MathBenTech" revision="822d2e018554119fa63f79ac91625473ec54b9fe" upstream="12.0_sale_order_line_timesheet_attribution" dest-branch="12.0_sale_order_line_timesheet_attribution" groups="addons"/>
|
||||
<project name="odoo-entertainment-addons.git" path="addons/Numigi_odoo-entertainment-addons" remote="Numigi" revision="82c33255261eff361a91da13b28e4e68a95b25dd" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-git-addons.git" path="addons/Numigi_odoo-git-addons" remote="Numigi" revision="96db417669a631877c1439f617ac8c0cc6edfff9" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-hr-addons.git" path="addons/Numigi_odoo-hr-addons" remote="Numigi" revision="0034395bcdb38c02749644607f43ccac760dfb49" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-partner-addons.git" path="addons/Numigi_odoo-partner-addons" remote="Numigi" revision="f0c54ffb3409cd8e748ae5db19077c7c966cd57f" upstream="12.0_partner_no_vat_improve_no_vat" dest-branch="12.0_partner_no_vat_improve_no_vat" groups="addons"/>
|
||||
<project name="odoo-product-addons.git" path="addons/Numigi_odoo-product-addons" remote="Numigi" revision="36751bd3c6baced6a0b3f5ddb675d87cb04a745c" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-project-addons.git" path="addons/Numigi_odoo-project-addons" remote="Numigi" revision="4388a4ca61b87032e2c3783dc2740b299cd31b6f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-purchase-addons.git" path="addons/Numigi_odoo-purchase-addons" remote="Numigi" revision="5d226ca3887c77e31467a192a0fbe4066bf7842c" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-stock-addons.git" path="addons/Numigi_odoo-stock-addons" remote="Numigi" revision="3fe57c3cad122d5a448239b46fda8bf76ea32493" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-survey-addons.git" path="addons/Numigi_odoo-survey-addons" remote="Numigi" revision="9e897bae38ff0d6d3180296a552d994bb10c0eff" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-timesheet-addons.git" path="addons/Numigi_odoo-timesheet-addons" remote="Numigi" revision="d2bbb19dc8f917272694ff0a6231275083fb7e74" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo-web-addons.git" path="addons/Numigi_odoo-web-addons" remote="Numigi" revision="3a4aa46439a794429d5939cff561f42c4f312a99" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="odoo.git" path="odoo" remote="odoo" revision="0e0213c487041d9969444e312430c23e994ed778" upstream="ERPLibre/12.0" dest-branch="ERPLibre/12.0" clone-depth="10" groups="odoo"/>
|
||||
<project name="odoo_addons.git" path="addons/Smile-SA_odoo_addons" remote="Smile-SA" revision="2be318c18ac5b0fe2129cc61d86419033ff07d5f" upstream="12.0_remote_autoinstall" dest-branch="12.0_remote_autoinstall" groups="addons"/>
|
||||
<project name="openeducat_erp.git" path="addons/openeducat_openeducat_erp" remote="openeducat" revision="4a2a1d930d88a127959fd39af22f7d818e08663d" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="partner-contact.git" path="addons/OCA_partner-contact" remote="OCA" revision="a79e57685caad7d0dec9318378fdd46862e31be4" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="pos.git" path="addons/OCA_pos" remote="OCA" revision="6a922b3d87491d59128a097f286be1e3f3fc11df" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="product-attribute.git" path="addons/OCA_product-attribute" remote="OCA" revision="ea48097094462e67d7e1558b333da78c6038b89c" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="product-pack.git" path="addons/OCA_product-pack" remote="OCA" revision="b9eccbdb9ae0fdd3ed1138270c3eff3142a015c3" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="product-variant.git" path="addons/OCA_product-variant" remote="OCA" revision="fb4f4042b3ca0ee6cde6ab0625e2c914b96b174f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="project-reporting.git" path="addons/OCA_project-reporting" remote="OCA" revision="7f71f086dd732170e7605dfdf80e6cc4969a711e" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="project.git" path="addons/OCA_project" remote="OCA" revision="4390f1ffa9f00058b0d1aa7fae27fb74bbefb83b" upstream="12.0_fix_conflict_project_key" dest-branch="12.0_fix_conflict_project_key" groups="addons"/>
|
||||
<project name="purchase-workflow.git" path="addons/OCA_purchase-workflow" remote="OCA" revision="d17436791bcfbe0985af137163564af3fe90bbe1" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="queue.git" path="addons/OCA_queue" remote="OCA" revision="0b71a3951b583f154f170adacf4920e6d7138329" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="reporting-engine.git" path="addons/OCA_reporting-engine" remote="OCA" revision="14fba657a0dbda1258edcf3c92886866e7cecf67" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="sale-workflow.git" path="addons/OCA_sale-workflow" remote="OCA" revision="4b200358312689d944aaaf012c5723bb2bc9cb77" upstream="12.0_modules_sale_order_line" dest-branch="12.0_modules_sale_order_line" groups="addons"/>
|
||||
<project name="santelibre_addons.git" path="addons/SanteLibre_santelibre_addons" remote="SanteLibre" revision="ee94058aecee418b3652864f23b54a86ba0f92f4" upstream="master" dest-branch="master" groups="addons"/>
|
||||
<project name="scrummer.git" path="addons/MathBenTech_scrummer" remote="MathBenTech" revision="38c04c8f7b7fe897d166ded74dda9d8d76f7f4c4" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="server-auth.git" path="addons/OCA_server-auth" remote="OCA" revision="f911c9f31a064cca3012431b70e60a7b89448138" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="server-brand.git" path="addons/OCA_server-brand" remote="OCA" revision="d8f27b04475d3cc74a7bebb1e086f647f5e01569" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="server-env.git" path="addons/OCA_server-env" remote="OCA" revision="19af535b3aedd5c1fdfbe911dacfc43ae31edb71" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="server-tools.git" path="addons/OCA_server-tools" remote="OCA" revision="d97aaa9fa2f01f64ebf7100668e0901fde35d42f" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="server-ux.git" path="addons/OCA_server-ux" remote="OCA" revision="655b3cc291a7e3718371a45ebe6f2e0952896adf" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="social.git" path="addons/OCA_social" remote="OCA" revision="7b0836bf7a5c40db332dd90d5ebef619234060ac" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="stock-logistics-warehouse.git" path="addons/OCA_stock-logistics-warehouse" remote="OCA" revision="a591de15150f7b16c1ef23d2fc30c814874dea27" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="timesheet.git" path="addons/OCA_timesheet" remote="OCA" revision="8625e65414801780c91e91bf93b2ed32567f8117" upstream="12.0_support_project_agile_timesheet" dest-branch="12.0_support_project_agile_timesheet" groups="addons"/>
|
||||
<project name="web.git" path="addons/OCA_web" remote="OCA" revision="b65c492f4011fe4e9dac8c0a26eeef8c43cb1c39" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project name="website.git" path="addons/OCA_website" remote="OCA" revision="603a44d53a2e7a457560a0f99bdcc95780399ee5" upstream="12.0_dev" dest-branch="12.0_dev" groups="addons"/>
|
||||
<project name="wms.git" path="addons/OCA_wms" remote="OCA" revision="e7a1541f8c513cf755bd82780c6c035d2fafc2ce" upstream="12.0" dest-branch="12.0" groups="addons"/>
|
||||
<project dest-branch="12.0" groups="addons" name="OpenHRMS.git" path="addons/CybroOdoo_OpenHRMS" remote="CybroOdoo" revision="e7881872d147e91a59e9ee9fac9e89316e1cabb4" upstream="12.0"/>
|
||||
<project dest-branch="master" groups="addons" name="Property-Management_odoo.git" path="addons/kinjal-sorathiya_Property-Management_odoo" remote="kinjal-sorathiya" revision="922f6878ac560829d2ebe951b93f858c1e7d256d" upstream="master"/>
|
||||
<project dest-branch="12.0" groups="addons" name="QuotationRevision.git" path="addons/odooaktiv_QuotationRevision" remote="odooaktiv" revision="701438f9c59bd657de516d9ef4de1ba6167bf30b" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="access-addons.git" path="addons/itpp-labs_access-addons" remote="itpp-labs" revision="482ed9d81ab707020918b43b945a92e9a3849b35" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="account-analytic.git" path="addons/OCA_account-analytic" remote="OCA" revision="127b15406fc619f8a01c1823bbf1aecc891ac4e7" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-budgeting.git" path="addons/OCA_account-budgeting" remote="OCA" revision="41723d9753c186c2f310f7960d27597700218453" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-closing.git" path="addons/OCA_account-closing" remote="OCA" revision="a7d2b14943027514a25666ee247d7ac18feae8d4" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-consolidation.git" path="addons/OCA_account-consolidation" remote="OCA" revision="aff1c46476a62ac6603bd64a0c22a020dd61c92e" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="account-financial-reporting.git" path="addons/OCA_account-financial-reporting" remote="OCA" revision="9a301da921491f7ff39d001884f4da20e2a14275" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="account-financial-tools.git" path="addons/OCA_account-financial-tools" remote="OCA" revision="2a00520ba4e3f126799591d2279554556610471a" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-fiscal-rule.git" path="addons/OCA_account-fiscal-rule" remote="OCA" revision="220ecc1fd7a33f8718f9c629c93fcaf4c2be0e6f" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-invoice-reporting.git" path="addons/OCA_account-invoice-reporting" remote="OCA" revision="0eacde24ff15d63f6cfff4ea1113d36aa62e10c8" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="account-invoicing.git" path="addons/OCA_account-invoicing" remote="OCA" revision="d0841c7351ee4fe37f59187689520214b0ab0a51" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-payment.git" path="addons/OCA_account-payment" remote="OCA" revision="6c3c3d5ae95958b181544bb371291ef059082551" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="account-reconcile.git" path="addons/OCA_account-reconcile" remote="OCA" revision="661f3bb2f1df474aef1640f1511a4fb4a6e3151f" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="apps-store.git" path="addons/OCA_apps-store" remote="OCA" revision="9f02be326e234b1f981add21b13d6f87d1d9a52d" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="bank-payment.git" path="addons/OCA_bank-payment" remote="OCA" revision="6e3c6724866b3f191586a8e25578aafe76d3aa76" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="bank-statement-import.git" path="addons/OCA_bank-statement-import" remote="OCA" revision="b4695b27a555f758b00733f47048b612a2d397be" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="brand.git" path="addons/OCA_brand" remote="OCA" revision="790324790c909961d2f86954e24e01ce4bcdf045" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="business-requirement.git" path="addons/OCA_business-requirement" remote="OCA" revision="7be3c2b25b3b3f4ebd21e0d055c3bba63c45761a" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="commission.git" path="addons/OCA_commission" remote="OCA" revision="f47fb07531b767a5a15a4aa966c6a96e15a21b3f" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="community-data-files.git" path="addons/OCA_community-data-files" remote="OCA" revision="ff512e6dee776279de31636f890b19d50a434fb2" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="connector-ecommerce.git" path="addons/OCA_connector-ecommerce" remote="OCA" revision="41674c2f4681ea7b6713d8273b44c0c9b816116a" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="connector-interfaces.git" path="addons/OCA_connector-interfaces" remote="OCA" revision="43baddd62e856a17c8068890aa7ecdd1cc428ae9" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="connector-jira.git" path="addons/OCA_connector-jira" remote="OCA" revision="34d3137a7ddebe680c55c1668702d573c5f3387d" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="connector-telephony.git" path="addons/OCA_connector-telephony" remote="OCA" revision="b87711775dae08e43a0803772bdeb6afda408db4" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="connector.git" path="addons/OCA_connector" remote="OCA" revision="274c3f1c385fb822eacd73235ecf3522dc96fe27" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="contract.git" path="addons/OCA_contract" remote="OCA" revision="03c444e0b583b8950da11efa302991d148bf9ac0" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="credit-control.git" path="addons/OCA_credit-control" remote="OCA" revision="b37f66e87063b3b49117dbcab184ad3c28d050c7" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="crm.git" path="addons/OCA_crm" remote="OCA" revision="e0d66587f245c80a6dba3a5227481fe831b1891a" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="currency.git" path="addons/OCA_currency" remote="OCA" revision="b12e419825ec222a29c00fdb1b7740ad54397f51" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="data-protection.git" path="addons/OCA_data-protection" remote="OCA" revision="fa9fb5386989e987bd6c34f5e28c75974588e185" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="ddmrp.git" path="addons/OCA_ddmrp" remote="OCA" revision="f4f2f920c091caef4bf0b55c6e1a98ed333afa25" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="delivery-carrier.git" path="addons/OCA_delivery-carrier" remote="OCA" revision="92a8b4445400a2ee76ed4ea9c9fe83a57a2aaeab" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="deltatech.git" path="addons/dhongu_deltatech" remote="dhongu" revision="70ad7f4f9981896e04117156732ac0056764031c" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="development.git" path="addons/MathBenTech_development" remote="MathBenTech" revision="2609ef2966731594741d6a5804cccba1251002e1" upstream="12.0"/>
|
||||
<project dest-branch="12.0_module_donation_website" groups="addons" name="donation.git" path="addons/OCA_donation" remote="OCA" revision="66a80b99c17baaa82df76d51bd3fd9bc3163034a" upstream="12.0_module_donation_website"/>
|
||||
<project dest-branch="12.0" groups="addons" name="e-commerce.git" path="addons/OCA_e-commerce" remote="OCA" revision="004e2c69b4b0d6ff12ec863d41994b19fe12b70c" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="edi.git" path="addons/OCA_edi" remote="OCA" revision="020a96a4512b60ab74f1213526770595eb54e687" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="erplibre_addons.git" path="addons/ERPLibre_erplibre_addons" revision="cc41fef9d3eea7722b3f7245fc556c51f3e0b7c0" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="erplibre_theme_addons.git" path="addons/ERPLibre_erplibre_theme_addons" revision="8ccf9eecbf26841d728b57dbc12f2c3bdbfe48de" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="event.git" path="addons/OCA_event" remote="OCA" revision="caa5d06e1dd454800149785685c73a1c17af14d1" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="field-service.git" path="addons/OCA_field-service" remote="OCA" revision="fb3cd1ccdf7339ef6d8a55173594f9727c509693" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="fleet.git" path="addons/OCA_fleet" remote="OCA" revision="3b5a96ef9d0a7d769c78e1141a7048a5cdbe8552" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="geospatial.git" path="addons/OCA_geospatial" remote="OCA" revision="24e5832b6807f2757a9f12e26c3cff8c241b63bc" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="helpdesk.git" path="addons/OCA_helpdesk" remote="OCA" revision="3f03ee5595e6827961c7c46d245bfde2ef2d4eec" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="hr.git" path="addons/OCA_hr" remote="OCA" revision="8cd4ac8db3cdbe500e21300edabfb3f20e657960" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="interface-github.git" path="addons/OCA_interface-github" remote="OCA" revision="9a51c99b0e0adb2d3529feca5d68c76a982d9afc" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="knowledge.git" path="addons/OCA_knowledge" remote="OCA" revision="7448855b3efc403cba03a3225056fed0fbc1c952" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="l10n-canada.git" path="addons/OCA_l10n-canada" remote="OCA" revision="5680b485cdfa0b6f1c2f4e32356b5938a9752c00" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="maintenance.git" path="addons/OCA_maintenance" remote="OCA" revision="915ba2aa932dad664e4604acf723ac0fb38f3796" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="management-system.git" path="addons/OCA_management-system" remote="OCA" revision="fd422cef074d8aacc2e0cfd61893a949d4d86cd6" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="manufacture.git" path="addons/OCA_manufacture" remote="OCA" revision="560da9ba630974d819e1e505648c7b9731e461f1" upstream="12.0"/>
|
||||
<project dest-branch="12.0_sale_margin_editor" groups="addons" name="margin-analysis.git" path="addons/OCA_margin-analysis" remote="OCA" revision="9abbd69de30b972edd26269c212d0380f1915da7" upstream="12.0_sale_margin_editor"/>
|
||||
<project dest-branch="12.0" groups="addons" name="medical-fhir.git" path="addons/tegin_medical-fhir" remote="tegin" revision="19cba74b3b61ba684749da1f5d7cdb287bd45050" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="mis-builder.git" path="addons/OCA_mis-builder" remote="OCA" revision="178c50f03df1b684972706aa94db917e6114f6cb" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="muk_base.git" path="addons/muk-it_muk_base" remote="muk-it" revision="a97c3f5c4369596756e283f34ecebbd184d7c725" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="muk_dms.git" path="addons/muk-it_muk_dms" remote="muk-it" revision="346b2d742696343ee025083604ee6fcb2050a65b" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="muk_docs.git" path="addons/muk-it_muk_docs" remote="muk-it" revision="a8ea02b9f00ae9fe5d2ea25ac43d23532cc11d45" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="muk_misc.git" path="addons/muk-it_muk_misc" remote="muk-it" revision="37b9d6dc20fa686a323057b160015bfc2c2c8143" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="muk_quality.git" path="addons/muk-it_muk_quality" remote="muk-it" revision="1a4c6f25c5e4fe0029d406d6283555bd23a44d27" upstream="12.0"/>
|
||||
<project dest-branch="12.0_fix_web_conflict_menu" groups="addons" name="muk_web.git" path="addons/muk-it_muk_web" remote="muk-it" revision="4fb8ce157ce0a144503440b0036bf05625b7c3e1" upstream="12.0_fix_web_conflict_menu"/>
|
||||
<project dest-branch="12.0_remove_autoinstall" groups="addons" name="muk_website.git" path="addons/muk-it_muk_website" remote="muk-it" revision="c1e6c1755d09562f66247832bd01a0d580c43e23" upstream="12.0_remove_autoinstall"/>
|
||||
<project dest-branch="12.0" groups="addons" name="multi-company.git" path="addons/OCA_multi-company" remote="OCA" revision="9d689c5ad230f8f2e6a550354a6b1577a8e5a3c9" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-base-addons.git" path="addons/Numigi_odoo-base-addons" remote="Numigi" revision="78c23a29283f35ef480186358dd6d848a38a2aff" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0_sale_order_line_timesheet_attribution" groups="addons" name="odoo-business-spending-management-quebec-canada.git" path="addons/MathBenTech_odoo-business-spending-management-quebec-canada" remote="MathBenTech" revision="822d2e018554119fa63f79ac91625473ec54b9fe" upstream="12.0_sale_order_line_timesheet_attribution"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-cloud-platform.git" path="addons/camptocamp_odoo-cloud-platform" remote="camptocamp" revision="234451065fa2804af832d713dcec9cf8842d8a49" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-entertainment-addons.git" path="addons/Numigi_odoo-entertainment-addons" remote="Numigi" revision="5abba3eabcb60c96d80240ab756736eb57ed345b" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-git-addons.git" path="addons/Numigi_odoo-git-addons" remote="Numigi" revision="a394f422a5d3063dd2c339544ecca74bdbbe19ae" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-hr-addons.git" path="addons/Numigi_odoo-hr-addons" remote="Numigi" revision="2d3dd1769b47aac54585c56dcad652a4dbe5850f" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-partner-addons.git" path="addons/Numigi_odoo-partner-addons" remote="Numigi" revision="3320fbed43c324d07035f7f1d1bc77d779f8fe0e" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-product-addons.git" path="addons/Numigi_odoo-product-addons" remote="Numigi" revision="e4daf4cb743dd73928571c0757083e8ee6fec6ef" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-product-configurator.git" path="addons/pledra_odoo-product-configurator" remote="pledra" revision="785923c83266097f53569769c26c8f2a859d1d6f" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-project-addons.git" path="addons/Numigi_odoo-project-addons" remote="Numigi" revision="3f844c31afd62a3f1a606f9d55038a881c10c927" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-purchase-addons.git" path="addons/Numigi_odoo-purchase-addons" remote="Numigi" revision="36d5b5b5a56ef0ddbb75bc83d5d13c38aceea3f2" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-saas-tools.git" path="addons/it-projects-llc_odoo-saas-tools" remote="it-projects-llc" revision="5f7cf7f7d347a244641feb5d38ac8acd180e4e2b" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-stock-addons.git" path="addons/Numigi_odoo-stock-addons" remote="Numigi" revision="0d4106c1800c2feff32e40206082bb4cb10547d1" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-survey-addons.git" path="addons/Numigi_odoo-survey-addons" remote="Numigi" revision="9e897bae38ff0d6d3180296a552d994bb10c0eff" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="odoo-timesheet-addons.git" path="addons/Numigi_odoo-timesheet-addons" remote="Numigi" revision="11f01fcca4714fd946949519fd3f3b56b136b813" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo-web-addons.git" path="addons/Numigi_odoo-web-addons" remote="Numigi" revision="3a4aa46439a794429d5939cff561f42c4f312a99" upstream="12.0"/>
|
||||
<project clone-depth="10" dest-branch="ERPLibre/12.0" groups="odoo" name="odoo.git" path="odoo" remote="odoo" revision="5dca43a46633785a27d52be3f01c2ebaf2389dd3" upstream="ERPLibre/12.0"/>
|
||||
<project dest-branch="12.0_remote_autoinstall" groups="addons" name="odoo_addons.git" path="addons/Smile-SA_odoo_addons" remote="Smile-SA" revision="42cac5684e7bc60454a56eb44366c9b079dff197" upstream="12.0_remote_autoinstall"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odoo_dhtmlxgantt.git" path="addons/obayit_odoo_dhtmlxgantt" remote="obayit" revision="f54a35ba90be42967cdd423e830823981be75f67" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="odooapps.git" path="addons/odoomates_odooapps" remote="odoomates" revision="76ed3e44029407bf0733ca14c00d2a4b5dc0bfa8" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="openeducat_erp.git" path="addons/openeducat_openeducat_erp" remote="openeducat" revision="d9c26e6bf4bfa532162cbdd0d92a7e4d4915ffd0" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="operating-unit.git" path="addons/OCA_operating-unit" remote="OCA" revision="da9f3eb128e72bccb4355fe4dbb869d60aa663fc" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="partner-contact.git" path="addons/OCA_partner-contact" remote="OCA" revision="0f5346db7bdb4850ab1502a7af66ba46b55a4fae" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="pos-addons.git" path="addons/itpp-labs_pos-addons" remote="itpp-labs" revision="6c57f57e23e89724d121977a86e24e8d1af24a4c" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="pos.git" path="addons/OCA_pos" remote="OCA" revision="75703f87031440eea93b3bdd33ec8fc2e3b5c13a" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="product-attribute.git" path="addons/OCA_product-attribute" remote="OCA" revision="69d58f4c68c42c01908d277f65d667f6e3184cac" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="product-pack.git" path="addons/OCA_product-pack" remote="OCA" revision="b869a5d2efaa1b2bdf391e7bba52f3b44256bc98" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="product-variant.git" path="addons/OCA_product-variant" remote="OCA" revision="e586ebbb9a5a3191278ba0cca1b525649b60ece0" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="product_rating_app.git" path="addons/odooaktiv_product_rating_app" remote="odooaktiv" revision="5174b118c9a186bcef17a9296cc303111a06f427" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="project-reporting.git" path="addons/OCA_project-reporting" remote="OCA" revision="b5b0e8de37be84d2181f19f84f381ada3fd25812" upstream="12.0"/>
|
||||
<project dest-branch="12.0_fix_conflict_project_key" groups="addons" name="project.git" path="addons/OCA_project" remote="OCA" revision="0b335b5b146e84eebeb898c3cee5b1ccc959ede7" upstream="12.0_fix_conflict_project_key"/>
|
||||
<project dest-branch="12.0" groups="addons" name="purchase-workflow.git" path="addons/OCA_purchase-workflow" remote="OCA" revision="547072c977cf24f044615787ffcf7b56d838ec89" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="queue.git" path="addons/OCA_queue" remote="OCA" revision="d303bceac89152c6996b7f5bbeabb6a67192b93f" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="reporting-engine.git" path="addons/OCA_reporting-engine" remote="OCA" revision="733d57754c6e419bb16ee095824e787b218c1aa4" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="rma.git" path="addons/OCA_rma" remote="OCA" revision="fd48feb1dea66daae474b74a7e7656f74ba50313" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="sale-reporting.git" path="addons/OCA_sale-reporting" remote="OCA" revision="10224ef7b42ee3dec2849414e41557b0bc3c8f79" upstream="12.0"/>
|
||||
<project dest-branch="12.0_modules_sale_order_line" groups="addons" name="sale-workflow.git" path="addons/OCA_sale-workflow" remote="OCA" revision="5d8d2575e6a2c8ad0e3315abd0585651f73b80fd" upstream="12.0_modules_sale_order_line"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="scrummer.git" path="addons/MathBenTech_scrummer" remote="MathBenTech" revision="38c04c8f7b7fe897d166ded74dda9d8d76f7f4c4" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="server-auth.git" path="addons/OCA_server-auth" remote="OCA" revision="2bfb2b2f64bda15fb5c7f8f4d528aa1aadc4998b" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="server-backend.git" path="addons/OCA_server-backend" remote="OCA" revision="77a1ee79912d381e06c8bd96f1034574b460881d" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="server-brand.git" path="addons/OCA_server-brand" remote="OCA" revision="786a26c58f789ed63e6380d5e550cf300a5ae1a4" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="server-env.git" path="addons/OCA_server-env" remote="OCA" revision="11d6745d4156636dd12d134a9b3f8053cb24717b" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="server-tools.git" path="addons/OCA_server-tools" remote="OCA" revision="cca5dffd0dec68e1aa4209a8747d4381a97efa89" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="server-ux.git" path="addons/OCA_server-ux" remote="OCA" revision="765439a6af66be5ee2427a2775812d44a345a235" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="social.git" path="addons/OCA_social" remote="OCA" revision="8bd98212b8d04aa3de82e9f51063b9d185ac0f1c" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="stock-logistics-warehouse.git" path="addons/OCA_stock-logistics-warehouse" remote="OCA" revision="1b99507da7815d1dd2e030a3a1d28285ea7ecf76" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="storage.git" path="addons/OCA_storage" remote="OCA" revision="77bac72af7f4aa1c6248378e9cbb5ebcdd52f994" upstream="12.0"/>
|
||||
<project dest-branch="12.0_support_project_agile_timesheet" groups="addons" name="timesheet.git" path="addons/OCA_timesheet" remote="OCA" revision="a8630243c1c06c66579f5d6fff6ad71e249a0f80" upstream="12.0_support_project_agile_timesheet"/>
|
||||
<project dest-branch="12.0" groups="addons" name="vertical-association.git" path="addons/OCA_vertical-association" remote="OCA" revision="467f3d5ed737fa65b4f7781013fa48e9c328cd61" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="vertical-hotel.git" path="addons/OCA_vertical-hotel" remote="OCA" revision="f958379e1492870431a92543089db214b62ab1f5" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="vertical-isp.git" path="addons/OCA_vertical-isp" remote="OCA" revision="28ad39aae5eb5cebaa46d79ce563ef760451962b" upstream="12.0"/>
|
||||
<project dest-branch="12.0" groups="addons" name="vertical-travel.git" path="addons/OCA_vertical-travel" remote="OCA" revision="3572c0689eb67a757681070ac913c72cea50645f" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="web.git" path="addons/OCA_web" remote="OCA" revision="2c57ad38475f030dbd00c01d00c6a540d5ab4d7d" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="website-addons.git" path="addons/itpp-labs_website-addons" remote="itpp-labs" revision="ed7d3b19435d7522afccf17edd9261ab215b4851" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="website-cms.git" path="addons/OCA_website-cms" remote="OCA" revision="e67368d15de06e795247bd54874181bfd7324a44" upstream="12.0"/>
|
||||
<project dest-branch="12.0_dev" groups="addons" name="website.git" path="addons/OCA_website" remote="OCA" revision="900919e8fbe155ebf58273870f0fb596f317f6c4" upstream="12.0_dev"/>
|
||||
<project dest-branch="12.0" groups="addons" name="wms.git" path="addons/OCA_wms" remote="OCA" revision="04600a6f653b7c7e8b597f452cceb4172013c73f" upstream="12.0"/>
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Thanks
|
||||
## AGILE OPS
|
||||
Thanks for contributing to GIT_REPO.
|
||||
Thanks for contributing to GIT_REPO and docker.
|
||||
- [Agile OPS](https://www.linkedin.com/in/michaelfaille/)
|
||||
|
||||
## MathBenTech
|
||||
|
|
@ -8,9 +8,9 @@ Thanks for creating this project.
|
|||
- [MathBen.Tech](https://mathben.tech)
|
||||
|
||||
## TechnoLibre
|
||||
Thanks for making enterprise edition of ERPLibre.
|
||||
Thanks for making this enterprise edition of ERPLibre.
|
||||
- [TechnoLibre](https://technolibre.ca)
|
||||
|
||||
## Yenthe Van Ginneken
|
||||
Thanks Yenthe Van Ginneken for your scripting guides and tutorial.
|
||||
Thanks Yenthe Van Ginneken for your scripting guides and tutorials.
|
||||
- [Yenthe666 InstallScript](https://github.com/Yenthe666/InstallScript)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Development guide
|
||||
Setup your environment to develop modules and debug the platform.
|
||||
|
||||
## Installation procedure locally
|
||||
## Local installation procedure
|
||||
### 1. Clone the project:
|
||||
```bash
|
||||
git clone https://github.com/ERPLibre/ERPLibre.git
|
||||
|
|
@ -20,17 +20,10 @@ cd ERPLibre
|
|||
```
|
||||
|
||||
## Develop in Odoo repository
|
||||
You need to remove
|
||||
> clone-depth="1"
|
||||
You need to remove `clone-depth="10"` from `./manifest/default.dev.xml` in order to be able to commit and push.
|
||||
Make a temporary commit and regenerate with `./script/install_locally_dev.sh`
|
||||
|
||||
from
|
||||
> ./manifest/default.dev.xml
|
||||
|
||||
file to be able to commit and push.
|
||||
Commit temporary and regenerate with
|
||||
> ./script/install_locally_dev.sh
|
||||
|
||||
## Fork project to create a new project independent of ERPLibre (deprecated)
|
||||
## Fork project to create a new project independent from 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.
|
||||
|
|
@ -38,8 +31,8 @@ Don't use this script if you want to update from ERPLibre and follow mainstream
|
|||
./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).
|
||||
# Fork all repos for you own organization
|
||||
Go to your github account and generate a token to access fork option with your user. Create an organization or use your personal account can choose your user name.
|
||||
|
||||
This command will fork all repos and ERPLibre to your own organization. It keeps track to ERPLibre.
|
||||
```bash
|
||||
|
|
@ -49,13 +42,13 @@ This command will fork all repos and ERPLibre to your own organization. It keeps
|
|||
## Generate manifest from csv repo
|
||||
Add repo in file [./source_repo_addons.csv](./source_repo_addons.csv)
|
||||
|
||||
Execute to generate manifest of Repo
|
||||
Execute to generate Repo manifest
|
||||
```bash
|
||||
./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.
|
||||
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
|
||||
|
|
@ -72,26 +65,32 @@ This will update all urls in git format:
|
|||
./script/git_change_remote_https_to_git.py
|
||||
```
|
||||
|
||||
## Diff repo with another project
|
||||
## Showing repo differences between projects
|
||||
Tools to display the differences between the repo and another project.
|
||||
```bash
|
||||
./script/git_change_remote.py --sync_to /path/to/project/erplibre --dry_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.
|
||||
Tools to synchronise the repo with another project. This will show differences and try to checkout on the same commit in all repos.
|
||||
```bash
|
||||
./script/git_change_remote.py --sync_to /path/to/project/erplibre
|
||||
```
|
||||
|
||||
## Diff code between manifest
|
||||
To show diff between commits in different manifest
|
||||
## Compare two files manifests
|
||||
To show differences between commits in different manifests
|
||||
```bash
|
||||
./script/git_diff_repo_manifest.py --input1 ./manifest/MANIFEST1.xml --input2 ./manifest/MANIFEST2.xml
|
||||
```
|
||||
|
||||
## Differences between code and manifest
|
||||
To show differences between actual code and manifest
|
||||
```bash
|
||||
./script/git_show_code_diff_repo_manifest.py --manifest ./manifest/MANIFEST1.xml
|
||||
```
|
||||
|
||||
## Add repo
|
||||
Access to a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv)
|
||||
To access 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
|
||||
|
|
@ -103,9 +102,20 @@ To regenerate only manifest.xml.
|
|||
./script/fork_project_ERPLibre.py --skip_fork
|
||||
```
|
||||
|
||||
# Coding
|
||||
## Create module scaffold (run in the venv)
|
||||
Check if manifest contains "auto_install" and change the value to False.
|
||||
```bash
|
||||
source ./venv/bin/activate
|
||||
./script/repo_remove_auto_install.py
|
||||
```
|
||||
|
||||
# Coding
|
||||
## Create module scaffold
|
||||
```bash
|
||||
source ./.venv/bin/activate
|
||||
python odoo/odoo-bin scaffold MODULE_NAME addons/REPO_NAME/
|
||||
```
|
||||
|
||||
# Pull request
|
||||
## Show all pull requests from organization
|
||||
```bash
|
||||
/script/pull_request_ERPLibre.py --github_token ### --organization ERPLibre
|
||||
```
|
||||
|
|
|
|||
|
|
@ -20,13 +20,14 @@ cd ERPLibre
|
|||
```
|
||||
|
||||
## Add repo
|
||||
Access to a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv)
|
||||
To access a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv)
|
||||
|
||||
Execute script:
|
||||
```bash
|
||||
./script/git_repo_manifest.py
|
||||
git checkout -b new_branch
|
||||
git checkout -b NEW_BRANCH
|
||||
git commit -am "Add new repo"
|
||||
./script/install_locally_dev.sh
|
||||
./script/poetry_update.py
|
||||
```
|
||||
[Update your repo.](./GIT_REPO.md)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ error.GitError: manifests rev-list (u'^2736dfd46e8a30cf59a9cd6e93d9e56e87021f2a'
|
|||
|
||||
Did you modify files in .repo?
|
||||
|
||||
Anyways, to reset files from your branch into .repo:
|
||||
To reset files from your branch into .repo:
|
||||
```bash
|
||||
cd .repo/manifests
|
||||
git branch -av
|
||||
|
|
|
|||
|
|
@ -1,84 +1,84 @@
|
|||
# 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).
|
||||
[git-repo of Google](https://code.google.com/archive/p/git-repo) is used to manage all git repositories 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
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo
|
||||
```
|
||||
|
||||
## prod
|
||||
```bash
|
||||
./venv/repo init -u http://git.erplibre.ca/ERPLibre -b master
|
||||
./venv/repo sync
|
||||
./.venv/repo init -u http://git.erplibre.ca/ERPLibre -b master
|
||||
./.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
|
||||
./.venv/repo init -u http://git.erplibre.ca/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml
|
||||
./.venv/repo sync
|
||||
```
|
||||
|
||||
## dev locally
|
||||
## local dev
|
||||
[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
|
||||
./.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.
|
||||
It freezes all repo, from dev to prod.
|
||||
|
||||
This will add revision git hash in the Manifest.
|
||||
```bash
|
||||
./venv/repo manifest -r -o ./default.xml
|
||||
./.venv/repo manifest -r -o ./default.xml
|
||||
```
|
||||
Do your commit.
|
||||
Commit.
|
||||
```bash
|
||||
git commit -am "[#ticket] subject: short sentence"
|
||||
```
|
||||
### Mix prod and dev to do a stage
|
||||
When dev contain specific revision with default revision, you want to replace default revision by prod revision and keep specific version, do:
|
||||
### Mix prod and dev to create a stage version
|
||||
When dev contains specific revision with default revision, you need to replace default revision with prod revision and keep specific version:
|
||||
```bash
|
||||
./script/git_merge_repo_manifest.py --input1 ./manifest/default.dev.xml --input2 ./default.xml --output ./manifest/default.staged.xml
|
||||
git commit -am "Updated manifest/default.staged.xml"
|
||||
|
||||
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
|
||||
|
||||
./venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.staged.xml
|
||||
./venv/repo sync -m ./manifest/default.staged.xml
|
||||
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.staged.xml
|
||||
./.venv/repo sync -m ./manifest/default.staged.xml
|
||||
|
||||
./venv/repo manifest -r -o ./default.xml
|
||||
./.venv/repo manifest -r -o ./default.xml
|
||||
```
|
||||
## Create a dev version
|
||||
```bash
|
||||
./venv/repo manifest -o ./manifest/default.dev.xml
|
||||
./.venv/repo manifest -o ./manifest/default.dev.xml
|
||||
```
|
||||
Do your commit.
|
||||
Commit.
|
||||
```bash
|
||||
git commit -am "[#ticket] subject: short sentence"
|
||||
```
|
||||
|
||||
## Useful command
|
||||
### Search all repo with specific branch name
|
||||
## Useful commands
|
||||
### Search all repo with a specific branch name
|
||||
```bash
|
||||
./venv/repo forall -pc "git branch -a|grep BRANCH"
|
||||
./.venv/repo forall -pc "git branch -a|grep BRANCH"
|
||||
```
|
||||
|
||||
### Search missing branch in all repo
|
||||
### Search missing branch in all repos
|
||||
```bash
|
||||
./venv/repo forall -pc 'git branch -a|(grep /BRANCH$||echo "no match")|grep "no match"'
|
||||
./.venv/repo forall -pc 'git branch -a|(grep /BRANCH$||echo "no match")|grep "no match"'
|
||||
```
|
||||
|
||||
### Search change file in all repo
|
||||
### Search changed file in all repos
|
||||
```bash
|
||||
./venv/repo forall -pc "git status -s"
|
||||
./.venv/repo forall -pc "git status -s"
|
||||
```
|
||||
|
||||
### Clean all
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# HOW TO
|
||||
## Update changelog
|
||||
Please, read documentation [keepachangelog.com](https://keepachangelog.com)
|
||||
Please read the following documentation [keepachangelog.com](https://keepachangelog.com)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
# ERPLibre
|
||||
|
||||
## Migration procedure production
|
||||
## Migration procedure in production
|
||||
|
||||
TODO
|
||||
|
||||
## Migration procedure dev
|
||||
## Migration procedure in dev
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
|||
13
doc/POETRY.md
Normal file
13
doc/POETRY.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Poetry
|
||||
## Add automatically dependencies
|
||||
Add your dependencies in file [requirements.txt](../requirements.txt) and run script
|
||||
```bash
|
||||
./script/poetry_update.py
|
||||
```
|
||||
This will search all `requirements.txt` files and update `pyproject.toml` and it will update poetry
|
||||
|
||||
## Add manually dependencies
|
||||
The automatic script will erase this dependency, but you can add it for your local test.
|
||||
```bash
|
||||
poetry add PYTHON_MODULE
|
||||
```
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# ERPLibre production guide
|
||||
|
||||
## Installation procedure production
|
||||
## Production installation procedure
|
||||
|
||||
### 1. Clone the project:
|
||||
```bash
|
||||
|
|
@ -12,15 +12,24 @@ cd ERPLibre
|
|||
Modify the file env_var.sh for production installation.
|
||||
|
||||
### 3. Execute the script:
|
||||
Support Ubuntu 18.04 server
|
||||
#### Ubuntu 18.04 server
|
||||
```bash
|
||||
./script/install_dev.sh
|
||||
./script/install_production.sh
|
||||
```
|
||||
A service is running by systemd, you can access with the DNS name, found it in env_var.sh
|
||||
A service is running by systemd. You can access it with the DNS name found in env_var.sh
|
||||
|
||||
#### Ubuntu 20.04 server
|
||||
Apply fix libpng12-0: https://www.linuxuprising.com/2018/05/fix-libpng12-0-missing-in-ubuntu-1804.html
|
||||
|
||||
```bash
|
||||
./script/install_dev.sh
|
||||
./script/install_production.sh
|
||||
```
|
||||
A service is running by systemd, you can access with the DNS name found in env_var.sh
|
||||
|
||||
### 4. SSL:
|
||||
Generate a ssl certificat
|
||||
Generate a ssl certificate
|
||||
```bash
|
||||
sudo certbot --nginx
|
||||
```
|
||||
|
|
@ -31,13 +40,13 @@ sudo systemctl -feu [EL_USER]
|
|||
```
|
||||
|
||||
## Run by address ip
|
||||
Comment following line in /[EL_USER]/erplibre/config.conf
|
||||
Comment the following line in `/[EL_USER]/erplibre/config.conf`
|
||||
```
|
||||
#xmlrpc_interface = 127.0.0.1
|
||||
#netrpc_interface = 127.0.0.1
|
||||
#proxy_mode = True
|
||||
```
|
||||
Add your address ip in nginx config at server_name in /etc/nginx/sites-available/[EL_WEBSITE_NAME]
|
||||
Add your address ip server_name in nginx config `/etc/nginx/sites-available/[EL_WEBSITE_NAME]`
|
||||
|
||||
Restart daemon:
|
||||
```bash
|
||||
|
|
@ -51,15 +60,28 @@ 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.
|
||||
## Move prod database to dev
|
||||
When moving prod database 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
|
||||
```
|
||||
|
||||
## Update production
|
||||
Simply update all feature.
|
||||
Update all features.
|
||||
```bash
|
||||
./run.sh --limit-time-real 99999 --stop-after-init -u all -d DATABASE
|
||||
```
|
||||
|
||||
# Postgresql
|
||||
To show config file:
|
||||
> psql -U postgres -c 'SHOW config_file'
|
||||
|
||||
Edit this file to accept interface from all networks:
|
||||
> /var/lib/postgres/data/postgresql.conf
|
||||
|
||||
# Delete an instance in production
|
||||
Caution, this delete user's home, it's irrevocable.
|
||||
```bash
|
||||
./script/delete_production.sh
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,35 +1,38 @@
|
|||
# Release
|
||||
A guide on how to do a release.
|
||||
A guide on how to generate a release.
|
||||
|
||||
## Generate new prod
|
||||
```bash
|
||||
./venv/repo manifest -r -o ./default.xml
|
||||
./.venv/repo manifest -r -o ./default.xml
|
||||
```
|
||||
Do your commit.
|
||||
Commit.
|
||||
```bash
|
||||
git commit -am "[#ticket] subject: short sentence"
|
||||
```
|
||||
|
||||
## Merge release
|
||||
When ready to make a release, create a branch release/#.#.# and create a pull request to master.
|
||||
Update file CHANGELOG.md and create a section with new version.
|
||||
Merge it when maintener accept it.
|
||||
Update ERPLIBRE_VERSION variable in [env_var.sh](../env_var.sh)
|
||||
|
||||
Add a tag on the commit on branch master with your release. When adding tag, be sure to update default.xml
|
||||
## Merge release
|
||||
When you are ready to generate a release, create a branch release/#.#.# and create a pull request to master.
|
||||
|
||||
Update file [CHANGELOG.md](../CHANGELOG.md) and create a section with new version.
|
||||
Merge it when the maintainer accepts it.
|
||||
|
||||
Add a tag on the commit in branch master with your release. When adding tag, be sure to update default.xml
|
||||
```bash
|
||||
git tag v#.#.#
|
||||
# Push your tags
|
||||
git push --tags
|
||||
# Add tags for all repo
|
||||
./venv/repo forall -pc "git tag ERPLibre/v#.#.#"
|
||||
./venv/repo forall -pc "git push ERPLibre --tags"
|
||||
./.venv/repo forall -pc "git tag ERPLibre/v#.#.#"
|
||||
./.venv/repo forall -pc "git push ERPLibre --tags"
|
||||
# Get all difference between a tag and HEAD, to update the CHANGELOG.md
|
||||
./venv/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
|
||||
./.venv/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
|
||||
```
|
||||
|
||||
# TIPS
|
||||
## Compare diff repo with another ERPLibre project
|
||||
To generate a list of differences between repo git commit, do
|
||||
## Compare repo differences with another ERPLibre project
|
||||
To generate a list of differences between repo git commit
|
||||
```bash
|
||||
./script/git_change_remote.py --sync_to /path/to/directory
|
||||
```
|
||||
|
|
@ -24,7 +24,7 @@ Execute your own python script:
|
|||
```
|
||||
|
||||
### Update all
|
||||
Great idea to run it when updating Odoo, it updates database of each modules.
|
||||
Great idea to run it when updating Odoo, it updates each module database.
|
||||
```bash
|
||||
./run.sh -d [DATABASE] -u all --log-level debug
|
||||
```
|
||||
|
|
@ -39,11 +39,11 @@ First execution, install you requirements, choose a new database.
|
|||
```bash
|
||||
./run.sh -d [DATABASE] -i [module to test] --test-enable --stop-after-init --log-level=test
|
||||
```
|
||||
Execute your test on specific module.
|
||||
Execute your test on a specific module.
|
||||
```bash
|
||||
./run.sh -d [DATABASE] -u [module to test] --test-enable --stop-after-init --log-level=test
|
||||
```
|
||||
Execute your test on specific module with tags.
|
||||
Execute your test on a specific module with tags.
|
||||
```bash
|
||||
./run.sh -d [DATABASE] -u [module to test] --test-enable --stop-after-init --log-level=test --test-tags [module_name][tags]
|
||||
```
|
||||
24
doc/UPDATE.md
Normal file
24
doc/UPDATE.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# Update ERPLibre
|
||||
## Update all repos from the origin source
|
||||
The update is possible on branch 12.0, you need to verify this branch existence.
|
||||
|
||||
1. Make sure all git repos are conform, remove all argument depth from manifest and regenerate.
|
||||
You can clean all and regenerate.
|
||||
```bash
|
||||
./script/clean_repo_manifest.sh
|
||||
./script/install_locally_dev.sh
|
||||
```
|
||||
|
||||
2. Update all remote with ssh/git
|
||||
```bash
|
||||
./script/git_change_remote_https_to_git.py
|
||||
```
|
||||
|
||||
3. Run update script
|
||||
```bash
|
||||
./script/git_update_repo.py
|
||||
```
|
||||
|
||||
4. Do a forced push on all needed repo and manage rebase conflicts.
|
||||
|
||||
5. Test a clone with dev, check file [DEVELOPMENT.md](./DEVELOPMENT.md)
|
||||
50
docker-compose-dev.yml
Normal file
50
docker-compose-dev.yml
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
version: "3.3"
|
||||
services:
|
||||
ERPLibre:
|
||||
image: technolibre/erplibre-dev:12.0
|
||||
# image: technolibre/erplibre-prod:pkg-12.0
|
||||
# image: technolibre/erplibre-prod:deb-12.0
|
||||
ports:
|
||||
- 8069:8069
|
||||
environment:
|
||||
HOST: db
|
||||
PASSWORD: mysecretpassword
|
||||
USER: odoo
|
||||
POSTGRES_DB: odoo
|
||||
CURRENT_UID: ${CURRENT_UID}
|
||||
depends_on:
|
||||
- db
|
||||
networks:
|
||||
- front
|
||||
command: odoo -c /ERPLibre/odoo/odoo.conf --without-demo=ALL -i base -d odoo
|
||||
user: ${CURRENT_UID:?"Please run as follows 'CURRENT_UID=$(id -u):$(id -g) docker-compose up'"}
|
||||
# user:
|
||||
volumes:
|
||||
- .:/ERPLibre
|
||||
# See the volume section at the end of the file
|
||||
- erplibre_data_dir:/var/lib/odoo
|
||||
|
||||
db:
|
||||
image: postgres:12.3
|
||||
environment:
|
||||
POSTGRES_PASSWORD: mysecretpassword
|
||||
POSTGRES_USER: odoo
|
||||
POSTGRES_DB: odoo
|
||||
networks:
|
||||
- front
|
||||
|
||||
|
||||
networks:
|
||||
front:
|
||||
|
||||
driver: bridge
|
||||
ipam:
|
||||
driver: default
|
||||
config:
|
||||
- subnet: 172.16.237.0/24
|
||||
|
||||
# We configure volume without specific destination to let docket manage it. To configure it through docker use (read related documentation before continuing) :
|
||||
# - docker volume --help
|
||||
# - docker-compose down --help
|
||||
volumes:
|
||||
erplibre_data_dir:
|
||||
38
docker-compose.yml
Normal file
38
docker-compose.yml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
version: "3.3"
|
||||
services:
|
||||
ERPLibre:
|
||||
image: technolibre/erplibre:1.1.0
|
||||
ports:
|
||||
- 8069:8069
|
||||
- 8071:8071
|
||||
- 8072:8072
|
||||
environment:
|
||||
HOST: db
|
||||
PASSWORD: mysecretpassword
|
||||
USER: odoo
|
||||
POSTGRES_DB: postgres
|
||||
depends_on:
|
||||
- db
|
||||
command: odoo
|
||||
volumes:
|
||||
# See the volume section at the end of the file
|
||||
- erplibre_data_dir:/home/odoo/.local/share/Odoo/
|
||||
- erplibre_conf:/etc/odoo
|
||||
|
||||
db:
|
||||
image: postgres:12.3
|
||||
environment:
|
||||
POSTGRES_PASSWORD: mysecretpassword
|
||||
POSTGRES_USER: odoo
|
||||
POSTGRES_DB: postgres
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
volumes:
|
||||
- erplibre-db-data:/var/lib/postgresql/data/pgdata
|
||||
|
||||
# We configure volume without specific destination to let docket manage it. To configure it through docker use (read related documentation before continuing) :
|
||||
# - docker volume --help
|
||||
# - docker-compose down --help
|
||||
volumes:
|
||||
erplibre_data_dir:
|
||||
erplibre_conf:
|
||||
erplibre-db-data:
|
||||
92
docker/Dockerfile
Normal file
92
docker/Dockerfile
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
FROM debian:buster-slim
|
||||
MAINTAINER Odoo S.A. <info@odoo.com>
|
||||
|
||||
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
|
||||
|
||||
# Generate locale C.UTF-8 for postgres and general locale data
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
dirmngr \
|
||||
fonts-noto-cjk \
|
||||
gnupg \
|
||||
libssl-dev \
|
||||
node-less \
|
||||
npm \
|
||||
python3-num2words \
|
||||
python3-pip \
|
||||
python3-phonenumbers \
|
||||
python3-pyldap \
|
||||
python3-qrcode \
|
||||
python3-renderpm \
|
||||
python3-setuptools \
|
||||
python3-slugify \
|
||||
python3-vobject \
|
||||
python3-watchdog \
|
||||
python3-xlrd \
|
||||
python3-xlwt \
|
||||
xz-utils \
|
||||
git \
|
||||
iproute2 \
|
||||
inetutils-ping \
|
||||
&& curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb \
|
||||
&& echo '7e35a63f9db14f93ec7feeb0fce76b30c08f2057 wkhtmltox.deb' | sha1sum -c - \
|
||||
&& apt-get install -y --no-install-recommends ./wkhtmltox.deb \
|
||||
&& rm -rf /var/lib/apt/lists/* wkhtmltox.deb
|
||||
|
||||
# install latest postgresql-client
|
||||
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
|
||||
&& GNUPGHOME="$(mktemp -d)" \
|
||||
&& export GNUPGHOME \
|
||||
&& repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
|
||||
&& gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
|
||||
&& gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
|
||||
&& gpgconf --kill all \
|
||||
&& rm -rf "$GNUPGHOME" \
|
||||
&& apt-get update \
|
||||
&& apt-get install --no-install-recommends -y postgresql-client \
|
||||
&& rm -f /etc/apt/sources.list.d/pgdg.list \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
|
||||
# Install Odoo
|
||||
ENV ODOO_VERSION 12.0
|
||||
ARG ODOO_RELEASE=20200417
|
||||
ARG ODOO_SHA=ca4a7485b0b75850ffe1458a8f3266839400a501
|
||||
RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \
|
||||
&& echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \
|
||||
&& apt-get update \
|
||||
&& apt-get -y install --no-install-recommends ./odoo.deb \
|
||||
&& rm -rf /var/lib/apt/lists/* odoo.deb
|
||||
|
||||
# Copy entrypoint script and Odoo configuration file
|
||||
COPY ./entrypoint.sh /
|
||||
RUN chmod +x /entrypoint.sh
|
||||
COPY ./odoo.conf /etc/odoo/
|
||||
|
||||
# Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons
|
||||
RUN chown odoo /etc/odoo/odoo.conf \
|
||||
&& mkdir -p /mnt/extra-addons \
|
||||
&& chown -R odoo /mnt/extra-addons
|
||||
# VOLUME ["/var/lib/odoo", "/mnt/extra-addons"]
|
||||
|
||||
# Expose Odoo services
|
||||
EXPOSE 8069 8071 8072
|
||||
|
||||
# Set the default config file
|
||||
ENV ODOO_RC /etc/odoo/odoo.conf
|
||||
|
||||
COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py
|
||||
|
||||
RUN chmod +X /usr/local/bin/wait-for-psql.py
|
||||
|
||||
# Set default user when running the container
|
||||
USER odoo
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["odoo"]
|
||||
147
docker/Dockerfile.base
Normal file
147
docker/Dockerfile.base
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
FROM debian:buster-slim
|
||||
MAINTAINER TechnoLibre <docker@technolibre.ca>
|
||||
|
||||
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
|
||||
|
||||
# Generate locale C.UTF-8 for postgres and general locale data
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ENV LANG="C.UTF-8" \
|
||||
LC_ALL="C.UTF-8" \
|
||||
PATH="/opt/pyenv/shims:/opt/pyenv/bin:$PATH" \
|
||||
PYENV_ROOT="/opt/pyenv" \
|
||||
PYENV_SHELL="bash"
|
||||
|
||||
ENV ODOO_PREFIX /ERPLibre
|
||||
ENV ODOO_EXEC_BIN $ODOO_PREFIX/odoo/odoo-bin
|
||||
|
||||
# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
dirmngr \
|
||||
fonts-noto-cjk \
|
||||
gnupg \
|
||||
libssl-dev \
|
||||
node-less \
|
||||
npm \
|
||||
python3-num2words \
|
||||
python3-pip \
|
||||
python3-phonenumbers \
|
||||
python3-pyldap \
|
||||
python3-qrcode \
|
||||
python3-renderpm \
|
||||
python3-setuptools \
|
||||
python3-slugify \
|
||||
python3-vobject \
|
||||
python3-watchdog \
|
||||
python3-xlrd \
|
||||
python3-xlwt \
|
||||
python3-babel \
|
||||
python3-psycopg2 \
|
||||
xz-utils \
|
||||
git \
|
||||
wget \
|
||||
libxslt-dev \
|
||||
libzip-dev \
|
||||
libldap2-dev \
|
||||
libsasl2-dev \
|
||||
node-less \
|
||||
gdebi-core \
|
||||
libffi-dev \
|
||||
iproute2 \
|
||||
libmariadbd-dev \
|
||||
inetutils-ping \
|
||||
build-essential \
|
||||
libsqlite3-dev \
|
||||
sqlite3 \
|
||||
bzip2 \
|
||||
libbz2-dev \
|
||||
zlib1g-dev \
|
||||
libssl-dev \
|
||||
openssl \
|
||||
libgdbm-dev \
|
||||
libgdbm-compat-dev \
|
||||
liblzma-dev \
|
||||
libreadline-dev \
|
||||
libncursesw5-dev \
|
||||
libffi-dev \
|
||||
uuid-dev \
|
||||
&& curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb \
|
||||
&& echo '7e35a63f9db14f93ec7feeb0fce76b30c08f2057 wkhtmltox.deb' | sha1sum -c - \
|
||||
&& apt-get install -y --no-install-recommends ./wkhtmltox.deb \
|
||||
&& rm -rf /var/lib/apt/lists/* wkhtmltox.deb
|
||||
|
||||
# Install latest postgresql-client
|
||||
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
|
||||
&& GNUPGHOME="$(mktemp -d)" \
|
||||
&& export GNUPGHOME \
|
||||
&& repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
|
||||
&& gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
|
||||
&& gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
|
||||
&& gpgconf --kill all \
|
||||
&& rm -rf "$GNUPGHOME" \
|
||||
&& apt-get update \
|
||||
&& apt-get install --no-install-recommends -y postgresql-client-12 libpq-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install python with pyenv
|
||||
# Reference https://github.com/bopen/docker-ubuntu-pyenv
|
||||
COPY pyenv-version.txt python-versions.txt /
|
||||
|
||||
RUN git clone -b `cat /pyenv-version.txt` --single-branch --depth 1 https://github.com/pyenv/pyenv.git $PYENV_ROOT \
|
||||
&& for version in `cat /python-versions.txt`; do pyenv install $version; done \
|
||||
&& pyenv global `cat /python-versions.txt` \
|
||||
&& find $PYENV_ROOT/versions -type d '(' -name '__pycache__' -o -name 'test' -o -name 'tests' ')' -exec rm -rf '{}' + \
|
||||
&& find $PYENV_ROOT/versions -type f '(' -name '*.pyo' -o -name '*.exe' ')' -exec rm -f '{}' + \
|
||||
&& rm -rf /tmp/* \
|
||||
&& python --version \
|
||||
&& python3 --version
|
||||
|
||||
# Install git-repo
|
||||
RUN cd ; mkdir -p .bin/ && \
|
||||
git config --global color.ui false && \
|
||||
git config --global user.email "foo@bar.io" && \
|
||||
git config --global user.name "Foo Bar" && \
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo && \
|
||||
chmod +x /usr/bin/repo && sed -i '1 s/python$/python3/' /usr/bin/repo
|
||||
|
||||
RUN groupadd --gid 101 --force odoo && \
|
||||
useradd --non-unique --create-home --uid 101 --gid 101 odoo
|
||||
|
||||
# TODO delete poetry installation
|
||||
# Install Poetry
|
||||
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
|
||||
#curl -fsS -o get-poetry.py https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
|
||||
|
||||
# Copy entrypoint script and Odoo configuration file
|
||||
COPY ./entrypoint.sh /
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# Set the default config file
|
||||
ENV ODOO_RC /etc/odoo/odoo.conf
|
||||
COPY ./odoo.conf $ODOO_RC
|
||||
RUN chown odoo $ODOO_RC
|
||||
|
||||
RUN mkdir $ODOO_PREFIX && \
|
||||
chown odoo $ODOO_PREFIX && \
|
||||
chmod 1777 $ODOO_PREFIX
|
||||
|
||||
# Mount /var/lib/odoo to allow restoring filestore
|
||||
RUN chown odoo $ODOO_RC
|
||||
|
||||
# Expose Odoo services
|
||||
EXPOSE 8069 8071 8072
|
||||
|
||||
#RUN mkdir -p /var/lib/odoo && \
|
||||
# chown odoo /var/lib/odoo && \
|
||||
# chmod 1777 /var/lib/odoo
|
||||
|
||||
# VOLUME /var/lib/odoo
|
||||
|
||||
# Set default user when running the container
|
||||
USER odoo
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["odoo"]
|
||||
37
docker/Dockerfile.dev
Normal file
37
docker/Dockerfile.dev
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
FROM technolibre/erplibre-base:12.0
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y -y --no-install-recommends \
|
||||
build-essential \
|
||||
wget \
|
||||
python3-dev \
|
||||
python3-venv \
|
||||
python3-wheel \
|
||||
libxslt-dev \
|
||||
libzip-dev \
|
||||
libldap2-dev \
|
||||
libsasl2-dev \
|
||||
python3-setuptools \
|
||||
libpng16-16 \
|
||||
gdebi \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& npm install -g rtlcss
|
||||
|
||||
# RUN pip3 install -r https://raw.githubusercontent.com/odoo/odoo/12.0/requirements.txt --ignore-installed psycopg2 && pip3a cache purge
|
||||
|
||||
ENV ADDONS_BASE_DIR /ERPLibre
|
||||
ENV ENV=dev
|
||||
|
||||
# Copy entrypoint script and Odoo configuration file
|
||||
COPY ./entrypoint.sh /
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
COPY repo_manifest_gen_org_prefix_path.py /usr/bin/
|
||||
RUN chmod +x /usr/bin/repo_manifest_gen_org_prefix_path.py
|
||||
|
||||
USER odoo
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["odoo"]
|
||||
50
docker/Dockerfile.prod.pkg
Normal file
50
docker/Dockerfile.prod.pkg
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
FROM technolibre/erplibre-base:1.1.0
|
||||
|
||||
ENV REPO_MANIFEST_URL http://git.erplibre.ca/ERPLibre
|
||||
ARG WORKING_BRANCH
|
||||
ENV BRANCH_ERPLIBRE $WORKING_BRANCH
|
||||
|
||||
RUN cat /etc/os-release
|
||||
|
||||
USER root
|
||||
|
||||
RUN mkdir ~/.ssh/ && \
|
||||
echo "StrictHostKeyChecking no" >> ~/.ssh/config && \
|
||||
apt update && \
|
||||
apt install ssh-client git -y --no-install-recommends && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN cd ; mkdir -p .bin/ && \
|
||||
git config --global color.ui false && \
|
||||
git config --global user.email "foo@bar.io" && \
|
||||
git config --global user.name "Foo Bar" && \
|
||||
git clone $REPO_MANIFEST_URL -b $BRANCH_ERPLIBRE $ODOO_PREFIX
|
||||
|
||||
RUN cd $ODOO_PREFIX && \
|
||||
python -m venv .venv
|
||||
|
||||
RUN cd $ODOO_PREFIX && \
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ./.venv/repo && \
|
||||
chmod +x ./.venv/repo
|
||||
|
||||
RUN cd $ODOO_PREFIX && \
|
||||
./script/update_manifest_dev.sh
|
||||
|
||||
RUN cd $ODOO_PREFIX && \
|
||||
source /root/.poetry/env && \
|
||||
poetry install
|
||||
|
||||
RUN cd $ODOO_PREFIX && \
|
||||
head /etc/odoo/odoo.conf && \
|
||||
./docker/repo_manifest_gen_org_prefix_path.py $ODOO_PREFIX/addons /etc/odoo/odoo.conf /etc/odoo/odoo.conf && \
|
||||
head /etc/odoo/odoo.conf
|
||||
|
||||
#RUN mkdir '/home/odoo/.local'
|
||||
#RUN chown -R odoo '/home/odoo/.local'
|
||||
|
||||
USER odoo
|
||||
|
||||
RUN mkdir -p '/home/odoo/.local/share/Odoo/'
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["odoo"]
|
||||
41
docker/Dockerfile.prod.src
Normal file
41
docker/Dockerfile.prod.src
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
FROM technolibre/erplibre-base:12.0
|
||||
|
||||
# TODO
|
||||
|
||||
|
||||
# ENV REPO_MANIFEST_URL https://github.com/agileops/ERPLibre.git
|
||||
# RUN cat /etc/os-release
|
||||
|
||||
# USER root
|
||||
|
||||
# # Install Odoo
|
||||
# ENV ODOO_VERSION 12.0
|
||||
# ARG ODOO_RELEASE=20200417
|
||||
# ARG ODOO_SHA=ca4a7485b0b75850ffe1458a8f3266839400a501
|
||||
# RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \
|
||||
# && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \
|
||||
# && apt-get update \
|
||||
# && apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install --no-install-recommends ./odoo.deb \
|
||||
# && rm -rf /var/lib/apt/lists/* odoo.deb
|
||||
|
||||
|
||||
# RUN mkdir ~/.ssh/ && echo "StrictHostKeyChecking no" >> ~/.ssh/config && apt update && apt install ssh-client git -y --no-install-recommends && \
|
||||
# rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# RUN cd ; mkdir -p .bin/ && \
|
||||
# git config --global color.ui false && \
|
||||
# git config --global user.email "foo@bar.io" && \
|
||||
# git config --global user.name "Foo Bar" && \
|
||||
# mkdir -p $ODOO_PREFIX && cd $ODOO_PREFIX && \
|
||||
# repo init -u $REPO_MANIFEST_URL -b 12.0_repo && \
|
||||
# repo sync -j 4 -c
|
||||
|
||||
# ADD repo_manifest_gen_org_prefix_path.py /root/.bin/
|
||||
# RUN chmod +x ~/.bin/repo_manifest_gen_org_prefix_path.py
|
||||
|
||||
# RUN head /etc/odoo/odoo.conf && /root/.bin/repo_manifest_gen_org_prefix_path.py $ODOO_PREFIX/addons /etc/odoo/odoo.conf /etc/odoo/odoo.conf && head /etc/odoo/odoo.conf
|
||||
|
||||
# user odoo
|
||||
|
||||
# ENTRYPOINT ["/entrypoint.sh"]
|
||||
# CMD ["odoo"]
|
||||
114
docker/README.md
Normal file
114
docker/README.md
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
# ERPLibre - Docker
|
||||
|
||||
Those images are prepared to permit better portability and reproducibility of ERPLibre release.
|
||||
|
||||
Due the the growing code of ERPLibre, it could also simplify development.
|
||||
|
||||
NOTE: Those Dockerfiles themselves are in heavy development for now. Incompatibilities between releases are normal until the interface is stabilized.
|
||||
|
||||
|
||||
## Pre-requirements
|
||||
|
||||
- Basic knowledge with Docker, Linux and bash
|
||||
- Latest Docker version
|
||||
|
||||
## Files representations
|
||||
|
||||
- Dockerfile.base: This Dockerfile represents the base Docker image layer reused by other child layers.
|
||||
- Dockerfile.dev: This Dockerfile is specialized in development.
|
||||
- Dockerfile.prod{pkg,src}: Dockerfile.prod.\* is a Docker image specialized for production systems. Dockerfile.prod.pkg reuses official Debian files from Odoo.com. Dockerfile.prod.src fetches the Odoo source code as the ERPLibre runtime.
|
||||
|
||||
## Getting started
|
||||
|
||||
Be sure to start daemon docker
|
||||
```bash
|
||||
systemctl start docker
|
||||
```
|
||||
|
||||
### Building the docker images
|
||||
|
||||
```bash
|
||||
cd docker
|
||||
docker build -f Dockerfile.base -t technolibre/erplibre-base:12.0 .
|
||||
docker build -f Dockerfile.prod.pkg -t technolibre/erplibre:12.0-pkg .
|
||||
```
|
||||
|
||||
### Running ERPLibre using Docker-Compose
|
||||
|
||||
Go at the root of this git project.
|
||||
```bash
|
||||
cd ERPLibre
|
||||
docker-compose -f docker-compose.yml up -d
|
||||
```
|
||||
|
||||
### Diagnostic Docker-Compose
|
||||
|
||||
Show docker-compose information
|
||||
```bash
|
||||
docker-compose ps
|
||||
docker-compose logs IMAGE_NAME
|
||||
```
|
||||
|
||||
Show docker information
|
||||
```bash
|
||||
docker ps -a
|
||||
docker volume ls
|
||||
docker inspect DOCKER_NAME
|
||||
```
|
||||
|
||||
Connect to a running docker
|
||||
```bash
|
||||
docker exec -ti DOCKER_NAME bash
|
||||
docker exec -u root -ti DOCKER_NAME bash
|
||||
```
|
||||
|
||||
Commands for debugging
|
||||
```bash
|
||||
docker run -p 8069:8069 --entrypoint bash -ti DOCKER_NAME
|
||||
docker exec -ti DOCKER_NAME bash
|
||||
docker exec -u root -ti DOCKER_NAME bash
|
||||
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_USER=odoo -e POSTGRES_DB=postgres postgre
|
||||
|
||||
export
|
||||
db_host = "host.docker.internal"
|
||||
|
||||
docker stats erplibre_ERPLibre_1
|
||||
```
|
||||
|
||||
### Cleaning
|
||||
|
||||
Delete docker image
|
||||
```bash
|
||||
docker image prune
|
||||
```
|
||||
|
||||
Delete volumes
|
||||
```bash
|
||||
docker-compose rm -v
|
||||
```
|
||||
|
||||
Delete containers
|
||||
```bash
|
||||
docker rm $(docker ps -a | grep -v IMAGE | awk '{print $1}')
|
||||
```
|
||||
|
||||
Delete volume
|
||||
```bash
|
||||
docker volume prune
|
||||
```
|
||||
|
||||
# Change docker directory
|
||||
You can change the docker directory by editing file `/etc/docker/daemon.json`
|
||||
```json
|
||||
{
|
||||
"data-root": "/home/docker"
|
||||
}
|
||||
```
|
||||
And restart docker service. You can delete or move all older locations of docker.
|
||||
|
||||
# Update docker
|
||||
When building your docker with script
|
||||
> ./script/docker_build.sh
|
||||
|
||||
You need to push your docker image and update your tag, like 1.0.1:
|
||||
> docker push technolibre/erplibre:1.0.1
|
||||
87
docker/entrypoint.sh
Executable file
87
docker/entrypoint.sh
Executable file
|
|
@ -0,0 +1,87 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
if [[ "$ENV" == "dev" ]] && [ ! -z ${CURRENT_UID} ]
|
||||
then
|
||||
export HOME=$ODOO_PREFIX
|
||||
cd $HOME
|
||||
|
||||
# As it's only possible to fetch git repos manifest from an git url, we create one using git-daemon.
|
||||
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose &
|
||||
GIT_PID=$!
|
||||
echo "my repo" $(git rev-parse --abbrev-ref HEAD)
|
||||
repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m default.dev.xml
|
||||
|
||||
repo sync
|
||||
|
||||
# After sync, terminate the git checkout. We don't need graceful kill as we don't do commit on the git repo during the operation.
|
||||
kill -9 $GIT_PID
|
||||
|
||||
ls $HOME/odoo/odoo-bin
|
||||
# $? give the posix return value of the last command. 0 == success
|
||||
# then IS_ODOO_FILE_EXIST : 0 == YES
|
||||
IS_ODOO_FILE_EXIST=$?
|
||||
|
||||
if [ "$IS_ODOO_FILE_EXIST" -ne "0" ]; then
|
||||
echo "The file $HOME/odoo/odoo-bin doesnt exist. Verify entrypoint.sh";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# Add the odoo bins code on $PATH
|
||||
echo PATH=$HOME/odoo/:$PATH
|
||||
|
||||
# Configure an alias to use "odoo-bin" as "odoo".
|
||||
alias odoo=odoo-bin
|
||||
|
||||
repo_manifest_gen_org_prefix_path.py $ODOO_PREFIX/addons $ODOO_RC $ODOO_PREFIX/odoo/odoo.conf && head $ODOO_PREFIX/odoo/odoo.conf
|
||||
export ODOO_RC=$ODOO_PREFIX/odoo/odoo.conf
|
||||
|
||||
elif [[ "$ENV" == "dev" ]] && [ -z ${CURRENT_UID} ]
|
||||
then
|
||||
echo 'Please run as follows : CURRENT_UID=$(id -u):$(id -g) docker-compose up'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set the postgres database host, port, user and password according to the environment
|
||||
# and pass them as arguments to the odoo process if not present in the config file
|
||||
: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}}
|
||||
: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}
|
||||
: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}
|
||||
: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}
|
||||
|
||||
DB_ARGS=()
|
||||
function check_config() {
|
||||
param="$1"
|
||||
value="$2"
|
||||
if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then
|
||||
value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g')
|
||||
fi;
|
||||
DB_ARGS+=("--${param}")
|
||||
DB_ARGS+=("${value}")
|
||||
}
|
||||
check_config "db_host" "$HOST"
|
||||
check_config "db_port" "$PORT"
|
||||
check_config "db_user" "$USER"
|
||||
check_config "db_password" "$PASSWORD"
|
||||
|
||||
case "$1" in
|
||||
-- | odoo)
|
||||
shift
|
||||
if [[ "$1" == "scaffold" ]] ; then
|
||||
exec odoo "$@" || exec odoo-bin "$@"
|
||||
else
|
||||
cd $ODOO_PREFIX
|
||||
./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30
|
||||
exec ./.venv/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf
|
||||
fi
|
||||
;;
|
||||
-*)
|
||||
cd $ODOO_PREFIX
|
||||
./docker/wait-for-psql.py ${DB_ARGS[@]} --timeout=30
|
||||
exec ./.venv/bin/python $ODOO_EXEC_BIN "$@" "${DB_ARGS[@]}" -c /etc/odoo/odoo.conf
|
||||
;;
|
||||
*)
|
||||
exec "$@"
|
||||
esac
|
||||
|
||||
exit 1
|
||||
32
docker/main/Dockerfile
Normal file
32
docker/main/Dockerfile
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
FROM technolibre/erplibre-base:12.0
|
||||
|
||||
ENV REPO_MANIFEST_URL https://github.com/agileops/ERPLibre.git
|
||||
RUN cat /etc/os-release
|
||||
|
||||
ENV ADDONS_BASE_DIR /odoo
|
||||
|
||||
USER root
|
||||
|
||||
RUN mkdir ~/.ssh/ && echo "StrictHostKeyChecking no" >> ~/.ssh/config && apt update && apt install ssh-client git -y --no-install-recommends && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN cd ; mkdir -p .bin/ && \
|
||||
git config --global color.ui false && \
|
||||
git config --global user.email "foo@bar.io" && \
|
||||
git config --global user.name "Foo Bar" && \
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo && \
|
||||
chmod +x ~/.bin/repo && sed -i '1 s/python$/python3/' ~/.bin/repo && head ~/.bin/repo && \
|
||||
export PATH="${HOME}/.bin:${PATH}" && \
|
||||
mkdir -p $ADDONS_BASE_DIR && cd $ADDONS_BASE_DIR && \
|
||||
repo init -u $REPO_MANIFEST_URL -b 12.0_repo && \
|
||||
repo sync -j 4 -c
|
||||
|
||||
ADD repo_manifest_gen_org_prefix_path.py /root/.bin/ RUN chmod +x
|
||||
~/.bin/repo_manifest_gen_org_prefix_path.py
|
||||
|
||||
RUN head /etc/odoo/odoo.conf && /root/.bin/repo_manifest_gen_org_prefix_path.py $ADDONS_BASE_DIR/addons /etc/odoo/odoo.conf /etc/odoo/odoo.conf && head /etc/odoo/odoo.conf
|
||||
|
||||
user odoo
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["odoo"]
|
||||
523
docker/odoo.conf
Normal file
523
docker/odoo.conf
Normal file
|
|
@ -0,0 +1,523 @@
|
|||
[options]
|
||||
|
||||
#
|
||||
# WARNING:
|
||||
# If you use the Odoo Database utility to change the master password be aware
|
||||
# that the formatting of this file WILL be LOST! A copy of this file named
|
||||
# /etc/odoo/openerp-server.conf.template has been made in case this happens
|
||||
# Note that the copy does not have any first boot changes
|
||||
#-----------------------------------------------------------------------------
|
||||
# Odoo Server Config File - TurnKey Linux
|
||||
# ( /etc/odoo/openerp-server.conf )
|
||||
#
|
||||
# Great pain has been taken to organize this file, and include comments for
|
||||
# each. As with all open source software this file is a work in progress. If
|
||||
# you see something that is wrong or needs to be updated, submit and issue
|
||||
# on TurnKey's GIT Hub issue tracker! Or better yet, fork the repo with this
|
||||
# file and submit a pull request!
|
||||
#
|
||||
# Information about these settings where taken from openerp-server --help
|
||||
# and from https://www.odoo.com/documentation/8.0/reference/cmdline.html
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
# Index:
|
||||
# Database Settings
|
||||
# Logs Settings
|
||||
# Service Settings
|
||||
# Email Settings
|
||||
# Server Options
|
||||
# Tuning Adjustments
|
||||
# Testing and Demo Settings
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
# Database Settings
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the database host (default localhost).
|
||||
#-----------------------------------------------------------------------------
|
||||
#db_host = localhost
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the database port (default None).
|
||||
#-----------------------------------------------------------------------------
|
||||
#db_port = 5432
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the database user name (default None).
|
||||
#-----------------------------------------------------------------------------
|
||||
#db_user = odoo
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the database password for db_user (default None)
|
||||
#-----------------------------------------------------------------------------
|
||||
#db_password = 00aa9df39b0c99ac3d1d8412d2917175
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the database name.
|
||||
#-----------------------------------------------------------------------------
|
||||
#db_name = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# DataError: new encoding (UTF8) is incompatible with the encoding of the
|
||||
# template database (SQL_ASCII) HINT: Use the same encoding as in the template
|
||||
# database, or use template0 as template.
|
||||
#-----------------------------------------------------------------------------
|
||||
# db_template = template0
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Master Database password
|
||||
# This is set at first boot, and can be set from within Odoo
|
||||
#-----------------------------------------------------------------------------
|
||||
#admin_passwd = 12357
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# specify the the maximum number of physical connections to posgresql
|
||||
#-----------------------------------------------------------------------------
|
||||
#db_maxconn = 64
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Filter listed database REGEXP
|
||||
#-----------------------------------------------------------------------------
|
||||
#dbfilter = .*
|
||||
|
||||
|
||||
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
# Logs Settings
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
#
|
||||
#
|
||||
# I found information from Odoo on logging was not very clear. So I complied
|
||||
# this helpful list and info about Odoo logging.
|
||||
#
|
||||
# Information was gleaned from the following sites:
|
||||
# (The URLs are broken up to fit them in the file)
|
||||
# - http://www.mindissoftware.com
|
||||
# /2014/09/07/Odoo-logging-configuration-usage-implementation/
|
||||
# - https://www.odoo.com/
|
||||
# /forum/help-1/question
|
||||
# /what-is-the-full-list-of-command-line-options-for-odoo-59139
|
||||
# - https://www.odoo.com/documentation/8.0/reference/cmdline.html
|
||||
#
|
||||
# Odoo uses the Python standard logging library. However, it uses a special
|
||||
# configuration syntax to configure logging levels for its modules.
|
||||
#
|
||||
# It's helpful to know what each level type means, so below is quick list:
|
||||
#
|
||||
# Level meanings:
|
||||
# debug: Debug message for debugging only.
|
||||
# info: Information message to report important modular event.
|
||||
# warning: Warning message to report minor issues.
|
||||
# error: Error message to report failed operations.
|
||||
# critical: A critical message -- so critical that the module cannot work
|
||||
#
|
||||
#
|
||||
# log_level:
|
||||
# any value in the list below. Odoo changed the log_level meaning
|
||||
# here because these level values are mapped to a set of predefined
|
||||
# 'module:log_level' pairs. These pairs are listed next to the log-level.
|
||||
# You could get the same result by using the log_handler option
|
||||
#
|
||||
#
|
||||
# LOG LEVEL / log_handler: module:log_level
|
||||
# ----------------------------------------------------------------------------
|
||||
# info / [':INFO']
|
||||
# critical / ['openerp:CRITICAL', 'werkzeug:CRITICAL']
|
||||
# error / ['openerp:ERROR', 'werkzeug:ERROR']
|
||||
# warn / ['openerp:WARNING', 'werkzeug:WARNING']
|
||||
# debug / ['openerp:DEBUG']
|
||||
# debug_sql / ['openerp.sql_db:DEBUG']
|
||||
# debug_rpc / ['openerp:DEBUG','openerp.http.rpc.request:DEBUG']
|
||||
# debug_rpc_answer / ['openerp:DEBUG','openerp.http.rpc.request:DEBUG',
|
||||
# 'openerp.http.rpc.response:DEBUG']
|
||||
#
|
||||
# End of Logging Info
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# The log filename. If not set, use stdout.
|
||||
#-----------------------------------------------------------------------------
|
||||
; logfile = /var/log/odoo/openerp-server.log
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# True/False. If True, create a daily log file and keep 30 files.
|
||||
#-----------------------------------------------------------------------------
|
||||
; logrotate = True
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Ture/False. If True, also write log to 'ir_logging' table in database
|
||||
#-----------------------------------------------------------------------------
|
||||
; log-db = True
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# True/False logs to the system's event logger: syslog
|
||||
#-----------------------------------------------------------------------------
|
||||
; syslog = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Log level - One of the following:
|
||||
# info, debug_rpc, warn, test, critical, debug_sql, error, debug,
|
||||
# debug_rpc_answer
|
||||
#-----------------------------------------------------------------------------
|
||||
; log-level = warn
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# log_handler - can be a list of 'module:log_level' pairs.
|
||||
# The default value is ':INFO' -- it means the default logging level
|
||||
# is 'INFO' for all modules.
|
||||
#-----------------------------------------------------------------------------
|
||||
# log_handler =
|
||||
|
||||
|
||||
|
||||
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
# Service Settings
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# The IP address on which the server will bind.
|
||||
# If empty, it will bind on all interfaces (default empty).
|
||||
#-----------------------------------------------------------------------------
|
||||
; interface = localhost
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# The TCP port on which the server will listen (default 8069).
|
||||
#-----------------------------------------------------------------------------
|
||||
port = 8069
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Launch server over https instead of http (default False).
|
||||
#-----------------------------------------------------------------------------
|
||||
; secure = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Set to True if you are deploying your App behind a proxy
|
||||
# e.g. Apache using mod_proxy. --proxy_mode added, using Werkzeug ProxyFix class
|
||||
#-----------------------------------------------------------------------------
|
||||
#proxy_mode = True
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the addons_path folders ordered by priority
|
||||
# addons_path=/first/path/,/second/path/
|
||||
#-----------------------------------------------------------------------------
|
||||
addons_path = /opt/openerp/odoo/addons,/home/myaddons
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# The file where the server pid will be stored (default False).
|
||||
# We are letting the init script create the pid
|
||||
#-----------------------------------------------------------------------------
|
||||
# pidfile = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# specify reference timezone for the server (e.g. Europe/Brussels)
|
||||
#-----------------------------------------------------------------------------
|
||||
; timezone = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# specify the certificate file for the SSL connection
|
||||
#-----------------------------------------------------------------------------
|
||||
; secure_cert_file = server.cert
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# specify the private key file for the SSL connection
|
||||
#-----------------------------------------------------------------------------
|
||||
; secure_pkey_file = server.pkey
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# XML-RPC Secure Configuration (disabled if ssl is unavailable):
|
||||
# xmlrpcs - Set to False to disable the XML-RPC Secure protocol
|
||||
# xmlrpcs_interface - Specify the TCP IP address for the XML-RPC Secure
|
||||
# protocol. The empty string binds to all interfaces.
|
||||
# xmlrpcs_port - Specify the TCP port for the XML-RPC Secure protocol
|
||||
#-----------------------------------------------------------------------------
|
||||
; xmlrpcs = True
|
||||
#xmlrpcs_interface = 127.0.0.1
|
||||
xmlrpcs_port = 8071
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# XML-RPC Configuration:
|
||||
# xmlrpc - Set to False to disable the XML-RPC protocol
|
||||
# xmlrpc_interface - Specify the TCP IP address for the XML-RPC
|
||||
# protocol. The empty string binds to all interfaces.
|
||||
# xmlrpc_port - Specify the TCP port for the XML-RPC protocol
|
||||
#-----------------------------------------------------------------------------
|
||||
; xmlrpc = True
|
||||
#xmlrpc_interface = 127.0.0.1
|
||||
xmlrpc_port = 8069
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Long polling port:
|
||||
# TCP port for long-polling connections in multiprocessing or gevent mode,
|
||||
# defaults to 8072. Not used in default (threaded) mode.
|
||||
#-----------------------------------------------------------------------------
|
||||
longpolling_port = 8072
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Use this for big data importation, if it crashes you will be able to continue
|
||||
# at the current state. Provide a filename to store intermediate importation
|
||||
# states.
|
||||
#-----------------------------------------------------------------------------
|
||||
; import_partial =
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Use the unaccent function provided by the database when available
|
||||
#-----------------------------------------------------------------------------
|
||||
; unaccent = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# specify modules to export. Use in combination with --i18n-export
|
||||
#-----------------------------------------------------------------------------
|
||||
; translate_modules = ['all']
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Comma-separated list of server-wide modules, default=web
|
||||
#-----------------------------------------------------------------------------
|
||||
; server_wide_modules = None
|
||||
|
||||
|
||||
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
# Email Settings
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the SMTP server for sending email (default localhost).
|
||||
#-----------------------------------------------------------------------------
|
||||
; smtp_server = localhost
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the SMTP user for sending email (default False).
|
||||
#-----------------------------------------------------------------------------
|
||||
; smtp_user = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the SMTP password for sending email (default False).
|
||||
#-----------------------------------------------------------------------------
|
||||
; smtp_password = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# if True, SMTP connections will be encrypted with SSL (STARTTLS)
|
||||
#-----------------------------------------------------------------------------
|
||||
; smtp_ssl = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the SMTP email address for sending email
|
||||
#-----------------------------------------------------------------------------
|
||||
; email_from = "TKL-Odoo-Server@example.com"
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the SMTP port
|
||||
#-----------------------------------------------------------------------------
|
||||
; smtp_port = 25
|
||||
|
||||
|
||||
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
# Tuning Options
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
#-----------------------------------------------------------------------------
|
||||
# A word on tuning your Odoo Server
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# A lot of time has gone in to testing this TKL appliance, and one thing we
|
||||
# learned while testing was tuning. For all the why we chose these numbers you
|
||||
# can take a look at he issues on GitHub (links at the botton of this article)
|
||||
#
|
||||
# Most of this text here was taken from the Memory Matrix Discussion
|
||||
# https://github.com/DocCyblade/tkl-odoo/issues/49#issuecomment-148881166
|
||||
#
|
||||
# It is important to note that you can run Odoo in threaded mode by setting
|
||||
# the workers option to 0 however there are some modules that won't work
|
||||
# and you loose fine grain control of resource management.
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# the --workers is how many new process will be started to perform work or
|
||||
# (answer requests) The workers have limits upon them set by the limit_xxxxx
|
||||
# options here in the config file.
|
||||
#
|
||||
# The "limit_memory_soft" limit is the amount of ram that when a process
|
||||
# goes over this limit after it is done with the request it is terminated
|
||||
# and the memory it was using is freed. This amount goes for each process
|
||||
#
|
||||
# The hard limit is the amount of ram that if the process goes over it,
|
||||
# it WILL terminate right then. (I don't think this is really correct
|
||||
# because of the PDF issue we had and set this to 1.3 GB and never
|
||||
# saw a process take this much. but if its below 1.3GB PDF are not created)
|
||||
#
|
||||
# The one we need to pay attention to is the limit_memory_soft.
|
||||
# As these workers will stay alive and hold on to memory until that limit
|
||||
# is reached. So if you have 5 workers and the soft limit is 256MB you could
|
||||
# end up with 5 workers each taking 256MB that's 1.25GB of RAM that could
|
||||
# be taken up. If you only had 1GB of ram you may need to dial back your
|
||||
# workers or your soft limit.
|
||||
#
|
||||
# It's a balancing act of sorts, I am also not sure if keeping the
|
||||
# workers at say 350 or 400 if there is some caching effect. Not sure
|
||||
# why it's holding on to the memory.
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# Hardware Matrix for recommended values:
|
||||
# (Note these are for REAL hardware, Virtual Hardware has it's own
|
||||
# issues that can arise with too many guest on a host with too many
|
||||
# CPU cores etc, so remember that when looking at the chart below)
|
||||
# (One other note that when I tested these, I did use VMware but
|
||||
# no other VMs where competing for resources)
|
||||
# (One last note, really. These numbers are to show the relationship
|
||||
# between the config settings and hardware. We also assume you are running
|
||||
# the database server on the same server. I know at some point in the
|
||||
# higher numbers that this would not be the case. These are not numbers
|
||||
# set in stone nor numbers gotten from Odoo. These are numbers I have
|
||||
# come up with from the testing I have done. Real world examples if you
|
||||
# have them would be great and these numbers can and should be updated!
|
||||
#
|
||||
# Heading | Description
|
||||
# ------------------ | ---------------------------------------------------------
|
||||
# CPUs | Number of CPU Cores not threads
|
||||
# Physical | Physical memory, not virtual or swap
|
||||
# workers | Number of workers specified in config file (workers = x)
|
||||
# cron | Number of workers for cron jobs (max_cron_threads = xx)
|
||||
# Mem Per | Memory in MB that is the max memory for request per worker
|
||||
# Max Mem | Maximum amount that can be used by all workers
|
||||
# limit_memory_soft | Number in bytes that you will use for this setting
|
||||
#
|
||||
# Note: Max Memory if notice is less than total memory this is on purpose. As
|
||||
# workers process requests they can grow beyond the Mem Per limit so a
|
||||
# server under heavy load could go past this amount. This is why there
|
||||
# is "head room" built in.
|
||||
#
|
||||
# CPUs | Physical | workers | cron | Mem Per | Max Mem | limit_memory_soft
|
||||
# ---- | -------- | ------- | ---- | ------- | ------- | -----------------------
|
||||
# ANY | =< 256MB | NR | NR | NR | NR | NR
|
||||
# 1 | 512MB | 0 | N/A | N/A | N/A | N/A
|
||||
# 1 | 512MB | 1 | 1 | 177MB | 354MB | 185127901
|
||||
# 1 | 1GB | 2 | 1 | 244MB | 732MB | 255652815
|
||||
# 1 | 2GB | 2 | 1 | 506MB | 1518MB | 530242876
|
||||
# 2 | 1GB | 3 | 1 | 183MB | 732MB | 191739611
|
||||
# 2 | 2GB | 5 | 2 | 217MB | 1519MB | 227246947
|
||||
# 2 | 4GB | 5 | 2 | 450MB | 3150MB | 471974428
|
||||
# 4 | 2GB | 5 | 2 | 217MB | 1519MB | 227246947
|
||||
# 4 | 4GB | 9 | 2 | 286MB | 3146MB | 300347363
|
||||
# 4 | 8GB | 9 | 3 | 546MB | 6552MB | 572662306
|
||||
# 4 | 16GB | 9 | 3 | 1187MB | 14244MB | 1244918057
|
||||
#
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# Calculations on how we got the above chart and other info can be found
|
||||
#
|
||||
# Memory Matrix Discussion
|
||||
# https://github.com/DocCyblade/tkl-odoo/issues/49
|
||||
#
|
||||
# Shakedown Testing Discussions
|
||||
# https://github.com/DocCyblade/tkl-odoo/issues/52
|
||||
# https://github.com/DocCyblade/tkl-odoo/issues/53
|
||||
# https://github.com/DocCyblade/tkl-odoo/issues/54
|
||||
# https://github.com/DocCyblade/tkl-odoo/issues/55
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Specify the number of workers, 0 disable prefork mode.
|
||||
# if count is not 0 , enables multiprocessing and sets up the
|
||||
# specified number of HTTP workers (sub-processes processing HTTP and RPC
|
||||
# requests). TKL Default is 0
|
||||
#
|
||||
# (See chart above for recommended values)
|
||||
#-----------------------------------------------------------------------------
|
||||
workers = 2
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# number of workers dedicated to cron jobs. Defaults to 2. The workers are
|
||||
# threads in multithreading mode and processes in multiprocessing mode.
|
||||
#-----------------------------------------------------------------------------
|
||||
max_cron_threads = 1
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Prevents the worker from using more than <limit> CPU seconds for each
|
||||
# request. If the limit is exceeded, the worker is killed
|
||||
#-----------------------------------------------------------------------------
|
||||
limit_time_cpu = 600
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Prevents the worker from taking longer than <limit> seconds to process a
|
||||
# request. If the limit is exceeded, the worker is killed.
|
||||
#-----------------------------------------------------------------------------
|
||||
limit_time_real = 900
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Maximum allowed virtual memory per worker. If the limit is exceeded, the
|
||||
# worker is killed and recycled at the end of the current request.
|
||||
#
|
||||
# (See chart above for recommended values)
|
||||
#-----------------------------------------------------------------------------
|
||||
limit_memory_soft = 5368709120
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Hard limit on virtual memory, any worker exceeding the limit will be
|
||||
# immediately killed without waiting for the end of the current request
|
||||
# processing.
|
||||
#
|
||||
# Not sure of the reason but if this is set lower that 1.3GB then print jobs
|
||||
# using PDF does not work. We are unsure why but this was the lowest amount
|
||||
# for it to work.
|
||||
#-----------------------------------------------------------------------------
|
||||
limit_memory_hard = 6710886400
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Number of requests a worker will process before being recycled and restarted.
|
||||
#-----------------------------------------------------------------------------
|
||||
limit_request = 8196
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Force a limit on the maximum number of records kept in the virtual osv_memory
|
||||
# tables. The default is False, which means no count-based limit.
|
||||
#-----------------------------------------------------------------------------
|
||||
; osv_memory_count_limit = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Force a limit on the maximum age of records kept in the virtual osv_memory
|
||||
# tables. This is a decimal value expressed in hours, and the default is 1 hour.
|
||||
#-----------------------------------------------------------------------------
|
||||
; osv_memory_age_limit = 1.0
|
||||
|
||||
|
||||
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
# Testing and Demo Settings
|
||||
#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Enable YAML and unit tests.
|
||||
#-----------------------------------------------------------------------------
|
||||
; test_enable = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Launch a python or YML test file.
|
||||
#-----------------------------------------------------------------------------
|
||||
; test_file = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# If set, will save sample of all reports in this directory.
|
||||
#-----------------------------------------------------------------------------
|
||||
; test_report_directory = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Commit database changes performed by YAML or XML tests.
|
||||
#-----------------------------------------------------------------------------
|
||||
; test_commit = False
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# disable loading demo data for modules to be installed (comma-separated, use
|
||||
# "all" for all modules). Default is none
|
||||
#-----------------------------------------------------------------------------
|
||||
; without_demo = all
|
||||
1
docker/pyenv-version.txt
Normal file
1
docker/pyenv-version.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
v1.2.20
|
||||
1
docker/python-versions.txt
Normal file
1
docker/python-versions.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
3.7.7
|
||||
40
docker/repo_manifest_gen_org_prefix_path.py
Executable file
40
docker/repo_manifest_gen_org_prefix_path.py
Executable file
|
|
@ -0,0 +1,40 @@
|
|||
#!./.venv/bin/python
|
||||
|
||||
import argparse
|
||||
|
||||
from os import listdir
|
||||
from os.path import isdir, join, abspath
|
||||
|
||||
import configparser
|
||||
|
||||
parser = argparse.ArgumentParser(prog='Configure base dir for all addons')
|
||||
|
||||
parser.add_argument("addonsBaseDir", help="Path where addons are cloned.")
|
||||
parser.add_argument("srcConfigPath",
|
||||
help="Path where we retrieve source config file to adapt with new "
|
||||
"addons path.")
|
||||
parser.add_argument("dstConfigPath", help="Path to save adapted configuration.")
|
||||
|
||||
args = parser.parse_args()
|
||||
addonsBaseDir = args.addonsBaseDir
|
||||
srcConfigPath = args.srcConfigPath
|
||||
dstConfigPath = args.dstConfigPath
|
||||
|
||||
addonsDirs = [abspath(join(addonsBaseDir, f)) for f in listdir(addonsBaseDir) if
|
||||
isdir(join(addonsBaseDir, f))]
|
||||
|
||||
# addonsDirs.insert(0, "/usr/lib/python3/dist-packages/odoo/addons/")
|
||||
addonsDirs.insert(0, "/ERPLibre/odoo/addons/")
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
|
||||
config.read(srcConfigPath)
|
||||
|
||||
separator = ","
|
||||
|
||||
config.set('options', 'addons_path', separator.join(addonsDirs))
|
||||
|
||||
print(config.get('options', 'addons_path'))
|
||||
|
||||
with open(dstConfigPath, 'w') as configfile:
|
||||
config.write(configfile)
|
||||
38
docker/wait-for-psql.py
Executable file
38
docker/wait-for-psql.py
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
#!./.venv/bin/python
|
||||
import argparse
|
||||
import psycopg2
|
||||
import sys
|
||||
import time
|
||||
|
||||
if __name__ == '__main__':
|
||||
arg_parser = argparse.ArgumentParser()
|
||||
arg_parser.add_argument('--db_host', required=True)
|
||||
arg_parser.add_argument('--db_port', required=True)
|
||||
arg_parser.add_argument('--db_user', required=True)
|
||||
arg_parser.add_argument('--db_password', required=True)
|
||||
arg_parser.add_argument('--db_name', required=False, default="postgres")
|
||||
arg_parser.add_argument('--timeout', type=int, default=10)
|
||||
|
||||
args = arg_parser.parse_args()
|
||||
|
||||
start_time = time.time()
|
||||
print("Try connection to postgres...")
|
||||
|
||||
connected = False
|
||||
error = ''
|
||||
while ((time.time() - start_time) < args.timeout) or connected is True:
|
||||
try:
|
||||
conn = psycopg2.connect(user=args.db_user, host=args.db_host,
|
||||
port=args.db_port, password=args.db_password,
|
||||
dbname=args.db_name)
|
||||
break
|
||||
except psycopg2.OperationalError as e:
|
||||
error = e
|
||||
print(".")
|
||||
time.sleep(1)
|
||||
else:
|
||||
connected = True
|
||||
conn.close()
|
||||
if error:
|
||||
print("Database connection failure: %s" % error, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
|
@ -1,5 +1,11 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
ERPLIBRE_VERSION="1.1.0"
|
||||
ERPLIBRE_DOCKER_BASE="technolibre/erplibre-base"
|
||||
ERPLIBRE_DOCKER_PROD="technolibre/erplibre"
|
||||
ERPLIBRE_DOCKER_BASE_VERSION="${ERPLIBRE_DOCKER_BASE}:${ERPLIBRE_VERSION}"
|
||||
ERPLIBRE_DOCKER_PROD_VERSION="${ERPLIBRE_DOCKER_PROD}:${ERPLIBRE_VERSION}"
|
||||
|
||||
EL_USER="erplibre"
|
||||
EL_HOME="/${EL_USER}"
|
||||
EL_HOME_ERPLIBRE="${EL_HOME}/erplibre"
|
||||
|
|
|
|||
14
ignore_requirements.txt
Normal file
14
ignore_requirements.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
mercurial
|
||||
facturx
|
||||
stdnum
|
||||
u2flib_server
|
||||
dateutil
|
||||
csv
|
||||
chess
|
||||
git
|
||||
voicent
|
||||
swiftclient
|
||||
keystoneclient
|
||||
xlsxwriter
|
||||
ldap
|
||||
pythonjsonlogger
|
||||
|
|
@ -1,28 +1,40 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<manifest>
|
||||
<remote name="CybroOdoo" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="MathBenTech" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="Numigi" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="OCA" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="SanteLibre" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="Smile-SA" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="camptocamp" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="dhongu" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="it-projects-llc" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="itpp-labs" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="kinjal-sorathiya" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="muk-it" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="obayit" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="odoo" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="odooaktiv" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="odoomates" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="openeducat" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="pledra" fetch="https://github.com/ERPLibre/"/>
|
||||
<remote name="tegin" fetch="https://github.com/ERPLibre/"/>
|
||||
|
||||
<default remote="ERPLibre" revision="12.0" sync-j="4" sync-c="true"/>
|
||||
|
||||
<project name="OpenHRMS.git" path="addons/CybroOdoo_OpenHRMS" remote="CybroOdoo" groups="addons"/>
|
||||
<project name="Property-Management_odoo.git" path="addons/kinjal-sorathiya_Property-Management_odoo" remote="kinjal-sorathiya" revision="master" groups="addons"/>
|
||||
<project name="QuotationRevision.git" path="addons/odooaktiv_QuotationRevision" remote="odooaktiv" groups="addons"/>
|
||||
<project name="account-analytic.git" path="addons/OCA_account-analytic" remote="OCA" groups="addons"/>
|
||||
<project name="access-addons.git" path="addons/itpp-labs_access-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
|
||||
<project name="account-analytic.git" path="addons/OCA_account-analytic" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="account-budgeting.git" path="addons/OCA_account-budgeting" remote="OCA" groups="addons"/>
|
||||
<project name="account-closing.git" path="addons/OCA_account-closing" remote="OCA" groups="addons"/>
|
||||
<project name="account-consolidation.git" path="addons/OCA_account-consolidation" remote="OCA" groups="addons"/>
|
||||
<project name="account-financial-reporting.git" path="addons/OCA_account-financial-reporting" remote="OCA" groups="addons"/>
|
||||
<project name="account-financial-tools.git" path="addons/OCA_account-financial-tools" remote="OCA" groups="addons"/>
|
||||
<project name="account-financial-reporting.git" path="addons/OCA_account-financial-reporting" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="account-financial-tools.git" path="addons/OCA_account-financial-tools" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="account-fiscal-rule.git" path="addons/OCA_account-fiscal-rule" remote="OCA" groups="addons"/>
|
||||
<project name="account-invoice-reporting.git" path="addons/OCA_account-invoice-reporting" remote="OCA" groups="addons"/>
|
||||
<project name="account-invoicing.git" path="addons/OCA_account-invoicing" remote="OCA" revision="12.0_account_invoice_approbation" groups="addons"/>
|
||||
<project name="account-invoicing.git" path="addons/OCA_account-invoicing" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="account-payment.git" path="addons/OCA_account-payment" remote="OCA" groups="addons"/>
|
||||
<project name="account-reconcile.git" path="addons/OCA_account-reconcile" remote="OCA" groups="addons"/>
|
||||
<project name="apps-store.git" path="addons/OCA_apps-store" remote="OCA" groups="addons"/>
|
||||
|
|
@ -32,25 +44,39 @@
|
|||
<project name="business-requirement.git" path="addons/OCA_business-requirement" remote="OCA" groups="addons"/>
|
||||
<project name="commission.git" path="addons/OCA_commission" remote="OCA" groups="addons"/>
|
||||
<project name="community-data-files.git" path="addons/OCA_community-data-files" remote="OCA" groups="addons"/>
|
||||
<project name="connector-ecommerce.git" path="addons/OCA_connector-ecommerce" remote="OCA" groups="addons"/>
|
||||
<project name="connector-interfaces.git" path="addons/OCA_connector-interfaces" remote="OCA" groups="addons"/>
|
||||
<project name="connector-jira.git" path="addons/OCA_connector-jira" remote="OCA" groups="addons"/>
|
||||
<project name="connector-telephony.git" path="addons/OCA_connector-telephony" remote="OCA" groups="addons"/>
|
||||
<project name="connector.git" path="addons/OCA_connector" remote="OCA" groups="addons"/>
|
||||
<project name="contract.git" path="addons/OCA_contract" remote="OCA" groups="addons"/>
|
||||
<project name="credit-control.git" path="addons/OCA_credit-control" remote="OCA" groups="addons"/>
|
||||
<project name="crm.git" path="addons/OCA_crm" remote="OCA" groups="addons"/>
|
||||
<project name="currency.git" path="addons/OCA_currency" remote="OCA" groups="addons"/>
|
||||
<project name="data-protection.git" path="addons/OCA_data-protection" remote="OCA" groups="addons"/>
|
||||
<project name="development.git" path="addons/MathBenTech_development" remote="MathBenTech" revision="12.0" groups="addons"/>
|
||||
<project name="ddmrp.git" path="addons/OCA_ddmrp" remote="OCA" groups="addons"/>
|
||||
<project name="delivery-carrier.git" path="addons/OCA_delivery-carrier" remote="OCA" groups="addons"/>
|
||||
<project name="deltatech.git" path="addons/dhongu_deltatech" remote="dhongu" groups="addons"/>
|
||||
<project name="development.git" path="addons/MathBenTech_development" remote="MathBenTech" groups="addons"/>
|
||||
<project name="donation.git" path="addons/OCA_donation" remote="OCA" revision="12.0_module_donation_website" groups="addons"/>
|
||||
<project name="e-commerce.git" path="addons/OCA_e-commerce" remote="OCA" groups="addons"/>
|
||||
<project name="edi.git" path="addons/OCA_edi" remote="OCA" groups="addons"/>
|
||||
<project name="erplibre_addons.git" path="addons/ERPLibre_erplibre_addons" remote="ERPLibre" revision="12.0" groups="addons"/>
|
||||
<project name="erplibre_addons.git" path="addons/ERPLibre_erplibre_addons" remote="ERPLibre" groups="addons"/>
|
||||
<project name="erplibre_theme_addons.git" path="addons/ERPLibre_erplibre_theme_addons" remote="ERPLibre" groups="addons"/>
|
||||
<project name="event.git" path="addons/OCA_event" remote="OCA" groups="addons"/>
|
||||
<project name="field-service.git" path="addons/OCA_field-service" remote="OCA" groups="addons"/>
|
||||
<project name="fleet.git" path="addons/OCA_fleet" remote="OCA" groups="addons"/>
|
||||
<project name="geospatial.git" path="addons/OCA_geospatial" remote="OCA" groups="addons"/>
|
||||
<project name="helpdesk.git" path="addons/OCA_helpdesk" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="hr.git" path="addons/OCA_hr" remote="OCA" groups="addons"/>
|
||||
<project name="interface-github.git" path="addons/OCA_interface-github" remote="OCA" groups="addons"/>
|
||||
<project name="knowledge.git" path="addons/OCA_knowledge" remote="OCA" groups="addons"/>
|
||||
<project name="l10n-canada.git" path="addons/OCA_l10n-canada" remote="OCA" groups="addons"/>
|
||||
<project name="maintenance.git" path="addons/OCA_maintenance" remote="OCA" groups="addons"/>
|
||||
<project name="management-system.git" path="addons/OCA_management-system" remote="OCA" groups="addons"/>
|
||||
<project name="manufacture.git" path="addons/OCA_manufacture" remote="OCA" groups="addons"/>
|
||||
<project name="margin-analysis.git" path="addons/OCA_margin-analysis" remote="OCA" revision="12.0_sale_margin_editor" groups="addons"/>
|
||||
<project name="medical-fhir.git" path="addons/tegin_medical-fhir" remote="tegin" groups="addons"/>
|
||||
<project name="mis-builder.git" path="addons/OCA_mis-builder" remote="OCA" groups="addons"/>
|
||||
<project name="muk_base.git" path="addons/muk-it_muk_base" remote="muk-it" groups="addons"/>
|
||||
<project name="muk_dms.git" path="addons/muk-it_muk_dms" remote="muk-it" groups="addons"/>
|
||||
|
|
@ -60,44 +86,61 @@
|
|||
<project name="muk_web.git" path="addons/muk-it_muk_web" remote="muk-it" revision="12.0_fix_web_conflict_menu" groups="addons"/>
|
||||
<project name="muk_website.git" path="addons/muk-it_muk_website" remote="muk-it" revision="12.0_remove_autoinstall" groups="addons"/>
|
||||
<project name="multi-company.git" path="addons/OCA_multi-company" remote="OCA" groups="addons"/>
|
||||
<project name="odoo-base-addons.git" path="addons/Numigi_odoo-base-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-base-addons.git" path="addons/Numigi_odoo-base-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-business-spending-management-quebec-canada.git" path="addons/MathBenTech_odoo-business-spending-management-quebec-canada" remote="MathBenTech" revision="12.0_sale_order_line_timesheet_attribution" groups="addons"/>
|
||||
<project name="odoo-entertainment-addons.git" path="addons/Numigi_odoo-entertainment-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-git-addons.git" path="addons/Numigi_odoo-git-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-cloud-platform.git" path="addons/camptocamp_odoo-cloud-platform" remote="camptocamp" groups="addons"/>
|
||||
<project name="odoo-entertainment-addons.git" path="addons/Numigi_odoo-entertainment-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-git-addons.git" path="addons/Numigi_odoo-git-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-hr-addons.git" path="addons/Numigi_odoo-hr-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-partner-addons.git" path="addons/Numigi_odoo-partner-addons" remote="Numigi" revision="12.0_partner_no_vat_improve_no_vat" groups="addons"/>
|
||||
<project name="odoo-product-addons.git" path="addons/Numigi_odoo-product-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-project-addons.git" path="addons/Numigi_odoo-project-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-partner-addons.git" path="addons/Numigi_odoo-partner-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-product-addons.git" path="addons/Numigi_odoo-product-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-product-configurator.git" path="addons/pledra_odoo-product-configurator" remote="pledra" groups="addons"/>
|
||||
<project name="odoo-project-addons.git" path="addons/Numigi_odoo-project-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-purchase-addons.git" path="addons/Numigi_odoo-purchase-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-stock-addons.git" path="addons/Numigi_odoo-stock-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-saas-tools.git" path="addons/it-projects-llc_odoo-saas-tools" remote="it-projects-llc" groups="addons"/>
|
||||
<project name="odoo-stock-addons.git" path="addons/Numigi_odoo-stock-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-survey-addons.git" path="addons/Numigi_odoo-survey-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-timesheet-addons.git" path="addons/Numigi_odoo-timesheet-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo-timesheet-addons.git" path="addons/Numigi_odoo-timesheet-addons" remote="Numigi" revision="12.0_dev" groups="addons"/>
|
||||
<project name="odoo-web-addons.git" path="addons/Numigi_odoo-web-addons" remote="Numigi" groups="addons"/>
|
||||
<project name="odoo.git" path="odoo" remote="odoo" revision="ERPLibre/12.0" clone-depth="10" groups="odoo"/>
|
||||
<project name="odoo_addons.git" path="addons/Smile-SA_odoo_addons" remote="Smile-SA" revision="12.0_remote_autoinstall" groups="addons"/>
|
||||
<project name="odoo_dhtmlxgantt.git" path="addons/obayit_odoo_dhtmlxgantt" remote="obayit" groups="addons"/>
|
||||
<project name="odooapps.git" path="addons/odoomates_odooapps" remote="odoomates" groups="addons"/>
|
||||
<project name="openeducat_erp.git" path="addons/openeducat_openeducat_erp" remote="openeducat" groups="addons"/>
|
||||
<project name="operating-unit.git" path="addons/OCA_operating-unit" remote="OCA" groups="addons"/>
|
||||
<project name="partner-contact.git" path="addons/OCA_partner-contact" remote="OCA" groups="addons"/>
|
||||
<project name="pos-addons.git" path="addons/itpp-labs_pos-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
|
||||
<project name="pos.git" path="addons/OCA_pos" remote="OCA" groups="addons"/>
|
||||
<project name="product-attribute.git" path="addons/OCA_product-attribute" remote="OCA" groups="addons"/>
|
||||
<project name="product-pack.git" path="addons/OCA_product-pack" remote="OCA" groups="addons"/>
|
||||
<project name="product-variant.git" path="addons/OCA_product-variant" remote="OCA" groups="addons"/>
|
||||
<project name="product_rating_app.git" path="addons/odooaktiv_product_rating_app" remote="odooaktiv" groups="addons"/>
|
||||
<project name="project-reporting.git" path="addons/OCA_project-reporting" remote="OCA" groups="addons"/>
|
||||
<project name="project.git" path="addons/OCA_project" remote="OCA" revision="12.0_fix_conflict_project_key" groups="addons"/>
|
||||
<project name="purchase-workflow.git" path="addons/OCA_purchase-workflow" remote="OCA" groups="addons"/>
|
||||
<project name="queue.git" path="addons/OCA_queue" remote="OCA" groups="addons"/>
|
||||
<project name="reporting-engine.git" path="addons/OCA_reporting-engine" remote="OCA" groups="addons"/>
|
||||
<project name="rma.git" path="addons/OCA_rma" remote="OCA" groups="addons"/>
|
||||
<project name="sale-reporting.git" path="addons/OCA_sale-reporting" remote="OCA" groups="addons"/>
|
||||
<project name="sale-workflow.git" path="addons/OCA_sale-workflow" remote="OCA" revision="12.0_modules_sale_order_line" groups="addons"/>
|
||||
<project name="santelibre_addons.git" path="addons/SanteLibre_santelibre_addons" remote="SanteLibre" revision="master" groups="addons"/>
|
||||
<project name="scrummer.git" path="addons/MathBenTech_scrummer" remote="MathBenTech" groups="addons"/>
|
||||
<project name="scrummer.git" path="addons/MathBenTech_scrummer" remote="MathBenTech" revision="12.0_dev" groups="addons"/>
|
||||
<project name="server-auth.git" path="addons/OCA_server-auth" remote="OCA" groups="addons"/>
|
||||
<project name="server-backend.git" path="addons/OCA_server-backend" remote="OCA" groups="addons"/>
|
||||
<project name="server-brand.git" path="addons/OCA_server-brand" remote="OCA" groups="addons"/>
|
||||
<project name="server-env.git" path="addons/OCA_server-env" remote="OCA" groups="addons"/>
|
||||
<project name="server-tools.git" path="addons/OCA_server-tools" remote="OCA" groups="addons"/>
|
||||
<project name="server-ux.git" path="addons/OCA_server-ux" remote="OCA" groups="addons"/>
|
||||
<project name="social.git" path="addons/OCA_social" remote="OCA" groups="addons"/>
|
||||
<project name="stock-logistics-warehouse.git" path="addons/OCA_stock-logistics-warehouse" remote="OCA" groups="addons"/>
|
||||
<project name="storage.git" path="addons/OCA_storage" remote="OCA" groups="addons"/>
|
||||
<project name="timesheet.git" path="addons/OCA_timesheet" remote="OCA" revision="12.0_support_project_agile_timesheet" groups="addons"/>
|
||||
<project name="web.git" path="addons/OCA_web" remote="OCA" groups="addons"/>
|
||||
<project name="vertical-association.git" path="addons/OCA_vertical-association" remote="OCA" groups="addons"/>
|
||||
<project name="vertical-hotel.git" path="addons/OCA_vertical-hotel" remote="OCA" groups="addons"/>
|
||||
<project name="vertical-isp.git" path="addons/OCA_vertical-isp" remote="OCA" groups="addons"/>
|
||||
<project name="vertical-travel.git" path="addons/OCA_vertical-travel" remote="OCA" groups="addons"/>
|
||||
<project name="web.git" path="addons/OCA_web" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="website-addons.git" path="addons/itpp-labs_website-addons" remote="itpp-labs" revision="12.0_dev" groups="addons"/>
|
||||
<project name="website-cms.git" path="addons/OCA_website-cms" remote="OCA" groups="addons"/>
|
||||
<project name="website.git" path="addons/OCA_website" remote="OCA" revision="12.0_dev" groups="addons"/>
|
||||
<project name="wms.git" path="addons/OCA_wms" remote="OCA" groups="addons"/>
|
||||
</manifest>
|
||||
|
|
|
|||
3906
poetry.lock
generated
Normal file
3906
poetry.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
5
poetry.toml
Normal file
5
poetry.toml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
cache-dir = "./"
|
||||
[virtualenvs]
|
||||
create = false
|
||||
in-project = false
|
||||
path = "{cache-dir}.venv"
|
||||
143
pyproject.toml
Normal file
143
pyproject.toml
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
[build-system]
|
||||
requires = [ "poetry>=1.0.0",]
|
||||
build-backend = "poetry.masonry.api"
|
||||
|
||||
[tool.poetry]
|
||||
name = "ERPLibre"
|
||||
version = "1.1.0"
|
||||
description = "Easy way to configure Odoo community"
|
||||
license = "AGPL-3.0-or-later"
|
||||
authors = [ "Mathieu Benoit <mathben@technolibre.ca>", "Alexandre Ferreira Benevides <afbenevides@technolibre.ca>",]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.7"
|
||||
Asterisk = "^0.0.8"
|
||||
Babel = "2.3.4"
|
||||
GitPython = "^3.1.7"
|
||||
Jinja2 = "2.10.1"
|
||||
Mako = "1.0.4"
|
||||
MarkupSafe = "0.23"
|
||||
Pillow = "6.1.0"
|
||||
PyJWT = "1.7.1"
|
||||
PyPDF2 = "1.26.0"
|
||||
PyYAML = "4.2b4"
|
||||
SOAPpy = "^0.12.22"
|
||||
Voicent-Python = "^1.0"
|
||||
Werkzeug = "0.11.15"
|
||||
XlsxWriter = "0.9.3"
|
||||
agithub = "^2.2.2"
|
||||
altair = "^4.1.0"
|
||||
bokeh = "1.1.0"
|
||||
boto = "^2.49.0"
|
||||
boto3 = "1.9.102"
|
||||
cerberus = "^1.3.2"
|
||||
chardet = "3.0.4"
|
||||
cryptography = "2.6.1"
|
||||
cython = "^0.29.21"
|
||||
ddt = "1.2.0"
|
||||
decorator = "4.0.10"
|
||||
docutils = "0.12"
|
||||
ebaysdk = "2.1.5"
|
||||
email_validator = "^1.1.1"
|
||||
extract-msg = "^0.25.3"
|
||||
extract_msg = "^0.25.3"
|
||||
factur-x = "^1.12"
|
||||
feedparser = "5.2.1"
|
||||
freezegun = "0.3.11"
|
||||
geojson = "2.4.1"
|
||||
gevent = "1.3.4"
|
||||
gitpython = "^3.1.7"
|
||||
giturlparse = "^0.9.2"
|
||||
greenlet = "0.4.13"
|
||||
html2text = "2016.9.19"
|
||||
invoice2data = "^0.3.5"
|
||||
iscompatible = "^0.1.1"
|
||||
jira = "2.0.0"
|
||||
keystoneauth1 = "3.14.0"
|
||||
lasso = "^0.0.5"
|
||||
libsass = "0.12.3"
|
||||
lxml = "4.2.3"
|
||||
matplotlib = ">=2.0.0"
|
||||
mock = "2.0.0"
|
||||
mpld3 = "0.3"
|
||||
mysqlclient = "^2.0.1"
|
||||
num2words = "0.5.6"
|
||||
numpy = "^1.19.1"
|
||||
oauthlib = "2.1.0"
|
||||
"oca.decorators" = "^0.0.1"
|
||||
ofxparse = "0.16"
|
||||
openpyxl = "^3.0.4"
|
||||
openupgradelib = "^2.0.0"
|
||||
pandas = "^1.1.0"
|
||||
paramiko = "^2.7.1"
|
||||
passlib = "1.6.5"
|
||||
pdf2image = "^1.13.1"
|
||||
phonenumbers = "^8.12.7"
|
||||
plotly = "4.1.0"
|
||||
premailer = "^3.7.0"
|
||||
psutil = "4.3.1"
|
||||
psycopg2 = "2.7.3.1"
|
||||
py-Asterisk = "^0.5.18"
|
||||
"py3o.formats" = "^0.3"
|
||||
"py3o.template" = "^0.10.0"
|
||||
pycountry = "^20.7.3"
|
||||
pydot = "1.2.3"
|
||||
pygount = "<1.2.0"
|
||||
pyldap = "2.4.28"
|
||||
pymssql = "^2.1.4"
|
||||
pyotp = "^2.4.0"
|
||||
pyparsing = "2.1.10"
|
||||
pyrfc = "^0.1.2"
|
||||
pyserial = "3.1.1"
|
||||
pysftp = "^0.2.9"
|
||||
python-chess = "<0.24"
|
||||
python-csv = "^0.0.13"
|
||||
python-dateutil = "2.7.3"
|
||||
python-git = "^2018.2.1"
|
||||
python-json-logger = "0.1.5"
|
||||
python-keystoneclient = "3.22.0"
|
||||
python-slugify = ">=3.0.2"
|
||||
python-stdnum = "^1.13"
|
||||
python-swiftclient = "3.9.0"
|
||||
python-u2flib-server = "^5.0.0"
|
||||
python-u2flib_server = "^5.0.0"
|
||||
pytz = "2017.2"
|
||||
pyusb = "1.0.0"
|
||||
pyzbar = "^0.1.8"
|
||||
qrcode = "5.3"
|
||||
raven = "^6.10.0"
|
||||
redis = "2.10.5"
|
||||
reportlab = "3.3.0"
|
||||
requests = "2.20.0"
|
||||
requests-mock = "^1.8.0"
|
||||
requests-oauthlib = "1.1.0"
|
||||
requests-toolbelt = "0.9.1"
|
||||
retrying = "^1.3.3"
|
||||
rotate_backups_s3 = "^0.3"
|
||||
serial = "^0.0.97"
|
||||
shapely = "1.6.4.post2"
|
||||
simplejson = "^3.17.2"
|
||||
slugify = "^0.0.1"
|
||||
sphinx = ">=1.6.7"
|
||||
sphinx-patchqueue = ">=1.0"
|
||||
sqlalchemy = "^1.3.18"
|
||||
statsd = "3.2.1"
|
||||
suds-jurko = "0.6"
|
||||
toml = "^0.10.1"
|
||||
unidecode = "1.0.22"
|
||||
vatnumber = "1.2"
|
||||
vcrpy = ">=2.1.1"
|
||||
vcrpy-unittest = "^0.1.7"
|
||||
vobject = "0.9.3"
|
||||
voicent-python = "^1.0"
|
||||
webcolors = "1.10"
|
||||
websocket-client = "^0.57.0"
|
||||
wheel = "^0.34.2"
|
||||
xlrd = "1.0.0"
|
||||
xlwt = "1.3"
|
||||
xmltodict = "^0.12.0"
|
||||
zeep = "^3.4.0"
|
||||
zxcvbn = "^4.4.28"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
websocket_client = "^0.57.0"
|
||||
|
|
@ -1,6 +1,34 @@
|
|||
# For script
|
||||
giturlparse
|
||||
agithub
|
||||
gitpython
|
||||
PyYAML
|
||||
retrying
|
||||
xmltodict
|
||||
xmltodict
|
||||
openupgradelib
|
||||
|
||||
# For OSX
|
||||
cython
|
||||
|
||||
# For Odoo
|
||||
wheel
|
||||
phonenumbers
|
||||
|
||||
# For OCA
|
||||
factur-x
|
||||
|
||||
# For testing
|
||||
websocket-client
|
||||
python-stdnum
|
||||
python-u2flib_server
|
||||
python-dateutil
|
||||
python-csv
|
||||
python-chess
|
||||
python-git
|
||||
voicent-python
|
||||
python-swiftclient
|
||||
python-keystoneclient
|
||||
|
||||
# For updating poetry
|
||||
toml
|
||||
iscompatible
|
||||
|
|
|
|||
2
run.sh
2
run.sh
|
|
@ -1,3 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
source ./venv/bin/activate
|
||||
source ./.venv/bin/activate
|
||||
python3 ./odoo/odoo-bin -c ./config.conf --limit-time-real 99999 --limit-time-cpu 99999 $@
|
||||
|
|
|
|||
28
script/delete_production.sh
Executable file
28
script/delete_production.sh
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
. ./env_var.sh
|
||||
|
||||
echo -e "\n==== Delete user ===="
|
||||
|
||||
echo -n "Are You Sure to delete user ${EL_HOME}? [Y/n]"
|
||||
old_stty_cfg=$(stty -g)
|
||||
stty raw -echo
|
||||
answer=$( while ! head -c 1 | grep -i '[ny]' ;do true ;done )
|
||||
stty $old_stty_cfg
|
||||
if echo "$answer" | grep -iq "^y" ;then
|
||||
echo "Remove all system of ${EL_HOME}"
|
||||
else
|
||||
echo "Cancel..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo systemctl stop ${EL_CONFIG}.service
|
||||
# Disable daemon
|
||||
sudo systemctl disable ${EL_CONFIG}.service
|
||||
sudo rm -f /etc/systemd/system/${EL_CONFIG}.service
|
||||
|
||||
# Disable nginx
|
||||
sudo rm -rf ${EL_HOME}
|
||||
sudo rm -f /etc/nginx/sites-available/${EL_WEBSITE_NAME}
|
||||
sudo rm -f /etc/nginx/sites-enabled/${EL_WEBSITE_NAME}
|
||||
sudo systemctl restart nginx
|
||||
23
script/docker_build.sh
Executable file
23
script/docker_build.sh
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env bash
|
||||
. ./env_var.sh
|
||||
|
||||
# Rewrite docker-compose
|
||||
./script/docker_update_version.py --version=${ERPLIBRE_VERSION} --base=${ERPLIBRE_DOCKER_BASE} --prod=${ERPLIBRE_DOCKER_PROD}
|
||||
|
||||
cd docker
|
||||
|
||||
ARGS=--build-arg=WORKING_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||
|
||||
# Clear cache
|
||||
# ARGS="${ARGS} --no-cache"
|
||||
|
||||
set -e
|
||||
|
||||
# Build base
|
||||
docker build ${ARGS} -f Dockerfile.base -t ${ERPLIBRE_DOCKER_BASE_VERSION} .
|
||||
|
||||
# Build prod
|
||||
docker build ${ARGS} -f Dockerfile.prod.pkg -t ${ERPLIBRE_DOCKER_PROD_VERSION} .
|
||||
|
||||
cd -
|
||||
docker-compose up -d
|
||||
108
script/docker_update_version.py
Executable file
108
script/docker_update_version.py
Executable file
|
|
@ -0,0 +1,108 @@
|
|||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
import yaml
|
||||
|
||||
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
|
||||
"""
|
||||
config = GitTool.get_project_config()
|
||||
|
||||
# TODO update description
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
description='''\
|
||||
Update version of docker ready to commit.
|
||||
''',
|
||||
epilog='''\
|
||||
'''
|
||||
)
|
||||
parser.add_argument('--version', required=True, help="Version of ERPLibre.")
|
||||
parser.add_argument('--base', required=True, help="Docker base name.")
|
||||
parser.add_argument('--prod', required=True, help="Docker prod name.")
|
||||
parser.add_argument('--docker_compose_file', default="./docker-compose.yml", help="Docker compose file to update.")
|
||||
parser.add_argument('--docker_prod', default="./docker/Dockerfile.prod.pkg", help="Docker prod file to update.")
|
||||
args = parser.parse_args()
|
||||
args.base_version = f"{args.base}:{args.version}"
|
||||
args.prod_version = f"{args.prod}:{args.version}"
|
||||
return args
|
||||
|
||||
|
||||
# def edit_yaml(config):
|
||||
# with open(config.docker_compose_file, 'r') as f:
|
||||
# docker_info = yaml.safe_load(f)
|
||||
# if not docker_info:
|
||||
# print(f"ERROR, file {config.docker_compose_file} is empty.")
|
||||
# sys.exit(1)
|
||||
#
|
||||
# dct_services = docker_info.get("services")
|
||||
# dct_erplibre = dct_services.get("ERPLibre") if dct_services else None
|
||||
# if dct_erplibre:
|
||||
# dct_erplibre["image"] = config.prod_version
|
||||
# with open(config.docker_compose_file, 'w') as f:
|
||||
# yaml.dump(docker_info, f)
|
||||
|
||||
|
||||
def edit_text(config):
|
||||
with open(config.docker_compose_file, 'r') as f:
|
||||
lst_docker_info = f.readlines()
|
||||
|
||||
if not lst_docker_info:
|
||||
print(f"ERROR, file {config.docker_compose_file} is empty.")
|
||||
sys.exit(1)
|
||||
|
||||
is_find = False
|
||||
i = 0
|
||||
for docker_info in lst_docker_info:
|
||||
if is_find:
|
||||
key = "image:"
|
||||
value = lst_docker_info[i]
|
||||
lst_docker_info[i] = f"{value[:value.find(key) + len(key)]} {config.prod_version}\n"
|
||||
break
|
||||
if "ERPLibre" in docker_info:
|
||||
is_find = True
|
||||
i += 1
|
||||
|
||||
with open(config.docker_compose_file, 'w') as f:
|
||||
f.writelines(lst_docker_info)
|
||||
|
||||
|
||||
def edit_docker_prod(config):
|
||||
with open(config.docker_prod, 'r') as f:
|
||||
lst_docker_info = f.readlines()
|
||||
|
||||
if not lst_docker_info:
|
||||
print(f"ERROR, file {config.docker_compose_file} is empty.")
|
||||
sys.exit(1)
|
||||
|
||||
i = 0
|
||||
for docker_info in lst_docker_info:
|
||||
if "FROM " in docker_info:
|
||||
lst_docker_info[i] = f"FROM {config.base_version}\n"
|
||||
i += 1
|
||||
|
||||
with open(config.docker_prod, 'w') as f:
|
||||
f.writelines(lst_docker_info)
|
||||
|
||||
|
||||
def main():
|
||||
config = get_config()
|
||||
edit_text(config)
|
||||
edit_docker_prod(config)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
# © 2020 TechnoLibre (http://www.technolibre.ca)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
|
@ -30,6 +30,8 @@ def get_config():
|
|||
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.")
|
||||
parser.add_argument('-m', '--manifest', default="manifest/default.dev.xml",
|
||||
help="The manifest file path to generate.")
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
|
@ -53,8 +55,9 @@ def main():
|
|||
dct_remote = {}
|
||||
dct_project = {}
|
||||
git_tool.generate_repo_manifest(lst_repo_organization,
|
||||
output=f"{config.dir}manifest/default.dev.xml",
|
||||
dct_remote=dct_remote, dct_project=dct_project)
|
||||
output=f"{config.dir}{config.manifest}",
|
||||
dct_remote=dct_remote, dct_project=dct_project,
|
||||
keep_original=True)
|
||||
git_tool.generate_install_locally()
|
||||
|
||||
|
||||
|
|
|
|||
75
script/git_show_code_diff_repo_manifest.py
Executable file
75
script/git_show_code_diff_repo_manifest.py
Executable file
|
|
@ -0,0 +1,75 @@
|
|||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
from git import Repo
|
||||
from git.exc import GitCommandError
|
||||
|
||||
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="""Compare actual code with a manifest.""",
|
||||
epilog='''\
|
||||
'''
|
||||
)
|
||||
parser.add_argument('-m', '--manifest', required=True,
|
||||
help="The manifest to compare with actual code.")
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
def main():
|
||||
config = get_config()
|
||||
git_tool = GitTool()
|
||||
|
||||
dct_remote, dct_project, default_remote = git_tool.get_manifest_xml_info(filename=config.manifest, add_root=True)
|
||||
default_branch_name = default_remote.get("@revision", git_tool.default_branch)
|
||||
i = 0
|
||||
total = len(dct_project)
|
||||
for name, project in dct_project.items():
|
||||
i += 1
|
||||
path = project.get("@path")
|
||||
print(f"{i}/{total} - {path}")
|
||||
branch_name = project.get("@revision", default_branch_name)
|
||||
organization = project.get("@remote")
|
||||
if not organization:
|
||||
print(f"ERROR missing @remote on project {path}.")
|
||||
continue
|
||||
|
||||
git_repo = Repo(path)
|
||||
value = git_repo.git.branch("--show-current")
|
||||
if not value:
|
||||
# TODO maybe need to check divergence with local branch and not remote branch
|
||||
commit_head = git_repo.git.rev_parse("HEAD")
|
||||
try:
|
||||
commit_branch = git_repo.git.rev_parse(f"{organization}/{branch_name}")
|
||||
except GitCommandError:
|
||||
print("ERROR Something wrong with this repo.")
|
||||
continue
|
||||
if commit_branch != commit_head:
|
||||
print("WARNING Not on specified branch, got a divergence.")
|
||||
else:
|
||||
print("PASS Not on specified branch, no divergence.")
|
||||
elif branch_name != value:
|
||||
print(f"ERROR, manifest revision is {branch_name} and actual revision is {value}.")
|
||||
else:
|
||||
print("PASS")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#!./venv/bin/python
|
||||
#!./.venv/bin/python
|
||||
# © 2020 TechnoLibre (http://www.technolibre.ca)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
import os
|
||||
|
|
@ -311,7 +311,7 @@ class GitTool:
|
|||
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")
|
||||
default_remote = dct_manifest.get("default")
|
||||
lst_remote = dct_manifest.get("remote")
|
||||
lst_project = dct_manifest.get("project")
|
||||
dct_remote = {a.get("@name"): a for a in lst_remote}
|
||||
|
|
@ -351,6 +351,7 @@ class GitTool:
|
|||
webbrowser.open_new_tab(url)
|
||||
|
||||
def generate_install_locally(self, repo_path="./"):
|
||||
filename_locally = f"{repo_path}script/install_locally.sh"
|
||||
lst_repo = self.get_repo_info(repo_path=repo_path)
|
||||
lst_result = []
|
||||
for repo in lst_repo:
|
||||
|
|
@ -361,14 +362,15 @@ class GitTool:
|
|||
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/install_locally.sh") as file:
|
||||
with open(filename_locally) 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 [[ $EL_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)
|
||||
|
|
@ -381,8 +383,12 @@ class GitTool:
|
|||
break
|
||||
index += 1
|
||||
|
||||
if not find_index:
|
||||
print(f"ERROR cannot regenerate file {filename_locally}, "
|
||||
f"did you change the header?")
|
||||
|
||||
# create file
|
||||
with open(f"{repo_path}script/install_locally.sh", mode="w") as file:
|
||||
with open(filename_locally, mode="w") as file:
|
||||
file.writelines(all_lines)
|
||||
|
||||
@staticmethod
|
||||
|
|
@ -390,14 +396,17 @@ class GitTool:
|
|||
return source_str[:pos] + insert_str + source_str[pos:]
|
||||
|
||||
def generate_repo_manifest(self, lst_repo: List[Struct] = [], output: str = "",
|
||||
dct_remote={}, dct_project={}, default_remote=None):
|
||||
dct_remote={}, dct_project={}, default_remote=None,
|
||||
keep_original=False):
|
||||
"""
|
||||
Generate repo manifest
|
||||
:param lst_repo: optional, update manifest with list_repo
|
||||
:param output: filename to write output
|
||||
:param dct_remote: dict of remote information
|
||||
:param dct_project: dict of project information
|
||||
:param default_remote: name of default remote, optional
|
||||
:param default_remote: dict of default remote
|
||||
:param keep_original: if True, can manage multiple organization with same name,
|
||||
but with different fetch url
|
||||
:return:
|
||||
"""
|
||||
if not output:
|
||||
|
|
@ -449,10 +458,15 @@ class GitTool:
|
|||
('@sync-c', "true"),
|
||||
]))
|
||||
else:
|
||||
if keep_original and repo.project_name not in dct_project.keys():
|
||||
# Exception, create a new remote to keep tracking on original
|
||||
original_organization = f"{repo.original_organization}_origin"
|
||||
else:
|
||||
original_organization = repo.original_organization
|
||||
# Add remote, only unique remote
|
||||
if repo.original_organization not in lst_remote_name:
|
||||
if original_organization not in lst_remote_name:
|
||||
lst_remote.append(OrderedDict(
|
||||
[('@name', repo.original_organization),
|
||||
[('@name', original_organization),
|
||||
('@fetch', repo.url_https_organization + "/")]
|
||||
))
|
||||
lst_remote_name.append(repo.original_organization)
|
||||
|
|
@ -462,7 +476,7 @@ class GitTool:
|
|||
lst_project_info = [
|
||||
('@name', repo.project_name),
|
||||
('@path', repo.path),
|
||||
('@remote', repo.original_organization),
|
||||
('@remote', original_organization),
|
||||
]
|
||||
if repo.revision:
|
||||
lst_project_info.append(('@revision', repo.revision))
|
||||
|
|
@ -476,7 +490,7 @@ class GitTool:
|
|||
|
||||
if default_remote and not lst_default:
|
||||
lst_default.append(OrderedDict([
|
||||
('@remote', default_remote),
|
||||
('@remote', default_remote.get("@remote")),
|
||||
('@revision', DEFAULT_BRANCH),
|
||||
('@sync-j', "4"),
|
||||
('@sync-c', "true"),
|
||||
|
|
@ -760,6 +774,30 @@ class GitTool:
|
|||
upstream_remote.fetch)()
|
||||
print('Remote "%s" fetched' % repo_info.organization)
|
||||
|
||||
def get_pull_request_repo(self, upstream_url: str, github_token: str,
|
||||
organization_name: str = ""):
|
||||
"""
|
||||
|
||||
:param upstream_url:
|
||||
:param github_token:
|
||||
:param organization_name:
|
||||
:return: List of url if success, else False
|
||||
"""
|
||||
gh = GitHub(token=github_token)
|
||||
parsed_url = parse(upstream_url)
|
||||
|
||||
# Fork the repo
|
||||
status, user = gh.user.get()
|
||||
user_name = user['login'] if not organization_name else organization_name
|
||||
status, lst_pull = gh.repos[user_name][parsed_url.repo].pulls.get()
|
||||
if type(lst_pull) is dict:
|
||||
print(f"For url {upstream_url}, got {lst_pull.get('message')}")
|
||||
return False
|
||||
else:
|
||||
for pull in lst_pull:
|
||||
print(pull.get("html_url"))
|
||||
return lst_pull
|
||||
|
||||
def fork_repo(self, upstream_url: str, github_token: str,
|
||||
organization_name: str = ""):
|
||||
# https://developer.github.com/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps/
|
||||
|
|
|
|||
113
script/git_update_repo.py
Executable file
113
script/git_update_repo.py
Executable file
|
|
@ -0,0 +1,113 @@
|
|||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
from git import Repo # pip install gitpython
|
||||
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
|
||||
|
||||
_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.")
|
||||
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=False)
|
||||
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]
|
||||
|
||||
i = 0
|
||||
total = len(lst_repo)
|
||||
for repo in lst_repo_organization:
|
||||
i += 1
|
||||
print(f"\nNb element {i}/{total} - {repo.path}")
|
||||
|
||||
# TODO validate with default to ignore duplicate url, if same remote repo
|
||||
if not repo.is_submodule:
|
||||
continue
|
||||
upstream_name = f"ERPLibre_update_12/{git_tool.default_branch}"
|
||||
remote_branch_name = f"{upstream_name}/{git_tool.default_branch}"
|
||||
git_repo = Repo(repo.relative_path)
|
||||
# 1. Add remote if not exist
|
||||
try:
|
||||
upstream_remote = git_repo.remote(upstream_name)
|
||||
print(f'Remote "{upstream_name}" already exists in {repo.relative_path}')
|
||||
except ValueError:
|
||||
upstream_remote = retry(
|
||||
wait_exponential_multiplier=1000,
|
||||
stop_max_delay=15000
|
||||
)(git_repo.create_remote)(upstream_name, repo.url_https)
|
||||
print('Remote "%s" created for %s' % (upstream_name, repo.url_https))
|
||||
|
||||
# 2. Fetch the remote source
|
||||
retry(wait_exponential_multiplier=1000, stop_max_delay=15000)(
|
||||
upstream_remote.fetch)()
|
||||
print('Remote "%s" fetched' % upstream_name)
|
||||
|
||||
# 3. Rebase actual branch with new branch
|
||||
rev = repo.revision if repo.revision else git_tool.default_branch
|
||||
try:
|
||||
git_repo.git.checkout(rev)
|
||||
except:
|
||||
if repo.revision:
|
||||
rev = f"{repo.original_organization}/{repo.revision}"
|
||||
else:
|
||||
rev = f"{repo.original_organization}/{git_tool.default_branch}"
|
||||
|
||||
git_repo.git.checkout("--track", rev)
|
||||
actual_commit = git_repo.git.rev_parse("HEAD")
|
||||
try:
|
||||
git_repo.git.rebase(remote_branch_name)
|
||||
except Exception as e:
|
||||
print(e, file=sys.stderr)
|
||||
new_commit = git_repo.git.rev_parse("HEAD")
|
||||
|
||||
if actual_commit == new_commit:
|
||||
print("== No diff ==")
|
||||
else:
|
||||
print(f"== Old commit {actual_commit} - new commit {new_commit}")
|
||||
# push
|
||||
try:
|
||||
retry(wait_exponential_multiplier=1000, stop_max_delay=15000)(
|
||||
git_repo.git.push)(repo.organization, rev)
|
||||
except:
|
||||
print("Cannot push, maybe need to push force or resolv rebase conflict",
|
||||
file=sys.stderr)
|
||||
print(f"cd {repo.path}")
|
||||
print(f"git diff ERPLibre/v#.#.#..HEAD")
|
||||
print(f"git push --force {repo.organization} {rev}")
|
||||
print(f"cd -")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
#-------------------------------------------------------------------------------
|
||||
################################################################################
|
||||
|
||||
EL_USER=$(whoami)
|
||||
EL_USER=${USER}
|
||||
|
||||
#--------------------------------------------------
|
||||
# Install PostgreSQL Server
|
||||
|
|
@ -22,12 +22,26 @@ sudo su - postgres -c "createuser -s ${EL_USER}" 2> /dev/null || true
|
|||
# Install Dependencies
|
||||
#--------------------------------------------------
|
||||
echo "\n--- Installing Python 3 + pip3 --"
|
||||
brew install git python3 wget
|
||||
brew install git python3 wget pyenv
|
||||
brew link git
|
||||
brew link wget
|
||||
echo "\n--- Installing docker --"
|
||||
brew install minikube docker docker-compose docker-machine
|
||||
brew cask install virtualbox
|
||||
docker-machine create --driver virtualbox default
|
||||
docker-machine env default
|
||||
eval "$(docker-machine env default)"
|
||||
echo "\n---- Installing nodeJS NPM and rtlcss for LTR support ----"
|
||||
brew install nodejs npm
|
||||
brew install nodejs npm openssl
|
||||
sudo npm install -g rtlcss
|
||||
sudo npm install -g lessc
|
||||
yes n|pyenv install 3.7.7
|
||||
pyenv local 3.7.7
|
||||
|
||||
echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc
|
||||
|
||||
echo -e "\n---- Installing poetry for reliable python package ----"
|
||||
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
|
||||
|
||||
#--------------------------------------------------
|
||||
# Install Wkhtmltopdf if needed
|
||||
|
|
@ -38,15 +52,3 @@ if [ ! -f "wkhtmltox-0.12.5-1.macos-carbon.pkg" ]; then
|
|||
sudo sudo installer -pkg wkhtmltox-0.12.5-1.macos-carbon.pkg -target /
|
||||
else echo "Wkhtmltopdf already installed"
|
||||
fi
|
||||
|
||||
# ===============================================================================================
|
||||
# !!!! FOR OSX there is a problem with python 3.7.5 with PILLOW, use 3.6.9 instead and works fine
|
||||
# install python 3.6.9
|
||||
# brew install pyenv
|
||||
# pyenv install 3.6.9
|
||||
# then redoo link:
|
||||
# unlink /usr/local/bin/python3
|
||||
# ln -s ~/.pyenv/versions/3.6.9/bin/python3.6 /usr/local/bin/python3
|
||||
# ===============================================================================================
|
||||
echo "\n---- Installing venv if not already existing (rm -r venv if already exists) ----"
|
||||
~/.pyenv/versions/3.6.9/bin/python3.6 -m venv venv
|
||||
|
|
@ -30,8 +30,8 @@ User=${EL_USER}
|
|||
Group=${EL_USER}
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
PIDFile=${EL_HOME_ERPLIBRE}/venv/service.pid
|
||||
ExecStart=${EL_HOME_ERPLIBRE}/venv/run.sh
|
||||
PIDFile=${EL_HOME_ERPLIBRE}/.venv/service.pid
|
||||
ExecStart=${EL_HOME_ERPLIBRE}/.venv/run.sh
|
||||
StandardOutput=journal+console
|
||||
|
||||
[Install]
|
||||
|
|
@ -51,14 +51,14 @@ sudo su ${EL_USER} -c "sudo rm -f /tmp/${EL_USER}run.sh"
|
|||
cat <<EOF > /tmp/${EL_USER}run.sh
|
||||
#!/usr/bin/env bash
|
||||
cd ${EL_HOME_ERPLIBRE}
|
||||
source ./venv/bin/activate
|
||||
source ./.venv/bin/activate
|
||||
python3 ${EL_HOME_ERPLIBRE}/odoo/odoo-bin -c ${EL_HOME_ERPLIBRE}/config.conf --limit-time-real 99999 --limit-time-cpu 99999 $@
|
||||
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
|
||||
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:"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
. ./env_var.sh
|
||||
|
||||
EL_USER=$(whoami)
|
||||
EL_USER=${USER}
|
||||
#EL_INSTALL_WKHTMLTOPDF="True"
|
||||
|
||||
##
|
||||
|
|
@ -31,42 +31,47 @@ sudo apt-get upgrade -y
|
|||
# Install PostgreSQL Server
|
||||
#--------------------------------------------------
|
||||
echo -e "\n---- Install PostgreSQL Server ----"
|
||||
sudo apt-get install postgresql -y
|
||||
sudo apt-get install postgresql libpq-dev -y
|
||||
|
||||
echo -e "\n---- Creating the ERPLibre PostgreSQL User ----"
|
||||
sudo su - postgres -c "createuser -s $EL_USER" 2> /dev/null || true
|
||||
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-core -y
|
||||
echo -e "\n--- Installing debian dependency --"
|
||||
sudo apt-get install git build-essential wget libxslt-dev libzip-dev libldap2-dev libsasl2-dev node-less libpng12-0 gdebi-core libffi-dev libbz2-dev -y
|
||||
sudo apt-get install libmariadbd-dev -y
|
||||
|
||||
echo -e "\n---- Installing nodeJS NPM and rtlcss for LTR support ----"
|
||||
sudo apt-get install nodejs npm -y
|
||||
sudo npm install -g rtlcss
|
||||
sudo npm install -g lessc
|
||||
|
||||
if [ ${EL_INSTALL_NGINX} = "True" ]; then
|
||||
sudo apt install nginx -y
|
||||
echo -e "\n---- Installing nginx ----"
|
||||
sudo apt install nginx -y
|
||||
fi
|
||||
|
||||
#--------------------------------------------------
|
||||
# Install Wkhtmltopdf if needed
|
||||
#--------------------------------------------------
|
||||
if [ ${EL_INSTALL_WKHTMLTOPDF} = "True" ]; then
|
||||
echo -e "\n---- Installing wkhtml ----"
|
||||
INSTALLED=$(dpkg -s wkhtmltox|grep installed)
|
||||
if [ "" == "${INSTALLED}" ]; then
|
||||
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
|
||||
_url=${WKHTMLTOX_X64}
|
||||
else
|
||||
_url=$WKHTMLTOX_X32
|
||||
_url=${WKHTMLTOX_X32}
|
||||
fi
|
||||
sudo wget ${_url}
|
||||
sudo gdebi --n `basename ${_url}`
|
||||
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
|
||||
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
|
||||
else echo -e "\n---- Already installed wkhtml ----"
|
||||
fi
|
||||
else
|
||||
echo "Wkhtmltopdf isn't installed due to the choice of the user!"
|
||||
|
|
@ -8,11 +8,11 @@ if [[ "${OSTYPE}" == "linux-gnu" ]]; then
|
|||
OS=$(lsb_release -si)
|
||||
if [[ "${OS}" == "Ubuntu" ]]; then
|
||||
echo "\n---- linux-gnu installation process started ----"
|
||||
./script/install_debian_dependancy.sh
|
||||
./script/install_debian_dependency.sh
|
||||
else
|
||||
echo "Your Linux system is not supported."
|
||||
fi
|
||||
elif [[ "${OSTYPE}" == "darwin"* ]]; then
|
||||
echo "\n---- Darwin installation process started ----"
|
||||
./script/install_OSX_dependancy.sh
|
||||
./script/install_OSX_dependency.sh
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
. ./env_var.sh
|
||||
|
||||
EL_USER=$(whoami)
|
||||
EL_USER=${USER}
|
||||
EL_HOME=$PWD
|
||||
EL_HOME_ODOO="${EL_HOME}/odoo"
|
||||
#EL_INSTALL_WKHTMLTOPDF="True"
|
||||
|
|
@ -14,17 +14,6 @@ EL_CONFIG_FILE="${EL_HOME}/config.conf"
|
|||
#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}
|
||||
|
|
@ -40,8 +29,10 @@ 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
|
||||
if [[ ${EL_MINIMAL_ADDONS} = "False" ]]; then
|
||||
printf "${EL_HOME}/addons/CybroOdoo_OpenHRMS," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/ERPLibre_erplibre_addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/ERPLibre_erplibre_theme_addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/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}
|
||||
|
|
@ -75,17 +66,28 @@ if [[ $EL_MINIMAL_ADDONS = "False" ]]; then
|
|||
printf "${EL_HOME}/addons/OCA_business-requirement," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_commission," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_community-data-files," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_connector," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_connector-ecommerce," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_connector-interfaces," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_connector-jira," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_connector-telephony," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_contract," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_credit-control," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_crm," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_currency," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_data-protection," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_ddmrp," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_delivery-carrier," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_donation," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_e-commerce," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_edi," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_event," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_field-service," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_fleet," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_geospatial," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_helpdesk," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_hr," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_interface-github," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_knowledge," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_l10n-canada," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_maintenance," >> ${EL_CONFIG_FILE}
|
||||
|
|
@ -94,6 +96,7 @@ if [[ $EL_MINIMAL_ADDONS = "False" ]]; then
|
|||
printf "${EL_HOME}/addons/OCA_margin-analysis," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_mis-builder," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_multi-company," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_operating-unit," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_partner-contact," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_pos," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_product-attribute," >> ${EL_CONFIG_FILE}
|
||||
|
|
@ -104,19 +107,34 @@ if [[ $EL_MINIMAL_ADDONS = "False" ]]; then
|
|||
printf "${EL_HOME}/addons/OCA_purchase-workflow," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_queue," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_reporting-engine," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_rma," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_sale-reporting," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_sale-workflow," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_server-auth," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_server-backend," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_server-brand," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_server-env," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_server-tools," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_server-ux," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_social," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_stock-logistics-warehouse," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_storage," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_timesheet," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_vertical-association," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_vertical-hotel," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_vertical-isp," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_vertical-travel," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_website," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_website-cms," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/OCA_wms," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/SanteLibre_santelibre_addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/Smile-SA_odoo_addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/camptocamp_odoo-cloud-platform," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/dhongu_deltatech," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/it-projects-llc_odoo-saas-tools," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/itpp-labs_access-addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/itpp-labs_pos-addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/itpp-labs_website-addons," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/kinjal-sorathiya_Property-Management_odoo," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/muk-it_muk_base," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/muk-it_muk_dms," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/muk-it_muk_docs," >> ${EL_CONFIG_FILE}
|
||||
|
|
@ -124,15 +142,20 @@ if [[ $EL_MINIMAL_ADDONS = "False" ]]; then
|
|||
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/obayit_odoo_dhtmlxgantt," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/odooaktiv_QuotationRevision," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/odooaktiv_product_rating_app," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/odoomates_odooapps," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/openeducat_openeducat_erp," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/pledra_odoo-product-configurator," >> ${EL_CONFIG_FILE}
|
||||
printf "${EL_HOME}/addons/tegin_medical-fhir," >> ${EL_CONFIG_FILE}
|
||||
fi
|
||||
printf "\n" >> ${EL_CONFIG_FILE}
|
||||
|
||||
printf "workers = 2\n" >> ${EL_CONFIG_FILE}
|
||||
printf "max_cron_threads = 2\n" >> ${EL_CONFIG_FILE}
|
||||
|
||||
if [ ${EL_INSTALL_NGINX} = "True" ]; then
|
||||
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}
|
||||
|
|
@ -142,22 +165,69 @@ echo -e "\n---- Install Odoo with addons module ----"
|
|||
git submodule update --init
|
||||
|
||||
# Generate empty addons if missing
|
||||
if [ ! -d "./addons/addons" ]; then
|
||||
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
|
||||
PYENV_PATH=~/.pyenv
|
||||
PYENV_VERSION_PATH=${PYENV_PATH}/versions/3.7.7
|
||||
PYTHON_EXEC=${PYENV_VERSION_PATH}/bin/python
|
||||
POETRY_PATH=~/.poetry
|
||||
VENV_PATH=./.venv
|
||||
VENV_REPO_PATH=${VENV_PATH}/repo
|
||||
|
||||
if [[ ! -d "${PYENV_PATH}" ]]; then
|
||||
echo -e "\n---- Installing pyenv in ${PYENV_PATH} ----"
|
||||
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
|
||||
fi
|
||||
|
||||
echo -e "\n---- Export pyenv in ${PYENV_PATH} ----"
|
||||
export PATH="${PYENV_PATH}/bin:$PATH"
|
||||
eval "$(pyenv init -)"
|
||||
eval "$(pyenv virtualenv-init -)"
|
||||
|
||||
if [[ ! -d "${PYENV_VERSION_PATH}" ]]; then
|
||||
echo -e "\n---- Installing python 3.7.7 with pyenv in ${PYENV_VERSION_PATH} ----"
|
||||
yes n|pyenv install 3.7.7
|
||||
fi
|
||||
|
||||
pyenv local 3.7.7
|
||||
|
||||
if [[ ! -d "${POETRY_PATH}" ]]; then
|
||||
echo -e "\n---- Installing poetry for reliable python package ----"
|
||||
# curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | ${PYTHON_EXEC}
|
||||
curl -fsS -o get-poetry.py https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
|
||||
python get-poetry.py -y --preview
|
||||
fi
|
||||
|
||||
if [[ ! -d ${VENV_PATH} ]]; then
|
||||
echo -e "\n---- Create Virtual environment Python ----"
|
||||
if [[ -e ${PYTHON_EXEC} ]]; then
|
||||
${PYTHON_EXEC} -m venv .venv
|
||||
else
|
||||
echo "Missing pyenv, please refer installation guide."
|
||||
exit 1
|
||||
fi
|
||||
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
|
||||
if [[ ! -f ${VENV_REPO_PATH} ]]; then
|
||||
echo "\n---- Install git-repo from Google APIS ----"
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ${VENV_REPO_PATH}
|
||||
chmod +x ${VENV_REPO_PATH}
|
||||
sed -i 1d ${VENV_REPO_PATH}
|
||||
PYTHON_HASHBANG="#!./.venv/bin/python"
|
||||
sed -i "1 i ${PYTHON_HASHBANG}" ${VENV_REPO_PATH}
|
||||
fi
|
||||
|
||||
echo -e "\n---- Installing poetry dependency ----"
|
||||
${VENV_PATH}/bin/pip install --upgrade pip
|
||||
#/home/"${USER}"/.poetry/bin/poetry env use ${PYTHON_EXEC}
|
||||
source $HOME/.poetry/env
|
||||
poetry install
|
||||
# Delete artifacts created by pip, cause error in next "poetry install"
|
||||
rm -rf artifacts
|
||||
|
||||
# Link for dev
|
||||
echo -e "\n---- Add link dependency in site-packages of Python ----"
|
||||
ln -fs ${EL_HOME_ODOO}/odoo ${EL_HOME}/.venv/lib/python3.7/site-packages/
|
||||
|
|
|
|||
|
|
@ -2,37 +2,7 @@
|
|||
|
||||
. ./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
|
||||
./script/update_manifest_local_dev.sh
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -2,37 +2,7 @@
|
|||
|
||||
. ./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
|
||||
./script/update_manifest_prod.sh
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
. ./env_var.sh
|
||||
|
||||
./script/install_debian_dependancy.sh
|
||||
./script/install_debian_dependency.sh
|
||||
|
||||
echo -e "\n---- Create ERPLIBRE system user ----"
|
||||
sudo adduser --system --quiet --shell=/bin/bash --home=/${EL_USER} --gecos 'ERPLIBRE' --group ${EL_USER}
|
||||
|
|
|
|||
5
script/poetry_add_build_dependency.sh
Executable file
5
script/poetry_add_build_dependency.sh
Executable file
|
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
source $HOME/.poetry/env
|
||||
poetry add -vv $(grep -v ";" ./.venv/build_dependency.txt | grep -v "*" )
|
||||
# poetry add -vv $(grep -v ";" ./.venv/build_dependency.txt | grep -v "*" | sed 's/==/@^/' )
|
||||
# poetry export -f ./.venv/build_dependency.txt --dev | poetry run -- pip install -r /dev/stdin
|
||||
297
script/poetry_update.py
Executable file
297
script/poetry_update.py
Executable file
|
|
@ -0,0 +1,297 @@
|
|||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
import toml
|
||||
import ast
|
||||
from collections import OrderedDict, defaultdict
|
||||
from pathlib import Path
|
||||
import iscompatible
|
||||
|
||||
new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
sys.path.append(new_path)
|
||||
|
||||
from script import git_tool
|
||||
|
||||
_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
|
||||
"""
|
||||
config = git_tool.GitTool.get_project_config()
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
description='''\
|
||||
Update pip dependency in Poetry, clear pyproject.toml, search all dependencies
|
||||
from requirements.txt, search conflict version and generate a new list.
|
||||
Launch Poetry installation.
|
||||
''',
|
||||
epilog='''\
|
||||
'''
|
||||
)
|
||||
parser.add_argument('-d', '--dir', dest="dir", default="./",
|
||||
help="Path of repo to change remote, including submodule.")
|
||||
parser.add_argument('-f', '--force', action="store_true",
|
||||
help="Force create new list of dependency, ignore poetry.lock.")
|
||||
parser.add_argument('-v', '--verbose', action="store_true",
|
||||
help="More information in execution, show stats.")
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
def get_lst_requirements_txt():
|
||||
return list(Path(".").rglob("requirements.[tT][xX][tT]"))
|
||||
|
||||
|
||||
def get_lst_manifest_py():
|
||||
return list(Path(".").rglob("__manifest__.py"))
|
||||
|
||||
|
||||
def combine_requirements(config):
|
||||
"""
|
||||
Search all module and version in all requirements.txt file in this project.
|
||||
For each version, check compatibility and show warning with provenance file
|
||||
Generate requirements.txt to "./.venv/build_dependency.txt"
|
||||
:param config:
|
||||
:return:
|
||||
"""
|
||||
priority_filename_requirement = "odoo/requirements.txt"
|
||||
lst_sign = ("==", "!=", ">=", "<=", "<", ">", ";")
|
||||
lst_requirements = []
|
||||
ignore_requirements = ["sys_platform == 'win32'", "python_version < '3.7'"]
|
||||
dct_requirements = defaultdict(set)
|
||||
lst_requirements_file = get_lst_requirements_txt()
|
||||
lst_requirements_with_condition = set()
|
||||
dct_special_condition = defaultdict(list)
|
||||
dct_requirements_module_filename = defaultdict(list)
|
||||
for requirements_filename in lst_requirements_file:
|
||||
with open(requirements_filename, 'r') as f:
|
||||
for a in f.readlines():
|
||||
b = a.strip()
|
||||
if not b or b[0] == "#":
|
||||
continue
|
||||
|
||||
# Regroup requirement
|
||||
for sign in lst_sign:
|
||||
if sign in b:
|
||||
# Exception, some time the sign ; can be first, just check
|
||||
if sign != ";" and ";" in b and b.find(sign) > b.find(";"):
|
||||
module_name = b[:b.find(";")]
|
||||
else:
|
||||
module_name = b[:b.find(sign)]
|
||||
module_name = module_name.strip()
|
||||
# Special condition for ";", ignore it
|
||||
if ";" in b:
|
||||
for ignore_string in ignore_requirements:
|
||||
if ignore_string in b:
|
||||
break
|
||||
if ignore_string in b:
|
||||
break
|
||||
lst_requirements_with_condition.add(module_name)
|
||||
value = b[:b.find(";")].strip()
|
||||
dct_special_condition[module_name].append(b)
|
||||
else:
|
||||
value = b
|
||||
dct_requirements[module_name].add(value)
|
||||
filename = str(requirements_filename)
|
||||
dct_requirements_module_filename[value].append(filename)
|
||||
break
|
||||
else:
|
||||
dct_requirements[b].add(b)
|
||||
filename = str(requirements_filename)
|
||||
dct_requirements_module_filename[b].append(filename)
|
||||
lst_requirements.append(b)
|
||||
|
||||
dct_requirements = get_manifest_external_dependencies(dct_requirements)
|
||||
|
||||
dct_requirements_diff_version = {k: v for k, v in dct_requirements.items() if
|
||||
len(v) > 1}
|
||||
# dct_requirements_same_version = {k: v for k, v in dct_requirements.items() if
|
||||
# len(v) == 1}
|
||||
if config.verbose:
|
||||
# TODO show total repo to compare lst requirements
|
||||
print(f"Total requirements.txt {len(lst_requirements_file)}, "
|
||||
f"total module {len(lst_requirements)}, "
|
||||
f"unique module {len(dct_requirements)}, "
|
||||
f"module with different version {len(dct_requirements_diff_version)}.")
|
||||
|
||||
if dct_requirements_diff_version:
|
||||
# Validate compatibility
|
||||
for key, lst_requirement in dct_requirements_diff_version.items():
|
||||
result = None
|
||||
|
||||
lst_version_requirement = []
|
||||
for requirement in lst_requirement:
|
||||
if ".*" in requirement:
|
||||
requirement = requirement.replace(".*", "")
|
||||
result_number = iscompatible.parse_requirements(requirement)
|
||||
if not result_number:
|
||||
# Ignore empty version
|
||||
continue
|
||||
# Exception of missing feature in iscompatible
|
||||
# TODO support me in iscompatible lib
|
||||
no_version = result_number[0][1]
|
||||
if "b" in no_version:
|
||||
result_number[0] = result_number[0][0], no_version[
|
||||
:no_version.find("b")]
|
||||
elif not no_version[no_version.rfind(".") + 1:].isnumeric():
|
||||
result_number[0] = result_number[0][0], no_version[
|
||||
:no_version.rfind(".")]
|
||||
result_number = iscompatible.string_to_tuple(result_number[0][1])
|
||||
lst_version_requirement.append((requirement, result_number))
|
||||
# Check compatibility with all possibility
|
||||
is_compatible = True
|
||||
if len(lst_version_requirement) > 1:
|
||||
highest_value = sorted(lst_version_requirement, key=lambda tup: tup[1])[-1]
|
||||
for version_requirement in lst_version_requirement:
|
||||
is_compatible &= iscompatible.iscompatible(version_requirement[0],
|
||||
highest_value[1])
|
||||
if is_compatible:
|
||||
result = highest_value[0]
|
||||
else:
|
||||
# Find the requirements file and print the conflict
|
||||
# Take the version from Odoo by default, else take the more recent
|
||||
odoo_value = None
|
||||
for version_requirement in lst_version_requirement:
|
||||
filename_1 = dct_requirements_module_filename.get(
|
||||
version_requirement[0])
|
||||
if priority_filename_requirement in filename_1:
|
||||
odoo_value = version_requirement[0]
|
||||
break
|
||||
|
||||
if odoo_value:
|
||||
str_result_choose = f"Select {odoo_value} because from Odoo"
|
||||
result = odoo_value
|
||||
else:
|
||||
result = highest_value[0]
|
||||
str_result_choose = f"Select highest value {result}"
|
||||
str_versions = " VS ".join(
|
||||
[f"{a[0]} from {dct_requirements_module_filename.get(a[0])}" for
|
||||
a in lst_version_requirement])
|
||||
print(f"WARNING - Not compatible {str_versions} - "
|
||||
f"{str_result_choose}.")
|
||||
elif len(lst_version_requirement) == 1:
|
||||
result = lst_version_requirement[0][0]
|
||||
else:
|
||||
result = key
|
||||
|
||||
if result:
|
||||
dct_requirements[key] = set((result,))
|
||||
else:
|
||||
print(f"Internal error, missing result for {lst_requirement}.")
|
||||
|
||||
# Support ignored requirements
|
||||
lst_ignore = get_list_ignored()
|
||||
lst_ignored_key = []
|
||||
for key in dct_requirements.keys():
|
||||
for ignored in lst_ignore:
|
||||
if ignored == key:
|
||||
lst_ignored_key.append(key)
|
||||
for key in lst_ignored_key:
|
||||
del dct_requirements[key]
|
||||
|
||||
with open("./.venv/build_dependency.txt", 'w') as f:
|
||||
f.writelines([f"{list(a)[0]}\n" for a in dct_requirements.values()])
|
||||
|
||||
|
||||
def sorted_dependency_poetry(pyproject_filename):
|
||||
# Open pyproject.toml
|
||||
with open(pyproject_filename, 'r') as f:
|
||||
dct_pyproject = toml.load(f)
|
||||
|
||||
# Get dependencies and update list, sorted
|
||||
# [tool.poetry.dependencies]
|
||||
tool = dct_pyproject.get("tool")
|
||||
if tool:
|
||||
poetry = tool.get("poetry")
|
||||
if poetry:
|
||||
dependencies = poetry.get("dependencies")
|
||||
python_dependency = ("python", dependencies.get("python", ''))
|
||||
lst_dependency = [(k, v) for k, v in dependencies.items() if k != "python"]
|
||||
lst_dependency = sorted(lst_dependency, key=lambda tup: tup[0])
|
||||
poetry["dependencies"] = OrderedDict([python_dependency] + lst_dependency)
|
||||
|
||||
# Rewrite pyproject.toml
|
||||
with open(pyproject_filename, 'w') as f:
|
||||
toml.dump(dct_pyproject, f)
|
||||
|
||||
|
||||
def delete_dependency_poetry(pyproject_filename):
|
||||
# Open pyproject.toml
|
||||
with open(pyproject_filename, 'r') as f:
|
||||
dct_pyproject = toml.load(f)
|
||||
|
||||
# Get dependencies and update list, sorted
|
||||
# [tool.poetry.dependencies]
|
||||
tool = dct_pyproject.get("tool")
|
||||
if tool:
|
||||
poetry = tool.get("poetry")
|
||||
if poetry:
|
||||
dependencies = poetry.get("dependencies")
|
||||
python_dependency = ("python", dependencies.get("python", ''))
|
||||
poetry["dependencies"] = OrderedDict([python_dependency])
|
||||
|
||||
# Rewrite pyproject.toml
|
||||
with open(pyproject_filename, 'w') as f:
|
||||
toml.dump(dct_pyproject, f)
|
||||
|
||||
|
||||
def get_manifest_external_dependencies(dct_requirements):
|
||||
lst_manifest_file = get_lst_manifest_py()
|
||||
lst_dct_ext_depend = []
|
||||
for manifest_file in lst_manifest_file:
|
||||
with open(manifest_file, 'r') as f:
|
||||
contents = f.read()
|
||||
try:
|
||||
dct = ast.literal_eval(contents)
|
||||
except:
|
||||
_logger.error(f"File {manifest_file} contains error, skip.")
|
||||
continue
|
||||
ext_depend = dct.get("external_dependencies")
|
||||
if not ext_depend:
|
||||
continue
|
||||
python = ext_depend.get("python")
|
||||
if not python:
|
||||
continue
|
||||
for depend in python:
|
||||
requirement = dct_requirements.get(depend)
|
||||
if requirement:
|
||||
requirement.add(depend)
|
||||
else:
|
||||
dct_requirements[depend] = set([depend])
|
||||
|
||||
return dct_requirements
|
||||
|
||||
|
||||
def call_poetry_add_build_dependency():
|
||||
os.system("./script/poetry_add_build_dependency.sh")
|
||||
|
||||
|
||||
def get_list_ignored():
|
||||
with open("./ignore_requirements.txt", 'r') as f:
|
||||
lst_ignore_requirements = [a.strip() for a in f.readlines()]
|
||||
return lst_ignore_requirements
|
||||
|
||||
|
||||
def main():
|
||||
# repo = Repo(root_path)
|
||||
# lst_repo = get_all_repo()
|
||||
config = get_config()
|
||||
pyproject_toml_filename = f'{config.dir}pyproject.toml'
|
||||
|
||||
delete_dependency_poetry(pyproject_toml_filename)
|
||||
combine_requirements(config)
|
||||
if config.force and os.path.isfile("./poetry.lock"):
|
||||
os.remove("./poetry.lock")
|
||||
call_poetry_add_build_dependency()
|
||||
sorted_dependency_poetry(pyproject_toml_filename)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
82
script/pull_request_ERPLibre.py
Executable file
82
script/pull_request_ERPLibre.py
Executable file
|
|
@ -0,0 +1,82 @@
|
|||
#!./.venv/bin/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__)
|
||||
CST_EL_GITHUB_TOKEN = "EL_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
|
||||
"""
|
||||
config = GitTool.get_project_config()
|
||||
|
||||
# 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('--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_EL_GITHUB_TOKEN),
|
||||
help="GitHub token generated by user")
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
def main():
|
||||
config = get_config()
|
||||
github_token = config.github_token
|
||||
git_tool = GitTool()
|
||||
|
||||
if not github_token:
|
||||
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"),
|
||||
revision=a.get("revision"), clone_depth=a.get("clone_depth"))
|
||||
for a in lst_repo]
|
||||
|
||||
url_not_found_count = 0
|
||||
url_found_count = 0
|
||||
|
||||
i = 0
|
||||
total = len(lst_repo_organization)
|
||||
for repo in lst_repo_organization:
|
||||
i += 1
|
||||
print(f"Nb element {i}/{total} - {repo.project_name}")
|
||||
url = repo.url
|
||||
|
||||
status = git_tool.get_pull_request_repo(upstream_url=url,
|
||||
github_token=github_token,
|
||||
organization_name=organization_name)
|
||||
if status is False:
|
||||
url_not_found_count += 1
|
||||
else:
|
||||
url_found_count += len(status)
|
||||
|
||||
print(f"Repository not found: {url_not_found_count}")
|
||||
print(f"URL found: {url_found_count}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
117
script/repo_remove_auto_install.py
Executable file
117
script/repo_remove_auto_install.py
Executable file
|
|
@ -0,0 +1,117 @@
|
|||
#!./.venv/bin/python
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from git import Repo # pip install gitpython
|
||||
from git.exc import GitCommandError
|
||||
|
||||
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.")
|
||||
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=False)
|
||||
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]
|
||||
|
||||
lst_ignore_repo = ["odoo"]
|
||||
|
||||
i = 0
|
||||
total = len(lst_repo)
|
||||
branch_name = "12.0_dev"
|
||||
for repo in lst_repo_organization:
|
||||
i += 1
|
||||
print(f"\nNb element {i}/{total} - {repo.path}")
|
||||
is_checkout_branch = False
|
||||
|
||||
if repo.repo_name in lst_ignore_repo:
|
||||
print(f"Ignore {repo.repo_name}.")
|
||||
continue
|
||||
|
||||
git_repo = Repo(repo.relative_path)
|
||||
# Force checkout branch if exist
|
||||
try:
|
||||
git_repo.git.checkout(branch_name)
|
||||
is_checkout_branch = True
|
||||
except GitCommandError:
|
||||
try:
|
||||
git_repo.git.checkout("-t", f"{repo.organization}/{branch_name}")
|
||||
is_checkout_branch = True
|
||||
except GitCommandError:
|
||||
pass
|
||||
|
||||
has_change = get_manifest_external_dependencies(repo)
|
||||
|
||||
if has_change:
|
||||
if not is_checkout_branch:
|
||||
git_repo.git.checkout("-b", branch_name)
|
||||
# change branch, commit and push
|
||||
git_repo.git.add(".")
|
||||
git_repo.git.commit("-m", "Set all module auto_install at False")
|
||||
git_repo.git.push("-u", repo.organization, branch_name)
|
||||
|
||||
|
||||
def get_lst_manifest_py(relative_path):
|
||||
return list(Path(relative_path).rglob("__manifest__.py"))
|
||||
|
||||
|
||||
def get_manifest_external_dependencies(repo):
|
||||
has_change = False
|
||||
lst_manifest_file = get_lst_manifest_py(repo.relative_path)
|
||||
for manifest_file in lst_manifest_file:
|
||||
has_change_manifest = False
|
||||
with open(manifest_file, 'r') as f:
|
||||
lst_content = f.readlines()
|
||||
i = 0
|
||||
for content in lst_content:
|
||||
if "auto_install" in content and "True" in content:
|
||||
has_change_manifest = True
|
||||
has_change = True
|
||||
first_char_index = content.find("auto_install")
|
||||
index = content.find("True", first_char_index)
|
||||
lst_content[i] = content[:index] + "False" + content[index + 4:]
|
||||
i += 1
|
||||
|
||||
if has_change_manifest:
|
||||
print(f"Update file {manifest_file}")
|
||||
with open(manifest_file, 'w') as f:
|
||||
f.writelines(lst_content)
|
||||
|
||||
return has_change
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -6,6 +6,6 @@
|
|||
#EL_MANIFEST_DEV="./manifest/default.dev.xml"
|
||||
|
||||
# Update git-repo
|
||||
./venv/repo init -u http://git.erplibre.ca/ERPLibre -b $(git rev-parse --abbrev-ref HEAD) -m ${EL_MANIFEST_DEV}
|
||||
#./venv/repo sync --force-sync
|
||||
./venv/repo sync --force-sync -v
|
||||
./.venv/repo init -u http://git.erplibre.ca/ERPLibre -b $(git rev-parse --abbrev-ref HEAD) -m ${EL_MANIFEST_DEV}
|
||||
#./.venv/repo sync --force-sync
|
||||
./.venv/repo sync --force-sync -v
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
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 -v --force-sync -m ${EL_MANIFEST_DEV}
|
||||
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ${EL_MANIFEST_DEV}
|
||||
./.venv/repo sync -v --force-sync -m ${EL_MANIFEST_DEV}
|
||||
|
||||
kill ${DAEMON_PID}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
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_EXP}
|
||||
./venv/repo sync -v --force-sync -m ${EL_MANIFEST_EXP}
|
||||
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ${EL_MANIFEST_EXP}
|
||||
./.venv/repo sync -v --force-sync -m ${EL_MANIFEST_EXP}
|
||||
|
||||
kill ${DAEMON_PID}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
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_PROD}
|
||||
./venv/repo sync -v -m ${EL_MANIFEST_PROD}
|
||||
./.venv/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ${EL_MANIFEST_PROD}
|
||||
./.venv/repo sync -v -m ${EL_MANIFEST_PROD}
|
||||
|
||||
kill ${DAEMON_PID}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@
|
|||
#EL_MANIFEST_DEV="./manifest/default.dev.xml"
|
||||
|
||||
# Update git-repo
|
||||
./venv/repo init -u http://git.erplibre.ca/ERPLibre -b $(git rev-parse --abbrev-ref HEAD)
|
||||
#./venv/repo sync --force-sync
|
||||
./venv/repo sync -v
|
||||
./.venv/repo init -u http://git.erplibre.ca/ERPLibre -b $(git rev-parse --abbrev-ref HEAD)
|
||||
#./.venv/repo sync --force-sync
|
||||
./.venv/repo sync -v
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
url,path,revision,clone-depth
|
||||
https://github.com/ERPLibre/erplibre_addons.git,addons,,
|
||||
https://github.com/ERPLibre/erplibre_theme_addons.git,addons,,
|
||||
https://github.com/MathBenTech/development.git,addons,,
|
||||
https://github.com/MathBenTech/odoo-business-spending-management-quebec-canada.git,addons,12.0_sale_order_line_timesheet_attribution,
|
||||
https://github.com/MathBenTech/scrummer.git,addons,,
|
||||
|
|
@ -14,7 +15,7 @@ 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,12.0_partner_no_vat_improve_no_vat,
|
||||
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,,
|
||||
|
|
@ -81,8 +82,41 @@ https://github.com/OCA/timesheet.git,addons,12.0_support_project_agile_timesheet
|
|||
https://github.com/OCA/web.git,addons,,
|
||||
https://github.com/OCA/website.git,addons,12.0_dev,
|
||||
https://github.com/OCA/wms.git,addons,,
|
||||
https://github.com/odoo/odoo.git,.,12.0_feature_5_star_CRM,1
|
||||
https://github.com/odoo/odoo.git,.,ERPLibre/12.0,10
|
||||
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,12.0_remote_autoinstall,
|
||||
https://github.com/odooaktiv/product_rating_app.git,addons,,
|
||||
https://github.com/pledra/odoo-product-configurator.git,addons,,
|
||||
https://github.com/OCA/vertical-association.git,addons,,
|
||||
https://github.com/OCA/delivery-carrier.git,addons,,
|
||||
https://github.com/OCA/geospatial.git,addons,,
|
||||
https://github.com/OCA/sale-reporting.git,addons,,
|
||||
https://github.com/OCA/server-backend.git,addons,,
|
||||
https://github.com/OCA/ddmrp.git,addons,,
|
||||
https://github.com/OCA/vertical-hotel.git,addons,,
|
||||
https://github.com/OCA/rma.git,addons,,
|
||||
https://github.com/OCA/storage.git,addons,,
|
||||
https://github.com/OCA/crm.git,addons,,
|
||||
https://github.com/OCA/operating-unit.git,addons,,
|
||||
https://github.com/OCA/connector-interfaces.git,addons,,
|
||||
https://github.com/OCA/vertical-isp,addons,,
|
||||
https://github.com/OCA/fleet.git,addons,,
|
||||
https://github.com/OCA/connector-jira.git,addons,,
|
||||
https://github.com/OCA/connector-ecommerce.git,addons,,
|
||||
https://github.com/OCA/vertical-travel.git,addons,,
|
||||
https://github.com/OCA/website-cms.git,addons,,
|
||||
https://github.com/OCA/field-service.git,addons,,
|
||||
https://github.com/OCA/interface-github.git,addons,,
|
||||
https://github.com/obayit/odoo_dhtmlxgantt.git,addons,,
|
||||
https://github.com/camptocamp/odoo-cloud-platform.git,addons,,
|
||||
https://github.com/CybroOdoo/OpenHRMS.git,addons,,
|
||||
https://github.com/dhongu/deltatech.git,addons,,
|
||||
https://github.com/kinjal-sorathiya/Property-Management_odoo.git,addons,master,
|
||||
https://github.com/tegin/medical-fhir.git,addons,,
|
||||
https://github.com/odoomates/odooapps.git,addons,,
|
||||
https://github.com/it-projects-llc/odoo-saas-tools.git,addons,,
|
||||
https://github.com/itpp-labs/website-addons.git,addons,,
|
||||
https://github.com/itpp-labs/access-addons.git,addons,,
|
||||
https://github.com/itpp-labs/pos-addons.git,addons,,
|
||||
https://github.com/OCA/connector.git,addons,,
|
||||
|
|
|
|||
|
Loading…
Reference in a new issue