heidi 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -0
- data/Gemfile.lock +3 -0
- data/README.rdoc +20 -0
- data/VERSION +1 -1
- data/bin/heidi +8 -82
- data/heidi.gemspec +49 -10
- data/lib/heidi.rb +4 -0
- data/lib/heidi/build.rb +42 -10
- data/lib/heidi/builder.rb +7 -2
- data/lib/heidi/hook.rb +2 -0
- data/lib/heidi/integrator.rb +11 -5
- data/lib/heidi/project.rb +37 -24
- data/lib/heidi/shell.rb +119 -0
- data/lib/heidi/tester.rb +6 -5
- data/lib/heidi/web.rb +65 -4
- data/lib/heidi/web/assets/css/bootstrap-responsive.css +643 -0
- data/lib/heidi/web/assets/css/bootstrap.css +3682 -0
- data/lib/heidi/web/{public/css/screen.css → assets/css/colors.css} +1 -75
- data/lib/heidi/web/assets/css/docs.css +772 -0
- data/lib/heidi/web/{public → assets}/images/HeidiBlue-480.png +0 -0
- data/lib/heidi/web/{public → assets}/images/HeidiBlue.gif +0 -0
- data/lib/heidi/web/{public → assets}/images/OrganisedMinds.png +0 -0
- data/lib/heidi/web/{public → assets}/images/heidi.jpeg +0 -0
- data/lib/heidi/web/assets/img/glyphicons-halflings-white.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons-halflings.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_009_magic.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_042_group.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_079_podium.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_082_roundabout.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_155_show_thumbnails.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_163_iphone.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_214_resize_small.png +0 -0
- data/lib/heidi/web/assets/img/glyphicons/glyphicons_266_book_open.png +0 -0
- data/lib/heidi/web/assets/js/README.md +106 -0
- data/lib/heidi/web/assets/js/application.js +180 -0
- data/lib/heidi/web/assets/js/bootstrap-alert.js +94 -0
- data/lib/heidi/web/assets/js/bootstrap-button.js +100 -0
- data/lib/heidi/web/assets/js/bootstrap-carousel.js +157 -0
- data/lib/heidi/web/assets/js/bootstrap-collapse.js +136 -0
- data/lib/heidi/web/assets/js/bootstrap-dropdown.js +92 -0
- data/lib/heidi/web/assets/js/bootstrap-modal.js +210 -0
- data/lib/heidi/web/assets/js/bootstrap-popover.js +95 -0
- data/lib/heidi/web/assets/js/bootstrap-scrollspy.js +125 -0
- data/lib/heidi/web/assets/js/bootstrap-tab.js +130 -0
- data/lib/heidi/web/assets/js/bootstrap-tooltip.js +270 -0
- data/lib/heidi/web/assets/js/bootstrap-transition.js +51 -0
- data/lib/heidi/web/assets/js/bootstrap-typeahead.js +271 -0
- data/lib/heidi/web/assets/js/google-code-prettify/prettify.css +30 -0
- data/lib/heidi/web/assets/js/google-code-prettify/prettify.js +28 -0
- data/lib/heidi/web/assets/js/jquery.js +9252 -0
- data/lib/heidi/web/views/build.erb +40 -24
- data/lib/heidi/web/views/commit.erb +10 -7
- data/lib/heidi/web/views/config.erb +34 -18
- data/lib/heidi/web/views/home.erb +44 -25
- data/lib/heidi/web/views/layout.erb +57 -4
- data/lib/heidi/web/views/new_project.erb +56 -0
- data/lib/heidi/web/views/project.erb +114 -32
- data/lib/heidi/web/views/project_header.erb +20 -0
- data/spec/heidi/build_spec.rb +163 -2
- data/spec/heidi/builder_spec.rb +61 -1
- data/spec/heidi/hook_spec.rb +47 -1
- data/spec/heidi/integrator_spec.rb +96 -1
- data/spec/heidi/project_spec.rb +177 -2
- data/spec/heidi/shell_spec.rb +67 -0
- data/spec/heidi/web_spec.rb +78 -2
- data/spec/heidi_spec.rb +16 -5
- data/spec/spec_helper.rb +1 -1
- data/spec/support/01_rworld.rb +9 -0
- data/spec/support/mock_project.rb +39 -0
- data/spec/support/survivable.rb +10 -0
- metadata +131 -79
- data/spec/heidi/tester_spec.rb +0 -5
@@ -1,29 +1,45 @@
|
|
1
|
-
|
1
|
+
<%= erb :project_header, :locals => { :project => project } %>
|
2
2
|
|
3
|
-
<
|
4
|
-
<
|
3
|
+
<header class="subhead">
|
4
|
+
<div class="subnav">
|
5
|
+
<ul class="nav nav-pills">
|
6
|
+
<% if build.status == "passed" %>
|
7
|
+
<li class="active">
|
8
|
+
<a href='/projects/<%= project.basename %>/build/<%= build.commit %>/tar_ball'>download</a>
|
9
|
+
</li>
|
10
|
+
<% end %>
|
11
|
+
<% build.logs.each do |log| %>
|
12
|
+
<li><a href="#<%= log.file_name %>"><%= log.file_name %></a></li>
|
13
|
+
<% end %>
|
14
|
+
</ul>
|
15
|
+
</div>
|
16
|
+
</header>
|
5
17
|
|
6
|
-
<
|
7
|
-
<div class="
|
8
|
-
|
9
|
-
|
10
|
-
<br
|
11
|
-
|
18
|
+
<section id="details">
|
19
|
+
<div class="row">
|
20
|
+
<div class="span9">
|
21
|
+
<h2 class="<%= build.status %>">Build <%= build.commit %></h2>
|
22
|
+
<br />
|
23
|
+
<br />
|
24
|
+
</div>
|
25
|
+
<div class="span3">
|
26
|
+
<a href="/projects/<%= project.basename %>/commit/<%= build.commit %>">Want to see the commit?</a>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</section>
|
12
30
|
|
13
|
-
| <% build.logs.each do |log| %>
|
14
|
-
<a href="#<%= log.file_name %>"><%= log.file_name %></a> |
|
15
|
-
<% end %>
|
16
|
-
</div>
|
17
|
-
<div class="column">
|
18
|
-
<a href="/projects/<%= project.basename %>/commit/<%= build.commit %>">Want to see the commit?</a>
|
19
|
-
</div>
|
20
|
-
<br class="clear" />
|
21
|
-
<br />
|
22
|
-
<br />
|
23
31
|
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
|
33
|
+
<section id="logs">
|
34
|
+
<% build.logs.each do |log| %>
|
35
|
+
<div class="row">
|
36
|
+
<div class="span11">
|
37
|
+
<h3 class="log"><%= log.file_name %></h3>
|
38
|
+
</div>
|
39
|
+
<div class="span1">
|
40
|
+
<a name="<%= log.file_name %>" href="#top" class="top">^^ top</a>
|
41
|
+
</div>
|
42
|
+
</div>
|
27
43
|
<pre class="terminal"><%= ansi_color_codes(h(log.contents)) %></pre>
|
28
|
-
<% end %>
|
29
|
-
|
44
|
+
<% end %>
|
45
|
+
</section>
|
@@ -1,10 +1,13 @@
|
|
1
|
-
|
1
|
+
<%= erb :project_header, :locals => { :project => project } %>
|
2
2
|
|
3
|
-
<
|
4
|
-
<
|
3
|
+
<section id="commit">
|
4
|
+
<div class="row">
|
5
|
+
<div class="span12">
|
6
|
+
<h2><%= commit %></h2>
|
5
7
|
|
6
|
-
<
|
8
|
+
<pre class="terminal"><%= ansi_color_codes(h(stat)) %>
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
<%= ansi_color_codes(h(diff)) %></pre>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
</section>
|
@@ -1,21 +1,37 @@
|
|
1
|
-
|
1
|
+
<%= erb :project_header, :locals => { :project => project } %>
|
2
2
|
|
3
|
-
<
|
4
|
-
<
|
5
|
-
<input type="text" name="name" value="<%= project.name %>" />
|
6
|
-
<br />
|
7
|
-
<br />
|
3
|
+
<section id="config">
|
4
|
+
<h2>Configuration</h2>
|
8
5
|
|
9
|
-
<
|
10
|
-
|
11
|
-
<
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
<% end %>
|
16
|
-
</select>
|
6
|
+
<div class="well">
|
7
|
+
<form method="POST" action="/projects/<%= project.basename %>">
|
8
|
+
<div class="field">
|
9
|
+
<label for="name">Name</label>
|
10
|
+
<input type="text" name="name" value="<%= project.name %>" />
|
11
|
+
</div>
|
17
12
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
<div class="field">
|
14
|
+
<label for="branch">Integration branch</label>
|
15
|
+
<select name="branch">
|
16
|
+
<option value="">...</option>
|
17
|
+
<% project.integration_branches.each do |branch| %>
|
18
|
+
<% branch_name = branch.gsub("origin/", "") %>
|
19
|
+
<option value="<%= branch_name %>" <%= "selected" if branch_name == project.branch %>><%= branch %></option>
|
20
|
+
<% end %>
|
21
|
+
</select>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<br />
|
25
|
+
<div class="btn-toolbar">
|
26
|
+
<div class="btn-group">
|
27
|
+
<a class="btn" href="/projects/<%= project.basename %>">« Cancel</a>
|
28
|
+
<button class="btn" name="reset" type="reset" value="0">Reset</button>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="btn-group">
|
32
|
+
<button class="btn btn-success" name="submit" type="submit" value="1">Save »</button>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</form>
|
36
|
+
</div>
|
37
|
+
</section>
|
@@ -1,32 +1,51 @@
|
|
1
|
-
<
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<% end %>
|
10
|
-
</ul>
|
1
|
+
<style>
|
2
|
+
ul.projects li { margin-bottom: 5px; }
|
3
|
+
ul.projects li a { display: inline-block; min-width: 120px; }
|
4
|
+
</style>
|
5
|
+
<div class="hero-unit">
|
6
|
+
<h1>Welcome to Heidi!</h1>
|
7
|
+
<p>A simple, naive, yet powerful Continious Integration ... thingy...</p>
|
8
|
+
<p><a href="https://github.com/OrganisedMinds/heidi/blob/develop/README.rdoc" class="btn btn-primary btn-large">Learn more »</a></p>
|
11
9
|
</div>
|
12
10
|
|
13
|
-
<
|
14
|
-
|
15
|
-
<
|
11
|
+
<section>
|
12
|
+
<div class="row">
|
13
|
+
<div class="span4">
|
14
|
+
<h2>Projects</h2>
|
15
|
+
<ul class="projects">
|
16
|
+
<% projects.sort_by(&:basename).each do |project| %>
|
17
|
+
<li class="<%= project.build_status %>">
|
18
|
+
<a href="/projects/<%= project.basename %>"><%= project.name %></a>
|
19
|
+
<span class="label <%= status2label(project.build_status) %>"><%= project.build_status.empty? ? "unknown" : project.build_status %></span>
|
20
|
+
</li>
|
21
|
+
<% end %>
|
22
|
+
</ul>
|
23
|
+
<br />
|
24
|
+
<a href="/projects/" class="btn btn-success"><strong>+</strong> new project</a>
|
25
|
+
</div>
|
16
26
|
|
17
|
-
<
|
18
|
-
|
27
|
+
<div class="span4">
|
28
|
+
<h2>About Heidi!</h2>
|
29
|
+
<p>Heidi is OpenSource. Fork, patch and improve it at <a
|
30
|
+
href="https://github.com/OrganisedMinds/heidi">GitHub</a></p>
|
19
31
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
32
|
+
<p>Heidi is proudly sponsored by <a
|
33
|
+
href="http://organisedminds.com">organisedminds.com</a> (a super useful
|
34
|
+
flexible tool for collaborating in teams and projects across geographic
|
35
|
+
locations) Check it out!</p>
|
24
36
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
37
|
+
<br /><br />
|
38
|
+
<center>
|
39
|
+
<a href="http://organisedminds.com" title="Sponsored by OrganisedMinds.com">
|
40
|
+
<img src="/images/OrganisedMinds.png" alt="OrganisedMinds.com" />
|
41
|
+
</a>
|
42
|
+
</center>
|
43
|
+
</div>
|
31
44
|
|
45
|
+
<div class="span4">
|
46
|
+
<div class="thumbnail">
|
47
|
+
<img src='/images/HeidiBlue-480.png' alt="Heidi!, artist & copyrights unknown"/>
|
48
|
+
</div>
|
49
|
+
</div>
|
32
50
|
</div>
|
51
|
+
</section>
|
@@ -1,13 +1,66 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<html>
|
2
|
+
<html lang="en">
|
3
3
|
<head>
|
4
|
-
<
|
5
|
-
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
|
4
|
+
<meta charset="utf-8">
|
6
5
|
<title>Heidi!</title>
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
7
|
+
<meta name="description" content="">
|
8
|
+
<meta name="author" content="">
|
9
|
+
|
10
|
+
<!-- Le styles -->
|
11
|
+
<link href="/css/bootstrap.css" rel="stylesheet">
|
12
|
+
<style>
|
13
|
+
body {
|
14
|
+
padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
|
15
|
+
}
|
16
|
+
section {
|
17
|
+
padding-bottom: 20px;
|
18
|
+
}
|
19
|
+
</style>
|
20
|
+
<link href="/css/bootstrap-responsive.css" rel="stylesheet">
|
21
|
+
<link href="/css/colors.css" rel="stylesheet">
|
22
|
+
|
23
|
+
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
|
24
|
+
<!--[if lt IE 9]>
|
25
|
+
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
26
|
+
<![endif]-->
|
27
|
+
|
28
|
+
<!-- Le fav and touch icons -->
|
29
|
+
<link rel="shortcut icon" href="/images/favicon.ico">
|
7
30
|
</head>
|
31
|
+
|
8
32
|
<body>
|
33
|
+
|
34
|
+
<div class="navbar navbar-fixed-top">
|
35
|
+
<div class="navbar-inner">
|
36
|
+
<div class="container">
|
37
|
+
<a class="brand" href="/">Heidi!</a>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
|
9
42
|
<div class="container">
|
43
|
+
<%= breadcrumbs %>
|
10
44
|
<%= yield %>
|
11
|
-
|
45
|
+
|
46
|
+
</div> <!-- /container -->
|
47
|
+
|
48
|
+
<!-- Le javascript
|
49
|
+
================================================== -->
|
50
|
+
<!-- Placed at the end of the document so the pages load faster -->
|
51
|
+
<script src="/js/jquery.js"></script>
|
52
|
+
<script src="/js/bootstrap-transition.js"></script>
|
53
|
+
<script src="/js/bootstrap-alert.js"></script>
|
54
|
+
<script src="/js/bootstrap-modal.js"></script>
|
55
|
+
<script src="/js/bootstrap-dropdown.js"></script>
|
56
|
+
<script src="/js/bootstrap-scrollspy.js"></script>
|
57
|
+
<script src="/js/bootstrap-tab.js"></script>
|
58
|
+
<script src="/js/bootstrap-tooltip.js"></script>
|
59
|
+
<script src="/js/bootstrap-popover.js"></script>
|
60
|
+
<script src="/js/bootstrap-button.js"></script>
|
61
|
+
<script src="/js/bootstrap-collapse.js"></script>
|
62
|
+
<script src="/js/bootstrap-carousel.js"></script>
|
63
|
+
<script src="/js/bootstrap-typeahead.js"></script>
|
64
|
+
|
12
65
|
</body>
|
13
66
|
</html>
|
@@ -0,0 +1,56 @@
|
|
1
|
+
<header>
|
2
|
+
<div class="row">
|
3
|
+
<div class="span9">
|
4
|
+
<h1>New Project</h1>
|
5
|
+
</div>
|
6
|
+
<div class="span3">
|
7
|
+
<ul class="nav nav-list">
|
8
|
+
<li>
|
9
|
+
<a href="/"><i class="icon-home"></i>Home</a>
|
10
|
+
</li>
|
11
|
+
</ul>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</header>
|
15
|
+
|
16
|
+
<br />
|
17
|
+
<section id="form">
|
18
|
+
<div class="row">
|
19
|
+
<div class="span12 well">
|
20
|
+
<div class="alert alert-error">
|
21
|
+
<strong>Attention! Attention!</strong><br />
|
22
|
+
The new-project-over-web feature is 'highly expirimental' at best.<br />
|
23
|
+
Best results are obtained with small repos
|
24
|
+
</div>
|
25
|
+
<br />
|
26
|
+
|
27
|
+
<form method="post" action="/projects/">
|
28
|
+
<div class="field">
|
29
|
+
<label for="name">Name</label>
|
30
|
+
<input type="text" name="name" id="name" value="" />
|
31
|
+
</div>
|
32
|
+
<div class="field">
|
33
|
+
<label for="origin">Origin</label>
|
34
|
+
<input type="text" name="origin" id="origin" value="" />
|
35
|
+
</div>
|
36
|
+
<div class="field">
|
37
|
+
<label for="branch">Branch</label>
|
38
|
+
<input type="text" name="branch" id="branch" value="master" />
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<br />
|
42
|
+
<div class="btn-toolbar">
|
43
|
+
<div class="btn-group">
|
44
|
+
<a class="btn" href="/">« Cancel</a>
|
45
|
+
<button class="btn" name="reset" type="reset" value="0">Reset</button>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<div class="btn-group">
|
49
|
+
<button class="btn btn-success" name="submit" type="submit" value="1">Save »</button>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
</form>
|
53
|
+
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
</section>
|
@@ -1,37 +1,119 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
<% end %>
|
1
|
+
<%= erb :project_header, :locals => { :project => project } %>
|
2
|
+
|
3
|
+
<br />
|
4
|
+
<section id="details">
|
5
|
+
<div class="row">
|
6
|
+
<div class="alert <%= status2alert(project.build_status) %> span11">
|
7
|
+
Build status: <strong><%= project.build_status %></strong>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<%
|
12
|
+
builds = project.builds
|
13
|
+
current = builds.select { |b| b.commit == project.current_build }.first
|
14
|
+
latest = builds.select { |b| b.commit == project.latest_build }.first
|
15
|
+
%>
|
16
|
+
|
18
17
|
<br />
|
19
|
-
<
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
<div class="row">
|
19
|
+
<div class="span6">
|
20
|
+
<h2>Overview</h2>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="row">
|
24
|
+
<div class="span6 well">
|
25
|
+
<% if project.locked? %>
|
26
|
+
<span class="label label-warning">Locked</span>
|
27
|
+
<br /><br />
|
28
|
+
<% end %>
|
29
|
+
<div class="row" style="padding-bottom: 5px">
|
30
|
+
<div class="span2"><strong>Current</strong></div>
|
31
|
+
<div class="span2">
|
32
|
+
<% unless current.nil? %>
|
33
|
+
<a href="/projects/<%= project.basename %>/build/<%= current.commit %>">
|
34
|
+
<span class="label <%= status2label(current.status) %>">
|
35
|
+
<%= current.commit %>
|
36
|
+
</span>
|
37
|
+
</a>
|
38
|
+
<% end %>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
|
43
|
+
<div class="row" style="padding-bottom: 5px">
|
44
|
+
<div class="span2"><strong>Last successful</strong></div>
|
45
|
+
<div class="span2">
|
46
|
+
<% unless latest.nil? %>
|
47
|
+
<a href="/projects/<%= project.basename %>/build/<%= latest.commit %>">
|
48
|
+
<span class="label <%= status2label(latest.status) %>">
|
49
|
+
<%= latest == current ? "Current" : latest.commit %>
|
50
|
+
</span>
|
51
|
+
</a>
|
52
|
+
<% end %>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
<div class="row">
|
57
|
+
<div class="span2"><strong>Integration branch</strong></div>
|
58
|
+
<div class="span4">
|
59
|
+
<span class="label label-info"><%= project.branch %></span>
|
60
|
+
<a class="pull-right btn btn-success" href="/projects/<%= project.basename %>/fetch">Fetch & Integrate</a>
|
61
|
+
</div>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
</div>
|
65
|
+
|
66
|
+
</div>
|
67
|
+
</section>
|
68
|
+
|
69
|
+
<section id="history">
|
23
70
|
<br />
|
24
|
-
<
|
25
|
-
|
71
|
+
<h2>Build history</h2>
|
72
|
+
|
26
73
|
<br />
|
27
|
-
</div>
|
28
|
-
<div class="column">
|
29
|
-
<a href="/projects/<%= project.basename %>/configure">Configure <%= project.name %></a>
|
30
|
-
</div>
|
31
|
-
<br class="clear"/>
|
32
|
-
<br />
|
33
|
-
<br />
|
34
74
|
|
35
|
-
<
|
36
|
-
<
|
75
|
+
<div class="row">
|
76
|
+
<div class="span12">
|
77
|
+
<ul class="nav nav-tabs">
|
78
|
+
<li class="active"><a href="#gitlog" data-toggle="tab">Git log</a></li>
|
79
|
+
<li><a href="#buildlist" data-toggle="tab">Builds list</a></li>
|
80
|
+
</ul>
|
81
|
+
|
82
|
+
<div class="tab-content">
|
83
|
+
<div class="tab-pane active" id="gitlog">
|
84
|
+
<pre class="terminal"><% project.log.each do |line| %><% build = nil %><%= ansi_color_codes line[:graph] %><% unless line[:commit].nil? %><a href="/projects/<%= project.basename %>/commit/<%= line[:commit] %>"><%= line[:commit] %></a><% if (build = line[:build]) %><a class="build" href="/projects/<%= project.basename %>/build/<%= build.commit %>"><%= ansi_color_codes(line[:message]) %></a> <span class="status">[<span class="<%= build.status %>"><%= build.status %></span>] (<%= build.date %>, <%= build.author.gsub '<', '<' %>)</span><% else %><%= ansi_color_codes line[:message] %><% end %><% end %>
|
37
85
|
<% end %></pre>
|
86
|
+
</div>
|
87
|
+
<div class="tab-pane" id="buildlist">
|
88
|
+
<div class="accordion" id="build_accordion">
|
89
|
+
<% project.builds.sort_by(&:time).reverse.each do |build| %>
|
90
|
+
<div class="accordion-group">
|
91
|
+
<div class="accordion-heading">
|
92
|
+
<a class="pull-left accordion-toggle" data-toggle="collapse" data-parent="#build_accordion" href="#<%= build.commit %>"><%= build.commit %></a>
|
93
|
+
<span class="pull-left label <%= status2label(build.status) %>" style="margin-top: 5px"><%= build.status %></span>
|
94
|
+
<br class="clear" />
|
95
|
+
</div>
|
96
|
+
<div id="<%= build.commit %>" class="accordion-body collapse">
|
97
|
+
<div class='accordion-inner'>
|
98
|
+
<%= build.message.gsub("\n", '<br />') %>
|
99
|
+
<br />
|
100
|
+
|
101
|
+
<strong>Author</strong>: <%= build.author %><br />
|
102
|
+
<strong>Date</strong>: <%= build.date %><br />
|
103
|
+
<br />
|
104
|
+
<div class="btn-group">
|
105
|
+
<a class="btn" href="/projects/<%= project.basename %>/build/<%= build.commit %>">Open</a>
|
106
|
+
<% if !build.tar_ball.nil? %>
|
107
|
+
<a class="btn btn-info" href="/projects/<%= project.basename %>/build/<%= build.commit %>/tar_ball">Download</a>
|
108
|
+
<% end %>
|
109
|
+
</div>
|
110
|
+
</div>
|
111
|
+
</div>
|
112
|
+
</div>
|
113
|
+
<% end %>
|
114
|
+
</div>
|
115
|
+
</div>
|
116
|
+
</div>
|
117
|
+
</div>
|
118
|
+
</div>
|
119
|
+
</section>
|