<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ed</id>
	<title>Yocto Project - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ed"/>
	<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/Special:Contributions/Ed"/>
	<updated>2026-04-15T15:48:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=17108</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=17108"/>
		<updated>2016-01-18T15:42:38Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Submitting patch sets for integration into Bitbake */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. &lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. General install instructions are available in the main [https://www.yoctoproject.org/documentation/toaster-manual Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
Clone the poky repository&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git clone git://git.yoctoproject.org/poky&lt;br /&gt;
    $ cd poky&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install a python virtual environment to sandbox the python modules from your OS.&lt;br /&gt;
Enter Activate the python virtual environment in your current shell.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ virtualenv venv&lt;br /&gt;
    $ source ./venv/bin/activate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the python module dependencies for Toaster&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ pip install -r ./bitbake/toaster-requirements.txt&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the setup and start script, follow instructions displayed&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     $ TOASTER_MANAGED=1 TOASTER_DEVEL=1 ./bitbake/bin/toaster&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to Toaster Project for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
We are now supporting a [http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/ poky-contrib] toaster-next branch.  The purpose of this branch is to speed up our work so that we can base patches on top of patches that are waiting for upstream inclusion but have not yet made it into master.  To facilitate this we have some extra rebasing actions needed.&lt;br /&gt;
&lt;br /&gt;
1) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add contrib git://git.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Start your feature branch off of toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b the/target/branch contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Do Work &lt;br /&gt;
&lt;br /&gt;
4) Rebase on toaster-next. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase  contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] by &amp;quot;git send-email&amp;quot; please include in your subject line &amp;quot;[review-request][PATCH]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^  --subject-prefix=&amp;quot;review-request][PATCH&amp;quot; &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
All Toaster patches need to be submitted upstream to the Bitbake repository after they have been reviewed on the Toaster mailing list. Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring toaster-next up to date with master&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch poky-contrib toaster-next&amp;amp;&amp;amp; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b toaster-next poky-contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout the/target/branch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Make sure the branch is rebased on current poky-contrib toaster-next. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them.&lt;br /&gt;
  &amp;lt;code&amp;gt;bitbake/lib/toaster/manage.py test orm toastergui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; toaster-next..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) Push the branch you just signed off on and sent upstream to toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -f -u  poky-contrib yourname/submit/the/target/branch:toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The toasterconf.json files live in the meta and meta-yocto layer. Patches to the meta-yocto/conf/toasterconf.json go to poky@yoctoproject.org. Patches to meta/conf/toasterjson.conf go to openembedded-core@lists.openembedded.org.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=16980</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=16980"/>
		<updated>2016-01-07T12:27:07Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Submitting patches for documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. &lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. General install instructions are available in the main [https://www.yoctoproject.org/documentation/toaster-manual Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
Clone the poky repository&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git clone git://git.yoctoproject.org/poky&lt;br /&gt;
    $ cd poky&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install a python virtual environment to sandbox the python modules from your OS.&lt;br /&gt;
Enter Activate the python virtual environment in your current shell.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ virtualenv venv&lt;br /&gt;
    $ source ./venv/bin/activate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the python module dependencies for Toaster&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ pip install -r ./bitbake/toaster-requirements.txt&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the setup and start script, follow instructions displayed&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     $ TOASTER_MANAGED=1 TOASTER_DEVEL=1 ./bitbake/bin/toaster&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to Toaster Project for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
We are now supporting a [http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/ poky-contrib] toaster-next branch.  The purpose of this branch is to speed up our work so that we can base patches on top of patches that are waiting for upstream inclusion but have not yet made it into master.  To facilitate this we have some extra rebasing actions needed.&lt;br /&gt;
&lt;br /&gt;
1) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add contrib git://git.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Start your feature branch off of toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b the/target/branch contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Do Work &lt;br /&gt;
&lt;br /&gt;
4) Rebase on toaster-next. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase  contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] by &amp;quot;git send-email&amp;quot; please include in your subject line &amp;quot;[review-request][PATCH]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^  --subject-prefix=&amp;quot;review-request][PATCH&amp;quot; &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
All Toaster patches need to be submitted upstream to the Bitbake repository after they have been reviewed on the Toaster mailing list. Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring toaster-next up to date with master&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch poky-contrib toaster-next&amp;amp;&amp;amp; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b toaster-next poky-contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout the/target/branch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Make sure the branch is rebased on current poky-contrib toaster-next. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them.&lt;br /&gt;
  &amp;lt;code&amp;gt;bitbake/lib/toaster/manage.py test orm toastergui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; toaster-next..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) Push the branch you just signed off on and sent upstream to toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -f -u  poky-contrib yourname/submit/the/target/branch:toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to bitbake-devel@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The toasterconf.json files live in the meta and meta-yocto layer. Patches to the meta-yocto/conf/toasterconf.json go to poky@yoctoproject.org. Patches to meta/conf/toasterjson.conf go to openembedded-core@lists.openembedded.org.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=16979</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=16979"/>
		<updated>2016-01-07T12:24:17Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Submitting patches for documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. &lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. General install instructions are available in the main [https://www.yoctoproject.org/documentation/toaster-manual Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
Clone the poky repository&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git clone git://git.yoctoproject.org/poky&lt;br /&gt;
    $ cd poky&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install a python virtual environment to sandbox the python modules from your OS.&lt;br /&gt;
Enter Activate the python virtual environment in your current shell.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ virtualenv venv&lt;br /&gt;
    $ source ./venv/bin/activate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the python module dependencies for Toaster&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ pip install -r ./bitbake/toaster-requirements.txt&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the setup and start script, follow instructions displayed&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     $ TOASTER_MANAGED=1 TOASTER_DEVEL=1 ./bitbake/bin/toaster&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to Toaster Project for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
We are now supporting a [http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/ poky-contrib] toaster-next branch.  The purpose of this branch is to speed up our work so that we can base patches on top of patches that are waiting for upstream inclusion but have not yet made it into master.  To facilitate this we have some extra rebasing actions needed.&lt;br /&gt;
&lt;br /&gt;
1) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add contrib git://git.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Start your feature branch off of toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b the/target/branch contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Do Work &lt;br /&gt;
&lt;br /&gt;
4) Rebase on toaster-next. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase  contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] by &amp;quot;git send-email&amp;quot; please include in your subject line &amp;quot;[review-request][PATCH]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^  --subject-prefix=&amp;quot;review-request][PATCH&amp;quot; &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
All Toaster patches need to be submitted upstream to the Bitbake repository after they have been reviewed on the Toaster mailing list. Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring toaster-next up to date with master&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch poky-contrib toaster-next&amp;amp;&amp;amp; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b toaster-next poky-contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout the/target/branch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Make sure the branch is rebased on current poky-contrib toaster-next. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them.&lt;br /&gt;
  &amp;lt;code&amp;gt;bitbake/lib/toaster/manage.py test orm toastergui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; toaster-next..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) Push the branch you just signed off on and sent upstream to toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -f -u  poky-contrib yourname/submit/the/target/branch:toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to bitbake-devel@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The toasterconf.json files live in the meta and meta-yocto layer. Patches to the meta-yocto/conf/toasterconf.json go to poky@yoctoproject.org. Patches to meta/conf/toasterjson.conf go to openembedded-core@lists.openembedded.org.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address)&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=16978</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=16978"/>
		<updated>2016-01-07T12:20:43Z</updated>

		<summary type="html">&lt;p&gt;Ed: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. &lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. General install instructions are available in the main [https://www.yoctoproject.org/documentation/toaster-manual Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
Clone the poky repository&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git clone git://git.yoctoproject.org/poky&lt;br /&gt;
    $ cd poky&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install a python virtual environment to sandbox the python modules from your OS.&lt;br /&gt;
Enter Activate the python virtual environment in your current shell.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ virtualenv venv&lt;br /&gt;
    $ source ./venv/bin/activate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the python module dependencies for Toaster&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ pip install -r ./bitbake/toaster-requirements.txt&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the setup and start script, follow instructions displayed&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     $ TOASTER_MANAGED=1 TOASTER_DEVEL=1 ./bitbake/bin/toaster&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to Toaster Project for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
We are now supporting a [http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/ poky-contrib] toaster-next branch.  The purpose of this branch is to speed up our work so that we can base patches on top of patches that are waiting for upstream inclusion but have not yet made it into master.  To facilitate this we have some extra rebasing actions needed.&lt;br /&gt;
&lt;br /&gt;
1) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add contrib git://git.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Start your feature branch off of toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b the/target/branch contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Do Work &lt;br /&gt;
&lt;br /&gt;
4) Rebase on toaster-next. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase  contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] by &amp;quot;git send-email&amp;quot; please include in your subject line &amp;quot;[review-request][PATCH]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^  --subject-prefix=&amp;quot;review-request][PATCH&amp;quot; &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
All Toaster patches need to be submitted upstream to the Bitbake repository after they have been reviewed on the Toaster mailing list. Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring toaster-next up to date with master&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch poky-contrib toaster-next&amp;amp;&amp;amp; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b toaster-next poky-contrib/toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout the/target/branch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Make sure the branch is rebased on current poky-contrib toaster-next. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them.&lt;br /&gt;
  &amp;lt;code&amp;gt;bitbake/lib/toaster/manage.py test orm toastergui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; toaster-next..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/the/target/branch &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r poky-contrib/toaster-next&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) Push the branch you just signed off on and sent upstream to toaster-next&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -f -u  poky-contrib yourname/submit/the/target/branch:toaster-next &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to bitbake-devel@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The toasterconf.json files live in the meta and meta-yocto layer. Patches to the meta-yocto/conf/toasterconf.json go to poky@yoctoproject.org. Patches to meta/conf/toasterjson.conf go to openembedded-core@lists.openembedded.org.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott (and make sure you send it to his gmail, not his defunct Intel address)&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16371</id>
		<title>Toaster future release planning</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16371"/>
		<updated>2015-10-23T16:56:12Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Ed&amp;#039;s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
