Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
5f176a4c91
commit
f13c38c456
|
@ -18,7 +18,7 @@ variables:
|
|||
# Helm chart ref used by test-on-cng pipeline
|
||||
GITLAB_HELM_CHART_REF: "074bb942c9c65613c2576ce418f59b8577fff37c"
|
||||
# Specific ref for cng-mirror project to trigger builds for
|
||||
GITLAB_CNG_MIRROR_REF: "a200886cbfb7e1f5a7642838f8f8fac9f26c6a97"
|
||||
GITLAB_CNG_MIRROR_REF: "4be44c2267f0c2322d6efbe98a664b418ff1a22c"
|
||||
# Makes sure some of the common scripts from pipeline-common use bundler to execute commands
|
||||
RUN_WITH_BUNDLE: "true"
|
||||
# Makes sure reporting script defined in .gitlab-qa-report from pipeline-common is executed from correct folder
|
||||
|
|
|
@ -2163,7 +2163,6 @@ Gitlab/BoundedContexts:
|
|||
- 'ee/app/graphql/ee/resolvers/board_item_filterable.rb'
|
||||
- 'ee/app/graphql/ee/resolvers/bulk_labels_resolver.rb'
|
||||
- 'ee/app/graphql/ee/resolvers/group_issues_resolver.rb'
|
||||
- 'ee/app/graphql/ee/resolvers/groups_resolver.rb'
|
||||
- 'ee/app/graphql/ee/resolvers/issues/base_parent_resolver.rb'
|
||||
- 'ee/app/graphql/ee/resolvers/issues/base_resolver.rb'
|
||||
- 'ee/app/graphql/ee/resolvers/issues_resolver.rb'
|
||||
|
|
|
@ -62,7 +62,6 @@ RSpec/BeEq:
|
|||
- 'ee/spec/helpers/ee/groups/group_members_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/groups_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/merge_requests_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/namespace_user_cap_reached_alert_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/protected_branches_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/security_orchestration_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/users/callouts_helper_spec.rb'
|
||||
|
|
|
@ -32,7 +32,6 @@ RSpec/FactoryBot/AvoidCreate:
|
|||
- 'ee/spec/helpers/ee/issues_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/labels_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/lock_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/namespace_user_cap_reached_alert_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/namespaces_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/operations_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/projects/pipeline_helper_spec.rb'
|
||||
|
@ -207,7 +206,6 @@ RSpec/FactoryBot/AvoidCreate:
|
|||
- 'ee/spec/views/projects/security/discover/show.html.haml_spec.rb'
|
||||
- 'ee/spec/views/projects/security/policies/index.html.haml_spec.rb'
|
||||
- 'ee/spec/views/projects/security/sast_configuration/show.html.haml_spec.rb'
|
||||
- 'ee/spec/views/projects/settings/subscriptions/_index.html.haml_spec.rb'
|
||||
- 'ee/spec/views/registrations/groups/new.html.haml_spec.rb'
|
||||
- 'ee/spec/views/shared/_clone_panel.html.haml_spec.rb'
|
||||
- 'ee/spec/views/shared/_kerberos_clone_button.html.haml_spec.rb'
|
||||
|
|
|
@ -354,7 +354,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/helpers/ee/hooks_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/labels_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/lock_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/namespace_user_cap_reached_alert_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/operations_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/profiles_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/projects/incidents_helper_spec.rb'
|
||||
|
@ -1021,7 +1020,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/views/projects/security/sast_configuration/show.html.haml_spec.rb'
|
||||
- 'ee/spec/views/projects/settings/merge_requests/_merge_request_approvals.html.haml_spec.rb'
|
||||
- 'ee/spec/views/projects/settings/merge_requests/_merge_request_status_checks_settings.html.haml_spec.rb'
|
||||
- 'ee/spec/views/projects/settings/subscriptions/_index.html.haml_spec.rb'
|
||||
- 'ee/spec/views/shared/_clone_panel.html.haml_spec.rb'
|
||||
- 'ee/spec/views/shared/_kerberos_clone_button.html.haml_spec.rb'
|
||||
- 'ee/spec/views/shared/_mirror_status.html.haml_spec.rb'
|
||||
|
|
|
@ -23,5 +23,6 @@ reporters:
|
|||
formatter:
|
||||
rubocop: # formatting
|
||||
require_paths: []
|
||||
plugins: []
|
||||
plugins:
|
||||
- solargraph-rspec
|
||||
max_files: 20000
|
||||
|
|
4
Gemfile
4
Gemfile
|
@ -478,7 +478,9 @@ gem 'warning', '~> 1.5.0', feature_category: :shared
|
|||
group :development do
|
||||
gem 'lefthook', '~> 1.11.0', require: false, feature_category: :tooling
|
||||
gem 'rubocop', feature_category: :tooling
|
||||
gem 'solargraph', '~> 0.47.2', require: false, feature_category: :shared
|
||||
|
||||
gem 'solargraph', '~> 0.54.0', require: false, feature_category: :shared
|
||||
gem 'solargraph-rspec', '~> 0.5.1', require: false, feature_category: :shared
|
||||
|
||||
gem 'letter_opener_web', '~> 3.0.0', feature_category: :shared
|
||||
gem 'lookbook', '~> 2.3', feature_category: :shared
|
||||
|
|
|
@ -138,7 +138,6 @@
|
|||
{"name":"dry-types","version":"1.7.1","platform":"ruby","checksum":"12165841145a18dd22151f143707b90c8093f71e5ae06ee0f2301f5321f8cdb8"},
|
||||
{"name":"dumb_delegator","version":"1.0.0","platform":"ruby","checksum":"ff5e411816d2d8ad8e260b269e712ae3839dddb0f9f8e18d3b1a3fe08f6d2e94"},
|
||||
{"name":"duo_api","version":"1.4.0","platform":"ruby","checksum":"06a6b406184e6e4b14af7389ac3990e667fb8509a1feba7de3af2f78d98c0877"},
|
||||
{"name":"e2mmap","version":"0.1.0","platform":"ruby","checksum":"45ee6bba2d97a7d91ee0885774261feee87e28c598355df31e93b56196ec0f59"},
|
||||
{"name":"ed25519","version":"1.3.0","platform":"java","checksum":"8e5d2f8a5325c7a463d61d1a48406ce54074c610f3dccd889e6532c9527a3894"},
|
||||
{"name":"ed25519","version":"1.3.0","platform":"ruby","checksum":"514a5584f84d39daac568a17ec93a4e7261e140c52c562ed8c382c18456e627d"},
|
||||
{"name":"elasticsearch","version":"7.17.11","platform":"ruby","checksum":"ed080f085d939f21d07f424ebcea95326e4bdb5f770a8f33aac699374f2ffc86"},
|
||||
|
@ -340,8 +339,8 @@
|
|||
{"name":"io-event","version":"1.9.0","platform":"ruby","checksum":"4c262b6610ad643a2be75e892135aca4fa67edc67d1944c0ae6b6e5dd73f4fc1"},
|
||||
{"name":"ipaddress","version":"0.8.3","platform":"ruby","checksum":"85640c4f9194c26937afc8c78e3074a8e7c97d5d1210358d1440f01034d006f5"},
|
||||
{"name":"jaeger-client","version":"1.1.0","platform":"ruby","checksum":"cb5e9b9bbee6ee8d6a82d03d947a5b04543d8c0a949c22e484254f18d8a458a8"},
|
||||
{"name":"jaro_winkler","version":"1.5.6","platform":"java","checksum":"3262aea433861fec3179184e9adc1933cca8bc15665957a143b56816f1a22f74"},
|
||||
{"name":"jaro_winkler","version":"1.5.6","platform":"ruby","checksum":"007db7805527ada1cc12f2547676181d63b0a504ec4dd7a9a2eb2424521ccd81"},
|
||||
{"name":"jaro_winkler","version":"1.6.0","platform":"java","checksum":"6cbb36eb4c2649834124d8b92957e577890e8157dd41be8252fde5b02b63b42b"},
|
||||
{"name":"jaro_winkler","version":"1.6.0","platform":"ruby","checksum":"8b081ab4ba7da5d16b438e62c4be58b87724bfeeb1527e62603f05ab0a2cc424"},
|
||||
{"name":"jira-ruby","version":"2.3.0","platform":"ruby","checksum":"abf26e6bff4a8ea40bae06f7df6276a5776905c63fb2070934823ca54f62eb62"},
|
||||
{"name":"jmespath","version":"1.6.2","platform":"ruby","checksum":"238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1"},
|
||||
{"name":"js_regex","version":"3.8.0","platform":"ruby","checksum":"7934bcdd5a0e6d5af4a520288fd4684a02a472ae55831d9178ccaf82356344b5"},
|
||||
|
@ -442,6 +441,7 @@
|
|||
{"name":"numerizer","version":"0.2.0","platform":"ruby","checksum":"e58076d5ee5370417b7e52d9cb25836d62acd1b8d9a194c308707986c1705d7b"},
|
||||
{"name":"oauth","version":"0.5.6","platform":"ruby","checksum":"4085fe28e0c5e2434135e00a6555294fd2a4ff96a98d1bdecdcd619fc6368dff"},
|
||||
{"name":"oauth2","version":"2.0.9","platform":"ruby","checksum":"b21f9defcf52dc1610e0dfab4c868342173dcd707fd15c777d9f4f04e153f7fb"},
|
||||
{"name":"observer","version":"0.1.2","platform":"ruby","checksum":"d8a3107131ba661138d748e7be3dbafc0d82e732fffba9fccb3d7829880950ac"},
|
||||
{"name":"octokit","version":"9.2.0","platform":"ruby","checksum":"4fa47ff35ce654127edf2c836ab9269bcc8829f5542dc1e86871f697ce7f4316"},
|
||||
{"name":"ohai","version":"18.1.18","platform":"ruby","checksum":"42ee8196945cb935fdeec93ba7aaee757d1d552f7b933912a1f25863c3cc1ff0"},
|
||||
{"name":"oj","version":"3.16.10","platform":"ruby","checksum":"7f26bed974e331e16d579b470b0865010757f6fe6ee30ea9b67df653fbe13d7c"},
|
||||
|
@ -601,7 +601,7 @@
|
|||
{"name":"rest-client","version":"2.1.0","platform":"x86-mingw32","checksum":"fb543caf36cb555c05c6186aeb1273c6a1b059896e4cfd394e7269b20c40ca01"},
|
||||
{"name":"rest-client","version":"2.1.0","platform":"x86-mswin32","checksum":"a35a3bb8d16ca39d110a946a2c805267f98ce07a0ae890e4512a45eadea47a6e"},
|
||||
{"name":"retriable","version":"3.1.2","platform":"ruby","checksum":"0a5a5d0ca4ba61a76fb31a17ab8f7f80281beb040c329d34dfc137a1398688e0"},
|
||||
{"name":"reverse_markdown","version":"1.4.0","platform":"ruby","checksum":"a3305da1509ac8388fa84a28745621113e121383402a2e8e9350ba649034e870"},
|
||||
{"name":"reverse_markdown","version":"2.1.1","platform":"ruby","checksum":"b2206466b682ac1177b6b8ec321d00a84fca02d096c5d676a7a0cc5838dc0701"},
|
||||
{"name":"rexml","version":"3.4.1","platform":"ruby","checksum":"c74527a9a0a04b4ec31dbe0dc4ed6004b960af943d8db42e539edde3a871abca"},
|
||||
{"name":"rinku","version":"2.0.0","platform":"ruby","checksum":"3e695aaf9f24baba3af45823b5c427b58a624582132f18482320e2737f9f8a85"},
|
||||
{"name":"rotp","version":"6.3.0","platform":"ruby","checksum":"75d40087e65ed0d8022c33055a6306c1c400d1c12261932533b5d6cbcd868854"},
|
||||
|
@ -698,7 +698,8 @@
|
|||
{"name":"slack-messenger","version":"2.3.6","platform":"ruby","checksum":"58581e587debcbb769336cc7ebe4eb6ae411947fccf347e967a17ac9813e66d8"},
|
||||
{"name":"snaky_hash","version":"2.0.0","platform":"ruby","checksum":"fe8b2e39e8ff69320f7812af73ea06401579e29ff1734a7009567391600687de"},
|
||||
{"name":"snowplow-tracker","version":"0.8.0","platform":"ruby","checksum":"7ba6f4f1443a829845fd28e63eda72d9d3d247f485310ddcccaebbc52b734a38"},
|
||||
{"name":"solargraph","version":"0.47.2","platform":"ruby","checksum":"87ca4b799b9155c2c31c15954c483e952fdacd800f52d6709b901dd447bcac6a"},
|
||||
{"name":"solargraph","version":"0.54.0","platform":"ruby","checksum":"3fd13f381e6428b3c593716ee6d3d5aa802ac647b8b13692d760ab7ac3e1fdc1"},
|
||||
{"name":"solargraph-rspec","version":"0.5.1","platform":"ruby","checksum":"0dfc9124f17b23e95c30acb82c1f799c865408a56b17099b2d6d7b23a76bface"},
|
||||
{"name":"sorbet-runtime","version":"0.5.11647","platform":"ruby","checksum":"64b65112f2e6a5323310ca9ac0d7d9a6be63aade5a62a6225fe066042ff4fdb6"},
|
||||
{"name":"spamcheck","version":"1.3.3","platform":"ruby","checksum":"3a29ba9dfcd59543d88054d38c657f79e0a6cf44d763df08ad47680abed50ec7"},
|
||||
{"name":"spring","version":"4.3.0","platform":"ruby","checksum":"0aaaf3bcce38e8528275854881d1922660d76cbd19a9a3af4a419d95b7fe7122"},
|
||||
|
@ -797,5 +798,6 @@
|
|||
{"name":"xpath","version":"3.2.0","platform":"ruby","checksum":"6dfda79d91bb3b949b947ecc5919f042ef2f399b904013eb3ef6d20dd3a4082e"},
|
||||
{"name":"yajl-ruby","version":"1.4.3","platform":"ruby","checksum":"8c974d9c11ae07b0a3b6d26efea8407269b02e4138118fbe3ef0d2ec9724d1d2"},
|
||||
{"name":"yard","version":"0.9.37","platform":"ruby","checksum":"a6e910399e78e613f80ba9add9ba7c394b1a935f083cccbef82903a3d2a26992"},
|
||||
{"name":"yard-solargraph","version":"0.1.0","platform":"ruby","checksum":"a19a4619c942181a618fb9458970a9d2534cf7fda69fc43949629a7948a5930e"},
|
||||
{"name":"zeitwerk","version":"2.6.7","platform":"ruby","checksum":"61767a6158480df290d0d2a3fd860d8ba3a28ba113837668ee94b657716a1409"}
|
||||
]
|
||||
|
|
29
Gemfile.lock
29
Gemfile.lock
|
@ -579,7 +579,6 @@ GEM
|
|||
zeitwerk (~> 2.6)
|
||||
dumb_delegator (1.0.0)
|
||||
duo_api (1.4.0)
|
||||
e2mmap (0.1.0)
|
||||
ed25519 (1.3.0)
|
||||
elasticsearch (7.17.11)
|
||||
elasticsearch-api (= 7.17.11)
|
||||
|
@ -1043,7 +1042,7 @@ GEM
|
|||
jaeger-client (1.1.0)
|
||||
opentracing (~> 0.3)
|
||||
thrift
|
||||
jaro_winkler (1.5.6)
|
||||
jaro_winkler (1.6.0)
|
||||
jira-ruby (2.3.0)
|
||||
activesupport
|
||||
atlassian-jwt
|
||||
|
@ -1232,6 +1231,7 @@ GEM
|
|||
rack (>= 1.2, < 4)
|
||||
snaky_hash (~> 2.0)
|
||||
version_gem (~> 1.1)
|
||||
observer (0.1.2)
|
||||
octokit (9.2.0)
|
||||
faraday (>= 1, < 3)
|
||||
sawyer (~> 0.9)
|
||||
|
@ -1609,7 +1609,7 @@ GEM
|
|||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
retriable (3.1.2)
|
||||
reverse_markdown (1.4.0)
|
||||
reverse_markdown (2.1.1)
|
||||
nokogiri
|
||||
rexml (3.4.1)
|
||||
rinku (2.0.0)
|
||||
|
@ -1788,21 +1788,27 @@ GEM
|
|||
hashie
|
||||
version_gem (~> 1.1)
|
||||
snowplow-tracker (0.8.0)
|
||||
solargraph (0.47.2)
|
||||
solargraph (0.54.0)
|
||||
backport (~> 1.2)
|
||||
benchmark
|
||||
bundler (>= 1.17.2)
|
||||
bundler (~> 2.0)
|
||||
diff-lcs (~> 1.4)
|
||||
e2mmap
|
||||
jaro_winkler (~> 1.5)
|
||||
jaro_winkler (~> 1.6)
|
||||
kramdown (~> 2.3)
|
||||
kramdown-parser-gfm (~> 1.1)
|
||||
logger (~> 1.6)
|
||||
observer (~> 0.1)
|
||||
ostruct (~> 0.6)
|
||||
parser (~> 3.0)
|
||||
reverse_markdown (>= 1.0.5, < 3)
|
||||
rubocop (>= 0.52)
|
||||
rbs (~> 3.3)
|
||||
reverse_markdown (>= 2.0, < 4)
|
||||
rubocop (~> 1.38)
|
||||
thor (~> 1.0)
|
||||
tilt (~> 2.0)
|
||||
yard (~> 0.9, >= 0.9.24)
|
||||
yard-solargraph (~> 0.1)
|
||||
solargraph-rspec (0.5.1)
|
||||
solargraph (~> 0.52, >= 0.52.0)
|
||||
sorbet-runtime (0.5.11647)
|
||||
spamcheck (1.3.3)
|
||||
grpc (~> 1.63)
|
||||
|
@ -2000,6 +2006,8 @@ GEM
|
|||
nokogiri (~> 1.8)
|
||||
yajl-ruby (1.4.3)
|
||||
yard (0.9.37)
|
||||
yard-solargraph (0.1.0)
|
||||
yard (~> 0.9)
|
||||
zeitwerk (2.6.7)
|
||||
|
||||
PLATFORMS
|
||||
|
@ -2331,7 +2339,8 @@ DEPENDENCIES
|
|||
simplecov-lcov (~> 0.8.0)
|
||||
slack-messenger (~> 2.3.5)
|
||||
snowplow-tracker (~> 0.8.0)
|
||||
solargraph (~> 0.47.2)
|
||||
solargraph (~> 0.54.0)
|
||||
solargraph-rspec (~> 0.5.1)
|
||||
spamcheck (~> 1.3.0)
|
||||
spring (~> 4.3.0)
|
||||
spring-commands-rspec (~> 1.0.4)
|
||||
|
|
|
@ -138,7 +138,6 @@
|
|||
{"name":"dry-types","version":"1.7.1","platform":"ruby","checksum":"12165841145a18dd22151f143707b90c8093f71e5ae06ee0f2301f5321f8cdb8"},
|
||||
{"name":"dumb_delegator","version":"1.0.0","platform":"ruby","checksum":"ff5e411816d2d8ad8e260b269e712ae3839dddb0f9f8e18d3b1a3fe08f6d2e94"},
|
||||
{"name":"duo_api","version":"1.4.0","platform":"ruby","checksum":"06a6b406184e6e4b14af7389ac3990e667fb8509a1feba7de3af2f78d98c0877"},
|
||||
{"name":"e2mmap","version":"0.1.0","platform":"ruby","checksum":"45ee6bba2d97a7d91ee0885774261feee87e28c598355df31e93b56196ec0f59"},
|
||||
{"name":"ed25519","version":"1.3.0","platform":"java","checksum":"8e5d2f8a5325c7a463d61d1a48406ce54074c610f3dccd889e6532c9527a3894"},
|
||||
{"name":"ed25519","version":"1.3.0","platform":"ruby","checksum":"514a5584f84d39daac568a17ec93a4e7261e140c52c562ed8c382c18456e627d"},
|
||||
{"name":"elasticsearch","version":"7.17.11","platform":"ruby","checksum":"ed080f085d939f21d07f424ebcea95326e4bdb5f770a8f33aac699374f2ffc86"},
|
||||
|
@ -343,8 +342,8 @@
|
|||
{"name":"ipaddress","version":"0.8.3","platform":"ruby","checksum":"85640c4f9194c26937afc8c78e3074a8e7c97d5d1210358d1440f01034d006f5"},
|
||||
{"name":"irb","version":"1.15.2","platform":"ruby","checksum":"222f32952e278da34b58ffe45e8634bf4afc2dc7aa9da23fed67e581aa50fdba"},
|
||||
{"name":"jaeger-client","version":"1.1.0","platform":"ruby","checksum":"cb5e9b9bbee6ee8d6a82d03d947a5b04543d8c0a949c22e484254f18d8a458a8"},
|
||||
{"name":"jaro_winkler","version":"1.5.6","platform":"java","checksum":"3262aea433861fec3179184e9adc1933cca8bc15665957a143b56816f1a22f74"},
|
||||
{"name":"jaro_winkler","version":"1.5.6","platform":"ruby","checksum":"007db7805527ada1cc12f2547676181d63b0a504ec4dd7a9a2eb2424521ccd81"},
|
||||
{"name":"jaro_winkler","version":"1.6.0","platform":"java","checksum":"6cbb36eb4c2649834124d8b92957e577890e8157dd41be8252fde5b02b63b42b"},
|
||||
{"name":"jaro_winkler","version":"1.6.0","platform":"ruby","checksum":"8b081ab4ba7da5d16b438e62c4be58b87724bfeeb1527e62603f05ab0a2cc424"},
|
||||
{"name":"jira-ruby","version":"2.3.0","platform":"ruby","checksum":"abf26e6bff4a8ea40bae06f7df6276a5776905c63fb2070934823ca54f62eb62"},
|
||||
{"name":"jmespath","version":"1.6.2","platform":"ruby","checksum":"238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1"},
|
||||
{"name":"js_regex","version":"3.8.0","platform":"ruby","checksum":"7934bcdd5a0e6d5af4a520288fd4684a02a472ae55831d9178ccaf82356344b5"},
|
||||
|
@ -445,6 +444,7 @@
|
|||
{"name":"numerizer","version":"0.2.0","platform":"ruby","checksum":"e58076d5ee5370417b7e52d9cb25836d62acd1b8d9a194c308707986c1705d7b"},
|
||||
{"name":"oauth","version":"0.5.6","platform":"ruby","checksum":"4085fe28e0c5e2434135e00a6555294fd2a4ff96a98d1bdecdcd619fc6368dff"},
|
||||
{"name":"oauth2","version":"2.0.9","platform":"ruby","checksum":"b21f9defcf52dc1610e0dfab4c868342173dcd707fd15c777d9f4f04e153f7fb"},
|
||||
{"name":"observer","version":"0.1.2","platform":"ruby","checksum":"d8a3107131ba661138d748e7be3dbafc0d82e732fffba9fccb3d7829880950ac"},
|
||||
{"name":"octokit","version":"9.2.0","platform":"ruby","checksum":"4fa47ff35ce654127edf2c836ab9269bcc8829f5542dc1e86871f697ce7f4316"},
|
||||
{"name":"ohai","version":"18.1.18","platform":"ruby","checksum":"42ee8196945cb935fdeec93ba7aaee757d1d552f7b933912a1f25863c3cc1ff0"},
|
||||
{"name":"oj","version":"3.16.10","platform":"ruby","checksum":"7f26bed974e331e16d579b470b0865010757f6fe6ee30ea9b67df653fbe13d7c"},
|
||||
|
@ -611,7 +611,7 @@
|
|||
{"name":"rest-client","version":"2.1.0","platform":"x86-mingw32","checksum":"fb543caf36cb555c05c6186aeb1273c6a1b059896e4cfd394e7269b20c40ca01"},
|
||||
{"name":"rest-client","version":"2.1.0","platform":"x86-mswin32","checksum":"a35a3bb8d16ca39d110a946a2c805267f98ce07a0ae890e4512a45eadea47a6e"},
|
||||
{"name":"retriable","version":"3.1.2","platform":"ruby","checksum":"0a5a5d0ca4ba61a76fb31a17ab8f7f80281beb040c329d34dfc137a1398688e0"},
|
||||
{"name":"reverse_markdown","version":"1.4.0","platform":"ruby","checksum":"a3305da1509ac8388fa84a28745621113e121383402a2e8e9350ba649034e870"},
|
||||
{"name":"reverse_markdown","version":"2.1.1","platform":"ruby","checksum":"b2206466b682ac1177b6b8ec321d00a84fca02d096c5d676a7a0cc5838dc0701"},
|
||||
{"name":"rexml","version":"3.4.1","platform":"ruby","checksum":"c74527a9a0a04b4ec31dbe0dc4ed6004b960af943d8db42e539edde3a871abca"},
|
||||
{"name":"rinku","version":"2.0.0","platform":"ruby","checksum":"3e695aaf9f24baba3af45823b5c427b58a624582132f18482320e2737f9f8a85"},
|
||||
{"name":"rotp","version":"6.3.0","platform":"ruby","checksum":"75d40087e65ed0d8022c33055a6306c1c400d1c12261932533b5d6cbcd868854"},
|
||||
|
@ -709,7 +709,8 @@
|
|||
{"name":"slack-messenger","version":"2.3.6","platform":"ruby","checksum":"58581e587debcbb769336cc7ebe4eb6ae411947fccf347e967a17ac9813e66d8"},
|
||||
{"name":"snaky_hash","version":"2.0.0","platform":"ruby","checksum":"fe8b2e39e8ff69320f7812af73ea06401579e29ff1734a7009567391600687de"},
|
||||
{"name":"snowplow-tracker","version":"0.8.0","platform":"ruby","checksum":"7ba6f4f1443a829845fd28e63eda72d9d3d247f485310ddcccaebbc52b734a38"},
|
||||
{"name":"solargraph","version":"0.47.2","platform":"ruby","checksum":"87ca4b799b9155c2c31c15954c483e952fdacd800f52d6709b901dd447bcac6a"},
|
||||
{"name":"solargraph","version":"0.54.0","platform":"ruby","checksum":"3fd13f381e6428b3c593716ee6d3d5aa802ac647b8b13692d760ab7ac3e1fdc1"},
|
||||
{"name":"solargraph-rspec","version":"0.5.1","platform":"ruby","checksum":"0dfc9124f17b23e95c30acb82c1f799c865408a56b17099b2d6d7b23a76bface"},
|
||||
{"name":"sorbet-runtime","version":"0.5.11647","platform":"ruby","checksum":"64b65112f2e6a5323310ca9ac0d7d9a6be63aade5a62a6225fe066042ff4fdb6"},
|
||||
{"name":"spamcheck","version":"1.3.3","platform":"ruby","checksum":"3a29ba9dfcd59543d88054d38c657f79e0a6cf44d763df08ad47680abed50ec7"},
|
||||
{"name":"spring","version":"4.3.0","platform":"ruby","checksum":"0aaaf3bcce38e8528275854881d1922660d76cbd19a9a3af4a419d95b7fe7122"},
|
||||
|
@ -810,5 +811,6 @@
|
|||
{"name":"xpath","version":"3.2.0","platform":"ruby","checksum":"6dfda79d91bb3b949b947ecc5919f042ef2f399b904013eb3ef6d20dd3a4082e"},
|
||||
{"name":"yajl-ruby","version":"1.4.3","platform":"ruby","checksum":"8c974d9c11ae07b0a3b6d26efea8407269b02e4138118fbe3ef0d2ec9724d1d2"},
|
||||
{"name":"yard","version":"0.9.37","platform":"ruby","checksum":"a6e910399e78e613f80ba9add9ba7c394b1a935f083cccbef82903a3d2a26992"},
|
||||
{"name":"yard-solargraph","version":"0.1.0","platform":"ruby","checksum":"a19a4619c942181a618fb9458970a9d2534cf7fda69fc43949629a7948a5930e"},
|
||||
{"name":"zeitwerk","version":"2.6.7","platform":"ruby","checksum":"61767a6158480df290d0d2a3fd860d8ba3a28ba113837668ee94b657716a1409"}
|
||||
]
|
||||
|
|
|
@ -591,7 +591,6 @@ GEM
|
|||
zeitwerk (~> 2.6)
|
||||
dumb_delegator (1.0.0)
|
||||
duo_api (1.4.0)
|
||||
e2mmap (0.1.0)
|
||||
ed25519 (1.3.0)
|
||||
elasticsearch (7.17.11)
|
||||
elasticsearch-api (= 7.17.11)
|
||||
|
@ -1060,7 +1059,7 @@ GEM
|
|||
jaeger-client (1.1.0)
|
||||
opentracing (~> 0.3)
|
||||
thrift
|
||||
jaro_winkler (1.5.6)
|
||||
jaro_winkler (1.6.0)
|
||||
jira-ruby (2.3.0)
|
||||
activesupport
|
||||
atlassian-jwt
|
||||
|
@ -1249,6 +1248,7 @@ GEM
|
|||
rack (>= 1.2, < 4)
|
||||
snaky_hash (~> 2.0)
|
||||
version_gem (~> 1.1)
|
||||
observer (0.1.2)
|
||||
octokit (9.2.0)
|
||||
faraday (>= 1, < 3)
|
||||
sawyer (~> 0.9)
|
||||
|
@ -1641,7 +1641,7 @@ GEM
|
|||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
retriable (3.1.2)
|
||||
reverse_markdown (1.4.0)
|
||||
reverse_markdown (2.1.1)
|
||||
nokogiri
|
||||
rexml (3.4.1)
|
||||
rinku (2.0.0)
|
||||
|
@ -1821,21 +1821,27 @@ GEM
|
|||
hashie
|
||||
version_gem (~> 1.1)
|
||||
snowplow-tracker (0.8.0)
|
||||
solargraph (0.47.2)
|
||||
solargraph (0.54.0)
|
||||
backport (~> 1.2)
|
||||
benchmark
|
||||
bundler (>= 1.17.2)
|
||||
bundler (~> 2.0)
|
||||
diff-lcs (~> 1.4)
|
||||
e2mmap
|
||||
jaro_winkler (~> 1.5)
|
||||
jaro_winkler (~> 1.6)
|
||||
kramdown (~> 2.3)
|
||||
kramdown-parser-gfm (~> 1.1)
|
||||
logger (~> 1.6)
|
||||
observer (~> 0.1)
|
||||
ostruct (~> 0.6)
|
||||
parser (~> 3.0)
|
||||
reverse_markdown (>= 1.0.5, < 3)
|
||||
rubocop (>= 0.52)
|
||||
rbs (~> 3.3)
|
||||
reverse_markdown (>= 2.0, < 4)
|
||||
rubocop (~> 1.38)
|
||||
thor (~> 1.0)
|
||||
tilt (~> 2.0)
|
||||
yard (~> 0.9, >= 0.9.24)
|
||||
yard-solargraph (~> 0.1)
|
||||
solargraph-rspec (0.5.1)
|
||||
solargraph (~> 0.52, >= 0.52.0)
|
||||
sorbet-runtime (0.5.11647)
|
||||
spamcheck (1.3.3)
|
||||
grpc (~> 1.63)
|
||||
|
@ -2034,6 +2040,8 @@ GEM
|
|||
nokogiri (~> 1.8)
|
||||
yajl-ruby (1.4.3)
|
||||
yard (0.9.37)
|
||||
yard-solargraph (0.1.0)
|
||||
yard (~> 0.9)
|
||||
zeitwerk (2.6.7)
|
||||
|
||||
PLATFORMS
|
||||
|
@ -2365,7 +2373,8 @@ DEPENDENCIES
|
|||
simplecov-lcov (~> 0.8.0)
|
||||
slack-messenger (~> 2.3.5)
|
||||
snowplow-tracker (~> 0.8.0)
|
||||
solargraph (~> 0.47.2)
|
||||
solargraph (~> 0.54.0)
|
||||
solargraph-rspec (~> 0.5.1)
|
||||
spamcheck (~> 1.3.0)
|
||||
spring (~> 4.3.0)
|
||||
spring-commands-rspec (~> 1.0.4)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
<script>
|
||||
import { GlIcon, GlTooltipDirective } from '@gitlab/ui';
|
||||
import { findAwardEmojiWidget } from '~/work_items/utils';
|
||||
import { i18n } from '../constants';
|
||||
import { findAwardEmojiWidget, findDevelopmentWidget } from '~/work_items/utils';
|
||||
|
||||
export default {
|
||||
i18n,
|
||||
components: {
|
||||
GlIcon,
|
||||
},
|
||||
|
@ -18,6 +16,12 @@ export default {
|
|||
},
|
||||
},
|
||||
computed: {
|
||||
closingMergeRequestsCount() {
|
||||
return (
|
||||
this.issue.mergeRequestsCount ||
|
||||
findDevelopmentWidget(this.issue)?.closingMergeRequests.count
|
||||
);
|
||||
},
|
||||
downvotes() {
|
||||
return this.issue.downvotes || findAwardEmojiWidget(this.issue)?.downvotes;
|
||||
},
|
||||
|
@ -34,7 +38,7 @@ export default {
|
|||
v-if="upvotes"
|
||||
v-gl-tooltip
|
||||
class="gl-hidden sm:gl-block"
|
||||
:title="$options.i18n.upvotes"
|
||||
:title="__('Upvotes')"
|
||||
data-testid="issuable-upvotes"
|
||||
>
|
||||
<gl-icon name="thumb-up" />
|
||||
|
@ -44,21 +48,21 @@ export default {
|
|||
v-if="downvotes"
|
||||
v-gl-tooltip
|
||||
class="gl-hidden sm:gl-block"
|
||||
:title="$options.i18n.downvotes"
|
||||
:title="__('Downvotes')"
|
||||
data-testid="issuable-downvotes"
|
||||
>
|
||||
<gl-icon name="thumb-down" />
|
||||
{{ downvotes }}
|
||||
</li>
|
||||
<li
|
||||
v-if="issue.mergeRequestsCount"
|
||||
v-if="closingMergeRequestsCount"
|
||||
v-gl-tooltip
|
||||
class="gl-hidden sm:gl-block"
|
||||
:title="__('Related merge requests')"
|
||||
data-testid="merge-requests"
|
||||
>
|
||||
<gl-icon name="merge-request" />
|
||||
{{ issue.mergeRequestsCount }}
|
||||
{{ closingMergeRequestsCount }}
|
||||
</li>
|
||||
<slot></slot>
|
||||
</ul>
|
||||
|
|
|
@ -4,7 +4,11 @@ import { STATUS_CLOSED } from '~/issues/constants';
|
|||
import { humanTimeframe, isInPast, localeDateFormat, newDate } from '~/lib/utils/datetime_utility';
|
||||
import { __ } from '~/locale';
|
||||
import { STATE_CLOSED } from '~/work_items/constants';
|
||||
import { findMilestoneWidget, findStartAndDueDateWidget } from '~/work_items/utils';
|
||||
import {
|
||||
findMilestoneWidget,
|
||||
findStartAndDueDateWidget,
|
||||
findTimeTrackingWidget,
|
||||
} from '~/work_items/utils';
|
||||
import IssuableMilestone from '~/vue_shared/issuable/list/components/issuable_milestone.vue';
|
||||
import WorkItemAttribute from '~/vue_shared/components/work_item_attribute.vue';
|
||||
|
||||
|
@ -55,7 +59,11 @@ export default {
|
|||
return findStartAndDueDateWidget(this.issue)?.startDate;
|
||||
},
|
||||
timeEstimate() {
|
||||
return this.issue.humanTimeEstimate || this.issue.timeStats?.humanTimeEstimate;
|
||||
return (
|
||||
this.issue.humanTimeEstimate ||
|
||||
this.issue.timeStats?.humanTimeEstimate ||
|
||||
findTimeTrackingWidget(this.issue)?.humanReadableAttributes.timeEstimate
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -105,13 +105,11 @@ export const i18n = {
|
|||
closedMoved: CLOSED_MOVED,
|
||||
confidentialNo: __('No'),
|
||||
confidentialYes: __('Yes'),
|
||||
downvotes: __('Downvotes'),
|
||||
errorFetchingCounts: __('An error occurred while getting issue counts'),
|
||||
errorFetchingIssues: __('An error occurred while loading issues'),
|
||||
issueRepositioningMessage: __(
|
||||
'Issues are being rebalanced at the moment, so manual reordering is disabled.',
|
||||
),
|
||||
upvotes: __('Upvotes'),
|
||||
titles: __('Titles'),
|
||||
descriptions: __('Descriptions'),
|
||||
subscribedExplicitly: __('Explicitly subscribed'),
|
||||
|
|
|
@ -239,7 +239,7 @@ export default {
|
|||
</p>
|
||||
</div>
|
||||
<div class="gl-flex gl-items-center gl-gap-3" data-testid="crud-actions">
|
||||
<slot name="actions" :show-form="showForm"></slot>
|
||||
<slot name="actions" :show-form="showForm" :is-form-visible="isFormVisible"></slot>
|
||||
<gl-button
|
||||
v-if="toggleText && !isFormUsedAndVisible"
|
||||
size="small"
|
||||
|
|
|
@ -8,13 +8,13 @@ export default {
|
|||
};
|
||||
|
||||
const data = () => ({
|
||||
selected: ['option', 'option-two'],
|
||||
checked: ['option', 'option-two'],
|
||||
});
|
||||
|
||||
const Template = () => ({
|
||||
components: { MultipleChoiceSelector, MultipleChoiceSelectorItem, GlBadge, GlIcon },
|
||||
data,
|
||||
template: `<multiple-choice-selector :selected="selected">
|
||||
template: `<multiple-choice-selector v-model="checked">
|
||||
<multiple-choice-selector-item value="option" title="Option name" description="This is a description for this option. Descriptions are optional." :disabled="false"></multiple-choice-selector-item>
|
||||
<multiple-choice-selector-item value="option-two" title="Option name" description="This is a description for this option. Descriptions are optional." :disabled="false"></multiple-choice-selector-item>
|
||||
<multiple-choice-selector-item value="option-3" description="This is a description for this option. Descriptions are optional." :disabled="false">
|
||||
|
|
|
@ -2,25 +2,27 @@
|
|||
import { GlFormCheckboxGroup } from '@gitlab/ui';
|
||||
|
||||
export default {
|
||||
name: 'MultipleChoiceSelector',
|
||||
components: { GlFormCheckboxGroup },
|
||||
props: {
|
||||
selected: {
|
||||
type: Array,
|
||||
required: true,
|
||||
},
|
||||
model: {
|
||||
prop: 'checked',
|
||||
event: 'input',
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedOptions: this.selected,
|
||||
};
|
||||
props: {
|
||||
checked: {
|
||||
type: Array,
|
||||
required: false,
|
||||
default: () => [],
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<gl-form-checkbox-group
|
||||
v-model="selectedOptions"
|
||||
:checked="checked"
|
||||
class="multiple-choice-selector gl-border gl-block gl-rounded-base"
|
||||
@input="$emit('input', $event)"
|
||||
>
|
||||
<slot></slot>
|
||||
</gl-form-checkbox-group>
|
||||
|
|
|
@ -403,6 +403,7 @@ export default {
|
|||
<gl-icon
|
||||
v-if="issuable.hidden"
|
||||
v-gl-tooltip
|
||||
class="gl-mr-2"
|
||||
name="spam"
|
||||
:title="hiddenIssuableTitle"
|
||||
:aria-label="__('Hidden')"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
fragment BaseWorkItemWidgets on WorkItemWidget {
|
||||
... on WorkItemWidgetAssignees {
|
||||
type
|
||||
assignees {
|
||||
nodes {
|
||||
id
|
||||
|
@ -12,8 +11,16 @@ fragment BaseWorkItemWidgets on WorkItemWidget {
|
|||
}
|
||||
}
|
||||
}
|
||||
... on WorkItemWidgetAwardEmoji {
|
||||
upvotes
|
||||
downvotes
|
||||
}
|
||||
... on WorkItemWidgetDevelopment {
|
||||
closingMergeRequests {
|
||||
count
|
||||
}
|
||||
}
|
||||
... on WorkItemWidgetLabels {
|
||||
type
|
||||
allowsScopedLabels
|
||||
labels {
|
||||
nodes {
|
||||
|
@ -25,7 +32,6 @@ fragment BaseWorkItemWidgets on WorkItemWidget {
|
|||
}
|
||||
}
|
||||
... on WorkItemWidgetMilestone {
|
||||
type
|
||||
milestone {
|
||||
id
|
||||
dueDate
|
||||
|
@ -35,13 +41,12 @@ fragment BaseWorkItemWidgets on WorkItemWidget {
|
|||
}
|
||||
}
|
||||
... on WorkItemWidgetStartAndDueDate {
|
||||
type
|
||||
dueDate
|
||||
startDate
|
||||
}
|
||||
... on WorkItemWidgetAwardEmoji {
|
||||
type
|
||||
upvotes
|
||||
downvotes
|
||||
... on WorkItemWidgetTimeTracking {
|
||||
humanReadableAttributes {
|
||||
timeEstimate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,6 +75,7 @@ query getWorkItems(
|
|||
}
|
||||
nodes {
|
||||
id
|
||||
iid
|
||||
author {
|
||||
id
|
||||
avatarUrl
|
||||
|
@ -84,10 +85,9 @@ query getWorkItems(
|
|||
webPath
|
||||
}
|
||||
closedAt
|
||||
userDiscussionsCount
|
||||
confidential
|
||||
createdAt
|
||||
iid
|
||||
hidden
|
||||
namespace {
|
||||
id
|
||||
fullPath
|
||||
|
@ -96,6 +96,7 @@ query getWorkItems(
|
|||
state
|
||||
title
|
||||
updatedAt
|
||||
userDiscussionsCount
|
||||
webUrl
|
||||
widgets {
|
||||
type
|
||||
|
@ -146,6 +147,7 @@ query getWorkItems(
|
|||
}
|
||||
nodes {
|
||||
id
|
||||
iid
|
||||
author {
|
||||
id
|
||||
avatarUrl
|
||||
|
@ -155,10 +157,9 @@ query getWorkItems(
|
|||
webPath
|
||||
}
|
||||
closedAt
|
||||
userDiscussionsCount
|
||||
confidential
|
||||
createdAt
|
||||
iid
|
||||
hidden
|
||||
namespace {
|
||||
id
|
||||
fullPath
|
||||
|
@ -167,6 +168,7 @@ query getWorkItems(
|
|||
state
|
||||
title
|
||||
updatedAt
|
||||
userDiscussionsCount
|
||||
webUrl
|
||||
widgets {
|
||||
type
|
||||
|
|
|
@ -31,6 +31,7 @@ import {
|
|||
DEFAULT_PAGE_SIZE_CHILD_ITEMS,
|
||||
STATE_CLOSED,
|
||||
NAME_TO_ENUM_MAP,
|
||||
WIDGET_TYPE_DEVELOPMENT,
|
||||
} from './constants';
|
||||
|
||||
export const isAssigneesWidget = (widget) => widget.type === WIDGET_TYPE_ASSIGNEES;
|
||||
|
@ -51,6 +52,9 @@ export const findCurrentUserTodosWidget = (workItem) =>
|
|||
export const findDescriptionWidget = (workItem) =>
|
||||
workItem?.widgets?.find((widget) => widget.type === WIDGET_TYPE_DESCRIPTION);
|
||||
|
||||
export const findDevelopmentWidget = (workItem) =>
|
||||
workItem?.widgets?.find((widget) => widget.type === WIDGET_TYPE_DEVELOPMENT);
|
||||
|
||||
export const findDesignsWidget = (workItem) =>
|
||||
workItem?.widgets?.find((widget) => widget.type === WIDGET_TYPE_DESIGNS);
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ module Admin
|
|||
feature_category :pages, [:lets_encrypt_terms_of_service]
|
||||
feature_category :observability, [:reset_error_tracking_access_token]
|
||||
feature_category :global_search, [:search]
|
||||
feature_category :environment_management, [:usage_quotas]
|
||||
|
||||
VALID_SETTING_PANELS = %w[general repository
|
||||
ci_cd reporting metrics_and_profiling
|
||||
|
|
|
@ -46,6 +46,10 @@ module Resolvers
|
|||
Unauthenticated requests always return all public groups. The `owned_only` argument takes precedence.
|
||||
DESC
|
||||
|
||||
argument :marked_for_deletion_on, ::Types::DateType,
|
||||
required: false,
|
||||
description: 'Date when the group was marked for deletion.'
|
||||
|
||||
private
|
||||
|
||||
def resolve_groups(parent_path: nil, **args)
|
||||
|
|
|
@ -7,8 +7,4 @@ module WikiPageVersionHelper
|
|||
user = wiki_page_version.author
|
||||
user.nil? ? "mailto:#{wiki_page_version.author_email}" : Gitlab::UrlBuilder.build(user)
|
||||
end
|
||||
|
||||
def wiki_page_version_author_avatar(wiki_page_version)
|
||||
image_tag(avatar_icon_for_email(wiki_page_version.author_email, 24), class: "avatar s24 float-none !gl-mr-0")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,26 +5,26 @@ module Namespaces
|
|||
extend ActiveSupport::Concern
|
||||
|
||||
def adjourned_deletion?
|
||||
return false unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
return false unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
|
||||
adjourned_deletion_configured?
|
||||
end
|
||||
|
||||
def adjourned_deletion_configured?
|
||||
return false unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
return false unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
return false if try(:personal?)
|
||||
|
||||
deletion_adjourned_period > 0
|
||||
end
|
||||
|
||||
def marked_for_deletion?
|
||||
return false unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
return false unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
|
||||
marked_for_deletion_on.present?
|
||||
end
|
||||
|
||||
def self_or_ancestor_marked_for_deletion
|
||||
return unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
return unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
return self if marked_for_deletion?
|
||||
|
||||
ancestors(hierarchy_order: :asc).joins(:deletion_schedule).first
|
||||
|
|
|
@ -45,7 +45,7 @@ module Groups # rubocop:disable Gitlab/BoundedContexts -- existing top-level mod
|
|||
end
|
||||
|
||||
def feature_downtiered?
|
||||
Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -49,7 +49,7 @@ module Projects
|
|||
end
|
||||
|
||||
def feature_downtiered?
|
||||
Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
- return unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :wip)
|
||||
- return unless Feature.enabled?(:downtier_delayed_deletion, :instance, type: :gitlab_com_derisk)
|
||||
|
||||
#js-admin-deletion-protection-settings{ data: deletion_protection_data }
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
= render 'admin/usage_quotas/index'
|
|
@ -0,0 +1,7 @@
|
|||
- content_for :usage_quotas_subtitle do
|
||||
= s_('UsageQuota|Usage of shared resources across the projects in your instance')
|
||||
|
||||
- content_for :usage_quotas_tabs do
|
||||
#js-pipeline-usage-app
|
||||
|
||||
= render 'shared/usage_quotas/index'
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
name: pipeline_subscriptions_vue
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/139405
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/434831
|
||||
milestone: '16.7'
|
||||
type: development
|
||||
group: group::pipeline execution
|
||||
default_enabled: false
|
|
@ -2,8 +2,8 @@
|
|||
name: downtier_delayed_deletion
|
||||
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/526403
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/185850
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/536634
|
||||
milestone: '17.11'
|
||||
group: group::authorization
|
||||
type: wip
|
||||
type: gitlab_com_derisk
|
||||
default_enabled: false
|
|
@ -168,7 +168,7 @@ namespace :admin do
|
|||
put :reset_health_check_token
|
||||
put :reset_error_tracking_access_token
|
||||
put :clear_repository_check_states
|
||||
match :general, :integrations, :repository, :ci_cd, :reporting, :metrics_and_profiling, :network, :preferences, :search, via: [:get, :patch]
|
||||
match :general, :integrations, :repository, :ci_cd, :reporting, :metrics_and_profiling, :network, :preferences, :search, :usage_quotas, via: [:get, :patch]
|
||||
get :lets_encrypt_terms_of_service
|
||||
get :slack_app_manifest_download, format: :json
|
||||
get :slack_app_manifest_share
|
||||
|
|
|
@ -1055,17 +1055,17 @@ paths:
|
|||
description: Only include top-level groups
|
||||
type: boolean
|
||||
required: false
|
||||
- in: query
|
||||
name: marked_for_deletion_on
|
||||
description: Return groups that are marked for deletion on this date
|
||||
type: string
|
||||
format: date
|
||||
required: false
|
||||
- in: query
|
||||
name: repository_storage
|
||||
description: Filter by repository storage used by the group
|
||||
type: string
|
||||
required: false
|
||||
- in: query
|
||||
name: marked_for_deletion_on
|
||||
description: Date when the group was marked for deletion
|
||||
type: string
|
||||
format: date
|
||||
required: false
|
||||
- in: query
|
||||
name: page
|
||||
description: Current page number
|
||||
|
@ -1794,17 +1794,17 @@ paths:
|
|||
description: Only include top-level groups
|
||||
type: boolean
|
||||
required: false
|
||||
- in: query
|
||||
name: marked_for_deletion_on
|
||||
description: Return groups that are marked for deletion on this date
|
||||
type: string
|
||||
format: date
|
||||
required: false
|
||||
- in: query
|
||||
name: repository_storage
|
||||
description: Filter by repository storage used by the group
|
||||
type: string
|
||||
required: false
|
||||
- in: query
|
||||
name: marked_for_deletion_on
|
||||
description: Date when the group was marked for deletion
|
||||
type: string
|
||||
format: date
|
||||
required: false
|
||||
- in: query
|
||||
name: page
|
||||
description: Current page number
|
||||
|
@ -1931,17 +1931,17 @@ paths:
|
|||
description: Only include top-level groups
|
||||
type: boolean
|
||||
required: false
|
||||
- in: query
|
||||
name: marked_for_deletion_on
|
||||
description: Return groups that are marked for deletion on this date
|
||||
type: string
|
||||
format: date
|
||||
required: false
|
||||
- in: query
|
||||
name: repository_storage
|
||||
description: Filter by repository storage used by the group
|
||||
type: string
|
||||
required: false
|
||||
- in: query
|
||||
name: marked_for_deletion_on
|
||||
description: Date when the group was marked for deletion
|
||||
type: string
|
||||
format: date
|
||||
required: false
|
||||
- in: query
|
||||
name: page
|
||||
description: Current page number
|
||||
|
|
|
@ -32,6 +32,7 @@ module API
|
|||
optional :sort, type: String, values: %w[asc desc], default: 'asc', desc: 'Sort by asc (ascending) or desc (descending)'
|
||||
optional :min_access_level, type: Integer, values: Gitlab::Access.all_values, desc: 'Minimum access level of authenticated user'
|
||||
optional :top_level_only, type: Boolean, desc: 'Only include top-level groups'
|
||||
optional :marked_for_deletion_on, type: Date, desc: 'Return groups that are marked for deletion on this date'
|
||||
use :optional_group_list_params_ee
|
||||
use :pagination
|
||||
end
|
||||
|
@ -60,7 +61,7 @@ module API
|
|||
[:all_available,
|
||||
:custom_attributes,
|
||||
:owned, :min_access_level,
|
||||
:include_parent_descendants, :search, :visibility, :archived]
|
||||
:include_parent_descendants, :search, :visibility, :archived, :marked_for_deletion_on]
|
||||
end
|
||||
|
||||
# This is a separate method so that EE can extend its behaviour, without
|
||||
|
|
|
@ -3681,9 +3681,6 @@ msgstr ""
|
|||
msgid "Add new key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add new pipeline subscription"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add new pipeline trigger token"
|
||||
msgstr ""
|
||||
|
||||
|
@ -20855,9 +20852,6 @@ msgstr ""
|
|||
msgid "Delete source branch when merge request is accepted."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete subscription"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
|
@ -30802,6 +30796,9 @@ msgstr ""
|
|||
msgid "Horizontal rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hosted runner usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hostname"
|
||||
msgstr ""
|
||||
|
||||
|
@ -40370,9 +40367,6 @@ msgstr ""
|
|||
msgid "No project selected"
|
||||
msgstr ""
|
||||
|
||||
msgid "No project subscribes to the pipelines in this project."
|
||||
msgstr ""
|
||||
|
||||
msgid "No projects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -44556,7 +44550,7 @@ msgstr ""
|
|||
msgid "PipelineSubscriptions|Subscription for this project will be removed. Do you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
msgid "PipelineSubscriptions|Subscription successfully added."
|
||||
msgid "PipelineSubscriptions|Subscription successfully created."
|
||||
msgstr ""
|
||||
|
||||
msgid "PipelineSubscriptions|Subscription successfully deleted."
|
||||
|
@ -58932,9 +58926,6 @@ msgstr ""
|
|||
msgid "Subscribed to notifications."
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribed to this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribes to notifications."
|
||||
msgstr ""
|
||||
|
||||
|
@ -58950,9 +58941,6 @@ msgstr ""
|
|||
msgid "Subscription deletion failed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscription for %{subscription} will be removed. Do you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscription for this instance cannot be synchronized. Contact GitLab customer support to obtain a license."
|
||||
msgstr ""
|
||||
|
||||
|
@ -61990,9 +61978,6 @@ msgstr ""
|
|||
msgid "This project is mirrored from %{link}."
|
||||
msgstr ""
|
||||
|
||||
msgid "This project is not subscribed to any project pipelines."
|
||||
msgstr ""
|
||||
|
||||
msgid "This project is pending deletion, and will be deleted on %{date}. Repository and other project resources are read-only."
|
||||
msgstr ""
|
||||
|
||||
|
@ -64611,12 +64596,18 @@ msgstr ""
|
|||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage Quotas"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage breakdown"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage this month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage trends"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64695,9 +64686,18 @@ msgstr ""
|
|||
msgid "UsageQuota|Excess storage usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Filter by runner"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Filter chart by year"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Filter charts by year"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Filter list by month"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Filter projects data by month"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64713,6 +64713,12 @@ msgstr ""
|
|||
msgid "UsageQuota|Group settings %{gt} Usage quotas"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Hosted runner duration"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Hosted runner pipeline duration by month"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|How are limits applied?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64746,6 +64752,9 @@ msgstr ""
|
|||
msgid "UsageQuota|Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Namespace"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Namespace entities"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64800,12 +64809,18 @@ msgstr ""
|
|||
msgid "UsageQuota|Shared bits of code and text."
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Something went wrong while fetching compute usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Something went wrong while fetching pipeline statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Something went wrong while fetching project storage statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Something went wrong while fetching runner filters"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Something went wrong while loading Usage Quotas Tabs."
|
||||
msgstr ""
|
||||
|
||||
|
@ -64878,6 +64893,9 @@ msgstr ""
|
|||
msgid "UsageQuota|Usage by month"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Usage by namespace"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Usage by project"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64890,6 +64908,9 @@ msgstr ""
|
|||
msgid "UsageQuota|Usage of resources across your projects"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|Usage of shared resources across the projects in your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "UsageQuota|User settings %{gt} Usage quotas"
|
||||
msgstr ""
|
||||
|
||||
|
@ -72042,6 +72063,9 @@ msgstr ""
|
|||
msgid "milestone should belong either to a project or a group."
|
||||
msgstr ""
|
||||
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
msgid "missing"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
require 'parallel'
|
||||
require 'rainbow'
|
||||
|
||||
UNUSED_METHODS = 57
|
||||
UNUSED_METHODS = 56
|
||||
|
||||
print_output = %w[true 1].include? ENV["REPORT_ALL_UNUSED_METHODS"]
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { GlIcon } from '@gitlab/ui';
|
||||
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
|
||||
import IssueCardStatistics from '~/issues/list/components/issue_card_statistics.vue';
|
||||
import { WIDGET_TYPE_AWARD_EMOJI, WIDGET_TYPE_DEVELOPMENT } from '~/work_items/constants';
|
||||
|
||||
describe('IssueCardStatistics CE component', () => {
|
||||
let wrapper;
|
||||
|
@ -59,14 +60,18 @@ describe('IssueCardStatistics CE component', () => {
|
|||
});
|
||||
|
||||
describe('with work item object', () => {
|
||||
it('renders upvotes and downvotes', () => {
|
||||
it('renders upvotes, downvotes, and closing merge requests', () => {
|
||||
const issue = {
|
||||
widgets: [{ type: 'AWARD_EMOJI', downvotes: '4', upvotes: '8' }],
|
||||
widgets: [
|
||||
{ type: WIDGET_TYPE_AWARD_EMOJI, downvotes: '4', upvotes: '8' },
|
||||
{ type: WIDGET_TYPE_DEVELOPMENT, closingMergeRequests: { count: 3 } },
|
||||
],
|
||||
};
|
||||
mountComponent(issue);
|
||||
|
||||
expect(findDownvotes().text()).toBe('4');
|
||||
expect(findUpvotes().text()).toBe('8');
|
||||
expect(findMergeRequests().text()).toBe('3');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,18 +1,25 @@
|
|||
import { GlIcon } from '@gitlab/ui';
|
||||
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
|
||||
import { useFakeDate } from 'helpers/fake_date';
|
||||
import { STATUS_CLOSED } from '~/issues/constants';
|
||||
import IssueCardTimeInfo from '~/issues/list/components/issue_card_time_info.vue';
|
||||
import IssuableMilestone from '~/vue_shared/issuable/list/components/issuable_milestone.vue';
|
||||
import { WIDGET_TYPE_MILESTONE, WIDGET_TYPE_START_AND_DUE_DATE } from '~/work_items/constants';
|
||||
import {
|
||||
WIDGET_TYPE_MILESTONE,
|
||||
WIDGET_TYPE_START_AND_DUE_DATE,
|
||||
WIDGET_TYPE_TIME_TRACKING,
|
||||
} from '~/work_items/constants';
|
||||
import WorkItemAttribute from '~/vue_shared/components/work_item_attribute.vue';
|
||||
|
||||
describe('CE IssueCardTimeInfo component', () => {
|
||||
useFakeDate(2020, 11, 11); // 2020 Dec 11
|
||||
|
||||
let wrapper;
|
||||
|
||||
const issueObject = ({ milestoneStartDate, milestoneDueDate, dueDate, state } = {}) => ({
|
||||
const issueObject = ({
|
||||
milestoneStartDate,
|
||||
milestoneDueDate,
|
||||
dueDate,
|
||||
state,
|
||||
timeEstimate,
|
||||
} = {}) => ({
|
||||
milestone: {
|
||||
dueDate: milestoneDueDate,
|
||||
startDate: milestoneStartDate,
|
||||
|
@ -20,7 +27,7 @@ describe('CE IssueCardTimeInfo component', () => {
|
|||
webPath: '/milestone/webPath',
|
||||
},
|
||||
dueDate,
|
||||
humanTimeEstimate: '1w',
|
||||
humanTimeEstimate: timeEstimate,
|
||||
state,
|
||||
});
|
||||
|
||||
|
@ -30,6 +37,7 @@ describe('CE IssueCardTimeInfo component', () => {
|
|||
startDate,
|
||||
dueDate,
|
||||
state,
|
||||
timeEstimate,
|
||||
} = {}) => ({
|
||||
state,
|
||||
widgets: [
|
||||
|
@ -47,6 +55,12 @@ describe('CE IssueCardTimeInfo component', () => {
|
|||
dueDate,
|
||||
startDate,
|
||||
},
|
||||
{
|
||||
type: WIDGET_TYPE_TIME_TRACKING,
|
||||
humanReadableAttributes: {
|
||||
timeEstimate,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
|
@ -93,7 +107,7 @@ describe('CE IssueCardTimeInfo component', () => {
|
|||
describe('when in the past', () => {
|
||||
describe('when issue is open', () => {
|
||||
it('renders in red with overdue icon', () => {
|
||||
wrapper = mountComponent({ issue: object({ dueDate: '2020-10-10' }) });
|
||||
wrapper = mountComponent({ issue: object({ dueDate: '2020-01-01' }) });
|
||||
expect(findDueDateIcon().props()).toMatchObject({
|
||||
variant: 'danger',
|
||||
name: 'calendar-overdue',
|
||||
|
@ -104,7 +118,7 @@ describe('CE IssueCardTimeInfo component', () => {
|
|||
describe('when issue is closed', () => {
|
||||
it('does not render in red with overdue icon', () => {
|
||||
wrapper = mountComponent({
|
||||
issue: object({ dueDate: '2020-10-10', state: STATUS_CLOSED }),
|
||||
issue: object({ dueDate: '2020-01-01', state: STATUS_CLOSED }),
|
||||
});
|
||||
|
||||
expect(findDueDateIcon().props()).toMatchObject({
|
||||
|
@ -137,14 +151,16 @@ describe('CE IssueCardTimeInfo component', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('renders time estimate', () => {
|
||||
wrapper = mountComponent();
|
||||
const timeEstimate = wrapper.findByTestId('time-estimate');
|
||||
describe('time estimate', () => {
|
||||
it('renders time estimate', () => {
|
||||
wrapper = mountComponent({ issue: object({ timeEstimate: '1w' }) });
|
||||
const timeEstimate = wrapper.findByTestId('time-estimate');
|
||||
|
||||
expect(findWorkItemAttribute().props('title')).toBe('1w');
|
||||
expect(findWorkItemAttribute().props('tooltipText')).toBe('Estimate');
|
||||
expect(timeEstimate.findComponent(GlIcon).props('name')).toBe('timer');
|
||||
expect(findWorkItemAttribute().props('title')).toBe('1w');
|
||||
expect(findWorkItemAttribute().props('tooltipText')).toBe('Estimate');
|
||||
expect(timeEstimate.findComponent(GlIcon).props('name')).toBe('timer');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,16 +5,12 @@ import MultipleChoiceSelector from '~/vue_shared/components/multiple_choice_sele
|
|||
describe('MultipleChoiceSelector', () => {
|
||||
let wrapper;
|
||||
|
||||
const defaultPropsData = {
|
||||
selected: ['option'],
|
||||
};
|
||||
|
||||
function createComponent({ propsData = {} } = {}) {
|
||||
function createComponent({ props, ...options } = {}) {
|
||||
wrapper = shallowMount(MultipleChoiceSelector, {
|
||||
propsData: {
|
||||
...defaultPropsData,
|
||||
...propsData,
|
||||
...props,
|
||||
},
|
||||
...options,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -25,4 +21,34 @@ describe('MultipleChoiceSelector', () => {
|
|||
|
||||
expect(findCheckboxGroup().exists()).toBe(true);
|
||||
});
|
||||
|
||||
it('checks options', () => {
|
||||
createComponent({
|
||||
props: {
|
||||
checked: ['my-option', 'my-option-2'],
|
||||
},
|
||||
});
|
||||
|
||||
expect(findCheckboxGroup().attributes('checked')).toEqual('my-option,my-option-2');
|
||||
});
|
||||
|
||||
it('emits checked options', () => {
|
||||
createComponent();
|
||||
|
||||
findCheckboxGroup().vm.$emit('input', ['my-option-2']);
|
||||
|
||||
expect(wrapper.emitted()).toEqual({
|
||||
input: [[['my-option-2']]],
|
||||
});
|
||||
});
|
||||
|
||||
it('renders slot', () => {
|
||||
createComponent({
|
||||
slots: {
|
||||
default: 'content',
|
||||
},
|
||||
});
|
||||
|
||||
expect(wrapper.html()).toContain('content');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5403,6 +5403,7 @@ export const groupWorkItemsQueryResponse = {
|
|||
closedAt: '',
|
||||
confidential: true,
|
||||
createdAt: '2020-01-23T12:34:56Z',
|
||||
hidden: true,
|
||||
namespace: {
|
||||
id: 'full-path-epic-id',
|
||||
fullPath: 'full-path',
|
||||
|
@ -5457,6 +5458,7 @@ export const groupWorkItemsQueryResponse = {
|
|||
closedAt: '',
|
||||
confidential: true,
|
||||
createdAt: '2020-01-23T12:34:56Z',
|
||||
hidden: true,
|
||||
namespace: {
|
||||
id: 'full-path-epic-id',
|
||||
fullPath: 'full-path',
|
||||
|
|
|
@ -130,5 +130,24 @@ RSpec.describe Resolvers::GroupsResolver, feature_category: :groups_and_projects
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with marked_for_deletion_on filter', :freeze_time do
|
||||
let_it_be(:marked_for_deletion_on) { Date.yesterday }
|
||||
let_it_be(:group_marked_for_deletion) do
|
||||
create(:group_with_deletion_schedule, marked_for_deletion_on: marked_for_deletion_on, owners: user)
|
||||
end
|
||||
|
||||
context 'when a group has been marked for deletion on the given date' do
|
||||
let(:params) { { marked_for_deletion_on: marked_for_deletion_on } }
|
||||
|
||||
it { is_expected.to contain_exactly(group_marked_for_deletion) }
|
||||
end
|
||||
|
||||
context 'when no groups have been marked for deletion on the given date' do
|
||||
let(:params) { { marked_for_deletion_on: (marked_for_deletion_on - 2.days) } }
|
||||
|
||||
it { is_expected.to be_empty }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -29,18 +29,4 @@ RSpec.describe WikiPageVersionHelper, feature_category: :wiki do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#wiki_page_version_author_avatar' do
|
||||
let(:commit) { commit_with_user }
|
||||
|
||||
subject { helper.wiki_page_version_author_avatar(wiki_page_version) }
|
||||
|
||||
it 'returns the user avatar', :aggregate_failures do
|
||||
avatar = Nokogiri::HTML.parse(subject)
|
||||
|
||||
expect(avatar.css('img')[0].attr('class')).to eq('avatar s24 float-none !gl-mr-0 lazy')
|
||||
expect(avatar.css('img')[0].attr('data-src')).not_to be_empty
|
||||
expect(avatar.css('img')[0].attr('src')).not_to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1018,6 +1018,31 @@ RSpec.describe API::Groups, :with_current_organization, feature_category: :group
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when using the marked_for_deletion_on filter' do
|
||||
let_it_be(:group_with_deletion_on) { create(:group_with_deletion_schedule, name: "group_with_deletion_on", marked_for_deletion_on: Date.parse('2024-01-01'), owners: user1) }
|
||||
let_it_be(:group_without_deletion) { create(:group, name: "group_without_deletion", owners: user1) }
|
||||
let(:response_groups) { json_response.map { |group| group['id'] } }
|
||||
|
||||
it 'returns groups marked for deletion on the specified date' do
|
||||
get api("/groups", user1), params: { marked_for_deletion_on: Date.parse('2024-01-01') }
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(response_groups).to contain_exactly(group_with_deletion_on.id)
|
||||
expect(json_response.map { |group| group["marked_for_deletion_on"] }).to contain_exactly(Date.parse('2024-01-01').iso8601)
|
||||
end
|
||||
|
||||
it 'returns all groups when marked_for_deletion_on is not specified' do
|
||||
get api("/groups", user1)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(response_groups).to contain_exactly(group1.id, group_with_deletion_on.id, group_without_deletion.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PUT /groups/:id' do
|
||||
|
|
|
@ -667,7 +667,6 @@
|
|||
- './ee/spec/helpers/ee/labels_helper_spec.rb'
|
||||
- './ee/spec/helpers/ee/lock_helper_spec.rb'
|
||||
- './ee/spec/helpers/ee/namespaces_helper_spec.rb'
|
||||
- './ee/spec/helpers/ee/namespace_user_cap_reached_alert_helper_spec.rb'
|
||||
- './ee/spec/helpers/ee/operations_helper_spec.rb'
|
||||
- './ee/spec/helpers/ee/personal_access_tokens_helper_spec.rb'
|
||||
- './ee/spec/helpers/ee/profiles_helper_spec.rb'
|
||||
|
@ -2311,7 +2310,6 @@
|
|||
- './ee/spec/views/projects/security/policies/index.html.haml_spec.rb'
|
||||
- './ee/spec/views/projects/security/sast_configuration/show.html.haml_spec.rb'
|
||||
- './ee/spec/views/projects/settings/merge_requests/_merge_request_status_checks_settings.html.haml_spec.rb'
|
||||
- './ee/spec/views/projects/settings/subscriptions/_index.html.haml_spec.rb'
|
||||
- './ee/spec/views/registrations/groups/new.html.haml_spec.rb'
|
||||
- './ee/spec/views/shared/billings/_billing_plan_actions.html.haml_spec.rb'
|
||||
- './ee/spec/views/shared/billings/_billing_plan.html.haml_spec.rb'
|
||||
|
|
|
@ -100,6 +100,7 @@ RSpec.describe Tooling::Danger::FeatureFlag, feature_category: :tooling do
|
|||
let(:yaml) do
|
||||
{
|
||||
'name' => name,
|
||||
'description' => 'feature flag description',
|
||||
'default_enabled' => default_enabled,
|
||||
'feature_issue_url' => feature_issue_url,
|
||||
'rollout_issue_url' => rollout_issue_url,
|
||||
|
|
|
@ -20,6 +20,7 @@ module Tooling
|
|||
:path,
|
||||
:lines,
|
||||
:name,
|
||||
:description,
|
||||
:feature_issue_url,
|
||||
:introduced_by_url,
|
||||
:rollout_issue_url,
|
||||
|
|
Loading…
Reference in New Issue