1*4882a593Smuzhiyun{% load static %} 2*4882a593Smuzhiyun{% load humanize %} 3*4882a593Smuzhiyun{% load project_url_tag %} 4*4882a593Smuzhiyun<script src="{% static 'js/mrbsection.js' %}"></script> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun{% if mru %} 7*4882a593Smuzhiyun {% if mrb_type == 'project' %} 8*4882a593Smuzhiyun <h2> 9*4882a593Smuzhiyun Latest project builds 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun {% if project.is_default %} 12*4882a593Smuzhiyun <span class="glyphicon glyphicon-question-sign get-help heading-help" data-original-title="Builds in this project cannot be started from Toaster: they are started from the command line"></span> 13*4882a593Smuzhiyun {% endif %} 14*4882a593Smuzhiyun </h2> 15*4882a593Smuzhiyun {% else %} 16*4882a593Smuzhiyun <div class="page-header"> 17*4882a593Smuzhiyun <h1>Latest builds</h1> 18*4882a593Smuzhiyun </div> 19*4882a593Smuzhiyun {% endif %} 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun <div id="latest-builds"> 22*4882a593Smuzhiyun {% for build in mru %} 23*4882a593Smuzhiyun <div data-latest-build-result="{{build.id}}" class="alert build-result {% if build.outcome == build.SUCCEEDED %}alert-success{% elif build.outcome == build.FAILED %}alert-danger{% else %}alert-info{% endif %}"> 24*4882a593Smuzhiyun <!-- project title --> 25*4882a593Smuzhiyun {% if mrb_type != 'project' %} 26*4882a593Smuzhiyun <div class="row project-name"> 27*4882a593Smuzhiyun <div class="col-md-12"> 28*4882a593Smuzhiyun <small> 29*4882a593Smuzhiyun <a class="alert-link text-uppercase" href="{% project_url build.project %}"> 30*4882a593Smuzhiyun {{build.project.name}} 31*4882a593Smuzhiyun </a> 32*4882a593Smuzhiyun </small> 33*4882a593Smuzhiyun </div> 34*4882a593Smuzhiyun </div> 35*4882a593Smuzhiyun {% endif %} 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun <div class="row" data-role="build-status-container"> 38*4882a593Smuzhiyun <div class="col-md-12"> 39*4882a593Smuzhiyun Loading... 40*4882a593Smuzhiyun </div> 41*4882a593Smuzhiyun </div> 42*4882a593Smuzhiyun </div> 43*4882a593Smuzhiyun {% endfor %} 44*4882a593Smuzhiyun </div> 45*4882a593Smuzhiyun{% endif %} 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun<!-- build main template --> 48*4882a593Smuzhiyun<script id="build-template" type="text/x-jsrender"> 49*4882a593Smuzhiyun <div class="col-md-3"> 50*4882a593Smuzhiyun <!-- only show link for completed builds --> 51*4882a593Smuzhiyun <%if state == 'Succeeded' || state == 'Failed'%> 52*4882a593Smuzhiyun <a class="alert-link" href="<%:dashboard_url%>"> 53*4882a593Smuzhiyun <span data-toggle="tooltip" data-role="targets-text" title="Recipes: <%:targets%>"> 54*4882a593Smuzhiyun <%:targets_abbreviated%> 55*4882a593Smuzhiyun </span> 56*4882a593Smuzhiyun </a> 57*4882a593Smuzhiyun <%else targets_abbreviated !== ''%> 58*4882a593Smuzhiyun <span data-toggle="tooltip" data-role="targets-text" title="Recipes: <%:targets%>"> 59*4882a593Smuzhiyun <%:targets_abbreviated%> 60*4882a593Smuzhiyun </span> 61*4882a593Smuzhiyun <%else%> 62*4882a593Smuzhiyun Fetching recipe names... 63*4882a593Smuzhiyun <%/if%> 64*4882a593Smuzhiyun </div> 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun <div data-build-state="<%:state%>"> 67*4882a593Smuzhiyun <%if state == 'Cloning'%> 68*4882a593Smuzhiyun <%include tmpl='#cloning-repos-build-template'/%> 69*4882a593Smuzhiyun <%else state == 'Parsing'%> 70*4882a593Smuzhiyun <%include tmpl='#parsing-recipes-build-template'/%> 71*4882a593Smuzhiyun <%else state == 'Queued'%> 72*4882a593Smuzhiyun <%include tmpl='#queued-build-template'/%> 73*4882a593Smuzhiyun <%else state == 'Succeeded' || state == 'Failed'%> 74*4882a593Smuzhiyun <%include tmpl='#succeeded-or-failed-build-template'/%> 75*4882a593Smuzhiyun <%else state == 'Cancelling'%> 76*4882a593Smuzhiyun <%include tmpl='#cancelling-build-template'/%> 77*4882a593Smuzhiyun <%else state == 'Starting'%> 78*4882a593Smuzhiyun <%include tmpl='#starting-template'/%> 79*4882a593Smuzhiyun <%else state == 'In Progress'%> 80*4882a593Smuzhiyun <%include tmpl='#in-progress-build-template'/%> 81*4882a593Smuzhiyun <%else state == 'Cancelled'%> 82*4882a593Smuzhiyun <%include tmpl='#cancelled-build-template'/%> 83*4882a593Smuzhiyun <%/if%> 84*4882a593Smuzhiyun </div> 85*4882a593Smuzhiyun</script> 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun<!-- queued build --> 88*4882a593Smuzhiyun<script id="queued-build-template" type="text/x-jsrender"> 89*4882a593Smuzhiyun <div class="col-md-5"> 90*4882a593Smuzhiyun <span class="glyphicon glyphicon-question-sign get-help get-help-blue" 91*4882a593Smuzhiyun title="This build is waiting for the build directory to become available"> 92*4882a593Smuzhiyun </span> 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun Build queued 95*4882a593Smuzhiyun </div> 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun <div class="col-md-4"> 98*4882a593Smuzhiyun <!-- cancel button --> 99*4882a593Smuzhiyun <%include tmpl='#cancel-template'/%> 100*4882a593Smuzhiyun </div> 101*4882a593Smuzhiyun</script> 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun<!-- cloning repos build --> 104*4882a593Smuzhiyun<script id="cloning-repos-build-template" type="text/x-jsrender"> 105*4882a593Smuzhiyun <!-- progress bar and parse completion percentage --> 106*4882a593Smuzhiyun <div data-role="build-status" class="col-md-4 col-md-offset-1 progress-info"> 107*4882a593Smuzhiyun <!-- progress bar --> 108*4882a593Smuzhiyun <div class="progress"> 109*4882a593Smuzhiyun <div id="repos-cloned-percentage-bar-<%:id%>" 110*4882a593Smuzhiyun style="width: <%:repos_cloned_percentage%>%;" 111*4882a593Smuzhiyun class="progress-bar"> 112*4882a593Smuzhiyun </div> 113*4882a593Smuzhiyun </div> 114*4882a593Smuzhiyun </div> 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun <div class="col-md-4 progress-info"> 117*4882a593Smuzhiyun <!-- parse completion percentage --> 118*4882a593Smuzhiyun <span class="glyphicon glyphicon-question-sign get-help get-help-blue" 119*4882a593Smuzhiyun title="Toaster is cloning the repos required for your build"> 120*4882a593Smuzhiyun </span> 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun Cloning <span id="repos-cloned-percentage-<%:id%>"><%:repos_cloned_percentage%></span>% complete <span id="repos-cloned-progressitem-<%:id%>">(<%:progress_item%>)</span> 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun <%include tmpl='#cancel-template'/%> 125*4882a593Smuzhiyun </div> 126*4882a593Smuzhiyun</script> 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun<!-- parsing recipes build --> 129*4882a593Smuzhiyun<script id="parsing-recipes-build-template" type="text/x-jsrender"> 130*4882a593Smuzhiyun <!-- progress bar and parse completion percentage --> 131*4882a593Smuzhiyun <div data-role="build-status" class="col-md-4 col-md-offset-1 progress-info"> 132*4882a593Smuzhiyun <!-- progress bar --> 133*4882a593Smuzhiyun <div class="progress"> 134*4882a593Smuzhiyun <div id="recipes-parsed-percentage-bar-<%:id%>" 135*4882a593Smuzhiyun style="width: <%:recipes_parsed_percentage%>%;" 136*4882a593Smuzhiyun class="progress-bar"> 137*4882a593Smuzhiyun </div> 138*4882a593Smuzhiyun </div> 139*4882a593Smuzhiyun </div> 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun <div class="col-md-4 progress-info"> 142*4882a593Smuzhiyun <!-- parse completion percentage --> 143*4882a593Smuzhiyun <span class="glyphicon glyphicon-question-sign get-help get-help-blue" 144*4882a593Smuzhiyun title="BitBake is parsing the layers required for your build"> 145*4882a593Smuzhiyun </span> 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun Parsing <span id="recipes-parsed-percentage-<%:id%>"><%:recipes_parsed_percentage%></span>% complete 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun <%include tmpl='#cancel-template'/%> 150*4882a593Smuzhiyun </div> 151*4882a593Smuzhiyun</script> 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun<!-- in progress build; tasks still starting --> 154*4882a593Smuzhiyun<script id="starting-template" type="text/x-jsrender"> 155*4882a593Smuzhiyun <div class="col-md-5"> 156*4882a593Smuzhiyun <span class="glyphicon glyphicon-question-sign get-help get-help-blue" 157*4882a593Smuzhiyun title="This build is waiting for tasks to start"> 158*4882a593Smuzhiyun </span> 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun Tasks starting... 161*4882a593Smuzhiyun </div> 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun <div class="col-md-4"> 164*4882a593Smuzhiyun <!-- cancel button --> 165*4882a593Smuzhiyun <%include tmpl='#cancel-template'/%> 166*4882a593Smuzhiyun </div> 167*4882a593Smuzhiyun</script> 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun<!-- in progress build; at least one task finished --> 170*4882a593Smuzhiyun<script id="in-progress-build-template" type="text/x-jsrender"> 171*4882a593Smuzhiyun <!-- progress bar and task completion percentage --> 172*4882a593Smuzhiyun <div data-role="build-status" class="col-md-4 col-md-offset-1 progress-info"> 173*4882a593Smuzhiyun <!-- progress bar --> 174*4882a593Smuzhiyun <div class="progress" id="build-pc-done-title-<%:id%>"> 175*4882a593Smuzhiyun <div id="build-pc-done-bar-<%:id%>" 176*4882a593Smuzhiyun style="width: <%:tasks_complete_percentage%>%;" 177*4882a593Smuzhiyun class="progress-bar"> 178*4882a593Smuzhiyun </div> 179*4882a593Smuzhiyun </div> 180*4882a593Smuzhiyun </div> 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun <div class="col-md-4 progress-info"> 183*4882a593Smuzhiyun <!-- task completion percentage --> 184*4882a593Smuzhiyun <span id="build-pc-done-<%:id%>"><%:tasks_complete_percentage%></span>% of 185*4882a593Smuzhiyun tasks complete 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun <!-- cancel button --> 188*4882a593Smuzhiyun <%include tmpl='#cancel-template'/%> 189*4882a593Smuzhiyun </div> 190*4882a593Smuzhiyun</script> 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun<!-- cancelling build --> 193*4882a593Smuzhiyun<script id="cancelling-build-template" type="text/x-jsrender"> 194*4882a593Smuzhiyun <div class="col-md-9"> 195*4882a593Smuzhiyun Cancelling the build ... 196*4882a593Smuzhiyun </div> 197*4882a593Smuzhiyun</script> 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun<!-- succeeded or failed build --> 200*4882a593Smuzhiyun<script id="succeeded-or-failed-build-template" type="text/x-jsrender"> 201*4882a593Smuzhiyun <!-- completed_on --> 202*4882a593Smuzhiyun <div class="col-md-2"> 203*4882a593Smuzhiyun <%:completed_on%> 204*4882a593Smuzhiyun </div> 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun <!-- errors --> 207*4882a593Smuzhiyun <div class="col-md-2"> 208*4882a593Smuzhiyun <%if errors%> 209*4882a593Smuzhiyun <span class="glyphicon glyphicon-minus-sign"></span> 210*4882a593Smuzhiyun <a href="<%:dashboard_errors_url%>" class="alert-link"> 211*4882a593Smuzhiyun <%:errors%> error<%:errors_pluralise%> 212*4882a593Smuzhiyun </a> 213*4882a593Smuzhiyun <%/if%> 214*4882a593Smuzhiyun </div> 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun <!-- warnings --> 217*4882a593Smuzhiyun <div class="col-md-2"> 218*4882a593Smuzhiyun <%if warnings%> 219*4882a593Smuzhiyun <span class="glyphicon glyphicon-warning-sign build-warnings"></span> 220*4882a593Smuzhiyun <a href="<%:dashboard_warnings_url%>" class="alert-link build-warnings"> 221*4882a593Smuzhiyun <%:warnings%> warning<%:warnings_pluralise%> 222*4882a593Smuzhiyun </a> 223*4882a593Smuzhiyun <%/if%> 224*4882a593Smuzhiyun </div> 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun <!-- build time --> 227*4882a593Smuzhiyun <div class="col-md-3"> 228*4882a593Smuzhiyun Build time: 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun <span data-role="data-recent-build-buildtime-field"> 231*4882a593Smuzhiyun <%if state == 'Succeeded'%> 232*4882a593Smuzhiyun <a class="alert-link" href="<%:buildtime_url%>"><%:buildtime%></a> 233*4882a593Smuzhiyun <%else%> 234*4882a593Smuzhiyun <%:buildtime%> 235*4882a593Smuzhiyun <%/if%> 236*4882a593Smuzhiyun </span> 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun <!-- rebuild button --> 239*4882a593Smuzhiyun <%include tmpl='#rebuild-template'/%> 240*4882a593Smuzhiyun </div> 241*4882a593Smuzhiyun</script> 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun<!-- cancelled build --> 244*4882a593Smuzhiyun<script id="cancelled-build-template" type="text/x-jsrender"> 245*4882a593Smuzhiyun <!-- build cancelled message --> 246*4882a593Smuzhiyun <div class="col-md-6"> 247*4882a593Smuzhiyun Build cancelled 248*4882a593Smuzhiyun </div> 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun <!-- rebuild button --> 251*4882a593Smuzhiyun <div class="col-md-3"> 252*4882a593Smuzhiyun <%include tmpl='#rebuild-template'/%> 253*4882a593Smuzhiyun </div> 254*4882a593Smuzhiyun</script> 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun<!-- rebuild button or no rebuild icon --> 257*4882a593Smuzhiyun<script id="rebuild-template" type="text/x-jsrender"> 258*4882a593Smuzhiyun <%if is_default_project_build%> 259*4882a593Smuzhiyun <!-- no rebuild info icon --> 260*4882a593Smuzhiyun <span class="pull-right glyphicon glyphicon-question-sign get-help <%if state == 'Succeeded'%>get-help-green<%else state == 'Failed'%>get-help-red<%else%>get-help-blue<%/if%>" 261*4882a593Smuzhiyun title="Builds in this project cannot be started from Toaster: they are started from the command line"> 262*4882a593Smuzhiyun </span> 263*4882a593Smuzhiyun <%else%> 264*4882a593Smuzhiyun <!-- rebuild button --> 265*4882a593Smuzhiyun <span class="rebuild-btn alert-link <%if state == 'Success'%>success<%else state == 'Failed'%>danger<%else%>info<%/if%> pull-right" 266*4882a593Smuzhiyun data-request-url="<%:rebuild_url%>" data-target='<%:build_targets_json%>'> 267*4882a593Smuzhiyun <span class="glyphicon glyphicon-repeat"></span> 268*4882a593Smuzhiyun Rebuild 269*4882a593Smuzhiyun </span> 270*4882a593Smuzhiyun <%/if%> 271*4882a593Smuzhiyun</script> 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun<!-- cancel button or no cancel icon --> 274*4882a593Smuzhiyun<script id="cancel-template" type="text/x-jsrender"> 275*4882a593Smuzhiyun <%if is_default_project_build%> 276*4882a593Smuzhiyun <!-- no cancel icon --> 277*4882a593Smuzhiyun <span class="glyphicon glyphicon-question-sign get-help get-help-blue pull-right" title="Builds in this project cannot be cancelled from Toaster: they can only be cancelled from the command line"></span> 278*4882a593Smuzhiyun <%else%> 279*4882a593Smuzhiyun <!-- cancel button --> 280*4882a593Smuzhiyun <span class="cancel-build-btn pull-right alert-link" 281*4882a593Smuzhiyun data-buildrequest-id="<%:buildrequest_id%>" data-request-url="<%:cancel_url%>"> 282*4882a593Smuzhiyun <span class="glyphicon glyphicon-remove-circle"></span> 283*4882a593Smuzhiyun Cancel 284*4882a593Smuzhiyun </span> 285*4882a593Smuzhiyun <%/if%> 286*4882a593Smuzhiyun</script> 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun<script> 289*4882a593Smuzhiyun $(document).ready(function () { 290*4882a593Smuzhiyun var ctx = { 291*4882a593Smuzhiyun mrbType : "{{mrb_type}}", 292*4882a593Smuzhiyun } 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun try { 295*4882a593Smuzhiyun mrbSectionInit(ctx); 296*4882a593Smuzhiyun } catch (e) { 297*4882a593Smuzhiyun document.write("Sorry, An error has occurred loading this page"); 298*4882a593Smuzhiyun console.warn(e); 299*4882a593Smuzhiyun } 300*4882a593Smuzhiyun }); 301*4882a593Smuzhiyun</script> 302