&lt;br /&gt;
== 2.1 Planning ==&lt;br /&gt;
&lt;br /&gt;
=== Wish lists ===&lt;br /&gt;
&lt;br /&gt;
==== Michael&#039;s ====&lt;br /&gt;
* Finish image-customisation  8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Remove pseudo API cruft / template context to json response stuff&lt;br /&gt;
* Consolidate used API into it&#039;s own view&lt;br /&gt;
* Finish toaster tables porting&lt;br /&gt;
* Get selenium test wrapper&lt;br /&gt;
* Create a toasterclient.py to interact with toaster to avoid need for &#039;command line builds&#039;&lt;br /&gt;
** This would use toaster&#039;s API as the entry point to using bitbake&lt;br /&gt;
** It could be called by CI systems&lt;br /&gt;
** It could be used by auto builders etc&lt;br /&gt;
** Means that there are no two modes anywhere in Toaster&lt;br /&gt;
** Allows project configuration to be changed in toaster from the command line&lt;br /&gt;
&lt;br /&gt;
==== Brian&#039;s ====&lt;br /&gt;
This is *not* ordered! This is more of a brain dump :)&lt;br /&gt;
* Collapse analysis and managed mode&lt;br /&gt;
* Working CI for each commit into toaster-next as well as for project peoples testME branches on poky-contrib:&lt;br /&gt;
** run django tests&lt;br /&gt;
** run selenium tests&lt;br /&gt;
** leverage sstate to make runs generally shorter&lt;br /&gt;
* remove git assumptions from code&lt;br /&gt;
* rationalize/simplify the configuration scripts&lt;br /&gt;
* if bitbake-memres comes out, interact with it gracefully (this is my preferred method of collapsing analysis and managed)&lt;br /&gt;
* fix the tmpdir/release build issue &amp;amp;/or discuss the need to support building old releases with a UI rather than limiting toaster to build the release it is part of. This is inherently fragile.&lt;br /&gt;
* ask bb to parse any layer added to a project and such as imported layers, and layers specified in the configuration file to give us recipe information.&lt;br /&gt;
* improve our build event following:&lt;br /&gt;
** note parse events&lt;br /&gt;
** update/retrieve ui so that we can tell something is happening before the first build event comes &lt;br /&gt;
** eliminate the remaining random tracebacks from try/except failures.&lt;br /&gt;
* allow configuration in addition to the addition/removal of layers/packages&lt;br /&gt;
** kernel config&lt;br /&gt;
* add user control/authentication&lt;br /&gt;
* update to Django 1.8.  Always stay on Django LTS versions&lt;br /&gt;
* add layer update from layers.openembedded.org to the UI&lt;br /&gt;
* add Django tests for building e.g. we should be able to build core-image-sato from a django test and validate the db&lt;br /&gt;
* add mysql script to simplify setup with mysql/apache&lt;br /&gt;
* pull in new look and feel&lt;br /&gt;
* add django tests to validate all artifacts - if we say they can download it and it appears on a page anywhere, it should have a test&lt;br /&gt;
* improve docs of code on wiki. We have a nice start (ty E &amp;amp; M); I&#039;d like to improve it.  &lt;br /&gt;
** events - more info and list types supported&lt;br /&gt;
** what logic is in jscript , what is in python&lt;br /&gt;
** database schema definition and description esp interrelationships.&lt;br /&gt;
** list django tests, mostly so we can see what we are missing. &lt;br /&gt;
* build mode triggerred off of database entry, not autonomous process.&lt;br /&gt;
* add asynchronicity. I have noted a number of places where commands result in a sluggish ui. I&#039;m nervous about this one.&lt;br /&gt;
** for example, starting a build that requires us to clone layers has a noticeable delay as compared to starting a local only project build.&lt;br /&gt;
* verify we can stop builds cleanly.&lt;br /&gt;
* get the rest of our logs into our local toaster dir&lt;br /&gt;
* allow us to run and stop 2 toasters on the same machine without them interfering with each other&lt;br /&gt;
* (2.2 or later for sure) discuss how to support multiple back end bb servers.  &lt;br /&gt;
** probably will need to be able to add servers/remove servers/see server status/build state&lt;br /&gt;
* be able to see more details about build.  For example, see the &amp;quot;jobs&amp;quot; being processed like you can in knotty&lt;br /&gt;
* revisit what variables we let people change. sstate_dir and dl_dir should certainly be allowed to change&lt;br /&gt;
* discuss way we do migrations. possibly change. thoughts:&lt;br /&gt;
** only support migrations from last release to current. (e.g. if you were running toaster jethro you could update to jethro++, but could not from fido to jethro)&lt;br /&gt;
** take migration from the startup script. it&#039;s only for releasetorelease.&lt;br /&gt;
*** allow it to be in for master and ease of development w/in a release and pull at end as we do with moving releases.&lt;br /&gt;
** whatever we decide, add a test set for it so we know it works&lt;br /&gt;
* Be able to delete things from the ui&lt;br /&gt;
** old builds&lt;br /&gt;
** old projects&lt;br /&gt;
** imported layers we no longer want&lt;br /&gt;
* Be able to set from the ui a policy to delete all builds/recipes/packages that are older than XXX &amp;amp;/or be able to set maximum size on db and delete everything older than XXX when we near that size&lt;br /&gt;
* update the builds on the web page so we dont have to hit refresh to see the build progress.&lt;br /&gt;
&lt;br /&gt;
==== Elliot&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Make sure all files lint properly&lt;br /&gt;
* Include lint in CI builds&lt;br /&gt;
* Improve test coverage of all areas of the UI and back-end&lt;br /&gt;
* Clean up toasterui.py so it&#039;s easier to see what&#039;s going on in there&lt;br /&gt;
* Fix localhostbecontroller so it doesn&#039;t rely on what&#039;s in the log file when figuring out whether the bitbake server has started&lt;br /&gt;
* Provide a way to modify settings in settings.py without editing that file (e.g. with a local overlay configuration file)&lt;br /&gt;
* Move the logic, environment variables, directory setup and script calls from bin/toaster into Django commands: this would allow you to run toaster correctly, with all the required setup, without having to use bin/toaster; it would also mean that we could provide cleaner production setup instructions, as a user could run a series of Django commands (with their own parameters) to setup their environment; bin/toaster would then just execute a series of Django commands&lt;br /&gt;
&lt;br /&gt;
==== Belén&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Finish image customisation. Related bugs: 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Review interaction with layers: as it is, imposes heavy restrictions on users. Some of the questions I would like to consider:&lt;br /&gt;
** Should the import layer action be global instead of per project, so that you can reuse imported layers across projects?&lt;br /&gt;
** Should we allow users to override the release layer branch, setting a particular layer index layer to a different branch or commit?&lt;br /&gt;
** Should we allow users to set a different git repo for layer index layers?&lt;br /&gt;
** Should we allow users to override the bitbake revision set by the release in a project?&lt;br /&gt;
** Related bugs: 6640, 6701, 7574, 8426, 8429&lt;br /&gt;
* Access control (a simple one to start, with very basic permissions). Related bugs: 6233, 6234&lt;br /&gt;
* WIC integration (getting a step closer to the holy grail of &#039;click button&#039; &amp;gt; &#039;image deployed in board&#039;)&lt;br /&gt;
* Fix the variable history (this is one of the features users have highly praised, and it is a bit broken in 2.0). Related bugs: 5811, 8488, 8190, 8189, 8188&lt;br /&gt;
* Get Toaster to collect build data from Jenkins builds. Once again, repeatedly requested by users. Related bugs: 7527&lt;br /&gt;
&lt;br /&gt;
==== Ed&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Merge analysis and managed modes&lt;br /&gt;
* Fix as much pending bugs as possible.&lt;br /&gt;
* Finish image customisation.&lt;br /&gt;
* Support Django LTS&lt;br /&gt;
* Increase test coverage. It would be good to set realistic goals, e.g. cover specific modules or increase coverage to 10% and follow the plan.&lt;br /&gt;
* Include production configuration into testing&lt;br /&gt;
* Cover views.py with tests and split it into modules. Currently it&#039;s huge and hard to maintain. I suspect there are a lot of unused APIs in there.&lt;br /&gt;
* Finish refactoring of buildcontroller code. This work is started in ed/toaster/bec and sitting there for quite long time.&lt;br /&gt;
* Bring patchset support to toaster patchwork.&lt;br /&gt;
* Add &#039;submitted upstream&#039; and &#039;merged upstream&#039; statuses to patchwork. Make the statuses updated automatically when patch is accepted to toaster-next or bitbake master.&lt;br /&gt;
* Clean up the code. Set realistic goals for pylint scores and follow them.&lt;br /&gt;
* Enhance Jenkins CI jobs to run all possible django, tts and pylint tests&lt;br /&gt;
&lt;br /&gt;
== All bugs for 2.1+ ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
  |columns=id,milestone,summary,status,priority&lt;br /&gt;
  |milestone=future,2.1,2.1 M1,2.1 M2,2.1 M3,2.1 M4&lt;br /&gt;
  |sort=priority&lt;br /&gt;
  |product=Toaster&lt;br /&gt;
  |status=!resolved&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.yoctoproject.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ACCEPTED&amp;amp;bug_status=IN%20PROGRESS%20DESIGN&amp;amp;bug_status=IN%20PROGRESS%20DESIGN%20COMPLETE&amp;amp;bug_status=IN%20PROGRESS%20IMPLEMENTATION&amp;amp;bug_status=IN%20PROGRESS%20REVIEW&amp;amp;bug_status=REOPENED&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=WaitForUpstream&amp;amp;columnlist=product%2Cbug_status%2Cshort_desc%2Cchangeddate%2Ctarget_milestone&amp;amp;component=toaster&amp;amp;f1=target_milestone&amp;amp;list_id=476868&amp;amp;o1=greaterthan&amp;amp;product=Toaster&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;v1=2.0&amp;amp;query_based_on= Bugzilla query]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16370</id>
		<title>Toaster future release planning</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16370"/>
		<updated>2015-10-23T16:55:15Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Ed&amp;#039;s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
