From 6bfa948c5ccd04edc945eda687874746edade52a Mon Sep 17 00:00:00 2001 From: Bernat Gabor Date: Tue, 10 Jul 2018 11:13:28 +0100 Subject: [PATCH 1/2] Add a system overview section on the landing page #867 Includes a flow diagram of tox. --- changelog/867.doc.rst | 2 ++ doc/_static/custom.css | 9 ++++++ doc/img/tox_flow.png | Bin 0 -> 55665 bytes doc/index.rst | 66 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 changelog/867.doc.rst create mode 100644 doc/img/tox_flow.png diff --git a/changelog/867.doc.rst b/changelog/867.doc.rst new file mode 100644 index 000000000..3bb129af3 --- /dev/null +++ b/changelog/867.doc.rst @@ -0,0 +1,2 @@ +Add a system overview section on the index page that explains briefly how tox works - +by :user:`gaborbernat`. diff --git a/doc/_static/custom.css b/doc/_static/custom.css index 524487594..2ff81f21b 100644 --- a/doc/_static/custom.css +++ b/doc/_static/custom.css @@ -20,6 +20,15 @@ ul > li > p { } +ol > li { + text-align: justify; +} + +ol > li > p { + margin-bottom: 0; + +} + div.body code.descclassname { display: none } diff --git a/doc/img/tox_flow.png b/doc/img/tox_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..a06518ce7ebe720ef15ad7e4f289d6e2b3c835ce GIT binary patch literal 55665 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 literal 0 HcmV?d00001 diff --git a/doc/index.rst b/doc/index.rst index 7e5325b9f..9e91f085c 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -55,6 +55,72 @@ you'll note that it runs much faster because it keeps track of virtualenv detail and will not recreate or re-install dependencies. You also might want to checkout :doc:`examples` to get some more ideas. +System overview +--------------- + +.. figure:: img/tox_flow.png + :align: center + :width: 800px + + tox workflow diagram + +.. + The above image raw can be found and edited by using the toxdevorg Google role account under + https://www.lucidchart.com/documents/edit/5d921f32-f2e1-4618-a265-7f9e30503dc6/0 + +tox roughly follows the following phases: + +1. **configuration:** load ``tox.ini`` and merge it with options from the command line and the + operating system environment variables. +2. **packaging** (optional): create a source distribution of the current project by invoking + + .. code-block:: bash + + python setup.py sdist + + Note that for this operation the same Python environment will be used as the one tox is + installed into (therefore you need to make sure that it contains your build dependencies). + Skip this step for application projects that don't have a ``setup.py``. + +3. **environment** - for each tox environment (e.g. ``py27``, ``py36``) do: + + 1. **environment creation**: create a fresh environment, by default Python virtual environments + are used via the virtualenv_ project. tox will automatically + try to discover a valid Python interpreter version by using the environment name (e.g. ``py27`` + means Python 2.7 and the ``basepython`` configuration value) and the current operating system + ``PATH`` value. This step is done at first run only (or when :confval:`basepython` value + changes) and re-used at subsequent runs, unless the user requests explicitly recreating this + by passing in the ``-r`` flag. + + 2. **install** (optional): install the environment dependencies specified inside the + :confval:`deps` configuration section, and then the earlier packaged source distribution. + By default ``pip`` is used to install packages, however one can customise this via + :confval:`install_command`. Note ``pip`` will not update project dependencies (specified either + in the ``install_requires`` or the ``extras`` section of the ``setup.py``) if any version already + exists in the virtual environment; therefore we recommend to recreate your environments entirely + whenever your project dependencies change. + + 3. **commands**: run one by one the specified commands. Whenever the exit code of any of them + is not zero stop, and mark the environment failed. Note, starting a command with a single dash + character means ignore exit code. + +6. **report** print out a report of outcomes for each tox environment: + + .. code:: bash + + ____________________ summary ____________________ + py27: commands succeeded + ERROR: py36: commands failed + + Only if all environments finished with success will the exit code of tox be success. In this + case you'll also see the message ``congratulations :)``. + +tox will take care of environment isolation for you: it will strip away all operating system +environment variables not specified via :confval:`passenv`. Furthermore, it will also alter the +``PATH`` variable so that your commands resolve first and foremost within the current active +tox environment. It's possible to fallback to executables outside of this, however these need to +be explicitly enabled via the :confval:`whitelist_external` configuration variable. + Current features ------------------- From 9540e26528f27153cfeb074561546738033415f9 Mon Sep 17 00:00:00 2001 From: Bernat Gabor Date: Tue, 17 Jul 2018 17:59:37 +0100 Subject: [PATCH 2/2] PR review adjustment --- doc/index.rst | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index 9e91f085c..ef150da69 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -84,25 +84,24 @@ tox roughly follows the following phases: 3. **environment** - for each tox environment (e.g. ``py27``, ``py36``) do: - 1. **environment creation**: create a fresh environment, by default Python virtual environments - are used via the virtualenv_ project. tox will automatically - try to discover a valid Python interpreter version by using the environment name (e.g. ``py27`` - means Python 2.7 and the ``basepython`` configuration value) and the current operating system - ``PATH`` value. This step is done at first run only (or when :confval:`basepython` value - changes) and re-used at subsequent runs, unless the user requests explicitly recreating this - by passing in the ``-r`` flag. + 1. **environment creation**: create a fresh environment, by default virtualenv_ is used. tox will + automatically try to discover a valid Python interpreter version by using the environment name + (e.g. ``py27`` means Python 2.7 and the ``basepython`` configuration value) and the current + operating system ``PATH`` value. This is created at first run only to be re-used at subsequent + runs. If certain aspects of the project change, a re-creation of the environment is + automatically triggered. To force the recreation tox can be invoked with ``-r``/``--recreate``. 2. **install** (optional): install the environment dependencies specified inside the :confval:`deps` configuration section, and then the earlier packaged source distribution. By default ``pip`` is used to install packages, however one can customise this via :confval:`install_command`. Note ``pip`` will not update project dependencies (specified either in the ``install_requires`` or the ``extras`` section of the ``setup.py``) if any version already - exists in the virtual environment; therefore we recommend to recreate your environments entirely + exists in the virtual environment; therefore we recommend to recreate your environments whenever your project dependencies change. - 3. **commands**: run one by one the specified commands. Whenever the exit code of any of them - is not zero stop, and mark the environment failed. Note, starting a command with a single dash - character means ignore exit code. + 3. **commands**: run the specified commands in the specified order. Whenever the exit code of + any of them is not zero stop, and mark the environment failed. Note, starting a command with a + single dash character means ignore exit code. 6. **report** print out a report of outcomes for each tox environment: @@ -112,14 +111,14 @@ tox roughly follows the following phases: py27: commands succeeded ERROR: py36: commands failed - Only if all environments finished with success will the exit code of tox be success. In this + Only if all environments ran successfully tox will return exit code ``0`` (success). In this case you'll also see the message ``congratulations :)``. tox will take care of environment isolation for you: it will strip away all operating system environment variables not specified via :confval:`passenv`. Furthermore, it will also alter the ``PATH`` variable so that your commands resolve first and foremost within the current active -tox environment. It's possible to fallback to executables outside of this, however these need to -be explicitly enabled via the :confval:`whitelist_external` configuration variable. +tox environment. In general all executables in the path are available in ``commands``, but tox will +emit a warning if it was not explicitly allowed via :confval:`whitelist_external`. Current features -------------------