octopusci 0.3.1 → 0.3.2
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/lib/octopusci/io.rb +14 -0
- data/lib/octopusci/notifier/job_complete.html.erb +2 -2
- data/lib/octopusci/server/views/index.erb +1 -1
- data/lib/octopusci/server/views/job.erb +2 -2
- data/lib/octopusci/server/views/layout.erb +31 -0
- data/lib/octopusci/server.rb +2 -2
- data/lib/octopusci/version.rb +1 -1
- data/spec/lib/octopusci/io_spec.rb +46 -0
- metadata +39 -28
data/lib/octopusci/io.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'ansi2html/main'
|
2
|
+
|
1
3
|
module Octopusci
|
2
4
|
class IO
|
3
5
|
attr_accessor :job
|
@@ -26,6 +28,18 @@ module Octopusci
|
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
31
|
+
def read_all_out_as_html
|
32
|
+
out = StringIO.new
|
33
|
+
::ANSI2HTML::Main.new(read_all_out(), out)
|
34
|
+
return out.string
|
35
|
+
end
|
36
|
+
|
37
|
+
def read_all_log_as_html
|
38
|
+
out = StringIO.new
|
39
|
+
::ANSI2HTML::Main.new(read_all_log(), out)
|
40
|
+
return out.string
|
41
|
+
end
|
42
|
+
|
29
43
|
def write_out(msg="", &block)
|
30
44
|
write_raw_output(false, msg, &block)
|
31
45
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
</head>
|
7
7
|
<body>
|
8
8
|
<div style="background-color: #333; color: #fff; width: 100%;">
|
9
|
-
<div style="padding: 10px; font-size: 16px;">Octopusci Build (<%= @status_str %>) - <a style="color: #fff" href="<%= @job['payload']['repository']['url'] %>"><%= @job['repo_name'] %></a> / <a style="color: #fff" href="<%= Octopusci::Config['general']['base_url'] %>/<%= @job['repo_name'] %>/<%= @job['branch_name']
|
9
|
+
<div style="padding: 10px; font-size: 16px;">Octopusci Build (<%= @status_str %>) - <a style="color: #fff" href="<%= @job['payload']['repository']['url'] %>"><%= @job['repo_name'] %></a> / <a style="color: #fff" href="<%= Octopusci::Config['general']['base_url'] %>/<%= @job['repo_name'] %>/<%= @job['branch_name'] %>/jobs"><%= @job['branch_name'] %></a></div>
|
10
10
|
<div style="background-color: #e2e2e2; padding: 20px;">
|
11
11
|
<div style="background-color: #ffffff; color: #333;">
|
12
12
|
<div style="background-color: #F9F9F9; padding: 10px; border: 1px dotted #E6E6E6;">
|
@@ -75,7 +75,7 @@
|
|
75
75
|
</table>
|
76
76
|
</div>
|
77
77
|
<div style="background-color: #333; color: #fff; padding: 10px;">
|
78
|
-
<pre><code><%= Octopusci::IO.new(@job).
|
78
|
+
<pre><code><%= Octopusci::IO.new(@job).read_all_out_as_html %></code></pre>
|
79
79
|
</div>
|
80
80
|
</div>
|
81
81
|
</div>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<%= erb :job_summary, :locals => { :j => j } %>
|
25
25
|
</div>
|
26
26
|
<div class="job_content">
|
27
|
-
<div class="job_output"><pre><code><%= Octopusci::IO.new(j).
|
27
|
+
<div class="job_output"><pre><code><%= Octopusci::IO.new(j).read_all_out_as_html %></code></pre></div>
|
28
28
|
</div>
|
29
29
|
</div>
|
30
30
|
<% end %>
|
@@ -17,10 +17,10 @@
|
|
17
17
|
</div>
|
18
18
|
<div class="job_content">
|
19
19
|
Output:
|
20
|
-
<div class="output job_output" style="display: block;"><pre><code><%= Octopusci::IO.new(@job).
|
20
|
+
<div class="output job_output" style="display: block;"><pre><code><%= Octopusci::IO.new(@job).read_all_out_as_html %></code></pre></div>
|
21
21
|
</div>
|
22
22
|
<div class="job_content">
|
23
23
|
Log:
|
24
|
-
<div class="silent_output job_output" style="display: block;"><pre><code><%= Octopusci::IO.new(@job).
|
24
|
+
<div class="silent_output job_output" style="display: block;"><pre><code><%= Octopusci::IO.new(@job).read_all_log_as_html %></code></pre></div>
|
25
25
|
</div>
|
26
26
|
</div>
|
@@ -125,6 +125,37 @@
|
|
125
125
|
.status.error {
|
126
126
|
background-position: 0px -26px;
|
127
127
|
}
|
128
|
+
|
129
|
+
.bold {
|
130
|
+
font-weight: bold;
|
131
|
+
}
|
132
|
+
.black {
|
133
|
+
color: black;
|
134
|
+
}
|
135
|
+
.red {
|
136
|
+
color: red;
|
137
|
+
}
|
138
|
+
.green {
|
139
|
+
color: green;
|
140
|
+
}
|
141
|
+
.yellow {
|
142
|
+
color: yellow;
|
143
|
+
}
|
144
|
+
.blue {
|
145
|
+
color: blue;
|
146
|
+
}
|
147
|
+
.magenta {
|
148
|
+
color: magenta;
|
149
|
+
}
|
150
|
+
.cyan {
|
151
|
+
color: cyan;
|
152
|
+
}
|
153
|
+
.white {
|
154
|
+
color: white;
|
155
|
+
}
|
156
|
+
.grey {
|
157
|
+
color: grey;
|
158
|
+
}
|
128
159
|
</style>
|
129
160
|
</head>
|
130
161
|
<body>
|
data/lib/octopusci/server.rb
CHANGED
@@ -48,14 +48,14 @@ module Octopusci
|
|
48
48
|
protected!
|
49
49
|
@job = Octopusci::JobStore.get(params[:job_id])
|
50
50
|
content_type('text/plain')
|
51
|
-
return Octopusci::IO.new(@job).
|
51
|
+
return Octopusci::IO.new(@job).read_all_out_as_html
|
52
52
|
end
|
53
53
|
|
54
54
|
get '/jobs/:job_id/silent_output' do
|
55
55
|
protected!
|
56
56
|
@job = Octopusci::JobStore.get(params[:job_id])
|
57
57
|
content_type('text/plain')
|
58
|
-
return Octopusci::IO.new(@job).
|
58
|
+
return Octopusci::IO.new(@job).read_all_log_as_html
|
59
59
|
end
|
60
60
|
|
61
61
|
get '/jobs/:job_id/status' do
|
data/lib/octopusci/version.rb
CHANGED
@@ -50,6 +50,52 @@ describe Octopusci::IO do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
describe "#read_all_out_as_html" do
|
54
|
+
it "should get all the output using read_all_out" do
|
55
|
+
io = Octopusci::IO.new({ 'id' => 23 })
|
56
|
+
io.should_receive(:read_all_out).and_return("\e[31msome stuff\e[0m")
|
57
|
+
io.read_all_out_as_html
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should parse the output using ansi2html" do
|
61
|
+
io = Octopusci::IO.new({ 'id' => 23 })
|
62
|
+
io.stub(:read_all_out).and_return("raw out")
|
63
|
+
out = stub("string io out obj", :string => "raw out")
|
64
|
+
StringIO.stub(:new).and_return(out)
|
65
|
+
ANSI2HTML::Main.should_receive(:new).with("raw out", out)
|
66
|
+
io.read_all_out_as_html
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should wrap ansi colored strings in spans which are classed based on the color" do
|
70
|
+
io = Octopusci::IO.new({ 'id' => 23 })
|
71
|
+
io.stub(:read_all_out).and_return("\e[31msome stuff\e[0m")
|
72
|
+
io.read_all_out_as_html.should == '<span class="red">some stuff</span>'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#read_all_log_as_html" do
|
77
|
+
it "should get all the log using read_all_log" do
|
78
|
+
io = Octopusci::IO.new({ 'id' => 23 })
|
79
|
+
io.should_receive(:read_all_log).and_return("\e[31msome stuff\e[0m")
|
80
|
+
io.read_all_log_as_html.should == '<span class="red">some stuff</span>'
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should parse the log using ansi2html" do
|
84
|
+
io = Octopusci::IO.new({ 'id' => 23 })
|
85
|
+
io.stub(:read_all_log).and_return("raw out")
|
86
|
+
out = stub("string io out obj", :string => "raw out")
|
87
|
+
StringIO.stub(:new).and_return(out)
|
88
|
+
ANSI2HTML::Main.should_receive(:new).with("raw out", out)
|
89
|
+
io.read_all_log_as_html
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should wrap ansi colored strings in spans which are classed based on the color" do
|
93
|
+
io = Octopusci::IO.new({ 'id' => 23 })
|
94
|
+
io.stub(:read_all_log).and_return("\e[31msome stuff\e[0m")
|
95
|
+
io.read_all_log_as_html.should == '<span class="red">some stuff</span>'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
53
99
|
describe "#open_log_for_writing" do
|
54
100
|
end
|
55
101
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: octopusci
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-11-
|
13
|
+
date: 2011-11-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sinatra
|
17
|
-
requirement: &
|
17
|
+
requirement: &70341263390120 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70341263390120
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: json
|
28
|
-
requirement: &
|
28
|
+
requirement: &70341263387220 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70341263387220
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: resque
|
39
|
-
requirement: &
|
39
|
+
requirement: &70341263386620 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70341263386620
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: actionmailer
|
50
|
-
requirement: &
|
50
|
+
requirement: &70341263383580 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70341263383580
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: multi_json
|
61
|
-
requirement: &
|
61
|
+
requirement: &70341263381500 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70341263381500
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: time-ago-in-words
|
72
|
-
requirement: &
|
72
|
+
requirement: &70341263380620 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,21 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70341263380620
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: ansi2html
|
83
|
+
requirement: &70341263379340 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :runtime
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *70341263379340
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: rake
|
83
|
-
requirement: &
|
94
|
+
requirement: &70341263376980 !ruby/object:Gem::Requirement
|
84
95
|
none: false
|
85
96
|
requirements:
|
86
97
|
- - ! '>='
|
@@ -88,10 +99,10 @@ dependencies:
|
|
88
99
|
version: '0'
|
89
100
|
type: :development
|
90
101
|
prerelease: false
|
91
|
-
version_requirements: *
|
102
|
+
version_requirements: *70341263376980
|
92
103
|
- !ruby/object:Gem::Dependency
|
93
104
|
name: rspec
|
94
|
-
requirement: &
|
105
|
+
requirement: &70341263375700 !ruby/object:Gem::Requirement
|
95
106
|
none: false
|
96
107
|
requirements:
|
97
108
|
- - ! '>='
|
@@ -99,10 +110,10 @@ dependencies:
|
|
99
110
|
version: '0'
|
100
111
|
type: :development
|
101
112
|
prerelease: false
|
102
|
-
version_requirements: *
|
113
|
+
version_requirements: *70341263375700
|
103
114
|
- !ruby/object:Gem::Dependency
|
104
115
|
name: rack-test
|
105
|
-
requirement: &
|
116
|
+
requirement: &70341263374920 !ruby/object:Gem::Requirement
|
106
117
|
none: false
|
107
118
|
requirements:
|
108
119
|
- - ! '>='
|
@@ -110,10 +121,10 @@ dependencies:
|
|
110
121
|
version: '0'
|
111
122
|
type: :development
|
112
123
|
prerelease: false
|
113
|
-
version_requirements: *
|
124
|
+
version_requirements: *70341263374920
|
114
125
|
- !ruby/object:Gem::Dependency
|
115
126
|
name: guard
|
116
|
-
requirement: &
|
127
|
+
requirement: &70341263374160 !ruby/object:Gem::Requirement
|
117
128
|
none: false
|
118
129
|
requirements:
|
119
130
|
- - ! '>='
|
@@ -121,10 +132,10 @@ dependencies:
|
|
121
132
|
version: '0'
|
122
133
|
type: :development
|
123
134
|
prerelease: false
|
124
|
-
version_requirements: *
|
135
|
+
version_requirements: *70341263374160
|
125
136
|
- !ruby/object:Gem::Dependency
|
126
137
|
name: rb-fsevent
|
127
|
-
requirement: &
|
138
|
+
requirement: &70341263373260 !ruby/object:Gem::Requirement
|
128
139
|
none: false
|
129
140
|
requirements:
|
130
141
|
- - ! '>='
|
@@ -132,10 +143,10 @@ dependencies:
|
|
132
143
|
version: '0'
|
133
144
|
type: :development
|
134
145
|
prerelease: false
|
135
|
-
version_requirements: *
|
146
|
+
version_requirements: *70341263373260
|
136
147
|
- !ruby/object:Gem::Dependency
|
137
148
|
name: growl_notify
|
138
|
-
requirement: &
|
149
|
+
requirement: &70341263372800 !ruby/object:Gem::Requirement
|
139
150
|
none: false
|
140
151
|
requirements:
|
141
152
|
- - ! '>='
|
@@ -143,10 +154,10 @@ dependencies:
|
|
143
154
|
version: '0'
|
144
155
|
type: :development
|
145
156
|
prerelease: false
|
146
|
-
version_requirements: *
|
157
|
+
version_requirements: *70341263372800
|
147
158
|
- !ruby/object:Gem::Dependency
|
148
159
|
name: guard-rspec
|
149
|
-
requirement: &
|
160
|
+
requirement: &70341263372340 !ruby/object:Gem::Requirement
|
150
161
|
none: false
|
151
162
|
requirements:
|
152
163
|
- - ! '>='
|
@@ -154,7 +165,7 @@ dependencies:
|
|
154
165
|
version: '0'
|
155
166
|
type: :development
|
156
167
|
prerelease: false
|
157
|
-
version_requirements: *
|
168
|
+
version_requirements: *70341263372340
|
158
169
|
description: A multi-branch Continous Integration server that integrates with GitHub
|
159
170
|
email:
|
160
171
|
- cyphactor@gmail.com
|