danger-gitlab_graph 0.0.7 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b22267bbd08ea047510e711c2e7e94df78c4a36935f58285bbbb38f36026c5db
4
- data.tar.gz: faec3d4ebc51300200010473a885a8b4f80e3258946746a7363b2c78245a4d9b
3
+ metadata.gz: a90273371dfdea31771892146d51bb400737899f28e9f194efa2af34d9acf351
4
+ data.tar.gz: 3154b7f5544cdbd32658f4596b84a217d6d136b124f764045dc38be953c673a9
5
5
  SHA512:
6
- metadata.gz: 91aecc44d1c12f48ba78c8b4f26fe7c1c19ed8a19f95dbcae67eba5109b75503acdda2a32d18ef6941e5245f6c9614686f1cb663464b152fccbf01949eeaebb7
7
- data.tar.gz: fddd42925cb4c47fd90317fd85d0bb4591434e38cb67dee44925ee2b21b9eca4e51adb6accc15583b0f51b91a041507fbaae5207181e023120e68c573f55d6ce
6
+ metadata.gz: 3699777c4212c3a626b972ca3d0046214567f56c1323d8e82b0be255653813771d19ac6abca6d4c7246e590cc0348b861a419167097836cebecb89df9f8997af
7
+ data.tar.gz: 42c833ab21eafa3bfe452805a61ee98f604624a1b6ad9b14cdc8125d2ee50fabacbb854157df60116e24975d3794fb74e67a3267a2ee20019ce872aa3a8f0c56
data/.rubocop.yml CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  AllCops:
6
6
  TargetRubyVersion: 2.7
7
+ NewCops: enable
7
8
 
8
9
  Style/StringLiterals:
9
10
  EnforcedStyle: double_quotes
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-gitlab_graph (0.0.3)
4
+ danger-gitlab_graph (0.1.0)
5
5
  danger-plugin-api (~> 1.0)
6
6
  svg-graph (~> 2.2.1)
7
7
 
@@ -20,6 +20,8 @@ GEM
20
20
  colored2 (3.1.2)
21
21
  cork (0.3.0)
22
22
  colored2 (~> 3.1)
23
+ crack (0.4.5)
24
+ rexml
23
25
  danger (9.0.0)
24
26
  claide (~> 1.0)
25
27
  claide-plugins (>= 0.9.2)
@@ -33,6 +35,9 @@ GEM
33
35
  no_proxy_fix
34
36
  octokit (~> 5.0)
35
37
  terminal-table (>= 1, < 4)
38
+ danger-gitlab (8.0.0)
39
+ danger
40
+ gitlab (~> 4.2, >= 4.2.0)
36
41
  danger-plugin-api (1.0.0)
37
42
  danger (> 2.0)
38
43
  diff-lcs (1.5.0)
@@ -66,6 +71,9 @@ GEM
66
71
  git (1.12.0)
67
72
  addressable (~> 2.8)
68
73
  rchardet (~> 1.8)
74
+ gitlab (4.19.0)
75
+ httparty (~> 0.20)
76
+ terminal-table (>= 1.5.1)
69
77
  guard (2.18.0)
70
78
  formatador (>= 0.2.4)
71
79
  listen (>= 2.7, < 4.0)
@@ -80,6 +88,10 @@ GEM
80
88
  guard (~> 2.1)
81
89
  guard-compat (~> 1.1)
82
90
  rspec (>= 2.99.0, < 4.0)
91
+ hashdiff (1.0.1)
92
+ httparty (0.20.0)
93
+ mime-types (~> 3.0)
94
+ multi_xml (>= 0.5.2)
83
95
  json (2.6.2)
84
96
  kramdown (2.4.0)
85
97
  rexml
@@ -90,6 +102,10 @@ GEM
90
102
  rb-inotify (>= 0.9.7)
91
103
  lumberjack (1.2.8)
92
104
  method_source (1.0.0)
105
+ mime-types (3.4.1)
106
+ mime-types-data (~> 3.2015)
107
+ mime-types-data (3.2022.0105)
108
+ multi_xml (0.6.0)
93
109
  multipart-post (2.2.3)
94
110
  nap (1.1.0)
95
111
  nenv (0.3.0)
@@ -152,6 +168,10 @@ GEM
152
168
  unicode-display_width (>= 1.1.1, < 3)
153
169
  thor (1.2.1)
154
170
  unicode-display_width (2.3.0)
