Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.rubocop_todo/gitlab/avoid_gitlab_instance_checks.yml10
-rw-r--r--Gemfile11
-rw-r--r--Gemfile.checksum9
-rw-r--r--Gemfile.lock18
-rw-r--r--app/assets/images/jobs-empty-state.svg33
-rw-r--r--app/helpers/groups_helper.rb4
-rw-r--r--app/models/integrations/hangouts_chat.rb23
-rw-r--r--app/views/admin/jobs/index.html.haml2
-rw-r--r--app/views/projects/jobs/index.html.haml2
-rw-r--r--app/views/search/results/_error.html.haml2
-rw-r--r--app/views/search/results/_timeout.html.haml2
-rw-r--r--config/feature_flags/development/ai_self_discover.yml8
-rw-r--r--config/initializers/hangouts_chat_http_override.rb3
-rw-r--r--doc/api/project_access_tokens.md3
-rw-r--r--doc/development/ai_features/index.md7
-rw-r--r--doc/user/application_security/configuration/index.md2
-rw-r--r--doc/user/application_security/dependency_scanning/index.md135
-rw-r--r--doc/user/compliance/license_scanning_of_cyclonedx_files/index.md7
-rw-r--r--lib/gitlab/patch/hangouts_chat_http_override.rb21
-rw-r--r--spec/features/groups_spec.rb2
-rw-r--r--spec/frontend/ci/jobs_page/components/jobs_table_empty_state_spec.js2
-rw-r--r--spec/helpers/groups_helper_spec.rb33
-rw-r--r--spec/initializers/hangouts_chat_http_override_spec.rb34
-rw-r--r--spec/models/integrations/hangouts_chat_spec.rb2
-rw-r--r--spec/views/groups/show.html.haml_spec.rb15
25 files changed, 184 insertions, 206 deletions
diff --git a/.rubocop_todo/gitlab/avoid_gitlab_instance_checks.yml b/.rubocop_todo/gitlab/avoid_gitlab_instance_checks.yml
index 4a07eb5e8b0..2ada4dfdaac 100644
--- a/.rubocop_todo/gitlab/avoid_gitlab_instance_checks.yml
+++ b/.rubocop_todo/gitlab/avoid_gitlab_instance_checks.yml
@@ -18,7 +18,6 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'app/helpers/users/callouts_helper.rb'
- 'app/helpers/whats_new_helper.rb'
- 'app/mailers/devise_mailer.rb'
- - 'app/mailers/emails/in_product_marketing.rb'
- 'app/models/ci/build.rb'
- 'app/models/ci/runner.rb'
- 'app/models/concerns/protected_ref_access.rb'
@@ -29,7 +28,6 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'app/models/project.rb'
- 'app/models/release_highlight.rb'
- 'app/policies/base_policy.rb'
- - 'app/services/users/signup_service.rb'
- 'app/workers/container_registry/cleanup_worker.rb'
- 'app/workers/container_registry/migration/guard_worker.rb'
- 'app/workers/container_registry/record_data_repair_detail_worker.rb'
@@ -45,9 +43,6 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'config/initializers/warden.rb'
- 'ee/app/components/namespaces/storage/limit_alert_component.rb'
- 'ee/app/controllers/admin/namespace_limits_controller.rb'
- - 'ee/app/controllers/concerns/ee/onboarding/status.rb'
- - 'ee/app/controllers/concerns/onboarding.rb'
- - 'ee/app/controllers/concerns/onboarding/set_redirect.rb'
- 'ee/app/controllers/ee/admin/users_controller.rb'
- 'ee/app/controllers/ee/application_controller.rb'
- 'ee/app/controllers/ee/dashboard/projects_controller.rb'
@@ -71,6 +66,7 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'ee/app/helpers/license_monitoring_helper.rb'
- 'ee/app/helpers/trial_registrations_helper.rb'
- 'ee/app/helpers/users/identity_verification_helper.rb'
+ - 'ee/app/mailers/emails/in_product_marketing.rb'
- 'ee/app/models/ci/minutes/additional_pack.rb'
- 'ee/app/models/ee/application_setting.rb'
- 'ee/app/models/ee/container_repository.rb'
@@ -102,6 +98,8 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'ee/app/services/namespaces/service_accounts/create_service.rb'
- 'ee/app/workers/ee/ci/build_finished_worker.rb'
- 'ee/app/workers/elastic_remove_expired_namespace_subscriptions_from_index_cron_worker.rb'
+ - 'ee/app/workers/gitlab_subscriptions/add_on_purchases/bulk_refresh_user_assignments_worker.rb'
+ - 'ee/app/workers/gitlab_subscriptions/add_on_purchases/schedule_bulk_refresh_user_assignments_worker.rb'
- 'ee/app/workers/gitlab_subscriptions/refresh_seats_worker.rb'
- 'ee/app/workers/gitlab_subscriptions/schedule_refresh_seats_worker.rb'
- 'ee/app/workers/update_all_mirrors_worker.rb'
@@ -121,6 +119,7 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'ee/lib/ee/gitlab/snippet_search_results.rb'
- 'ee/lib/ee/gitlab/tracking/standard_context.rb'
- 'ee/lib/ee/sidebars/groups/menus/settings_menu.rb'
+ - 'ee/lib/gitlab/email/message/account_validation.rb'
- 'ee/lib/gitlab/licenses/submit_license_usage_data_banner.rb'
- 'ee/lib/gitlab/llm/tanuki_bot.rb'
- 'ee/lib/gitlab/manual_quarterly_co_term_banner.rb'
@@ -136,7 +135,6 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'lib/gitlab/database/migration_helpers/convert_to_bigint.rb'
- 'lib/gitlab/database/migration_helpers/wraparound_autovacuum.rb'
- 'lib/gitlab/database/migration_helpers/wraparound_vacuum_helpers.rb'
- - 'lib/gitlab/email/message/in_product_marketing/helper.rb'
- 'lib/gitlab/experiment/rollout/feature.rb'
- 'lib/gitlab/gon_helper.rb'
- 'lib/gitlab/monitor/demo_projects.rb'
diff --git a/Gemfile b/Gemfile
index 76e8692595c..95eedbd31c7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -292,9 +292,6 @@ gem 'atlassian-jwt', '~> 0.2.0' # rubocop:todo Gemfile/MissingFeatureCategory
# Slack integration
gem 'slack-messenger', '~> 2.3.4' # rubocop:todo Gemfile/MissingFeatureCategory
-# Hangouts Chat integration
-gem 'hangouts-chat', '~> 0.0.5', require: 'hangouts_chat' # rubocop:todo Gemfile/MissingFeatureCategory
-
# FogBugz integration
gem 'ruby-fogbugz', '~> 0.3.0' # rubocop:todo Gemfile/MissingFeatureCategory
@@ -405,7 +402,7 @@ end
group :development, :test do
gem 'deprecation_toolkit', '~> 1.5.1', require: false # rubocop:todo Gemfile/MissingFeatureCategory
- gem 'bullet', '~> 7.0.2' # rubocop:todo Gemfile/MissingFeatureCategory
+ gem 'bullet', '~> 7.1.1' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'parser', '~> 3.2', '>= 3.2.2.3' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'pry-byebug' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'pry-rails', '~> 0.3.9' # rubocop:todo Gemfile/MissingFeatureCategory
@@ -481,7 +478,7 @@ group :test do
gem 'capybara', '~> 3.39', '>= 3.39.2' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'capybara-screenshot', '~> 1.0.26' # rubocop:todo Gemfile/MissingFeatureCategory
- gem 'selenium-webdriver', '= 4.12.0' # rubocop:todo Gemfile/MissingFeatureCategory
+ gem 'selenium-webdriver', '= 4.13.1' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'graphlyte', '~> 1.0.0' # rubocop:todo Gemfile/MissingFeatureCategory
@@ -490,7 +487,7 @@ group :test do
gem 'webmock', '~> 3.19.1' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'rails-controller-testing' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'concurrent-ruby', '~> 1.1' # rubocop:todo Gemfile/MissingFeatureCategory
- gem 'test-prof', '~> 1.2.2' # rubocop:todo Gemfile/MissingFeatureCategory
+ gem 'test-prof', '~> 1.2.3' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'rspec_junit_formatter' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'guard-rspec' # rubocop:todo Gemfile/MissingFeatureCategory
gem 'axe-core-rspec' # rubocop:todo Gemfile/MissingFeatureCategory
@@ -498,7 +495,7 @@ group :test do
# Moved in `test` because https://gitlab.com/gitlab-org/gitlab/-/issues/217527
gem 'derailed_benchmarks', require: false # rubocop:todo Gemfile/MissingFeatureCategory
- gem 'gitlab_quality-test_tooling', '~> 1.0.0', require: false # rubocop:todo Gemfile/MissingFeatureCategory
+ gem 'gitlab_quality-test_tooling', '~> 1.1.0', require: false # rubocop:todo Gemfile/MissingFeatureCategory
end
gem 'octokit', '~> 6.0' # rubocop:todo Gemfile/MissingFeatureCategory
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 19ea440d626..df9b77338fa 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -63,7 +63,7 @@
{"name":"bootsnap","version":"1.16.0","platform":"ruby","checksum":"f87410c00f69cd84a6e72a6c4bdba733f800d80d934f4315849d18ca9f288fed"},
{"name":"browser","version":"5.3.1","platform":"ruby","checksum":"62745301701ff2c6c5d32d077bb12532b20be261929dcb52c6781ed0d5658b3c"},
{"name":"builder","version":"3.2.4","platform":"ruby","checksum":"99caf08af60c8d7f3a6b004029c4c3c0bdaebced6c949165fe98f1db27fbbc10"},
-{"name":"bullet","version":"7.0.2","platform":"ruby","checksum":"4b7986b366f694bb05d5c1b4ea8ba949a99224d4511bf02f0c3944112f719c81"},
+{"name":"bullet","version":"7.1.1","platform":"ruby","checksum":"ad7789d9ad2bfe772f96620ba8f927e756c74525f2c03e7843d3518ce50e5b9c"},
{"name":"bundler-audit","version":"0.9.1","platform":"ruby","checksum":"bdc716fc21cd8652a6507b137e5bc51f5e0e4f6f106a114ab004c89d0200bd3d"},
{"name":"byebug","version":"11.1.3","platform":"ruby","checksum":"2485944d2bb21283c593d562f9ae1019bf80002143cc3a255aaffd4e9cf4a35b"},
{"name":"capybara","version":"3.39.2","platform":"ruby","checksum":"d6f0ca5f30897e64789428d4b047a0df105815a302069913578ac35d5ca99884"},
@@ -217,7 +217,7 @@
{"name":"gitlab-styles","version":"10.1.0","platform":"ruby","checksum":"f42745f5397d042fe24cf2d0eb56c995b37f9f43d8fb79b834d197a1cafdc84a"},
{"name":"gitlab_chronic_duration","version":"0.12.0","platform":"ruby","checksum":"0d766944d415b5c831f176871ee8625783fc0c5bfbef2d79a3a616f207ffc16d"},
{"name":"gitlab_omniauth-ldap","version":"2.2.0","platform":"ruby","checksum":"bb4d20acb3b123ed654a8f6a47d3fac673ece7ed0b6992edb92dca14bad2838c"},
-{"name":"gitlab_quality-test_tooling","version":"1.0.0","platform":"ruby","checksum":"b030be168a6a0eb3c47202beb6c64a4fbe36f5547d189c3f64cad29cfcc331db"},
+{"name":"gitlab_quality-test_tooling","version":"1.1.0","platform":"ruby","checksum":"1c1a7e2dc9a10d975c6901404a046597c34213f774082865cf4fda25ee511b71"},
{"name":"globalid","version":"1.1.0","platform":"ruby","checksum":"b337e1746f0c8cb0a6c918234b03a1ddeb4966206ce288fbb57779f59b2d154f"},
{"name":"gon","version":"6.4.0","platform":"ruby","checksum":"e3a618d659392890f1aa7db420f17c75fd7d35aeb5f8fe003697d02c4b88d2f0"},
{"name":"google-apis-androidpublisher_v3","version":"0.34.0","platform":"ruby","checksum":"d7e1d7dd92f79c498fe2082222a1740d788e022e660c135564b3fd299cab5425"},
@@ -282,7 +282,6 @@
{"name":"hamlit","version":"2.15.0","platform":"java","checksum":"fda165464e59337ab7cda6304a66bfdb607bb7155f25566da19c9ee7b98e03d1"},
{"name":"hamlit","version":"2.15.0","platform":"ruby","checksum":"d2e8505362338945fa309c68b2b8be07ebdc181200ec6021223567bf66dac38e"},
{"name":"hana","version":"1.3.7","platform":"ruby","checksum":"5425db42d651fea08859811c29d20446f16af196308162894db208cac5ce9b0d"},
-{"name":"hangouts-chat","version":"0.0.5","platform":"ruby","checksum":"bdbeb6c6e4abc98f395cb273f53b39911b3aa9e248fbbf063242b021ced8b6b6"},
{"name":"hashdiff","version":"1.0.1","platform":"ruby","checksum":"2cd4d04f5080314ecc8403c4e2e00dbaa282dff395e2d031bc16c8d501bdd6db"},
{"name":"hashie","version":"5.0.0","platform":"ruby","checksum":"9d6c4e51f2a36d4616cbc8a322d619a162d8f42815a792596039fc95595603da"},
{"name":"health_check","version":"3.1.0","platform":"ruby","checksum":"10146508237dc54ed7e24c292d8ba7fb8f9590cf26c66e325b947438c4103b57"},
@@ -569,7 +568,7 @@
{"name":"sawyer","version":"0.9.2","platform":"ruby","checksum":"fa3a72d62a4525517b18857ddb78926aab3424de0129be6772a8e2ba240e7aca"},
{"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"},
{"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"},
-{"name":"selenium-webdriver","version":"4.12.0","platform":"ruby","checksum":"5ab2295b67adb88993c54771fb4f31b39cd0f83eb51cfa288117af5347a0944b"},
+{"name":"selenium-webdriver","version":"4.13.1","platform":"ruby","checksum":"2aac5085567a59f56b7883238832db04d2d66f18d2c7e6754db14d9e0d4ffb0c"},
{"name":"semver_dialects","version":"1.2.1","platform":"ruby","checksum":"60a1f67659f79c51a667e8858ec9b089c1e4ce4f6d2a0f0b4ac101916946eb23"},
{"name":"sentry-rails","version":"5.8.0","platform":"ruby","checksum":"c11b2d909de2c2bfda793c45f64180fd784d54c46886338b683ee3f8efa7731b"},
{"name":"sentry-raven","version":"3.1.2","platform":"ruby","checksum":"103d3b122958810d34898ce2e705bcf549ddb9d855a70ce9a3970ee2484f364a"},
@@ -630,7 +629,7 @@
{"name":"term-ansicolor","version":"1.7.1","platform":"ruby","checksum":"92339ffec77c4bddc786a29385c91601dd52fc68feda23609bba0491229b05f7"},
{"name":"terminal-table","version":"3.0.2","platform":"ruby","checksum":"f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91"},
{"name":"terser","version":"1.0.2","platform":"ruby","checksum":"80c2e0bc7e2db4e12e8529658f9e0820e13d685ae67d745bf981f269743bb28e"},
-{"name":"test-prof","version":"1.2.2","platform":"ruby","checksum":"528af83bcbd1778e1dc1adbbced359fdfe9e65409d10bdd0defddd964d214522"},
+{"name":"test-prof","version":"1.2.3","platform":"ruby","checksum":"c52a40194cb30f399ed3eb6beb4c45b5daad8b8eb418e8ef69089e4dc7e01fd6"},
{"name":"test_file_finder","version":"0.1.4","platform":"ruby","checksum":"bc36d8339eac4fb9dc36514a7c5f4d389ac2fb6d010716fc715c5c8fbb98eacd"},
{"name":"text","version":"1.3.1","platform":"ruby","checksum":"2fbbbc82c1ce79c4195b13018a87cbb00d762bda39241bb3cdc32792759dd3f4"},
{"name":"thor","version":"1.2.2","platform":"ruby","checksum":"2f93c652828cba9fcf4f65f5dc8c306f1a7317e05aad5835a13740122c17f24c"},
diff --git a/Gemfile.lock b/Gemfile.lock
index fc58f23022c..2f44a39debf 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -326,7 +326,7 @@ GEM
msgpack (~> 1.2)
browser (5.3.1)
builder (3.2.4)
- bullet (7.0.2)
+ bullet (7.1.1)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
bundler-audit (0.9.1)
@@ -687,7 +687,7 @@ GEM
omniauth (>= 1.3, < 3)
pyu-ruby-sasl (>= 0.0.3.3, < 0.1)
rubyntlm (~> 0.5)
- gitlab_quality-test_tooling (1.0.0)
+ gitlab_quality-test_tooling (1.1.0)
activesupport (>= 6.1, < 7.1)
gitlab (~> 4.19)
http (~> 5.0)
@@ -849,7 +849,6 @@ GEM
thor
tilt
hana (1.3.7)
- hangouts-chat (0.0.5)
hashdiff (1.0.1)
hashie (5.0.0)
health_check (3.1.0)
@@ -1461,7 +1460,7 @@ GEM
seed-fu (2.3.7)
activerecord (>= 3.1)
activesupport (>= 3.1)
- selenium-webdriver (4.12.0)
+ selenium-webdriver (4.13.1)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
@@ -1582,7 +1581,7 @@ GEM
unicode-display_width (>= 1.1.1, < 3)
terser (1.0.2)
execjs (>= 0.3.0, < 3)
- test-prof (1.2.2)
+ test-prof (1.2.3)
test_file_finder (0.1.4)
faraday (~> 1.0)
text (1.3.1)
@@ -1758,7 +1757,7 @@ DEPENDENCIES
better_errors (~> 2.10.1)
bootsnap (~> 1.16.0)
browser (~> 5.3.1)
- bullet (~> 7.0.2)
+ bullet (~> 7.1.1)
bundler-audit (~> 0.9.1)
bundler-checksum (~> 0.1.0)!
capybara (~> 3.39, >= 3.39.2)
@@ -1836,7 +1835,7 @@ DEPENDENCIES
gitlab-utils!
gitlab_chronic_duration (~> 0.12)
gitlab_omniauth-ldap (~> 2.2.0)
- gitlab_quality-test_tooling (~> 1.0.0)
+ gitlab_quality-test_tooling (~> 1.1.0)
gon (~> 6.4.0)
google-apis-androidpublisher_v3 (~> 0.34.0)
google-apis-cloudbilling_v1 (~> 0.21.0)
@@ -1867,7 +1866,6 @@ DEPENDENCIES
guard-rspec
haml_lint (~> 0.40.0)
hamlit (~> 2.15.0)
- hangouts-chat (~> 0.0.5)
hashie (~> 5.0.0)
health_check (~> 3.0)
html-pipeline (~> 2.14.3)
@@ -1995,7 +1993,7 @@ DEPENDENCIES
sassc-rails (~> 2.1.0)
sd_notify (~> 0.1.0)
seed-fu (~> 2.3.7)
- selenium-webdriver (= 4.12.0)
+ selenium-webdriver (= 4.13.1)
semver_dialects (~> 1.2.1)
sentry-rails (~> 5.8.0)
sentry-raven (~> 3.1)
@@ -2024,7 +2022,7 @@ DEPENDENCIES
tanuki_emoji (~> 0.7)
telesignenterprise (~> 2.2)
terser (= 1.0.2)
- test-prof (~> 1.2.2)
+ test-prof (~> 1.2.3)
test_file_finder (~> 0.1.3)
thrift (>= 0.16.0)
timfel-krb5-auth (~> 0.8)
diff --git a/app/assets/images/jobs-empty-state.svg b/app/assets/images/jobs-empty-state.svg
deleted file mode 100644
index e6e0681a002..00000000000
--- a/app/assets/images/jobs-empty-state.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<svg width="234" height="162" viewBox="0 0 234 162" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M174.68 56.344H200.5C215.412 56.344 227.5 44.1787 227.5 29.172C227.5 14.1653 215.412 2 200.5 2C185.588 2 173.5 14.1653 173.5 29.172C173.5 36.2548 176.193 42.7046 180.604 47.5412" stroke="#C2B7E6" stroke-width="4" stroke-linecap="round"/>
-<path d="M145.5 76.4714C145.5 65.3553 154.454 56.344 165.5 56.344" stroke="#C2B7E6" stroke-width="4" stroke-linecap="round"/>
-<path d="M102.5 121.758H29.5C14.5883 121.758 2.5 109.593 2.5 94.586C2.5 79.5794 14.5883 67.4141 29.5 67.4141C44.4117 67.4141 56.5 79.5794 56.5 94.586C56.5 101.669 53.8072 108.119 49.3957 112.955" stroke="#C2B7E6" stroke-width="4" stroke-linecap="round"/>
-<path d="M67.0466 121.758H52.5C42.5589 121.758 34.5 129.868 34.5 139.873C34.5 149.877 42.5589 157.987 52.5 157.987C62.4411 157.987 70.5 149.877 70.5 139.873C70.5 137.478 70.0384 135.192 69.1998 133.1" stroke="#C2B7E6" stroke-width="4" stroke-linecap="round"/>
-<g clip-path="url(#clip0)">
-<path d="M55.0188 135.3C55.1617 134.764 54.8451 134.211 54.3117 134.068C53.7782 133.925 53.2298 134.243 53.0869 134.78L49.9811 146.445C49.8381 146.981 50.1547 147.534 50.6882 147.677C51.2217 147.821 51.77 147.503 51.9129 146.965L55.0188 135.3Z" fill="#FC6D26"/>
-<path d="M49.2071 137.142C49.5976 137.534 49.5976 138.172 49.2071 138.565L46.9142 140.873L49.2071 143.18C49.5976 143.573 49.5976 144.211 49.2071 144.603C48.8166 144.997 48.1834 144.997 47.7929 144.603L44.7929 141.584C44.4024 141.192 44.4024 140.554 44.7929 140.161L47.7929 137.142C48.1834 136.748 48.8166 136.748 49.2071 137.142Z" fill="#FC6D26"/>
-<path d="M55.7929 137.142C55.4024 137.534 55.4024 138.172 55.7929 138.565L58.0858 140.873L55.7929 143.18C55.4024 143.573 55.4024 144.211 55.7929 144.603C56.1834 144.997 56.8166 144.997 57.2071 144.603L60.2071 141.584C60.5976 141.192 60.5976 140.554 60.2071 140.161L57.2071 137.142C56.8166 136.748 56.1834 136.748 55.7929 137.142Z" fill="#FC6D26"/>
-</g>
-<path d="M212.102 160C222.815 160 231.5 151.214 231.5 140.376C231.5 129.537 222.815 120.752 212.102 120.752H151.5" stroke="#C2B7E6" stroke-width="4" stroke-linecap="round"/>
-<path d="M126.5 138.866C107.171 138.866 91.5 123.096 91.5 103.643C91.5 84.191 107.171 68.4204 126.5 68.4204C145.829 68.4204 161.5 84.191 161.5 103.643C161.5 123.096 145.829 138.866 126.5 138.866ZM126.5 131.451C141.76 131.451 154.132 119.001 154.132 103.643C154.132 88.2861 141.76 75.8358 126.5 75.8358C111.24 75.8358 98.8684 88.2861 98.8684 103.643C98.8684 119.001 111.24 131.451 126.5 131.451Z" fill="#FC6D26"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M126.126 87.1326C135.355 87.1326 142.906 94.5624 142.906 103.643C142.906 112.724 135.355 120.154 126.126 120.154C120.672 120.154 115.638 117.265 112.281 113.137L126.126 103.643V87.1326Z" fill="#6E49CB"/>
-<g clip-path="url(#clip1)">
-<path d="M29.5 90.2659L24.3571 91.9534V93.1629C24.3571 94.9623 25.087 96.6872 26.3846 97.9546L29.5 100.997V90.2659Z" fill="#FC6D26"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5 86.8909L29.5 83.5159L41.5 86.8909V93.1115C41.5 96.6919 40.0551 100.126 37.4832 102.657L29.5 110.516L21.5168 102.657C18.9449 100.126 17.5 96.6919 17.5 93.1115V86.8909ZM20.9286 93.1115V89.4366L29.5 87.0259L38.0714 89.4366V93.1115C38.0714 95.7968 36.9878 98.3721 35.0588 100.271L29.5 105.743L23.9412 100.271C22.0122 98.3721 20.9286 95.7968 20.9286 93.1115Z" fill="#FC6D26"/>
-</g>
-<g clip-path="url(#clip2)">
-<path d="M210.857 19.7297L209.51 24.8237C208.922 27.0445 207.518 28.9576 205.581 30.1752L194.728 36.999L191.862 34.1146L198.642 23.1922C199.852 21.2431 201.753 19.8298 203.96 19.2386L209.022 17.8826C209.822 17.6681 210.644 18.1474 210.857 18.953C210.925 19.2075 210.925 19.4752 210.857 19.7297ZM207.292 21.4702L204.732 22.1561C203.261 22.5503 201.993 23.4925 201.187 24.7918L196.517 32.3146L203.992 27.6148C205.283 26.803 206.219 25.5276 206.611 24.0471L207.292 21.4702ZM196.5 38.2294L204 33.7007V35.2103C204 38.5451 201.314 41.2485 198 41.2485H196.5V38.2294ZM190.5 32.1912H187.5V30.6816C187.5 27.3468 190.186 24.6434 193.5 24.6434H195L190.5 32.1912Z" fill="#FC6D26"/>
-</g>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M209.914 132.822C209.384 132.822 208.875 133.032 208.5 133.407L204.796 137.111C204.613 137.293 204.5 137.544 204.5 137.822V144.822C204.5 145.926 205.395 146.822 206.5 146.822H216.5C217.605 146.822 218.5 145.926 218.5 144.822V137.822C218.5 137.546 218.388 137.296 218.207 137.115L214.5 133.407C214.125 133.032 213.616 132.822 213.086 132.822H209.914ZM215.086 136.822L213.086 134.822H212.5V136.822H215.086ZM210.5 134.822H209.914L207.914 136.822H210.5V134.822ZM206.5 138.822H216.5V144.822H206.5V138.822Z" fill="#FC6D26"/>
-<defs>
-<clipPath id="clip0">
-<rect width="16" height="13.6779" fill="white" transform="translate(44.5 134.033)"/>
-</clipPath>
-<clipPath id="clip1">
-<rect width="24" height="27.172" fill="white" transform="translate(17.5 83.5159)"/>
-</clipPath>
-<clipPath id="clip2">
-<rect width="24" height="24.1529" fill="white" transform="translate(187.5 17.0956)"/>
-</clipPath>
-</defs>
-</svg>
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index de15d6cabc0..ef21434d8f1 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -174,7 +174,9 @@ module GroupsHelper
end
def show_group_readme?(group)
- group.group_readme
+ return false unless group.group_readme
+
+ can?(current_user, :read_code, group.readme_project)
end
def group_settings_readme_app_data(group)
diff --git a/app/models/integrations/hangouts_chat.rb b/app/models/integrations/hangouts_chat.rb
index 680752c3d56..6e4753470a3 100644
--- a/app/models/integrations/hangouts_chat.rb
+++ b/app/models/integrations/hangouts_chat.rb
@@ -30,12 +30,15 @@ module Integrations
end
def help
- docs_link = ActionController::Base.helpers.link_to _('How do I set up a Google Chat webhook?'), Rails.application.routes.url_helpers.help_page_url('user/project/integrations/hangouts_chat'), target: '_blank', rel: 'noopener noreferrer'
- s_('Before enabling this integration, create a webhook for the room in Google Chat where you want to receive notifications from this project. %{docs_link}').html_safe % { docs_link: docs_link.html_safe }
+ docs_link = ActionController::Base.helpers.link_to(_('How do I set up a Google Chat webhook?'),
+ Rails.application.routes.url_helpers.help_page_url('user/project/integrations/hangouts_chat'),
+ target: '_blank', rel: 'noopener noreferrer')
+ format(
+ s_('Before enabling this integration, create a webhook for the room in Google Chat where you want to receive ' \
+ 'notifications from this project. %{docs_link}').html_safe, docs_link: docs_link.html_safe)
end
- def default_channel_placeholder
- end
+ def default_channel_placeholder; end
def self.supported_events
%w[push issue confidential_issue merge_request note confidential_note tag_push pipeline wiki_page]
@@ -43,14 +46,20 @@ module Integrations
private
- def notify(message, opts)
+ def notify(message, _opts)
url = webhook.dup
key = parse_thread_key(message)
url = Gitlab::Utils.add_url_parameters(url, { threadKey: key }) if key
- simple_text = parse_simple_text_message(message)
- ::HangoutsChat::Sender.new(url).simple(simple_text)
+ payload = { text: parse_simple_text_message(message) }
+
+ Gitlab::HTTP.post(
+ url,
+ body: payload.to_json,
+ headers: { 'Content-Type' => 'application/json' },
+ parse: nil
+ ).response
end
# Returns an appropriate key for threading messages in google chat
diff --git a/app/views/admin/jobs/index.html.haml b/app/views/admin/jobs/index.html.haml
index b8a9ad32259..9af5ffd7936 100644
--- a/app/views/admin/jobs/index.html.haml
+++ b/app/views/admin/jobs/index.html.haml
@@ -4,4 +4,4 @@
- page_title _("Jobs")
-#admin-jobs-app{ data: { job_statuses: job_statuses.to_json, empty_state_svg_path: image_path('jobs-empty-state.svg'), url: cancel_all_admin_jobs_path } }
+#admin-jobs-app{ data: { job_statuses: job_statuses.to_json, empty_state_svg_path: image_path('illustrations/empty-state/empty-pipeline-md.svg'), url: cancel_all_admin_jobs_path } }
diff --git a/app/views/projects/jobs/index.html.haml b/app/views/projects/jobs/index.html.haml
index 0073c6b89cd..8f6efbf9c83 100644
--- a/app/views/projects/jobs/index.html.haml
+++ b/app/views/projects/jobs/index.html.haml
@@ -3,4 +3,4 @@
- add_page_specific_style 'page_bundles/merge_request'
- admin = local_assigns.fetch(:admin, false)
-#js-jobs-table{ data: { admin: admin, full_path: @project.full_path, job_statuses: job_statuses.to_json, pipeline_editor_path: project_ci_pipeline_editor_path(@project), empty_state_svg_path: image_path('jobs-empty-state.svg') } }
+#js-jobs-table{ data: { admin: admin, full_path: @project.full_path, job_statuses: job_statuses.to_json, pipeline_editor_path: project_ci_pipeline_editor_path(@project), empty_state_svg_path: image_path('illustrations/empty-state/empty-pipeline-md.svg') } }
diff --git a/app/views/search/results/_error.html.haml b/app/views/search/results/_error.html.haml
index f0d9283c620..33e74b08dde 100644
--- a/app/views/search/results/_error.html.haml
+++ b/app/views/search/results/_error.html.haml
@@ -1,7 +1,7 @@
.gl-display-flex.gl-flex-direction-column.gl-align-items-center
%div
.svg-content.svg-150
- = image_tag 'illustrations/search-timeout-md.svg'
+ = image_tag 'illustrations/empty-state/empty-search-md.svg'
%div
%h4.gl-text-center.gl-font-weight-bold= s_('SearchError|A search query problem has occurred')
%p.gl-text-center= s_('SearchError|To resolve the problem, check the query syntax and try again.')
diff --git a/app/views/search/results/_timeout.html.haml b/app/views/search/results/_timeout.html.haml
index 740e2bedd54..530096ead43 100644
--- a/app/views/search/results/_timeout.html.haml
+++ b/app/views/search/results/_timeout.html.haml
@@ -1,7 +1,7 @@
.gl-display-flex.gl-flex-direction-column.gl-align-items-center
%div
.svg-content.svg-150
- = image_tag 'illustrations/search-timeout-md.svg'
+ = image_tag 'illustrations/empty-state/empty-search-md.svg'
%div
%h4.gl-text-center.gl-font-weight-bold= _('Your search timed out')
%p.gl-text-center= _('To resolve this, try to:')
diff --git a/config/feature_flags/development/ai_self_discover.yml b/config/feature_flags/development/ai_self_discover.yml
new file mode 100644
index 00000000000..ef5e2bc8926
--- /dev/null
+++ b/config/feature_flags/development/ai_self_discover.yml
@@ -0,0 +1,8 @@
+---
+name: ai_self_discover
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/132267
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/425908
+milestone: '16.4'
+type: development
+group: group::ai framework
+default_enabled: false
diff --git a/config/initializers/hangouts_chat_http_override.rb b/config/initializers/hangouts_chat_http_override.rb
deleted file mode 100644
index 42ffb6f78e1..00000000000
--- a/config/initializers/hangouts_chat_http_override.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# frozen_string_literal: true
-
-HangoutsChat::Sender::HTTP.prepend(Gitlab::Patch::HangoutsChatHTTPOverride)
diff --git a/doc/api/project_access_tokens.md b/doc/api/project_access_tokens.md
index 793eb49c767..1ce4ebaa787 100644
--- a/doc/api/project_access_tokens.md
+++ b/doc/api/project_access_tokens.md
@@ -139,6 +139,9 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
Rotate a project access token. Revokes the previous token and creates a new token that expires in one week.
+WARNING:
+When you rotate a project access token, the new token retains the expiry date of the old token. For more information, see [issue 423362](https://gitlab.com/gitlab-org/gitlab/-/issues/423362).
+
```plaintext
POST /projects/:id/access_tokens/:token_id/rotate
```
diff --git a/doc/development/ai_features/index.md b/doc/development/ai_features/index.md
index 96faf008fa2..723a7716327 100644
--- a/doc/development/ai_features/index.md
+++ b/doc/development/ai_features/index.md
@@ -203,12 +203,7 @@ end
### Tips for local development
1. When responses are taking too long to appear in the user interface, consider restarting Sidekiq by running `gdk restart rails-background-jobs`. If that doesn't work, try `gdk kill` and then `gdk start`.
-1. Alternatively, bypass Sidekiq entirely and run the chat service synchronously. This can help with debugging errors as GraphQL errors are now available in the network inspector instead of the Sidekiq logs.
-
-```shell
-export LLM_DEVELOPMENT_SYNC_EXECUTION=1
-gdk start
-```
+1. Alternatively, bypass Sidekiq entirely and run the chat service synchronously. This can help with debugging errors as GraphQL errors are now available in the network inspector instead of the Sidekiq logs. To do that temporary alter `Llm::CompletionWorker.perform_async` statements with `Llm::CompletionWorker.perform_inline`
### Working with GitLab Duo Chat
diff --git a/doc/user/application_security/configuration/index.md b/doc/user/application_security/configuration/index.md
index 1e9163a4c26..98b91ce584d 100644
--- a/doc/user/application_security/configuration/index.md
+++ b/doc/user/application_security/configuration/index.md
@@ -53,7 +53,7 @@ You can configure the following security controls:
For more details, read [DAST on-demand scans](../dast/proxy-based.md#on-demand-scans).
- [Dependency Scanning](../dependency_scanning/index.md)
- Select **Configure with a merge request** to create a merge request with the changes required to
- enable Dependency Scanning. For more details, see [Enable Dependency Scanning via an automatic merge request](../dependency_scanning/index.md#enable-dependency-scanning-via-an-automatic-merge-request).
+ enable Dependency Scanning. For more information, see [Use a preconfigured merge request](../dependency_scanning/index.md#use-a-preconfigured-merge-request).
- [Container Scanning](../container_scanning/index.md)
- Select **Configure with a merge request** to create a merge request with the changes required to
enable Container Scanning. For more details, see
diff --git a/doc/user/application_security/dependency_scanning/index.md b/doc/user/application_security/dependency_scanning/index.md
index 55a29d5e671..b5860666e27 100644
--- a/doc/user/application_security/dependency_scanning/index.md
+++ b/doc/user/application_security/dependency_scanning/index.md
@@ -31,17 +31,6 @@ we encourage you to use all of our security scanners. For a comparison of these
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
For an overview, see [Dependency Scanning](https://www.youtube.com/watch?v=TBnfbGk4c4o).
-## Requirements
-
-Dependency Scanning runs in the `test` stage, which is available by default. If you redefine the
-stages in the `.gitlab-ci.yml` file, the `test` stage is required.
-
-To run dependency scanning jobs, by default, you need GitLab Runner with the
-[`docker`](https://docs.gitlab.com/runner/executors/docker.html) or
-[`kubernetes`](https://docs.gitlab.com/runner/install/kubernetes.html) executor.
-If you're using the shared runners on GitLab.com, this is enabled by default. The analyzer images
-provided are for the Linux/amd64 architecture.
-
WARNING:
Dependency Scanning does not support runtime installation of compilers and interpreters.
@@ -422,7 +411,7 @@ To support the following package managers, the GitLab analyzers proceed in two s
<p>
If your project <i>does not use</i> a <code>gradlew</code> file, then the analyzer automatically switches to one of the
pre-installed Gradle versions, based on the version of Java specified by the
- <a href="#configuring-specific-analyzers-used-by-dependency-scanning"><code>DS_JAVA_VERSION</code></a> variable.
+ <a href="#analyzer-specific-settings"><code>DS_JAVA_VERSION</code></a> variable.
By default, the analyzer uses Java 17 and Gradle 7.3.3.
</p>
<p>
@@ -532,58 +521,88 @@ The [Security Scanner Integration](../../../development/integrations/secure.md)
## Configuration
-To enable dependency scanning for GitLab 11.9 and later, you must
-[include](../../../ci/yaml/index.md#includetemplate) the
-[`Dependency-Scanning.gitlab-ci.yml` template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Dependency-Scanning.gitlab-ci.yml)
-that is provided as a part of your GitLab installation.
-For GitLab versions earlier than 11.9, you can copy and use the job as defined
-that template.
+Enable the dependency scanning analyzer to ensure it scans your application's dependencies for known
+vulnerabilities. You can then adjust its behavior by using CI/CD variables.
-Add the following to your `.gitlab-ci.yml` file:
+### Enabling the analyzer
-```yaml
-include:
- - template: Jobs/Dependency-Scanning.gitlab-ci.yml
-```
+Prerequisites:
+
+- The `test` stage is required in the `.gitlab-ci.yml` file.
+- On GitLab self-managed you need GitLab Runner with the
+ [`docker`](https://docs.gitlab.com/runner/executors/docker.html) or
+ [`kubernetes`](https://docs.gitlab.com/runner/install/kubernetes.html) executor. On GitLab.com this
+ is enabled by default on the shared runners. The analyzer images provided are for the Linux/amd64
+ architecture.
+
+To enable the analyzer, either:
+
+- Enable [Auto DevOps](../../../topics/autodevops/index.md), which includes dependency scanning.
+- Edit the `.gitlab-ci.yml` file manually. Use this method if your `.gitlab-ci.yml` file is complex.
+- Use a preconfigured merge request.
+- Create a [scan execution policy](../policies/scan-execution-policies.md) that enforces dependency
+ scanning.
-The included template creates dependency scanning jobs in your CI/CD
-pipeline and scans your project's source code for possible vulnerabilities.
-The results are saved as a
-[dependency scanning report artifact](../../../ci/yaml/artifacts_reports.md#artifactsreportsdependency_scanning)
-that you can later download and analyze. Due to implementation limitations, we
-always take the latest dependency scanning artifact available.
+#### Edit the `.gitlab-ci.yml` file manually
+
+This method requires you to manually edit the existing `.gitlab-ci.yml` file. Use this method if
+your GitLab CI/CD configuration file is complex.
+
+To enable dependency scanning:
+
+1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) to find your project.
+1. Select **Build > Pipeline editor**.
+1. Copy and paste the following to the bottom of the `.gitlab-ci.yml` file:
+
+ ```yaml
+ include:
+ - template: Security/Dependency-Scanning.gitlab-ci.yml
+ ```
+
+1. Select the **Validate** tab, then select **Validate pipeline**.
+
+ Continue if you see the message **Simulation completed successfully**. That indicates the file is
+ valid.
+1. Select the **Edit** tab.
+1. Complete the fields. Do not use the default branch for the **Branch** field.
+1. Select **Commit changes**.
+1. Select **Code > Merge requests**.
+1. Select the merge request just created.
+1. Review the merge request, then select **Merge**.
+
+Pipelines now include a dependency scanning job.
-### Enable Dependency Scanning via an automatic merge request
+#### Use a preconfigured merge request
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/4908) in GitLab 14.1 [with a flag](../../../administration/feature_flags.md) named `sec_dependency_scanning_ui_enable`. Enabled by default.
-> - [Enabled on self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/282533) in GitLab 14.1.
-> - [Feature flag `sec_dependency_scanning_ui_enable` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/326005) in GitLab 14.2.
+> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/326005) in GitLab 14.2. Feature flag `sec_dependency_scanning_ui_enable` removed.
-To enable Dependency Scanning in a project, you can create a merge request:
+This method automatically prepares a merge request that includes the dependency scanning template
+in the `.gitlab-ci.yml` file. You then merge the merge request to enable dependency scanning.
+
+NOTE:
+This method works best with no existing `.gitlab-ci.yml` file, or with a minimal configuration
+file. If you have a complex GitLab configuration file it might not be parsed successfully, and an
+error might occur. In that case, use the [manual](#edit-the-gitlab-ciyml-file-manually) method instead.
+
+To enable dependency scanning:
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Secure > Security configuration**.
1. In the **Dependency Scanning** row, select **Configure with a merge request**.
-1. Review and merge the merge request to enable Dependency Scanning.
+1. Select **Create merge request**.
+1. Review the merge request, then select **Merge**.
Pipelines now include a dependency scanning job.
-### Customizing the dependency scanning settings
-
-The Dependency Scanning settings can be changed through [CI/CD variables](#available-cicd-variables) by using the
-[`variables`](../../../ci/yaml/index.md#variables) parameter in `.gitlab-ci.yml`.
-For example:
-
-```yaml
-include:
- - template: Security/Dependency-Scanning.gitlab-ci.yml
+### Customizing analyzer behavior
-variables:
- SECURE_LOG_LEVEL: error
-```
+You can use CI/CD variables to customize dependency scanning behavior.
-Because template is [evaluated before](../../../ci/yaml/index.md#include) the pipeline
-configuration, the last mention of the variable takes precedence.
+WARNING:
+You should test all customization of GitLab security scanning tools in a merge request before
+merging these changes to the default branch. Failure to do so can give unexpected results,
+including a large number of false positives.
### Overriding dependency scanning jobs
@@ -613,15 +632,9 @@ gemnasium-dependency_scanning:
### Available CI/CD variables
-Dependency scanning can be [configured](#customizing-the-dependency-scanning-settings)
-using environment variables.
-
-WARNING:
-All customization of GitLab security scanning tools should be tested in a merge request before
-merging these changes to the default branch. Failure to do so can give unexpected results,
-including a large number of false positives.
+You can use CI/CD variables to [customize](#customizing-analyzer-behavior) dependency scanning behavior.
-#### Configuring dependency scanning
+#### Global analyzer settings
The following variables allow configuration of global dependency scanning settings.
@@ -634,9 +647,9 @@ The following variables allow configuration of global dependency scanning settin
| `DS_MAX_DEPTH` | Defines how many directory levels deep that the analyzer should search for supported files to scan. A value of `-1` scans all directories regardless of depth. Default: `2`. |
| `SECURE_ANALYZERS_PREFIX` | Override the name of the Docker registry providing the official default images (proxy). |
-#### Configuring specific analyzers used by dependency scanning
+#### Analyzer-specific settings
-The following variables are used for configuring specific analyzers (used for a specific language/framework).
+The following variables configure the behavior of specific dependency scanning analyzers.
| CI/CD variable | Analyzer | Default | Description |
|--------------------------------------| ------------------ | ---------------------------- |------------ |
@@ -957,10 +970,10 @@ jobs to run successfully. For more information, see [Offline environments](../of
Here are the requirements for using dependency scanning in an offline environment:
-- GitLab Runner with the [`docker` or `kubernetes` executor](#requirements).
+- GitLab Runner with the `docker` or `kubernetes` executor.
- Docker Container Registry with locally available copies of dependency scanning [analyzer](https://gitlab.com/gitlab-org/security-products/analyzers) images.
- If you have a limited access environment you need to allow access, such as using a proxy, to the advisory database: `https://gitlab.com/gitlab-org/security-products/gemnasium-db.git`.
- If you are unable to permit access to `https://gitlab.com/gitlab-org/security-products/gemnasium-db.git` you must host an offline copy of this `git` repository and set the `GEMNASIUM_DB_REMOTE_URL` CI/CD variable to the URL of this repository. For more information on configuration variables, see [Dependency Scanning](#configuring-dependency-scanning).
+ If you are unable to permit access to `https://gitlab.com/gitlab-org/security-products/gemnasium-db.git` you must host an offline copy of this `git` repository and set the `GEMNASIUM_DB_REMOTE_URL` CI/CD variable to the URL of this repository. For more information on configuration variables, see [Customizing analyzer behavior](#customizing-analyzer-behavior).
This advisory database is constantly being updated, so you must periodically sync your local copy with GitLab.
@@ -1019,7 +1032,7 @@ variables:
GEMNASIUM_DB_REMOTE_URL: "gitlab.example.com/gemnasium-db.git"
```
-See explanations of the variables above in the [configuration section](#configuration).
+See explanations of the previous variables in the [configuration section](#customizing-analyzer-behavior).
### Hosting a copy of the `gemnasium_db` advisory database
diff --git a/doc/user/compliance/license_scanning_of_cyclonedx_files/index.md b/doc/user/compliance/license_scanning_of_cyclonedx_files/index.md
index 9e655e82a90..81f7cc61782 100644
--- a/doc/user/compliance/license_scanning_of_cyclonedx_files/index.md
+++ b/doc/user/compliance/license_scanning_of_cyclonedx_files/index.md
@@ -22,8 +22,11 @@ Licenses not in the SPDX list are reported as "Unknown". License information can
## Configuration
-Enable [Dependency Scanning](../../application_security/dependency_scanning/index.md#configuration)
-and ensure that its prerequisites are met.
+Prerequisites:
+
+- On GitLab self-managed only, enable [Synchronization with the GitLab License Database](../../../administration/settings/security_and_compliance.md#choose-package-registry-metadata-to-sync) in the Admin Area for the GitLab instance. On GitLab SaaS this step has already been completed.
+- Enable [Dependency Scanning](../../application_security/dependency_scanning/index.md#enabling-the-analyzer)
+ and ensure that its prerequisites are met.
From the `.gitlab-ci.yml` file, remove the deprecated line `Jobs/License-Scanning.gitlab-ci.yml`, if
it's present.
diff --git a/lib/gitlab/patch/hangouts_chat_http_override.rb b/lib/gitlab/patch/hangouts_chat_http_override.rb
deleted file mode 100644
index 20dc678e251..00000000000
--- a/lib/gitlab/patch/hangouts_chat_http_override.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Patch
- module HangoutsChatHTTPOverride
- attr_reader :uri
-
- # See https://github.com/enzinia/hangouts-chat/blob/6a509f61a56e757f8f417578b393b94423831ff7/lib/hangouts_chat/http.rb
- def post(payload)
- httparty_response = Gitlab::HTTP.post(
- uri,
- body: payload.to_json,
- headers: { 'Content-Type' => 'application/json' },
- parse: nil # Disables automatic response parsing
- )
- httparty_response.response
- # The rest of the integration expects a Net::HTTP response
- end
- end
- end
-end
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index 7af58bf460c..bcbfdf487ac 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -544,7 +544,7 @@ RSpec.describe 'Group', feature_category: :groups_and_projects do
describe 'group README', :js do
context 'with gitlab-profile project and README.md' do
let_it_be(:group) { create(:group) }
- let_it_be(:project) { create(:project, :readme, namespace: group) }
+ let_it_be(:project) { create(:project, :public, :readme, namespace: group) }
it 'renders README block on group page' do
visit group_path(group)
diff --git a/spec/frontend/ci/jobs_page/components/jobs_table_empty_state_spec.js b/spec/frontend/ci/jobs_page/components/jobs_table_empty_state_spec.js
index f4893c4077f..0f85c4590ec 100644
--- a/spec/frontend/ci/jobs_page/components/jobs_table_empty_state_spec.js
+++ b/spec/frontend/ci/jobs_page/components/jobs_table_empty_state_spec.js
@@ -6,7 +6,7 @@ describe('Jobs table empty state', () => {
let wrapper;
const pipelineEditorPath = '/root/project/-/ci/editor';
- const emptyStateSvgPath = 'assets/jobs-empty-state.svg';
+ const emptyStateSvgPath = 'illustrations/empty-state/empty-pipeline-md.svg';
const findEmptyState = () => wrapper.findComponent(GlEmptyState);
diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb
index 2cdb934eb0a..dce64280988 100644
--- a/spec/helpers/groups_helper_spec.rb
+++ b/spec/helpers/groups_helper_spec.rb
@@ -524,6 +524,39 @@ RSpec.describe GroupsHelper do
end
end
+ describe '#show_group_readme?' do
+ let_it_be_with_refind(:group) { create(:group, :public) }
+ let_it_be(:current_user) { nil }
+
+ before do
+ allow(helper).to receive(:current_user).and_return(current_user)
+ end
+
+ context 'when project is public' do
+ let_it_be(:project) { create(:project, :public, :readme, group: group, path: 'gitlab-profile') }
+
+ it { expect(helper.show_group_readme?(group)).to be(true) }
+ end
+
+ context 'when project is private' do
+ let_it_be(:project) { create(:project, :private, :readme, group: group, path: 'gitlab-profile') }
+
+ context 'when user can see the project' do
+ let_it_be(:current_user) { create(:user) }
+
+ before do
+ project.add_developer(current_user)
+ end
+
+ it { expect(helper.show_group_readme?(group)).to be(true) }
+ end
+
+ it 'when user can not see the project' do
+ expect(helper.show_group_readme?(group)).to be(false)
+ end
+ end
+ end
+
describe "#enabled_git_access_protocol_options_for_group" do
subject { helper.enabled_git_access_protocol_options_for_group }
diff --git a/spec/initializers/hangouts_chat_http_override_spec.rb b/spec/initializers/hangouts_chat_http_override_spec.rb
deleted file mode 100644
index 42236c8c853..00000000000
--- a/spec/initializers/hangouts_chat_http_override_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'HangoutsChat::Sender Gitlab::HTTP override' do
- describe 'HangoutsChat::Sender::HTTP#post' do
- it 'calls Gitlab::HTTP.post with default protection settings' do
- webhook_url = 'https://example.gitlab.com'
- payload = { key: 'value' }
- http = HangoutsChat::Sender::HTTP.new(webhook_url)
- mock_response = double(response: 'the response')
-
- expect(Gitlab::HTTP).to receive(:post)
- .with(
- URI.parse(webhook_url),
- body: payload.to_json,
- headers: { 'Content-Type' => 'application/json' },
- parse: nil
- )
- .and_return(mock_response)
-
- expect(http.post(payload)).to eq(mock_response.response)
- end
-
- it_behaves_like 'a request using Gitlab::UrlBlocker' do
- let(:http_method) { :post }
- let(:url_blocked_error_class) { Gitlab::HTTP::BlockedUrlError }
-
- def make_request(uri)
- HangoutsChat::Sender::HTTP.new(uri).post({})
- end
- end
- end
-end
diff --git a/spec/models/integrations/hangouts_chat_spec.rb b/spec/models/integrations/hangouts_chat_spec.rb
index bcb80768ffb..a1ecfd436c2 100644
--- a/spec/models/integrations/hangouts_chat_spec.rb
+++ b/spec/models/integrations/hangouts_chat_spec.rb
@@ -4,7 +4,7 @@ require "spec_helper"
RSpec.describe Integrations::HangoutsChat, feature_category: :integrations do
it_behaves_like "chat integration", "Hangouts Chat" do
- let(:client) { HangoutsChat::Sender }
+ let(:client) { Gitlab::HTTP }
let(:client_arguments) { webhook_url }
let(:payload) do
{
diff --git a/spec/views/groups/show.html.haml_spec.rb b/spec/views/groups/show.html.haml_spec.rb
index c4142f4a245..e0ee60e9f91 100644
--- a/spec/views/groups/show.html.haml_spec.rb
+++ b/spec/views/groups/show.html.haml_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe 'groups/show', feature_category: :groups_and_projects do
describe 'group README' do
let_it_be(:group) { build_stubbed(:group) }
- let_it_be(:readme_project) { build_stubbed(:project, :readme) }
+ let_it_be(:readme_project) { build_stubbed(:project, :public, :readme) }
before do
assign(:group, group)
@@ -14,6 +14,7 @@ RSpec.describe 'groups/show', feature_category: :groups_and_projects do
context 'with readme project' do
before do
allow(group).to receive(:group_readme).and_return(readme_project)
+ allow(group).to receive(:readme_project).and_return(readme_project)
end
it 'renders #js-group-readme' do
@@ -21,11 +22,21 @@ RSpec.describe 'groups/show', feature_category: :groups_and_projects do
expect(rendered).to have_selector('#js-group-readme')
end
+
+ context 'with private readme project' do
+ let_it_be(:readme_project) { build_stubbed(:project, :private, :readme) }
+
+ it 'does not render #js-group-readme' do
+ render
+
+ expect(rendered).not_to have_selector('#js-group-readme')
+ end
+ end
end
context 'without readme project' do
before do
- allow(group).to receive(:group_readme).and_return(nil)
+ allow(group).to receive(:readme_project).and_return(nil)
end
it 'does not render #js-group-readme' do