Allow passing custom project configuration options to `platformio ci and platformio init commands using -O, --project-option`.

This commit is contained in:
Ivan Kravets
2016-09-01 15:14:38 +03:00
parent c51ac0489f
commit 838063b1b7
5 changed files with 37 additions and 32 deletions

View File

@ -70,6 +70,8 @@ PlatformIO 3.0
* Renamed ``platformio serialports`` command to ``platformio device``
* Build System: Attach custom Before/Pre and After/Post actions for targets
(`issue #542 <https://github.com/platformio/platformio/issues/542>`_)
* Allowed passing custom project configuration options to ``platformio ci``
and ``platformio init`` commands using ``-O, --project-option``.
* Print human-readable information when processing environments without
``-v, --verbose`` option
(`issue #721 <https://github.com/platformio/platformio/issues/721>`_)

View File

@ -49,20 +49,11 @@ Systems please follow to :ref:`ci` page.
.. note::
:ref:`cmd_ci` command is useful for library developers. It allows to build
different examples without creating own project per them. Also, is possible
to upload firmware to the target device. In this case, need to create
:ref:`projectconf` where specify "upload" :ref:`projectconf_targets`. Custom
upload port can be overridden with :ref:`projectconf_upload_port` option.
Then need to specify the path to this :ref:`projectconf` to
:option:`platformio ci --project-conf`. For example,
.. code-block:: ini
[env:uno]
platform = atmelavr
framework = arduino
targets = upload
; custom upload port
; upload_port = ...
to upload firmware to the target device. In this case, you need to pass
additional option ``--project-option="targets=upload"``. What is more,
you can specify custom upload port using
``--project-option="upload_port=<port>"`` option.
See :option:`platformio ci --project-option` for details.
Options
-------
@ -120,10 +111,19 @@ temporary directory within your operation system.
Don't remove :option:`platformio ci --build-dir` after build process.
.. option::
--project-conf
-P, --project-conf
Buid project using pre-configured :ref:`projectconf`.
.. option::
-O, --project-option
Pass additional options from :ref:`projectconf` to
:option:`platformio init --project-option` command. For example,
automatically install dependent libraries
``platformio ci --project-option="lib_deps=ArduinoJSON"`` or ignore specific
library ``platformio ci --project-option="lib_ignore=SomeLib"``.
.. option::
-v, --verbose

View File

@ -65,18 +65,17 @@ The full list with pre-configured boards is available here :ref:`platforms`.
.. option::
--ide
Initialise PlatformIO project for the specified IDE which can be imported later
Initialize PlatformIO project for the specified IDE which can be imported later
via "Import Project" functionality.
A list with supported IDE is available within ``platformio init --help`` command.
Also, please take a look at :ref:`ide` page.
.. option::
--enable-auto-uploading
-O, --project-option
If you initialise project with the specified
:option:`platformio init --board`, then *PlatformIO*
will create environment with enabled firmware auto-uploading.
Initialize project with additional options from :ref:`projectconf`. For example,
``platformio init --project-option="lib_deps=ArduinoJSON"``.
.. option::
--env-prefix
@ -104,7 +103,6 @@ Examples
platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
src - Put your source files here
lib - Put here project specific (private) libraries
Do you want to continue? [y/N]: y
Project has been successfully initialized!
Useful commands:
`platformio run` - process/build project from the current directory
@ -122,14 +120,13 @@ Examples
platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
src - Put your source files here
lib - Put here project specific (private) libraries
Do you want to continue? [y/N]: y
Project has been successfully initialized!
Useful commands:
`platformio run` - process/build project from the current directory
`platformio run --target upload` or `platformio run -t upload` - upload firmware to embedded board
`platformio run --target clean` - clean project (remove compiled files)
3. Initialise project for Arduino Uno
3. Initialize project for Arduino Uno
.. code-block:: bash
@ -143,7 +140,6 @@ Examples
platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
src - Put your source files here
lib - Put here project specific (private) libraries
Do you want to continue? [y/N]: y
Project has been successfully initialized!
Useful commands:
`platformio run` - process/build project from the current directory

View File

@ -68,6 +68,7 @@ def validate_path(ctx, param, value): # pylint: disable=unused-argument
resolve_path=True))
@click.option("--keep-build-dir", is_flag=True)
@click.option(
"-C",
"--project-conf",
type=click.Path(
exists=True,
@ -75,6 +76,7 @@ def validate_path(ctx, param, value): # pylint: disable=unused-argument
dir_okay=False,
readable=True,
resolve_path=True))
@click.option("-O", "--project-option", multiple=True)
@click.option("-v", "--verbose", is_flag=True)
@click.pass_context
def cli(ctx, # pylint: disable=R0913
@ -85,6 +87,7 @@ def cli(ctx, # pylint: disable=R0913
build_dir,
keep_build_dir,
project_conf,
project_option,
verbose):
if not src and getenv("PLATFORMIO_CI_SRC"):
@ -113,7 +116,11 @@ def cli(ctx, # pylint: disable=R0913
_exclude_contents(build_dir, exclude)
# initialise project
ctx.invoke(cmd_init, project_dir=build_dir, board=board)
ctx.invoke(
cmd_init,
project_dir=build_dir,
board=board,
project_option=project_option)
# process project
ctx.invoke(cmd_run, project_dir=build_dir, verbose=verbose)

View File

@ -58,14 +58,14 @@ def validate_boards(ctx, param, value): # pylint: disable=W0613
"-b", "--board", multiple=True, metavar="ID", callback=validate_boards)
@click.option(
"--ide", type=click.Choice(ProjectGenerator.get_supported_ides()))
@click.option("--enable-auto-uploading", is_flag=True)
@click.option("-O", "--project-option", multiple=True)
@click.option("--env-prefix", default="")
@click.pass_context
def cli(ctx, # pylint: disable=R0913
project_dir,
board,
ide,
enable_auto_uploading,
project_option,
env_prefix):
if project_dir == getcwd():
@ -92,8 +92,8 @@ def cli(ctx, # pylint: disable=R0913
init_base_project(project_dir)
if board:
fill_project_envs(ctx, project_dir, board, enable_auto_uploading,
env_prefix, ide is not None)
fill_project_envs(ctx, project_dir, board, project_option, env_prefix,
ide is not None)
if ide:
if not board:
@ -288,7 +288,7 @@ def init_cvs_ignore(project_dir):
def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
ctx, project_dir, board_ids, enable_auto_uploading, env_prefix,
ctx, project_dir, board_ids, project_option, env_prefix,
force_download):
installed_boards = PlatformManager().get_installed_boards()
content = []
@ -327,8 +327,8 @@ def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
content.append("framework = %s" % frameworks[0])
content.append("board = %s" % id_)
if enable_auto_uploading:
content.append("targets = upload")
if project_option:
content.extend(project_option)
if force_download and used_platforms:
_install_dependent_platforms(ctx, used_platforms)