Hi all,
As I have been thinking through the current architecture proposals for
Toaster-1.7 and the workflows, I have come up with the following questions.
1) Remote build artifacts
Alex has introduced the valuable concept of remote builds, which has many
implications. for example the de-emphasis of the idea of a "local.conf" editor,
given that in the remote build scenario that file only exists for the duration
of the build as per the independent remote agent.
I do think that we need to add to the configuration of a "Project" the ability
to list which build artifacts the developer would like returned from that
remote build (together with where to store those files locally). This is
because that remote project and those artifacts could non-deterministically
disappear, just as the project creation itself is non-deterministic in time.
Proposal: I would think that a simple checklist would suffice, for example,
On Failure:
[ ] Error Logs
On Success:
[ ] Kernel Image
[ ] File System Image(s) (either all, or provide a list of potentially
verions)
[ ] SDK
[ ] Custom from Path:[./path/to/file] (for custom targets)
If the build is local, then presumably this list would be by default disabled.
2) Toaster versus Command line
One of the painful lessons Wind River learned was to not have the GUI tools
lock out the command line user, that a developer can move between these tools
as their needs require. My specific case in point was with a project creation
tool (a predecessor to Workbench) that kept private state on a given project's
configuration. While this was logical from the GUI developer's point of view,
this had the devastating consequence that one a project was managed by the GUI
it could only be managed going forward by the GUI, and command line users (80%
of developers) would then immediate give up the GUI even where it would have
provided substantial benefit.
Proposal: Here is my simple proposal towards this. In the "project import"
feature, also allow an import from an existing local build's configuration
files (e.g. "local.conf", "bblayers.conf", and "default-image.bb" for the
excluded packages). This would support a developer doing iterative development,
and allow them to switch between command line and Toaster as appropriate and
boost adoption. I would also like "automatic-imports" so that the local
workflow is seamless between Toaster and command-line usage.
3) Local Builds
Belen has mentioned that given Toaster is primarily a remote interface, the
remote build support would be given priority over local builds as far as
features would go. I hope though that we do still given local builds adequate
support. I do not have any blockers that I am aware of yet, but I want to keep
this on the table.
(a) I plan to remove Wind River's project configuration tool in favor of
Toaster, but if it cannot support local builds then Toaster loses a lot of
value for us. I do not mind doing extra work to meet my requirements on top of
Toaster, I just do not want changes that block what we can do in this regard.
(b) For development and testing, the local case is probably what we will
always start with since it is the fastest iterative environment. Subsequent
builds may then be farmed out to the remotes, either because at that point the
builds are more stable or that the user has run out of time and wants the build
to run until they come back later.
(c) For initial users and build managers, they will probably also start with
the local case before they get to the remote case.
4) Distinguishing Project builds
Paul describes the term "Project" as "simply a configuration set". That is
fine, but we need a term to distinguish between the instantiated versions of a
"project", especially in the Toaster interface. Here is my most simple use case
that I am thinking through.
(a) I have my project "A" farmed out, it gets build, and the results
returned.
(b) I have my project "A" farmed out again, where the configuration is the
same but perhaps the "poky" pull may be different.
First Question: As per this example's premise, does a "project" also explicitly
capture the poky branch(es) in addition to the configuration? How else would a
remote builder know what to build the project against.
Second Question: How to I distinguish the results of the first pass with the
second? They would both rightly have the same "project" name as a parent so
that is not sufficient, plus I cannot depend on time causality because they
could end up being executed at any time. I could show the column for the host
name where it was executed, but that could be non-deterministic. I could in
this case show the column for the commit ID, but that would most likely be hard
to translate plus this may not be the distinguishing characteristic.
Idea: perhaps we could allow a user to define a "Job Name" for a given project
build, so that they can personally correlate the results to the request. I
think that the term "job" correctly connotes the remote and asynchronous nature
of what is happening together with the expectations of how it works.
Thanks,
David
--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster