- adapted ui for hydra, more in line with nixos.org website

[?]
Jan 7, 2010, 2:25 PM
QL55ECJ6KMMBUOWQ6LKSOVN7L43CH4S6SPE2AQ3VX3KSGC32RP4AC

Dependencies

  • [2] VHYWSRIS * Add nix version to footer of hydra pages
  • [3] FKK2ZSTL * Split the CSS.
  • [4] RBNQKATL * Adding persistant releases. A release is a named set of builds.
  • [5] OZ5UBJEK
  • [6] 4JPNFWRB * Use jquery for the logfile manipulation.
  • [7] TQKGQ5R3
  • [8] JRU2LRPZ
  • [9] UWVMQIAC * Refactoring.
  • [10] 75XUS62Y * Added a page to quickly see all failed builds and failed evaluations
  • [11] YTSIRIMK * Separate job status and all builds pages.
  • [12] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [13] DEMSSSB2 * Controller for jobs which inherits all actions in ListBuilds. So
  • [14] BTUDUY6F * Provide some redirects to the latest successful build for a job (or
  • [15] 2AIIYGI5 * Show job status and all builds for a project.
  • [16] 4D4U5IPY * Allow jobsets to be disabled.
  • [17] FEMR2C5W
  • [18] 4S4ZMFJK * Links on trs.
  • [19] E74FJWCF * Pass the page number in the URI query string.
  • [20] RAKTHYAI * In the job status and error pages, show when the status of a job
  • [21] T2232OBS * Add some DB indices to make the /releases page much faster.
  • [22] DGVPFNCU * Grabbed a logo. TODO: check copyright status.
  • [23] J5UVLXOK * Start of a basic Catalyst web interface.
  • [24] UVMFS73T * Some jQuery / CSS hackery.
  • [25] GNIEG2GC * Disambiguate jobs by jobset name. I.e. jobs with the same name in
  • [26] BA46C5LN * Pretty-print the logs.
  • [27] KR7QIG6Z
  • [28] 7Z3YOKCV * PROCESS -> INCLUDE in most cases. INCLUDE does proper scoping of
  • [29] JK2QWPH6
  • [30] CV5HAOSH
  • [31] JLDUSNUO * Unify rendering of finished and scheduled builds.
  • [32] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [33] S66BOMVU * Added authentication.
  • [34] SJN2QPWH * Big speed-up of the job status page and the channel generation (such
  • [35] HCKFTNQ6
  • [36] 3HZY24CX * Make jobsets viewable under
  • [*] IK53RV4V
  • [*] IE3SRMWZ * Show global and per-project statistics.
  • [*] D5QIOJGP * Move everything up one directory.
  • [*] A52HEFHQ * Allow builds to be restarted (if they failed with a transient error,

Change contents

  • replacement in src/lib/Hydra/Base/Controller/ListBuilds.pm at line 56
    [6.505][6.505:534]()
    my $resultsPerPage = 50;
    [6.505]
    [6.534]
    my $resultsPerPage = 20;
  • replacement in src/root/all.tt at line 12
    [6.1298][6.0:30](),[6.30][6.1328:1329](),[6.1328][6.1328:1329]()
    [% INCLUDE renderBuildList %]
    [6.1298]
    [5.107]
    [% BLOCK renderNav %]
  • edit in src/root/all.tt at line 23
    [5.117]
    [6.1662]
    [% END %]
  • edit in src/root/all.tt at line 25
    [6.1663]
    [6.1663]
    [% INCLUDE renderNav %]
    [% INCLUDE renderBuildList %]
    [% INCLUDE renderNav %]
  • replacement in src/root/common.tt at line 71
    [6.916][6.916:944]()
    <th>Priority</th>
    [6.916]
    [6.944]
    <th>P</th>
  • replacement in src/root/common.tt at line 80
    [6.2076][6.1059:1088](),[6.1059][6.1059:1088]()
    <th>Description</th>
    [6.2076]
    [6.1088]
    [% IF showDescription %]
    <th>Description</th>
    [% END %]
  • edit in src/root/common.tt at line 125
    [6.2494]
    [6.2103]
    [% IF showDescription %]
  • edit in src/root/common.tt at line 127
    [6.2146]
    [6.2146]
    [% END -%]
  • edit in src/root/common.tt at line 134
    [39.815]
    [39.815]
    [% BLOCK renderLink %]<a href="[% uri %]">[% title %]</a>[% END %]
  • file addition: contextbar.tt (----------)
    [40.1486]
    [% BLOCK makeLinkWrapped %]
    <li [% IF curUri == uri %]class="active"[% END %]>
    <a href="[% uri %]">[% title %]</a>
    [% content %]
    </li>
    [% END %]
    [% BLOCK makeLink -%]
    [% INCLUDE makeLinkWrapped content="" -%]
    [% END %]
    [% BLOCK makeSubMenu %]
    <ul class="short-menu" id="context-menu">
    [% content %]
    </ul>
    [% END %]
    [% IF project %]
    [% WRAPPER makeSubMenu %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('view'), [project.name])
    title = project.name %]
    [% IF jobset %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('index'), [project.name, jobset.name])
    title = jobset.name %]
    [% END %]
    [% IF job %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('index'), [project.name, jobset.name, job.name])
    title = job.name %]
    [% END %]
    [% END %]
    [% END %]
  • replacement in src/root/job.tt at line 5
    [6.7781][6.7781:7855]()
    <h1>Job <tt>[% project.name %]:[% jobset.name %]:[% job.name %]</tt></h1>
    [6.7781]
    [6.7855]
    <h1>Job <tt>[% INCLUDE renderLink
    uri = c.uri_for(c.controller('Project').action_for('view'), [project.name])
    title = project.name %]:[% INCLUDE renderLink
    uri = c.uri_for(c.controller('Jobset').action_for('index'), [project.name, jobset.name])
    title = jobset.name %]:[% job.name %]</tt></h1>
  • edit in src/root/jobset.tt at line 3
    [6.8624][6.8624:8625]()
  • replacement in src/root/jobset.tt at line 12
    [6.8930][6.8930:8994]()
    <h1>Jobset <tt>[% project.name %]:[% jobset.name %]</tt></h1>
    [6.8930]
    [6.8994]
    <h1>Jobset <tt>[% INCLUDE renderLink
    uri = c.uri_for(c.controller('Project').action_for('view'), [project.name])
    title = project.name %]:[% jobset.name %]</tt></h1>
  • edit in src/root/layout.tt at line 14
    [6.307][3.0:76]()
    <link rel="stylesheet" href="/static/css/navbar.css" type="text/css" />
  • edit in src/root/layout.tt at line 15
    [3.156]
    [6.307]
    <link rel="stylesheet" href="/static/css/nixos-site.css" type="text/css" />
  • replacement in src/root/layout.tt at line 74
    [6.11584][6.3628:3682](),[6.3682][6.14982:15135]()
    <div id="container">
    <div id="leftnavbar">
    <div id="logo"><a class="no-hover" href="/"><img src="/static/images/hydra.png" alt="Hydra" /></a></div>
    [% PROCESS navbar.tt %]
    [6.11584]
    [6.4730]
    <div id="page">
    <div id="header">
    <div id="logo"><a class="no-hover" href="/"><img src="/static/images/hydra.png" alt="Hydra Logo" /></a></div>
    [% PROCESS topbar.tt %]
    [% PROCESS contextbar.tt %]
  • edit in src/root/layout.tt at line 81
    [6.4743]
    [6.4743]
    <div id="main">
    [% PROCESS navbar.tt %]
  • replacement in src/root/layout.tt at line 84
    [6.4744][6.4744:4834](),[6.4834][2.173:264](),[2.264][6.2083:2141](),[6.2083][6.2083:2141](),[6.79][6.4708:4824](),[6.1505][6.4708:4824](),[6.2141][6.4708:4824](),[6.615][6.4708:4824]()
    <div id="content">
    [% content %]
    <div id="footer">
    <hr />
    <em>Hydra [% HTML.escape(version) %] (using [% HTML.escape(nixVersion) %]).</em>
    Page generated on [% INCLUDE renderDateTime %].
    [% IF c.user_exists %]
    You are logged in as <tt>[% c.user.username %]</tt>.
    [% END %]
    [6.4744]
    [6.4876]
    <div id="content">
    [% content %]
  • edit in src/root/layout.tt at line 87
    [6.4891]
    [6.4891]
  • edit in src/root/layout.tt at line 89
    [6.4904]
    [6.11641]
    <div id="footer">
    <div id="last-modified">
    <em>Hydra [% HTML.escape(version) %] (using [% HTML.escape(nixVersion) %]).</em>
    Page generated on [% INCLUDE renderDateTime %].
    [% IF c.user_exists %]
    You are logged in as <tt>[% c.user.username %]</tt>.
    [% END %]
    </div>
  • edit in src/root/navbar.tt at line 5
    [6.15302]
    [6.15302]
    </li>
    [% END %]
    [% BLOCK menuItem %]
    <li [% IF "${root}${curUri}" == uri %]class="active"[% END %]>
    <a href="[% uri %]">[% title %]</a>
  • replacement in src/root/navbar.tt at line 21
    [6.15465][6.15465:15700]()
    <li class="submenu">
    <div class="title [% extra %]"><a class="[% collapsed ? "submenuToggleCollapsed" : "submenuToggleExpanded" %]"
    href="javascript:">[% HTML.escape(title) %]</a></div>
    <ul class="submenu [% extra %]">
    [6.15465]
    [6.15700]
    <div id="left-title">[% title %]</div>
    <ul id="left-menu">
  • replacement in src/root/navbar.tt at line 24
    [6.15720][6.15720:15738]()
    </ul>
    </li>
    [6.15720]
    [6.15738]
    </ul>
  • replacement in src/root/navbar.tt at line 27
    [6.15749][6.15749:16318](),[6.16318][6.3072:3193](),[6.3193][6.16318:16330](),[6.16318][6.16318:16330]()
    <ul class="menu">
    [% WRAPPER makeSubMenu title="Hydra" collapsed=0 %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('index'))
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('queue'))
    title = "Queue" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('all'))
    title = "All builds" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('jobstatus'))
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('errors'))
    title = "Errors" %]
    [% END %]
    [6.15749]
    [6.16330]
    [% IF project %]
  • edit in src/root/navbar.tt at line 29
    [6.16331]
    [6.16331]
    <div id="left-bar">
  • replacement in src/root/navbar.tt at line 33
    [6.16424][6.16424:16591](),[6.16591][4.3476:3621](),[4.3621][6.16591:16853](),[6.16591][6.16591:16853](),[6.16853][6.3194:3334]()
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('view'), [project.name])
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('releases'), [project.name])
    title = "Releases" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('all'), [project.name])
    title = "All builds" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('jobstatus'), [project.name])
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('errors'), [project.name])
    title = "Errors" %]
    [6.16424]
    [6.16853]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('view'), [project.name]) title = "Overview" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('releases'), [project.name]) title = "Releases" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('all'), [project.name]) title = "All builds" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('jobstatus'), [project.name]) title = "Job status" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('errors'), [project.name]) title = "Errors" %]
  • replacement in src/root/navbar.tt at line 77
    [6.18027][6.18027:18548]()
    [% WRAPPER makeSubMenu title="Admin" collapsed=0 %]
    [% IF c.user_exists %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('logout'))
    title = "Logout" %]
    [% ELSE %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('login'))
    title = "Login" %]
    [% END %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Project').action_for('create'))
    title = "Create project" %]
    [% END %]
    </ul>
    [6.18027]
    [6.18548]
    </div>
    [% END %]
  • edit in src/root/navbar.tt at line 81
    [6.18550][6.18550:19037]()
    <script type="text/javascript">
    $(document).ready(function() {
    $('.submenuToggleExpanded').toggle(
    function () { $(".submenu", $(this).parents(".submenu")).slideUp(); },
    function () { $(".submenu", $(this).parents(".submenu")).slideDown(); }
    );
    $('.submenuToggleCollapsed').toggle(
    function () { $(".submenu", $(this).parents(".submenu")).slideDown(); },
    function () { $(".submenu", $(this).parents(".submenu")).slideUp(); }
    );
    });
    </script>
  • edit in src/root/overview.tt at line 36
    [6.20058]
    [6.20058]
    [% IF c.user_exists %]
    <p>
    [ [% INCLUDE maybeLink
    uri = c.uri_for(c.controller('Project').action_for('create'))
    content = "Create project" %] ]
    </p>
    [% END %]
  • replacement in src/root/static/css/hydra.css at line 2
    [3.169][3.169:186]()
    width: 11em;
    [3.169]
    [6.8897]
    width: 8em;
  • edit in src/root/static/css/hydra.css at line 157
    [41.2011]
  • file addition: nixos-site.css (----------)
    [40.2111]
    body {
    background-color: gray;
    margin: 0;
    }
    /* The main container element. */
    div#page {
    max-width: 80em;
    min-width: 50em;
    min-height: 20em;
    margin: 1em auto;
    background-color: white;
    /* Put a rounded border around the page. */
    border: 1px solid black;
    padding: 1em;
    border-radius: 1em;
    -moz-border-radius: 1em;
    -webkit-border-radius: 1em;
    -moz-box-shadow: #404040 0px 5px 50px;
    -webkit-box-shadow: #404040 0px 5px 50px;
    }
    /* The header. */
    div#header {
    border-bottom: 1px solid black;
    position: relative;
    padding-bottom: 1em;
    }
    div#logo {
    display: inline;
    }
    ul#top-menu {
    top: 0em;
    }
    ul#context-menu {
    bottom: 1em;
    }
    /* The footer. */
    div#footer {
    margin-top: 1em;
    border-top: 1px solid black;
    position: relative;
    }
    div#last-modified {
    font-size: 80%;
    font-style: italic;
    }
    ul#bottom-menu {
    bottom: 0em;
    }
    /* The top and bottom menus. */
    ul.short-menu {
    display: block;
    position: absolute;
    right: 0em;
    margin: 0;
    padding: 0;
    }
    ul.short-menu li {
    display: inline;
    /* Put a ">" in front of the menu item. */
    margin-left: 0.5em;
    padding-left: 1.3em;
    padding-top: 0.5em;
    padding-bottom: 0.5em;
    background-image: url(../images/arrow-right.gif);
    background-repeat: no-repeat;
    background-position: 0.3em center;
    }
    ul.short-menu li a {
    color: black;
    text-decoration: none;
    }
    ul.short-menu li a:hover {
    text-decoration: none;
    border-bottom: 1px dotted black;
    background: white;
    }
    /* The left menu. */
    div#main {
    position: relative;
    min-height: 10em;
    }
    div#left-bar {
    position: absolute;
    left: 0em;
    width: 8em;
    min-height: 10em;
    }
    div#left-title {
    font-weight: bold;
    padding-bottom: 0.5em;
    margin-bottom: 0.5em;
    border-bottom: 1px dotted black;
    }
    ul#left-menu {
    padding: 0 0 0 0;
    margin: 0 0 0 0;
    }
    ul#left-menu li {
    font-size: 90%;
    list-style: none;
    padding-left: 1.3em;
    margin-bottom: 0.5em;
    }
    ul#left-menu li {
    background-image: url(../images/arrow-right.gif);
    background-repeat: no-repeat;
    background-position: 0 center;
    }
    ul#left-menu li.active {
    background-image: url(../images/arrow-right-active.gif);
    background-color: #eef2ff;
    font-weight: bold;
    color: #606060;
    }
    /* The content. */
    div#left-bar + div#content {
    margin-left: 9em;
    }
    /* Inline (floating) images. */
    img.inline, img.inlineNoBorder {
    float: right;
    margin-left: 1em;
    margin-bottom: 1em;
    }
    /* Release tables. */
    .reldate {
    font-style: italic;
    }
    table.releases td {
    border: 0px;
    }
    /* Screenshot table. */
    table.screenshots {
    border-style: hidden;
    }
    table.screenshots td {
    vertical-align: middle;
    padding-top: 0.5em;
    padding-bottom: 0.5em;
    border: 0px;
    border-bottom: 1px dotted black;
    }
  • file addition: topbar.tt (----------)
    [40.1486]
    [% BLOCK makeLinkWrapped %]
    <li [% IF curUri == uri %]class="active"[% END %]>
    <a href="[% uri %]">[% title %]</a>
    [% content %]
    </li>
    [% END %]
    [% BLOCK makeLink -%]
    [% INCLUDE makeLinkWrapped content="" -%]
    [% END %]
    [% BLOCK makeSubMenu %]
    <ul class="short-menu" id="top-menu">
    [% content %]
    </ul>
    </li>
    [% END %]
    [% WRAPPER makeSubMenu title="Hydra" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('index'))
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('queue'))
    title = "Queue" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('all'))
    title = "All builds" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('jobstatus'))
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('errors'))
    title = "Errors" %]
    [% IF c.user_exists %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('logout'))
    title = "Sign out" %]
    [% ELSE %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('login'))
    title = "Sign in" %]
    [% END %]
    [% END %]