
<!DOCTYPE html>

<html lang="en">
<meta charset="utf-8">
<meta name="google" value="notranslate">
<title>
  
      Running
    
    -
     2d8d62f6be545b10
</title>
<link rel="stylesheet" href="/static/buildbot/css/default.css" type="text/css">
<link rel="stylesheet" href="/static/common/third_party/css/jquery-ui.min.css" type="text/css">
<link rel="stylesheet" href="/static/common/third_party/css/vis.min.css" type="text/css">
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="LUCI" />
<script src="/static/common/third_party/js/moment-with-locales.min.js"></script>
<script src="/static/common/third_party/js/moment-timezone-with-data-2012-2022.min.js"></script>
<script src="/static/common/js/time.js"></script>
<script src="/static/common/third_party/js/jquery.min.js"></script>
<script src="/static/common/third_party/js/jquery-ui.min.js"></script>
<script src="/static/common/third_party/js/vis-custom.min.js"></script>

<link id="favicon" rel="shortcut icon" type="image/png" href="/static/common/favicon/yellow-32.png">


<script src="/static/common/js/build.js"></script>
<link rel="stylesheet" href="/static/common/css/tabs.css" type="text/css">



<body class="interface">
  <header>
    <div>
      <a href="/" aria-label="Home page">Home</a> |
      <a href="/search" aria-label="Search page">Search</a>
    </div>
    <div>
      
        <a href="http://fake.example.com/login?dest=%2Ffoobar" alt="Login">Login</a>
      
    </div>
  </header>
  <hr>
  
  <div class="content">
    <h1>
    
    Build <a>2d8d62f6be545b10</a>
    
    
    </h1>

    <div id="tabs" style="display: none;">
      <ul>
        <li><a href="#results-tab">Results</a></li>
        <li><a href="#properties-tab">Properties</a></li>
        <li><a href="#changes-tab">Changes</a></li>
        
      </ul>
      <div id="results-tab">
  <div id="results">
    <h2>Results:</h2>
    
      <p class="result status-Running">
      <span class="step-text">Running bot_update </span>
      
      </p>
     

      

    
    <h2>Execution:</h2>
    <ul>
      
      <li>
        Source:
        <a href="https://example.com/task?id=2d8d62f6be545b10&amp;show_raw=1&amp;wide_logs=true"
           aria-label="Source for Task 2d8d62f6be545b10">
          Task 2d8d62f6be545b10
        </a>
      </li>
      

      

      
    </ul>
     

    

    
      <h2>Steps and Logfiles:</h2>
      Show:
      <input type="radio" name="hider" id="showExpanded">
      <label for="showExpanded">Expanded</label>
      <input type="radio" name="hider" id="showDefault">
      <label for="showDefault">Default</label>
      <input type="radio" name="hider" id="showNonGreen" checked>
      <label for="showNonGreen">Non-Green</label>

      <ol id="steps" class="non-green">

        
          
          <li>
            <div class="status-Running result">
              
  
    <span class="duration"
          data-starttime="2016-03-14T10:00:01Z"
          >
          ( 59 mins 58 secs )</span>
  

              <b>Steps</b>
            </div>
            <ul>
              
              <li class="sublink"><a href="/swarming/task/build-unicode/stdout" aria-label="log link for stdout">stdout</a></li>
              
            </ul>
          </li>
          
        

        
          
<li class="green">
  <div class="status-Success result">
      
  
    <span class="duration"
          data-starttime="2016-03-14T10:00:02Z"
          data-endtime="2016-03-14T10:00:03Z">
          ( 1 secs )</span>
  

    <b><a aria-label="recipe bootstrap 😀😄😇">recipe bootstrap 😀😄😇</a></b>
    <span>
      
    </span>
  </div>
  <ul>
    
      <li class="sublink"><a href="/swarming/task/build-unicode/steps/recipe_bootstrap____/0/stdout" aria-label="log link for stdout">stdout</a></li>
    
    
  </ul>
  
</li>

        
          
<li class="green">
  <div class="status-Success result">
      
  
    <span class="duration"
          data-starttime="2016-03-14T10:00:03Z"
          data-endtime="2016-03-14T10:00:04Z">
          ( 1 secs )</span>
  

    <b><a aria-label="setup_build">setup_build</a></b>
    <span>
      <div class="step-text">running recipe: &#34;v8&#34;</div>
    </span>
  </div>
  <ul>
    
      <li class="sublink"><a href="/swarming/task/build-unicode/steps/setup_build/0/stdout" aria-label="log link for stdout">stdout</a></li>
    
      <li class="sublink"><a href="/swarming/task/build-unicode/steps/setup_build/0/logs/run_recipe/0" aria-label="log link for run_recipe">run_recipe</a></li>
    
    
  </ul>
  
</li>

        
          
