Commit 57094085 authored by Alessio Caiazza's avatar Alessio Caiazza

Hide CI section markers from job trace

parent d103e955
---
title: Strip gitlab-runner section markers in build trace HTML view
merge_request: 14393
author:
type: added
...@@ -155,7 +155,9 @@ module Gitlab ...@@ -155,7 +155,9 @@ module Gitlab
stream.each_line do |line| stream.each_line do |line|
s = StringScanner.new(line) s = StringScanner.new(line)
until s.eos? until s.eos?
if s.scan(/\e([@-_])(.*?)([@-~])/) if s.scan(/section_((?:start)|(?:end)):(\d+):([^\r]+)\r\033\[0K/)
handle_section(s)
elsif s.scan(/\e([@-_])(.*?)([@-~])/)
handle_sequence(s) handle_sequence(s)
elsif s.scan(/\e(([@-_])(.*?)?)?$/) elsif s.scan(/\e(([@-_])(.*?)?)?$/)
break break
...@@ -183,6 +185,15 @@ module Gitlab ...@@ -183,6 +185,15 @@ module Gitlab
) )
end end
def handle_section(s)
action = s[1]
timestamp = s[2]
section = s[3]
line = s.matched()[0...-5] # strips \r\033[0K
@out << %{<div class="hidden" data-action="#{action}" data-timestamp="#{timestamp}" data-section="#{section}">#{line}</div>}
end
def handle_sequence(s) def handle_sequence(s)
indicator = s[1] indicator = s[1]
commands = s[2].split ';' commands = s[2].split ';'
......
...@@ -195,6 +195,32 @@ describe Gitlab::Ci::Ansi2html do ...@@ -195,6 +195,32 @@ describe Gitlab::Ci::Ansi2html do
end end
end end
context "with section markers" do
let(:section_name) { 'test_section' }
let(:section_start_time) { Time.new(2017, 9, 20).utc }
let(:section_duration) { 3.seconds }
let(:section_end_time) { section_start_time + section_duration }
let(:section_start) { "section_start:#{section_start_time.to_i}:#{section_name}\r\033[0K"}
let(:section_end) { "section_end:#{section_end_time.to_i}:#{section_name}\r\033[0K"}
let(:section_start_html) do
'<div class="hidden" data-action="start"'\
" data-timestamp=\"#{section_start_time.to_i}\" data-section=\"#{section_name}\">"\
"#{section_start[0...-5]}</div>"
end
let(:section_end_html) do
'<div class="hidden" data-action="end"'\
" data-timestamp=\"#{section_end_time.to_i}\" data-section=\"#{section_name}\">"\
"#{section_end[0...-5]}</div>"
end
it "prints light red" do
text = "#{section_start}\e[91mHello\e[0m\n#{section_end}"
html = %{#{section_start_html}<span class="term-fg-l-red">Hello</span><br>#{section_end_html}}
expect(convert_html(text)).to eq(html)
end
end
describe "truncates" do describe "truncates" do
let(:text) { "Hello World" } let(:text) { "Hello World" }
let(:stream) { StringIO.new(text) } let(:stream) { StringIO.new(text) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment