1.. _west-release-notes:
2
3West Release Notes
4##################
5
6v1.4.0
7******
8
9Changes:
10
11- Allow appending data to configuration strings.
12  To append to a value for ``<name>``, type: ``west config -a <name> <value>``.
13
14- Add ``--untracked`` argument option to ``west manifest``.
15  Run ``west manifest --untracked`` in a workspace to print all files and
16  directories that are not tracked or managed by west.
17
18- Add ``--inactive`` argument option to ``west list`` to support printing inactive projects.
19
20- Support ``--active-only`` argument option for the ``west manifest --resolve`` and
21  ``west manifest --freeze`` commands.
22  This allows freezing workspaces with active project or group filters.
23
24API changes:
25
26- ``west.manifest.Manifest`` methods ``as_dict()``, ``as_frozen_dict()``, ``as_yaml()`` and
27  ``as_frozen_yaml()`` now have an optional ``active_only`` argument (defaults to ``False``)
28  to return an object containing all projects or only the active ones.
29
30v1.3.0
31******
32
33Major changes:
34
35- Added support for :ref:`west-aliases` commands.
36
37- Adopt the `pyproject TOML specification`_ for packaging.
38
39.. _pyproject TOML specification:
40   https://packaging.python.org/en/latest/specifications/pyproject-toml/
41
42Other changes:
43
44- Add cache support for submodules.
45
46- Decode manifest files as UTF-8 by default.
47
48- Pass unknown arguments for ``west diff`` and ``west status`` to underlying ``git`` commands.
49
50- Added ``--manifest`` argument to ``west diff`` to allow comparing
51  the current workspace to the manifest revisions.
52
53- Environment variables can be used with west forall
54  The following are defined:
55
56  - ``WEST_PROJECT_NAME``
57  - ``WEST_PROJECT_PATH``
58  - ``WEST_PROJECT_ABSPATH``
59  - ``WEST_PROJECT_REVISION``
60  - ``WEST_PROJECT_URL``
61  - ``WEST_PROJECT_REMOTE``
62
63- Added support for early argument ``-q/--quiet`` to reduce verbosity.
64
65- Added ``-o/--clone-opt`` argument to ``west init`` to pass to ``git clone``.
66
67- Support Python 3.13 and drop support for Python 3.8.
68
69- Prevent manifests from having projects in the ``.west`` directory.
70
71- Add NTFS workarounds and ``--rename-delay`` for ``west init``.
72
73- Print a stack trace when calling die in debug ``-vvv``.
74
75Bug fixes:
76
77- Use ``'backslashreplace'`` not to crash on malformed UTF from subprocess.
78
79- Fix handling in ``west diff`` for repositories with merge conflicts.
80  Additionally improve error printing and handle ``git diff`` return codes.
81
82- Fix ``--freeze`` and ``--resolve`` for the ``west manifest`` command when git submodules are used.
83
84v1.2.0
85******
86
87Major changes:
88
89- New ``west grep`` command for running a "grep tool" in your west workspace's
90  repositories. Currently, ``git grep``, `ripgrep`_, and standard ``grep`` are
91  supported grep tools.
92
93  To run this command to get ``git grep foo`` results from all cloned,
94  active repositories, run:
95
96  .. code-block:: console
97
98     west grep foo
99
100  Here are some other examples for running different grep commands
101  with ``west grep``:
102
103  .. list-table::
104
105     * - ``git grep --untracked``
106       - ``west grep --untracked foo``
107     * - ``ripgrep``
108       - ``west grep --tool ripgrep foo``
109     * - ``grep --recursive``
110       - ``west grep --tool grep foo``
111
112  To switch the default grep tool in your workspace, run the appropriate
113  command in this table:
114
115  .. list-table::
116
117     * - ``ripgrep``
118       - ``west config grep.tool ripgrep``
119     * - ``grep``
120       - ``west config grep.tool grep``
121
122  For more details, run ``west help grep``.
123
124Other changes:
125
126- The manifest file format now supports a ``description`` field in each
127  ``projects:`` element. See :ref:`west-manifests-projects` for examples.
128
129- ``west list --format`` now accepts ``{description}`` in the format
130  string, which prints the project's ``description:`` value.
131
132- ``west compare`` now always prints information about
133  :ref:`west-manifest-rev`.
134
135Bug fixes:
136
137- ``west init`` aborts if the destination directory already exists.
138
139API changes:
140
141- ``west.commands.WestCommand`` methods ``check_call()`` and
142  ``check_output()`` now take any kwargs that can be passed on
143  to the underlying subprocess function.
144
145- ``west.commands.WestCommand.run_subprocess()``: new wrapper
146  around ``subprocess.run()``. This could not be named ``run()``
147  because ``WestCommand`` already had a method by this name.
148
149- ``west.commands.WestCommand`` methods ``dbg()``, ``inf()``,
150  ``wrn()``, and ``err()`` now all take an ``end`` kwarg, which
151  is passed on to the call to ``print()``.
152
153- ``west.manifest.Project`` now has a ``description`` attribute,
154  which contains the parsed value of the ``description:`` field
155  in the manifest data.
156
157.. _ripgrep: https://github.com/BurntSushi/ripgrep#readme
158
159v1.1.0
160******
161
162Major changes:
163
164- ``west compare``: new command that compares the state of the
165  workspace against the manifest.
166
167- Support for a new ``manifest.project-filter`` configuration option.
168  See :ref:`west-config-index` for details. The ``west manifest --freeze``
169  and ``west manifest --resolve`` commands currently cannot be used when
170  this option is set. This restriction can be removed in a later release.
171
172- Project names which contain comma (``,``) or whitespace now generate
173  warnings. These warnings are errors if the new ``manifest.project-filter``
174  configuration option is set. The warnings may be promoted to errors in a
175  future major version of west.
176
177Other changes:
178
179- ``west forall`` now takese a ``--group`` argument that can be used
180  to restrict the command to only run in one or more groups. Run
181  ``west help forall`` for details.
182
183- All west commands will now output log messages from west API modules at
184  warning level or higher. In addition, the ``--verbose`` argument to west
185  can be used once to include informational messages, or twice to include
186  debug messages, from all commands.
187
188Bug fixes:
189
190- Various improvements to error messages, debug logging, and error handling.
191
192API changes:
193
194- ``west.manifest.Manifest.is_active()`` now respects the
195  ``manifest.project-filter`` configuration option's value.
196
197v1.0.1
198******
199
200Major changes:
201
202- Manifest schema version "1.0" is now available for use in this release. This
203  is identical to the "0.13" schema version in terms of features, but can be
204  used by applications that do not wish to use a "0.x" manifest "version:"
205  field. See :ref:`west-manifest-schema-version` for details on this feature.
206
207Bug fixes:
208
209- West no longer exits with a successful error code when sent an
210  interrupt signal. Instead, it exits with a platform-specific
211  error code and signals to the calling environment that the
212  process was interrupted.
213
214v1.0.0
215******
216
217Major changes in this release:
218
219- The :ref:`west-apis` are now declared stable. Any breaking changes will be
220  communicated by a major version bump from v1.x.y to v2.x.y.
221
222- West v1.0 no longer works with the Zephyr v1.14 LTS releases. This LTS has
223  long been obsoleted by Zephyr v2.7 LTS. If you need to use Zephyr v1.14, you
224  must use west v0.14 or earlier.
225
226- Like the rest of Zephyr, west now requires Python v3.8 or later
227
228- West commands no longer accept abbreviated command line arguments. For
229  example, you must now specify ``west update --keep-descendants`` instead of
230  using an abbreviation like ``west update --keep-d``. This is part of a change
231  applied to all of Zephyr's Python scripts' command-line interfaces. The
232  abbreviations were causing problems in practice when commands were updated to
233  add new options with similar names but different behavior to existing ones.
234
235Other changes:
236
237- All built-in west functions have stopped using ``west.log``
238
239- ``west update``: new ``--submodule-init-config`` option.
240  See commit `9ba92b05`_ for details.
241
242Bug fixes:
243
244- West extension commands that failed to load properly sometimes dumped stack.
245  This has been fixed and west now prints a sensible error message in this case.
246
247- ``west config`` now fails on malformed configuration option arguments
248  which lack a ``.`` in the option name
249
250API changes:
251
252- The west package now contains the metadata files necessary for some static
253  analyzers (such as `mypy`_) to auto-detect its type annotations.
254  See commit `d9f00e24`_ for details.
255
256- the deprecated ``west.build`` module used for Zephyr v1.14 LTS compatibility was
257  removed
258
259- the deprecated ``west.cmake`` module used for Zephyr v1.14 LTS compatibility was
260  removed
261
262- the ``west.log`` module is now deprecated. This module uses global state,
263  which can make it awkward to use it as an API which multiple different python
264  modules may rely on.
265
266- The :ref:`west-apis-commands` module got some new APIs which lay groundwork
267  for a future change to add a global verbosity control to a command's output,
268  and work to remove global state from the ``west`` package's API:
269
270  - New ``west.commands.WestCommand.__init__()`` keyword argument: ``verbosity``
271  - New ``west.commands.WestCommand`` property: ``color_ui``
272  - New ``west.commands.WestCommand`` methods, which should be used to print output
273    from extension commands instead of writing directly to sys.stdout or
274    sys.stderr: ``inf()``, ``wrn()``, ``err()``, ``die()``, ``banner()``,
275    ``small_banner()``
276  - New ``west.commands.VERBOSITY`` enum
277
278.. _9ba92b05: https://github.com/zephyrproject-rtos/west/commit/9ba92b054500d75518ff4c4646590bfe134db523
279.. _d9f00e24: https://github.com/zephyrproject-rtos/west/commit/d9f00e242b8cb297b56e941982adf231281c6bae
280.. _mypy: https://www.mypy-lang.org/
281
282v0.14.0
283*******
284
285Bug fixes:
286
287- West commands that were run with a bad local configuration file dumped stack
288  in a confusing way. This has been fixed and west now prints a sensible error
289  message in this case.
290
291- A bug in the way west looks for the zephyr repository was fixed. The bug
292  itself usually appeared when running an extension command like ``west build``
293  in a new workspace for the first time; this used to fail (just for the first
294  time, not on subsequent command invocations) unless you ran the command in
295  the workspace's top level directory.
296
297- West now prints sensible error messages when the user lacks permission to
298  open the manifest file instead of dumping stack traces.
299
300API changes:
301
302- The ``west.manifest.MalformedConfig`` exception type has been moved to the
303  ``west.configuration`` module
304
305- The ``west.manifest.MalformedConfig`` exception type has been moved to the
306  :ref:`west.configuration <west-apis-configuration>` module
307
308- The ``west.configuration.Configuration`` class now raises ``MalformedConfig``
309  instead of ``RuntimeError`` in some cases
310
311v0.13.1
312*******
313
314Bug fix:
315
316- When calling west.manifest.Manifest.from_file() when outside of a
317  workspace, west again falls back on the ZEPHYR_BASE environment
318  variable to locate the workspace.
319
320v0.13.0
321*******
322
323New features:
324
325- You can now associate arbitrary user data with the manifest repository
326  itself in the ``manifest: self: userdata:`` value, like so:
327
328  .. code-block:: YAML
329
330     manifest:
331       self:
332         userdata: <any YAML value can go here>
333
334Bug fixes:
335
336- The path to the manifest repository reported by west could be incorrect in
337  certain circumstances detailed in [issue
338  #572](https://github.com/zephyrproject-rtos/west/issues/572). This has been
339  fixed as part of a larger overhaul of path handling support in the
340  ``west.manifest`` API module.
341
342- The ``west.Manifest.ManifestProject.__repr__`` return value was fixed
343
344:ref:`API <west-apis>` changes:
345
346- ``west.configuration.Configuration``: new object-oriented interface to the
347  current configuration. This reflects the system, global, and workspace-local
348  configuration values, and allows you to read, write, and delete configuration
349  options from any or all of these locations.
350
351- ``west.commands.WestCommand``:
352
353  - ``config``: new attribute, returns a ``Configuration`` object or aborts the
354    program if none is set. This is always usable from within extension command
355    ``do_run()`` implementations.
356  - ``has_config``: new boolean attribute, which is ``True`` if and only if
357    reading ``self.config`` will abort the program.
358
359- The path handling in the ``west.manifest`` package has been overhauled in a
360  backwards-incompatible way. For more details, see commit
361  [56cfe8d1d1](https://github.com/zephyrproject-rtos/west/commit/56cfe8d1d1f3c9b45de3e793c738acd62db52aca).
362
363- ``west.manifest.Manifest.validate()``: this now returns the validated data as
364  a Python dict. This can be useful if the value passed to this function was a
365  str, and the dict is desired.
366
367- ``west.manifest.Manifest``: new:
368
369  - path attributes ``abspath``, ``posixpath``, ``relative_path``,
370    ``yaml_path``, ``repo_path``, ``repo_posixpath``
371  - ``userdata`` attribute, which contains the parsed value
372    from ``manifest: self: userdata:``, or is None
373  - ``from_topdir()`` factory method
374
375- ``west.manifest.ManifestProject``: new ``userdata`` attribute, which also
376  contains the parsed value from ``manifest: self: userdata:``, or is None
377
378- ``west.manifest.ManifestImportFailed``: the constructor can now take any
379  value; this can be used to reflect failed imports from a :ref:`map
380  <west-manifest-import-map>` or other compound value.
381
382- Deprecated configuration APIs:
383
384  The following APIs are now deprecated in favor of using a ``Configuration``
385  object. Usually this will be done via ``self.config`` from a ``WestCommand``
386  instance, but this can be done directly by instantiating a ``Configuration``
387  object for other usages.
388
389  - ``west.configuration.config``
390  - ``west.configuration.read_config``
391  - ``west.configuration.update_config``
392  - ``west.configuration.delete_config``
393
394v0.12.0
395*******
396
397New features:
398
399- West now works on the `MSYS2 <https://www.msys2.org/>`_ platform.
400
401- West manifest files can now contain arbitrary user data associated with each
402  project. See :ref:`west-project-userdata` for details.
403
404Bug fixes:
405
406- The ``west list`` command's ``{sha}`` format key has been fixed for
407  the manifest repository; it now prints ``N/A`` ("not applicable")
408  as expected.
409
410:ref:`API <west-apis>` changes:
411
412- The ``west.manifest.Project.userdata`` attribute was added to support
413  project user data.
414
415v0.11.1
416*******
417
418New features:
419
420- ``west status`` now only prints output for projects which have a nonempty
421  status.
422
423Bug fixes:
424
425- The manifest file parser was incorrectly allowing project names which contain
426  the path separator characters ``/`` and ``\``. These invalid characters are
427  now rejected.
428
429  Note: if you need to place a project within a subdirectory of the workspace
430  topdir, use the ``path:`` key. If you need to customize a project's fetch URL
431  relative to its remote ``url-base:``, use ``repo-path:``. See
432  :ref:`west-manifests-projects` for examples.
433
434- The changes made in west v0.10.1 to the ``west init --manifest-rev`` option
435  which selected the default branch name were leaving the manifest repository
436  in a detached HEAD state. This has been fixed by using ``git clone`` internally
437  instead of ``git init`` and ``git fetch``. See `issue #522`_ for details.
438
439- The ``WEST_CONFIG_LOCAL`` environment variable now correctly
440  overrides the default location, :file:`<workspace topdir>/.west/config`.
441
442- ``west update --fetch=smart`` (``smart`` is the default) now correctly skips
443  fetches for project revisions which are `lightweight tags`_ (it already
444  worked correctly for annotated tags; only lightweight tags were unnecessarily
445  fetched).
446
447Other changes:
448
449- The fix for issue #522 mentioned above introduces a new restriction. The
450  ``west init --manifest-rev`` option value, if given, must now be either a
451  branch or a tag. In particular, "pseudo-branches" like GitHub's
452  ``pull/1234/head`` references which could previously be used to fetch a pull
453  request can no longer be passed to ``--manifest-rev``. Users must now fetch
454  and check out such revisions manually after running ``west init``.
455
456:ref:`API <west-apis>` changes:
457
458- ``west.manifest.Manifest.get_projects()`` avoids incorrect results in
459  some edge cases described in `issue #523`_.
460
461- ``west.manifest.Project.sha()`` now works correctly for tag revisions.
462  (This applies to both lightweight and annotated tags.)
463
464.. _lightweight tags: https://git-scm.com/book/en/v2/Git-Basics-Tagging
465.. _issue #522: https://github.com/zephyrproject-rtos/west/issues/522
466.. _issue #523: https://github.com/zephyrproject-rtos/west/issues/523
467
468v0.11.0
469*******
470
471New features:
472
473- ``west update`` now supports ``--narrow``, ``--name-cache``, and
474  ``--path-cache`` options. These can be influenced by the ``update.narrow``,
475  ``update.name-cache``, and ``update.path-cache`` :ref:`west-config` options.
476  These can be used to optimize the speed of the update.
477- ``west update`` now supports a ``--fetch-opt`` option that will be passed to
478  the ``git fetch`` command used to fetch remote revisions when updating each
479  project.
480
481Bug fixes:
482
483- ``west update`` now synchronizes Git submodules in projects by default. This
484  avoids issues if the URL changes in the manifest file from when the submodule
485  was first initialized. This behavior can be disabled by setting the
486  ``update.sync-submodules`` configuration option to ``false``.
487
488Other changes:
489
490- the :ref:`west-apis-manifest` module has fixed docstrings for the Project
491  class
492
493v0.10.1
494*******
495
496New features:
497
498- The :ref:`west-init` command's ``--manifest-rev`` (``--mr``) option no longer
499  defaults to ``master``. Instead, the command will query the repository for
500  its default branch name and use that instead. This allows users to move from
501  ``master`` to ``main`` without breaking scripts that do not provide this
502  option.
503
504.. _west_0_10_0:
505
506v0.10.0
507*******
508
509New features:
510
511- The ``name`` key in a project's :ref:`submodules list
512  <west-manifest-submodules>` is now optional.
513
514Bug fixes:
515
516- West now checks that the manifest schema version is one of the explicitly
517  allowed values documented in :ref:`west-manifest-schema-version`. The old
518  behavior was just to check that the schema version was newer than the west
519  version where the ``manifest: version:`` key was introduced. This incorrectly
520  allowed invalid schema versions, like ``0.8.2``.
521
522Other changes:
523
524- A manifest file's ``group-filter`` is now propagated through an ``import``.
525  This is a change from how west v0.9.x handled this. In west v0.9.x, only the
526  top level manifest file's ``group-filter`` had any effect; the group filter
527  lists from any imported manifests were ignored.
528
529  Starting with west v0.10.0, the group filter lists from imported manifests
530  are also imported. For details, see :ref:`west-group-filter-imports`.
531
532  The new behavior will take effect if ``manifest: version:`` is not given or
533  is at least ``0.10``. The old behavior is still available in the top level
534  manifest file only with an explicit ``manifest: version: 0.9``. See
535  :ref:`west-manifest-schema-version` for more information on schema versions.
536
537  See `west pull request #482
538  <https://github.com/zephyrproject-rtos/west/pull/482>`_ for the motivation
539  for this change and additional context.
540
541v0.9.1
542******
543
544Bug fixes:
545
546- Commands like ``west manifest --resolve`` now correctly include group and
547  group filter information.
548
549Other changes:
550
551- West now warns if you combine ``import`` with ``group-filter``. Semantics for
552  this combination have changed starting with v0.10.x. See the v0.10.0 release
553  notes above for more information.
554
555.. _west_0_9_0:
556
557v0.9.0
558******
559
560.. warning::
561
562   The ``west config`` fix described below comes at a cost: any comments or
563   other manual edits in configuration files will be removed when setting a
564   configuration option via that command or the ``west.configuration`` API.
565
566.. warning::
567
568   Combining the ``group-filter`` feature introduced in this release with
569   manifest imports is discouraged. The resulting behavior has changed in west
570   v0.10.
571
572New features:
573
574- West manifests now support :ref:`west-manifest-submodules`. This allows you
575  to clone `Git submodules
576  <https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ into a west project
577  repository in addition to the project repository itself.
578
579- West manifests now support :ref:`west-manifest-groups`. Project groups can be
580  enabled and disabled to determine what projects are "active", and therefore
581  will be acted upon by the following commands: ``west update``, ``west list``,
582  ``west diff``, ``west status``, ``west forall``.
583
584- ``west update`` no longer updates inactive projects by default. It now
585  supports a ``--group-filter`` option which allows for one-time modifications
586  to the set of enabled and disabled project groups.
587
588- Running ``west list``, ``west diff``, ``west status``, or ``west forall``
589  with no arguments does not print information for inactive projects by
590  default. If the user specifies a list of projects explicitly at the command
591  line, output for them is included regardless of whether they are active.
592
593  These commands also now support ``--all`` arguments to include all
594  projects, even inactive ones.
595
596- ``west list`` now supports a ``{groups}`` format string key in its
597  ``--format`` argument.
598
599Bug fixes:
600
601- The ``west config`` command and ``west.configuration`` API did not correctly
602  store some configuration values, such as strings which contain commas. This
603  has been fixed; see `commit 36f3f91e
604  <https://github.com/zephyrproject-rtos/west/commit/36f3f91e270782fb05f6da13800f433a9c48f130>`_
605  for details.
606
607- A manifest file with an empty ``manifest: self: path:`` value is invalid, but
608  west used to let it pass silently. West now rejects such manifests.
609
610- A bug affecting the behavior of the ``west init -l .`` command was fixed; see
611  `issue #435 <https://github.com/zephyrproject-rtos/west/issues/435>`_.
612
613:ref:`API <west-apis>` changes:
614
615- added ``west.manifest.Manifest.is_active()``
616- added ``west.manifest.Manifest.group_filter``
617- added ``submodules`` attribute to ``west.manifest.Project``, which has
618  newly added type ``west.manifest.Submodule``
619
620Other changes:
621
622- The :ref:`west-manifest-import` feature now supports the terms ``allowlist``
623  and ``blocklist`` instead of ``whitelist`` and ``blacklist``, respectively.
624
625  The old terms are still supported for compatibility, but the documentation
626  has been updated to use the new ones exclusively.
627
628v0.8.0
629******
630
631This is a feature release which changes the manifest schema by adding support
632for a ``path-prefix:`` key in an ``import:`` mapping, along with some other
633features and fixes.
634
635- Manifest import mappings now support a ``path-prefix:`` key, which places
636  the project and its imported repositories in a subdirectory of the workspace.
637  See :ref:`west-manifest-ex3.4` for an example.
638- The west command line application can now also be run using ``python3 -m
639  west``. This makes it easier to run west under a particular Python
640  interpreter without modifying the :envvar:`PATH` environment variable.
641- :ref:`west manifest --path <west-manifest-path>` prints the absolute path to
642  west.yml
643- ``west init`` now supports an ``--mf foo.yml`` option, which initializes the
644  workspace using :file:`foo.yml` instead of :file:`west.yml`.
645- ``west list`` now prints the manifest repository's path using the
646  ``manifest.path`` :ref:`configuration option <west-config>`, which may differ
647  from the ``self: path:`` value in the manifest data. The old behavior is
648  still available, but requires passing a new ``--manifest-path-from-yaml``
649  option.
650- Various Python API changes; see :ref:`west-apis` for details.
651
652v0.7.3
653******
654
655This is a bugfix release.
656
657- Fix an error where a failed import could leave the workspace in an unusable
658  state (see [PR #415](https://github.com/zephyrproject-rtos/west/pull/415) for
659  details)
660
661v0.7.2
662******
663
664This is a bugfix and minor feature release.
665
666- Filter out duplicate extension commands brought in by manifest imports
667- Fix ``west.Manifest.get_projects()`` when finding the manifest repository by
668  path
669
670v0.7.1
671******
672
673This is a bugfix and minor feature release.
674
675- ``west update --stats`` now prints timing for operations which invoke a
676  subprocess, time spent in west's Python process for each project, and total
677  time updating each project.
678- ``west topdir`` always prints a POSIX style path
679- minor console output changes
680
681v0.7.0
682******
683
684The main user-visible feature in west 0.7 is the :ref:`west-manifest-import`
685feature. This allows users to load west manifest data from multiple different
686files, resolving the results into a single logical manifest.
687
688Additional user-visible changes:
689
690- The idea of a "west installation" has been renamed to "west workspace" in
691  this documentation and in the west API documentation. The new term seems to
692  be easier for most people to work with than the old one.
693- West manifests now support a :ref:`schema version
694  <west-manifest-schema-version>`.
695- The "west config" command can now be run outside of a workspace, e.g.
696  to run ``west config --global section.key value`` to set a configuration
697  option's value globally.
698- There is a new :ref:`west topdir <west-built-in-misc>` command, which
699  prints the root directory of the current west workspace.
700- The ``west -vv init`` command now prints the git operations being performed,
701  and their results.
702- The restriction that no project can be named "manifest" is now enforced; the
703  name "manifest" is reserved for the manifest repository, and is usable as
704  such in commands like ``west list manifest``, instead of ``west list
705  path-to-manifest-repository`` being the only way to say that
706- It's no longer an error if there is no project named "zephyr". This is
707  part of an effort to make west generally usable for non-Zephyr use cases.
708- Various bug fixes.
709
710The developer-visible changes to the :ref:`west-apis` are:
711
712- west.build and west.cmake: deprecated; this is Zephyr-specific functionality
713  and should never have been part of west. Since Zephyr v1.14 LTS relies on it,
714  it will continue to be included in the distribution, but will be removed
715  when that version of Zephyr is obsoleted.
716- west.commands:
717
718  - WestCommand.requires_installation: deprecated; use requires_workspace instead
719  - WestCommand.requires_workspace: new
720  - WestCommand.has_manifest: new
721  - WestCommand.manifest: this is now settable
722- west.configuration: callers can now identify the workspace directory
723  when reading and writing configuration files
724- west.log:
725
726  - msg(): new
727- west.manifest:
728
729  - The module now uses the standard logging module instead of west.log
730  - QUAL_REFS_WEST: new
731  - SCHEMA_VERSION: new
732  - Defaults: removed
733  - Manifest.as_dict(): new
734  - Manifest.as_frozen_yaml(): new
735  - Manifest.as_yaml(): new
736  - Manifest.from_file() and from_data(): these factory methods are more
737    flexible to use and less reliant on global state
738  - Manifest.validate(): new
739  - ManifestImportFailed: new
740  - ManifestProject: semi-deprecated and will likely be removed later.
741  - Project: the constructor now takes a topdir argument
742  - Project.format() and its callers are removed. Use f-strings instead.
743  - Project.name_and_path: new
744  - Project.remote_name: new
745  - Project.sha() now captures stderr
746  - Remote: removed
747
748West now requires Python 3.6 or later. Additionally, some features may rely on
749Python dictionaries being insertion-ordered; this is only an implementation
750detail in CPython 3.6, but it is part of the language specification as of
751Python 3.7.
752
753v0.6.3
754******
755
756This point release fixes an error in the behavior of the deprecated
757``west.cmake`` module.
758
759v0.6.2
760******
761
762This point release fixes an error in the behavior of ``west
763update --fetch=smart``, introduced in v0.6.1.
764
765All v0.6.1 users must upgrade.
766
767v0.6.1
768******
769
770.. warning::
771
772   Do not use this point release. Make sure to use v0.6.2 instead.
773
774The user-visible features in this point release are:
775
776- The :ref:`west-update` command has a new ``--fetch``
777  command line flag and ``update.fetch`` :ref:`configuration option
778  <west-config>`. The default value, "smart", skips fetching SHAs and tags
779  which are available locally.
780- Better and more consistent error-handling in the ``west diff``, ``west
781  status``, ``west forall``, and ``west update`` commands. Each of these
782  commands can operate on multiple projects; if a subprocess related to one
783  project fails, these commands now continue to operate on the rest of the
784  projects. All of them also now report a nonzero error code from the west
785  process if any of these subprocesses fails (this was previously not true of
786  ``west forall`` in particular).
787- The :ref:`west manifest <west-built-in-misc>` command also handles errors
788  better.
789- The :ref:`west list <west-built-in-misc>` command now works even when the
790  projects are not cloned, as long as its format string only requires
791  information which can be read from the manifest file. It still fails if the
792  format string requires data stored in the project repository, e.g. if it
793  includes the ``{sha}`` format string key.
794- Commands and options which operate on git revisions now accept abbreviated
795  SHAs. For example, ``west init --mr SHA_PREFIX`` now works. Previously, the
796  ``--mr`` argument needed to be the entire 40 character SHA if it wasn't a
797  branch or a tag.
798
799The developer-visible changes to the :ref:`west-apis` are:
800
801- west.log.banner(): new
802- west.log.small_banner(): new
803- west.manifest.Manifest.get_projects(): new
804- west.manifest.Project.is_cloned(): new
805- west.commands.WestCommand instances can now access the parsed
806  Manifest object via a new self.manifest property during the
807  do_run() call. If read, it returns the Manifest object or
808  aborts the command if it could not be parsed.
809- west.manifest.Project.git() now has a capture_stderr kwarg
810
811
812v0.6.0
813******
814
815- No separate bootstrapper
816
817  In west v0.5.x, the program was split into two components, a bootstrapper and
818  a per-installation clone. See `Multiple Repository Management in the v1.14
819  documentation`_ for more details.
820
821  This is similar to how Google's Repo tool works, and lets west iterate quickly
822  at first. It caused confusion, however, and west is now stable enough to be
823  distributed entirely as one piece via PyPI.
824
825  From v0.6.x onwards, all of the core west commands and helper classes are
826  part of the west package distributed via PyPI. This eliminates complexity
827  and makes it possible to import west modules from anywhere in the system,
828  not just extension commands.
829- The ``selfupdate`` command still exists for backwards compatibility, but
830  now simply exits after printing an error message.
831- Manifest syntax changes
832
833  - A west manifest file's ``projects`` elements can now specify their fetch
834    URLs directly, like so:
835
836    .. code-block:: yaml
837
838       manifest:
839         projects:
840           - name: example-project-name
841             url: https://github.com/example/example-project
842
843    Project elements with ``url`` attributes set in this way may not also have
844    ``remote`` attributes.
845  - Project names must be unique: this restriction is needed to support future
846    work, but was not possible in west v0.5.x because distinct projects may
847    have URLs with the same final pathname component, like so:
848
849    .. code-block:: yaml
850
851       manifest:
852         remotes:
853           - name: remote-1
854             url-base: https://github.com/remote-1
855           - name: remote-2
856             url-base: https://github.com/remote-2
857         projects:
858           - name: project
859             remote: remote-1
860             path: remote-1-project
861           - name: project
862             remote: remote-2
863             path: remote-2-project
864
865    These manifests can now be written with projects that use ``url``
866    instead of ``remote``, like so:
867
868    .. code-block:: yaml
869
870       manifest:
871         projects:
872           - name: remote-1-project
873             url: https://github.com/remote-1/project
874           - name: remote-2-project
875             url: https://github.com/remote-2/project
876
877- The ``west list`` command now supports a ``{sha}`` format string key
878
879- The default format string for ``west list`` was changed to ``"{name:12}
880  {path:28} {revision:40} {url}"``.
881
882- The command ``west manifest --validate`` can now be run to load and validate
883  the current manifest file, among other error-handling fixes related to
884  manifest parsing.
885
886- Incompatible API changes were made to west's APIs. Further changes are
887  expected until API stability is declared in west v1.0.
888
889  - The ``west.manifest.Project`` constructor's ``remote`` and ``defaults``
890    positional arguments are now kwargs. A new ``url`` kwarg was also added; if
891    given, the ``Project`` URL is set to that value, and the ``remote`` kwarg
892    is ignored.
893
894  - ``west.manifest.MANIFEST_SECTIONS`` was removed. There is only one section
895    now, namely ``manifest``. The *sections* kwargs in the
896    ``west.manifest.Manifest`` factory methods and constructor were also
897    removed.
898
899  - The ``west.manifest.SpecialProject`` class was removed. Use
900    ``west.manifest.ManifestProject`` instead.
901
902
903v0.5.x
904******
905
906West v0.5.x is the first version used widely by the Zephyr Project as part of
907its v1.14 Long-Term Support (LTS) release. The `west v0.5.x documentation`_ is
908available as part of the Zephyr's v1.14 documentation.
909
910West's main features in v0.5.x are:
911
912- Multiple repository management using Git repositories, including self-update
913  of west itself
914- Hierarchical configuration files
915- Extension commands
916
917Versions Before v0.5.x
918**********************
919
920Tags in the west repository before v0.5.x are prototypes which are of
921historical interest only.
922
923.. _Multiple Repository Management in the v1.14 documentation:
924   https://docs.zephyrproject.org/1.14.0/guides/west/repo-tool.html
925
926.. _west v0.5.x documentation:
927   https://docs.zephyrproject.org/1.14.0/guides/west/index.html
928