Skip to Content

Contributors

Re: 14.0 branches

On Tue, Oct 13, 2020 at 9:36 AM Pedro M. Baeza (Tecnativa)
<pedro.baeza@tecnativa.com> wrote:

> Stéphane, how to pin specific Python libraries versions in this workflow in the generated requirements.txt? We have several places with this requirement.

First a word about version pinning in general.

As much as possible we must avoid *strict* pins in OCA repos, because
it creates a risk of conflicts when installing other repos requiring
the same libraries, or downstream projects.
If there is a minimum version we need to support, we can say libN >=
x.y. And if there is a need to declare a maximum version, we can also
say "libN >= x.y, <= z.t" (see PEP 440 [3] for details).
We need to keep in mind that the more constraint we place (especially
on upper versions), the more risk we have to create downstream version
conflicts.

Of course the above applies to OCA repos only. In customer projects,
it is highly recommended to pin as strictly as possible, of course.

As to where these constraints have to be declared, it would be in
- setup.py, as it is already the case today
(external_dependencies_override [1]), because unfortunately Odoo does
not allow specifying constraints in the manifest (I opened the
discussion with Odoo without much success so far [2])
- or in test-requirements.txt if these are dependencies that cannot be
declared in the addon manifests for some reason

-sbi

[1] https://pypi.org/project/setuptools-odoo/2.5.10/#controlling-setuptools-odoo-behaviour
[2] https://github.com/odoo/odoo/pull/35800
[3] https://www.python.org/dev/peps/pep-0440/

by Stéphane Bidoul - 10:26 - 13 Oct 2020

Reference

  • 14.0 branches
    Dear fellow contributors,

    The 14.0 branches are being created as I post this message.

    They are initialized from our new template repository that was created during the OCA Days sprint back in May [1]. This template is essentially a refreshed version of the linter configurations we have in 13.0. This new mechanism should make it easier to apply improvements across all repos in the future.

    Special thanks to Jairo Llopis for his work on this topic.

    I plan to provide a detailed walkthrough of all this during my OCA Days talk next week [6]. In the meantime, here are a few important things to note.

    1. The project description in README.md must be updated manually by PSCs.

    Since our project-level README were manually maintained and updated over a long period, it is difficult to reliably extract the variable content from them. So they are created afresh, and PSC are invited to update the repo description within the dedicated section of README.md. Please do not change the header and footer manually.

    2. Travis installs dependencies with pip, including addons of other repos

    This mechanism (activated by MQT_DEP=PIP in .travis.yml) does not use oca_dependencies.txt nor requirement.txt. It relies on __manifest__.py to discover dependencies from the 'depends' and 'external_dependencies' keys. Dependent addons are installed from the OCA wheelhouse [3], and python libraries are installed from PyPI.

    The main expected benefits are:
    - less redundancy (the manifests are enough to discover dependencies)
    - reduce rippling effects to unrelated repos when an addon or python library does not install or misbehaves, since only the dependencies really needed by a repo are installed

    If a PR depends on an unmerged addon or PR, create a file named test-requirements.txt at the repo root containing a line like this:


    This mechanism has been tested on several repos in 13.0 and should be reliable. In case of problem, mention me in the PR and/or create an issue in OCA/maintainer-quality-tools repo. Alternatively, you can restore the old behaviour by removing the MQT_DEP=PIP line from .travis.yml. For the curious, the code of the new mechanism is in the OCA/m-q-t repo [4]

    3. If you need local changes to the dotfiles let's discuss them

    There are variables in the dot files, including .travis.yml [2]. To update them, the best way is to install copier [5], run "copier update" from the repo root, and answer the questions.

    If you need other changes, you can apply them locally to resolve urgent situations, but that may make updates harder. So please open an issue in [1] to discuss if changes need to be made to the template.

    As usual, don't hesitate to let me know of any issue.

    That's all for now, folks. Happy migration!

    -sbi


    --
    Stéphane Bidoul | @SBidoul
    Acsone sa/nv | http://acsone.eu/ | +32 2 888 3120

    by Stéphane Bidoul - 09:21 - 8 Oct 2020