171
+ webmock (2.3.2)
172
+ addressable (>= 2.3.6)
173
+ crack (>= 0.3.2)
174
+ hashdiff
155
175
  webrick (1.7.0)
156
176
  yard (0.9.28)
157
177
  webrick (~> 1.7.0)
@@ -161,6 +181,7 @@ PLATFORMS
161
181
 
162
182
  DEPENDENCIES
163
183
  bundler (~> 2.0)
184
+ danger-gitlab
164
185
  danger-gitlab_graph!
165
186
  guard (~> 2.14)
166
187
  guard-rspec (~> 4.7)
@@ -169,6 +190,7 @@ DEPENDENCIES
169
190
  rake (~> 10.0)
170
191
  rspec (~> 3.4)
171
192
  rubocop
193
+ webmock (~> 2.1)
172
194
  yard
173
195
 
174
196
  BUNDLED WITH
data/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # danger-gitlab_graph
2
2
 
3
- A description of danger-gitlab_graph.
3
+ `danger-gitlab_graph` is a [Danger](https://danger.systems) ruby plugin that allows you to extract and display metrics
4
+ gathered from the current and previous pipeline runs. This plugin is only works with GitLab CI at the moment.
5
+
6
+ It works similar to the existing test coverage extraction provided by GitLab natively: You provide a job name, an
7
+ extraction regex (including a single capturing group) and some other, optional configuration options. The plugin then
8
+ creates an svg graph (using the [svg-graph2](https://github.com/lumean/svg-graph2) gem) and adds them to your other
9
+ Danger comments.
4
10
 
5
11
  ## Installation
6
12
 
@@ -11,6 +17,49 @@ A description of danger-gitlab_graph.
11
17
  Methods and attributes from this plugin are available in
12
18
  your `Dangerfile` under the `gitlab_graph` namespace.
13
19
 
20
+ ### Methods
21
+
22
+ `gather_metric` - Gathers metric data from current and pevious pipelines
23
+
24
+ Sample code:
25
+
26
+ ```ruby
27
+ @my_plugin.gather_metric({
28
+ regex: /took ([0-9]+)/,
29
+ series_name: "Performance",
30
+ job_name: "test1"
31
+ })
32
+ ```
33
+
34
+ returns an array similiar to this:
35
+
36
+ ```ruby
37
+ [{ hash: "b23f54ecdc3add9abea9344f66b49f1699bff547", metric: 16.0, pipeline_id: 1119 },
38
+ { hash: "3333333333333333333333333333333333333333", metric: 6.0, pipeline_id: 123_456 }]
39
+ ```
40
+
41
+ `report_metric` - Creates and comments a graph based on a certain metric, extracted via regex
42
+
43
+ Sample code
44
+
45
+ ```ruby
46
+ gitlab_graph.report_metric([{
47
+ regex: /took ([0-9]+)/,
48
+ series_name: "Performance",
49
+ job_name: "test1"
50
+ }, {
51
+ regex: /slept ([0-9]+)/,
52
+ series_name: "IDLE time",
53
+ job_name: "test1"
54
+ }]) < /pre>
55
+ ```
56
+
57
+ outputs a graph similiar to this
58
+
59
+ ![sample graph](spec/support/fixtures/graph-simple-expected.svg)
60
+
61
+ and writes it directly into the danger comment
62
+
14
63
  ## Development
15
64
 
16
65
  1. Clone this repo
@@ -5,19 +5,20 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require "gitlab_graph/gem_version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "danger-gitlab_graph"
9
- spec.version = GitlabGraph::VERSION
10
- spec.authors = ["Jan Beckmann"]
11
- spec.email = ["king-jan1999@hotmail.de"]
12
- spec.description = "Danger plugin for creating graph from ci metrics."
13
- spec.summary = "Danger plugin which allows you to extract and visualize metrics over previous ci runs."
14
- spec.homepage = "https://github.com/kingjan1999/danger-gitlab_graph"
15
- spec.license = "MIT"
8
+ spec.name = "danger-gitlab_graph"
9
+ spec.version = GitlabGraph::VERSION
10
+ spec.authors = ["Jan Beckmann"]
11
+ spec.email = ["king-jan1999@hotmail.de"]
12
+ spec.description = "Danger plugin for creating graph from ci metrics."
13
+ spec.summary = "Danger plugin which allows you to extract and visualize metrics over previous ci runs."
14
+ spec.homepage = "https://github.com/kingjan1999/danger-gitlab_graph"
15
+ spec.license = "MIT"
16
+ spec.required_ruby_version = ">= 2.7.0"
16
17
 
17
18
  spec.files = `git ls-files`.split($/)
18
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
+ spec.metadata["rubygems_mfa_required"] = "true"
21
22
 
22
23
  spec.add_runtime_dependency "danger-plugin-api", "~> 1.0"
23
24
  spec.add_runtime_dependency "svg-graph", "~> 2.2.1"
@@ -48,4 +49,7 @@ Gem::Specification.new do |spec|
48
49
  #
49
50
  # This will stop test execution and let you inspect the results
50
51
  spec.add_development_dependency "pry"
52
+
53
+ spec.add_development_dependency "danger-gitlab"
54
+ spec.add_development_dependency "webmock", "~> 2.1"
51
55
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GitlabGraph
4
- VERSION = "0.0.7"
4
+ VERSION = "0.1.0"
5
5
  end
@@ -1,66 +1,114 @@
1
1
  # frozen_string_literal: true
2
- require 'svggraph'
2
+
3
+ require "svggraph"
3
4
 
4
5
  module Danger
5
6
  # This plugin retrieves a certain metric from previous job runs and displays them as a graph
6
7
  #
7
8
  # @example Extract values from job "test" with the given regex
8
9
  #
9
- # gitlab_graph.report_metric(/performance: ([0-9]+)s/, "test")
10
+ # gitlab_graph.report_metric([{
11
+ # regex: /took ([0-9]+)/,
12
+ # series_name: "Performance",
13
+ # job_name: "test1"
14
+ # }, {
15
+ # regex: /slept ([0-9]+)/,
16
+ # series_name: "IDLE time",
17
+ # job_name: "test1"
18
+ # }])
10
19
  #
20
+ # outputs a graph similiar to this ![sample graph](spec/support/fixtures/graph-simple-expected.svg)
11
21
  # @see kingjan1999/danger-gitlab_graph
12
22
  # @tags gitlab, graph, performance
13
23
  #
14
24
  class DangerGitlabGraph < Plugin
15
- # Creates and comments a graph based on a certain metric, extracted via regex
16
- # @return [Array<String>]
17
- #
18
- def report_metric(extraction_regex, job_name, prev_pipeline_count = 10, graph_options = {})
19
- pipeline_id = ENV["CI_PIPELINE_ID"]
20
- project_id = ENV["CI_PROJECT_ID"]
25
+ # Gathers metric data from current and pevious pipelines
26
+ # @return [Arrray<{pipeline_id => int, :metric => float}>]
27
+ def gather_metric(extraction_config, prev_pipeline_count = 10)
28
+ pipeline_id = ENV["CI_PIPELINE_ID"].to_i
29
+ project_id = ENV.fetch("CI_PROJECT_ID", nil)
21
30
 
22
31
  target_branch = gitlab.branch_for_merge
23
32
 
24
- _, new_metric = extract_metric_from_pipeline(project_id, pipeline_id, extraction_regex, job_name)
25
- unless new_metric
26
- warn("No updated metric found for job #{job_name}")
27
- return
33
+ begin
34
+ new_metric = extract_metric_from_pipeline(project_id, pipeline_id, extraction_config[:regex], extraction_config[:job_name])
35
+ rescue JobNotFoundException
36
+ warn("Job #{extraction_config[:job_name]} for metric extraction of #{extraction_config[:series_name]} not found in current pipeline")
37
+ return []
38
+ end
39
+
40
+ unless new_metric[:metric]
41
+ warn("No updated metric #{extraction_config[:series_name]} found for job #{extraction_config[:job_name]}")
42
+ return []
28
43
  end
29
44
 
30
45
  previous_target_branch_pipelines = gitlab.api.pipelines(project_id, {
31
- status: 'success',
46
+ status: "success",
32
47
  ref: target_branch,
33
48
  per_page: prev_pipeline_count
34
49
  })
35
50
 
36
- previous_metrics = previous_target_branch_pipelines.collect { |pipeline| extract_metric_from_pipeline(project_id, pipeline.id, extraction_regex, job_name) }
37
- previous_metrics = previous_metrics.select { |val| val[1] }
38
- # create graph
51
+ previous_metrics = previous_target_branch_pipelines.collect do |pipeline|
52
+ extract_metric_from_pipeline(project_id, pipeline.id, extraction_config[:regex], extraction_config[:job_name]).merge(hash: pipeline.sha)
53
+ rescue JobNotFoundException
54
+ return { pipeline_id: pipeline.id, metric: false, hash: pipeline.sha }
55
+ end
56
+
57
+ previous_metrics + [new_metric.merge(hash: ENV.fetch("CI_COMMIT_SHA", "invalid_hash"))]
58
+ end
59
+
60
+ # Creates and comments a graph based on a certain metric, extracted via regex
61
+ # @param [Array<hash>] extraction_configs Hash-Array: {:regex, :job_name, :series_name}
62
+ # @param [int] prev_pipeline_count
63
+ # @param [hash] graph_options see svg-graph doc
64
+ # @return [void]
65
+ def report_metric(extraction_configs, prev_pipeline_count = 10, graph_options = {})
66
+ project_id = ENV.fetch("CI_PROJECT_ID", nil)
39
67
 
40
- data = previous_metrics.collect { |val| val[1] }
41
- data = data + [new_metric]
68
+ fields = nil
69
+ all_data = []
70
+ extraction_configs.each do |extraction_config|
71
+ all_metrics = gather_metric(extraction_config, prev_pipeline_count)
42
72
 
43
- fields = previous_metrics.collect { |pipeline| "Run #{pipeline[0]}" }
44
- fields += [pipeline_id]
73
+ if all_metrics.length.zero?
74
+ next
75
+ end
76
+
77
+ if fields and all_metrics.length != fields.length
78
+ warn("Not all metrics could be found in an equal amount of jobs. Unable to plot #{extraction_config[:series_name]}")
79
+ next
80
+ end
81
+
82
+ data = all_metrics.collect { |val| val[:metric] }
83
+
84
+ fields ||= all_metrics.collect { |pipeline| pipeline[:hash][0..7] }
85
+
86
+ all_data.push({ data: data, title: extraction_config[:series_name] })
87
+ end
88
+
89
+ if all_data.empty?
90
+ return
91
+ end
45
92
 
46
93
  default_graph_options = {
47
- :width => 640,
48
- :height => 480,
49
- :graph_title => "Performance Metric",
50
- :show_graph_title => true,
51
- :x_title => "Pipeline Runs",
52
- :y_title => "Metric Value",
53
- :show_y_title => true,
54
- :show_x_title => true,
55
- :number_format => "%.2fs",
56
- :fields => fields
94
+ width: 640,
95
+ height: 480,
96
+ graph_title: "Performance Metric",
97
+ show_graph_title: true,
98
+ x_title: "Commit",
99
+ y_title: "Metric Value",
100
+ show_y_title: true,
101
+ show_x_title: true,
102
+ number_format: "%.2fs",
103
+ fields: fields
57
104
  }
58
105
 
106
+ # create graph
59
107
  g = SVG::Graph::Line.new(default_graph_options.merge(graph_options))
60
108
 
61
- g.add_data(:data => data)
109
+ all_data.each { |elem| g.add_data(data: elem[:data], title: elem[:title]) }
62
110
 
63
- temp_file = Tempfile.new(%w[graph .svg])
111
+ temp_file = Tempfile.new(%w(graph .svg))
64
112
  begin
65
113
  temp_file.write(g.burn_svg_only)
66
114
  uploaded_file = gitlab.api.upload_file(project_id, temp_file.path)
@@ -76,16 +124,19 @@ module Danger
76
124
  def extract_metric_from_pipeline(project_id, pipeline_id, extraction_regex, job_name)
77
125
  all_jobs = gitlab.api.pipeline_jobs(project_id, pipeline_id)
78
126
  target_job = all_jobs.find { |x| x.name == job_name }
79
- return false unless target_job
127
+ raise JobNotFoundException, "job #{job_name} not found in pipeline #{pipeline_id}" unless target_job
80
128
 
81
129
  job_trace = gitlab.api.job_trace(project_id, target_job.id)
82
130
 
83
131
  metric_matches = job_trace.match(extraction_regex)
84
- unless metric_matches.captures
85
- return pipeline_id, false
132
+ unless metric_matches&.captures
133
+ return { pipeline_id: pipeline_id, metric: false }
86
134
  end
87
135
 
88
- [pipeline_id, metric_matches.captures[0].to_f]
136
+ { pipeline_id: pipeline_id, metric: metric_matches.captures[0].to_f }
137
+ end
138
+
139
+ class JobNotFoundException < StandardError
89
140
  end
90
141
  end
91
142
  end
@@ -1,43 +1,107 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "fileutils"
3
4
  require File.expand_path("spec_helper", __dir__)
4
5
 
5
6
  module Danger
6
- describe Danger::DangerGitlabGraph do
7
+ describe Danger::DangerGitlabGraph, host: :gitlab do
7
8
  it "should be a plugin" do
8
9
  expect(Danger::DangerGitlabGraph.new(nil)).to be_a Danger::Plugin
9
10
  end
10
11
 
11
- #
12
- # You should test your custom attributes and methods here
13
- #
14
12
  describe "with Dangerfile" do
13
+ graph_tmpfile = nil
14
+
15
15
  before do
16
+ stub_version("11.2.3")
17
+
16
18
  @dangerfile = testing_dangerfile
17
19
  @my_plugin = @dangerfile.gitlab_graph
18
20
 
19
- allow(@my_plugin.gitlab).to receive(:api).and_return(json)
21
+ allow(@my_plugin.gitlab).to receive(:branch_for_merge).and_return("main")
22
+
23
+ stub_const("ENV", ENV.to_hash.merge(testing_env))
24
+
25
+ pipelines = File.read("#{File.dirname(__FILE__)}/support/fixtures/pipelines.json")
26
+
27
+ # stub requests
28
+ stub_jobs(123_456)
29
+ stub_jobs(1119)
30
+
31
+ stub_trace(2722)
32
+ stub_trace(2723)
33
+
34
+ stub_request(:get, "https://gitlab.com/api/v4/projects/123/pipelines?per_page=10&ref=main&status=success").
35
+ to_return(status: 200, body: pipelines, headers: {})
36
+
37
+ stub_request(:post, "https://gitlab.com/api/v4/projects/123/uploads").
38
+ to_return do |request|
39
+ svg_file = request.body[request.body.index("<svg")..request.body.index("</svg>") + 5]
40
+ graph_tmpfile = Tempfile.new(["tmp-graph", ".svg"])
41
+ begin
42
+ graph_tmpfile.write(svg_file)
43
+ ensure
44
+ graph_tmpfile.close
45
+ end
46
+
47
+ { status: 200, body: {
48
+ markdown: "![description](/link)"
49
+ }.to_json, headers: {} }
50
+ end
20
51
  end
21
52
 
22
- # Some examples for writing tests
23
- # You should replace these with your own.
53
+ after do
54
+ graph_tmpfile&.unlink
55
+ end
24
56
 
25
- it "Warns on a monday" do
26
- monday_date = Date.parse("2016-07-11")
27
- allow(Date).to receive(:today).and_return monday_date
57
+ it "outputs a markdown image link" do
58
+ @my_plugin.report_metric([{
59
+ regex: /took ([0-9]+)/,
60
+ series_name: "Performance",
61
+ job_name: "test1"
62
+ }, {
63
+ regex: /slept ([0-9]+)/,
64
+ series_name: "IDLE time",
65
+ job_name: "test1"
66
+ }])
28
67
 
29
- @my_plugin.warn_on_mondays
68
+ expect(@dangerfile.status_report[:markdowns][0].message).to eq("![description](/link)")
69
+ expect(graph_tmpfile).not_to be_nil
30
70
 
31
- expect(@dangerfile.status_report[:warnings]).to eq(["Trying to merge code on a Monday"])
71
+ expected_graph_file = "#{File.dirname(__FILE__)}/support/fixtures/graph-simple-expected.svg"
72
+ expect(FileUtils.compare_file(graph_tmpfile.path, expected_graph_file)).to be_truthy
32
73
  end
33
74
 
34
- it "Does nothing on a tuesday" do
35
- monday_date = Date.parse("2016-07-12")
36
- allow(Date).to receive(:today).and_return monday_date
75
+ it "warns an error if there is no match" do
76
+ @my_plugin.report_metric([{
77
+ regex: /not found ([0-9]+)/,
78
+ series_name: "Performance",
79
+ job_name: "test1"
80
+ }])
81
+
82
+ expect(@dangerfile.status_report[:warnings]).to eq(["No updated metric Performance found for job test1"])
83
+ end
84
+
85
+ it "warns if there is no such job" do
86
+ @my_plugin.report_metric([{
87
+ regex: /took ([0-9]+)/,
88
+ series_name: "Performance",
89
+ job_name: "not-found-either"
90
+ }])
91
+
92
+ expect(@dangerfile.status_report[:warnings]).to eq(["Job not-found-either for metric extraction of Performance not found in current pipeline"])
93
+ end
37
94
 
38
- @my_plugin.warn_on_mondays
95
+ it "gathers all metrics" do
96
+ metrics = @my_plugin.gather_metric({
97
+ regex: /took ([0-9]+)/,
98
+ series_name: "Performance",
99
+ job_name: "test1"
100
+ })
39
101
 
40
102
  expect(@dangerfile.status_report[:warnings]).to eq([])
103
+ expect(metrics).to eq([{ hash: "b23f54ecdc3add9abea9344f66b49f1699bff547", metric: 16.0, pipeline_id: 1119 },
104
+ { hash: "3333333333333333333333333333333333333333", metric: 6.0, pipeline_id: 123_456 }])
41
105
  end
42
106
  end
43
107
  end
data/spec/spec_helper.rb CHANGED
@@ -4,12 +4,16 @@ require "pathname"
4
4
  ROOT = Pathname.new(File.expand_path("..", __dir__))
5
5
  $:.unshift("#{ROOT}lib".to_s)
6
6
  $:.unshift("#{ROOT}spec".to_s)
7
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
8
+ $LOAD_PATH.unshift File.expand_path("..", __dir__)
7
9
 
8
10
  require "bundler/setup"
9
11
  require "pry"
10
12
 
11
13
  require "rspec"
12
14
  require "danger"
15
+ require "webmock"
16
+ require "webmock/rspec"
13
17
 
14
18
  if `git remote -v` == ""
15
19
  puts "You cannot run tests without setting a local git remote on this repo"
@@ -17,15 +21,22 @@ if `git remote -v` == ""
17
21
  exit(0)
18
22
  end
19
23
 
24
+ Dir["spec/support/**/*.rb"].sort.each { |file| require(file) }
25
+
20
26
  # Use coloured output, it's the best.
21
27
  RSpec.configure do |config|
22
28
  config.filter_gems_from_backtrace "bundler"
23
29
  config.color = true
24
30
  config.tty = true
31
+
32
+ config.include Danger::Support::GitLabHelper, host: :gitlab
33
+ # config.include Danger::Support::CIHelper, use: :ci_helper
25
34
  end
26
35
 
27
36
  require "danger_plugin"
28
37
 
38
+ WebMock.disable_net_connect!(allow: "coveralls.io")
39
+
29
40
  # These functions are a subset of https://github.com/danger/danger/blob/master/spec/spec_helper.rb
30
41
  # If you are expanding these files, see if it's already been done ^.
31
42
 
@@ -36,24 +47,35 @@ require "danger_plugin"
36
47
  # rubocop:disable Lint/NestedMethodDefinition
37
48
  def testing_ui
38
49
  @output = StringIO.new
50
+
39
51
  def @output.winsize
40
52
  [20, 9999]
41
53
  end
42
54
 
43
55
  cork = Cork::Board.new(out: @output)
56
+
44
57
  def cork.string
45
58
  out.string.gsub(/\e\[([;\d]+)?m/, "")
46
59
  end
60
+
47
61
  cork
48
62
  end
63
+
49
64
  # rubocop:enable Lint/NestedMethodDefinition
50
65
 
51
66
  # Example environment (ENV) that would come from
52
67
  # running a PR on TravisCI
53
68
  def testing_env
54
69
  {
55
- "CI_PIPELINE_ID" => "12346",
56
- "CI_PROJECT_ID" => "123"
70
+ "CI_PIPELINE_ID" => "123456",
71
+ "CI_PROJECT_ID" => "123",
72
+ "GITLAB_CI" => "1",
73
+ "CI_COMMIT_SHA" => "3333333333333333333333333333333333333333",
74
+ "CI_COMMIT_SHORT_SHA" => "33333333",
75
+ "CI_PROJECT_PATH" => "k0nserv/danger-test",
76
+ "CI_PROJECT_URL" => "https://gitlab.com/k0nserv/danger-test",
77
+ "DANGER_GITLAB_API_TOKEN" => "a86e56d46ac78b",
78
+ "CI_MERGE_REQUEST_IID" => "145"
57
79
  }
58
80
  end
59
81