gitlab-qa 6.10.0 → 6.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +8 -8
- data/docs/running_specific_orchestrated_tests.md +1 -1
- data/docs/what_tests_can_be_run.md +1 -0
- data/lib/gitlab/qa/report/generate_test_session.rb +33 -2
- data/lib/gitlab/qa/report/gitlab_issue_client.rb +3 -0
- data/lib/gitlab/qa/report/relate_failure_issue.rb +25 -10
- data/lib/gitlab/qa/report/report_as_issue.rb +22 -1
- data/lib/gitlab/qa/report/results_in_issues.rb +6 -4
- data/lib/gitlab/qa/runtime/env.rb +16 -3
- data/lib/gitlab/qa/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79cd3084cf93dc40c0935800fd13991f2b8e057fd08aca2b91cffddc776675c3
|
4
|
+
data.tar.gz: 0ad9aecd55123681543e84b7ff2150ec8d4a0f004374dd43cd7ced64a89b11f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29b7032d6ad65269e2aa27d03bea3bff2805bd160550c69fefd08475bb60ad5160c2417422e58b2b29d1ef4c2c31d3ebc6661cb0cbb151522dedb6dda97e64d7
|
7
|
+
data.tar.gz: 16d5d8ae03e4542c7518e1466723eee32e927a523890c3d56c565df2cabd363a180116a2d4db5d2eefd323dadb355f1471c7d7da9a0fcff61eb13f607a174b95
|
data/.gitlab-ci.yml
CHANGED
@@ -49,9 +49,9 @@ variables:
|
|
49
49
|
QA_CAN_TEST_GIT_PROTOCOL_V2: "true"
|
50
50
|
QA_CAN_TEST_PRAEFECT: "false"
|
51
51
|
QA_TESTCASES_REPORTING_PROJECT: "gitlab-org/quality/testcases"
|
52
|
-
QA_FAILURES_REPORTING_PROJECT: "gitlab-
|
52
|
+
QA_FAILURES_REPORTING_PROJECT: "rymai/gitlab-qa-issues"
|
53
53
|
# The --dry-run or --max-diff-ratio option can be set to modify the behavior of `exe/gitlab-qa-report --relate-failure-issue` without releasing a new gem version.
|
54
|
-
QA_FAILURES_REPORTER_OPTIONS: "
|
54
|
+
QA_FAILURES_REPORTER_OPTIONS: ""
|
55
55
|
QA_TESTCASE_SESSIONS_PROJECT: "gitlab-org/quality/testcase-sessions"
|
56
56
|
|
57
57
|
.check-base:
|
@@ -95,8 +95,8 @@ release:
|
|
95
95
|
reports:
|
96
96
|
junit: gitlab-qa-run-*/**/rspec-*.xml
|
97
97
|
script:
|
98
|
-
- 'echo "Running: exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
|
99
|
-
- exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS || test_run_exit_code=$?
|
98
|
+
- 'echo "Running: exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
|
99
|
+
- exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS || test_run_exit_code=$?
|
100
100
|
- exe/gitlab-qa-report --update-screenshot-path "gitlab-qa-run-*/**/rspec-*.xml"
|
101
101
|
- export GITLAB_QA_ACCESS_TOKEN="$GITLAB_QA_PRODUCTION_ACCESS_TOKEN"
|
102
102
|
- if [ "$TOP_UPSTREAM_SOURCE_REF" == "master" ] || [[ "$TOP_UPSTREAM_SOURCE_JOB" == https://ops.gitlab.net* ]]; then exe/gitlab-qa-report --report-in-issues "gitlab-qa-run-*/**/rspec-*.json" --project "$QA_TESTCASES_REPORTING_PROJECT" || true; fi
|
@@ -175,8 +175,8 @@ ee:sanity-framework:
|
|
175
175
|
# The custom jobs are for manually running specific/alternative tests in MRs, so we don't report them in issues
|
176
176
|
ce:custom-parallel:
|
177
177
|
script:
|
178
|
-
- 'echo "Running: exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
|
179
|
-
- exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS
|
178
|
+
- 'echo "Running: exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
|
179
|
+
- exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS
|
180
180
|
extends:
|
181
181
|
- .test
|
182
182
|
- .high-capacity
|
@@ -187,8 +187,8 @@ ce:custom-parallel:
|
|
187
187
|
|
188
188
|
ee:custom-parallel:
|
189
189
|
script:
|
190
|
-
- 'echo "Running: exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
|
191
|
-
- exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS
|
190
|
+
- 'echo "Running: exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"'
|
191
|
+
- exe/gitlab-qa ${QA_SCENARIO:=Test::Instance::Image} ${RELEASE:=$DEFAULT_RELEASE} $GITLAB_QA_OPTS -- $QA_TESTS $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS
|
192
192
|
extends:
|
193
193
|
- .test
|
194
194
|
- .high-capacity
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
The [maven repository spec](https://gitlab.com/gitlab-org/gitlab/-/blob/master/qa/qa/specs/features/ee/browser_ui/5_package/maven_repository_spec.rb) creates a Maven artifact and links it to a GitLab project. The artifact is created within a [Maven docker image](https://gitlab.com/gitlab-org/gitlab/-/blob/master/qa/qa/service/docker_run/maven.rb#L8).
|
6
6
|
|
7
|
-
Using `gitlab-qa` to run these tests reduces the
|
7
|
+
Using `gitlab-qa` to run these tests reduces the likelihood of network errors between the maven container and GitLab instance.
|
8
8
|
|
9
9
|
To run this with `gitlab-qa` you can use the `Test::Instance::Image` that is needed for your test. For example:
|
10
10
|
|
@@ -84,6 +84,7 @@ All environment variables used by GitLab QA should be defined in [`lib/gitlab/qa
|
|
84
84
|
| `JIRA_ADMIN_PASSWORD` |- | Password for authenticating with Jira server as admin. | No|
|
85
85
|
| `CACHE_NAMESPACE_NAME` | `true` | Cache namespace name for groups. | No|
|
86
86
|
| `DEPLOY_VERSION` |- | The version of GitLab being tested against. | No|
|
87
|
+
| `GITLAB_QA_USER_AGENT` |- | The browser user-agent to use instead of the default Chrome user-agent. | No|
|
87
88
|
|
88
89
|
## [Supported Remote Grid environment variables](./running_against_remote_grid.md)
|
89
90
|
|
@@ -6,6 +6,7 @@ module Gitlab
|
|
6
6
|
class GenerateTestSession < ReportAsIssue
|
7
7
|
private
|
8
8
|
|
9
|
+
# rubocop:disable Metrics/AbcSize
|
9
10
|
def run!
|
10
11
|
puts "Generating test results in `#{files.join(',')}` as issues in project `#{project}` via the API at `#{Runtime::Env.gitlab_api_base}`."
|
11
12
|
|
@@ -18,11 +19,12 @@ module Gitlab
|
|
18
19
|
issue = gitlab.create_issue(
|
19
20
|
title: "Test session report | #{Runtime::Env.deploy_environment}",
|
20
21
|
description: generate_description(tests),
|
21
|
-
labels: ['Quality', 'QA', 'triage report']
|
22
|
+
labels: ['Quality', 'QA', 'triage report', deploy_environment_label]
|
22
23
|
)
|
23
24
|
|
24
25
|
File.write('REPORT_ISSUE_URL', issue.web_url)
|
25
26
|
end
|
27
|
+
# rubocop:enable Metrics/AbcSize
|
26
28
|
|
27
29
|
def generate_description(tests)
|
28
30
|
<<~MARKDOWN
|
@@ -32,6 +34,8 @@ module Gitlab
|
|
32
34
|
* Pipeline: [#{Runtime::Env.ci_pipeline_id}](#{Runtime::Env.ci_pipeline_url})
|
33
35
|
#{generate_summary(tests: tests)}
|
34
36
|
|
37
|
+
#{generate_failed_jobs_listing}
|
38
|
+
|
35
39
|
#{generate_stages_listing(tests)}
|
36
40
|
|
37
41
|
## Release QA issue
|
@@ -55,6 +59,33 @@ module Gitlab
|
|
55
59
|
MARKDOWN
|
56
60
|
end
|
57
61
|
|
62
|
+
def generate_failed_jobs_listing
|
63
|
+
failed_jobs = []
|
64
|
+
|
65
|
+
client = Gitlab.client(
|
66
|
+
endpoint: Runtime::Env.ci_api_v4_url,
|
67
|
+
private_token: Runtime::Env.gitlab_ci_api_token)
|
68
|
+
|
69
|
+
gitlab.handle_gitlab_client_exceptions do
|
70
|
+
failed_jobs = client.pipeline_jobs(
|
71
|
+
Runtime::Env.ci_project_id,
|
72
|
+
Runtime::Env.ci_pipeline_id,
|
73
|
+
scope: 'failed')
|
74
|
+
end
|
75
|
+
|
76
|
+
listings = failed_jobs.map do |job|
|
77
|
+
allowed_to_fail = ' (allowed to fail)' if job.allow_failure
|
78
|
+
|
79
|
+
"* [#{job.name}](#{job.web_url})#{allowed_to_fail}"
|
80
|
+
end.join("\n")
|
81
|
+
|
82
|
+
<<~MARKDOWN.chomp if failed_jobs.any?
|
83
|
+
## Failed jobs
|
84
|
+
|
85
|
+
#{listings}
|
86
|
+
MARKDOWN
|
87
|
+
end
|
88
|
+
|
58
89
|
def generate_stages_listing(tests)
|
59
90
|
generate_tests_by_stage(tests).map do |stage, tests_for_stage|
|
60
91
|
tests_by_status = tests_for_stage.group_by(&:status)
|
@@ -185,7 +216,7 @@ module Gitlab
|
|
185
216
|
tests_with_same_testcase.select(&:failure_issue)
|
186
217
|
|
187
218
|
if tests_having_failure_issue.any?
|
188
|
-
items = tests_having_failure_issue.map do |test|
|
219
|
+
items = tests_having_failure_issue.uniq(&:failure_issue).map do |test|
|
189
220
|
"<li>[ ] [failure issue](#{test.failure_issue})</li>"
|
190
221
|
end.join(' ')
|
191
222
|
|
@@ -109,6 +109,9 @@ module Gitlab
|
|
109
109
|
pipeline = QA::Runtime::Env.pipeline_from_project_name
|
110
110
|
channel = pipeline == "canary" ? "qa-production" : "qa-#{pipeline}"
|
111
111
|
error_msg = warn_exception(e)
|
112
|
+
|
113
|
+
return unless QA::Runtime::Env.ci_commit_ref_name == 'master'
|
114
|
+
|
112
115
|
slack_options = {
|
113
116
|
channel: channel,
|
114
117
|
icon_emoji: ':ci_failing:',
|
@@ -10,7 +10,7 @@ module Gitlab
|
|
10
10
|
# Uses the API to create or update GitLab issues with the results of tests from RSpec report files.
|
11
11
|
class RelateFailureIssue < ReportAsIssue
|
12
12
|
DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION = 0.05
|
13
|
-
STACKTRACE_REGEX = %r{### Stack trace\s*(```)\s*.*(Failure/Error
|
13
|
+
STACKTRACE_REGEX = %r{### Stack trace\s*(```)\s*.*(Failure/Error:.+)(\1)}m.freeze
|
14
14
|
NEW_ISSUE_LABELS = Set.new(%w[QA Quality test failure::investigating priority::2]).freeze
|
15
15
|
|
16
16
|
MultipleIssuesFound = Class.new(StandardError)
|
@@ -47,6 +47,7 @@ module Gitlab
|
|
47
47
|
issue = find_or_create_issue(test)
|
48
48
|
return unless issue
|
49
49
|
|
50
|
+
update_labels(issue, test)
|
50
51
|
post_failed_job_note(issue, test)
|
51
52
|
puts " => Marked #{issue.web_url} as related to #{test.testcase}."
|
52
53
|
rescue MultipleIssuesFound => e
|
@@ -81,17 +82,20 @@ module Gitlab
|
|
81
82
|
# Search with the `search` param returns 500 errors, so we filter by ~QA and then filter further in Ruby
|
82
83
|
failure_issues(test).each_with_object({}) do |issue, memo|
|
83
84
|
relevant_issue_stacktrace = find_issue_stacktrace(issue)
|
84
|
-
unless relevant_issue_stacktrace
|
85
|
-
puts " => [DEBUG] Found issue #{issue.web_url} but stacktrace doesn't match."
|
86
|
-
next
|
87
|
-
end
|
85
|
+
next unless relevant_issue_stacktrace
|
88
86
|
|
89
87
|
distance = ld.call(first_test_failure_stacktrace, relevant_issue_stacktrace)
|
90
88
|
diff_ratio = (distance.to_f / first_test_failure_stacktrace.size).round(3)
|
91
89
|
if diff_ratio <= max_diff_ratio
|
92
|
-
|
90
|
+
puts " => [DEBUG] Issue #{issue} has an acceptable diff ratio of #{(diff_ratio * 100).round(2)}%."
|
91
|
+
# The `Gitlab::ObjectifiedHash` class overrides `#hash` which is used by `Hash#[]=` to compute the hash key.
|
92
|
+
# This leads to a `TypeError Exception: no implicit conversion of Hash into Integer` error, so we convert the object to a hash before using it as a Hash key.
|
93
|
+
# See:
|
94
|
+
# - https://gitlab.com/gitlab-org/gitlab-qa/-/merge_requests/587#note_453336995
|
95
|
+
# - https://github.com/NARKOZ/gitlab/commit/cbdbd1e32623f018a8fae39932a8e3bc4d929abb?_pjax=%23js-repo-pjax-container#r44484494
|
96
|
+
memo[issue.to_h] = diff_ratio
|
93
97
|
else
|
94
|
-
puts " => [DEBUG] Found issue #{issue.web_url} but
|
98
|
+
puts " => [DEBUG] Found issue #{issue.web_url} but stacktraces are too different (#{(diff_ratio * 100).round(2)}%)."
|
95
99
|
end
|
96
100
|
end
|
97
101
|
end
|
@@ -102,7 +106,7 @@ module Gitlab
|
|
102
106
|
if issue_stacktrace_match
|
103
107
|
issue_stacktrace_match[2].gsub(/^#.*$/, '').strip
|
104
108
|
else
|
105
|
-
puts "
|
109
|
+
puts " => [DEBUG] Stacktrace couldn't be found for #{issue.web_url}:\n\n#{issue.description}\n\n----------------------------------\n"
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
@@ -117,24 +121,35 @@ module Gitlab
|
|
117
121
|
raise(MultipleIssuesFound, %(Too many issues found for test '#{test.name}' (`#{test.file}`)!))
|
118
122
|
end
|
119
123
|
|
124
|
+
# Re-instantiate a `Gitlab::ObjectifiedHash` object after having converted it to a hash in #find_relevant_failure_issues above.
|
125
|
+
best_matching_issue = Gitlab::ObjectifiedHash.new(best_matching_issue)
|
126
|
+
|
120
127
|
test.failure_issue ||= best_matching_issue.web_url
|
121
128
|
|
122
129
|
[best_matching_issue, smaller_diff_ratio]
|
123
130
|
end
|
124
131
|
|
125
132
|
def new_issue_description(test)
|
126
|
-
super +
|
133
|
+
super + [
|
134
|
+
"\n\n### Stack trace",
|
135
|
+
"```\n#{test.failures.first['message_lines'].join("\n")}\n```",
|
136
|
+
"First happened in #{test.ci_job_url}."
|
137
|
+
].join("\n\n")
|
127
138
|
end
|
128
139
|
|
129
140
|
def new_issue_labels(test)
|
130
141
|
NEW_ISSUE_LABELS + up_to_date_labels(test: test)
|
131
142
|
end
|
132
143
|
|
144
|
+
def up_to_date_labels(test:, issue: nil)
|
145
|
+
super << deploy_environment_label
|
146
|
+
end
|
147
|
+
|
133
148
|
def post_failed_job_note(issue, test)
|
134
149
|
gitlab.create_issue_note(iid: issue.iid, note: "/relate #{test.testcase}")
|
135
150
|
end
|
136
151
|
|
137
|
-
def
|
152
|
+
def new_issue_title(test)
|
138
153
|
"Failure in #{super}"
|
139
154
|
end
|
140
155
|
end
|
@@ -28,6 +28,10 @@ module Gitlab
|
|
28
28
|
raise NotImplementedError
|
29
29
|
end
|
30
30
|
|
31
|
+
def new_issue_title(test)
|
32
|
+
"#{partial_file_path(test.file)} | #{search_safe(test.name)}".strip
|
33
|
+
end
|
34
|
+
|
31
35
|
def new_issue_description(test)
|
32
36
|
"### Full description\n\n#{search_safe(test.name)}\n\n### File path\n\n#{test.file}"
|
33
37
|
end
|
@@ -100,6 +104,23 @@ module Gitlab
|
|
100
104
|
labels
|
101
105
|
end
|
102
106
|
|
107
|
+
def deploy_environment_label
|
108
|
+
environment = Runtime::Env.deploy_environment
|
109
|
+
|
110
|
+
case environment
|
111
|
+
when 'production'
|
112
|
+
'found:gitlab.com'
|
113
|
+
when 'canary', 'staging'
|
114
|
+
"found:#{environment}.gitlab.com"
|
115
|
+
when 'preprod'
|
116
|
+
'found:pre.gitlab.com'
|
117
|
+
when 'staging-orchestrated', 'nightly', 'master'
|
118
|
+
"found:#{environment}"
|
119
|
+
else
|
120
|
+
raise "No `found:*` label for the `#{environment}` environment!"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
103
124
|
def ee_test?(test)
|
104
125
|
test.file =~ %r{features/ee/(api|browser_ui)}
|
105
126
|
end
|
@@ -113,7 +134,7 @@ module Gitlab
|
|
113
134
|
end
|
114
135
|
|
115
136
|
def title_from_test(test)
|
116
|
-
title =
|
137
|
+
title = new_issue_title(test)
|
117
138
|
|
118
139
|
return title unless title.length > MAX_TITLE_LENGTH
|
119
140
|
|
@@ -25,8 +25,6 @@ module Gitlab
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def report_test(test)
|
28
|
-
return if test.skipped
|
29
|
-
|
30
28
|
puts "Reporting test: #{test.file} | #{test.name}"
|
31
29
|
|
32
30
|
issue = find_issue(test)
|
@@ -34,16 +32,19 @@ module Gitlab
|
|
34
32
|
if issue
|
35
33
|
puts "Found existing issue: #{issue.web_url}"
|
36
34
|
else
|
35
|
+
# Don't create new issues for skipped tests
|
36
|
+
return if test.skipped
|
37
|
+
|
37
38
|
issue = create_issue(test)
|
38
39
|
puts "Created new issue: #{issue.web_url}"
|
39
40
|
end
|
40
41
|
|
41
42
|
test.testcase ||= issue.web_url
|
42
43
|
|
43
|
-
update_labels(issue, test)
|
44
|
+
labels_updated = update_labels(issue, test)
|
44
45
|
note_posted = note_status(issue, test)
|
45
46
|
|
46
|
-
if note_posted
|
47
|
+
if labels_updated || note_posted
|
47
48
|
puts "Issue updated."
|
48
49
|
else
|
49
50
|
puts "Test passed, no update needed."
|
@@ -83,6 +84,7 @@ module Gitlab
|
|
83
84
|
end
|
84
85
|
|
85
86
|
def note_status(issue, test)
|
87
|
+
return false if test.skipped
|
86
88
|
return false if test.failures.empty?
|
87
89
|
|
88
90
|
note = note_content(test)
|
@@ -85,7 +85,8 @@ module Gitlab
|
|
85
85
|
'JIRA_ADMIN_USERNAME' => :jira_admin_username,
|
86
86
|
'JIRA_ADMIN_PASSWORD' => :jira_admin_password,
|
87
87
|
'CACHE_NAMESPACE_NAME' => :cache_namespace_name,
|
88
|
-
'DEPLOY_VERSION' => :deploy_version
|
88
|
+
'DEPLOY_VERSION' => :deploy_version,
|
89
|
+
'GITLAB_QA_USER_AGENT' => :gitlab_qa_user_agent
|
89
90
|
}.freeze
|
90
91
|
|
91
92
|
ENV_VARIABLES.each do |env_name, method_name|
|
@@ -115,6 +116,14 @@ module Gitlab
|
|
115
116
|
ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
|
116
117
|
end
|
117
118
|
|
119
|
+
def gitlab_ci_api_token
|
120
|
+
ENV['GITLAB_CI_API_TOKEN']
|
121
|
+
end
|
122
|
+
|
123
|
+
def ci_api_v4_url
|
124
|
+
ENV['CI_API_V4_URL']
|
125
|
+
end
|
126
|
+
|
118
127
|
def ci_job_name
|
119
128
|
ENV['CI_JOB_NAME']
|
120
129
|
end
|
@@ -135,8 +144,12 @@ module Gitlab
|
|
135
144
|
ENV['CI_PIPELINE_ID']
|
136
145
|
end
|
137
146
|
|
138
|
-
def
|
139
|
-
ENV['
|
147
|
+
def ci_project_id
|
148
|
+
ENV['CI_PROJECT_ID']
|
149
|
+
end
|
150
|
+
|
151
|
+
def ci_commit_ref_name
|
152
|
+
ENV['CI_COMMIT_REF_NAME']
|
140
153
|
end
|
141
154
|
|
142
155
|
def pipeline_from_project_name
|
data/lib/gitlab/qa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grzegorz Bizon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|