<li class="">
  <div class="status-Running result">
      
  
    <span class="duration"
          data-starttime="2016-03-14T10:00:05Z"
          >
          ( 59 mins 55 secs )</span>
  

    <b><a aria-label="bot_update">bot_update</a></b>
    <span>
      
    </span>
  </div>
  <ul>
    
      <li class="sublink"><a href="/swarming/task/build-unicode/steps/bot_update/0/stdout" aria-label="log link for stdout">stdout</a></li>
          <link rel="prerender" href="/swarming/task/build-unicode/steps/bot_update/0/stdout">
          <link rel="prefetch" href="/swarming/task/build-unicode/steps/bot_update/0/stdout">
        
      
    
    
  </ul>
  
</li>

        
      </ol>
     

  </div>
</div>
      <div id="properties-tab">
  <div id="properties">
    <h2>Build Properties:</h2>

    <table class="info BuildProperties" width="100%">
    <tr><th>Name</th><th>Value</th><th>Source</th></tr>

      
      
        
          <tr>
            <td class="left">path_config</td>
            <td class="middle"><abbr title="kitchen">kitchen</abbr></td>
            <td>recipe bootstrap 😀😄😇</td>
          </tr>
        
          <tr>
            <td class="left">slavename🐱</td>
            <td class="middle"><abbr title="🐧🐧🐧">🐧🐧🐧</abbr></td>
            <td>recipe bootstrap 😀😄😇</td>
          </tr>
        
          <tr>
            <td class="left">buildername</td>
            <td class="middle"><abbr title="infra-continuous-precise-32">infra-continuous-precise-32</abbr></td>
            <td>recipe bootstrap 😀😄😇</td>
          </tr>
        
          <tr>
            <td class="left">mastername</td>
            <td class="middle"><abbr title="🐝chromium.infra">🐝chromium.infra</abbr></td>
            <td>recipe bootstrap 😀😄😇</td>
          </tr>
        
      
      
        
      
      
        
      
      
        
      
    </table>

    

    <h2>Timing:</h2>
    <table class="info" width="100%">
      <tr class="alt"><td class="left">Create</td>
      <td>
        N/A
      </td></tr>
      <tr><td class="left">Start</td>
      <td>
        <span class="local-time " data-timestamp="1457949601850">Monday, 14-Mar-16 10:00:01 UTC</span>
      </td></tr>
      <tr class="alt"><td class="left">End</td>
      <td>
        N/A
      </td></tr>
      <tr><td class="left">Pending</td>
      <td id="duration">
        
          N/A
        
      </td></tr>
      <tr class="alt"><td class="left">Execution</td>
      <td id="duration">
        
          59 mins 58 secs
        
      </td></tr>
    </table>

  </div>
</div>
      <div id="changes-tab">
  <div id="changes">
    
  </div>
</div>
      
    </div>
  </div>

  <footer>
    <hr>
      <div><img class="lucy-logo" src="https://storage.googleapis.com/chrome-infra/lucy-small.png"></div>
      <div>
        <a href="https://chromium.googlesource.com/infra/luci">LUCI</a><br>
        built: <b><span class="local-time " data-timestamp="-6792498672871">Saturday, 03-Feb-01 04:05:06 UTC</span></b><br>
        version: <b>testVersionID</b><br>
      </div>
  </footer>
</body>
<script>
$(function () {
  'use strict';
  
  setTimeout(function() {
    milo.makeTimesLocal();
    milo.annotateDurations();
  }, 0);
  $(document).tooltip({
    show: false,
    hide: false
  });
});
</script>
<script>
  (function(i,s,o,g,r,a,m){i['CrDXObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://storage.googleapis.com/crdx-feedback.appspot.com/feedback.js','crdx');

  crdx('setFeedbackButtonLink', 'https://bugs.chromium.org/p/chromium/issues/entry?components=Infra%3EPlatform%3EMilo');

(function(window) {
  let lastWindowScrollTop = window.scrollY;

  function debounce(f, wait) {
    let timeout;
    return function(...args) {
      if (timeout) {
        clearTimeout(timeout);
      }
      timeout = setTimeout(() => {
        f(...args);
        timeout = null;
      }, wait);
    };
  }

  window.addEventListener('scroll', debounce(function(evt) {
    const delta = window.scrollY - lastWindowScrollTop;
    lastWindowScrollTop = window.scrollY;
    const absDelta = Math.abs(delta);
    const category = window.location.pathname.split('/').slice(0, 2).join('/');
    ga('send', 'event', category, 'scroll-abs', '', absDelta);
    if (delta > 0) {
      ga('send', 'event', category, 'scroll-down', '', absDelta);
    } else {
      ga('send', 'event', category, 'scroll-up', '', absDelta);
    }
  }, 250));
})(window);
</script>

<script>
setTimeout(function() {
	(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

	ga('create', 'UA-12345-01', 'auto');
	ga('send', 'pageview');
}, 0);
</script>

</html>
