heidi 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|