6
6
accounting of development history please inspect the source history
11
Plainbox 0.25 (unreleased)
12
^^^^^^^^^^^^^^^^^^^^^^^^^^
14
* `plainbox startprovider` may now be run with an `--empty` option that
15
generates very basic provider that has only `./manage.py` file. Use this
16
option when you know your way around, and you want to quickly start
17
developing plainbox jobs without any other jobs polluting your provider.
19
* Plainbox now supports a new flag :ref:`explicit-fail
20
<job_flag_explicit_fail>`. Using that flag makes manual failing of the job
21
require a comment to be entered. This flag naturally makes sense only for
22
'manual', 'user-interact-verify', 'user-verify' jobs.
29
* Add a dependency on guacamole.
31
* Plainbox ignores trailing garbage after EOF while reading IOLog zip.
32
See https://bugs.python.org/issue24301.
34
* Session assistant now preserves job ordering from test plans.
36
* Session assistant ignores calls to finalize_session when the session has
37
already been finalized. This lets application call finalization freely
38
without having to keep that state information in them.
40
* Plainbox expands the SessionAssistant initializer API
42
**app_version**: so that we can use this implicitly in some places,
43
e.g. don't resumes sessions created by future versions, etc.
44
**api_version**: so that we can change usage expectations over time
45
but let applications stay compatible by using a fixed API version.
46
This can be changed to a __new__ call that returns a versioned
47
SA class instead of doing if-then-else magic in all the places.
48
**api_flags**: so that we can allow applications to opt-into optional
49
features and so that we can adjust expectations accordingly. This
50
will also allow us to easily compare applications for feature
53
For now all new arguments have sane defaults. Once all applications are
54
patched the defaults will go away.
56
* Plainbox now supports a new way to express the estimated duration of
57
:ref:`jobs <job_estimated_duration>` and
58
:ref:`test plans <testplan_estimated_duration>` that is much easier for
59
humans to read and write. Instead of having to mentally parse ``3725`` you
60
can just write ``1h 2m 5s`` or ``1h:2m:5s``.
62
* Plainbox now supports an *after* job ordering constraint. This constraint is
63
very similar to the existing *depends* constraint, except that the outcome of
64
the referenced job is not important. In practical terms, even if one job runs
65
and fails, another job that runs *after* it, will run.
67
This constraint is immediately useful to all *attachment* jobs that want to
68
collect a log file from some other operation, regardless of the outcome of
69
that operation. In the past those would have to be carefully placed in the
70
test plan, in the right order. By using the *after* constraint, the
71
attachment jobs will automatically pull in their log-generating cousins and
72
will run at the right time no matter what happens.
74
* Plainbox now allows more than one resource object to be used in a resource
75
expression. This can be used to construct resource expressions that combine
76
facts from multiple sources (e.g. the manifest resource with something else).
78
As an **important** implementation limitation please remember that the
79
complexity of such resource programs is proportional to the product of the
80
number of resource objects associated with each resource in an expression.
81
In practice it is not advised to use resource objects with more than a few
82
resource records associated with them. This is just an implementation detail
83
that can be lifted in subsequent versions.
85
Examples of the usage of this feature can be found in the TPM (Trusted
86
Platform Module) provider.
88
* https://launchpad.net/plainbox/+milestone/0.24
95
* Mandatory jobs - jobs may be marked as mandatory - this way they are always
96
executed - useful for jobs that get information about hardware. Use
97
mandatory_include test plan field to mark the jobs you want always to be run.
99
* Bootstrapping jobs - applications may run jobs that generate other jobs prior
100
to the execution of the 'normal' list of jobs. Use bootstrap_include field of
101
the test plan to list all jobs that generate other jobs.
103
Read more about mandatory and bootstrapping jobs in
104
:doc:`plainbox test plan unit <manpages/plainbox-test-plan-units>`
106
* Plainbox now supports a new flag :ref:`has-leftovers
107
<job_flag_has_leftovers>`, that governs the behavior of leftover file
108
detection feature. When this flag is added to a job definition files left
109
over by the execution of a command are silently ignored.
111
* Plainbox now supports a new flag on job definitions :ref:`simple
112
<job_flag_simple>` that is meant to cut the boiler-plate from fully automated
113
test cases. When this flag is added to a job definition then many otherwise
114
mandatory or recommended features are disabled.
122
This version is under active development. The details in the milestone page
123
may vary before the release is finalized.
125
This is a periodic release, containing both bug fixes and some minor new
126
features. Details are available at:
128
* https://launchpad.net/plainbox/+milestone/0.18
131
API changes were not documented for this release. We are working on a new
132
system that will allow us to automatically generate API changes between
139
This is an (out-of-cycle) periodic release, containing both bug fixes and some
140
minor new features. Details are available at:
142
* https://launchpad.net/plainbox/+milestone/0.17
145
API changes were not documented for this release. We are working on a new
146
system that will allow us to automatically generate API changes between
147
releases without the added manual maintenance burden.
154
This is a periodic release, containing both bug fixes and some minor new
155
features. Details are available at:
157
* https://launchpad.net/plainbox/+milestone/0.16
160
API changes were not documented for this release. We are working on a new
161
system that will allow us to automatically generate API changes between
162
releases without the added manual maintenance burden.
169
This is a periodic release, containing both bug fixes and some minor new
170
features. Details are available at:
172
* https://launchpad.net/plainbox/+milestone/0.15
175
API changes were not documented for this release. We are working on a new
176
system that will allow us to automatically generate API changes between
177
releases without the added manual maintenance burden.
184
This is a periodic release, containing both bug fixes and some minor new
185
features. Details are available at:
187
* https://launchpad.net/plainbox/+milestone/0.14
190
API changes were not documented for this release. We are working on a new
191
system that will allow us to automatically generate API changes between
192
releases without the added manual maintenance burden.
199
This is a periodic release, containing both bug fixes and some minor new
200
features. Details are available at:
202
* https://launchpad.net/plainbox/+milestone/0.13
205
API changes were not documented for this release. We are working on a new
206
system that will allow us to automatically generate API changes between
207
releases without the added manual maintenance burden.
214
This is a periodic release, containing both bug fixes and some minor new
215
features. Details are available at:
217
* https://launchpad.net/plainbox/+milestone/0.12
220
API changes were not documented for this release. We are working on a new
221
system that will allow us to automatically generate API changes between
222
releases without the added manual maintenance burden.
229
This is a periodic release, containing both bug fixes and some minor new
230
features. Details are available at:
232
* https://launchpad.net/plainbox/+milestone/0.11
235
API changes were not documented for this release. We are working on a new
236
system that will allow us to automatically generate API changes between
237
releases without the added manual maintenance burden.
244
This is a periodic release, containing both bug fixes and some minor new
245
features. Details are available at:
247
* https://launchpad.net/plainbox/+milestone/0.10
250
API changes were not documented for this release. We are working on a new
251
system that will allow us to automatically generate API changes between
252
releases without the added manual maintenance burden.
259
This is a periodic release, containing both bug fixes and some minor new
260
features. Details are available at:
262
* https://launchpad.net/plainbox/+milestone/0.9
265
API changes were not documented for this release. We are working on a new
266
system that will allow us to automatically generate API changes between
267
releases without the added manual maintenance burden.
274
This is a periodic release, containing both bug fixes and some minor new
275
features. Details are available at:
277
* https://launchpad.net/plainbox/+milestone/0.8
280
API changes were not documented for this release. We are working on a new
281
system that will allow us to automatically generate API changes between
282
releases without the added manual maintenance burden.
289
This is a periodic release, containing both bug fixes and some minor new
290
features. Details are available at:
292
* https://launchpad.net/plainbox/+milestone/0.7
295
API changes were not documented for this release. We are working on a new
296
system that will allow us to automatically generate API changes between
297
releases without the added manual maintenance burden.
304
This is a periodic release, containing both bug fixes and some minor new
305
features. Details are available at:
307
* https://launchpad.net/plainbox/+milestone/0.6
310
API changes were not documented for this release. We are working on a new
311
system that will allow us to automatically generate API changes between
312
releases without the added manual maintenance burden.
319
14
This is a maintenance release of the 0.5 series.
376
* Plainbox now remembers the base directory (aka location) associated with each
71
* PlainBox now remembers the base directory (aka location) associated with each
377
72
provider. This is available as and
378
73
:attr:`plainbox.impl.secure.providers.v1.Provider1.base_dir`
379
* The :class:`plainbox.impl.commands.checkbox.CheckboxInvocationMixIn` gained a
74
* The :class:`plainbox.impl.commands.checkbox.CheckBoxInvocationMixIn` gained a
380
75
new required argument to pass the configuration object around. This is
381
76
required to fix bug https://bugs.launchpad.net/checkbox/+bug/1298166. This
382
77
API change is backwards incompatible and breaks checkbox-ng << 0.3.
383
* Plainbox now offers the generic extensibility point for build systems for
78
* PlainBox now offers the generic extensibility point for build systems for
384
79
provider executables. Entry points for classes implementing the
385
80
:class:`plainbox.abc.IBuildSystem` interface can be registered in the
386
81
``plainbox.buildsystems`` pkg-resources entry point.
387
* Plainbox has a better job validation subsystem. Job validation parameters
82
* PlainBox has a better job validation subsystem. Job validation parameters
388
83
(eventually passed to
389
:meth:`plainbox.impl.job.CheckboxJobValidator.validate()`) can be set on the
84
:meth:`plainbox.impl.job.CheckBoxJobValidator.validate()`) can be set on the
390
85
provider loader class and they will propagate across the stack. Along with
391
86
more fine-tuned controls for strict validation and deprecated fields
392
validation this offers tools better ways to discover potential problems.
87
validation this offers tools better ways to discover potential problems.
397
92
First working release of the 0.5 series, 0.5 was missing one critical patch and
398
93
didn't work. Basically, The tag was applied on the wrong revision.
406
* Plainbox is now a better development tool for test authors. With the new
101
* PlainBox is now a better development tool for test authors. With the new
407
102
'plainbox startprovider' command it is easy to bootstrap development of
408
103
third party test collections. This is further explained in the new
409
104
:ref:`tutorial`. The template is described in :doc:`provider template
489
184
API changes (Job Definitions)
490
185
.............................
492
* Plainbox now offers two new properties for identifying (naming) job
187
* PlainBox now offers two new properties for identifying (naming) job
493
188
definitions, :meth:`plainbox.impl.job.JobDefinition.id` and
494
189
:meth:`plainbox.impl.job.JobDefinition.partial_id`. The ``id`` property is
495
190
the full, effective identifier composed of ``partial_id`` and
496
191
``provider.namespace``, with the C++ scope resulution operator, ``::``
497
192
joining both into one string. The ``partial_id`` field is loaded from the
498
193
``id`` key in RFC822-like job definition syntax and is the part without the
499
name-space. Plainbox now uses the ``id`` everywhere where ``name`` used to be
194
name-space. PlainBox now uses the ``id`` everywhere where ``name`` used to be
500
195
used before. If the ``id`` field (which defines ``partial_id`` is not present
501
196
in a RFC822 job definition then it defaults to ``name`` making this change
502
197
fully backwards compatible.
503
198
* The :meth:`plainbox.impl.job.JobDefinition.name` property is now deprecated.
504
199
It is still available but is has been entirely replaced by the new ``id`` and
505
200
``partial_id`` properties. It will be removed as a property in the next
507
* Plainbox now offers the new :meth:`plainbox.impl.job.JobDefinition.summary`
202
* PlainBox now offers the new :meth:`plainbox.impl.job.JobDefinition.summary`
508
203
which is like a short, one line description of the provider. It should be
509
204
used whenever a job definition needs to be listed (in user interfaces,
510
205
reports, etc). It can be translated and a localized version is available as
511
206
:meth:`plainbox.impl.job.JobDefinition.tr_summary()`
512
* Plainbox now offers a localized version of a job description as
207
* PlainBox now offers a localized version of a job description as
513
208
:meth:`plainbox.impl.job.JobDefinition.tr_description()`.
515
210
API changes (White Lists)
516
211
.........................
518
* Plainbox now offers new and improved APIs for loading whitelists
213
* PlainBox now offers new and improved APIs for loading whitelists
519
214
:meth:`plainbox.impl.secure.qualifiers.WhiteList.from_string()` and
520
215
:meth:`plainbox.impl.secure.qualifiers.WhiteList.from_file()`.
521
* Plainbox now tracks the origin of whitelist, knowing where they were defined
216
* PlainBox now tracks the origin of whitelist, knowing where they were defined
522
217
in. Origin is available as
523
218
:meth:`plainbox.impl.secure.qualifiers.WhiteList.origin`
524
* Plainbox can now optionally store and use the implicit name-space of a
219
* PlainBox can now optionally store and use the implicit name-space of a
525
220
WhiteList objects. This name space will be used to qualify all the patterns
526
221
that don't use the scope resolution operator ``::``.
527
222
The implicit name-space is available as
530
225
API changes (Providers)
531
226
.......................
533
* Plainbox can validate providers, jobs and whitelists better than before. In
228
* PlainBox can validate providers, jobs and whitelists better than before. In
534
229
particular, broken providers are now verbosely ignored. This is implemented
535
230
as a number of additional validators on
536
231
:class:`plainbox.impl.secure.providers.v1.Provider1Definition`
537
* Plainbox can now enumerate all the executables of a provider
232
* PlainBox can now enumerate all the executables of a provider
538
233
:meth:`plainbox.abc.IProvider1.get_all_executables()`
539
* Plainbox now offers new APIs for applications to load as much of provider
234
* PlainBox now offers new APIs for applications to load as much of provider
540
235
content as possible, without stopping on the first encountered problem.
541
236
:meth:`plainbox.impl.secure.providers.v1.Provider1.load_all_jobs()`
542
237
* The ``Provider1.load_jobs()`` method has been removed. It was only used
543
238
internally by the class itself. Identical functionality is now offered by
544
239
:class:`plainbox.impl.secure.plugins.FsPlugInCollection` and
545
240
:class:`plainbox.impl.secure.providers.v1.JobDefinitionPlugIn`.
546
* Plainbox now associates a gettext domain with each provider. This
241
* PlainBox now associates a gettext domain with each provider. This
547
242
information is available both in
548
243
:attr:`plainbox.impl.secure.providers.v1.Provider1Definition.gettext_domain`
549
244
and :attr:`plainbox.impl.secure.providers.v1.Provider1.gettext_domain`
550
* Plainbox now derives a namespace from the name of the provider. The namespace
245
* PlainBox now derives a namespace from the name of the provider. The namespace
551
246
is defined as the part of the provider name up to the colon. For example
552
247
provider name ``2013.com.canonical.ceritifaction:resources`` defines provider
553
248
namespace ``2013.com.canonical.certification``. The computed namespace is
554
249
available as :meth:`plainbox.impl.secure.providers.v1.Provider1.namespace`
555
* Plainbox now offers a localized version of the provider description string as
250
* PlainBox now offers a localized version of the provider description string as
556
251
:meth:`plainbox.impl.secure.providers.v1.Provider1.tr_description()`
557
* Plainbox now passes the provider namespace to both whitelist and job
252
* PlainBox now passes the provider namespace to both whitelist and job
558
253
definition loaders, thus making them fully aware of the namespace they come
560
255
* The implementation of various directory properties on the
561
256
:class:`plainbox.impl.secure.providers.v1.Provider1` class have changed. They
562
257
are now explicitly configurable and are not derived from the now-gone
563
``location`` property. This affects
258
``location`` property. This affects
564
259
:meth:`plainbox.impl.secure.providers.v1.Provider1.jobs_dir`,
565
260
:meth:`plainbox.impl.secure.providers.v1.Provider1.whitelists_dir`,
566
261
:meth:`plainbox.impl.secure.providers.v1.Provider1.data_dir`,
603
298
API changes (Qualifiers)
604
299
........................
606
* Plainbox now has additional APIs that correctly preserve order of jobs
301
* PlainBox now has additional APIs that correctly preserve order of jobs
607
302
selected by a :term:`WhiteList`, see:
608
303
:func:`plainbox.impl.secure.qualifiers.select_jobs`.
609
* Plainbox has new APIs for converting any qualifier into a list of primitive
304
* PlainBox has new APIs for converting any qualifier into a list of primitive
610
305
(non-divisible) qualifiers that express the same selection,
611
306
:meth:`plainbox.abc.IJobQualifier.get_primitive_qualifiers()` and
612
307
:meth:`plainbox.abc.IJobQualifier.is_primitive()`.
613
* Plainbox has new APIs for qualifiers to uniformly include and exclude jobs
308
* PlainBox has new APIs for qualifiers to uniformly include and exclude jobs
614
309
from the selection list. This is implemented as a voting system described in
615
310
the :meth:`plainbox.abc.IJobQualifier.get_vote()` method.
616
* Plainbox has new APIs for creating almost arbitrary job qualifiers out of the
311
* PlainBox has new APIs for creating almost arbitrary job qualifiers out of the
617
312
:class:`plainbox.impl.secure.qualifiers.FieldQualifier` and
618
313
:class:`plainbox.impl.secure.qualifiers.IMatcher` implementations such as
619
314
:class:`plainbox.impl.secure.qualifiers.OperatorMatcher` or
620
315
:class:`plainbox.impl.secure.qualifiers.PatternMatcher`. Older qualifiers
621
316
will likely be entirely dropped and replaced by one of the subsequent
624
319
API changes (command line tools)
625
320
--------------------------------
627
322
* :class:`plainbox.impl.clitools.ToolBase` now offers additional methods for
628
323
setting up translations specific to a specific tool. This allows a library
629
(such as Plainbox) to offer a basic tool that other libraries or applications
324
(such as PlainBox) to offer a basic tool that other libraries or applications
630
325
subclass and customize, part of the tool implementation (including
631
326
translations) will come from one library while the rest will come from
632
327
another. This allows various strings to use different gettext domains. This