&lt;br /&gt;
== 2.1 Planning ==&lt;br /&gt;
&lt;br /&gt;
=== Wish lists ===&lt;br /&gt;
&lt;br /&gt;
==== Michael&#039;s ====&lt;br /&gt;
* Finish image-customisation  8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Remove pseudo API cruft / template context to json response stuff&lt;br /&gt;
* Consolidate used API into it&#039;s own view&lt;br /&gt;
* Finish toaster tables porting&lt;br /&gt;
* Get selenium test wrapper&lt;br /&gt;
* Create a toasterclient.py to interact with toaster to avoid need for &#039;command line builds&#039;&lt;br /&gt;
** This would use toaster&#039;s API as the entry point to using bitbake&lt;br /&gt;
** It could be called by CI systems&lt;br /&gt;
** It could be used by auto builders etc&lt;br /&gt;
** Means that there are no two modes anywhere in Toaster&lt;br /&gt;
** Allows project configuration to be changed in toaster from the command line&lt;br /&gt;
&lt;br /&gt;
==== Brian&#039;s ====&lt;br /&gt;
This is *not* ordered! This is more of a brain dump :)&lt;br /&gt;
* Collapse analysis and managed mode&lt;br /&gt;
* Working CI for each commit into toaster-next as well as for project peoples testME branches on poky-contrib:&lt;br /&gt;
** run django tests&lt;br /&gt;
** run selenium tests&lt;br /&gt;
** leverage sstate to make runs generally shorter&lt;br /&gt;
* remove git assumptions from code&lt;br /&gt;
* rationalize/simplify the configuration scripts&lt;br /&gt;
* if bitbake-memres comes out, interact with it gracefully (this is my preferred method of collapsing analysis and managed)&lt;br /&gt;
* fix the tmpdir/release build issue &amp;amp;/or discuss the need to support building old releases with a UI rather than limiting toaster to build the release it is part of. This is inherently fragile.&lt;br /&gt;
* ask bb to parse any layer added to a project and such as imported layers, and layers specified in the configuration file to give us recipe information.&lt;br /&gt;
* improve our build event following:&lt;br /&gt;
** note parse events&lt;br /&gt;
** update/retrieve ui so that we can tell something is happening before the first build event comes &lt;br /&gt;
** eliminate the remaining random tracebacks from try/except failures.&lt;br /&gt;
* allow configuration in addition to the addition/removal of layers/packages&lt;br /&gt;
** kernel config&lt;br /&gt;
* add user control/authentication&lt;br /&gt;
* update to Django 1.8.  Always stay on Django LTS versions&lt;br /&gt;
* add layer update from layers.openembedded.org to the UI&lt;br /&gt;
* add Django tests for building e.g. we should be able to build core-image-sato from a django test and validate the db&lt;br /&gt;
* add mysql script to simplify setup with mysql/apache&lt;br /&gt;
* pull in new look and feel&lt;br /&gt;
* add django tests to validate all artifacts - if we say they can download it and it appears on a page anywhere, it should have a test&lt;br /&gt;
* improve docs of code on wiki. We have a nice start (ty E &amp;amp; M); I&#039;d like to improve it.  &lt;br /&gt;
** events - more info and list types supported&lt;br /&gt;
** what logic is in jscript , what is in python&lt;br /&gt;
** database schema definition and description esp interrelationships.&lt;br /&gt;
** list django tests, mostly so we can see what we are missing. &lt;br /&gt;
* build mode triggerred off of database entry, not autonomous process.&lt;br /&gt;
* add asynchronicity. I have noted a number of places where commands result in a sluggish ui. I&#039;m nervous about this one.&lt;br /&gt;
** for example, starting a build that requires us to clone layers has a noticeable delay as compared to starting a local only project build.&lt;br /&gt;
* verify we can stop builds cleanly.&lt;br /&gt;
* get the rest of our logs into our local toaster dir&lt;br /&gt;
* allow us to run and stop 2 toasters on the same machine without them interfering with each other&lt;br /&gt;
* (2.2 or later for sure) discuss how to support multiple back end bb servers.  &lt;br /&gt;
** probably will need to be able to add servers/remove servers/see server status/build state&lt;br /&gt;
* be able to see more details about build.  For example, see the &amp;quot;jobs&amp;quot; being processed like you can in knotty&lt;br /&gt;
* revisit what variables we let people change. sstate_dir and dl_dir should certainly be allowed to change&lt;br /&gt;
* discuss way we do migrations. possibly change. thoughts:&lt;br /&gt;
** only support migrations from last release to current. (e.g. if you were running toaster jethro you could update to jethro++, but could not from fido to jethro)&lt;br /&gt;
** take migration from the startup script. it&#039;s only for releasetorelease.&lt;br /&gt;
*** allow it to be in for master and ease of development w/in a release and pull at end as we do with moving releases.&lt;br /&gt;
** whatever we decide, add a test set for it so we know it works&lt;br /&gt;
* Be able to delete things from the ui&lt;br /&gt;
** old builds&lt;br /&gt;
** old projects&lt;br /&gt;
** imported layers we no longer want&lt;br /&gt;
* Be able to set from the ui a policy to delete all builds/recipes/packages that are older than XXX &amp;amp;/or be able to set maximum size on db and delete everything older than XXX when we near that size&lt;br /&gt;
* update the builds on the web page so we dont have to hit refresh to see the build progress.&lt;br /&gt;
&lt;br /&gt;
==== Elliot&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Make sure all files lint properly&lt;br /&gt;
* Include lint in CI builds&lt;br /&gt;
* Improve test coverage of all areas of the UI and back-end&lt;br /&gt;
* Clean up toasterui.py so it&#039;s easier to see what&#039;s going on in there&lt;br /&gt;
* Fix localhostbecontroller so it doesn&#039;t rely on what&#039;s in the log file when figuring out whether the bitbake server has started&lt;br /&gt;
* Provide a way to modify settings in settings.py without editing that file (e.g. with a local overlay configuration file)&lt;br /&gt;
* Move the logic, environment variables, directory setup and script calls from bin/toaster into Django commands: this would allow you to run toaster correctly, with all the required setup, without having to use bin/toaster; it would also mean that we could provide cleaner production setup instructions, as a user could run a series of Django commands (with their own parameters) to setup their environment; bin/toaster would then just execute a series of Django commands&lt;br /&gt;
&lt;br /&gt;
==== Belén&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Finish image customisation. Related bugs: 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Review interaction with layers: as it is, imposes heavy restrictions on users. Some of the questions I would like to consider:&lt;br /&gt;
** Should the import layer action be global instead of per project, so that you can reuse imported layers across projects?&lt;br /&gt;
** Should we allow users to override the release layer branch, setting a particular layer index layer to a different branch or commit?&lt;br /&gt;
** Should we allow users to set a different git repo for layer index layers?&lt;br /&gt;
** Should we allow users to override the bitbake revision set by the release in a project?&lt;br /&gt;
** Related bugs: 6640, 6701, 7574, 8426, 8429&lt;br /&gt;
* Access control (a simple one to start, with very basic permissions). Related bugs: 6233, 6234&lt;br /&gt;
* WIC integration (getting a step closer to the holy grail of &#039;click button&#039; &amp;gt; &#039;image deployed in board&#039;)&lt;br /&gt;
* Fix the variable history (this is one of the features users have highly praised, and it is a bit broken in 2.0). Related bugs: 5811, 8488, 8190, 8189, 8188&lt;br /&gt;
* Get Toaster to collect build data from Jenkins builds. Once again, repeatedly requested by users. Related bugs: 7527&lt;br /&gt;
&lt;br /&gt;
==== Ed&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Merge analysis and managed modes&lt;br /&gt;
* Fix as much pending bugs as possible.&lt;br /&gt;
* Finish image customisation.&lt;br /&gt;
* Increase test coverage. It would be good to set realistic goals, e.g. cover specific modules or increase coverage to 10% and follow the plan.&lt;br /&gt;
* Include production configuration into testing&lt;br /&gt;
* Cover views.py with tests and split it into modules. Currently it&#039;s huge and hard to maintain. I suspect there are a lot of unused APIs in there.&lt;br /&gt;
* Finish refactoring of buildcontroller code. This work is started in ed/toaster/bec and sitting there for quite long time.&lt;br /&gt;
* Bring patchset support to toaster patchwork.&lt;br /&gt;
* Add &#039;submitted upstream&#039; and &#039;merged upstream&#039; statuses to patchwork. Make the statuses updated automatically when patch is accepted to toaster-next or bitbake master.&lt;br /&gt;
* Clean up the code. Set realistic goals for pylint scores and follow them.&lt;br /&gt;
* Enhance Jenkins CI jobs to run all possible django, tts and pylint tests&lt;br /&gt;
&lt;br /&gt;
== All bugs for 2.1+ ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
  |columns=id,milestone,summary,status,priority&lt;br /&gt;
  |milestone=future,2.1,2.1 M1,2.1 M2,2.1 M3,2.1 M4&lt;br /&gt;
  |sort=priority&lt;br /&gt;
  |product=Toaster&lt;br /&gt;
  |status=!resolved&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.yoctoproject.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ACCEPTED&amp;amp;bug_status=IN%20PROGRESS%20DESIGN&amp;amp;bug_status=IN%20PROGRESS%20DESIGN%20COMPLETE&amp;amp;bug_status=IN%20PROGRESS%20IMPLEMENTATION&amp;amp;bug_status=IN%20PROGRESS%20REVIEW&amp;amp;bug_status=REOPENED&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=WaitForUpstream&amp;amp;columnlist=product%2Cbug_status%2Cshort_desc%2Cchangeddate%2Ctarget_milestone&amp;amp;component=toaster&amp;amp;f1=target_milestone&amp;amp;list_id=476868&amp;amp;o1=greaterthan&amp;amp;product=Toaster&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;v1=2.0&amp;amp;query_based_on= Bugzilla query]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16369</id>
		<title>Toaster future release planning</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16369"/>
		<updated>2015-10-23T16:53:38Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Ed&amp;#039;s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
&lt;br /&gt;
== 2.1 Planning ==&lt;br /&gt;
&lt;br /&gt;
=== Wish lists ===&lt;br /&gt;
&lt;br /&gt;
==== Michael&#039;s ====&lt;br /&gt;
* Finish image-customisation  8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Remove pseudo API cruft / template context to json response stuff&lt;br /&gt;
* Consolidate used API into it&#039;s own view&lt;br /&gt;
* Finish toaster tables porting&lt;br /&gt;
* Get selenium test wrapper&lt;br /&gt;
* Create a toasterclient.py to interact with toaster to avoid need for &#039;command line builds&#039;&lt;br /&gt;
** This would use toaster&#039;s API as the entry point to using bitbake&lt;br /&gt;
** It could be called by CI systems&lt;br /&gt;
** It could be used by auto builders etc&lt;br /&gt;
** Means that there are no two modes anywhere in Toaster&lt;br /&gt;
** Allows project configuration to be changed in toaster from the command line&lt;br /&gt;
&lt;br /&gt;
==== Brian&#039;s ====&lt;br /&gt;
This is *not* ordered! This is more of a brain dump :)&lt;br /&gt;
* Collapse analysis and managed mode&lt;br /&gt;
* Working CI for each commit into toaster-next as well as for project peoples testME branches on poky-contrib:&lt;br /&gt;
** run django tests&lt;br /&gt;
** run selenium tests&lt;br /&gt;
** leverage sstate to make runs generally shorter&lt;br /&gt;
* remove git assumptions from code&lt;br /&gt;
* rationalize/simplify the configuration scripts&lt;br /&gt;
* if bitbake-memres comes out, interact with it gracefully (this is my preferred method of collapsing analysis and managed)&lt;br /&gt;
* fix the tmpdir/release build issue &amp;amp;/or discuss the need to support building old releases with a UI rather than limiting toaster to build the release it is part of. This is inherently fragile.&lt;br /&gt;
* ask bb to parse any layer added to a project and such as imported layers, and layers specified in the configuration file to give us recipe information.&lt;br /&gt;
* improve our build event following:&lt;br /&gt;
** note parse events&lt;br /&gt;
** update/retrieve ui so that we can tell something is happening before the first build event comes &lt;br /&gt;
** eliminate the remaining random tracebacks from try/except failures.&lt;br /&gt;
* allow configuration in addition to the addition/removal of layers/packages&lt;br /&gt;
** kernel config&lt;br /&gt;
* add user control/authentication&lt;br /&gt;
* update to Django 1.8.  Always stay on Django LTS versions&lt;br /&gt;
* add layer update from layers.openembedded.org to the UI&lt;br /&gt;
* add Django tests for building e.g. we should be able to build core-image-sato from a django test and validate the db&lt;br /&gt;
* add mysql script to simplify setup with mysql/apache&lt;br /&gt;
* pull in new look and feel&lt;br /&gt;
* add django tests to validate all artifacts - if we say they can download it and it appears on a page anywhere, it should have a test&lt;br /&gt;
* improve docs of code on wiki. We have a nice start (ty E &amp;amp; M); I&#039;d like to improve it.  &lt;br /&gt;
** events - more info and list types supported&lt;br /&gt;
** what logic is in jscript , what is in python&lt;br /&gt;
** database schema definition and description esp interrelationships.&lt;br /&gt;
** list django tests, mostly so we can see what we are missing. &lt;br /&gt;
* build mode triggerred off of database entry, not autonomous process.&lt;br /&gt;
* add asynchronicity. I have noted a number of places where commands result in a sluggish ui. I&#039;m nervous about this one.&lt;br /&gt;
** for example, starting a build that requires us to clone layers has a noticeable delay as compared to starting a local only project build.&lt;br /&gt;
* verify we can stop builds cleanly.&lt;br /&gt;
* get the rest of our logs into our local toaster dir&lt;br /&gt;
* allow us to run and stop 2 toasters on the same machine without them interfering with each other&lt;br /&gt;
* (2.2 or later for sure) discuss how to support multiple back end bb servers.  &lt;br /&gt;
** probably will need to be able to add servers/remove servers/see server status/build state&lt;br /&gt;
* be able to see more details about build.  For example, see the &amp;quot;jobs&amp;quot; being processed like you can in knotty&lt;br /&gt;
* revisit what variables we let people change. sstate_dir and dl_dir should certainly be allowed to change&lt;br /&gt;
* discuss way we do migrations. possibly change. thoughts:&lt;br /&gt;
** only support migrations from last release to current. (e.g. if you were running toaster jethro you could update to jethro++, but could not from fido to jethro)&lt;br /&gt;
** take migration from the startup script. it&#039;s only for releasetorelease.&lt;br /&gt;
*** allow it to be in for master and ease of development w/in a release and pull at end as we do with moving releases.&lt;br /&gt;
** whatever we decide, add a test set for it so we know it works&lt;br /&gt;
* Be able to delete things from the ui&lt;br /&gt;
** old builds&lt;br /&gt;
** old projects&lt;br /&gt;
** imported layers we no longer want&lt;br /&gt;
* Be able to set from the ui a policy to delete all builds/recipes/packages that are older than XXX &amp;amp;/or be able to set maximum size on db and delete everything older than XXX when we near that size&lt;br /&gt;
* update the builds on the web page so we dont have to hit refresh to see the build progress.&lt;br /&gt;
&lt;br /&gt;
==== Elliot&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Make sure all files lint properly&lt;br /&gt;
* Include lint in CI builds&lt;br /&gt;
* Improve test coverage of all areas of the UI and back-end&lt;br /&gt;
* Clean up toasterui.py so it&#039;s easier to see what&#039;s going on in there&lt;br /&gt;
* Fix localhostbecontroller so it doesn&#039;t rely on what&#039;s in the log file when figuring out whether the bitbake server has started&lt;br /&gt;
* Provide a way to modify settings in settings.py without editing that file (e.g. with a local overlay configuration file)&lt;br /&gt;
* Move the logic, environment variables, directory setup and script calls from bin/toaster into Django commands: this would allow you to run toaster correctly, with all the required setup, without having to use bin/toaster; it would also mean that we could provide cleaner production setup instructions, as a user could run a series of Django commands (with their own parameters) to setup their environment; bin/toaster would then just execute a series of Django commands&lt;br /&gt;
&lt;br /&gt;
==== Belén&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Finish image customisation. Related bugs: 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Review interaction with layers: as it is, imposes heavy restrictions on users. Some of the questions I would like to consider:&lt;br /&gt;
** Should the import layer action be global instead of per project, so that you can reuse imported layers across projects?&lt;br /&gt;
** Should we allow users to override the release layer branch, setting a particular layer index layer to a different branch or commit?&lt;br /&gt;
** Should we allow users to set a different git repo for layer index layers?&lt;br /&gt;
** Should we allow users to override the bitbake revision set by the release in a project?&lt;br /&gt;
** Related bugs: 6640, 6701, 7574, 8426, 8429&lt;br /&gt;
* Access control (a simple one to start, with very basic permissions). Related bugs: 6233, 6234&lt;br /&gt;
* WIC integration (getting a step closer to the holy grail of &#039;click button&#039; &amp;gt; &#039;image deployed in board&#039;)&lt;br /&gt;
* Fix the variable history (this is one of the features users have highly praised, and it is a bit broken in 2.0). Related bugs: 5811, 8488, 8190, 8189, 8188&lt;br /&gt;
* Get Toaster to collect build data from Jenkins builds. Once again, repeatedly requested by users. Related bugs: 7527&lt;br /&gt;
&lt;br /&gt;
==== Ed&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Merge analysis and managed modes&lt;br /&gt;
* Fix as much pending bugs as possible.&lt;br /&gt;
* Finish image customisation.&lt;br /&gt;
* Increase test coverage. It would be good to set realistic goals, e.g. cover specific modules or increase coverage to 10% and follow the plan.&lt;br /&gt;
* Include production configuration into testing&lt;br /&gt;
* Cover views.py with tests and split it into modules. Currently it&#039;s huge and hard to maintain. I suspect there are a lot of unused APIs in there.&lt;br /&gt;
* Finish refactoring of buildcontroller code. This work is started in ed/toaster/bec and sitting there for quite long time.&lt;br /&gt;
* Bring patchset support to toaster patchwork.&lt;br /&gt;
* Add &#039;submitted upstream&#039; and &#039;merged upstream&#039; statuses to patchwork. make the statuses change automatically when patch is accepted to toaster-next or bitbake master.&lt;br /&gt;
* Clean up the code. Set realistic goals for pylint scores and follow them.&lt;br /&gt;
* Enhance Jenkins CI jobs to run all possible django, tts and pylint tests&lt;br /&gt;
&lt;br /&gt;
== All bugs for 2.1+ ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
  |columns=id,milestone,summary,status,priority&lt;br /&gt;
  |milestone=future,2.1,2.1 M1,2.1 M2,2.1 M3,2.1 M4&lt;br /&gt;
  |sort=priority&lt;br /&gt;
  |product=Toaster&lt;br /&gt;
  |status=!resolved&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.yoctoproject.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ACCEPTED&amp;amp;bug_status=IN%20PROGRESS%20DESIGN&amp;amp;bug_status=IN%20PROGRESS%20DESIGN%20COMPLETE&amp;amp;bug_status=IN%20PROGRESS%20IMPLEMENTATION&amp;amp;bug_status=IN%20PROGRESS%20REVIEW&amp;amp;bug_status=REOPENED&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=WaitForUpstream&amp;amp;columnlist=product%2Cbug_status%2Cshort_desc%2Cchangeddate%2Ctarget_milestone&amp;amp;component=toaster&amp;amp;f1=target_milestone&amp;amp;list_id=476868&amp;amp;o1=greaterthan&amp;amp;product=Toaster&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;v1=2.0&amp;amp;query_based_on= Bugzilla query]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16368</id>
		<title>Toaster future release planning</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16368"/>
		<updated>2015-10-23T16:51:39Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* Ed&amp;#039;s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
