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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-08-26 21:11:43 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-08-26 21:11:43 +0300
commitbc75527dca77b2b72331ac6cbd5928d5b8c0c419 (patch)
tree000196faadb05f6e2ff60c08865b1a09506e5522
parentc82ca12a1c5a359325cb45aaf01b483d1fa0efcb (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.gitignore508
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock4
-rw-r--r--app/assets/javascripts/blob/pipeline_tour_success_modal.vue45
-rw-r--r--app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue4
-rw-r--r--app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js1
-rw-r--r--app/assets/javascripts/blob_edit/blob_bundle.js5
-rw-r--r--app/assets/javascripts/logs/stores/getters.js14
-rw-r--r--app/assets/javascripts/monitoring/components/dashboards_dropdown.vue14
-rw-r--r--app/assets/stylesheets/_page_specific_files.scss66
-rw-r--r--app/assets/stylesheets/application.scss2
-rw-r--r--app/assets/stylesheets/framework/header.scss3
-rw-r--r--app/assets/stylesheets/page_bundles/_mixins_and_variables_and_functions.scss21
-rw-r--r--app/assets/stylesheets/page_bundles/todos.scss (renamed from app/assets/stylesheets/pages/todos.scss)2
-rw-r--r--app/models/clusters/cluster.rb1
-rw-r--r--app/models/concerns/storage/legacy_namespace.rb20
-rw-r--r--app/models/environment.rb2
-rw-r--r--app/models/snippet_input_action.rb2
-rw-r--r--app/serializers/cluster_entity.rb4
-rw-r--r--app/serializers/cluster_serializer.rb1
-rw-r--r--app/serializers/merge_request_widget_entity.rb1
-rw-r--r--app/views/dashboard/todos/index.html.haml1
-rw-r--r--app/views/layouts/_head.html.haml2
-rw-r--r--app/views/layouts/header/_default.html.haml2
-rw-r--r--app/views/projects/blob/_editor.html.haml1
-rw-r--r--app/views/projects/blob/_pipeline_tour_success.html.haml1
-rw-r--r--app/views/projects/blob/new.html.haml1
-rw-r--r--changelogs/unreleased/226989-remove-users-bio-column.yml5
-rw-r--r--changelogs/unreleased/239341-fj-allow-snippet-move-action-without-file-path.yml5
-rw-r--r--changelogs/unreleased/astoicescu-truncate-dashboards-dropdown-items.yml5
-rw-r--r--changelogs/unreleased/id-bump-marginalia-gem.yml5
-rw-r--r--changelogs/unreleased/mo-add-pipeline-artifacts-size-to-root-storage-statistics.yml5
-rw-r--r--changelogs/unreleased/mwaw232076-full-text-search-and-time-picker-is-not-be-available-for-manag.yml5
-rw-r--r--config/application.rb2
-rw-r--r--config/feature_flags/development/async_pages_move_namespace_rename.yml7
-rw-r--r--config/feature_flags/development/async_pages_move_namespace_transfer.yml7
-rw-r--r--db/migrate/20200825180050_add_pipeline_artifacts_size_to_root_storage_statistics.rb19
-rw-r--r--db/post_migrate/20200824130028_remove_index_on_users_bio.rb20
-rw-r--r--db/post_migrate/20200824130447_remove_users_bio_column.rb19
-rw-r--r--db/schema_migrations/202008241300281
-rw-r--r--db/schema_migrations/202008241304471
-rw-r--r--db/schema_migrations/202008251800501
-rw-r--r--db/structure.sql6
-rw-r--r--doc/.vale/gitlab/British.yml2
-rw-r--r--doc/administration/gitaly/praefect.md3
-rw-r--r--doc/development/fe_guide/development_process.md2
-rw-r--r--doc/development/testing_guide/best_practices.md26
-rw-r--r--doc/user/compliance/license_compliance/index.md3
-rw-r--r--doc/user/group/saml_sso/scim_setup.md35
-rw-r--r--lib/tasks/gitlab/assets.rake6
-rw-r--r--locale/gitlab.pot9
-rw-r--r--package.json2
-rwxr-xr-xscripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js36
-rw-r--r--spec/features/admin/admin_users_spec.rb2
-rw-r--r--spec/frontend/blob/pipeline_tour_success_mock_data.js1
-rw-r--r--spec/frontend/blob/pipeline_tour_success_modal_spec.js55
-rw-r--r--spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js2
-rw-r--r--spec/frontend/blob_edit/blob_bundle_spec.js3
-rw-r--r--spec/frontend/logs/mock_data.js2
-rw-r--r--spec/frontend/logs/stores/getters_spec.js48
-rw-r--r--spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap723
-rw-r--r--spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js4
-rw-r--r--spec/models/clusters/cluster_spec.rb1
-rw-r--r--spec/models/namespace_spec.rb68
-rw-r--r--spec/models/snippet_input_action_spec.rb6
-rw-r--r--spec/serializers/cluster_entity_spec.rb21
-rw-r--r--spec/serializers/cluster_serializer_spec.rb1
-rw-r--r--spec/serializers/merge_request_widget_entity_spec.rb17
-rw-r--r--spec/services/notification_service_spec.rb30
-rw-r--r--spec/services/snippets/update_service_spec.rb16
-rw-r--r--yarn.lock8
71 files changed, 1064 insertions, 911 deletions
diff --git a/.gitignore b/.gitignore
index 04384be78c4..46cb0ac6c23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -96,511 +96,3 @@ apollo.config.js
/tmp/matching_foss_tests.txt
ee/changelogs/unreleased-ee
-# Likely anything 2017 was removed in bac4d96dcfc, 381b706559b, or cfae6ec2647
-db/schema_migrations/2014*
-db/schema_migrations/2015*
-db/schema_migrations/2016*
-db/schema_migrations/2017*
-
-# Removed in 02ea9bc792b9236ea8854154ea5caef1a03b07b4
-db/schema_migrations/20171230123729
-db/schema_migrations/20180101160629
-db/schema_migrations/20180101160630
-db/schema_migrations/20180102220145
-db/schema_migrations/20180103123548
-db/schema_migrations/20180104131052
-db/schema_migrations/20180105212544
-db/schema_migrations/20180109183319
-db/schema_migrations/20180113220114
-db/schema_migrations/20180115094742
-db/schema_migrations/20180115113902
-db/schema_migrations/20180115201419
-db/schema_migrations/20180116193854
-db/schema_migrations/20180119121225
-db/schema_migrations/20180119135717
-db/schema_migrations/20180119160751
-db/schema_migrations/20180122154930
-db/schema_migrations/20180122162010
-db/schema_migrations/20180125214301
-db/schema_migrations/20180129193323
-db/schema_migrations/20180201102129
-db/schema_migrations/20180201110056
-db/schema_migrations/20180201145907
-db/schema_migrations/20180204200836
-db/schema_migrations/20180206200543
-db/schema_migrations/20180208183958
-db/schema_migrations/20180209115333
-db/schema_migrations/20180209165249
-db/schema_migrations/20180212030105
-db/schema_migrations/20180212101828
-db/schema_migrations/20180212101928
-db/schema_migrations/20180212102028
-db/schema_migrations/20180213131630
-db/schema_migrations/20180214093516
-db/schema_migrations/20180214155405
-db/schema_migrations/20180215181245
-db/schema_migrations/20180216120000
-db/schema_migrations/20180216120010
-db/schema_migrations/20180216120020
-db/schema_migrations/20180216120030
-db/schema_migrations/20180216120040
-db/schema_migrations/20180216120050
-db/schema_migrations/20180216121020
-db/schema_migrations/20180216121030
-db/schema_migrations/20180219153455
-db/schema_migrations/20180220150310
-db/schema_migrations/20180221151752
-db/schema_migrations/20180222043024
-db/schema_migrations/20180223120443
-db/schema_migrations/20180223124427
-db/schema_migrations/20180223144945
-db/schema_migrations/20180226050030
-db/schema_migrations/20180227182112
-db/schema_migrations/20180228172924
-db/schema_migrations/20180301010859
-db/schema_migrations/20180301084653
-db/schema_migrations/20180302152117
-db/schema_migrations/20180305095250
-db/schema_migrations/20180305100050
-db/schema_migrations/20180305144721
-db/schema_migrations/20180306074045
-db/schema_migrations/20180306134842
-db/schema_migrations/20180306164012
-db/schema_migrations/20180307012445
-db/schema_migrations/20180308052825
-db/schema_migrations/20180308125206
-db/schema_migrations/20180309121820
-db/schema_migrations/20180309160427
-db/schema_migrations/20180314100728
-db/schema_migrations/20180314145917
-db/schema_migrations/20180315160435
-db/schema_migrations/20180319190020
-db/schema_migrations/20180320182229
-db/schema_migrations/20180323150945
-db/schema_migrations/20180326202229
-db/schema_migrations/20180327101207
-db/schema_migrations/20180330121048
-db/schema_migrations/20180403035759
-db/schema_migrations/20180405101928
-db/schema_migrations/20180405142733
-db/schema_migrations/20180408143354
-db/schema_migrations/20180408143355
-db/schema_migrations/20180409170809
-db/schema_migrations/20180413022611
-db/schema_migrations/20180416155103
-db/schema_migrations/20180417090132
-db/schema_migrations/20180417101040
-db/schema_migrations/20180417101940
-db/schema_migrations/20180418053107
-db/schema_migrations/20180420010016
-db/schema_migrations/20180420010616
-db/schema_migrations/20180420080616
-db/schema_migrations/20180423204600
-db/schema_migrations/20180424090541
-db/schema_migrations/20180424134533
-db/schema_migrations/20180424151928
-db/schema_migrations/20180424160449
-db/schema_migrations/20180425075446
-db/schema_migrations/20180425131009
-db/schema_migrations/20180425205249
-db/schema_migrations/20180426102016
-db/schema_migrations/20180430101916
-db/schema_migrations/20180430143705
-db/schema_migrations/20180502122856
-db/schema_migrations/20180503131624
-db/schema_migrations/20180503141722
-db/schema_migrations/20180503150427
-db/schema_migrations/20180503175053
-db/schema_migrations/20180503175054
-db/schema_migrations/20180503193542
-db/schema_migrations/20180503193953
-db/schema_migrations/20180503200320
-db/schema_migrations/20180504195842
-db/schema_migrations/20180507083701
-db/schema_migrations/20180508055821
-db/schema_migrations/20180508100222
-db/schema_migrations/20180508102840
-db/schema_migrations/20180508135515
-db/schema_migrations/20180511090724
-db/schema_migrations/20180511131058
-db/schema_migrations/20180511174224
-db/schema_migrations/20180512061621
-db/schema_migrations/20180514161336
-db/schema_migrations/20180515005612
-db/schema_migrations/20180515121227
-db/schema_migrations/20180517082340
-db/schema_migrations/20180523042841
-db/schema_migrations/20180523125103
-db/schema_migrations/20180524132016
-db/schema_migrations/20180529093006
-db/schema_migrations/20180529152628
-db/schema_migrations/20180530135500
-db/schema_migrations/20180531185349
-db/schema_migrations/20180531220618
-db/schema_migrations/20180601213245
-db/schema_migrations/20180603190921
-db/schema_migrations/20180604123514
-db/schema_migrations/20180607071808
-db/schema_migrations/20180608091413
-db/schema_migrations/20180608110058
-db/schema_migrations/20180608201435
-db/schema_migrations/20180612103626
-db/schema_migrations/20180613081317
-db/schema_migrations/20180625113853
-db/schema_migrations/20180626125654
-db/schema_migrations/20180628124813
-db/schema_migrations/20180629153018
-db/schema_migrations/20180629191052
-db/schema_migrations/20180702120647
-db/schema_migrations/20180702124358
-db/schema_migrations/20180702134423
-db/schema_migrations/20180704145007
-db/schema_migrations/20180704204006
-db/schema_migrations/20180705160945
-db/schema_migrations/20180706223200
-db/schema_migrations/20180710162338
-db/schema_migrations/20180711103851
-db/schema_migrations/20180711103922
-db/schema_migrations/20180713092803
-db/schema_migrations/20180717125853
-db/schema_migrations/20180718005113
-db/schema_migrations/20180720023512
-db/schema_migrations/20180722103201
-db/schema_migrations/20180723135214
-db/schema_migrations/20180726172057
-db/schema_migrations/20180807153545
-db/schema_migrations/20180808162000
-db/schema_migrations/20180809195358
-db/schema_migrations/20180813101999
-db/schema_migrations/20180813102000
-db/schema_migrations/20180814153625
-db/schema_migrations/20180815040323
-db/schema_migrations/20180815160409
-db/schema_migrations/20180815170510
-db/schema_migrations/20180815175440
-db/schema_migrations/20180816161409
-db/schema_migrations/20180816193530
-db/schema_migrations/20180824202952
-db/schema_migrations/20180826111825
-db/schema_migrations/20180831164905
-db/schema_migrations/20180831164907
-db/schema_migrations/20180831164908
-db/schema_migrations/20180831164909
-db/schema_migrations/20180831164910
-db/schema_migrations/20180901171833
-db/schema_migrations/20180901200537
-db/schema_migrations/20180902070406
-db/schema_migrations/20180906101639
-db/schema_migrations/20180907015926
-db/schema_migrations/20180910115836
-db/schema_migrations/20180910153412
-db/schema_migrations/20180910153413
-db/schema_migrations/20180912111628
-db/schema_migrations/20180913142237
-db/schema_migrations/20180914162043
-db/schema_migrations/20180914201132
-db/schema_migrations/20180916011959
-db/schema_migrations/20180917172041
-db/schema_migrations/20180924141949
-db/schema_migrations/20180924190739
-db/schema_migrations/20180924201039
-db/schema_migrations/20180925200829
-db/schema_migrations/20180927073410
-db/schema_migrations/20181002172433
-db/schema_migrations/20181005110927
-db/schema_migrations/20181005125926
-db/schema_migrations/20181006004100
-db/schema_migrations/20181008145341
-db/schema_migrations/20181008145359
-db/schema_migrations/20181008200441
-db/schema_migrations/20181009190428
-db/schema_migrations/20181010133639
-db/schema_migrations/20181010235606
-db/schema_migrations/20181013005024
-db/schema_migrations/20181014203236
-db/schema_migrations/20181015155839
-db/schema_migrations/20181016141739
-db/schema_migrations/20181016152238
-db/schema_migrations/20181017001059
-db/schema_migrations/20181019032400
-db/schema_migrations/20181019032408
-db/schema_migrations/20181019105553
-db/schema_migrations/20181022135539
-db/schema_migrations/20181022173835
-db/schema_migrations/20181023104858
-db/schema_migrations/20181023144439
-db/schema_migrations/20181025115728
-db/schema_migrations/20181026091631
-db/schema_migrations/20181026143227
-db/schema_migrations/20181027114222
-db/schema_migrations/20181028120717
-db/schema_migrations/20181030135124
-db/schema_migrations/20181030154446
-db/schema_migrations/20181031145139
-db/schema_migrations/20181031190558
-db/schema_migrations/20181031190559
-db/schema_migrations/20181101091005
-db/schema_migrations/20181101091124
-db/schema_migrations/20181101144347
-db/schema_migrations/20181101191341
-db/schema_migrations/20181105201455
-db/schema_migrations/20181106135939
-db/schema_migrations/20181107054254
-db/schema_migrations/20181108091549
-db/schema_migrations/20181112103239
-db/schema_migrations/20181115140140
-db/schema_migrations/20181116050532
-db/schema_migrations/20181116141415
-db/schema_migrations/20181116141504
-db/schema_migrations/20181119081539
-db/schema_migrations/20181119132520
-db/schema_migrations/20181120082911
-db/schema_migrations/20181120091639
-db/schema_migrations/20181120151656
-db/schema_migrations/20181121101842
-db/schema_migrations/20181121101843
-db/schema_migrations/20181121111200
-db/schema_migrations/20181122160027
-db/schema_migrations/20181123042307
-db/schema_migrations/20181123135036
-db/schema_migrations/20181123144235
-db/schema_migrations/20181126150622
-db/schema_migrations/20181126153547
-db/schema_migrations/20181128123704
-db/schema_migrations/20181129104854
-db/schema_migrations/20181129104944
-db/schema_migrations/20181130102132
-db/schema_migrations/20181203002526
-db/schema_migrations/20181205171941
-db/schema_migrations/20181211092510
-db/schema_migrations/20181211092514
-db/schema_migrations/20181212104941
-db/schema_migrations/20181212171634
-db/schema_migrations/20181219130552
-db/schema_migrations/20181219145520
-db/schema_migrations/20181219145521
-# Removed in 71a3b0e470c64fccbb902390b1f856ee1547a978
-db/schema_migrations/20190225160300
-# Removed in 44f9d16edca328e5bb234b853f0d670ee0b30a26
-db/schema_migrations/20200615101135
-# Removed in cfae6ec2647
-db/schema_migrations/20180502134117
-db/schema_migrations/20180521162137
-db/schema_migrations/20180619121030
-db/schema_migrations/20180723130817
-db/schema_migrations/20180906051323
-db/schema_migrations/20180913051323
-db/schema_migrations/20180916014356
-db/schema_migrations/20181014121030
-db/schema_migrations/20181204154019
-db/schema_migrations/20180103234731
-db/schema_migrations/20180104001824
-db/schema_migrations/20180105233807
-db/schema_migrations/20180109150457
-db/schema_migrations/20180115013218
-db/schema_migrations/20180126165535
-db/schema_migrations/20180131104538
-db/schema_migrations/20180201101405
-db/schema_migrations/20180201192230
-db/schema_migrations/20180206184810
-db/schema_migrations/20180215143644
-db/schema_migrations/20180225180932
-db/schema_migrations/20180302230551
-db/schema_migrations/20180307164427
-db/schema_migrations/20180308234102
-db/schema_migrations/20180314174825
-db/schema_migrations/20180317020334
-db/schema_migrations/20180320142552
-db/schema_migrations/20180325034910
-db/schema_migrations/20180329230151
-db/schema_migrations/20180401213713
-db/schema_migrations/20180416112831
-db/schema_migrations/20180416205949
-db/schema_migrations/20180419031622
-db/schema_migrations/20180419171038
-db/schema_migrations/20180423165301
-db/schema_migrations/20180502124117
-db/schema_migrations/20180502125859
-db/schema_migrations/20180503154922
-db/schema_migrations/20180520211048
-db/schema_migrations/20180524115107
-db/schema_migrations/20180531031410
-db/schema_migrations/20180531221734
-db/schema_migrations/20180607154422
-db/schema_migrations/20180607154516
-db/schema_migrations/20180607154645
-db/schema_migrations/20180612175636
-db/schema_migrations/20180615152524
-db/schema_migrations/20180621100024
-db/schema_migrations/20180621100025
-db/schema_migrations/20180623053658
-db/schema_migrations/20180626171125
-db/schema_migrations/20180702114215
-db/schema_migrations/20180702181530
-db/schema_migrations/20180709153607
-db/schema_migrations/20180709183353
-db/schema_migrations/20180709184533
-db/schema_migrations/20180711014025
-db/schema_migrations/20180711014026
-db/schema_migrations/20180718100455
-db/schema_migrations/20180719161844
-db/schema_migrations/20180720082636
-db/schema_migrations/20180720120716
-db/schema_migrations/20180720120726
-db/schema_migrations/20180720121404
-db/schema_migrations/20180723023517
-db/schema_migrations/20180723081631
-db/schema_migrations/20180723134433
-db/schema_migrations/20180724161450
-db/schema_migrations/20180803001726
-db/schema_migrations/20180803041220
-db/schema_migrations/20180806145747
-db/schema_migrations/20180823132905
-db/schema_migrations/20180831134049
-db/schema_migrations/20180831152625
-db/schema_migrations/20180910104020
-db/schema_migrations/20180910105100
-db/schema_migrations/20180912113336
-db/schema_migrations/20180917145556
-db/schema_migrations/20180917171038
-db/schema_migrations/20180917171533
-db/schema_migrations/20180917171534
-db/schema_migrations/20180917171535
-db/schema_migrations/20180917213751
-db/schema_migrations/20180917214204
-db/schema_migrations/20180920043317
-db/schema_migrations/20180924070647
-db/schema_migrations/20180926101838
-db/schema_migrations/20180926140319
-db/schema_migrations/20180930171532
-db/schema_migrations/20181001172126
-db/schema_migrations/20181001172651
-db/schema_migrations/20181004131020
-db/schema_migrations/20181004131025
-db/schema_migrations/20181012151642
-db/schema_migrations/20181017131623
-db/schema_migrations/20181022131445
-db/schema_migrations/20181025000427
-db/schema_migrations/20181025030732
-db/schema_migrations/20181026085436
-db/schema_migrations/20181028092114
-db/schema_migrations/20181028092115
-db/schema_migrations/20181105122803
-db/schema_migrations/20181114163403
-db/schema_migrations/20181121174028
-db/schema_migrations/20181121175359
-db/schema_migrations/20181123090058
-db/schema_migrations/20181123100058
-db/schema_migrations/20181126125616
-db/schema_migrations/20181127130125
-db/schema_migrations/20181127133629
-db/schema_migrations/20181127203117
-db/schema_migrations/20181201151856
-db/schema_migrations/20181203154104
-db/schema_migrations/20181204031328
-db/schema_migrations/20181204031329
-db/schema_migrations/20181204031330
-db/schema_migrations/20181204031331
-db/schema_migrations/20181204135519
-db/schema_migrations/20181204135932
-db/schema_migrations/20181205093951
-db/schema_migrations/20181206121338
-db/schema_migrations/20181220163029
-db/schema_migrations/20181221135205
-db/schema_migrations/20181228140935
-db/schema_migrations/20190110200434
-db/schema_migrations/20190111183834
-db/schema_migrations/20190114040404
-db/schema_migrations/20190114040405
-db/schema_migrations/20190121140418
-db/schema_migrations/20190121140658
-db/schema_migrations/20190122101816
-db/schema_migrations/20190123211816
-db/schema_migrations/20190128104236
-db/schema_migrations/20190128172533
-db/schema_migrations/20190129013538
-db/schema_migrations/20190130164903
-db/schema_migrations/20190218031401
-db/schema_migrations/20190218144405
-db/schema_migrations/20190219134239
-db/schema_migrations/20190219210244
-db/schema_migrations/20190220112238
-db/schema_migrations/20190222105948
-db/schema_migrations/20190222110418
-db/schema_migrations/20190225173106
-db/schema_migrations/20190226154144
-db/schema_migrations/20190228134845
-db/schema_migrations/20190301095211
-db/schema_migrations/20190301182031
-db/schema_migrations/20190302144241
-db/schema_migrations/20190304020812
-db/schema_migrations/20190304223216
-db/schema_migrations/20190304223220
-db/schema_migrations/20190305162221
-db/schema_migrations/20190318020549
-db/schema_migrations/20190318021429
-db/schema_migrations/20190318120957
-db/schema_migrations/20190320162221
-db/schema_migrations/20190321103531
-db/schema_migrations/20190322145954
-db/schema_migrations/20190327085945
-db/schema_migrations/20190328210840
-db/schema_migrations/20190401150745
-db/schema_migrations/20190401150746
-db/schema_migrations/20190402112450
-db/schema_migrations/20180309215236
-db/schema_migrations/20180314172513
-db/schema_migrations/20180417102933
-db/schema_migrations/20180502130136
-db/schema_migrations/20180509091305
-db/schema_migrations/20180605213516
-db/schema_migrations/20180608150653
-db/schema_migrations/20180618193715
-db/schema_migrations/20180713171825
-db/schema_migrations/20180815043102
-db/schema_migrations/20180914195058
-db/schema_migrations/20181014131030
-db/schema_migrations/20181115140251
-db/schema_migrations/20181116100917
-db/schema_migrations/20181204040404
-db/schema_migrations/20181206121340
-db/schema_migrations/20181215161939
-db/schema_migrations/20181220165848
-db/schema_migrations/20190111231855
-# Removed in ef1efa0f650
-db/schema_migrations/20180406204716
-db/schema_migrations/20180521171529
-db/schema_migrations/20180831164904
-# Removed in 28ac2d30498
-db/schema_migrations/20180202111106
-# Removed in b87dcc238a8
-db/schema_migrations/20181218192239
-
-# Removed in various revert commits
-db/schema_migrations/20180115094742
-db/schema_migrations/20180115113902
-db/schema_migrations/20190107151029
-db/schema_migrations/20190114184258
-db/schema_migrations/20190228092516
-db/schema_migrations/20190311132500
-db/schema_migrations/20190311132527
-db/schema_migrations/20190703001116
-db/schema_migrations/20190703001120
-db/schema_migrations/20190724091326
-db/schema_migrations/20190801072937
-db/schema_migrations/20191004134055
-db/schema_migrations/20191029060358
-db/schema_migrations/20191029061556
-db/schema_migrations/20191220102807
-db/schema_migrations/20200123092602
-db/schema_migrations/20200123101859
-db/schema_migrations/20200127111953
-db/schema_migrations/20200127131953
-db/schema_migrations/20200127141953
-db/schema_migrations/20200127151953
-db/schema_migrations/20200206111847
-db/schema_migrations/20200214173000
-db/schema_migrations/20200214174519
-db/schema_migrations/20200214174607
-db/schema_migrations/20200309105539
-db/schema_migrations/20200615203153
diff --git a/Gemfile b/Gemfile
index 1bf60a4098d..0af2bff4f2a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -22,7 +22,7 @@ gem 'rugged', '~> 0.28'
gem 'grape-path-helpers', '~> 1.3'
gem 'faraday', '~> 0.12'
-gem 'marginalia', '~> 1.8.0'
+gem 'marginalia', '~> 1.9.0'
# Authentication libraries
gem 'devise', '~> 4.6'
diff --git a/Gemfile.lock b/Gemfile.lock
index d36f9b70ca8..d71e4249577 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -669,7 +669,7 @@ GEM
mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
- marginalia (1.8.0)
+ marginalia (1.9.0)
actionpack (>= 2.3)
activerecord (>= 2.3)
memoist (0.16.0)
@@ -1358,7 +1358,7 @@ DEPENDENCIES
loofah (~> 2.2)
lru_redux
mail (= 2.7.1)
- marginalia (~> 1.8.0)
+ marginalia (~> 1.9.0)
memory_profiler (~> 0.9)
method_source (~> 0.8)
mimemagic (~> 0.3.2)
diff --git a/app/assets/javascripts/blob/pipeline_tour_success_modal.vue b/app/assets/javascripts/blob/pipeline_tour_success_modal.vue
index 90eafb75758..411241b72d5 100644
--- a/app/assets/javascripts/blob/pipeline_tour_success_modal.vue
+++ b/app/assets/javascripts/blob/pipeline_tour_success_modal.vue
@@ -1,5 +1,5 @@
<script>
-import { GlModal, GlSprintf, GlLink } from '@gitlab/ui';
+import { GlModal, GlSprintf, GlLink, GlButton } from '@gitlab/ui';
import Cookies from 'js-cookie';
import { sprintf, s__, __ } from '~/locale';
import { glEmojiTag } from '~/emoji';
@@ -18,6 +18,8 @@ export default {
helpMessage: s__(
`MR widget|Take a look at our %{beginnerLinkStart}Beginner's Guide to Continuous Integration%{beginnerLinkEnd} and our %{exampleLinkStart}examples of GitLab CI/CD%{exampleLinkEnd} to learn more.`,
),
+ pipelinesButton: s__('MR widget|See your pipeline in action'),
+ mergeRequestButton: s__('MR widget|Back to the Merge request'),
modalTitle: sprintf(
__("That's it, well done!%{celebrate}"),
{
@@ -25,11 +27,13 @@ export default {
},
false,
),
- goToTrackValue: 10,
+ goToTrackValuePipelines: 10,
+ goToTrackValueMergeRequest: 20,
trackEvent: 'click_button',
components: {
GlModal,
GlSprintf,
+ GlButton,
GlLink,
},
mixins: [trackingMixin],
@@ -38,6 +42,11 @@ export default {
type: String,
required: true,
},
+ projectMergeRequestsPath: {
+ type: String,
+ required: false,
+ default: '',
+ },
commitCookie: {
type: String,
required: true,
@@ -59,6 +68,15 @@ export default {
property: this.humanAccess,
};
},
+ goToMergeRequestPath() {
+ return this.commitCookiePath || this.projectMergeRequestsPath;
+ },
+ commitCookiePath() {
+ const cookieVal = Cookies.get(this.commitCookie);
+
+ if (cookieVal !== 'true') return cookieVal;
+ return '';
+ },
},
mounted() {
this.track();
@@ -100,17 +118,28 @@ export default {
</template>
</gl-sprintf>
<template #modal-footer>
- <a
- ref="goto"
+ <gl-button
+ v-if="projectMergeRequestsPath"
+ ref="goToMergeRequest"
+ :href="goToMergeRequestPath"
+ :data-track-property="humanAccess"
+ :data-track-value="$options.goToTrackValueMergeRequest"
+ :data-track-event="$options.trackEvent"
+ :data-track-label="trackLabel"
+ >
+ {{ $options.mergeRequestButton }}
+ </gl-button>
+ <gl-button
+ ref="goToPipelines"
:href="goToPipelinesPath"
- class="btn btn-success"
+ variant="success"
:data-track-property="humanAccess"
- :data-track-value="$options.goToTrackValue"
+ :data-track-value="$options.goToTrackValuePipelines"
:data-track-event="$options.trackEvent"
:data-track-label="trackLabel"
>
- {{ __('See your pipeline in action') }}
- </a>
+ {{ $options.pipelinesButton }}
+ </gl-button>
</template>
</gl-modal>
</template>
diff --git a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue
index cda73ae9426..9251af01aff 100644
--- a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue
+++ b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue
@@ -50,6 +50,10 @@ export default {
type: String,
required: true,
},
+ mergeRequestPath: {
+ type: String,
+ required: true,
+ },
},
data() {
return {
diff --git a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js
index 3b67b3dd259..55edb852ee6 100644
--- a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js
+++ b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js
@@ -10,6 +10,7 @@ export default el =>
target: el.dataset.target,
trackLabel: el.dataset.trackLabel,
dismissKey: el.dataset.dismissKey,
+ mergeRequestPath: el.dataset.mergeRequestPath,
humanAccess: el.dataset.humanAccess,
},
});
diff --git a/app/assets/javascripts/blob_edit/blob_bundle.js b/app/assets/javascripts/blob_edit/blob_bundle.js
index 89a4b6ec3e3..c9972f0b43c 100644
--- a/app/assets/javascripts/blob_edit/blob_bundle.js
+++ b/app/assets/javascripts/blob_edit/blob_bundle.js
@@ -67,12 +67,15 @@ export default () => {
if (commitButton) {
const { dismissKey, humanAccess } = suggestEl.dataset;
+ const urlParams = new URLSearchParams(window.location.search);
+ const mergeRequestPath = urlParams.get('mr_path') || true;
+
const commitCookieName = `suggest_gitlab_ci_yml_commit_${dismissKey}`;
const commitTrackLabel = 'suggest_gitlab_ci_yml_commit_changes';
const commitTrackValue = '20';
commitButton.addEventListener('click', () => {
- setCookie(commitCookieName, true);
+ setCookie(commitCookieName, mergeRequestPath);
Tracking.event(undefined, 'click_button', {
label: commitTrackLabel,
diff --git a/app/assets/javascripts/logs/stores/getters.js b/app/assets/javascripts/logs/stores/getters.js
index d92969c5389..dc392af8381 100644
--- a/app/assets/javascripts/logs/stores/getters.js
+++ b/app/assets/javascripts/logs/stores/getters.js
@@ -6,8 +6,16 @@ const mapTrace = ({ timestamp = null, pod = '', message = '' }) =>
export const trace = state => state.logs.lines.map(mapTrace).join('\n');
export const showAdvancedFilters = state => {
- const environment = state.environments.options.find(
- ({ name }) => name === state.environments.current,
+ if (state.environments.current) {
+ const environment = state.environments.options.find(
+ ({ name }) => name === state.environments.current,
+ );
+
+ return Boolean(environment?.enable_advanced_logs_querying);
+ }
+ const managedApp = state.managedApps.options.find(
+ ({ name }) => name === state.managedApps.current,
);
- return Boolean(environment?.enable_advanced_logs_querying);
+
+ return Boolean(managedApp?.enable_advanced_logs_querying);
};
diff --git a/app/assets/javascripts/monitoring/components/dashboards_dropdown.vue b/app/assets/javascripts/monitoring/components/dashboards_dropdown.vue
index aed27b5ea51..dd15d1e2804 100644
--- a/app/assets/javascripts/monitoring/components/dashboards_dropdown.vue
+++ b/app/assets/javascripts/monitoring/components/dashboards_dropdown.vue
@@ -95,12 +95,10 @@ export default {
@click="selectDashboard(dashboard)"
>
<div class="gl-display-flex">
- <div class="gl-flex-grow-1 gl-min-w-0">
- <div class="gl-word-break-all">
- {{ dashboardDisplayName(dashboard) }}
- </div>
- </div>
- <gl-icon class="text-muted gl-flex-shrink-0" name="star" />
+ <span class="gl-flex-grow-1 gl-min-w-0 gl-overflow-hidden gl-overflow-wrap-break">
+ {{ dashboardDisplayName(dashboard) }}
+ </span>
+ <gl-icon class="text-muted gl-flex-shrink-0 gl-ml-3 gl-align-self-center" name="star" />
</div>
</gl-new-dropdown-item>
<gl-new-dropdown-divider
@@ -115,7 +113,9 @@ export default {
:is-checked="dashboard.path === selectedDashboardPath"
@click="selectDashboard(dashboard)"
>
- {{ dashboardDisplayName(dashboard) }}
+ <span class="gl-overflow-hidden gl-overflow-wrap-break">
+ {{ dashboardDisplayName(dashboard) }}
+ </span>
</gl-new-dropdown-item>
</div>
diff --git a/app/assets/stylesheets/_page_specific_files.scss b/app/assets/stylesheets/_page_specific_files.scss
new file mode 100644
index 00000000000..6818c8df6db
--- /dev/null
+++ b/app/assets/stylesheets/_page_specific_files.scss
@@ -0,0 +1,66 @@
+@import './pages/admin';
+@import './pages/alert_management/details';
+@import './pages/alert_management/severity-icons';
+@import './pages/boards';
+@import './pages/branches';
+@import './pages/builds';
+@import './pages/ci_projects';
+@import './pages/clusters';
+@import './pages/commits';
+@import './pages/cycle_analytics';
+@import './pages/deploy_keys';
+@import './pages/detail_page';
+@import './pages/dev_ops_score';
+@import './pages/diff';
+@import './pages/editor';
+@import './pages/environment_logs';
+@import './pages/environments';
+@import './pages/error_details';
+@import './pages/error_list';
+@import './pages/error_tracking_list';
+@import './pages/events';
+@import './pages/experience_level';
+@import './pages/experimental_separate_sign_up';
+@import './pages/graph';
+@import './pages/groups';
+@import './pages/help';
+@import './pages/import';
+@import './pages/incident_management_list';
+@import './pages/issuable';
+@import './pages/issues/issue_count_badge';
+@import './pages/issues/issues_list';
+@import './pages/issues';
+@import './pages/labels';
+@import './pages/login';
+@import './pages/members';
+@import './pages/merge_conflicts';
+@import './pages/merge_requests';
+@import './pages/milestone';
+@import './pages/monitor';
+@import './pages/note_form';
+@import './pages/notes';
+@import './pages/notifications';
+@import './pages/packages';
+@import './pages/pages';
+@import './pages/pipeline_schedules';
+@import './pages/pipelines';
+@import './pages/profile';
+@import './pages/profiles/preferences';
+@import './pages/projects';
+@import './pages/prometheus';
+@import './pages/reports';
+@import './pages/runners';
+@import './pages/search';
+@import './pages/serverless';
+@import './pages/service_desk';
+@import './pages/settings';
+@import './pages/settings_ci_cd';
+@import './pages/sherlock';
+@import './pages/status';
+@import './pages/storage_quota';
+@import './pages/tags';
+@import './pages/tree';
+@import './pages/trials';
+@import './pages/ui_dev_kit';
+@import './pages/users';
+@import './pages/wiki';
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 92c63ec9e2a..8acd338fff8 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -22,7 +22,7 @@
@import 'fontawesome_custom';
// Page specific styles (issues, projects etc):
-@import 'pages/**/*';
+@import 'page_specific_files';
// Component specific styles, will be moved to gitlab-ui
@import 'components/**/*';
diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss
index 50628c7de82..56b1e7c9f1d 100644
--- a/app/assets/stylesheets/framework/header.scss
+++ b/app/assets/stylesheets/framework/header.scss
@@ -235,9 +235,8 @@
border-top-left-radius: 0;
border-bottom-left-radius: 0;
- i {
+ svg {
color: $orange-500;
- font-size: 20px;
}
}
}
diff --git a/app/assets/stylesheets/page_bundles/_mixins_and_variables_and_functions.scss b/app/assets/stylesheets/page_bundles/_mixins_and_variables_and_functions.scss
new file mode 100644
index 00000000000..0e8ea5e2d52
--- /dev/null
+++ b/app/assets/stylesheets/page_bundles/_mixins_and_variables_and_functions.scss
@@ -0,0 +1,21 @@
+/**
+ This file contains only imports of Bootstrap, GitLab UI and GitLab mixins,
+ variables and functions, in the correct order.
+
+ It is meant to be used in page_bundles, but SHOULD NOT introduce any
+ styles of it's own. We actually check in CI that compiling _this_ file doesn't
+ result in any additional styles.
+
+ See: scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js
+ */
+@import 'framework/variables';
+@import 'framework/variables_overrides';
+@import 'framework/mixins';
+
+@import 'bootstrap/scss/functions';
+@import 'bootstrap/scss/variables';
+@import 'bootstrap/scss/mixins';
+
+@import '@gitlab/ui/src/scss/functions';
+@import '@gitlab/ui/src/scss/variables';
+@import '@gitlab/ui/src/scss/utility-mixins/index';
diff --git a/app/assets/stylesheets/pages/todos.scss b/app/assets/stylesheets/page_bundles/todos.scss
index 4a5a1478686..062994e7f51 100644
--- a/app/assets/stylesheets/pages/todos.scss
+++ b/app/assets/stylesheets/page_bundles/todos.scss
@@ -1,3 +1,5 @@
+@import 'mixins_and_variables_and_functions';
+
/**
* Dashboard Todos
*
diff --git a/app/models/clusters/cluster.rb b/app/models/clusters/cluster.rb
index 63aebdf1bdb..b94ec3c6dea 100644
--- a/app/models/clusters/cluster.rb
+++ b/app/models/clusters/cluster.rb
@@ -99,6 +99,7 @@ module Clusters
delegate :available?, to: :application_ingress, prefix: true, allow_nil: true
delegate :available?, to: :application_prometheus, prefix: true, allow_nil: true
delegate :available?, to: :application_knative, prefix: true, allow_nil: true
+ delegate :available?, to: :application_elastic_stack, prefix: true, allow_nil: true
delegate :external_ip, to: :application_ingress, prefix: true, allow_nil: true
delegate :external_hostname, to: :application_ingress, prefix: true, allow_nil: true
diff --git a/app/models/concerns/storage/legacy_namespace.rb b/app/models/concerns/storage/legacy_namespace.rb
index 250889fdf8b..42159a8349f 100644
--- a/app/models/concerns/storage/legacy_namespace.rb
+++ b/app/models/concerns/storage/legacy_namespace.rb
@@ -23,10 +23,26 @@ module Storage
former_parent_full_path = parent_was&.full_path
parent_full_path = parent&.full_path
Gitlab::UploadsTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path)
- Gitlab::PagesTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path)
+
+ if ::Feature.enabled?(:async_pages_move_namespace_transfer, self)
+ run_after_commit do
+ Gitlab::PagesTransfer.new.async.move_namespace(path, former_parent_full_path, parent_full_path)
+ end
+ else
+ Gitlab::PagesTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path)
+ end
else
Gitlab::UploadsTransfer.new.rename_namespace(full_path_before_last_save, full_path)
- Gitlab::PagesTransfer.new.rename_namespace(full_path_before_last_save, full_path)
+
+ if ::Feature.enabled?(:async_pages_move_namespace_rename, self)
+ full_path_was = full_path_before_last_save
+
+ run_after_commit do
+ Gitlab::PagesTransfer.new.async.rename_namespace(full_path_was, full_path)
+ end
+ else
+ Gitlab::PagesTransfer.new.rename_namespace(full_path_before_last_save, full_path)
+ end
end
# If repositories moved successfully we need to
diff --git a/app/models/environment.rb b/app/models/environment.rb
index c6a08c996da..cfdcb0499e6 100644
--- a/app/models/environment.rb
+++ b/app/models/environment.rb
@@ -371,7 +371,7 @@ class Environment < ApplicationRecord
end
def elastic_stack_available?
- !!deployment_platform&.cluster&.application_elastic_stack&.available?
+ !!deployment_platform&.cluster&.application_elastic_stack_available?
end
private
diff --git a/app/models/snippet_input_action.rb b/app/models/snippet_input_action.rb
index cc6373264cc..b5362b5c14e 100644
--- a/app/models/snippet_input_action.rb
+++ b/app/models/snippet_input_action.rb
@@ -15,7 +15,7 @@ class SnippetInputAction
validates :action, inclusion: { in: ACTIONS, message: "%{value} is not a valid action" }
validates :previous_path, presence: true, if: :move_action?
- validates :file_path, presence: true, unless: :create_action?
+ validates :file_path, presence: true, if: -> (action) { action.update_action? || action.delete_action? }
validates :content, presence: true, if: -> (action) { action.create_action? || action.update_action? }
validate :ensure_same_file_path_and_previous_path, if: :update_action?
validate :ensure_different_file_path_and_previous_path, if: :move_action?
diff --git a/app/serializers/cluster_entity.rb b/app/serializers/cluster_entity.rb
index 06e14179238..eea0acdc11b 100644
--- a/app/serializers/cluster_entity.rb
+++ b/app/serializers/cluster_entity.rb
@@ -24,4 +24,8 @@ class ClusterEntity < Grape::Entity
expose :kubernetes_errors do |cluster|
ClusterErrorEntity.new(cluster)
end
+
+ expose :enable_advanced_logs_querying do |cluster|
+ cluster.application_elastic_stack_available?
+ end
end
diff --git a/app/serializers/cluster_serializer.rb b/app/serializers/cluster_serializer.rb
index a70458d2bcb..700a46040e3 100644
--- a/app/serializers/cluster_serializer.rb
+++ b/app/serializers/cluster_serializer.rb
@@ -11,6 +11,7 @@ class ClusterSerializer < BaseSerializer
:enabled,
:environment_scope,
:gitlab_managed_apps_logs_path,
+ :enable_advanced_logs_querying,
:kubernetes_errors,
:name,
:nodes,
diff --git a/app/serializers/merge_request_widget_entity.rb b/app/serializers/merge_request_widget_entity.rb
index b7b9e7d1036..494192c8dbb 100644
--- a/app/serializers/merge_request_widget_entity.rb
+++ b/app/serializers/merge_request_widget_entity.rb
@@ -62,6 +62,7 @@ class MergeRequestWidgetEntity < Grape::Entity
merge_request.source_branch,
file_name: '.gitlab-ci.yml',
commit_message: s_("CommitMessage|Add %{file_name}") % { file_name: Gitlab::FileDetector::PATTERNS[:gitlab_ci] },
+ mr_path: merge_request_path(merge_request),
suggest_gitlab_ci_yml: true
)
end
diff --git a/app/views/dashboard/todos/index.html.haml b/app/views/dashboard/todos/index.html.haml
index 9b6150c4be2..939a67d1384 100644
--- a/app/views/dashboard/todos/index.html.haml
+++ b/app/views/dashboard/todos/index.html.haml
@@ -3,6 +3,7 @@
- header_title _("To-Do List"), dashboard_todos_path
= render_dashboard_gold_trial(current_user)
+= stylesheet_link_tag 'page_bundles/todos'
.page-title-holder.d-flex.align-items-center
%h1.page-title= _('To-Do List')
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index 973b79f4f64..aee8eb02af5 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -68,7 +68,7 @@
= yield :page_specific_javascripts
= webpack_controller_bundle_tags
- = webpack_bundle_tag "chrome_84_icon_fix" if browser.chrome?([">=84", "<85"]) || browser.edge?([">=84", "<85"])
+ = webpack_bundle_tag "chrome_84_icon_fix" if browser.chrome?([">=84", "<84.0.4147.125"]) || browser.edge?([">=84", "<84.0.522.59"])
= yield :project_javascripts
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index 8a05768109b..a6fc50ffa0b 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -87,7 +87,7 @@
- if has_impersonation_link
%li.nav-item.impersonation.ml-0
= link_to admin_impersonation_path, class: 'nav-link impersonation-btn', method: :delete, title: _('Stop impersonation'), aria: { label: _('Stop impersonation') }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body', qa_selector: 'stop_impersonation_link' } do
- = icon('user-secret')
+ = sprite_icon('incognito', size: 18)
- if header_link?(:sign_in)
%li.nav-item
%div
diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml
index 787dc3b030f..cea65bf9b4e 100644
--- a/app/views/projects/blob/_editor.html.haml
+++ b/app/views/projects/blob/_editor.html.haml
@@ -23,6 +23,7 @@
.js-suggest-gitlab-ci-yml{ data: { toggle: 'popover',
target: '#gitlab-ci-yml-selector',
track_label: 'suggest_gitlab_ci_yml',
+ merge_request_path: params[:mr_path],
dismiss_key: @project.id,
human_access: human_access } }
diff --git a/app/views/projects/blob/_pipeline_tour_success.html.haml b/app/views/projects/blob/_pipeline_tour_success.html.haml
index cf1427df044..3ea2defb2b3 100644
--- a/app/views/projects/blob/_pipeline_tour_success.html.haml
+++ b/app/views/projects/blob/_pipeline_tour_success.html.haml
@@ -1,3 +1,4 @@
.js-success-pipeline-modal{ data: { 'commit-cookie': suggest_pipeline_commit_cookie_name,
'go-to-pipelines-path': project_pipelines_path(@project),
+ 'project-merge-requests-path': project_merge_requests_path(@project),
'human-access': @project.team.human_max_access(current_user&.id) } }
diff --git a/app/views/projects/blob/new.html.haml b/app/views/projects/blob/new.html.haml
index 48ffd80aa9c..a939f43d5e2 100644
--- a/app/views/projects/blob/new.html.haml
+++ b/app/views/projects/blob/new.html.haml
@@ -15,6 +15,7 @@
- if should_suggest_gitlab_ci_yml?
.js-suggest-gitlab-ci-yml-commit-changes{ data: { toggle: 'popover',
target: '#commit-changes',
+ merge_request_path: params[:mr_path],
track_label: 'suggest_commit_first_project_gitlab_ci_yml',
dismiss_key: @project.id,
human_access: human_access } }
diff --git a/changelogs/unreleased/226989-remove-users-bio-column.yml b/changelogs/unreleased/226989-remove-users-bio-column.yml
new file mode 100644
index 00000000000..b565163359f
--- /dev/null
+++ b/changelogs/unreleased/226989-remove-users-bio-column.yml
@@ -0,0 +1,5 @@
+---
+title: Remove unused users.bio database column
+merge_request: 40269
+author:
+type: other
diff --git a/changelogs/unreleased/239341-fj-allow-snippet-move-action-without-file-path.yml b/changelogs/unreleased/239341-fj-allow-snippet-move-action-without-file-path.yml
new file mode 100644
index 00000000000..3762b1ae98e
--- /dev/null
+++ b/changelogs/unreleased/239341-fj-allow-snippet-move-action-without-file-path.yml
@@ -0,0 +1,5 @@
+---
+title: Allow snippet move action without an existing file name
+merge_request: 40343
+author:
+type: fixed
diff --git a/changelogs/unreleased/astoicescu-truncate-dashboards-dropdown-items.yml b/changelogs/unreleased/astoicescu-truncate-dashboards-dropdown-items.yml
new file mode 100644
index 00000000000..f5dfe301788
--- /dev/null
+++ b/changelogs/unreleased/astoicescu-truncate-dashboards-dropdown-items.yml
@@ -0,0 +1,5 @@
+---
+title: Wrap dashboards dropdown items text
+merge_request: 40367
+author:
+type: added
diff --git a/changelogs/unreleased/id-bump-marginalia-gem.yml b/changelogs/unreleased/id-bump-marginalia-gem.yml
new file mode 100644
index 00000000000..03c7d9f0e7c
--- /dev/null
+++ b/changelogs/unreleased/id-bump-marginalia-gem.yml
@@ -0,0 +1,5 @@
+---
+title: Bump marginalia gem version to 1.9.0
+merge_request: 40481
+author:
+type: changed
diff --git a/changelogs/unreleased/mo-add-pipeline-artifacts-size-to-root-storage-statistics.yml b/changelogs/unreleased/mo-add-pipeline-artifacts-size-to-root-storage-statistics.yml
new file mode 100644
index 00000000000..71f65306bb9
--- /dev/null
+++ b/changelogs/unreleased/mo-add-pipeline-artifacts-size-to-root-storage-statistics.yml
@@ -0,0 +1,5 @@
+---
+title: Add pipeline_artifacts_size to root_storage_statistics
+merge_request: 40425
+author:
+type: added
diff --git a/changelogs/unreleased/mwaw232076-full-text-search-and-time-picker-is-not-be-available-for-manag.yml b/changelogs/unreleased/mwaw232076-full-text-search-and-time-picker-is-not-be-available-for-manag.yml
new file mode 100644
index 00000000000..9abe4928763
--- /dev/null
+++ b/changelogs/unreleased/mwaw232076-full-text-search-and-time-picker-is-not-be-available-for-manag.yml
@@ -0,0 +1,5 @@
+---
+title: Fix advanced filters in log explorer view for gitlab managed applications.
+merge_request: 37926
+author:
+type: fixed
diff --git a/config/application.rb b/config/application.rb
index 3fd9ce39bb9..7b14da08056 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -176,7 +176,9 @@ module Gitlab
config.assets.precompile << "mailer_client_specific.css"
config.assets.precompile << "notify.css"
config.assets.precompile << "mailers/*.css"
+ config.assets.precompile << "page_bundles/_mixins_and_variables_and_functions.css"
config.assets.precompile << "page_bundles/ide.css"
+ config.assets.precompile << "page_bundles/todos.css"
config.assets.precompile << "page_bundles/xterm.css"
config.assets.precompile << "performance_bar.css"
config.assets.precompile << "lib/ace.js"
diff --git a/config/feature_flags/development/async_pages_move_namespace_rename.yml b/config/feature_flags/development/async_pages_move_namespace_rename.yml
new file mode 100644
index 00000000000..f968710508b
--- /dev/null
+++ b/config/feature_flags/development/async_pages_move_namespace_rename.yml
@@ -0,0 +1,7 @@
+---
+name: async_pages_move_namespace_rename
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40259
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/235808
+group: team::Scalability
+type: development
+default_enabled: false
diff --git a/config/feature_flags/development/async_pages_move_namespace_transfer.yml b/config/feature_flags/development/async_pages_move_namespace_transfer.yml
new file mode 100644
index 00000000000..2bcb4aca83a
--- /dev/null
+++ b/config/feature_flags/development/async_pages_move_namespace_transfer.yml
@@ -0,0 +1,7 @@
+---
+name: async_pages_move_namespace_transfer
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40259
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/235808
+group: team::Scalability
+type: development
+default_enabled: false
diff --git a/db/migrate/20200825180050_add_pipeline_artifacts_size_to_root_storage_statistics.rb b/db/migrate/20200825180050_add_pipeline_artifacts_size_to_root_storage_statistics.rb
new file mode 100644
index 00000000000..069480c6887
--- /dev/null
+++ b/db/migrate/20200825180050_add_pipeline_artifacts_size_to_root_storage_statistics.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddPipelineArtifactsSizeToRootStorageStatistics < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ add_column :namespace_root_storage_statistics, :pipeline_artifacts_size, :bigint, default: 0, null: false
+ end
+ end
+
+ def down
+ with_lock_retries do
+ remove_column :namespace_root_storage_statistics, :pipeline_artifacts_size, :bigint, default: 0, null: false
+ end
+ end
+end
diff --git a/db/post_migrate/20200824130028_remove_index_on_users_bio.rb b/db/post_migrate/20200824130028_remove_index_on_users_bio.rb
new file mode 100644
index 00000000000..d41734eb9ce
--- /dev/null
+++ b/db/post_migrate/20200824130028_remove_index_on_users_bio.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+class RemoveIndexOnUsersBio < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BACKGROUND_MIGRATION_CLASS = 'MigrateUsersBioToUserDetails'
+ INDEX_NAME = 'tmp_idx_on_user_id_where_bio_is_filled'
+
+ disable_ddl_transaction!
+
+ def up
+ Gitlab::BackgroundMigration.steal(BACKGROUND_MIGRATION_CLASS)
+ remove_concurrent_index_by_name(:users, INDEX_NAME)
+ end
+
+ def down
+ add_concurrent_index :users, :id, where: "(COALESCE(bio, '') IS DISTINCT FROM '')", name: INDEX_NAME
+ end
+end
diff --git a/db/post_migrate/20200824130447_remove_users_bio_column.rb b/db/post_migrate/20200824130447_remove_users_bio_column.rb
new file mode 100644
index 00000000000..cb630ec7fd5
--- /dev/null
+++ b/db/post_migrate/20200824130447_remove_users_bio_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class RemoveUsersBioColumn < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ with_lock_retries do
+ remove_column :users, :bio
+ end
+ end
+
+ def down
+ with_lock_retries do
+ add_column :users, :bio, :string # rubocop: disable Migration/AddColumnsToWideTables
+ end
+ end
+end
diff --git a/db/schema_migrations/20200824130028 b/db/schema_migrations/20200824130028
new file mode 100644
index 00000000000..961a11848c9
--- /dev/null
+++ b/db/schema_migrations/20200824130028
@@ -0,0 +1 @@
+891f1660592c4443aeced7594cea391066cc79b54b40c67a8c973eb6959bf6f1 \ No newline at end of file
diff --git a/db/schema_migrations/20200824130447 b/db/schema_migrations/20200824130447
new file mode 100644
index 00000000000..901d79466b6
--- /dev/null
+++ b/db/schema_migrations/20200824130447
@@ -0,0 +1 @@
+e6dcd20fe77c443999aa2373e0acdd77eb68c3a6f0d6d65e86b7f85ac97ddb9a \ No newline at end of file
diff --git a/db/schema_migrations/20200825180050 b/db/schema_migrations/20200825180050
new file mode 100644
index 00000000000..0e2e9220740
--- /dev/null
+++ b/db/schema_migrations/20200825180050
@@ -0,0 +1 @@
+330340ef4d525e1e13ed28d71d23594627453955ce5f810e370d07bb3623bf35 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 5c958d7c165..a3cd8d4b086 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -13342,7 +13342,8 @@ CREATE TABLE public.namespace_root_storage_statistics (
build_artifacts_size bigint DEFAULT 0 NOT NULL,
storage_size bigint DEFAULT 0 NOT NULL,
packages_size bigint DEFAULT 0 NOT NULL,
- snippets_size bigint DEFAULT 0 NOT NULL
+ snippets_size bigint DEFAULT 0 NOT NULL,
+ pipeline_artifacts_size bigint DEFAULT 0 NOT NULL
);
CREATE TABLE public.namespace_settings (
@@ -16129,7 +16130,6 @@ CREATE TABLE public.users (
skype character varying DEFAULT ''::character varying NOT NULL,
linkedin character varying DEFAULT ''::character varying NOT NULL,
twitter character varying DEFAULT ''::character varying NOT NULL,
- bio character varying,
failed_attempts integer DEFAULT 0,
locked_at timestamp without time zone,
username character varying,
@@ -21137,8 +21137,6 @@ CREATE INDEX terraform_states_verification_failure_partial ON public.terraform_s
CREATE INDEX tmp_build_stage_position_index ON public.ci_builds USING btree (stage_id, stage_idx) WHERE (stage_idx IS NOT NULL);
-CREATE INDEX tmp_idx_on_user_id_where_bio_is_filled ON public.users USING btree (id) WHERE ((COALESCE(bio, ''::character varying))::text IS DISTINCT FROM ''::text);
-
CREATE INDEX tmp_index_for_email_unconfirmation_migration ON public.emails USING btree (id) WHERE (confirmed_at IS NOT NULL);
CREATE UNIQUE INDEX unique_merge_request_metrics_by_merge_request_id ON public.merge_request_metrics USING btree (merge_request_id);
diff --git a/doc/.vale/gitlab/British.yml b/doc/.vale/gitlab/British.yml
index 3a0cb321f93..229eb324eb6 100644
--- a/doc/.vale/gitlab/British.yml
+++ b/doc/.vale/gitlab/British.yml
@@ -98,6 +98,8 @@ swap:
speciality: specialty
spectre: specter
splendour: splendor
+ standardise: standardize
+ standardised: standardized
sulphur: sulfur
theatre: theater
travelled: traveled
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
index e353fb7d527..c31fa735094 100644
--- a/doc/administration/gitaly/praefect.md
+++ b/doc/administration/gitaly/praefect.md
@@ -944,6 +944,9 @@ cluster.
## Distributed reads
+> - Introduced in GitLab 13.1 in [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga) with feature flag `gitaly_distributed_reads` set to disabled.
+> - [Made generally available](https://gitlab.com/gitlab-org/gitaly/-/issues/2951) in GitLab 13.3.
+
Praefect supports distribution of read operations across Gitaly nodes that are
configured for the virtual node.
diff --git a/doc/development/fe_guide/development_process.md b/doc/development/fe_guide/development_process.md
index ff36b8b5c6a..2b64534e7c9 100644
--- a/doc/development/fe_guide/development_process.md
+++ b/doc/development/fe_guide/development_process.md
@@ -4,7 +4,7 @@ You can find more about the organization of the frontend team in the [handbook](
## Development Checklist
-The idea is to remind us about specific topics during the time we build a new feature or start something. This is a common practice in other industries (like pilots) that also use standardised checklists to reduce problems early on.
+The idea is to remind us about specific topics during the time we build a new feature or start something. This is a common practice in other industries (like pilots) that also use standardized checklists to reduce problems early on.
Copy the content over to your issue or merge request and if something doesn't apply simply remove it from your current list.
diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md
index 8a1ee74a7fc..d9e7f0e6535 100644
--- a/doc/development/testing_guide/best_practices.md
+++ b/doc/development/testing_guide/best_practices.md
@@ -94,6 +94,32 @@ let(:project) { create(:project) }
let_it_be(:project) { create(:project) }
```
+A common cause of a large number of created factories is [factory cascades](https://github.com/test-prof/test-prof/blob/master/docs/profilers/factory_prof.md#factory-flamegraph), which result when factories create and recreate associations.
+They can be identified by a noticeable difference between `total time` and `top-level time` numbers:
+
+```shell
+ total top-level total time time per call top-level time name
+
+ 208 0 9.5812s 0.0461s 0.0000s namespace
+ 208 76 37.4214s 0.1799s 13.8749s project
+```
+
+In order to reuse a single factory for all implicit parent associations,
+[`FactoryDefault`](https://github.com/test-prof/test-prof/blob/master/docs/recipes/factory_default.md)
+can be used:
+
+```ruby
+ let_it_be(:namespace) { create_default(:namespace) }
+ let_it_be(:project) { create_default(:project) }
+```
+
+In this case, the `total time` and `top-level time` numbers match more closely:
+
+```shell
+ 31 30 4.6378s 0.1496s 4.5366s project
+ 8 8 0.0477s 0.0477s 0.0477s namespace
+```
+
### General guidelines
- Use a single, top-level `RSpec.describe ClassName` block.
diff --git a/doc/user/compliance/license_compliance/index.md b/doc/user/compliance/license_compliance/index.md
index 47f14b93d29..4d2521cf0b2 100644
--- a/doc/user/compliance/license_compliance/index.md
+++ b/doc/user/compliance/license_compliance/index.md
@@ -705,9 +705,6 @@ with identifiers from the [SPDX license list](https://spdx.org/licenses/).
A local copy of the SPDX license list is distributed with the GitLab instance. If needed, the GitLab
instance's administrator can manually update it with a [Rake task](../../../raketasks/spdx.md).
-Exact name matches are required for [project policies](#policies)
-when running in an offline environment ([see related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/212388)).
-
## License list
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13582) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.7.
diff --git a/doc/user/group/saml_sso/scim_setup.md b/doc/user/group/saml_sso/scim_setup.md
index a6e6bac30de..4f74e672392 100644
--- a/doc/user/group/saml_sso/scim_setup.md
+++ b/doc/user/group/saml_sso/scim_setup.md
@@ -159,7 +159,16 @@ application described above.
## User access and linking setup
-As long as [Group SAML](index.md) has been configured, prior to turning on sync, existing GitLab.com users can link to their accounts in one of the following ways, before synchronization is active:
+The following diagram is a general outline on what happens when you add users to your SCIM app:
+
+```mermaid
+graph TD
+ A[Add User to SCIM app] -->|IdP sends user info to GitLab| B(GitLab: Does the email exists?)
+ B -->|No| C[GitLab creates user with SCIM identity]
+ B -->|Yes| D[GitLab sends message back 'Email exists']
+```
+
+As long as [Group SAML](index.md) has been configured, existing GitLab.com users can link to their accounts in one of the following ways:
- By updating their *primary* email address in their GitLab.com user account to match their identity provider's user profile email address.
- By following these steps:
@@ -168,21 +177,41 @@ As long as [Group SAML](index.md) has been configured, prior to turning on sync,
1. Click on the GitLab app in the identity provider's dashboard or visit the **GitLab single sign-on URL**.
1. Click on the **Authorize** button.
+We recommend users do this prior to turning on sync, because while synchronization is active, there may be provisioning errors for existing users.
+
New users and existing users on subsequent visits can access the group through the identify provider's dashboard or by visiting links directly.
For role information, please see the [Group SAML page](index.md#user-access-and-management)
### Blocking access
-To rescind access to the group, we recommend removing the user from the identity
+To rescind access to the group, remove the user from the identity
provider or users list for the specific app.
-Upon the next sync, the user will be deprovisioned, which means that the user will be removed from the group. The user account will not be deleted unless using [group managed accounts](group_managed_accounts.md).
+Upon the next sync, the user is deprovisioned, which means that the user is removed from the group.
+
+NOTE: **Note:**
+Deprovisioning does not delete the user account.
+
+```mermaid
+graph TD
+ A[Remove User from SCIM app] -->|IdP sends request to GitLab| B(GitLab: Is the user part of the group?)
+ B -->|No| C[Nothing to do]
+ B -->|Yes| D[GitLab removes user from GitLab group]
+```
## Troubleshooting
This section contains possible solutions for problems you might encounter.
+### How come I can't add a user after I removed them?
+
+As outlined in the [Blocking access section](#blocking-access), when you remove a user, they are removed from the group. However, their account is not deleted.
+
+When the user is added back to the SCIM app, GitLab cannot create a new user because the user already exists.
+
+Solution: Have a user sign in directly to GitLab, then [manually link](#user-access-and-linking-setup) their account.
+
### Azure
#### How do I verify my SCIM configuration is correct?
diff --git a/lib/tasks/gitlab/assets.rake b/lib/tasks/gitlab/assets.rake
index 69a3526b872..caa583fb3a9 100644
--- a/lib/tasks/gitlab/assets.rake
+++ b/lib/tasks/gitlab/assets.rake
@@ -55,6 +55,7 @@ namespace :gitlab do
rake:assets:precompile
gitlab:assets:compile_webpack_if_needed
gitlab:assets:fix_urls
+ gitlab:assets:check_page_bundle_mixins_css_for_sideeffects
].each(&::Gitlab::TaskHelpers.method(:invoke_and_time_task))
end
@@ -127,5 +128,10 @@ namespace :gitlab do
abort 'Error: Unable to compile webpack DLL.'.color(:red)
end
end
+
+ desc 'GitLab | Assets | Check that scss mixins do not introduce any sideffects'
+ task :check_page_bundle_mixins_css_for_sideeffects do
+ system('./scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js')
+ end
end
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 69c13c02c03..e8a0f4a62c3 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -14702,6 +14702,12 @@ msgstr ""
msgid "MERGED"
msgstr ""
+msgid "MR widget|Back to the Merge request"
+msgstr ""
+
+msgid "MR widget|See your pipeline in action"
+msgstr ""
+
msgid "MR widget|Take a look at our %{beginnerLinkStart}Beginner's Guide to Continuous Integration%{beginnerLinkEnd} and our %{exampleLinkStart}examples of GitLab CI/CD%{exampleLinkEnd} to learn more."
msgstr ""
@@ -21957,9 +21963,6 @@ msgstr ""
msgid "See what's new at GitLab"
msgstr ""
-msgid "See your pipeline in action"
-msgstr ""
-
msgid "Select"
msgstr ""
diff --git a/package.json b/package.json
index 647312ea57f..b3e5ed7c719 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,7 @@
"@babel/preset-env": "^7.10.1",
"@gitlab/at.js": "1.5.5",
"@gitlab/svgs": "1.161.0",
- "@gitlab/ui": "20.9.1",
+ "@gitlab/ui": "20.10.0",
"@gitlab/visual-review-tools": "1.6.1",
"@rails/actioncable": "^6.0.3-1",
"@sentry/browser": "^5.10.2",
diff --git a/scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js b/scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js
new file mode 100755
index 00000000000..a2bb9f56d84
--- /dev/null
+++ b/scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js
@@ -0,0 +1,36 @@
+#!/usr/bin/env node
+
+if (process.env.RAILS_ENV !== 'production') {
+ console.log(
+ `RAILS_ENV is not set to 'production': ${process.env.RAILS_ENV} - Not executing check`,
+ );
+ process.exit(0);
+}
+
+const path = require('path');
+const fs = require('fs');
+const glob = require('glob');
+const pjs = require('postcss');
+
+const paths = glob.sync('public/assets/page_bundles/_mixins_and_variables_and_functions*.css', {
+ cwd: path.join(__dirname, '..', '..'),
+});
+
+if (!paths[0]) {
+ console.log('Could not find mixins test file');
+ process.exit(1);
+}
+
+console.log(`Checking ${paths[0]} for side effects`);
+
+const file = fs.readFileSync(paths[0], 'utf-8');
+
+const parsed = pjs.parse(file);
+
+if (parsed.nodes.every(node => ['comment', 'atrule'].includes(node.type))) {
+ console.log('The file does not introduce any side effects, we are all good.');
+ process.exit(0);
+}
+
+console.log(`At least one unwanted style was introduced.`);
+process.exit(1);
diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb
index 6cd18f2755c..9bfd3319ff1 100644
--- a/spec/features/admin/admin_users_spec.rb
+++ b/spec/features/admin/admin_users_spec.rb
@@ -353,7 +353,7 @@ RSpec.describe "Admin::Users" do
it 'sees impersonation log out icon' do
subject
- icon = first('.fa.fa-user-secret')
+ icon = first('[data-testid="incognito-icon"]')
expect(icon).not_to be nil
end
diff --git a/spec/frontend/blob/pipeline_tour_success_mock_data.js b/spec/frontend/blob/pipeline_tour_success_mock_data.js
index 7819fcce85d..9dea3969d63 100644
--- a/spec/frontend/blob/pipeline_tour_success_mock_data.js
+++ b/spec/frontend/blob/pipeline_tour_success_mock_data.js
@@ -1,5 +1,6 @@
const modalProps = {
goToPipelinesPath: 'some_pipeline_path',
+ projectMergeRequestsPath: 'some_mr_path',
commitCookie: 'some_cookie',
humanAccess: 'maintainer',
};
diff --git a/spec/frontend/blob/pipeline_tour_success_modal_spec.js b/spec/frontend/blob/pipeline_tour_success_modal_spec.js
index 9998cd7f91c..50db1675e13 100644
--- a/spec/frontend/blob/pipeline_tour_success_modal_spec.js
+++ b/spec/frontend/blob/pipeline_tour_success_modal_spec.js
@@ -10,10 +10,7 @@ describe('PipelineTourSuccessModal', () => {
let cookieSpy;
let trackingSpy;
- beforeEach(() => {
- document.body.dataset.page = 'projects:blob:show';
- trackingSpy = mockTracking('_category_', undefined, jest.spyOn);
-
+ const createComponent = () => {
wrapper = shallowMount(pipelineTourSuccess, {
propsData: modalProps,
stubs: {
@@ -21,13 +18,49 @@ describe('PipelineTourSuccessModal', () => {
GlSprintf,
},
});
+ };
+ beforeEach(() => {
+ document.body.dataset.page = 'projects:blob:show';
+ trackingSpy = mockTracking('_category_', undefined, jest.spyOn);
cookieSpy = jest.spyOn(Cookies, 'remove');
+ createComponent();
});
afterEach(() => {
wrapper.destroy();
unmockTracking();
+ Cookies.remove(modalProps.commitCookie);
+ });
+
+ describe('when the commitCookie contains the mr path', () => {
+ const expectedMrPath = 'expected_mr_path';
+
+ beforeEach(() => {
+ Cookies.set(modalProps.commitCookie, expectedMrPath);
+ createComponent();
+ });
+
+ it('renders the path from the commit cookie for back to the merge request button', () => {
+ const goToMrBtn = wrapper.find({ ref: 'goToMergeRequest' });
+
+ expect(goToMrBtn.attributes('href')).toBe(expectedMrPath);
+ });
+ });
+
+ describe('when the commitCookie does not contain mr path', () => {
+ const expectedMrPath = modalProps.projectMergeRequestsPath;
+
+ beforeEach(() => {
+ Cookies.set(modalProps.commitCookie, true);
+ createComponent();
+ });
+
+ it('renders the path from projectMergeRequestsPath for back to the merge request button', () => {
+ const goToMrBtn = wrapper.find({ ref: 'goToMergeRequest' });
+
+ expect(goToMrBtn.attributes('href')).toBe(expectedMrPath);
+ });
});
it('has expected structure', () => {
@@ -58,7 +91,7 @@ describe('PipelineTourSuccessModal', () => {
it('send an event when go to pipelines is clicked', () => {
trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn);
- const goToBtn = wrapper.find({ ref: 'goto' });
+ const goToBtn = wrapper.find({ ref: 'goToPipelines' });
triggerEvent(goToBtn.element);
expect(trackingSpy).toHaveBeenCalledWith('_category_', 'click_button', {
@@ -67,5 +100,17 @@ describe('PipelineTourSuccessModal', () => {
value: '10',
});
});
+
+ it('sends an event when back to the merge request is clicked', () => {
+ trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn);
+ const goToBtn = wrapper.find({ ref: 'goToMergeRequest' });
+ triggerEvent(goToBtn.element);
+
+ expect(trackingSpy).toHaveBeenCalledWith('_category_', 'click_button', {
+ label: 'congratulate_first_pipeline',
+ property: modalProps.humanAccess,
+ value: '20',
+ });
+ });
});
});
diff --git a/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js b/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js
index 4714d34dbec..6569fe11507 100644
--- a/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js
+++ b/spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js
@@ -16,6 +16,7 @@ const commitTrackLabel = 'suggest_commit_first_project_gitlab_ci_yml';
const dismissCookie = 'suggest_gitlab_ci_yml_99';
const humanAccess = 'owner';
+const mergeRequestPath = '/some/path';
describe('Suggest gitlab-ci.yml Popover', () => {
let wrapper;
@@ -26,6 +27,7 @@ describe('Suggest gitlab-ci.yml Popover', () => {
target,
trackLabel,
dismissKey,
+ mergeRequestPath,
humanAccess,
},
stubs: {
diff --git a/spec/frontend/blob_edit/blob_bundle_spec.js b/spec/frontend/blob_edit/blob_bundle_spec.js
index 98fa96de124..a105b62586b 100644
--- a/spec/frontend/blob_edit/blob_bundle_spec.js
+++ b/spec/frontend/blob_edit/blob_bundle_spec.js
@@ -43,7 +43,8 @@ describe('BlobBundle', () => {
data-target="#target"
data-track-label="suggest_gitlab_ci_yml"
data-dismiss-key="1"
- data-human-access="owner">
+ data-human-access="owner"
+ data-merge-request-path="path/to/mr">
<button id='commit-changes' class="js-commit-button"></button>
<a class="btn btn-cancel" href="#"></a>
</div>
diff --git a/spec/frontend/logs/mock_data.js b/spec/frontend/logs/mock_data.js
index f4c567a2ea3..3fabab4bc59 100644
--- a/spec/frontend/logs/mock_data.js
+++ b/spec/frontend/logs/mock_data.js
@@ -35,6 +35,7 @@ export const mockManagedApps = [
status: 'connected',
path: '/root/autodevops-deploy/-/clusters/15',
gitlab_managed_apps_logs_path: '/root/autodevops-deploy/-/logs?cluster_id=15',
+ enable_advanced_logs_querying: true,
},
{
cluster_type: 'project_type',
@@ -45,6 +46,7 @@ export const mockManagedApps = [
status: 'connected',
path: '/root/autodevops-deploy/-/clusters/16',
gitlab_managed_apps_logs_path: null,
+ enable_advanced_logs_querying: false,
},
];
diff --git a/spec/frontend/logs/stores/getters_spec.js b/spec/frontend/logs/stores/getters_spec.js
index 9d213d8c01f..bca1ce4ca92 100644
--- a/spec/frontend/logs/stores/getters_spec.js
+++ b/spec/frontend/logs/stores/getters_spec.js
@@ -1,7 +1,14 @@
import { trace, showAdvancedFilters } from '~/logs/stores/getters';
import logsPageState from '~/logs/stores/state';
-import { mockLogsResult, mockTrace, mockEnvName, mockEnvironments } from '../mock_data';
+import {
+ mockLogsResult,
+ mockTrace,
+ mockEnvName,
+ mockEnvironments,
+ mockManagedApps,
+ mockManagedAppName,
+} from '../mock_data';
describe('Logs Store getters', () => {
let state;
@@ -72,4 +79,43 @@ describe('Logs Store getters', () => {
});
});
});
+
+ describe('when no managedApps are set', () => {
+ beforeEach(() => {
+ state.environments.current = null;
+ state.environments.options = [];
+ state.managedApps.current = mockManagedAppName;
+ state.managedApps.options = [];
+ });
+
+ it('returns false', () => {
+ expect(showAdvancedFilters(state)).toBe(false);
+ });
+ });
+
+ describe('when the managedApp supports filters', () => {
+ beforeEach(() => {
+ state.environments.current = null;
+ state.environments.options = mockEnvironments;
+ state.managedApps.current = mockManagedAppName;
+ state.managedApps.options = mockManagedApps;
+ });
+
+ it('returns true', () => {
+ expect(showAdvancedFilters(state)).toBe(true);
+ });
+ });
+
+ describe('when the managedApp does not support filters', () => {
+ beforeEach(() => {
+ state.environments.current = null;
+ state.environments.options = mockEnvironments;
+ state.managedApps.options = mockManagedApps;
+ state.managedApps.current = mockManagedApps[1].name;
+ });
+
+ it('returns false', () => {
+ expect(showAdvancedFilters(state)).toBe(false);
+ });
+ });
});
diff --git a/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap b/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap
index 103b53cb280..70a60a2f746 100644
--- a/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap
+++ b/spec/frontend/vue_shared/components/resizable_chart/__snapshots__/skeleton_loader_spec.js.snap
@@ -1,324 +1,425 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Resizable Skeleton Loader default setup renders the bars, labels, and grid with correct position, size, and rx percentages 1`] = `
-<gl-skeleton-loader-stub
- baseurl=""
- height="130"
- preserveaspectratio="xMidYMid meet"
- width="400"
+<svg
+ class="gl-skeleton-loader"
+ preserveAspectRatio="xMidYMid meet"
+ version="1.1"
+ viewBox="0 0 400 130"
>
<rect
- data-testid="skeleton-chart-grid"
- height="1px"
- width="100%"
+ clip-path="url(#null-idClip)"
+ height="130"
+ style="fill: url(#null-idGradient);"
+ width="400"
x="0"
- y="30%"
- />
- <rect
- data-testid="skeleton-chart-grid"
- height="1px"
- width="100%"
- x="0"
- y="60%"
- />
- <rect
- data-testid="skeleton-chart-grid"
- height="1px"
- width="100%"
- x="0"
- y="90%"
- />
-
- <rect
- data-testid="skeleton-chart-bar"
- height="5%"
- rx="0.4%"
- width="6%"
- x="5.875%"
- y="85%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="7%"
- rx="0.4%"
- width="6%"
- x="17.625%"
- y="83%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="9%"
- rx="0.4%"
- width="6%"
- x="29.375%"
- y="81%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="14%"
- rx="0.4%"
- width="6%"
- x="41.125%"
- y="76%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="21%"
- rx="0.4%"
- width="6%"
- x="52.875%"
- y="69%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="35%"
- rx="0.4%"
- width="6%"
- x="64.625%"
- y="55%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="50%"
- rx="0.4%"
- width="6%"
- x="76.375%"
- y="40%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="80%"
- rx="0.4%"
- width="6%"
- x="88.125%"
- y="10%"
- />
-
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="6.875%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="18.625%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="30.375%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="42.125%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="53.875%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="65.625%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="77.375%"
- y="95%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="5%"
- rx="0.4%"
- width="4%"
- x="89.125%"
- y="95%"
- />
-</gl-skeleton-loader-stub>
+ y="0"
+ />
+ <defs>
+ <clippath
+ id="null-idClip"
+ >
+ <rect
+ data-testid="skeleton-chart-grid"
+ height="1px"
+ width="100%"
+ x="0"
+ y="30%"
+ />
+ <rect
+ data-testid="skeleton-chart-grid"
+ height="1px"
+ width="100%"
+ x="0"
+ y="60%"
+ />
+ <rect
+ data-testid="skeleton-chart-grid"
+ height="1px"
+ width="100%"
+ x="0"
+ y="90%"
+ />
+
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="5%"
+ rx="0.4%"
+ width="6%"
+ x="5.875%"
+ y="85%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="7%"
+ rx="0.4%"
+ width="6%"
+ x="17.625%"
+ y="83%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="9%"
+ rx="0.4%"
+ width="6%"
+ x="29.375%"
+ y="81%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="14%"
+ rx="0.4%"
+ width="6%"
+ x="41.125%"
+ y="76%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="21%"
+ rx="0.4%"
+ width="6%"
+ x="52.875%"
+ y="69%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="35%"
+ rx="0.4%"
+ width="6%"
+ x="64.625%"
+ y="55%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="50%"
+ rx="0.4%"
+ width="6%"
+ x="76.375%"
+ y="40%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="80%"
+ rx="0.4%"
+ width="6%"
+ x="88.125%"
+ y="10%"
+ />
+
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="6.875%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="18.625%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="30.375%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="42.125%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="53.875%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="65.625%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="77.375%"
+ y="95%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="5%"
+ rx="0.4%"
+ width="4%"
+ x="89.125%"
+ y="95%"
+ />
+ </clippath>
+ <lineargradient
+ id="null-idGradient"
+ >
+ <stop
+ class="primary-stop"
+ offset="0%"
+ >
+ <animate
+ attributeName="offset"
+ dur="1s"
+ repeatCount="indefinite"
+ values="-2; 1"
+ />
+ </stop>
+ <stop
+ class="secondary-stop"
+ offset="50%"
+ >
+ <animate
+ attributeName="offset"
+ dur="1s"
+ repeatCount="indefinite"
+ values="-1.5; 1.5"
+ />
+ </stop>
+ <stop
+ class="primary-stop"
+ offset="100%"
+ >
+ <animate
+ attributeName="offset"
+ dur="1s"
+ repeatCount="indefinite"
+ values="-1; 2"
+ />
+ </stop>
+ </lineargradient>
+ </defs>
+</svg>
`;
exports[`Resizable Skeleton Loader with custom settings renders the correct position, and size percentages for bars and labels with different settings 1`] = `
-<gl-skeleton-loader-stub
- baseurl=""
- height="130"
- preserveaspectratio="xMidYMid meet"
- uniquekey=""
- width="400"
+<svg
+ class="gl-skeleton-loader"
+ preserveAspectRatio="xMidYMid meet"
+ version="1.1"
+ viewBox="0 0 400 130"
>
<rect
- data-testid="skeleton-chart-grid"
- height="1px"
- width="100%"
+ clip-path="url(#-idClip)"
+ height="130"
+ style="fill: url(#-idGradient);"
+ width="400"
x="0"
- y="30%"
- />
- <rect
- data-testid="skeleton-chart-grid"
- height="1px"
- width="100%"
- x="0"
- y="60%"
- />
- <rect
- data-testid="skeleton-chart-grid"
- height="1px"
- width="100%"
- x="0"
- y="90%"
- />
-
- <rect
- data-testid="skeleton-chart-bar"
- height="5%"
- rx="0.6%"
- width="3%"
- x="6.0625%"
- y="85%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="7%"
- rx="0.6%"
- width="3%"
- x="18.1875%"
- y="83%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="9%"
- rx="0.6%"
- width="3%"
- x="30.3125%"
- y="81%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="14%"
- rx="0.6%"
- width="3%"
- x="42.4375%"
- y="76%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="21%"
- rx="0.6%"
- width="3%"
- x="54.5625%"
- y="69%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="35%"
- rx="0.6%"
- width="3%"
- x="66.6875%"
- y="55%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="50%"
- rx="0.6%"
- width="3%"
- x="78.8125%"
- y="40%"
- />
- <rect
- data-testid="skeleton-chart-bar"
- height="80%"
- rx="0.6%"
- width="3%"
- x="90.9375%"
- y="10%"
- />
-
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="4.0625%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="16.1875%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="28.3125%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="40.4375%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="52.5625%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="64.6875%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="76.8125%"
- y="98%"
- />
- <rect
- data-testid="skeleton-chart-label"
- height="2%"
- rx="0.6%"
- width="7%"
- x="88.9375%"
- y="98%"
- />
-</gl-skeleton-loader-stub>
+ y="0"
+ />
+ <defs>
+ <clippath
+ id="-idClip"
+ >
+ <rect
+ data-testid="skeleton-chart-grid"
+ height="1px"
+ width="100%"
+ x="0"
+ y="30%"
+ />
+ <rect
+ data-testid="skeleton-chart-grid"
+ height="1px"
+ width="100%"
+ x="0"
+ y="60%"
+ />
+ <rect
+ data-testid="skeleton-chart-grid"
+ height="1px"
+ width="100%"
+ x="0"
+ y="90%"
+ />
+
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="5%"
+ rx="0.6%"
+ width="3%"
+ x="6.0625%"
+ y="85%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="7%"
+ rx="0.6%"
+ width="3%"
+ x="18.1875%"
+ y="83%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="9%"
+ rx="0.6%"
+ width="3%"
+ x="30.3125%"
+ y="81%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="14%"
+ rx="0.6%"
+ width="3%"
+ x="42.4375%"
+ y="76%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="21%"
+ rx="0.6%"
+ width="3%"
+ x="54.5625%"
+ y="69%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="35%"
+ rx="0.6%"
+ width="3%"
+ x="66.6875%"
+ y="55%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="50%"
+ rx="0.6%"
+ width="3%"
+ x="78.8125%"
+ y="40%"
+ />
+ <rect
+ data-testid="skeleton-chart-bar"
+ height="80%"
+ rx="0.6%"
+ width="3%"
+ x="90.9375%"
+ y="10%"
+ />
+
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="4.0625%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="16.1875%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="28.3125%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="40.4375%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="52.5625%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="64.6875%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="76.8125%"
+ y="98%"
+ />
+ <rect
+ data-testid="skeleton-chart-label"
+ height="2%"
+ rx="0.6%"
+ width="7%"
+ x="88.9375%"
+ y="98%"
+ />
+ </clippath>
+ <lineargradient
+ id="-idGradient"
+ >
+ <stop
+ class="primary-stop"
+ offset="0%"
+ >
+ <animate
+ attributeName="offset"
+ dur="1s"
+ repeatCount="indefinite"
+ values="-2; 1"
+ />
+ </stop>
+ <stop
+ class="secondary-stop"
+ offset="50%"
+ >
+ <animate
+ attributeName="offset"
+ dur="1s"
+ repeatCount="indefinite"
+ values="-1.5; 1.5"
+ />
+ </stop>
+ <stop
+ class="primary-stop"
+ offset="100%"
+ >
+ <animate
+ attributeName="offset"
+ dur="1s"
+ repeatCount="indefinite"
+ values="-1; 2"
+ />
+ </stop>
+ </lineargradient>
+ </defs>
+</svg>
`;
diff --git a/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js b/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js
index 7facd02e596..bfc3aeb0303 100644
--- a/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js
+++ b/spec/frontend/vue_shared/components/resizable_chart/skeleton_loader_spec.js
@@ -1,11 +1,11 @@
-import { shallowMount } from '@vue/test-utils';
+import { mount } from '@vue/test-utils';
import ChartSkeletonLoader from '~/vue_shared/components/resizable_chart/skeleton_loader.vue';
describe('Resizable Skeleton Loader', () => {
let wrapper;
const createComponent = (propsData = {}) => {
- wrapper = shallowMount(ChartSkeletonLoader, {
+ wrapper = mount(ChartSkeletonLoader, {
propsData,
});
};
diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb
index 2d0b5af0e77..024539e34ec 100644
--- a/spec/models/clusters/cluster_spec.rb
+++ b/spec/models/clusters/cluster_spec.rb
@@ -42,6 +42,7 @@ RSpec.describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
it { is_expected.to delegate_method(:available?).to(:application_ingress).with_prefix }
it { is_expected.to delegate_method(:available?).to(:application_prometheus).with_prefix }
it { is_expected.to delegate_method(:available?).to(:application_knative).with_prefix }
+ it { is_expected.to delegate_method(:available?).to(:application_elastic_stack).with_prefix }
it { is_expected.to delegate_method(:external_ip).to(:application_ingress).with_prefix }
it { is_expected.to delegate_method(:external_hostname).to(:application_ingress).with_prefix }
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 751770d1046..f685fe12e13 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -407,8 +407,26 @@ RSpec.describe Namespace do
FileUtils.mkdir_p(File.join(pages_dir, project.full_path))
end
+ after do
+ FileUtils.remove_entry(File.join(TestEnv.repos_path, parent.full_path), true)
+ FileUtils.remove_entry(File.join(TestEnv.repos_path, new_parent.full_path), true)
+ FileUtils.remove_entry(File.join(TestEnv.repos_path, child.full_path), true)
+ FileUtils.remove_entry(File.join(uploads_dir, project.full_path), true)
+ FileUtils.remove_entry(File.join(pages_dir, project.full_path), true)
+ end
+
context 'renaming child' do
- it 'correctly moves the repository, uploads and pages' do
+ context 'when async_pages_move_namespace_rename is disabled' do
+ it 'correctly moves the repository, uploads and pages' do
+ stub_feature_flags(async_pages_move_namespace_rename: false)
+
+ child.update!(path: 'renamed')
+
+ expect_project_directories_at('parent/renamed')
+ end
+ end
+
+ it 'correctly moves the repository, uploads and pages', :sidekiq_inline do
child.update!(path: 'renamed')
expect_project_directories_at('parent/renamed')
@@ -416,7 +434,17 @@ RSpec.describe Namespace do
end
context 'renaming parent' do
- it 'correctly moves the repository, uploads and pages' do
+ context 'when async_pages_move_namespace_rename is disabled' do
+ it 'correctly moves the repository, uploads and pages' do
+ stub_feature_flags(async_pages_move_namespace_rename: false)
+
+ parent.update!(path: 'renamed')
+
+ expect_project_directories_at('renamed/child')
+ end
+ end
+
+ it 'correctly moves the repository, uploads and pages', :sidekiq_inline do
parent.update!(path: 'renamed')
expect_project_directories_at('renamed/child')
@@ -424,7 +452,17 @@ RSpec.describe Namespace do
end
context 'moving from one parent to another' do
- it 'correctly moves the repository, uploads and pages' do
+ context 'when async_pages_move_namespace_transfer is disabled' do
+ it 'correctly moves the repository, uploads and pages' do
+ stub_feature_flags(async_pages_move_namespace_transfer: false)
+
+ child.update!(parent: new_parent)
+
+ expect_project_directories_at('new_parent/child')
+ end
+ end
+
+ it 'correctly moves the repository, uploads and pages', :sidekiq_inline do
child.update!(parent: new_parent)
expect_project_directories_at('new_parent/child')
@@ -432,7 +470,17 @@ RSpec.describe Namespace do
end
context 'moving from having a parent to root' do
- it 'correctly moves the repository, uploads and pages' do
+ context 'when async_pages_move_namespace_transfer is disabled' do
+ it 'correctly moves the repository, uploads and pages' do
+ stub_feature_flags(async_pages_move_namespace_transfer: false)
+
+ child.update!(parent: nil)
+
+ expect_project_directories_at('child')
+ end
+ end
+
+ it 'correctly moves the repository, uploads and pages', :sidekiq_inline do
child.update!(parent: nil)
expect_project_directories_at('child')
@@ -440,7 +488,17 @@ RSpec.describe Namespace do
end
context 'moving from root to having a parent' do
- it 'correctly moves the repository, uploads and pages' do
+ context 'when async_pages_move_namespace_transfer is disabled' do
+ it 'correctly moves the repository, uploads and pages' do
+ stub_feature_flags(async_pages_move_namespace_transfer: false)
+
+ parent.update!(parent: new_parent)
+
+ expect_project_directories_at('new_parent/parent/child')
+ end
+ end
+
+ it 'correctly moves the repository, uploads and pages', :sidekiq_inline do
parent.update!(parent: new_parent)
expect_project_directories_at('new_parent/parent/child')
diff --git a/spec/models/snippet_input_action_spec.rb b/spec/models/snippet_input_action_spec.rb
index ca61b80df4c..43dc70bea98 100644
--- a/spec/models/snippet_input_action_spec.rb
+++ b/spec/models/snippet_input_action_spec.rb
@@ -22,9 +22,9 @@ RSpec.describe SnippetInputAction do
:move | 'foobar' | 'foobar' | nil | nil | false | :previous_path
:move | 'foobar' | 'foobar' | '' | nil | false | :previous_path
:move | 'foobar' | 'foobar' | 'foobar' | nil | false | :file_path
- :move | nil | 'foobar' | 'foobar' | nil | false | :file_path
- :move | '' | 'foobar' | 'foobar' | nil | false | :file_path
- :move | nil | 'foobar' | 'foo1' | nil | false | :file_path
+ :move | nil | 'foobar' | 'foobar' | nil | true | nil
+ :move | '' | 'foobar' | 'foobar' | nil | true | nil
+ :move | nil | 'foobar' | 'foo1' | nil | true | nil
:move | 'foobar' | nil | 'foo1' | nil | true | nil
:move | 'foobar' | '' | 'foo1' | nil | true | nil
:create | 'foobar' | nil | 'foobar' | nil | false | :content
diff --git a/spec/serializers/cluster_entity_spec.rb b/spec/serializers/cluster_entity_spec.rb
index 223d37b6acd..10c6bc0e42a 100644
--- a/spec/serializers/cluster_entity_spec.rb
+++ b/spec/serializers/cluster_entity_spec.rb
@@ -78,5 +78,26 @@ RSpec.describe ClusterEntity do
expect(subject[:gitlab_managed_apps_logs_path]).to eq(log_explorer_path)
end
end
+
+ context 'enable_advanced_logs_querying' do
+ let(:cluster) { create(:cluster, :project) }
+ let(:user) { create(:user) }
+
+ subject { described_class.new(cluster, request: request).as_json }
+
+ context 'elastic stack is not installed on cluster' do
+ it 'returns false' do
+ expect(subject[:enable_advanced_logs_querying]).to be false
+ end
+ end
+
+ context 'elastic stack is installed on cluster' do
+ it 'returns true' do
+ create(:clusters_applications_elastic_stack, :installed, cluster: cluster)
+
+ expect(subject[:enable_advanced_logs_querying]).to be true
+ end
+ end
+ end
end
end
diff --git a/spec/serializers/cluster_serializer_spec.rb b/spec/serializers/cluster_serializer_spec.rb
index f34409c3cfb..04999975276 100644
--- a/spec/serializers/cluster_serializer_spec.rb
+++ b/spec/serializers/cluster_serializer_spec.rb
@@ -14,6 +14,7 @@ RSpec.describe ClusterSerializer do
:enabled,
:environment_scope,
:gitlab_managed_apps_logs_path,
+ :enable_advanced_logs_querying,
:kubernetes_errors,
:name,
:nodes,
diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb
index 1704208d8b9..47ec014d4c9 100644
--- a/spec/serializers/merge_request_widget_entity_spec.rb
+++ b/spec/serializers/merge_request_widget_entity_spec.rb
@@ -136,9 +136,22 @@ RSpec.describe MergeRequestWidgetEntity do
let(:role) { :developer }
it 'has add ci config path' do
- expected_path = "/#{resource.project.full_path}/-/new/#{resource.source_branch}?commit_message=Add+.gitlab-ci.yml&file_name=.gitlab-ci.yml&suggest_gitlab_ci_yml=true"
+ expected_path = "/#{resource.project.full_path}/-/new/#{resource.source_branch}"
- expect(subject[:merge_request_add_ci_config_path]).to eq(expected_path)
+ expect(subject[:merge_request_add_ci_config_path]).to include(expected_path)
+ end
+
+ it 'has expected params' do
+ expected_params = {
+ commit_message: 'Add .gitlab-ci.yml',
+ file_name: '.gitlab-ci.yml',
+ suggest_gitlab_ci_yml: 'true',
+ mr_path: "/#{resource.project.full_path}/-/merge_requests/#{resource.iid}"
+ }.with_indifferent_access
+
+ uri = Addressable::URI.parse(subject[:merge_request_add_ci_config_path])
+
+ expect(uri.query_values).to match(expected_params)
end
context 'when auto devops is enabled' do
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index 247ef2be1b4..d3a0b8f8483 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -7,6 +7,8 @@ RSpec.describe NotificationService, :mailer do
include ExternalAuthorizationServiceHelpers
include NotificationHelpers
+ let_it_be(:project, reload: true) { create(:project, :public) }
+
let(:notification) { described_class.new }
let(:assignee) { create(:user) }
@@ -513,9 +515,7 @@ RSpec.describe NotificationService, :mailer do
end
context 'confidential issue note' do
- let(:project) { create(:project, :public) }
let(:author) { create(:user) }
- let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
@@ -569,7 +569,6 @@ RSpec.describe NotificationService, :mailer do
end
context 'issue note mention', :deliver_mails_inline do
- let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project, assignees: [assignee]) }
let(:mentioned_issue) { create(:issue, assignees: issue.assignees) }
let(:author) { create(:user) }
@@ -635,7 +634,6 @@ RSpec.describe NotificationService, :mailer do
end
context 'project snippet note', :deliver_mails_inline do
- let!(:project) { create(:project, :public) }
let(:snippet) { create(:project_snippet, project: project, author: create(:user)) }
let(:author) { create(:user) }
let(:note) { create(:note_on_project_snippet, author: author, noteable: snippet, project_id: project.id, note: '@all mentioned') }
@@ -891,11 +889,11 @@ RSpec.describe NotificationService, :mailer do
end
describe 'Participating project notification settings have priority over group and global settings if available', :deliver_mails_inline do
- let!(:group) { create(:group) }
- let!(:maintainer) { group.add_owner(create(:user, username: 'maintainer')).user }
- let!(:user1) { group.add_developer(create(:user, username: 'user_with_project_and_custom_setting')).user }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:maintainer) { group.add_owner(create(:user, username: 'maintainer')).user }
+ let_it_be(:user1) { group.add_developer(create(:user, username: 'user_with_project_and_custom_setting')).user }
+ let_it_be(:project) { create(:project, :public, namespace: group) }
- let(:project) { create(:project, :public, namespace: group) }
let(:issue) { create :issue, project: project, assignees: [assignee], description: '' }
before do
@@ -1079,7 +1077,6 @@ RSpec.describe NotificationService, :mailer do
context 'confidential issues' do
let(:author) { create(:user) }
- let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
@@ -1285,7 +1282,6 @@ RSpec.describe NotificationService, :mailer do
context 'confidential issues' do
let(:author) { create(:user) }
- let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
@@ -1338,7 +1334,6 @@ RSpec.describe NotificationService, :mailer do
context 'confidential issues' do
let(:author) { create(:user) }
- let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
@@ -1390,7 +1385,6 @@ RSpec.describe NotificationService, :mailer do
context 'confidential issues' do
let(:author) { create(:user) }
- let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
@@ -1587,7 +1581,6 @@ RSpec.describe NotificationService, :mailer do
let(:group) { create(:group) }
let(:project) { create(:project, :public, :repository, namespace: group) }
let(:another_project) { create(:project, :public, namespace: group) }
- let(:assignee) { create(:user) }
let(:assignees) { Array.wrap(assignee) }
let(:author) { create(:user) }
let(:merge_request) { create :merge_request, author: author, source_project: project, assignees: assignees, description: 'cc @participant' }
@@ -2079,8 +2072,6 @@ RSpec.describe NotificationService, :mailer do
end
describe 'Projects', :deliver_mails_inline do
- let(:project) { create(:project) }
-
before do
build_team(project)
reset_delivered_emails!
@@ -2306,7 +2297,6 @@ RSpec.describe NotificationService, :mailer do
end
describe 'ProjectMember', :deliver_mails_inline do
- let(:project) { create(:project) }
let(:added_user) { create(:user) }
describe '#new_access_request' do
@@ -2340,7 +2330,6 @@ RSpec.describe NotificationService, :mailer do
end
it_behaves_like 'sends notification only to a maximum of ten, most recently active project maintainers' do
- let(:project) { create(:project, :public) }
let(:notification_trigger) { project.request_access(added_user) }
end
end
@@ -2470,7 +2459,6 @@ RSpec.describe NotificationService, :mailer do
let(:private_project) { create(:project, :private) }
let(:guest) { create(:user) }
let(:developer) { create(:user) }
- let(:assignee) { create(:user) }
let(:merge_request) { create(:merge_request, source_project: private_project, assignees: [assignee]) }
let(:merge_request1) { create(:merge_request, source_project: private_project, assignees: [assignee], description: "cc @#{guest.username}") }
let(:note) { create(:note, noteable: merge_request, project: private_project) }
@@ -2902,7 +2890,6 @@ RSpec.describe NotificationService, :mailer do
describe 'Repository cleanup', :deliver_mails_inline do
let(:user) { create(:user) }
- let(:project) { create(:project) }
describe '#repository_cleanup_success' do
it 'emails the specified user only' do
@@ -2933,7 +2920,6 @@ RSpec.describe NotificationService, :mailer do
context 'Remote mirror notifications', :deliver_mails_inline do
describe '#remote_mirror_update_failed' do
- let(:project) { create(:project) }
let(:remote_mirror) { create(:remote_mirror, project: project) }
let(:u_blocked) { create(:user, :blocked) }
let(:u_silence) { create_user_with_notification(:disabled, 'silent-maintainer', project) }
@@ -3172,11 +3158,11 @@ RSpec.describe NotificationService, :mailer do
end
def should_email_nested_group_user(user, times: 1, recipients: email_recipients)
- should_email(user, times: 1, recipients: email_recipients)
+ should_email(user, times: times, recipients: recipients)
end
def should_not_email_nested_group_user(user, recipients: email_recipients)
- should_not_email(user, recipients: email_recipients)
+ should_not_email(user, recipients: recipients)
end
def add_users(project)
diff --git a/spec/services/snippets/update_service_spec.rb b/spec/services/snippets/update_service_spec.rb
index 638fe1948fd..9d1fe8fe83f 100644
--- a/spec/services/snippets/update_service_spec.rb
+++ b/spec/services/snippets/update_service_spec.rb
@@ -479,6 +479,22 @@ RSpec.describe Snippets::UpdateService do
expect(blob.data).to eq content
end
end
+
+ context 'when the file_path is not present' do
+ let(:snippet_actions) { [{ action: :move, previous_path: file_path }] }
+
+ it 'generates the name for the renamed file' do
+ old_blob = blob(file_path)
+
+ expect(blob('snippetfile1.txt')).to be_nil
+ expect(subject).to be_success
+
+ new_blob = blob('snippetfile1.txt')
+
+ expect(new_blob).to be_present
+ expect(new_blob.data).to eq old_blob.data
+ end
+ end
end
context 'delete action' do
diff --git a/yarn.lock b/yarn.lock
index 85a2ab6257a..5d81ab54be7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -848,10 +848,10 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.161.0.tgz#661e8d19862dfba0e4c558e2eb6d64b402c1453e"
integrity sha512-qsbboEICn08ZoEoAX/TuYygsFaXlzsCY+CfmdOzqvJbOdfHhVXmrJBxd2hP2qqjTZm2PkbRRmn+03+ce1jvatQ==
-"@gitlab/ui@20.9.1":
- version "20.9.1"
- resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-20.9.1.tgz#1e5960102a0c41925a531d6b8d00072b4717da54"
- integrity sha512-6C03BakNqharsDVChnIYzMbp0vj4syfoo4YDxJ1Ktfev8wq4gy5HrcoZt5dgNNXEfmwbyFnJlXaKBNDlLpbmVA==
+"@gitlab/ui@20.10.0":
+ version "20.10.0"
+ resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-20.10.0.tgz#5efdb5394d7cc8c95ce4bc5ec5b85d33e15b41d6"
+ integrity sha512-A6SDIZb7Vgj+k5iYKNLMYOp61bWFhjtsab2u3Z32sgx7GkOIZo5dB9ILJHBlLvZ5oOfQ/7Ch+3FmhGxsDjRIuQ==
dependencies:
"@babel/standalone" "^7.0.0"
"@gitlab/vue-toasted" "^1.3.0"