
<!DOCTYPE html>

<html lang="en">
<meta charset="utf-8">
<meta name="google" value="notranslate">
<title>
  
      SUCCESS
    
    -
    linux-rel
    13052
</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/green-32.png">


<link rel="stylesheet" href="/static/common/css/timeline.css" type="text/css">
<link rel="stylesheet" href="/static/common/css/tabs.css" type="text/css">
<script>
  const timelineData = JSON.parse("\"timeline goes here\"");
  const useTabs = true;
</script>
<script src="/static/common/js/build.js"></script>


<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>
    
      Builder linux-rel
    
    Build <a href="/p/chromium/builder/ci/linux-rel/13052" aria-label="Build 13052">13052</a>
    
    </h1>

    <div id="tabs" style="display: none;">
      <ul>
        <li><a href="#overview-tab">Overview</a></li>
        <li><a href="#properties-tab">Properties</a></li>
        <li><a href="#changes-tab">Changes</a></li>
        <li><a href="#timeline-tab">Timeline</a></li>
      </ul>
      <div id="overview-tab">
  <div id="overview">
    
    
    <h2>Overview</h2>
    <p class="result status SUCCESS">
      <pre></pre>
    </p>

    
      <h2>Input</h2>
      <table>
        
          <tr>
            <td class="left">Revision</td>
            <td><a href="https://chromium.googlesource.com/chromium/src/+/62c93f6041326a2c4781680583e433bbfad93884">62c93f6041326a2c4781680583e433bbfad93884</a>
            
            </td>
          </tr>
        

        
      </table>
    

    <h2>Infra</h2>
    <ul>
      <li>Buildbucket ID: 8927206632544641856</li>

      
        
        <li>
          Swarming Task:
          <a href="https://chromium-swarm.appspot.com/task?id=41c30ddc76b2e910&show_raw=1&wide_logs=true">
            41c30ddc76b2e910
          </a>
        </li>
        <li>Bot: <a href="https://chromium-swarm.appspot.com/bot?id=swarm582-c4" aria-label="swarming bot swarm582-c4">swarm582-c4</a></li>
        

        
          <li>
            Recipe: <a href="https://cs.chromium.org/search/?q=file:recipes/chromium.py" aria-label="recipe chromium">chromium</a>
          </li>
        
      
    </ul>

    <h2>Steps and Logs</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">
    <label for="showNonGreen">Non-Green</label>

    <ol id="steps">
      
    </ol>

    <h2>Timing</h2>
    <table class="info" width="100%">
      <tr class="alt">
        <td class="left">Create</td>
        <td><span class="local-time " data-timestamp="1544749339498">Friday, 14-Dec-18 01:02:19 UTC</span></td>
      </tr>
      <tr>
        <td class="left">Start</td>
        <td><span class="local-time " data-timestamp="1544749341404">Friday, 14-Dec-18 01:02:21 UTC</span></td>
      </tr>
      <tr class="alt">
        <td class="left">End</td>
        <td><span class="local-time " data-timestamp="1544749976253">Friday, 14-Dec-18 01:12:56 UTC</span></td>
      </tr>
      <tr>
        <td class="left">Pending</td>
        <td id="duration">1 secs</td>
      </tr>
      <tr class="alt">
        <td class="left">Execution</td>
        <td id="duration">10 mins 34 secs</td>
      </tr>
    </table>
  </div>
</div>
      <div id="properties-tab">
  <div id="properties">
    

    

  </div>
</div>
      <div id="changes-tab">
  <div id="changes">
    <h2>All Changes</h2>
    
      No Blamelist
     
  </div>
</div>
      <div id="timeline-tab">
  <div id="timeline">
    <div id="timeline-rendering">Rendering...</div>
  </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>
