Global requirements for OpenStack
Go to file
Tony Breeds 8bc094cf9e Ignore empty requirements/constraints when building lower-constraints
Some constraints files[1] contain valid data but we want to ignore them
when generating a combined lower-constraints.txt, rather than erroring
out:

 [tony@thor requirements]$ time .tox/venv/bin/build-lower-constraints ../*/lower-constraints.txt > tjmaxx.txt
 Traceback (most recent call last):
   File ".tox/venv/bin/build-lower-constraints", line 10, in <module>
     sys.exit(main())
   File "/home/tony/projects/openstack/openstack/requirements/openstack_requirements/cmds/build_lower_constraints.py", line 71, in main
     merged = list(merge_constraints_sets(constraints_sets))
   File "/home/tony/projects/openstack/openstack/requirements/openstack_requirements/cmds/build_lower_constraints.py", line 53, in merge_constraints_sets
     val = max((c[0] for c in constraints), key=get_requirements_version)
   File "/home/tony/projects/openstack/openstack/requirements/openstack_requirements/cmds/build_lower_constraints.py", line 43, in get_requirements_version
     raise ValueError('could not find version for {}'.format(req))
 ValueError: could not find version for Requirement(package='', location='', specifiers='', markers='', comment='# flake8==2.5.5', extras=frozenset())

Let's just ignore comments in those files.

[1] http://git.openstack.org/cgit/openstack/zaqar/tree/lower-constraints.txt#n28

Change-Id: Ie347ab273a1b239d9d264704482d3202dc4e4c74
2018-07-05 09:48:55 +10:00
.zuul.d trigger requirements-check if the lower-constraints.txt file changes 2018-03-29 12:58:57 -04:00
babel-test Babel Integration tests 2016-04-24 17:21:18 -05:00
doc/source Fix bug URL for report a bug link 2017-08-27 10:42:10 +02:00
openstack_requirements Ignore empty requirements/constraints when building lower-constraints 2018-07-05 09:48:55 +10:00
playbooks skip virtualenv setup when there is already a virtualenv 2018-04-11 20:09:56 +00:00
tools Fix grep-all after we removed minimums from global-requirements 2018-06-29 09:25:37 +10:00
.gitignore add stestr directory to gitignore 2018-05-29 16:50:18 -05:00
.gitreview Added .gitreview 2012-08-06 17:05:39 -05:00
.stestr.conf Move requirements to the PTI 2018-05-21 14:58:48 -07:00
bindep.txt Update bindep.txt for ubuntu-bionic 2018-03-06 22:04:37 -05:00
blacklist.txt Allow Pygments in openstack/requirements 2018-05-17 14:00:54 +07:00
detail.py Trivial: Update pypi url to new url 2018-04-21 02:32:36 +00:00
global-requirements.txt Merge "Proposing distro for global-requirements" 2018-07-03 22:03:23 +00:00
lower-constraints-xfails.txt remove mitmproxy 2018-03-22 13:50:56 -05:00
lower-constraints.txt Merge "Proposing distro for global-requirements" 2018-07-03 22:03:23 +00:00
MANIFEST.in Make openstack.requirements installable. 2013-07-05 00:31:50 -04:00
projects.txt Merge "Add metalsmith to projects.txt" 2018-06-06 04:16:47 +00:00
README.rst add build-lower-constraints command 2018-07-02 11:29:34 -04:00
requirements.txt Updated from global requirements 2018-03-04 10:29:16 +00:00
setup.cfg add build-lower-constraints command 2018-07-02 11:29:34 -04:00
setup.py Updated from global requirements 2017-03-02 11:55:44 +00:00
test-requirements.txt Move requirements to the PTI 2018-05-21 14:58:48 -07:00
tox.ini change tox default to python3 2018-06-28 13:28:36 -04:00
update.py Move commands into cmds subdir. 2015-06-29 15:27:25 +12:00
upper-constraints-xfails.txt remove mitmproxy 2018-03-22 13:50:56 -05:00
upper-constraints.txt Merge "Proposing distro for global-requirements" 2018-07-03 22:03:23 +00:00

Global Requirements for OpenStack Projects

image

Why Global Requirements?

Refer to the Dependency Management section of the Project Team Guide for information about the history of the project and the files involved.

Tools

All the tools require openstack_requirements to be installed (e.g. in a Python virtualenv). They all have help, which is the authoritative documentation.

update-requirements

This will update the requirements in a project from the global requirements file found in .. Alternatively, pass --source to use a different global requirements file:

update-requirements --source /opt/stack/requirements /opt/stack/nova

Entries in all requirements files will have their versions updated to match the entries listed in the global requirements. Excess entries will cause errors in hard mode (the default) or be ignored in soft mode.

generate-constraints

Compile a constraints file showing the versions resulting from installing all of global-requirements.txt:

generate-constraints -p /usr/bin/python2.7 -p /usr/bin/python3 \
  -b blacklist.txt -r global-requirements.txt > new-constraints.txt

edit-constraints

Replace all references to a package in a constraints file with a new specification. Used by DevStack to enable git installations of libraries that are normally constrained:

edit-constraints oslo.db "-e file://opt/stack/oslo.db#egg=oslo.db"

build-lower-constraints

Combine multiple lower-constraints.txt files to produce a list of the highest version of each package mentioned in the files. This can be used to produce the "highest minimum" for a global lower constraints list (a.k.a., the "TJ Maxx").

To use the script, run:

$ tox -e venv -- build-lower-constraints input1.txt input2.txt

Where the input files are lower-constraints.txt or requirements.txt files from one or more projects.

If the inputs are requirements files, a lower constraints list for the requirements is produced. If the inputs are lower-constraints.txt, the output includes the highest version of each package referenced in the files.

Proposing changes

Look at the Review Guidelines and make sure your change meets them.

All changes to global-requirements.txt may dramatically alter the contents of upper-constraints.txt due to adding or removing transitive dependencies. As such you should always generate a diff against the current merged constraints, otherwise your change may fail if it is incompatible with the current tested constraints.

A change to the minimum specified vesion of a library in global-requirements.txt currenty requires adjusting the lower-constraints.txt file alongside with the new constrainted coinstallable version of minimums.

Regenerating involves five steps.

  1. Install the dependencies needed to compile various Python packages:

    sudo apt-get install $(bindep -b)
  2. Create a reference file (do this without your patch applied):

    generate-constraints -p /usr/bin/python2.7 -p /usr/bin/python3 \
      -b blacklist.txt -r global-requirements.txt > baseline
  3. Apply your patch and generate a new reference file:

    generate-constraints -p /usr/bin/python2.7 -p /usr/bin/python3 \
      -b blacklist.txt -r global-requirements.txt > updated
  4. Diff them:

    diff -p baseline updated
  5. Apply the patch to upper-constraints.txt. This may require some fiddling. edit-constraint can do this for you when the change does not involve multiple lines for one package.

Resources