&lt;br /&gt;
== 2.1 Planning ==&lt;br /&gt;
&lt;br /&gt;
=== Wish lists ===&lt;br /&gt;
&lt;br /&gt;
==== Michael&#039;s ====&lt;br /&gt;
* Finish image-customisation  8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Remove pseudo API cruft / template context to json response stuff&lt;br /&gt;
* Consolidate used API into it&#039;s own view&lt;br /&gt;
* Finish toaster tables porting&lt;br /&gt;
* Get selenium test wrapper&lt;br /&gt;
* Create a toasterclient.py to interact with toaster to avoid need for &#039;command line builds&#039;&lt;br /&gt;
** This would use toaster&#039;s API as the entry point to using bitbake&lt;br /&gt;
** It could be called by CI systems&lt;br /&gt;
** It could be used by auto builders etc&lt;br /&gt;
** Means that there are no two modes anywhere in Toaster&lt;br /&gt;
** Allows project configuration to be changed in toaster from the command line&lt;br /&gt;
&lt;br /&gt;
==== Brian&#039;s ====&lt;br /&gt;
This is *not* ordered! This is more of a brain dump :)&lt;br /&gt;
* Collapse analysis and managed mode&lt;br /&gt;
* Working CI for each commit into toaster-next as well as for project peoples testME branches on poky-contrib:&lt;br /&gt;
** run django tests&lt;br /&gt;
** run selenium tests&lt;br /&gt;
** leverage sstate to make runs generally shorter&lt;br /&gt;
* remove git assumptions from code&lt;br /&gt;
* rationalize/simplify the configuration scripts&lt;br /&gt;
* if bitbake-memres comes out, interact with it gracefully (this is my preferred method of collapsing analysis and managed)&lt;br /&gt;
* fix the tmpdir/release build issue &amp;amp;/or discuss the need to support building old releases with a UI rather than limiting toaster to build the release it is part of. This is inherently fragile.&lt;br /&gt;
* ask bb to parse any layer added to a project and such as imported layers, and layers specified in the configuration file to give us recipe information.&lt;br /&gt;
* improve our build event following:&lt;br /&gt;
** note parse events&lt;br /&gt;
** update/retrieve ui so that we can tell something is happening before the first build event comes &lt;br /&gt;
** eliminate the remaining random tracebacks from try/except failures.&lt;br /&gt;
* allow configuration in addition to the addition/removal of layers/packages&lt;br /&gt;
** kernel config&lt;br /&gt;
* add user control/authentication&lt;br /&gt;
* update to Django 1.8.  Always stay on Django LTS versions&lt;br /&gt;
* add layer update from layers.openembedded.org to the UI&lt;br /&gt;
* add Django tests for building e.g. we should be able to build core-image-sato from a django test and validate the db&lt;br /&gt;
* add mysql script to simplify setup with mysql/apache&lt;br /&gt;
* pull in new look and feel&lt;br /&gt;
* add django tests to validate all artifacts - if we say they can download it and it appears on a page anywhere, it should have a test&lt;br /&gt;
* improve docs of code on wiki. We have a nice start (ty E &amp;amp; M); I&#039;d like to improve it.  &lt;br /&gt;
** events - more info and list types supported&lt;br /&gt;
** what logic is in jscript , what is in python&lt;br /&gt;
** database schema definition and description esp interrelationships.&lt;br /&gt;
** list django tests, mostly so we can see what we are missing. &lt;br /&gt;
* build mode triggerred off of database entry, not autonomous process.&lt;br /&gt;
* add asynchronicity. I have noted a number of places where commands result in a sluggish ui. I&#039;m nervous about this one.&lt;br /&gt;
** for example, starting a build that requires us to clone layers has a noticeable delay as compared to starting a local only project build.&lt;br /&gt;
* verify we can stop builds cleanly.&lt;br /&gt;
* get the rest of our logs into our local toaster dir&lt;br /&gt;
* allow us to run and stop 2 toasters on the same machine without them interfering with each other&lt;br /&gt;
* (2.2 or later for sure) discuss how to support multiple back end bb servers.  &lt;br /&gt;
** probably will need to be able to add servers/remove servers/see server status/build state&lt;br /&gt;
* be able to see more details about build.  For example, see the &amp;quot;jobs&amp;quot; being processed like you can in knotty&lt;br /&gt;
* revisit what variables we let people change. sstate_dir and dl_dir should certainly be allowed to change&lt;br /&gt;
* discuss way we do migrations. possibly change. thoughts:&lt;br /&gt;
** only support migrations from last release to current. (e.g. if you were running toaster jethro you could update to jethro++, but could not from fido to jethro)&lt;br /&gt;
** take migration from the startup script. it&#039;s only for releasetorelease.&lt;br /&gt;
*** allow it to be in for master and ease of development w/in a release and pull at end as we do with moving releases.&lt;br /&gt;
** whatever we decide, add a test set for it so we know it works&lt;br /&gt;
* Be able to delete things from the ui&lt;br /&gt;
** old builds&lt;br /&gt;
** old projects&lt;br /&gt;
** imported layers we no longer want&lt;br /&gt;
* Be able to set from the ui a policy to delete all builds/recipes/packages that are older than XXX &amp;amp;/or be able to set maximum size on db and delete everything older than XXX when we near that size&lt;br /&gt;
* update the builds on the web page so we dont have to hit refresh to see the build progress.&lt;br /&gt;
&lt;br /&gt;
==== Elliot&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Make sure all files lint properly&lt;br /&gt;
* Include lint in CI builds&lt;br /&gt;
* Improve test coverage of all areas of the UI and back-end&lt;br /&gt;
* Clean up toasterui.py so it&#039;s easier to see what&#039;s going on in there&lt;br /&gt;
* Fix localhostbecontroller so it doesn&#039;t rely on what&#039;s in the log file when figuring out whether the bitbake server has started&lt;br /&gt;
* Provide a way to modify settings in settings.py without editing that file (e.g. with a local overlay configuration file)&lt;br /&gt;
* Move the logic, environment variables, directory setup and script calls from bin/toaster into Django commands: this would allow you to run toaster correctly, with all the required setup, without having to use bin/toaster; it would also mean that we could provide cleaner production setup instructions, as a user could run a series of Django commands (with their own parameters) to setup their environment; bin/toaster would then just execute a series of Django commands&lt;br /&gt;
&lt;br /&gt;
==== Belén&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Finish image customisation. Related bugs: 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Review interaction with layers: as it is, imposes heavy restrictions on users. Some of the questions I would like to consider:&lt;br /&gt;
** Should the import layer action be global instead of per project, so that you can reuse imported layers across projects?&lt;br /&gt;
** Should we allow users to override the release layer branch, setting a particular layer index layer to a different branch or commit?&lt;br /&gt;
** Should we allow users to set a different git repo for layer index layers?&lt;br /&gt;
** Should we allow users to override the bitbake revision set by the release in a project?&lt;br /&gt;
** Related bugs: 6640, 6701, 7574, 8426, 8429&lt;br /&gt;
* Access control (a simple one to start, with very basic permissions). Related bugs: 6233, 6234&lt;br /&gt;
* WIC integration (getting a step closer to the holy grail of &#039;click button&#039; &amp;gt; &#039;image deployed in board&#039;)&lt;br /&gt;
* Fix the variable history (this is one of the features users have highly praised, and it is a bit broken in 2.0). Related bugs: 5811, 8488, 8190, 8189, 8188&lt;br /&gt;
* Get Toaster to collect build data from Jenkins builds. Once again, repeatedly requested by users. Related bugs: 7527&lt;br /&gt;
&lt;br /&gt;
==== Ed&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Merge analysis and managed modes&lt;br /&gt;
* Fix as much peding bugs as possible.&lt;br /&gt;
* Finish image customisation.&lt;br /&gt;
* Increase test coverage. It would be good to set realistic goals, e.g. cover specific modules or increase coverage to 10% and follow the plan.&lt;br /&gt;
* Include production configuration into testing&lt;br /&gt;
* Cover views.py with tests and split it into modules. Currently it&#039;s huge and hard to maintain. I suspect there are a lot of unused APIs in there.&lt;br /&gt;
* Finish refactoring of buildcontroller code. This work is started in ed/toaster/bec and sitting there for quite long time.&lt;br /&gt;
* Bring patchset support to toaster patchwork.&lt;br /&gt;
* Add &#039;submitted upstream&#039; and &#039;merged upstream&#039; statuses to patchwork. make the statuses change automatically when patch is accepted to toaster-next or bitbake master.&lt;br /&gt;
* Clean up the code. Set realistic goals for pylint scores and follow them.&lt;br /&gt;
* Enhance Jenkins CI jobs to run all possible django, tts and pylint tests&lt;br /&gt;
&lt;br /&gt;
== All bugs for 2.1+ ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
  |columns=id,milestone,summary,status,priority&lt;br /&gt;
  |milestone=future,2.1,2.1 M1,2.1 M2,2.1 M3,2.1 M4&lt;br /&gt;
  |sort=priority&lt;br /&gt;
  |product=Toaster&lt;br /&gt;
  |status=!resolved&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.yoctoproject.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ACCEPTED&amp;amp;bug_status=IN%20PROGRESS%20DESIGN&amp;amp;bug_status=IN%20PROGRESS%20DESIGN%20COMPLETE&amp;amp;bug_status=IN%20PROGRESS%20IMPLEMENTATION&amp;amp;bug_status=IN%20PROGRESS%20REVIEW&amp;amp;bug_status=REOPENED&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=WaitForUpstream&amp;amp;columnlist=product%2Cbug_status%2Cshort_desc%2Cchangeddate%2Ctarget_milestone&amp;amp;component=toaster&amp;amp;f1=target_milestone&amp;amp;list_id=476868&amp;amp;o1=greaterthan&amp;amp;product=Toaster&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;v1=2.0&amp;amp;query_based_on= Bugzilla query]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16367</id>
		<title>Toaster future release planning</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Toaster_future_release_planning&amp;diff=16367"/>
		<updated>2015-10-23T16:42:43Z</updated>

		<summary type="html">&lt;p&gt;Ed: /* 2.1 Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
&lt;br /&gt;
== 2.1 Planning ==&lt;br /&gt;
&lt;br /&gt;
=== Wish lists ===&lt;br /&gt;
&lt;br /&gt;
==== Michael&#039;s ====&lt;br /&gt;
* Finish image-customisation  8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Remove pseudo API cruft / template context to json response stuff&lt;br /&gt;
* Consolidate used API into it&#039;s own view&lt;br /&gt;
* Finish toaster tables porting&lt;br /&gt;
* Get selenium test wrapper&lt;br /&gt;
* Create a toasterclient.py to interact with toaster to avoid need for &#039;command line builds&#039;&lt;br /&gt;
** This would use toaster&#039;s API as the entry point to using bitbake&lt;br /&gt;
** It could be called by CI systems&lt;br /&gt;
** It could be used by auto builders etc&lt;br /&gt;
** Means that there are no two modes anywhere in Toaster&lt;br /&gt;
** Allows project configuration to be changed in toaster from the command line&lt;br /&gt;
&lt;br /&gt;
==== Brian&#039;s ====&lt;br /&gt;
This is *not* ordered! This is more of a brain dump :)&lt;br /&gt;
* Collapse analysis and managed mode&lt;br /&gt;
* Working CI for each commit into toaster-next as well as for project peoples testME branches on poky-contrib:&lt;br /&gt;
** run django tests&lt;br /&gt;
** run selenium tests&lt;br /&gt;
** leverage sstate to make runs generally shorter&lt;br /&gt;
* remove git assumptions from code&lt;br /&gt;
* rationalize/simplify the configuration scripts&lt;br /&gt;
* if bitbake-memres comes out, interact with it gracefully (this is my preferred method of collapsing analysis and managed)&lt;br /&gt;
* fix the tmpdir/release build issue &amp;amp;/or discuss the need to support building old releases with a UI rather than limiting toaster to build the release it is part of. This is inherently fragile.&lt;br /&gt;
* ask bb to parse any layer added to a project and such as imported layers, and layers specified in the configuration file to give us recipe information.&lt;br /&gt;
* improve our build event following:&lt;br /&gt;
** note parse events&lt;br /&gt;
** update/retrieve ui so that we can tell something is happening before the first build event comes &lt;br /&gt;
** eliminate the remaining random tracebacks from try/except failures.&lt;br /&gt;
* allow configuration in addition to the addition/removal of layers/packages&lt;br /&gt;
** kernel config&lt;br /&gt;
* add user control/authentication&lt;br /&gt;
* update to Django 1.8.  Always stay on Django LTS versions&lt;br /&gt;
* add layer update from layers.openembedded.org to the UI&lt;br /&gt;
* add Django tests for building e.g. we should be able to build core-image-sato from a django test and validate the db&lt;br /&gt;
* add mysql script to simplify setup with mysql/apache&lt;br /&gt;
* pull in new look and feel&lt;br /&gt;
* add django tests to validate all artifacts - if we say they can download it and it appears on a page anywhere, it should have a test&lt;br /&gt;
* improve docs of code on wiki. We have a nice start (ty E &amp;amp; M); I&#039;d like to improve it.  &lt;br /&gt;
** events - more info and list types supported&lt;br /&gt;
** what logic is in jscript , what is in python&lt;br /&gt;
** database schema definition and description esp interrelationships.&lt;br /&gt;
** list django tests, mostly so we can see what we are missing. &lt;br /&gt;
* build mode triggerred off of database entry, not autonomous process.&lt;br /&gt;
* add asynchronicity. I have noted a number of places where commands result in a sluggish ui. I&#039;m nervous about this one.&lt;br /&gt;
** for example, starting a build that requires us to clone layers has a noticeable delay as compared to starting a local only project build.&lt;br /&gt;
* verify we can stop builds cleanly.&lt;br /&gt;
* get the rest of our logs into our local toaster dir&lt;br /&gt;
* allow us to run and stop 2 toasters on the same machine without them interfering with each other&lt;br /&gt;
* (2.2 or later for sure) discuss how to support multiple back end bb servers.  &lt;br /&gt;
** probably will need to be able to add servers/remove servers/see server status/build state&lt;br /&gt;
* be able to see more details about build.  For example, see the &amp;quot;jobs&amp;quot; being processed like you can in knotty&lt;br /&gt;
* revisit what variables we let people change. sstate_dir and dl_dir should certainly be allowed to change&lt;br /&gt;
* discuss way we do migrations. possibly change. thoughts:&lt;br /&gt;
** only support migrations from last release to current. (e.g. if you were running toaster jethro you could update to jethro++, but could not from fido to jethro)&lt;br /&gt;
** take migration from the startup script. it&#039;s only for releasetorelease.&lt;br /&gt;
*** allow it to be in for master and ease of development w/in a release and pull at end as we do with moving releases.&lt;br /&gt;
** whatever we decide, add a test set for it so we know it works&lt;br /&gt;
* Be able to delete things from the ui&lt;br /&gt;
** old builds&lt;br /&gt;
** old projects&lt;br /&gt;
** imported layers we no longer want&lt;br /&gt;
* Be able to set from the ui a policy to delete all builds/recipes/packages that are older than XXX &amp;amp;/or be able to set maximum size on db and delete everything older than XXX when we near that size&lt;br /&gt;
* update the builds on the web page so we dont have to hit refresh to see the build progress.&lt;br /&gt;
&lt;br /&gt;
==== Elliot&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Make sure all files lint properly&lt;br /&gt;
* Include lint in CI builds&lt;br /&gt;
* Improve test coverage of all areas of the UI and back-end&lt;br /&gt;
* Clean up toasterui.py so it&#039;s easier to see what&#039;s going on in there&lt;br /&gt;
* Fix localhostbecontroller so it doesn&#039;t rely on what&#039;s in the log file when figuring out whether the bitbake server has started&lt;br /&gt;
* Provide a way to modify settings in settings.py without editing that file (e.g. with a local overlay configuration file)&lt;br /&gt;
* Move the logic, environment variables, directory setup and script calls from bin/toaster into Django commands: this would allow you to run toaster correctly, with all the required setup, without having to use bin/toaster; it would also mean that we could provide cleaner production setup instructions, as a user could run a series of Django commands (with their own parameters) to setup their environment; bin/toaster would then just execute a series of Django commands&lt;br /&gt;
&lt;br /&gt;
==== Belén&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Finish image customisation. Related bugs: 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091&lt;br /&gt;
* Review interaction with layers: as it is, imposes heavy restrictions on users. Some of the questions I would like to consider:&lt;br /&gt;
** Should the import layer action be global instead of per project, so that you can reuse imported layers across projects?&lt;br /&gt;
** Should we allow users to override the release layer branch, setting a particular layer index layer to a different branch or commit?&lt;br /&gt;
** Should we allow users to set a different git repo for layer index layers?&lt;br /&gt;
** Should we allow users to override the bitbake revision set by the release in a project?&lt;br /&gt;
** Related bugs: 6640, 6701, 7574, 8426, 8429&lt;br /&gt;
* Access control (a simple one to start, with very basic permissions). Related bugs: 6233, 6234&lt;br /&gt;
* WIC integration (getting a step closer to the holy grail of &#039;click button&#039; &amp;gt; &#039;image deployed in board&#039;)&lt;br /&gt;
* Fix the variable history (this is one of the features users have highly praised, and it is a bit broken in 2.0). Related bugs: 5811, 8488, 8190, 8189, 8188&lt;br /&gt;
* Get Toaster to collect build data from Jenkins builds. Once again, repeatedly requested by users. Related bugs: 7527&lt;br /&gt;
&lt;br /&gt;
==== Ed&#039;s ====&lt;br /&gt;
&lt;br /&gt;
* Fix as much peding bugs as possible.&lt;br /&gt;
* Finish image customisation.&lt;br /&gt;
* Increase test coverage. It would be good to set realistic goals, e.g. cover specific modules or increase coverage to 10% and follow the plan.&lt;br /&gt;
* Include production configuration into testing&lt;br /&gt;
* Cover views.py with tests and split it into modules. Currently it&#039;s huge and hard to maintain. I suspect there are a lot of unused APIs in there.&lt;br /&gt;
* Finish refactoring of buildcontroller code. This work is started in ed/toaster/bec and sitting there for quite long time.&lt;br /&gt;
* Bring patchset support to toaster patchwork.&lt;br /&gt;
* Add &#039;submitted upstream&#039; and &#039;merged upstream&#039; statuses to patchwork. make the statuses change automatically when patch is accepted to toaster-next or bitbake master.&lt;br /&gt;
* Clean up the code. Set realistic goals for pylint scores and follow them.&lt;br /&gt;
* Enhance Jenkins CI jobs to run all possible django, tts and pylint tests&lt;br /&gt;
&lt;br /&gt;
== All bugs for 2.1+ ==&lt;br /&gt;
&lt;br /&gt;
{{#bugzilla:&lt;br /&gt;
  |columns=id,milestone,summary,status,priority&lt;br /&gt;
  |milestone=future,2.1,2.1 M1,2.1 M2,2.1 M3,2.1 M4&lt;br /&gt;
  |sort=priority&lt;br /&gt;
  |product=Toaster&lt;br /&gt;
  |status=!resolved&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://bugzilla.yoctoproject.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ACCEPTED&amp;amp;bug_status=IN%20PROGRESS%20DESIGN&amp;amp;bug_status=IN%20PROGRESS%20DESIGN%20COMPLETE&amp;amp;bug_status=IN%20PROGRESS%20IMPLEMENTATION&amp;amp;bug_status=IN%20PROGRESS%20REVIEW&amp;amp;bug_status=REOPENED&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=WaitForUpstream&amp;amp;columnlist=product%2Cbug_status%2Cshort_desc%2Cchangeddate%2Ctarget_milestone&amp;amp;component=toaster&amp;amp;f1=target_milestone&amp;amp;list_id=476868&amp;amp;o1=greaterthan&amp;amp;product=Toaster&amp;amp;query_format=advanced&amp;amp;resolution=---&amp;amp;v1=2.0&amp;amp;query_based_on= Bugzilla query]&lt;/div&gt;</summary>
		<author><name>Ed</name></author>
	</entry>
</feed>