Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
c82ca12a1c
commit
bc75527dca
71 changed files with 1063 additions and 910 deletions
508
.gitignore
vendored
508
.gitignore
vendored
|
@ -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
|
||||
|
|
2
Gemfile
2
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'
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
:href="goToPipelinesPath"
|
||||
class="btn btn-success"
|
||||
<gl-button
|
||||
v-if="projectMergeRequestsPath"
|
||||
ref="goToMergeRequest"
|
||||
:href="goToMergeRequestPath"
|
||||
:data-track-property="humanAccess"
|
||||
:data-track-value="$options.goToTrackValue"
|
||||
:data-track-value="$options.goToTrackValueMergeRequest"
|
||||
:data-track-event="$options.trackEvent"
|
||||
:data-track-label="trackLabel"
|
||||
>
|
||||
{{ __('See your pipeline in action') }}
|
||||
</a>
|
||||
{{ $options.mergeRequestButton }}
|
||||
</gl-button>
|
||||
<gl-button
|
||||
ref="goToPipelines"
|
||||
:href="goToPipelinesPath"
|
||||
variant="success"
|
||||
:data-track-property="humanAccess"
|
||||
:data-track-value="$options.goToTrackValuePipelines"
|
||||
:data-track-event="$options.trackEvent"
|
||||
:data-track-label="trackLabel"
|
||||
>
|
||||
{{ $options.pipelinesButton }}
|
||||
</gl-button>
|
||||
</template>
|
||||
</gl-modal>
|
||||
</template>
|
||||
|
|
|
@ -50,6 +50,10 @@ export default {
|
|||
type: String,
|
||||
required: true,
|
||||
},
|
||||
mergeRequestPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
});
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
66
app/assets/stylesheets/_page_specific_files.scss
Normal file
66
app/assets/stylesheets/_page_specific_files.scss
Normal file
|
@ -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';
|
|
@ -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/**/*';
|
||||
|
|
|
@ -235,9 +235,8 @@
|
|||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
|
||||
i {
|
||||
svg {
|
||||
color: $orange-500;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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';
|
|
@ -1,3 +1,5 @@
|
|||
@import 'mixins_and_variables_and_functions';
|
||||
|
||||
/**
|
||||
* Dashboard Todos
|
||||
*
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -11,6 +11,7 @@ class ClusterSerializer < BaseSerializer
|
|||
:enabled,
|
||||
:environment_scope,
|
||||
:gitlab_managed_apps_logs_path,
|
||||
:enable_advanced_logs_querying,
|
||||
:kubernetes_errors,
|
||||
:name,
|
||||
:nodes,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 } }
|
||||
|
||||
|
|
|
@ -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) } }
|
||||
|
|
|
@ -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 } }
|
||||
|
|
5
changelogs/unreleased/226989-remove-users-bio-column.yml
Normal file
5
changelogs/unreleased/226989-remove-users-bio-column.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Remove unused users.bio database column
|
||||
merge_request: 40269
|
||||
author:
|
||||
type: other
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Allow snippet move action without an existing file name
|
||||
merge_request: 40343
|
||||
author:
|
||||
type: fixed
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Wrap dashboards dropdown items text
|
||||
merge_request: 40367
|
||||
author:
|
||||
type: added
|
5
changelogs/unreleased/id-bump-marginalia-gem.yml
Normal file
5
changelogs/unreleased/id-bump-marginalia-gem.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Bump marginalia gem version to 1.9.0
|
||||
merge_request: 40481
|
||||
author:
|
||||
type: changed
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add pipeline_artifacts_size to root_storage_statistics
|
||||
merge_request: 40425
|
||||
author:
|
||||
type: added
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix advanced filters in log explorer view for gitlab managed applications.
|
||||
merge_request: 37926
|
||||
author:
|
||||
type: fixed
|
|
@ -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"
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
20
db/post_migrate/20200824130028_remove_index_on_users_bio.rb
Normal file
20
db/post_migrate/20200824130028_remove_index_on_users_bio.rb
Normal file
|
@ -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
|
19
db/post_migrate/20200824130447_remove_users_bio_column.rb
Normal file
19
db/post_migrate/20200824130447_remove_users_bio_column.rb
Normal file
|
@ -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
|
1
db/schema_migrations/20200824130028
Normal file
1
db/schema_migrations/20200824130028
Normal file
|
@ -0,0 +1 @@
|
|||
891f1660592c4443aeced7594cea391066cc79b54b40c67a8c973eb6959bf6f1
|
1
db/schema_migrations/20200824130447
Normal file
1
db/schema_migrations/20200824130447
Normal file
|
@ -0,0 +1 @@
|
|||
e6dcd20fe77c443999aa2373e0acdd77eb68c3a6f0d6d65e86b7f85ac97ddb9a
|
1
db/schema_migrations/20200825180050
Normal file
1
db/schema_migrations/20200825180050
Normal file
|
@ -0,0 +1 @@
|
|||
330340ef4d525e1e13ed28d71d23594627453955ce5f810e370d07bb3623bf35
|
|
@ -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);
|
||||
|
|
|
@ -98,6 +98,8 @@ swap:
|
|||
speciality: specialty
|
||||
spectre: specter
|
||||
splendour: splendor
|
||||
standardise: standardize
|
||||
standardised: standardized
|
||||
sulphur: sulfur
|
||||
theatre: theater
|
||||
travelled: traveled
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ""
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
36
scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js
Executable file
36
scripts/frontend/check_page_bundle_mixins_css_for_sideeffects.js
Executable file
|
@ -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);
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
const modalProps = {
|
||||
goToPipelinesPath: 'some_pipeline_path',
|
||||
projectMergeRequestsPath: 'some_mr_path',
|
||||
commitCookie: 'some_cookie',
|
||||
humanAccess: 'maintainer',
|
||||
};
|
||||
|
|
|
@ -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',
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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%"
|
||||
y="0"
|
||||
/>
|
||||
<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>
|
||||
<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%"
|
||||
y="0"
|
||||
/>
|
||||
<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>
|
||||
<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>
|
||||
`;
|
||||
|
|
|
@ -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,
|
||||
});
|
||||
};
|
||||
|
|
|
@ -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 }
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -14,6 +14,7 @@ RSpec.describe ClusterSerializer do
|
|||
:enabled,
|
||||
:environment_scope,
|
||||
:gitlab_managed_apps_logs_path,
|
||||
:enable_advanced_logs_querying,
|
||||
:kubernetes_errors,
|
||||
:name,
|
||||
:nodes,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue