Resolve #133: Disabled "prompts" automatically for *Continuous Integration* systems

This commit is contained in:
Ivan Kravets
2015-03-05 14:48:56 +02:00
parent ae92cdedea
commit e0f2bcdeaf
7 changed files with 38 additions and 18 deletions

View File

@ -12,6 +12,8 @@ Release History
* Added
`Project Configuration <http://docs.platformio.org/en/latest/projectconf.html>`__
option named `envs_dir <http://docs.platformio.org/en/latest/projectconf.html#envs-dir>`__
* Disabled "prompts" automatically for *Continuous Integration* systems
(`issue #103 <https://github.com/ivankravets/platformio/issues/103>`_)
* Fixed firmware uploading for
`atmelavr <http://docs.platformio.org/en/latest/platforms/atmelavr.html#boards>`__
boards which work within ``usbtiny`` protocol

View File

@ -18,6 +18,19 @@ General
PlatformIO uses *General* environment variables for the common
operations/commands.
.. _envvar_CI:
CI
~~
PlatformIO handles ``CI`` variable which is setup by
`Continuous Integration <http://en.wikipedia.org/wiki/Continuous_integration>`_
(Travis, Circle and etc.) systems.
Currently, PlatformIO uses it to disable prompts.
In other words, ``CI=true`` automatically setup
:ref:`PLATFORMIO_SETTING_ENABLE_PROMPTS=false <envvar_PLATFORMIO_SETTING_ENABLE_PROMPTS>`.
.. _envvar_PLATFORMIO_HOME_DIR:
PLATFORMIO_HOME_DIR

View File

@ -32,11 +32,12 @@ application:
.. warning::
If you are going to run *PlatformIO* from **subprocess**, you **MUST
DISABLE** all prompts. It will allow you to avoid blocking.
There are 2 options:
There are a few options:
- using environment variable :ref:`PLATFORMIO_SETTING_ENABLE_PROMPTS=false <envvar_PLATFORMIO_SETTING_ENABLE_PROMPTS>`
- disable global setting via :ref:`platformio setting enable_prompts false <cmd_settings>`
command.
- using environment variable :ref:`PLATFORMIO_SETTING_ENABLE_PROMPTS=No <envvar_PLATFORMIO_SETTING_ENABLE_PROMPTS>`
- disable global setting ``enable_prompts`` via :ref:`cmd_settings` command
- masking under Continuous Integration system via environment variable
:ref:`CI=true <envvar_CI>`.
Please *choose one of* the following:

View File

@ -86,7 +86,9 @@ better.
.. note::
You can override these settings using :ref:`envvars`.
* The ``Yes`` value is equl to: ``True``, ``Y``, ``1``.
The value is not case sensetive.
* You can override these settings using :ref:`envvars`.
Examples
~~~~~~~~

View File

@ -101,6 +101,10 @@ def set_state_item(name, value):
def get_setting(name):
# disable prompts for Continuous Integration systems
if name == "enable_prompts" and getenv("CI", "").lower() == "true":
return False
_env_name = "PLATFORMIO_SETTING_%s" % name.upper()
if _env_name in environ:
return sanitize_setting(name, getenv(_env_name))

View File

@ -1,28 +1,24 @@
# Copyright (C) Ivan Kravets <me@ikravets.com>
# See LICENSE for details.
from os import environ
from click.testing import CliRunner
import pytest
from platformio import app
@pytest.fixture(scope="session")
def platformio_setup(request):
prev_settings = dict(
enable_telemetry=None,
enable_prompts=None
)
for key, value in prev_settings.iteritems():
prev_settings[key] = app.get_setting(key)
# disable temporary
if prev_settings[key]:
app.set_setting(key, False)
pioenvvars = ("ENABLE_PROMPTS", "ENABLE_TELEMETRY")
for v in pioenvvars:
environ["PLATFORMIO_SETTING_%s" % v] = "No"
def platformio_teardown():
# restore settings
for key, value in prev_settings.iteritems():
app.set_setting(key, value)
for v in pioenvvars:
_name = "PLATFORMIO_SETTING_%s" % v
if _name in environ:
del environ[_name]
request.addfinalizer(platformio_teardown)

View File

@ -38,6 +38,8 @@ basepython =
py27: python2.7
usedevelop = True
deps = pytest
setenv =
PLATFORMIO_SETTING_ENABLE_PROMPTS = False
commands =
{envpython} --version
pip install --egg http://sourceforge.net/projects/scons/files/latest/download