allure-report-publisher 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/lib/allure_report_publisher/commands/upload.rb +26 -8
- data/lib/allure_report_publisher/lib/helpers/spinner.rb +2 -1
- data/lib/allure_report_publisher/lib/helpers/summary.rb +8 -6
- data/lib/allure_report_publisher/lib/helpers/url_section_builder.rb +16 -3
- data/lib/allure_report_publisher/lib/providers/_provider.rb +21 -54
- data/lib/allure_report_publisher/lib/providers/github.rb +6 -58
- data/lib/allure_report_publisher/lib/providers/gitlab.rb +80 -128
- data/lib/allure_report_publisher/lib/providers/info/_base.rb +39 -0
- data/lib/allure_report_publisher/lib/providers/info/github.rb +70 -0
- data/lib/allure_report_publisher/lib/providers/info/gitlab.rb +77 -0
- data/lib/allure_report_publisher/lib/uploaders/_uploader.rb +25 -61
- data/lib/allure_report_publisher/lib/uploaders/gcs.rb +7 -7
- data/lib/allure_report_publisher/lib/uploaders/s3.rb +7 -7
- data/lib/allure_report_publisher/version.rb +1 -1
- metadata +9 -6
- /data/{bin → exe}/allure-report-publisher +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f7655105dbfd46700acb9b6045fdb563542697d88891f2ac1983d6d6d9a2cc3
|
4
|
+
data.tar.gz: d13ed56a3356b42060fa10ccc665765d2e3453cbd1090f483198b6c03a636555
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ff3f600d92b168111027c203e3b0d61b25aae3ba99cb01df372d0e0003ca6706fe3dfa5c07c2402f6d0e5f90eff19f95b790877a466d46e8627c90fc9177932
|
7
|
+
data.tar.gz: 7799a9144ceb663551f461a0e503ec9051f9be0588bbf60598d8cf7953b67fd3771ea5eec68ab0aff259d15c7a67422a65d5739278a8215af9a8992a939f70d6
|
data/README.md
CHANGED
@@ -46,9 +46,11 @@ Options:
|
|
46
46
|
--bucket=VALUE # Bucket name. Required: true
|
47
47
|
--prefix=VALUE # Optional prefix for report path. Required: false
|
48
48
|
--update-pr=VALUE # Add report url to PR via comment or description update. Required: false: (comment/description/actions)
|
49
|
-
--
|
50
|
-
--summary
|
49
|
+
--report-title=VALUE # Title for url section in PR comment/description. Required: false, default: "Allure Report"
|
50
|
+
--summary=VALUE # Additionally add summary table to PR comment or description. Required: false: (behaviors/suites/packages/total), default: "total"
|
51
|
+
--summary-table-type=VALUE # Summary table type. Required: false: (ascii/markdown), default: "ascii"
|
51
52
|
--base-url=VALUE # Use custom base url instead of default cloud provider one. Required: false
|
53
|
+
--[no-]flaky-warning-status # Mark run with a '!' status in PR comment/description if report contains flaky tests, default: false
|
52
54
|
--[no-]collapse-summary # Create summary as a collapsible section, default: false
|
53
55
|
--[no-]copy-latest # Keep copy of latest report at base prefix path, default: false
|
54
56
|
--[no-]color # Force color output
|
@@ -25,9 +25,14 @@ module Publisher
|
|
25
25
|
type: :string,
|
26
26
|
desc: "Add report url to PR via comment or description update. Required: false",
|
27
27
|
values: %w[comment description actions]
|
28
|
+
option :report_title,
|
29
|
+
type: :string,
|
30
|
+
default: "Allure Report",
|
31
|
+
desc: "Title for url section in PR comment/description. Required: false"
|
28
32
|
option :summary,
|
29
33
|
type: :string,
|
30
34
|
desc: "Additionally add summary table to PR comment or description. Required: false",
|
35
|
+
default: Publisher::Helpers::Summary::TOTAL,
|
31
36
|
values: [
|
32
37
|
Publisher::Helpers::Summary::BEHAVIORS,
|
33
38
|
Publisher::Helpers::Summary::SUITES,
|
@@ -45,6 +50,10 @@ module Publisher
|
|
45
50
|
option :base_url,
|
46
51
|
type: :string,
|
47
52
|
desc: "Use custom base url instead of default cloud provider one. Required: false"
|
53
|
+
option :flaky_warning_status,
|
54
|
+
type: :boolean,
|
55
|
+
default: false,
|
56
|
+
desc: "Mark run with a '!' status in PR comment/description if report contains flaky tests"
|
48
57
|
option :collapse_summary,
|
49
58
|
type: :boolean,
|
50
59
|
default: false,
|
@@ -83,7 +92,7 @@ module Publisher
|
|
83
92
|
|
84
93
|
generate_report
|
85
94
|
upload_report
|
86
|
-
return unless args[:update_pr] &&
|
95
|
+
return unless args[:update_pr] && Providers.info&.pr?
|
87
96
|
|
88
97
|
add_report_urls
|
89
98
|
rescue StandardError => e
|
@@ -99,17 +108,26 @@ module Publisher
|
|
99
108
|
# @return [Publisher::Uploaders::Uploader]
|
100
109
|
def uploader
|
101
110
|
@uploader ||= uploaders(args[:type]).new(
|
102
|
-
summary_type: args[:summary],
|
103
111
|
result_paths: @result_paths,
|
112
|
+
**args.slice(:bucket, :prefix, :base_url, :copy_latest)
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
116
|
+
# CI provider instance
|
117
|
+
#
|
118
|
+
# @return [Publisher::Providers::Base]
|
119
|
+
def ci_provider
|
120
|
+
@ci_provider = Providers.provider&.new(
|
121
|
+
report_url: uploader.report_url,
|
122
|
+
report_path: uploader.report_path,
|
123
|
+
summary_type: args[:summary],
|
104
124
|
**args.slice(
|
105
|
-
:bucket,
|
106
|
-
:prefix,
|
107
|
-
:base_url,
|
108
|
-
:copy_latest,
|
109
125
|
:update_pr,
|
110
126
|
:collapse_summary,
|
127
|
+
:flaky_warning_status,
|
111
128
|
:summary_table_type,
|
112
|
-
:unresolved_discussion_on_failure
|
129
|
+
:unresolved_discussion_on_failure,
|
130
|
+
:report_title
|
113
131
|
)
|
114
132
|
)
|
115
133
|
end
|
@@ -173,7 +191,7 @@ module Publisher
|
|
173
191
|
# @return [void]
|
174
192
|
def add_report_urls
|
175
193
|
log("Adding reports urls")
|
176
|
-
Spinner.spin("updating", exit_on_error: false, debug: args[:debug]) {
|
194
|
+
Spinner.spin("updating", exit_on_error: false, debug: args[:debug]) { ci_provider.add_result_summary }
|
177
195
|
end
|
178
196
|
|
179
197
|
# Handle error during upload command
|
@@ -121,7 +121,8 @@ module Publisher
|
|
121
121
|
# @return [void]
|
122
122
|
def spinner_error(error)
|
123
123
|
message = ["failed", error.message]
|
124
|
-
|
124
|
+
log_debug("Error: #{error.message}\n#{error.backtrace.join("\n")}")
|
125
|
+
|
125
126
|
colored_message = colorize(message.compact.join("\n"), error_color)
|
126
127
|
return spinner.error(colored_message) if tty?
|
127
128
|
|
@@ -9,18 +9,20 @@ module Publisher
|
|
9
9
|
PACKAGES = "packages".freeze
|
10
10
|
SUITES = "suites".freeze
|
11
11
|
TOTAL = "total".freeze
|
12
|
-
MARKDOWN =
|
13
|
-
ASCII =
|
12
|
+
MARKDOWN = "markdown".freeze
|
13
|
+
ASCII = "ascii".freeze
|
14
14
|
|
15
15
|
# Summary table generator
|
16
16
|
#
|
17
17
|
# @param [String] report_path
|
18
18
|
# @param [String] summary_type
|
19
19
|
# @param [String] markdown
|
20
|
-
|
20
|
+
# @param [Boolean] flaky_warning_status
|
21
|
+
def initialize(report_path, summary_type, table_type = ASCII, flaky_warning_status: false)
|
21
22
|
@report_path = report_path
|
22
23
|
@summary_type = summary_type || TOTAL
|
23
24
|
@table_type = table_type
|
25
|
+
@flaky_warning_status = flaky_warning_status
|
24
26
|
end
|
25
27
|
|
26
28
|
# Summary table
|
@@ -51,7 +53,7 @@ module Publisher
|
|
51
53
|
|
52
54
|
private
|
53
55
|
|
54
|
-
attr_reader :report_path, :summary_type, :table_type
|
56
|
+
attr_reader :report_path, :summary_type, :table_type, :flaky_warning_status
|
55
57
|
|
56
58
|
# Expanded summary table
|
57
59
|
#
|
@@ -102,7 +104,7 @@ module Publisher
|
|
102
104
|
# @return [String]
|
103
105
|
def status_icon(passed, failed, flaky)
|
104
106
|
return "➖" if passed.zero? && failed.zero?
|
105
|
-
return flaky.zero? ? "✅" : "❗" if failed.zero?
|
107
|
+
return !flaky_warning_status || flaky.zero? ? "✅" : "❗" if failed.zero?
|
106
108
|
|
107
109
|
"❌"
|
108
110
|
end
|
@@ -113,7 +115,7 @@ module Publisher
|
|
113
115
|
def terminal_table
|
114
116
|
Terminal::Table.new do |table|
|
115
117
|
table.title = "#{summary_type} summary" unless markdown?
|
116
|
-
table.style = { border: table_type }
|
118
|
+
table.style = { border: table_type.to_sym }
|
117
119
|
table.headings = ["", "passed", "failed", "skipped", "flaky", "total", "result"]
|
118
120
|
yield(table)
|
119
121
|
end
|
@@ -14,6 +14,8 @@ module Publisher
|
|
14
14
|
# @param [String] sha_url
|
15
15
|
# @param [String] summary_type
|
16
16
|
# @param [String] collapse_summary
|
17
|
+
# @param [Boolean] flaky_warning_status
|
18
|
+
# @param [String] report_title
|
17
19
|
def initialize(**args)
|
18
20
|
@report_url = args[:report_url]
|
19
21
|
@report_path = args[:report_path]
|
@@ -22,6 +24,8 @@ module Publisher
|
|
22
24
|
@summary_type = args[:summary_type]
|
23
25
|
@summary_table_type = args[:summary_table_type]
|
24
26
|
@collapse_summary = args[:collapse_summary]
|
27
|
+
@flaky_warning_status = args[:flaky_warning_status]
|
28
|
+
@report_title = args[:report_title]
|
25
29
|
end
|
26
30
|
|
27
31
|
# Matches url section pattern
|
@@ -64,7 +68,9 @@ module Publisher
|
|
64
68
|
:sha_url,
|
65
69
|
:summary_type,
|
66
70
|
:summary_table_type,
|
67
|
-
:collapse_summary
|
71
|
+
:collapse_summary,
|
72
|
+
:flaky_warning_status,
|
73
|
+
:report_title
|
68
74
|
|
69
75
|
private
|
70
76
|
|
@@ -72,14 +78,21 @@ module Publisher
|
|
72
78
|
#
|
73
79
|
# @return [String]
|
74
80
|
def heading
|
75
|
-
@heading ||= "#
|
81
|
+
@heading ||= "# #{report_title}\n" \
|
82
|
+
"[`allure-report-publisher`](https://github.com/andrcuns/allure-report-publisher) " \
|
83
|
+
"generated test report!"
|
76
84
|
end
|
77
85
|
|
78
86
|
# Test run summary
|
79
87
|
#
|
80
88
|
# @return [Helpers::Summary]
|
81
89
|
def summary
|
82
|
-
@summary ||= Helpers::Summary.new(
|
90
|
+
@summary ||= Helpers::Summary.new(
|
91
|
+
report_path,
|
92
|
+
summary_type,
|
93
|
+
summary_table_type,
|
94
|
+
flaky_warning_status: flaky_warning_status
|
95
|
+
)
|
83
96
|
end
|
84
97
|
|
85
98
|
# Single job report URL entry
|
@@ -2,7 +2,7 @@ module Publisher
|
|
2
2
|
# Namespace for providers executing tests
|
3
3
|
#
|
4
4
|
module Providers
|
5
|
-
#
|
5
|
+
# CI provider class
|
6
6
|
#
|
7
7
|
# @return [Publisher::Providers::Base]
|
8
8
|
def self.provider
|
@@ -11,11 +11,18 @@ module Publisher
|
|
11
11
|
Gitlab if ENV["GITLAB_CI"]
|
12
12
|
end
|
13
13
|
|
14
|
+
# CI info class
|
15
|
+
#
|
16
|
+
# @return [Info::Base]
|
17
|
+
def self.info
|
18
|
+
return Info::Github.instance if ENV["GITHUB_WORKFLOW"]
|
19
|
+
|
20
|
+
Info::Gitlab.instance if ENV["GITLAB_CI"]
|
21
|
+
end
|
22
|
+
|
14
23
|
# Base class for CI executor info
|
15
24
|
#
|
16
25
|
class Provider
|
17
|
-
ALLURE_JOB_NAME = "ALLURE_JOB_NAME".freeze
|
18
|
-
|
19
26
|
# CI provider base
|
20
27
|
#
|
21
28
|
# @param [Hash] args
|
@@ -23,9 +30,11 @@ module Publisher
|
|
23
30
|
# @option args [String] :report_path
|
24
31
|
# @option args [Boolean] :update_pr
|
25
32
|
# @option args [String] :summary_type
|
33
|
+
# @option args [Symbol] :summary_table_type
|
26
34
|
# @option args [Boolean] :collapse_summay
|
35
|
+
# @option args [Boolean] :flaky_warning_status
|
27
36
|
# @option args [Boolean] :unresolved_discussion_on_failure
|
28
|
-
# @option args [
|
37
|
+
# @option args [String] :report_title
|
29
38
|
def initialize(**args)
|
30
39
|
@report_url = args[:report_url]
|
31
40
|
@report_path = args[:report_path]
|
@@ -33,45 +42,20 @@ module Publisher
|
|
33
42
|
@summary_type = args[:summary_type]
|
34
43
|
@summary_table_type = args[:summary_table_type]
|
35
44
|
@collapse_summary = args[:collapse_summary]
|
45
|
+
@flaky_warning_status = args[:flaky_warning_status]
|
36
46
|
@unresolved_discussion_on_failure = args[:unresolved_discussion_on_failure]
|
47
|
+
@report_title = args[:report_title]
|
37
48
|
end
|
38
49
|
|
39
|
-
# :nocov:
|
40
|
-
|
41
|
-
# Get ci run ID without creating instance of ci provider
|
42
|
-
#
|
43
|
-
# @return [String]
|
44
|
-
def self.run_id
|
45
|
-
raise("Not implemented!")
|
46
|
-
end
|
47
|
-
|
48
|
-
# Get executor info
|
49
|
-
#
|
50
|
-
# @return [Hash]
|
51
|
-
def executor_info
|
52
|
-
raise("Not implemented!")
|
53
|
-
end
|
54
|
-
# :nocov:
|
55
|
-
|
56
50
|
# Add report url to pull request description
|
57
51
|
#
|
58
52
|
# @return [void]
|
59
53
|
def add_result_summary
|
60
|
-
raise("Not a pull request, skipped!") unless pr?
|
61
54
|
return add_comment if comment?
|
62
55
|
|
63
56
|
update_pr_description
|
64
57
|
end
|
65
58
|
|
66
|
-
# :nocov:
|
67
|
-
|
68
|
-
# Pull request run
|
69
|
-
#
|
70
|
-
# @return [Boolean]
|
71
|
-
def pr?
|
72
|
-
raise("Not implemented!")
|
73
|
-
end
|
74
|
-
|
75
59
|
private
|
76
60
|
|
77
61
|
attr_reader :report_url,
|
@@ -80,7 +64,9 @@ module Publisher
|
|
80
64
|
:summary_type,
|
81
65
|
:collapse_summary,
|
82
66
|
:summary_table_type,
|
83
|
-
:
|
67
|
+
:flaky_warning_status,
|
68
|
+
:unresolved_discussion_on_failure,
|
69
|
+
:report_title
|
84
70
|
|
85
71
|
# Current pull request description
|
86
72
|
#
|
@@ -102,29 +88,8 @@ module Publisher
|
|
102
88
|
def add_comment
|
103
89
|
raise("Not implemented!")
|
104
90
|
end
|
105
|
-
|
106
|
-
# Build name
|
107
|
-
#
|
108
|
-
# @return [String]
|
109
|
-
def build_name
|
110
|
-
raise("Not implemented!")
|
111
|
-
end
|
112
|
-
|
113
|
-
# Commit SHA url
|
114
|
-
#
|
115
|
-
# @return [String]
|
116
|
-
def sha_url
|
117
|
-
raise("Not implemented!")
|
118
|
-
end
|
119
91
|
# :nocov:
|
120
92
|
|
121
|
-
# CI run id
|
122
|
-
#
|
123
|
-
# @return [String]
|
124
|
-
def run_id
|
125
|
-
self.class.run_id
|
126
|
-
end
|
127
|
-
|
128
93
|
# Add report url as comment
|
129
94
|
#
|
130
95
|
# @return [Boolean]
|
@@ -143,7 +108,9 @@ module Publisher
|
|
143
108
|
sha_url: sha_url,
|
144
109
|
summary_type: summary_type,
|
145
110
|
summary_table_type: summary_table_type,
|
146
|
-
collapse_summary: collapse_summary
|
111
|
+
collapse_summary: collapse_summary,
|
112
|
+
flaky_warning_status: flaky_warning_status,
|
113
|
+
report_title: report_title
|
147
114
|
)
|
148
115
|
end
|
149
116
|
end
|
@@ -6,6 +6,7 @@ module Publisher
|
|
6
6
|
#
|
7
7
|
class Github < Provider
|
8
8
|
include Helpers
|
9
|
+
extend Forwardable
|
9
10
|
|
10
11
|
# Set octokit to autopaginate
|
11
12
|
#
|
@@ -13,38 +14,13 @@ module Publisher
|
|
13
14
|
config.auto_paginate = true
|
14
15
|
end
|
15
16
|
|
16
|
-
# Run id
|
17
|
-
#
|
18
|
-
# @return [String]
|
19
|
-
def self.run_id
|
20
|
-
@run_id ||= ENV["GITHUB_RUN_ID"]
|
21
|
-
end
|
22
|
-
|
23
|
-
# Pull request run
|
24
|
-
#
|
25
|
-
# @return [Boolean]
|
26
|
-
def pr?
|
27
|
-
ENV["GITHUB_EVENT_NAME"] == "pull_request"
|
28
|
-
end
|
29
|
-
|
30
|
-
# Executor info
|
31
|
-
#
|
32
|
-
# @return [Hash]
|
33
|
-
def executor_info
|
34
|
-
{
|
35
|
-
name: "Github",
|
36
|
-
type: "github",
|
37
|
-
reportName: "AllureReport",
|
38
|
-
url: server_url,
|
39
|
-
reportUrl: report_url,
|
40
|
-
buildUrl: build_url,
|
41
|
-
buildOrder: run_id,
|
42
|
-
buildName: build_name
|
43
|
-
}
|
44
|
-
end
|
45
|
-
|
46
17
|
private
|
47
18
|
|
19
|
+
def_delegators :"Publisher::Providers::Info::Github.instance",
|
20
|
+
:repository,
|
21
|
+
:server_url,
|
22
|
+
:build_name
|
23
|
+
|
48
24
|
# Github api client
|
49
25
|
#
|
50
26
|
# @return [Octokit::Client]
|
@@ -109,34 +85,6 @@ module Publisher
|
|
109
85
|
@pr_id ||= github_event[:number]
|
110
86
|
end
|
111
87
|
|
112
|
-
# Server url
|
113
|
-
#
|
114
|
-
# @return [String]
|
115
|
-
def server_url
|
116
|
-
@server_url ||= ENV["GITHUB_SERVER_URL"]
|
117
|
-
end
|
118
|
-
|
119
|
-
# Build url
|
120
|
-
#
|
121
|
-
# @return [String]
|
122
|
-
def build_url
|
123
|
-
@build_url ||= "#{server_url}/#{repository}/actions/runs/#{run_id}"
|
124
|
-
end
|
125
|
-
|
126
|
-
# Job name
|
127
|
-
#
|
128
|
-
# @return [String]
|
129
|
-
def build_name
|
130
|
-
@build_name ||= ENV[ALLURE_JOB_NAME] || ENV["GITHUB_JOB"]
|
131
|
-
end
|
132
|
-
|
133
|
-
# Github repository
|
134
|
-
#
|
135
|
-
# @return [String]
|
136
|
-
def repository
|
137
|
-
@repository ||= ENV["GITHUB_REPOSITORY"]
|
138
|
-
end
|
139
|
-
|
140
88
|
# Commit sha url
|
141
89
|
#
|
142
90
|
# @return [String]
|
@@ -6,44 +6,83 @@ module Publisher
|
|
6
6
|
#
|
7
7
|
class Gitlab < Provider
|
8
8
|
include Helpers
|
9
|
+
extend Forwardable
|
9
10
|
|
10
|
-
|
11
|
+
private
|
12
|
+
|
13
|
+
def_delegators :"Publisher::Providers::Info::Gitlab.instance",
|
14
|
+
:allure_project,
|
15
|
+
:allure_mr_iid,
|
16
|
+
:server_url,
|
17
|
+
:build_name
|
18
|
+
|
19
|
+
# Get gitlab client
|
20
|
+
#
|
21
|
+
# @return [Gitlab::Client]
|
22
|
+
def client
|
23
|
+
@client ||= begin
|
24
|
+
raise("Missing GITLAB_AUTH_TOKEN environment variable!") unless env("GITLAB_AUTH_TOKEN")
|
25
|
+
|
26
|
+
::Gitlab::Client.new(
|
27
|
+
endpoint: "#{server_url}/api/v4",
|
28
|
+
private_token: env("GITLAB_AUTH_TOKEN")
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Current pull request description
|
11
34
|
#
|
12
35
|
# @return [String]
|
13
|
-
def
|
14
|
-
@
|
36
|
+
def pr_description
|
37
|
+
@pr_description ||= client.merge_request(project, mr_iid).description
|
15
38
|
end
|
16
39
|
|
17
|
-
#
|
40
|
+
# Comment with alert text
|
18
41
|
#
|
19
|
-
# @return [
|
20
|
-
def
|
21
|
-
|
42
|
+
# @return [Gitlab::ObjectifiedHash]
|
43
|
+
def alert_comment
|
44
|
+
@alert_comment ||= discussion&.notes&.detect do |note|
|
45
|
+
note.body.include?(alert_comment_text)
|
46
|
+
end
|
22
47
|
end
|
23
48
|
|
24
|
-
#
|
49
|
+
# Text for alert comment
|
25
50
|
#
|
26
|
-
# @return [
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
type: "gitlab",
|
31
|
-
reportName: "AllureReport",
|
32
|
-
url: server_url,
|
33
|
-
reportUrl: report_url,
|
34
|
-
buildUrl: build_url,
|
35
|
-
buildOrder: run_id,
|
36
|
-
buildName: build_name
|
37
|
-
}
|
51
|
+
# @return [String]
|
52
|
+
def alert_comment_text
|
53
|
+
@alert_comment_text ||=
|
54
|
+
env("ALLURE_FAILURE_ALERT_COMMENT") || "There are some test failures that need attention"
|
38
55
|
end
|
39
56
|
|
40
|
-
|
57
|
+
# Custom sha
|
58
|
+
#
|
59
|
+
# @return [String]
|
60
|
+
def allure_sha
|
61
|
+
@allure_sha ||= env("ALLURE_COMMIT_SHA")
|
62
|
+
end
|
41
63
|
|
42
|
-
#
|
64
|
+
# Gitlab project path
|
43
65
|
#
|
44
66
|
# @return [String]
|
45
|
-
def
|
46
|
-
@
|
67
|
+
def project
|
68
|
+
@project ||= allure_project || env("CI_MERGE_REQUEST_PROJECT_PATH") || env("CI_PROJECT_PATH")
|
69
|
+
end
|
70
|
+
|
71
|
+
# Merge request iid
|
72
|
+
#
|
73
|
+
# @return [Integer]
|
74
|
+
def mr_iid
|
75
|
+
@mr_iid ||= allure_mr_iid || env("CI_MERGE_REQUEST_IID")
|
76
|
+
end
|
77
|
+
|
78
|
+
# Commit sha url
|
79
|
+
#
|
80
|
+
# @return [String]
|
81
|
+
def sha_url
|
82
|
+
sha = allure_sha || env("CI_MERGE_REQUEST_SOURCE_BRANCH_SHA") || env("CI_COMMIT_SHA")
|
83
|
+
short_sha = sha[0..7]
|
84
|
+
|
85
|
+
"[#{short_sha}](#{server_url}/#{project}/-/merge_requests/#{mr_iid}/diffs?commit_id=#{sha})"
|
47
86
|
end
|
48
87
|
|
49
88
|
# Update pull request description
|
@@ -58,25 +97,37 @@ module Publisher
|
|
58
97
|
)
|
59
98
|
end
|
60
99
|
|
61
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
62
100
|
# Add comment with report url
|
63
101
|
#
|
64
102
|
# @return [void]
|
65
103
|
def add_comment
|
104
|
+
create_or_update_comment
|
105
|
+
create_or_resolve_discussion
|
106
|
+
end
|
107
|
+
|
108
|
+
# Create or update comment with report url
|
109
|
+
#
|
110
|
+
# @return [void]
|
111
|
+
def create_or_update_comment
|
66
112
|
if main_comment
|
67
113
|
log_debug("Updating summary in comment with id #{discussion.id} in mr !#{mr_iid}")
|
68
114
|
|
69
|
-
client.edit_merge_request_note(
|
115
|
+
return client.edit_merge_request_note(
|
70
116
|
project,
|
71
117
|
mr_iid,
|
72
118
|
main_comment.id,
|
73
119
|
url_section_builder.comment_body(main_comment.body)
|
74
120
|
)
|
75
|
-
else
|
76
|
-
log_debug("Creating comment with summary for mr ! #{mr_iid}")
|
77
|
-
client.create_merge_request_comment(project, mr_iid, url_section_builder.comment_body)
|
78
121
|
end
|
79
122
|
|
123
|
+
log_debug("Creating comment with summary for mr ! #{mr_iid}")
|
124
|
+
client.create_merge_request_comment(project, mr_iid, url_section_builder.comment_body)
|
125
|
+
end
|
126
|
+
|
127
|
+
# Create or resolve comment discussion
|
128
|
+
#
|
129
|
+
# @return [void]
|
130
|
+
def create_or_resolve_discussion
|
80
131
|
@discussion = nil
|
81
132
|
|
82
133
|
if unresolved_discussion_on_failure && report_has_failures? && !alert_comment
|
@@ -93,8 +144,6 @@ module Publisher
|
|
93
144
|
main_comment&.body&.include?("❌")
|
94
145
|
end
|
95
146
|
|
96
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
97
|
-
|
98
147
|
# Existing discussion that has comment with allure urls
|
99
148
|
#
|
100
149
|
# @return [Gitlab::ObjectifiedHash]
|
@@ -110,103 +159,6 @@ module Publisher
|
|
110
159
|
def main_comment
|
111
160
|
discussion&.notes&.detect { |note| Helpers::UrlSectionBuilder.match?(note.body) }
|
112
161
|
end
|
113
|
-
|
114
|
-
# Comment with alert text
|
115
|
-
#
|
116
|
-
# @return [Gitlab::ObjectifiedHash]
|
117
|
-
def alert_comment
|
118
|
-
@alert_comment ||= discussion&.notes&.detect do |note|
|
119
|
-
note.body.include?(alert_comment_text)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# Text for alert comment
|
124
|
-
#
|
125
|
-
# @return [String]
|
126
|
-
def alert_comment_text
|
127
|
-
@alert_comment_text ||=
|
128
|
-
env("ALLURE_FAILURE_ALERT_COMMENT") || "There are some test failures that need attention"
|
129
|
-
end
|
130
|
-
|
131
|
-
# Get gitlab client
|
132
|
-
#
|
133
|
-
# @return [Gitlab::Client]
|
134
|
-
def client
|
135
|
-
@client ||= begin
|
136
|
-
raise("Missing GITLAB_AUTH_TOKEN environment variable!") unless env("GITLAB_AUTH_TOKEN")
|
137
|
-
|
138
|
-
::Gitlab::Client.new(
|
139
|
-
endpoint: "#{server_url}/api/v4",
|
140
|
-
private_token: env("GITLAB_AUTH_TOKEN")
|
141
|
-
)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
# Custom repository name
|
146
|
-
#
|
147
|
-
# @return [String]
|
148
|
-
def allure_project
|
149
|
-
@allure_project ||= env("ALLURE_PROJECT_PATH")
|
150
|
-
end
|
151
|
-
|
152
|
-
# Custom mr iid name
|
153
|
-
#
|
154
|
-
# @return [String]
|
155
|
-
def allure_mr_iid
|
156
|
-
@allure_mr_iid ||= env("ALLURE_MERGE_REQUEST_IID")
|
157
|
-
end
|
158
|
-
|
159
|
-
# Custom sha
|
160
|
-
#
|
161
|
-
# @return [String]
|
162
|
-
def allure_sha
|
163
|
-
@allure_sha ||= env("ALLURE_COMMIT_SHA")
|
164
|
-
end
|
165
|
-
|
166
|
-
# Gitlab project path
|
167
|
-
#
|
168
|
-
# @return [String]
|
169
|
-
def project
|
170
|
-
@project ||= allure_project || env("CI_MERGE_REQUEST_PROJECT_PATH") || env("CI_PROJECT_PATH")
|
171
|
-
end
|
172
|
-
|
173
|
-
# Merge request iid
|
174
|
-
#
|
175
|
-
# @return [Integer]
|
176
|
-
def mr_iid
|
177
|
-
@mr_iid ||= allure_mr_iid || env("CI_MERGE_REQUEST_IID")
|
178
|
-
end
|
179
|
-
|
180
|
-
# Server url
|
181
|
-
#
|
182
|
-
# @return [String]
|
183
|
-
def server_url
|
184
|
-
@server_url ||= env("CI_SERVER_URL")
|
185
|
-
end
|
186
|
-
|
187
|
-
# Build url
|
188
|
-
#
|
189
|
-
# @return [String]
|
190
|
-
def build_url
|
191
|
-
@build_url ||= env("CI_PIPELINE_URL")
|
192
|
-
end
|
193
|
-
|
194
|
-
# Job name
|
195
|
-
#
|
196
|
-
# @return [String]
|
197
|
-
def build_name
|
198
|
-
@build_name ||= env(ALLURE_JOB_NAME) || env("CI_JOB_NAME")
|
199
|
-
end
|
200
|
-
|
201
|
-
# Commit sha url
|
202
|
-
#
|
203
|
-
# @return [String]
|
204
|
-
def sha_url
|
205
|
-
sha = allure_sha || env("CI_MERGE_REQUEST_SOURCE_BRANCH_SHA") || env("CI_COMMIT_SHA")
|
206
|
-
short_sha = sha[0..7]
|
207
|
-
|
208
|
-
"[#{short_sha}](#{server_url}/#{project}/-/merge_requests/#{mr_iid}/diffs?commit_id=#{sha})"
|
209
|
-
end
|
210
162
|
end
|
211
163
|
end
|
212
164
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module Publisher
|
4
|
+
module Providers
|
5
|
+
module Info
|
6
|
+
# Base class for CI executor info
|
7
|
+
#
|
8
|
+
class Base
|
9
|
+
ALLURE_JOB_NAME = "ALLURE_JOB_NAME".freeze
|
10
|
+
|
11
|
+
# :nocov:
|
12
|
+
|
13
|
+
# CI Provider executor info
|
14
|
+
#
|
15
|
+
# @param [String] report_url
|
16
|
+
# @return [Hash]
|
17
|
+
def executor(_report_url)
|
18
|
+
raise("Not implemented!")
|
19
|
+
end
|
20
|
+
|
21
|
+
# Running on pull request/merge request
|
22
|
+
#
|
23
|
+
# @return [Boolean]
|
24
|
+
def pr?
|
25
|
+
raise("Not implemented!")
|
26
|
+
end
|
27
|
+
|
28
|
+
# Pipeline run id
|
29
|
+
#
|
30
|
+
# @return [Integer]
|
31
|
+
def run_id
|
32
|
+
raise("Not implemented!")
|
33
|
+
end
|
34
|
+
|
35
|
+
# :nocov:
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Publisher
|
2
|
+
module Providers
|
3
|
+
module Info
|
4
|
+
# Github executor info
|
5
|
+
#
|
6
|
+
class Github < Base
|
7
|
+
include Singleton
|
8
|
+
include Helpers
|
9
|
+
|
10
|
+
# Executor info
|
11
|
+
#
|
12
|
+
# @return [Hash]
|
13
|
+
def executor(report_url)
|
14
|
+
{
|
15
|
+
name: "Github",
|
16
|
+
type: "github",
|
17
|
+
reportName: "AllureReport",
|
18
|
+
reportUrl: report_url,
|
19
|
+
url: server_url,
|
20
|
+
buildUrl: build_url,
|
21
|
+
buildOrder: run_id,
|
22
|
+
buildName: build_name
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Pull request run
|
27
|
+
#
|
28
|
+
# @return [Boolean]
|
29
|
+
def pr?
|
30
|
+
env("GITHUB_EVENT_NAME") == "pull_request"
|
31
|
+
end
|
32
|
+
|
33
|
+
# Run id
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
def run_id
|
37
|
+
@run_id ||= env("GITHUB_RUN_ID")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Server url
|
41
|
+
#
|
42
|
+
# @return [String]
|
43
|
+
def server_url
|
44
|
+
@server_url ||= env("GITHUB_SERVER_URL")
|
45
|
+
end
|
46
|
+
|
47
|
+
# Job name
|
48
|
+
#
|
49
|
+
# @return [String]
|
50
|
+
def build_name
|
51
|
+
@build_name ||= env(ALLURE_JOB_NAME) || env("GITHUB_JOB")
|
52
|
+
end
|
53
|
+
|
54
|
+
# Github repository
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
def repository
|
58
|
+
@repository ||= env("GITHUB_REPOSITORY")
|
59
|
+
end
|
60
|
+
|
61
|
+
# Build url
|
62
|
+
#
|
63
|
+
# @return [String]
|
64
|
+
def build_url
|
65
|
+
@build_url ||= "#{server_url}/#{repository}/actions/runs/#{run_id}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Publisher
|
2
|
+
module Providers
|
3
|
+
module Info
|
4
|
+
# Gitlab executor info
|
5
|
+
#
|
6
|
+
class Gitlab < Base
|
7
|
+
include Singleton
|
8
|
+
include Helpers
|
9
|
+
|
10
|
+
# Executor info
|
11
|
+
#
|
12
|
+
# @return [Hash]
|
13
|
+
def executor(report_url)
|
14
|
+
{
|
15
|
+
name: "Gitlab",
|
16
|
+
type: "gitlab",
|
17
|
+
reportName: "AllureReport",
|
18
|
+
reportUrl: report_url,
|
19
|
+
url: server_url,
|
20
|
+
buildUrl: build_url,
|
21
|
+
buildOrder: run_id,
|
22
|
+
buildName: build_name
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Pull request run
|
27
|
+
#
|
28
|
+
# @return [Boolean]
|
29
|
+
def pr?
|
30
|
+
!!(allure_project && allure_mr_iid) || ENV["CI_PIPELINE_SOURCE"] == "merge_request_event"
|
31
|
+
end
|
32
|
+
|
33
|
+
# Get ci run ID without creating instance of ci provider
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
def run_id
|
37
|
+
@run_id ||= ENV["CI_PIPELINE_ID"]
|
38
|
+
end
|
39
|
+
|
40
|
+
# Server url
|
41
|
+
#
|
42
|
+
# @return [String]
|
43
|
+
def server_url
|
44
|
+
@server_url ||= env("CI_SERVER_URL")
|
45
|
+
end
|
46
|
+
|
47
|
+
# Build url
|
48
|
+
#
|
49
|
+
# @return [String]
|
50
|
+
def build_url
|
51
|
+
@build_url ||= env("CI_PIPELINE_URL")
|
52
|
+
end
|
53
|
+
|
54
|
+
# Custom repository name
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
def allure_project
|
58
|
+
@allure_project ||= env("ALLURE_PROJECT_PATH")
|
59
|
+
end
|
60
|
+
|
61
|
+
# Custom mr iid name
|
62
|
+
#
|
63
|
+
# @return [String]
|
64
|
+
def allure_mr_iid
|
65
|
+
@allure_mr_iid ||= env("ALLURE_MERGE_REQUEST_IID")
|
66
|
+
end
|
67
|
+
|
68
|
+
# Job name
|
69
|
+
#
|
70
|
+
# @return [String]
|
71
|
+
def build_name
|
72
|
+
@build_name ||= env(ALLURE_JOB_NAME) || env("CI_JOB_NAME")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -29,23 +29,13 @@ module Publisher
|
|
29
29
|
# @option args [String] :bucket
|
30
30
|
# @option args [String] :prefix
|
31
31
|
# @option args [String] :base_url
|
32
|
-
# @option args [Boolean] :update_pr
|
33
|
-
# @option args [String] :summary_type
|
34
|
-
# @option args [Symbol] :summary_table_type
|
35
|
-
# @option args [Boolean] :collapse_summary
|
36
|
-
# @option args [Boolean] :unresolved_discussion_on_failure
|
37
32
|
# @option args [String] :copy_latest
|
38
33
|
def initialize(**args)
|
39
34
|
@result_paths = args[:result_paths]
|
40
35
|
@bucket_name = args[:bucket]
|
41
36
|
@prefix = args[:prefix]
|
42
37
|
@base_url = args[:base_url]
|
43
|
-
@
|
44
|
-
@summary_type = args[:summary_type]
|
45
|
-
@summary_table_type = args[:summary_table_type]
|
46
|
-
@copy_latest = (Providers.provider && args[:copy_latest]) # copy latest for ci only
|
47
|
-
@collapse_summary = args[:collapse_summary]
|
48
|
-
@unresolved_discussion_on_failure = args[:unresolved_discussion_on_failure]
|
38
|
+
@copy_latest = ci_info && args[:copy_latest] # copy latest for ci only
|
49
39
|
end
|
50
40
|
|
51
41
|
# Execute allure report generation and upload
|
@@ -54,7 +44,6 @@ module Publisher
|
|
54
44
|
def execute
|
55
45
|
generate_report
|
56
46
|
upload
|
57
|
-
add_result_summary
|
58
47
|
end
|
59
48
|
|
60
49
|
# Generate allure report
|
@@ -76,16 +65,6 @@ module Publisher
|
|
76
65
|
upload_latest_copy if copy_latest
|
77
66
|
end
|
78
67
|
|
79
|
-
# Add allure report url to pull request description
|
80
|
-
#
|
81
|
-
# @return [void]
|
82
|
-
def add_result_summary
|
83
|
-
return unless update_pr && ci_provider
|
84
|
-
|
85
|
-
log_debug("Adding test result summary")
|
86
|
-
ci_provider.add_result_summary
|
87
|
-
end
|
88
|
-
|
89
68
|
# Uploaded report urls
|
90
69
|
#
|
91
70
|
# @return [Hash<String, String>] uploaded report urls
|
@@ -96,27 +75,35 @@ module Publisher
|
|
96
75
|
urls
|
97
76
|
end
|
98
77
|
|
99
|
-
#
|
78
|
+
# :nocov:
|
79
|
+
|
80
|
+
# Report url
|
100
81
|
#
|
101
|
-
# @return [
|
102
|
-
def
|
103
|
-
|
82
|
+
# @return [String]
|
83
|
+
def report_url
|
84
|
+
raise("Not Implemented!")
|
104
85
|
end
|
105
86
|
|
87
|
+
# :nocov:
|
88
|
+
|
89
|
+
def_delegator :report_generator, :report_path
|
90
|
+
|
106
91
|
private
|
107
92
|
|
108
93
|
attr_reader :result_paths,
|
109
94
|
:bucket_name,
|
110
95
|
:prefix,
|
111
96
|
:base_url,
|
112
|
-
:
|
113
|
-
:copy_latest,
|
114
|
-
:summary_type,
|
115
|
-
:collapse_summary,
|
116
|
-
:summary_table_type,
|
117
|
-
:unresolved_discussion_on_failure
|
97
|
+
:copy_latest
|
118
98
|
|
119
|
-
|
99
|
+
def_delegator :report_generator, :common_info_path
|
100
|
+
|
101
|
+
# CI info
|
102
|
+
#
|
103
|
+
# @return [Providers::Info::Base]
|
104
|
+
def ci_info
|
105
|
+
Providers.info
|
106
|
+
end
|
120
107
|
|
121
108
|
# :nocov:
|
122
109
|
|
@@ -127,13 +114,6 @@ module Publisher
|
|
127
114
|
raise("Not Implemented!")
|
128
115
|
end
|
129
116
|
|
130
|
-
# Report url
|
131
|
-
#
|
132
|
-
# @return [String]
|
133
|
-
def report_url
|
134
|
-
raise("Not Implemented!")
|
135
|
-
end
|
136
|
-
|
137
117
|
# Latest report url
|
138
118
|
#
|
139
119
|
# @return [String]
|
@@ -168,6 +148,7 @@ module Publisher
|
|
168
148
|
def upload_latest_copy
|
169
149
|
raise("Not implemented!")
|
170
150
|
end
|
151
|
+
|
171
152
|
# :nocov:
|
172
153
|
|
173
154
|
# Allure report generator
|
@@ -201,24 +182,7 @@ module Publisher
|
|
201
182
|
#
|
202
183
|
# @return [String]
|
203
184
|
def run_id
|
204
|
-
@run_id ||=
|
205
|
-
end
|
206
|
-
|
207
|
-
# Get CI provider
|
208
|
-
#
|
209
|
-
# @return [Publisher::Providers::Base]
|
210
|
-
def ci_provider
|
211
|
-
return @ci_provider if defined?(@ci_provider)
|
212
|
-
|
213
|
-
@ci_provider = Providers.provider&.new(
|
214
|
-
report_url: report_url,
|
215
|
-
report_path: report_path,
|
216
|
-
update_pr: update_pr,
|
217
|
-
summary_type: summary_type,
|
218
|
-
summary_table_type: summary_table_type,
|
219
|
-
collapse_summary: collapse_summary,
|
220
|
-
unresolved_discussion_on_failure: unresolved_discussion_on_failure
|
221
|
-
)
|
185
|
+
@run_id ||= ci_info&.run_id
|
222
186
|
end
|
223
187
|
|
224
188
|
# Add allure history
|
@@ -236,10 +200,10 @@ module Publisher
|
|
236
200
|
#
|
237
201
|
# @return [void]
|
238
202
|
def add_executor_info
|
239
|
-
return unless
|
203
|
+
return unless ci_info
|
240
204
|
|
241
|
-
json =
|
242
|
-
log_debug("Saving ci executor info:\n#{
|
205
|
+
json = JSON.pretty_generate(ci_info.executor(report_url))
|
206
|
+
log_debug("Saving ci executor info:\n#{json}")
|
243
207
|
# allure-report will fail to pick up reportUrl in history tab if executor.json is not present alongside results
|
244
208
|
[common_info_path, *result_paths].each do |path|
|
245
209
|
file = File.join(path, EXECUTOR_JSON)
|
@@ -5,6 +5,13 @@ module Publisher
|
|
5
5
|
# Google cloud storage uploader implementation
|
6
6
|
#
|
7
7
|
class GCS < Uploader
|
8
|
+
# Report url
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
def report_url
|
12
|
+
@report_url ||= url(full_prefix)
|
13
|
+
end
|
14
|
+
|
8
15
|
private
|
9
16
|
|
10
17
|
# GCS client
|
@@ -21,13 +28,6 @@ module Publisher
|
|
21
28
|
@bucket ||= client.bucket(bucket_name, skip_lookup: true)
|
22
29
|
end
|
23
30
|
|
24
|
-
# Report url
|
25
|
-
#
|
26
|
-
# @return [String]
|
27
|
-
def report_url
|
28
|
-
@report_url ||= url(full_prefix)
|
29
|
-
end
|
30
|
-
|
31
31
|
# Latest report url
|
32
32
|
#
|
33
33
|
# @return [String]
|
@@ -6,6 +6,13 @@ module Publisher
|
|
6
6
|
# Report upload to AWS S3 bucket
|
7
7
|
#
|
8
8
|
class S3 < Uploader
|
9
|
+
# Report url
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
def report_url
|
13
|
+
@report_url ||= url(full_prefix)
|
14
|
+
end
|
15
|
+
|
9
16
|
private
|
10
17
|
|
11
18
|
# S3 client
|
@@ -29,13 +36,6 @@ module Publisher
|
|
29
36
|
}.compact
|
30
37
|
end
|
31
38
|
|
32
|
-
# Report url
|
33
|
-
#
|
34
|
-
# @return [String]
|
35
|
-
def report_url
|
36
|
-
@report_url ||= url(full_prefix)
|
37
|
-
end
|
38
|
-
|
39
39
|
# Latest report url
|
40
40
|
#
|
41
41
|
# @return [String]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: allure-report-publisher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrejs Cunskis
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 1.93.1
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.142.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 1.93.1
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 1.142.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: dry-cli
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -211,7 +211,7 @@ extensions: []
|
|
211
211
|
extra_rdoc_files: []
|
212
212
|
files:
|
213
213
|
- README.md
|
214
|
-
-
|
214
|
+
- exe/allure-report-publisher
|
215
215
|
- lib/allure_report_publisher.rb
|
216
216
|
- lib/allure_report_publisher/commands/upload.rb
|
217
217
|
- lib/allure_report_publisher/commands/version.rb
|
@@ -223,6 +223,9 @@ files:
|
|
223
223
|
- lib/allure_report_publisher/lib/providers/_provider.rb
|
224
224
|
- lib/allure_report_publisher/lib/providers/github.rb
|
225
225
|
- lib/allure_report_publisher/lib/providers/gitlab.rb
|
226
|
+
- lib/allure_report_publisher/lib/providers/info/_base.rb
|
227
|
+
- lib/allure_report_publisher/lib/providers/info/github.rb
|
228
|
+
- lib/allure_report_publisher/lib/providers/info/gitlab.rb
|
226
229
|
- lib/allure_report_publisher/lib/report_generator.rb
|
227
230
|
- lib/allure_report_publisher/lib/uploaders/_uploader.rb
|
228
231
|
- lib/allure_report_publisher/lib/uploaders/gcs.rb
|
File without changes
|