From aaaa025f810687d0cb93c919fb8a3dc4087bf6ff Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 12 May 2025 21:18:45 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../rspec/no_expectation_example.yml | 1 - .../components/codequality_issue_body.vue | 8 +- ...eo_uploads_file_missing_details_v17_11.png | Bin 0 -> 82707 bytes .../img/geo_uploads_file_missing_v17_11.png | Bin 0 -> 45891 bytes .../synchronization_verification.md | 198 ++++++++++++++---- doc/administration/pages/troubleshooting.md | 2 +- doc/api/epic_issues.md | 2 +- doc/api/epic_links.md | 2 +- doc/api/epics.md | 2 +- doc/api/linked_epics.md | 2 +- doc/api/notes.md | 2 +- doc/api/openapi/openapi_v2.yaml | 9 + doc/api/resource_label_events.md | 2 +- doc/api/resource_state_events.md | 2 +- doc/integration/arkose.md | 2 +- doc/security/_index.md | 1 - doc/security/email_verification.md | 4 - doc/security/identity_verification.md | 4 - doc/security/unlock_user.md | 2 +- doc/subscriptions/community_programs.md | 6 +- doc/subscriptions/gitlab_dedicated/_index.md | 2 +- doc/topics/plan_and_track.md | 2 +- doc/tutorials/boards_for_standups/_index.md | 1 - doc/tutorials/boards_for_teams/_index.md | 1 - .../api_fuzzing/_index.md | 2 +- .../api_security/api_discovery/_index.md | 2 +- .../api_security_testing/_index.md | 2 +- doc/user/group/epics/linked_epics.md | 2 +- doc/user/group/epics/manage_epics.md | 2 - .../group/saml_sso/troubleshooting_scim.md | 2 +- doc/user/infrastructure/clusters/_index.md | 3 - .../clusters/migrate_to_gitlab_agent.md | 2 +- doc/user/permissions.md | 1 - doc/user/profile/_index.md | 3 +- doc/user/profile/service_accounts.md | 34 +-- lib/tasks/gitlab/openapi.rake | 22 +- locale/gitlab.pot | 46 +++- .../components/codequality_issue_body_spec.js | 10 +- spec/tasks/gitlab/openapi_rake_spec.rb | 53 ++++- 39 files changed, 321 insertions(+), 122 deletions(-) create mode 100644 doc/administration/geo/replication/img/geo_uploads_file_missing_details_v17_11.png create mode 100644 doc/administration/geo/replication/img/geo_uploads_file_missing_v17_11.png diff --git a/.rubocop_todo/rspec/no_expectation_example.yml b/.rubocop_todo/rspec/no_expectation_example.yml index aba6b37def4..a80f71c3ad8 100644 --- a/.rubocop_todo/rspec/no_expectation_example.yml +++ b/.rubocop_todo/rspec/no_expectation_example.yml @@ -47,7 +47,6 @@ RSpec/NoExpectationExample: - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_inheritable_when_forward_pipeline_variables_true_spec.rb' - 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/ui_variable_non_inheritable_when_forward_pipeline_variables_false_spec.rb' - 'qa/qa/specs/features/ee/api/2_plan/epics_to_work_items_sync_spec.rb' - - 'qa/qa/specs/features/ee/api/9_tenant_scale/elasticsearch/elasticsearch_api_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/10_govern/group/group_ldap_sync_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/10_govern/security_reports_spec.rb' diff --git a/app/assets/javascripts/ci/reports/codequality_report/components/codequality_issue_body.vue b/app/assets/javascripts/ci/reports/codequality_report/components/codequality_issue_body.vue index f6f053dd5a3..dcc2b84a906 100644 --- a/app/assets/javascripts/ci/reports/codequality_report/components/codequality_issue_body.vue +++ b/app/assets/javascripts/ci/reports/codequality_report/components/codequality_issue_body.vue @@ -4,8 +4,10 @@ * Fixed: [name] in [link]:[line] */ import { GlIcon, GlTooltipDirective } from '@gitlab/ui'; +import { renderMarkdown } from '~/notes/utils'; import { s__ } from '~/locale'; import ReportLink from '~/ci/reports/components/report_link.vue'; +import GlSafeHtmlDirective from '~/vue_shared/directives/safe_html'; import { STATUS_SUCCESS, STATUS_NEUTRAL } from '~/ci/reports/constants'; import { SEVERITY_CLASSES, SEVERITY_ICONS } from '../constants'; @@ -17,6 +19,7 @@ export default { }, directives: { tooltip: GlTooltipDirective, + SafeHtml: GlSafeHtmlDirective, }, props: { status: { @@ -48,6 +51,9 @@ export default { severityLabel() { return this.$options.severityText[this.issueSeverity] || this.$options.severityText.unknown; }, + renderMarkdown() { + return renderMarkdown(this.issueName); + }, }, severityText: { info: s__('severity|Info'), @@ -67,7 +73,7 @@ export default {
{{ s__('ciReport|Fixed:') }} - {{ issueName }} +
diff --git a/doc/administration/geo/replication/img/geo_uploads_file_missing_details_v17_11.png b/doc/administration/geo/replication/img/geo_uploads_file_missing_details_v17_11.png new file mode 100644 index 0000000000000000000000000000000000000000..71867af677d4f20deea045a3cba7d62fced42ef7 GIT binary patch literal 82707 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

t4soJ=d_CXc2LhK8n`+L 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%0A*ybv_ z>GxX_2NANfu|NfEXaq-;o%2;I*e>|mD@1k59;&EG=|h7F`C9tExEvsvI2QMP9vMX? zoLM*FRc}$tH$vlKu^#w(4W_{_Ha>71o^^`V{Vp)U#GuvUMUITw{e{6iM^6*Q=6m}a zV!FcEP-$U-ZQ+~|nq~UZG@dAB{=}2TI*$gii{ieg^a55(S@B%1FM?xJY(NB2J>3Jd zeP#QwcBDQ(<|^B_Z{-$o&I!}z0gEvC)1gLQH7a|vxD{vfqRiB}mQ^jv&-!<$HNOc% zex`<}b|0o~-rth{b|<=R+<92=@mB&uXo?O-8#sPSe3N*P7=~JfsQnI_;v=M7`rdJ) zUZ(fjdB5j_OO1T9VYHoR-=_~ zyd$~e80~+kF~IwQ<*c~$42=1$_;0716`H-r97&yG4_&FR&QBaS#z2sXPWnvnhuh8m zb*KltUyX=UPjuL^?d*8%2R?yX#Gi+HWQuIb=?r)kyUdb-NxVbRl!b~xMge*=6>@ixD(G{NRec4-a$ADNPow!C&R%L6Jd84{xsdYWx3 z$EGz8bpbs)9{SV$8g{vMS5aBGe593tEViDY{3ROV@5X8Py#TP03!)a_uRgkKF7St+ z>@GCMBBM=E)Y33U_I$-&ikYM~Mp%Sw-9+Gbu8}aSSo98BD>7zjupjs(L(tDBh%IOQ zGsr4W4v1r*m3BqtF2#FPna}YX>K*S{BNo_0m#8|cBH+v5rjhRRK+I3u3NQ4Z92 zDeE(F>m96biMYNAiXBx$#+)uQq;iX9l8PeS{H()gquEs0u<=CYy(yqjzTuP6!XnE6 zD)Y#Av`-4_k8{+YRB`v?G<)n2NK8mv2*zh9q?@>zP z{a!&G3Vu)V@c%l+72O?H`$!B2^CD(`HPV4>V0na-?Og5IA+AJv*8>wROgl3e$pO3|R`8|P`9L{X&5Hsvxv1U5qI`$GUYntRk0l~O#K)As#U68c4n?12pE@vnl zL!P|4Kxe8TNONBwe{S8d6Z1ChCHdJwE@R?GW^g)g*5DO}ZT0@H9_oj=>)Ly!SElaK zZC=6L!-wAoQ!Bdc2#58+wkuwP@HLo%_SdVmti|(JSP_PDk1Lef`+kR>?u8)q1g9-2 zBur1b_CH5Ga0tWr8~S%;I!{U^aL@L%T?}qz+pEiFyd+M_bnNe*S#jh060MiMcS$VeCu}8Lp1WDn63k$8jlsPfgr^Wa1;wlaFP)gU5ov}Aa zLuy9O6y!#^K}|uAz)@Ir@VrwvSLRL3GX=#Mfb zP1p<)nzI+PBNEvjf0!-PS?Mu6w!&jjyT$uY?a72}=_%@?43p+__Wp_b9WaqPS8L{L zFv$><0uQl%pLQV7hu~un7NTOhx`#4&c{J5KpS+@W8C5R6X#Yhdn8OxTdZuh4H zAutqoi#W%BTg1iP*I;3HMb!rg{DUrIzgHiwrpvE?w&SX1@Eu!Ttch1U;amE9TNshV zzX1*Sh~pk6S1qMddmO z|0ODVkC1|a%B%kOCQ0}2UYX**y|NUH$U}UGntv8ms=LdIS~$Bq{A{Cfm<2Xb>#`<)RKAKZEn*mHGQ5?yL7sU%9V2mX#s>^L?@^7&yP? z2a7I$dO@)13Vg7`v4Z~hR}dHmWYCF7-wgkLB8U$@@F8cf{C$4Cja?mzAyA4pNdN5p zj^HAR98dne5mF`iWWjE2o%7Fk9Eu>&6hsVkDdD?AF!<9F2Z3rk5LuoF{ArROWP_T=v!F*9HQ+$!`CuTOGggl5)h4k@H(VT{MZ^6z^= zph=ij4*QIsh`IdRK9O`#oeNX_(}m`ERd!dgGmSTekHtR^kYd90ALgw3oiQdyA*8O*O! zBmUdkd-Tw&q8t{itE=74R$mO)TuP{)4yKYsKlFV@tJi4+bAtGCiue@5OOg$Ia7 zJHeK?T-bOW`GsayGrvE;z<~B|54ks?++IbaYA>oSi0IaSqFwOMGlA!HaBte4wqF8t zn9mdP+lzlEI(R-ZYG@^*AJyyl&md188{_+&&3pXc_ihmq)Tc<~ww?O$;{W~;c%Uc% zt%Msz*Z8L|F_DC!{HfmmIeP2V+#!SAh@mV0On7oEGC|Z&guBoGj)0a-Fg8z#?VW=D zwCMu)4RgEz#O9yl8EE&D&VhnS<^+hdcK>|E zlm1091b8 z>JucJt0?t}lrNTKm#1>~dx>uMGLUWm+$hK|4jc}868V%QBB>cV+Wdj5&mjy1*Qukc_NU`>@;1$y~JWLa;rb`1{TdC7?~HLeNeBxi7C|6CF$& z(7f#;J8XOrbeXm~KAVWGR&Er;nl<;*YWeylE@R?Didns0m9CQXZe4&EkZo{Lb`JVX z+0_+H!n5rLYO!xGcW1+2lhj6s7W<$Qk1&dy+}n@>CMhN%yWR0Tlv!B4aAa%>CcP;teinrKQ2-e;Zr>o`a~n132tA7;fQ~o__qL;wqXL%sG_4Dqc&}TMd+!$`t z&uz}zY(!+Q6M07w0tuV0#us=?Hm@VewWh$IE&rRbT@|1K7kM6kHxVOB@YHu#jweR zy!3w@UhMLu$#+`G*1u2y5=8Hc3f4C|!Qrf+f#YdE3Vpz;^38Yy94^`QxbeY<-*;~D zyxkb^bug*Oc1>h7k_o-e*f?k&Z{IoR7a38=wqF+^In;~R1 z@FV86cnKK&^yv~&p@j|SGh4Y1%0HYrR^?6xoabt6FJhccCNBeywt1S4sTA`jWNTiD zpZyHzfBYg4-)eh`&GC_(B8_rMl}jj#Zy-Li%FfwbI3Zh3%%p=R|NUU@zW%U9SLN$% z>`dRj8J?mWcb5y0Qr^h5l)B*-2Wjyj+YUi`o9femsdN%L`J!lI0ZXCtqiYqXqf-^y zn9b#`Ut!ytc-B|+dhs8wwmBR-dYa<7O-p*7bywQ@tb%nr-LSNMsKS(P^AN;B7bm59 zePIA?BnhBXY01i68ig9B%4G(h%8VwDX*!1WgJUj!Sp~0lJY01(%6px}uTu~ve|fnP zpxJtU%+_JO&+9vICc8-cXG%tbDXAZXnE%f*#jD(84ATZ;Qt<_$r0;R&4dlR}tULpV zx28n~0Rd@gkdp3FB&3@|3Q9?Lhk)dvkuGVZ^Uyr&{QSZHexLgu&->~5@{V^5 zKIj?i?7h$4Yp-=(^O|#B_hDJ`sU{!l3!~^&>FHiq`&?A7)A9lkWQJ4;CNq6;fCn5l z5_Oz(2K^Gwyc)8Y%dRdC`qHxLbnhJ&5AOgf`2 z$Oxpp$4pvY6I1~YpFSK}*pFpkv5arjLz2*uB^LJb05r#VkT7>X&Iz(U&;D&XVVBtp z9qcIu?pJjoTH)F?LL8DtD_x;P+?LI`qN`tg#f^67_4j|=E#wU%ZRhBw)aJ3My@TuYFFI-rzDTzv4=K3mY$4S?|81g zdspffQkm&*)zkG=j7p|>7QM(U1hz?mz+>V}31BNR2!iMXV{tL0JnY9Rk&)-fnVSZMS-H=e!F=)1%t zv0_lEEDs?S)^tEStDCUz2K`eM#_LoTlIESEYqtAGW1ipK!;8MjM8B{DimTJba20dok!L) zw92sH5#!!yns8@25sxA9cw_I;(+6ef_1PF=NDr_+zEcN?5&*!uRHQ6-v!$ASUSGcq zUQB+TUYwd8fY&zI!ow#t$&8_Jp;@gwXP|4u#A89Gnc z{xUs8aQX`X8(V-0iS!QAWCT_8$iCfJI!*)@Vf)?OMA>< z+|rt%oUueZl;y}@*LE_jsHL@yX}837zLXMaqt57Qa^1u|+esySb#lP&j{fKT0}s{z=9i+r5R%p;AdAcpMV*Y%fTIIc0*mDinW*)0R`@;<>3VuPfW`9i`y99AAKa z31U>RkfUKCZEp~~2GoGM@{uBBGs#U(N_k#~M9_z+8PX`WiIpX1+fAs)nCI#~-6H$RbV`hkn8 zkC}K2rd`i32K7vrJ%iG>KPV>3*WJ4k=)RJ4zQ9Q8{*2229u;uRm}pAkcJ>AN$`mt` zZr$N)eH2X?tI{{t1^J}>TVBu!+Ievr-!Bk15JTr5oV9^u?o4Ptz(<&EdkTmT* zE4;M9z`DG=q;~v{9>sf*RO;25D1yY*p{%d7o!8^#$d$Sslq33Q(vhKeX#Ft@H2|`7 zG|EiSD(@ot8Eu)a+Mk?>GFq~89leH`_Vv^qT^3{=!OZ} z!3!DdIL|a;Z_)jwzH8_s6U4Un*Oyp#z|SVr1`vXO-tVlko4B&s`_XRgos#U_V$f9> zdCGi7Z#O%Qn-Ae?yhctomfn;BO+Ek3kHil~Z3F;KQf*53<4A=ie-jT+b{rZGJx*GnchvJ zm5BBuIfIrtBMs;3z+^L7kh-A{avM0;1 zEs&XnzcM~uJYZ^!7-4~rol=>BcO#@)zxCdf=R+js%wOMoz*LO~d$nx-o03ciNYwsv zyv}9~LU6`fMXLc?+3c$1*3g(ZgUCn&z^)$9g1iw%?iMeA4H@ddQ)N7Th9JDWxwAisGb=BdFgYD9LhzD;&ra>2La9}@SzxJllwg6|+Kcn>Z% z+{_@6lSd%G(_2)qxlJS)M0`3w-UPOwc<~(^Bu_ax;3ncci2xs9V$kT^MljQiAOkXa z%Y0i&a>)Qg{!`WmXBSWbAv1f&C$-zO$r=}AXa5gqK^6?j_K)tnO@#~Lkl9L`#?8e7 zWDbBhcW?eH!t)qhd%(w+@i*7*iv`cKu)?Zt&oT?YwBD~$Q@2Bk!FkcOY_|U{o#02g z_<@U+LPrX{&9v*qz?Crg2fetB@6*9eA*fB&#<>8W*62=c#^x`JZ$yvw>pKh(Sy=Z)VGU^T9kN z7$U?L;c$BkP?5lp=OQb3HxJAw8$3|A$-sf9H*>bx9-K(f+0u;g_Ap%F7E}$|>E8}n zMMlN)w3c4Sx*3914w9gO7s~xaPMhvu>{lr_|?82SZBNaiWoeCYuV$vJ!%p- zaf9oj8UO8&O7JE9joz8tyBH2n;{)}-VBcQ9I(!lO`Fv3N<}iRsgNh|S7M*uH;Tqu+ zuIH=V+|6NpSHYL|&Hl@SfIq$F{~}=ezcC6OHrJY0m3|_<-=IZX$WpV}8=u6tW|MN>uF(gVees)sI-Z z^S0{<)&E@xd_}-zyFR}?7_v6}WmN6PSk-Cp77v@_VY~(TXiSMP@5l0q)zZ?e)=1!go7Dy zHtsV-a&rfpL&0sgZu6YY?1${`KK`x$MS#w*(ORsnjYa=;HTB=8^IHx;Odg@!4U+#^ z$b8iA1_Fjgtg&2t7jUkn23jHI&1eI777BpPeQ#FKx%N-#GSXO>|GHqqmWfT90&UTY zuq~_JtbbQOmss#_sbk=W-X2x=J3N^_Sm^^w6BFsLFTA2yRZw_6&+_F7gq7@8yQsnT zP!$NQIpaXY^bCXOtj4d_c}K{6Hb2vHy!s`DQq6d!{UNCk=FH+K-*^*DOC<;|> zpC}v?Pts!K{lZXVXVIx)MC!nZ_R?`fIcr2OQIWgId2RX-kN#g=9}5nmzI|(Z3s7S9 z-L0n)$=9lDT*So6t zW0H_3Rb5a3Sx{UuuW-bum8J|F(*aCqc)&`hTb~e9^lBU8^t9GXjCro^3_7RR=qBkF zy2cVK8yjE6R!^r6O*3VLP=2z%nUK%r_VM~uRa1Q|by@klUt+++mD+KG<2gIEoSan|w_&q*JjI%~)ZpL9bv^a7bah@R2$wxB z=Ghy0A(zz#GQB$61AnL{pW;JOVfr8(ny9KdD1|9YvUe6!mVOlb`90UwGGboC zejuHi^j4KRuG(<9FlppeGwL18*qf5Q2qsW1{prqb+4Q8E=->BO8oa;67+gBHZ`##Y z_?tG_Ptvplus!^4n4R4m}#Be?F-tjo%A-$ zUiO2_wM9|tIY?)EjtfeUvoVHhz1V|H#9B1uRv>R#N@AEam9toqsbSl5@sqfDJx4@i z#!#q?a^~y1UCF;OASSxQZ;R}5Kkvhqy^Y#pScl5v($E-(>vt>m%4nxDI5~S%qrI6g zDZiS8#5?2;P2RCRIM!Rr)~k{pPQ;*AUXo_BZl`kPw^ySxi8HVnzxe3tnN*%XCPC4( z|5-knUxE4Ra?Bp74ZdcFo!DG=bR<>%yYe?5fJMTU>%T74yWj5&4$`HpSD6nhvH_`z zOeEVUbP~R`8ia-1=(luu=!ws@_m`mzytA%jjag;Prp&2wK5N|{TY3L(#?_)Abi&BdesmMa>?$D?p<|I4 z+Aggr?d8o$uRtN@CUl5|1R|?d?sc z`K{U>Q=$R3+!Jqnu%c&_4Z%Jg25E#^L85Y%?iLwo%fU;R`4gF6 zH0&-i?vzXo%qmwIVDQ`Tb}jB#^bFa*5hfh9YGwynKrP0$RZFW`-`Mta0|Tj%`y3+^ z^Kr`50foqM*AxhebNixeI($2nTdwxgI>LHl^pFiF!YkN*4Oi zz@~3b2jJgG!d?JXR{Vh=Xp$B^U1K+K#}@c359OQ7O%&Uv*rVCS(*Mdd3H_s7sZDtP zbcVacOGg-Ro70V3kkP2Nult*|YKRWTS%|ezPqCug9qfp@EO1UOArP?jOHo=MH&rsF?bE27uR)-YeEq>Andfg@ z=z9&qtdq2pzxgCQ8o??=uBQ+g!9LwAV}TP;l;<8x$UxX?k_BvKv*aQ48gpJ#c#?x( zz2^}2!yzQ&rIPkCsT7bI7F$5L0Sx9e$Y&^;(fW{asZ%c>9Wc(uz+%y@e)fdmnEi)Q zdkCS`ua#LnSmccRu{3BAK`qu6$mYE5aq2i#)OV*uHLsG!FIfM61xEznRdyu|E?Tk1 z{}4w(*7$T9b*;+lvDn6rIetZXzXqFm;oDr0K$NVop53VLpmZq&aYwpOY?qxHUZ zg)~zm#oz9F&fB=Ve%&ce90SYyN8VOP!KjrYQQ;2+TAG#v1#0`Kr73ZrYZ|auRH?f zC^okhWd8HP!8ipi?i5tLk1`FFTB`(Ee$J8SawpS0 z**JA4GYL%5T#)i4R<`>$@)21B;jMooo%&x=JP7GLRN)Z#RFzH7HyIV^Y=Ce#=;UlU z9zXZm$a>&QBS!8akK>>6!_B=400@iG$UmXYRmqG3ERfDWs(I9j6B|V!6}MYBk&ywi zLO=*iusl}Mt~U#s=->5RA1q7KNuADi7M`fsP?R}4+ZX~48|E{ARDj1#`OL;E@eW`J z-Bl>8AR6OMn(%><7gVp*Dg{MV^}VRVjXE+t?XCweO;c$x(8jJWKCbOAyfIOmKQ}3A z9?DX-{U%*BKJfl5W5Q{!c?^d-&eEoVDZ5W7)i*~q!7)u#M>an;%<)*ySml}IgV;68 zHrF|3w%9mW5+VZ-ji!pxP(dwrtQa_w=%IBAxF$39dzV#nv22pElP&ZtZoNvMP9t(# zk~x$fxpG@@@p_#tU4MUmUEJrN2)k~eB~;Fir_W@NogTN9k2rl5SD6;sguy%{b%Zt&@cCkxXNL;oHH=nkyl z$--BRvzD>#xd=n#81d>DlBr0W=69EB`!hfu2VkJ~-a-`u zAX6MfLRsB!$g`WcPMp4ig<;^33b?Hy6xiwEP`n6yHb^PSc^yo%m(d>UqLfp)DP;9; zjag(KoLqqLW)Z%FSO_PB(EoJ3`NRhke!T;4hj4F`n_l?!qO9!S4xt6#aa+h4xGg0# zv%@oBd+onJ8NMvdtHCqieY;z}Msqei1AfP|j{Y~A0z=@nZi|=6f0HWsm&n9?IswG; z?*Kn>@L=BatT_%kvAZJGX?ecFx1`Ywgv{?bSa+2F2THs5?M=RF17b^u%ciWy1 zpx*u-25=<}1_@?VH&=pH3l5XM(e>*#MA3tnb(aS-ZEgCe8nf}?!toV-VGN30E<=*z(ef6re38cb8UdtoNG2mp&He2D}Nje4du%A`Rr7Cl6jwYhyDX;yA(OglOK z6%V+0<3yHc`q3eT{JMpDb<98r66I(y*7ZF$&v<_%2=H*)us9cn75O`-Y)n~U-|?5u z<>KjS0nrNcuwFHPHLiBl~2TX>TM`lO-rwO8HHUgEl>{+QUd_fjvSbXty2M)YKG1uc7vREQh{E z=uCRnHE+Z(Mzl<1|V$ug79&9v_PxRT`)?j6hP!ex`i5L${7-&j~1NP zh-|c*$l>|E*rx}wz!vm+xPsWGan-w@z{>!gy}M0jQEWL;`!5H_cNfs52%f%x2>l1Z zqlB+Fh;2TtFxZ^8T;^w0K(<>v`KUK!BRYsv-@i% zi5-Z6>7CnE@y}dsiH29-pIDuJzIo9uxDnFOu);}%nQ__`qu^o+Y)Z)(57O0GIP3Lr zEj)ha3Y1nM9ImCw!p@?~REo?PM4S=YHTGTqlA?KW>zvM&@8i;+#Jr1V)|1UAU|k9> z0xaRnq~XeWt=fj zy&%>dw%x@)F&hcW%zUN?GY#(QKnQx|GWvyez_>^Fx_+X@?{q$0d??Sk$3E;2%Da;qF}+FL?64ksq?{t;HCjq}EqoSDip#SjF1gCp9^cD*RI1%EL+SSJfCWHP z1L*INSdAB@37H#V6X~>y$x(cce`FdxNT>D+v~&Nc^ga@RG-54!kDyrY_X1^40+>Z$%;r^j1;Ib=H z+LWZDS#CxH7+Wr+9iU%hH(42n`?<{&wah}>zWF)VP|ffvyqpc;wWt-8`q+ntL)+zl zM6}f2n-s-t#kXhiX6`funU^5>?P@+sKAn1FGDh42C^w;F&3W$V@YM=;7UYu zb-HSOnt!l5l;^DII_CG5h3{}$jcKaWeW!_5+#enN@HGZj_)~rw;Aeur)%p%6$b^ic(P_*46DDxT7tGa%f8d(ar)U3P>!P@#kQ5}!=NFRE&-X>Xl69% zbEIz4mtZxOeJ=Cvl?x!9n$MPJ*5mDP!Vx24A%`~ID(%x!lNTmLL~K>>eyJ&E$24K4 z?LU=)`CPCOrSh?r-)=Lz0tjiSSg}U{U3vseP*%}P!OPP1l-Eik>*6bAm4U%{wT zDZK!hFmqee^=36}FTW-kc^b$!Rir)fdFZq(%xNX551CQDFr(ZCmizcwg5DGEcQmID zmfYz*{tPrmQ*k0F1169a7KoZ108d7lh==!K2YOpQ&Dsbgm@mnC_JX$$Vx@=@$VXIU z3E5|JgQB_~^m1=eb3o};YLgu{rY%+k61TFja+uOZT)QOk#|HI7+uF6HOfOSf9-mzM*-7 zib==@_3QnW35W$wYQGDGon&ec*DZ_Bm(tq-YoxS4*8hhaht-hS@y?u$X__u*q5I^F zvyz=L`(+X%fEFVwvQ89sbUmq!yB~9jI6xESEk3jcMYm5`@V1NyxY{M{o?7&u_lX4m zv(9_yg57sDAmQPEwhx+l6@&~mR-yOvKFO@?a}N^-Xn|KBoArem5mtrGm<;Iq#YpOv zFbs`z???7^)p>}e>JE@Urx)7csWXOD?sWme@;zSR z=W?#+g6z=)tZrZzB4J0Ycx2~?dY#vq4;#c{42Jy7D*J<|CTBfToU8HuQok6n4Oj%p z&hQ;sop70V`>hIDhTXAkZFdAzZYqA9GOemq6B=XjT#Y<`Pd$*-FYjme>|dU70-e-7 zj6W>ALY?~kJNmOtKeVMi@k40w;#&^hhRgn484KW|hdrL{lri zi;LNgw9@h}L&$i__rQ9rP-lOmXv(;!Uu&toAc@WE;*CrMnO6im*3l)OcmY5>mXem` zj5_D_AN_)IY`i^Y8QFN}lXFgK(i^o5gd^W`HS>XkcxGolk!BS|JuPx0d%y0T;CsTGjp%deTv9khigdNv7BK55bAa_9DHvToQMKMf$!(s_Ad zgu1p?1{86V<&aznlCD0kU#}cfT+^5}MoY$xNc#^y6XWz4eGD00iiLt zbDoRZ6!~(mfqR%Gl0=HR)A6*1R)RQYN@NahI8g!xUZz}Z3~$+Lw+VaRfKm=+@sE)& zuV6}+lix}-viK#=4%ew|nhq)jRZYuq8Q(NB2RRb+d(G)1ev8Stt0YDV%G@Uoghx4p zttoe3l`8Rb|%K`nfjyH1TSJsbgbU}eTq-Qk%#L;yurN=oN@_{T;Bn|So1inDNP(ST2Etoo^UISfUy6BL2CBZ4!&nwX9u|n2_h$ z@&4!zY56~;(&k`zxzJ_T>_540JEATwSr*5yXolC{cONSOZs5{V7mkx&ZC{#W6k}Gz z&zJ0ZmKnJ&Ndm6-iO9CcONL+n+@eT<>iR<1Op1#ziMYgGgb|xCTomdyjK1DXAw%l* z@(#kGE_L6z>tuF!NkRC+4E8jc-=>m1U)zR$vCG=IB9 z>fv;t#c?km+IcyQ&x8_9CW@$1YzYL&+BoP{<4gjPn5G6mbhIqs(lDO}Oe7hNV67+CnGNyz@B`abCc-b?*>KvsK92x6pf$$(Q%NcQfW zKBmYB*377Mfdh(DrNBsIiV@eEnvZ=LPnGqjwF6-Z9`B$hc7=h{bt4khS696Ik2`JR z>o!t@Ko$_iqVRK#7L!Da>E+jRQamQ*H(uOVO*YpvYRRK_ScA|=9OJUL@8+sjRfquj z4={8o`&B}sn$UDnnxxZ0QXKeskq~{c$ldxc3&96eRIzTc1k`H!dAPHMI2zp9;!UY( zKQn_`ehgi7cEavjp@-S=Q+W%MZ|j=^9gkLQ;+WzkgYkm5O|#P#fwe{E3GL6#<#H@3 zU~aL@ts+Td)-@T3gL-N5CL5V-S*I{$^=L(WVUln z86Z7%MRu9*ocyOj+$aC(j~RO&AC!Et?y2X(RT|{A&+rp?(6YQoAG){c2l1G{$REDqnUk0iJwPL_gBl@ zx!-Ya(1rsm!6yf~rQOiC_3mSHP)$avDw~;zri5k{hPMC5Q4ylMLfm*c8{E;o99Hx zaNZyKvrG0xwYDfhM7>p9&>Ey|nX<95`5I-D)T{rh{r?aA5Z54|zE_q@V-kHS!YqJ3 zTrSt;$Xm`#GM2dndSvZIr4Go$mpb2F8j#}6zDT~hJwG`M{>_{} z#qC%N6P9)(ndr&+Vlgat>6X9qr@03}2p*8L>02JeE;Gntcb>3l-Y9NR{XT=0HRrh< z_RY#lrVZc_|6u*B=o?U>c^KRSfm?dO|Bnd4)8hYYh|vEhQK0`bl>{tn3&8NxXtJEJ zbUi=;P~#nCA}MNK=e!XGCYvwGBg-!7QNNKs~6FLX2DT_;nq{{dXTBSe1E7o zofIKsMIAIc+z#Y!`<(Y=jeFE^ zQrqJcg{>%gg`wvCdcc#(qwYeBkjo>m;oiTpcYwcwWXltlIgQ5TyGWG<>e zr%o1~{W1oGKMn7fI7Ft)*QLxs8N?%IL;PSa$!HYH%jP&~B$LDynhbcNe|}lLjTgkH zQl53a57@F zV6u}4!X~rIoMKsr@{j;9@JZrcra8tuE0Tx=tnVHz4K}$vHKtTF(xZ!J#I~4RW!Zp- zTU4@3o%6A~1XN zjGKeuSg_FFEd*ZO)W+TYd}j}sSSZ)2>1Y(cPo?5=Cv99CxU-i#?}@07`hG!}Sec+_z|qB9`OD zzE*ip!JZzQ<~_}*lBH1U-RO3d7{jEZo7JB{4*(TA$7J4HQlASTEk@o$yaA2jtiK{u zki}uqDnQ5xhqAr(=PYqokoUGq^*aX3Wgc{;T^r`AHGJ2&ni6%oXk5%)Zq%I72v-oc zjvyR1?N$`NWW=Ej#XJ-W!+IVKadZLhAg9*Lc4hKs-oFw^5Wq@sTfC2250yXGEJOj` z4;AtCq^lJ>gU6QKTO_OoIhO}OLHO;2mU>G!qSh$sKa9K}u%}6nxL|^H`X87IOXw~r zfjVsZzL`Px!DUc&G5LnL?VHfd$Zc(PjNw3xfYkO)MlW8o;+>FV3MzIRApH`PS#u#Q zREwmcN}(q3+MARSpCx-F?-;IHigyq(>oqbaabHvLE9}BR1%0dG&uAVAFyA@naC%UD zj{*n>FATno{XMx~Cb*b4@9h6t_kdltxek6YuMG-X>OnyjVrfF&4!8oj+p@STv`B5B z+Lz#oso2%*dzn1OV|SRt^d+hf`efSRJD>B$tV&#>APNcl1IM{GVW+Jq#m~60K$szY z>E^Y+_1V}CbfY$(ssx=)f2}I#yb^U6Y>2}%u`Rb6}dt#>IBRFR-|+I+)i-);%9LTuSv?3jF23<}7P*k7Ql_+{Q=D&6Y zRRGX;n+hD%y@_+?m(hT@B}W3ZWrzXOy(c`Yd%wbB49=TSZZvQO4q-U_9|vOZDD@A{ z+lJ)kd(1Z@1Yrx-#xSeM0&^1v0Iq&+@Mji%%IfjWa_Trqf-5%Sz$;k_psUP43hZq{ zSnB@)_?1L@U!7^ShmkUk$wx;2Ex}&L+`ATv01jOdTqeTpCwq$%7CSR#>L?h*6sCQt zv5XpJ2_K$i%4e=1kUzxAZMoQQbgBM_9)1V$e`I%kzr$*2enUb6Yi=FbavJ$757BSl zS5zxd^BTZgcDq@ieEuh%IVjK>k(r^~zBF;*F#5T@4Y$kK4!q{Iz4!I#<}f0GV4V|h zYro}d`o5{dRj!1KQg|NcuO*o5T7{ z!FTYNP>kC%_v3&e^{nZVw?newwXi>(1I#zi^IwML^3d&&|4zb$>vPp(c<$ZY7m&O>VRAjOa2$W`en zCsbLwDXCO!jKJT6RQ}XD=bbpTMcOXkkN2qE%GaX!VNyf+t|~#m)bT(t$!nYnNDAYC zqeWL%OIW3RXzvDr+m( z1x|8Udk6CQNV(-bDkV&=@QhHwhMsXg6_d8OS$LgG_poe@)CQO(8wRsq*1Buk4|_D zJ(r7PWClt+^ut=90Enrynv|>AH&!^G8n@Rb+)*(}?g$~V>0o&`@+^wh+1h+4KL{Sg zxu#vG90Z)!p#qX2*ZK5X0&kd|F++DOgLXX2Cr1c}zDlWg>5+NA z59m%M-JNhhT#ICUUOC5jt;P(vDWJ+22Rw4%E-%!e?Rua4Ma_mHp+) zS0OxM1K3AAQ&N>Qkaoc1oj#cLRILJyVk!*~Qbf4y=|-~|_edZ8QB4_x0jgCPu^>H= zEV}<5QwZd{xVE9!`JSxZ|A35Rs1O*yvk*~xmL2jVKcS-K?73d`T6Vc&>s2 zPq$Dn&wHI)Q&pJ|*Y-RJtNoG1aZ|{zVU+&sC-+^#2TsmVzt12v+4#i;Fw9|oI1^g? zGiLY76aA0SSv@?QRP(4(X1=uV^3ogjHcY)peLT`+UU)^cxw8YJSA|GNi>7$3Dw{5# z#iV0`!iMB+jP8FY>Kn5Gd`+;c#E|wLcmT&WnIz_d6V4o3(xr=L*S?a)j!e*y^4MbM zYq(I1*X22no)!rGPM_9@FemJUcSTc2KdG?bxt?*XAT8uNuF~_4M)3*-Q}E{!uuNGw zU*m%ay8G8(9#0kOwiK*llhww?2j7-|g{ZL#f!m^JOOd`IzYj1Er&{gB#JqP*8sS{p zVCWV2^xd@=y#6CqmC7Y>w)QoAY2b&r-NI5=wpea+s*ex(%WE$rBS3XM4uFlAEBCN8 zSyl*_W0LSm&w>h&d(cA?zTm6(k*tO&GAZ=27p0DQV1lc-!A>=Sy4R{7!f78SpUl&R z@@k^gIJ)8dxNCylG!r;I0q4JiRiO}aK)SituIAYVZ#-UAVT)6HO#ZS4<3VZ;bM>bjh;hZk-(C3Plw@cpo4v`bQx`r$8d21WCSudDO?J?}z}58aH`v&n2IGU#O1cSo z0=I5~MSPYk;}6Y4pb2=k9axjr$4kmCtiMxsb4NxSoL(Fc(NrHdJcl_tHi2gzsmc&$Zs7FPq|vlW^B!Mo#p-s1{T@%>~D_>^O>-lC-M9bv~5@PiGYk+gc> zb0D^8`ODdAx94Fz=b0Q4#zS^fFO^E`OVvW1IvT(*1TwFKDJ|q9o5Z{yNtEco!RHf| zbiymAL~rp!{KxR*Z)wFnjzQ|&DaGjgc#Fobhn`L)GX`UWd$I@?Ng2?kMZ+^z=>hE3 z&Ku;?jzDAwdT4Y5s_GWY8C%1i|K^o_)n!!;Fi_ouIjf&zzvgFnox=zqET`0C;BD01 z1R?}L6t}yYNm{uA&VUd8C|i4`{BQ0ebiVI#$-+pvMF9bnd1i=+s8tj79*9yoxKqL z9^hEl{LQ0AmZm<49+a_;rvq5O0hz4>F_)zuAepuM2Z9n@7%7`pl{Fm*zKda3wWchm zK&}0cJu2uY0d%MeN#(`lGs(Q{R-KvY=CR$XR%vmbWo^1+wk#dIg&x1|q9cNxW02-z zaKi0qV=UV3h!og>f(k6xt|Rn5Xzft&j{$2OgJFAd0jOJN+o*f2ZoSl3tMEFkMPSTudNjEnWQ`Q4%pvEi z!)?xJ9!q1q|Ht%%~L*h%(LXVoy$M@2J7p6d?6Bd_S*wp~1-3S2@#~QSR z*aWyb;tdyf*sd{>V-V^BJ99sDJYDPEU@z|H&^Ja4m*&G}8(YCyX9-S?V!mNX#yUjaZu-!E_1^?%Z$eN`_=IBM@e%m9th7Kr0Ln}`U z6B(Fy-evp_h$JEZ4dlYby%tlidXN#@?jSc+;_Ez0;p16)zdhfat6Si9GDMtXS-9R0 z3l|t#nSe3+HRuHSbP`lFl`lSpp?(-?xf|RP%8e09Wb91#vhlp{x$98O?sgm#>!$l| z#KPM2H*(^|7(ecpwTlYH0VQ+n9@$vI+U-C(`=ChE?9%c9(N*LpOjE+Dazi5sX_w)9 zOvgX39}_ZbmXi^`gK3T$=IhjPWvP=X+}YHc5Og#iW8NdE>7DT#(>n9%i+8-A#AOxs zayFWgI0m1b179^E94bew^$qv^JvD1o`*e3aQ?@3pMgz&m*&0)zjV#tD8O_O6jSd5w z9n3=NP{YaENMj7S4V$>c4F)3-)Vt&Ct<) zN$px1EKH|3hlP*zz|QBMKWijdx=ViDd*IJO#bd7{a=03s&G*}@K)FIzo7OeGvy4Vg zSXO5qhm?%$c)ejm`58~|62OnjBSrvf_;-`PKJOe2k zUae+hrjZsvC!yl7n3`t*D8{3aCvK8@hVP1Yy?b%+d+us^uJxSM1Ir)sep$cI+!8CG zuu@?}s!~Hd@NA*1zco5fO)CC3RAX4qj&4Dq4MU7zTq}u7GG1rMm#6v!|F`SL#^waO z?7k`!r_yih2lo!1zn}Aj(A!FWpx~4&ypt1B+?JA1@gqF*&x@`cwIg`3sz`CqU|-<0J*n7`m|KQ>)qSS{ zpLxSW^6@xmETX(nT!!pT6ZbIGH6M`n@mD)8O!|prP^bB6;x6NBG{erP7F)h7 zAh1fL_~&6eQ`Ve<1s8j^y!dx-JK-Mmt^~gG`v+WtU(Fo~$*{=k$^A?r?gykA1SWmS zxb{ygSy^pP_i>d1DVI_PoShLWDi$MgY%`a?ep3_{+UwA73;b=XORJ?UB0<%$m*CK~ zKch;M70yWmwOXlu5Ew|1&24UAerGo9^jVjE`$c+<{UdV1!86;sb`rf!RLlgT6EmEb z!*8gHY*RjwvzbO^eBh^i5UQ1K=tA&r@G-gTADzEPzk!$ou7f-P;Ivjuwn_NDU5bNdM`b3}u5_tBKn{3eB$!c2t$ zJTU-R#qQ&UB|oCIGEXxl3@)t}9^x_4;4aPAHy0?)zgJ@zXG0=i7vF`@El0Xdv~8-3 z$LMb0>T%WEuroVjmwI+;*S~n3f_@+wxFm^SF{~3!n|RXXu89&BdoFMPyI_EQJf**C znyq`Z6tYM7@`O!NQrcHUj!3+bePp^)Ao#Pwu0UU^VYP>A4JQD>AN&x?MJ`xqcQ6&Bf+|+}AbfEB-b- zE>XYtk5(XxB1Y^%tse#aE&pH*M}y{HobZp>t#^$^~KNKX>EkTaB(y4mhtO^ zH{4E}C(n|j*x!RjT+|OG?iUr4e+}iPUHrVv@Rc2t_I2rR=;qA1TMrJ*HbKb#okQ55 zz~)2lCusY0lfFHlGcYZ?vEE}3k8@zM+J^dzJJwKl^wW~95bc0`JAkWzWs<2pesO@b zouCmmBTW00NUBGniC8zv9&<2a0T(r!BblkSAW)GL$49Hu68nHgnK+=tB$X`L&FpYD zDL@iNZ7rrPWNC+u)n7Sq6t?XU5bHuxy$)#(x<#9SBZ z>8g2gB}FrZTi_kdV5s)A^&Z;6WU8NhK!DfBQ$_ZmN$--+HpI>fbpUm6cBq|c zqJP@(g7e_x;wz&J`_+tH2-;yVQxPHaYJSI;@m66X@$Gb+FkvBGH9Z^&J#Kw$TmG7- z@8=dy97>$3ew>{NYj;9%-A=1H5K0CFgExZlc}%aCLaHn6gdeeO!Suiew4L72Ae?|> zPMlUA&uPBl{~*x4m9obzg1BmE^hdcn;g1M`1_7J~)S#jiIZ~bajt5B|tG|ispOgPW z==<58&HeDf7ImA-amez|7C*Gbh2T=79@yVErdkR%Yx|Nt4M0i+_6~hX&fX4bb52uh zCzjy7@e0NgFneX|VzD?y9sjG!CT*ZA3}RV>n8BZ^ao)$9U9;>h$keEP`gIv^<&#{K z*H}DipvE;*^S#)GtBg#+%IYnDU!B*k+7>DqNzYhL{l?8Fw)mbq|yRkrhW^iKh=?t)0XiYE=6d$ zd{OFtKkBgo`&Ag4FMaZ9Vz3*Jc;{XJ_mULn9*7jv)+C-8cd}j7zxYovQ=WkcW7%PoP|g_NT5t4PC5XJ7wZ(0*b?$XKNi9 z7{-U&BzEx)IN$pTAPXk*SIgA+Q_I;FZ#^m(L{1QR+vS?r?;9xXR)!WeD{D_y=wYYf z;4&nD|7Ep@DvdVwjjhPZrCs1UE>2E&>9zt#t zgE3MJmo<5F3D|^d7@~~VH3uCY4)vp_qoYc-GJ-+-C2j>;**7sFN~Mmj>1A&a7`d` zB+jK(L#gJ>WO!~U=TF2-7(bf~3iu`BYt#?O61CPk{z)8|;I2RK!_!g^W^^{RvR5h! zc_`uh?!02mwZo3w_5p>73HTwo6fs z)&H{IcZ+@zLksMp+5o-2{hzO%zbph^u$cX9>SIim`g^a8NtL+*0-vCY(P~O|19(MB z-{#_^B)yTB7~59hckOlifh6@^2`;-!rs)HFd#c|H@2j3P{XVO*p27QxOE2Uuo=?t* zF@{a#Z8uR;BHDSlLjH^AZk3j@3%IS8+9GW_qTW$kYnl}X(j2E4UCz$6HHv0SiU)BU zn_u)^uL}P5!!bZ*PR~I#LN#tYbuy*w*sWKQLBQTK6S-b^6N024SFd4S;C(Hsza?j3 z*x16m@YZeEIlsnUbV(Oqzu>$I)M(h$l17I3|z^nY2gE}#3Z8iy=%sHTx+Jg zmJqu>$M(p!PuqVWCrfqM?_#Y|PxN_Xwrw@BZ|z`{I=MDN@OitS>Ql!;DY?f9KUdKj zEF5~5XKLDKcKU~mE~~`mQt}}MJ&!lv8%L$K-1C(!JJTU;RLKj;aHyOZjonsn=W_bMI0w%LDT7I>GYA$&STAc zbR4lxEYTmU)Qe_Ubc>$kQB!7=IYl#*(UF;G*tpXC_A9dPr`qliMGEk9+!(#Pt)J%o z2~5&@TsM?DvP5}?1y@ywmLFMm=x?B7!G6y`DMBH^C*>!Fk6?Q+YiR(B9GAH(`Q~Q2F{QuR|mB&N*b@2=n5ymct##lp` zFf&w|7;R)rKPF>{3S}EYLR4fdVUi`0y_Lvhuk2fviLw(0GZJHqDfII`z3;2>e4fAV zz0bYpd!BpFz4x4Z&oz1q+><8RAL|r^YcshAZ1a4i?SD19VV*)&fHAe->KE@&zWRTZ zuY$6bIbTSQWJ`J_tMTleNM!~uiGQ{~UPGaN&f9*}zdd!-F!k95IWpjxz}~)03qQQ3 zV)1FdO7_k3-Hcz^(^d-HqM;4H%YSqmTe@G$HPk(+s=ksDEY}e}{2-AZ0U-;&IW*|K zvN>ymI+?wjNahzzdQ$B_m^A6tJ1aIpna{+1t@c+!_Qp18@-C2QEFo6EqO; zA>(87E4*fXU#lx^W5H(>V@QMLeKU~Ut7M$FLgvK8tWdWl4Zy|M2(qw z>}7t1iU^_1d!Ag^s<`1gG6jdiVM@{$$nSPO+( zty66QCv5m~l;pzD-mV02ij(dXYZ-#m)DbpHEuuiKsM*rwI)F$}NSFStNUcd8!{?Xw zIwm1mNY7wxaS;qOT{r0FNWmeqqXj;Pn)Fnz_B^-Dow;{uGLDBdDSG>MVBBN3sOer4 z@&42LkZ&n5(}cQx%0s=!s16Z>F&*RT3gLmd(;&@Fv=7x~HzSFobGKw!G_{g*SN@sk^4Y5?^{~T+gfTO- zZvGl`#Nwbh;1I*&f*#E8QybCgvC@JP8-=>}#gI~ql9XWLRW3xIM0s*FRYwpPz=7Bn z3SU5VKWH*J*MDFAn(c*9N&&aq_bk4+2<9}3Fb0ts7p<)$n&!Il)IZ`QxiKz!DE|1s zMEK1`)OY+eodQd}(DhD^mq97XqUImbfdzs~G2eJw%ISZD;m5p)OSNARc_nCYK`Y}7 z!A2@%ylMA5%Dhkm$L#~gj!;DBt_~C*@7OZwGQwICu52dI+~~E`KMMPwuKm7XY|+ON zAiBS8*i5L0Jz;&u+0q*C>}J+i7<8chV*BP{VMsglg@6hO4*UO`l#GdhK!p6fEhbuF zZ(m+)SbyWV`~21K{jVhGIF+KU+{^@n`m$NO>?9yCf)X9(%o%>JgYTAB+LZk(a;x!; z?DIBCRFNj*=FwXxukWVSXYnd#JG42$39X=%?qfq~m+K*bR=pweP!QMoq6wB*5Z6<%|yZBKR)L?|72Nj!)b0hZ!;RKXYoY$Dub{`gja zD5+-vCh+D(GGmK(HIwN(#4S zK+1U**<9a?8pCTQk==Nt+u*9qEbNqrC+$?pDv~1(PX^po0`Ybgayd(<>1n}j>5<`! zH)rfhBw5N>D8X*sTrRSJk{au@nz|EV(nk8 zP-9X|BHW;d37g@F2{d}Ob#k>bDvy*qRTNj;n$wgNrLKY+gB*rU0Xj9##2)Y4qMjOMu zT?|5WfTJnDJg;^DKG;$;@=2z!0TYwA|GsI#v!ZZGVO~97x{mZSL1#G#_C-!kdk&v} zX{WE1NJR|dKA1sdO!6nUylv$d42&Hp5u5$L1lxwI=}jrL6_Nx&1NJl{a&>JD z;oLCWyCr&cm_jkj(7(;QX080>B1<*S1>5@8k-q8__SaJde^Y9M>3J*c#_Xyptt<@-1GUqKZL&RoA%I8=uwabLk|u#u!lh)AILM zj|S&&o_rlP@Z54TmAk@)DqH>Asjpy=C=>K+T7m*C>!^|Ec+)|i4f`uDa0|CR);t_S z>m>DX+Y&wfr~dO6M=m8q*z(6oPv?c5%AY#6#maP+dni@5uV(h88fTYOTBIvoy7Q8p z*fJQ{Sk>yI{$4sJPZam{FjVC0K;Ai9a2+Q~f#E1(sG-b-EpmLca6}=D6fw-cmiDzO|Q5vhJuATkMdq~0Ykn%^`3sG=shS%uR^P;Qcn3YZz4_{k;)*dtQ zM*PozM-NnU84F6Z2M`*ONPn$cGj);9ehyHl(z68~{mch5Oe39q;#@T|&58EK&Jyq8 zVtm3=)}RE7>Cpd*-sNJNc{wDg30V@E*1p(bt0&U(424WuDZBv&X)um`U6v(yg6-c4 zBgf>a!*h>VX^!QuU|nu>vpEmx=Dc&Um8-R!g7<0$Zj}H0R+-(`UFy_Jkbvk3=*Vq~ASidBuLmoA7hsng+zIJ?GZKFxP9 zeBk;1qlW8%MtptOIdM|xq#RsfMVvb|o*x9qD?c{zr~N$KATDx78s+BR6uvu2)W5d0 z#Sf0n@R>b;IFkMeD*^dzn^3)1NVtUwY=O%;r(2$X-!9oXuQOg^{)rSi3(fl}Pp`GV zC$7#*#gtgo838zt9-j(ueMj9$&0?|wYi@Do6l*s`^DC-#F579UCM}FqMp&N_f$)t| z@LNBLBF=uqzQ)%`b4af}#&je7`x$Az50rA&N%1(h|4z0{LO=K2RsZfd^ggyaHOMuo z^8A6XzE7t0e*Z``=ggkdfL+lO)HFZ?x31n0&v1nQSS|ApT=f*x?n2dUKBCv#WxHtA zFpP)yigf(j8!bCuoMM@tn^O7q{e_TZM58V`pzGbwp8L1@b-PzUzS{B+mF-)9abcfO z3+hC_)K#{cw5qw!Uv+a63w|P8pWX+IFE?rNz#=nH)%@DXjre+G9w%;NxqS`p+28)+ z_b4#c@}lWy?wD%fL1HH`1r;Q}>A%9mEy5v)Yj$hnJFthu{dwk9(cc`nh2EZ1n1b}l zmxQS8l`<3tnm?#4@98w8R#Z@GEx>!x0ArN>IeI%ESW-U};@CsF%w-iR#5P3*bMcB< z2G&_oV25N$Pa$;949KYoin1@=rWFI0!*Cp0mPu6h@5zh0y_wY1WCSv% zwFc;W3_axR5dmoBsy0()51C>Q!nhiF_1vpmx9wjXLIa0E!Vp$m=BvI9+$* zT+{{9(s#Z}!)Q(CS?b-!$I*mPUy6b0uN@u3C141^7OX#RlVbcgbzE9FA?zoA-8UCDN(=Iz z-`kq|?3x4{JDkiE8% zJ1Aa01^kylsF;1?cIN^5pgCv*j~S_0n)f!HcQyp>f@)XhuuozafL`JP_C4$?dsnWg z<7%-0`(9b4#%>0_c$R0*mt*NS>ln}2dSCX$Vp?Qq;`h&9Y@EPR8Nh zP-(pCr2KbpHY;GDByz2R1SEjDsp@_+$QPJZpLia4qtl`^I-Qh6gugKVTXs5gS673_ za9Ko6@bc;B4qF2jz{!&3(C#Y3oebhMbIjx;{YVHcpke<6eyX=|2=S{uT*$Y>0C1PQ y>&`^E;9>PI`s*tBDSDF1Ve9H_RAULXTO2QB+GNBjOJ8;Y&uL>b>}x~EJO2S^xwAC@ literal 0 HcmV?d00001 diff --git a/doc/administration/geo/replication/img/geo_uploads_file_missing_v17_11.png b/doc/administration/geo/replication/img/geo_uploads_file_missing_v17_11.png new file mode 100644 index 0000000000000000000000000000000000000000..69935a3295f3e6021e26f3505ad9b273603a397f GIT binary patch literal 45891 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 JYfanx{{gKqvDp9s literal 0 HcmV?d00001 diff --git a/doc/administration/geo/replication/troubleshooting/synchronization_verification.md b/doc/administration/geo/replication/troubleshooting/synchronization_verification.md index b903d97c074..e6426a804a3 100644 --- a/doc/administration/geo/replication/troubleshooting/synchronization_verification.md +++ b/doc/administration/geo/replication/troubleshooting/synchronization_verification.md @@ -361,6 +361,158 @@ component on one **secondary** site from the UI: ## Errors +### Message: `The file is missing on the Geo primary site` + +The sync failure `The file is missing on the Geo primary site` is common when +setting up a secondary Geo site for the first time, which is caused by data +inconsistencies on the primary site. + +Data inconsistencies and missing files can occur due to system or human errors +when operating GitLab. For example, an instance administrator manually deletes +several artifacts on the local file system. Such changes are not properly +propagated to the database and result in inconsistencies. These inconsistencies +remain and can cause frictions. Geo secondaries might continue to try +replicating those files as they are still referenced in the database but no +longer exist. + +{{< alert type="note" >}} + +In case of a recent migration from local to object storage, see the dedicated +[object storage troubleshooting section](../../../object_storage.md#inconsistencies-after-migrating-to-object-storage). + +{{< /alert >}} + +#### Identify inconsistencies + +When missing files or inconsistencies are present, you can encounter entries in `geo.log` such as the following. Take note of the field `"primary_missing_file" : true`: + +```json +{ + "bytes_downloaded" : 0, + "class" : "Geo::BlobDownloadService", + "correlation_id" : "01JT69C1ECRBEMZHA60E5SAX8E", + "download_success" : false, + "download_time_s" : 0.196, + "gitlab_host" : "gitlab.example.com", + "mark_as_synced" : false, + "message" : "Blob download", + "model_record_id" : 55, + "primary_missing_file" : true, + "reason" : "Not Found", + "replicable_name" : "upload", + "severity" : "WARN", + "status_code" : 404, + "time" : "2025-05-01T16:02:44.836Z", + "url" : "http://gitlab.example.com/api/v4/geo/retrieve/upload/55" +} +``` + +The same errors are also reflected in the UI under **Admin > Geo > Sites** when reviewing the synchronization status of specific replicables. In this scenario, a specific *upload* is missing: + +![The Geo Uploads replicable dashboard displaying all failed errors.](../img/geo_uploads_file_missing_v17_11.png) + +![The Geo Uploads replicable dashboard displaying missing file error.](../img/geo_uploads_file_missing_details_v17_11.png) + +#### Clean up inconsistencies + +{{< alert type="warning" >}} + +Ensure you have a recent and working backup at hand before issuing any deletion commands. + +{{< /alert >}} + +To remove those errors, first identify which particular resources are affected. Then, run the appropriate `destroy` commands to ensure the deletion is propagated across all Geo sites and their databases. Based on the previous scenario, an **upload** is causing those errors which is used as an example below. + +1. Map the identified inconsistencies to their respective [Geo Model class](#geo-data-type-model-classes) name. The class name is needed in the following steps. In this scenario, for *uploads* it corresponds to `Upload`. +1. Start a [Rails console](../../../operations/rails_console.md#starting-a-rails-console-session) on the **Geo primary site**. +1. Query all resources where verification failed due to missing files based on the *Geo Model class* of the previous step. Adjust or remove the `limit(20)` to display more results. Observe how the listed resources should match the failed ones shown in the UI: + + ```ruby + Upload.verification_failed.where("verification_failure like '%File is not checksummable%'").limit(20) + + => # + ``` + +1. Optionally, use the `id` of the affected resources to determine if they are still needed: + + ```ruby + Upload.find(55) + + => # + ``` + + - If you determine that the affected resources need to be recovered, then you can explore the following options (non-exhaustive) to recover them: + - Check if the secondary site has the object and manually copy them to the primary. + - Look through old backups and manually copy the object back into the primary site. + - Spot check some to try to determine that it's probably fine to destroy the records, for example, if they are all very old artifacts, then maybe they are not critical data. + +1. Use the `id` of the identified resources to properly delete them individually or in bulk by using `destroy`. Ensure to use the appropriate *Geo Model class* name. + - Delete individual resources: + + ```ruby + Upload.find(55).destroy + ``` + + - Delete all affected resources: + + ```ruby + def destroy_uploads_not_checksummable + uploads = Upload.verification_failed.where("verification_failure like '%File is not checksummable%'");1 + puts "Found #{uploads.count} resources that failed verification with 'File is not checksummable'." + puts "Enter 'y' to continue: " + prompt = STDIN.gets.chomp + if prompt != 'y' + puts "Exiting without action..." + return + end + + puts "Destroying all..." + uploads.destroy_all + end + + destroy_uploads_not_checksummable + ``` + +Repeat the steps for all affected resources and Geo data types. + +### Message: `"Error during verification","error":"File is not checksummable"` + +The error `"Error during verification","error":"File is not checksummable"` is caused by inconsistencies on the primary site. Follow the instructions provided in [The file is missing on the Geo primary site](#message-the-file-is-missing-on-the-geo-primary-site). + ### Failed verification of Uploads on the primary Geo site If verification of some uploads is failing on the primary Geo site with `verification_checksum = nil` and with `verification_failure` containing ``Error during verification: undefined method `underscore' for NilClass:Class`` or ``The model which owns this Upload is missing.``, this is due to orphaned Uploads. The parent record owning the Upload (the upload's "model") has somehow been deleted, but the Upload record still exists. This is usually due to a bug in the application, introduced by implementing bulk delete of the "model" while forgetting to bulk delete its associated Upload records. These verification failures are therefore not failures to verify, rather, the errors are a result of bad data in Postgres. @@ -418,52 +570,6 @@ And to actually delete the orphaned upload rows: delete_orphaned_uploads(dry_run: false) ``` -### Message: `"Error during verification","error":"File is not checksummable"` - -If you encounter these errors in your primary site `geo.log`, they're also reflected in the UI under **Admin > Geo > Sites**. To remove those errors, you can identify the particular blob that generates the message so that you can inspect it. - -1. In a Puma or Sidekiq node in the primary site, [open a Rails console](../../../operations/rails_console.md#starting-a-rails-console-session). -1. Run the following snippet to find the affected artifacts containing the `File is not checksummable` message: - -{{< alert type="note" >}} - -The example provided below uses `JobArtifact` blob type; however, the same solution applies to any blob type that Geo uses. - -{{< /alert >}} - -```ruby - -artifacts = Ci::JobArtifact.verification_failed.where("verification_failure like '%File is not checksummable%'");1 -puts "Found #{artifacts.count} artifacts that failed verification with 'File is not checksummable'. The first one:" -pp artifacts.first -``` - -If you determine that the affected files need to be recovered then you can explore these options (non-exhaustive) to recover the missing files: - -- Check if the secondary site has the object and manually copy them to the primary. -- Look through old backups and manually copy the object back into the primary site. -- Spot check some to try to determine that it's probably fine to destroy the records, for example, if they are all very old artifacts, then maybe they are not critical data. - -Often, these kinds of errors happen when a file is checksummed by Geo, and then goes missing from the primary site. After you identify the affected files, you should check the projects that the files belong to from the UI to decide if it's acceptable to delete the file reference. If so, you can destroy the references with the following irreversible snippet: - -```ruby -def destroy_artifacts_not_checksummable - artifacts = Ci::JobArtifact.verification_failed.where("verification_failure like '%File is not checksummable%'");1 - puts "Found #{artifacts.count} artifacts that failed verification with 'File is not checksummable'." - puts "Enter 'y' to continue: " - prompt = STDIN.gets.chomp - if prompt != 'y' - puts "Exiting without action..." - return - end - - puts "Destroying all..." - artifacts.destroy_all -end - -destroy_artifacts_not_checksummable -``` - ### Error: `Error syncing repository: 13:fatal: could not read Username` The `last_sync_failure` error diff --git a/doc/administration/pages/troubleshooting.md b/doc/administration/pages/troubleshooting.md index 85de7605816..fbd4661df0a 100644 --- a/doc/administration/pages/troubleshooting.md +++ b/doc/administration/pages/troubleshooting.md @@ -30,7 +30,7 @@ For more information, see [Getting the correlation ID from your logs](../logs/tr The following sequence diagram illustrates how GitLab Pages requests are served. For more information on how a GitLab Pages site is deployed and serves static content from Object Storage, -see [GitLab Pages Architecture](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/cloud_native_gitlab_pages/#new-gitlab-pages-architecture). +see the GitLab Pages Architecture documentation. ```mermaid %%{init: { "fontFamily": "GitLab Sans" }}%% diff --git a/doc/api/epic_issues.md b/doc/api/epic_issues.md index 8b78e002c3a..3337c882101 100644 --- a/doc/api/epic_issues.md +++ b/doc/api/epic_issues.md @@ -17,7 +17,7 @@ title: Epic Issues API The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/api/epic_links.md b/doc/api/epic_links.md index 9aa0367799a..70deb277a92 100644 --- a/doc/api/epic_links.md +++ b/doc/api/epic_links.md @@ -17,7 +17,7 @@ title: Epic Links API The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/api/epics.md b/doc/api/epics.md index 18c478c8988..ac56027ef77 100644 --- a/doc/api/epics.md +++ b/doc/api/epics.md @@ -17,7 +17,7 @@ title: Epics API (deprecated) The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/api/linked_epics.md b/doc/api/linked_epics.md index c2f3e02fc83..2e0c9220288 100644 --- a/doc/api/linked_epics.md +++ b/doc/api/linked_epics.md @@ -24,7 +24,7 @@ title: Linked epics API The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/api/notes.md b/doc/api/notes.md index 778cbbe7079..068fab8176c 100644 --- a/doc/api/notes.md +++ b/doc/api/notes.md @@ -515,7 +515,7 @@ curl --request DELETE --header "PRIVATE-TOKEN: " \ The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/api/openapi/openapi_v2.yaml b/doc/api/openapi/openapi_v2.yaml index bb18cd25cc3..09d4499a81a 100644 --- a/doc/api/openapi/openapi_v2.yaml +++ b/doc/api/openapi/openapi_v2.yaml @@ -1,3 +1,12 @@ +############################################################################################# +# This documentation is auto-generated by a script. # +# Please do not edit this file directly. # +# # +# To edit the introductory text, modify `lib/tasks/gitlab/openapi.rake`. # +# # +# Run `bin/rake gitlab:openapi:generate` # +############################################################################################# + --- info: title: GitLab API diff --git a/doc/api/resource_label_events.md b/doc/api/resource_label_events.md index ee9753549e5..0b37643eb42 100644 --- a/doc/api/resource_label_events.md +++ b/doc/api/resource_label_events.md @@ -115,7 +115,7 @@ curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/a The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/api/resource_state_events.md b/doc/api/resource_state_events.md index 7cfdc6d9c22..cd571359db7 100644 --- a/doc/api/resource_state_events.md +++ b/doc/api/resource_state_events.md @@ -233,7 +233,7 @@ Example response: The Epics REST API was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/460668) in GitLab 17.0 and is planned for removal in v5 of the API. In GitLab 17.4 or later, if [the new look for epics](../user/group/epics/epic_work_items.md) is enabled, use the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/) instead. For more information, see the [guide how to migrate your existing APIs](graphql/epic_work_items_api_migration_guide.md). +Work Items API instead. For more information, see [migrate epic APIs to work items](graphql/epic_work_items_api_migration_guide.md). This change is a breaking change. {{< /alert >}} diff --git a/doc/integration/arkose.md b/doc/integration/arkose.md index bc868d8a5d8..96783ff3626 100644 --- a/doc/integration/arkose.md +++ b/doc/integration/arkose.md @@ -156,7 +156,7 @@ index 191ae0b5cf82..b2d888b98c95 100644 ## Additional resources -The [Anti-abuse team](https://handbook.gitlab.com/handbook/engineering/development/sec/software-supply-chain-security/anti-abuse/#group-members) owns the ArkoseLabs Protect feature. You can join the ArkoseLabs and GitLab collaboration channel on Slack: [#ext-gitlab-arkose](https://gitlab.slack.com/archives/C02SGF6RLPQ). +The Anti-abuse team owns the ArkoseLabs Protect feature. You can join the ArkoseLabs and GitLab collaboration channel on Slack: [#ext-gitlab-arkose](https://gitlab.slack.com/archives/C02SGF6RLPQ). ArkoseLabs also maintains the following resources: diff --git a/doc/security/_index.md b/doc/security/_index.md index b86b93c9c27..ceadc1dcb9d 100644 --- a/doc/security/_index.md +++ b/doc/security/_index.md @@ -82,7 +82,6 @@ GitLab Self-Managed customers and administrators are responsible for the securit - [How to use correlation ID to trace logs](../administration/logs/tracing_correlation_id.md). - [Logging configuration and access](https://docs.gitlab.com/omnibus/settings/logs.html). - [How to configure audit event streaming](../administration/audit_event_streaming/_index.md). -- [Providing assistance to GitLab.com customers during customer-based security incidents](https://handbook.gitlab.com/handbook/security/customer-requests/#conditions-and-requirements). ## Response diff --git a/doc/security/email_verification.md b/doc/security/email_verification.md index 63784470fd9..5eecebbf2f3 100644 --- a/doc/security/email_verification.md +++ b/doc/security/email_verification.md @@ -56,7 +56,3 @@ amount defined in the [configurable locked user policy](unlock_user.md#gitlab-se Accounts with 2FA or OAuth are automatically unlocked after ten minutes, or more than the amount defined in the [configurable locked user policy](unlock_user.md#gitlab-self-managed-and-gitlab-dedicated-users). To unlock an account manually, reset your password. - -## Related topics - -- [Locked and blocked account support](https://handbook.gitlab.com/handbook/support/workflows/reinstating-blocked-accounts/) diff --git a/doc/security/identity_verification.md b/doc/security/identity_verification.md index 5e83e606942..dedb6ca3b8e 100644 --- a/doc/security/identity_verification.md +++ b/doc/security/identity_verification.md @@ -102,7 +102,3 @@ Users with phone numbers from partially supported countries can try [credit card In addition to email and phone number verification, you might have to provide a valid credit card number. You cannot verify an account with a credit card number associated with a banned user. - -## Related topics - -- [Changing risk assessment support](https://handbook.gitlab.com/handbook/support/workflows/reinstating-blocked-accounts/#change-risk-assessment-credit-card-verification) diff --git a/doc/security/unlock_user.md b/doc/security/unlock_user.md index 21164a4f8aa..76b1b1a54bb 100644 --- a/doc/security/unlock_user.md +++ b/doc/security/unlock_user.md @@ -21,7 +21,7 @@ If two-factor authentication (2FA) is enabled, accounts are locked after three f If 2FA is not enabled user accounts are locked after three failed sign-in attempts within 24 hours. Accounts remain locked until: - The next successful sign-in, at which point the user must verify their identity with a code sent to their email. -- GitLab Support verifies the identity of the user and [manually unlocks](https://handbook.gitlab.com/handbook/support/workflows/reinstating-blocked-accounts/#manual-unlock) the account. +- GitLab Support verifies the identity of the user and manually unlocks the account. ## GitLab Self-Managed and GitLab Dedicated users diff --git a/doc/subscriptions/community_programs.md b/doc/subscriptions/community_programs.md index 1ae2d04f2bb..68cc08fb7c9 100644 --- a/doc/subscriptions/community_programs.md +++ b/doc/subscriptions/community_programs.md @@ -10,11 +10,11 @@ GitLab provides the following community program subscriptions. ## GitLab for Education -For qualifying non-profit educational institutions, the [GitLab for Education Program](https://about.gitlab.com/solutions/education/) provides GitLab Ultimate, plus 50,000 compute minutes per month. The subscription granted under GitLab for Education can only be used for instructional use or non-commercial academic research. For more information, including instructions for applying to the program and renewing program membership, see the [GitLab for Education Program page](https://about.gitlab.com/solutions/education/) and the [GitLab handbook](https://handbook.gitlab.com/handbook/marketing/developer-relations/community-programs/education-program/). +For qualifying non-profit educational institutions, the [GitLab for Education Program](https://about.gitlab.com/solutions/education/) provides GitLab Ultimate, plus 50,000 compute minutes per month. The subscription granted under GitLab for Education can only be used for instructional use or non-commercial academic research. For more information, including instructions for applying to the program and renewing program membership, see the [GitLab for Education Program page](https://about.gitlab.com/solutions/education/) and the GitLab handbook. ## GitLab for Open Source -For qualifying open source projects, the [GitLab for Open Source Program](https://about.gitlab.com/solutions/open-source/) provides GitLab Ultimate, plus 50,000 compute minutes per month. For more information, including instructions for applying to the program and renewing program membership, see the [GitLab for Open Source Program page](https://about.gitlab.com/solutions/open-source/) and the [GitLab handbook](https://handbook.gitlab.com/handbook/marketing/developer-relations/community-programs/open-source-program/). +For qualifying open source projects, the [GitLab for Open Source Program](https://about.gitlab.com/solutions/open-source/) provides GitLab Ultimate, plus 50,000 compute minutes per month. For more information, including instructions for applying to the program and renewing program membership, see the [GitLab for Open Source Program page](https://about.gitlab.com/solutions/open-source/) and the GitLab handbook. ### Meeting GitLab for Open Source Program requirements @@ -56,4 +56,4 @@ Benefits of the GitLab Open Source Program apply to all projects in a GitLab nam ## GitLab for Startups -For qualifying startups, the [GitLab for Startups](https://about.gitlab.com/solutions/startups/) program provides GitLab Ultimate, plus 50,000 compute minutes per month for 12 months. For more information, including instructions for applying to the program and renewing program membership, see the [GitLab for Startups Program page](https://about.gitlab.com/solutions/startups/) and the [GitLab handbook](https://handbook.gitlab.com/handbook/marketing/developer-relations/community-programs/startups-program/). +For qualifying startups, the [GitLab for Startups](https://about.gitlab.com/solutions/startups/) program provides GitLab Ultimate, plus 50,000 compute minutes per month for 12 months. For more information, including instructions for applying to the program and renewing program membership, see the [GitLab for Startups Program page](https://about.gitlab.com/solutions/startups/) and the GitLab handbook. diff --git a/doc/subscriptions/gitlab_dedicated/_index.md b/doc/subscriptions/gitlab_dedicated/_index.md index 61b275c0526..48845c9985f 100644 --- a/doc/subscriptions/gitlab_dedicated/_index.md +++ b/doc/subscriptions/gitlab_dedicated/_index.md @@ -118,7 +118,7 @@ When you add a custom hostname: - The hostname is included in the external URL used to access your instance. - Any connections to your instance using the previous domain names are no longer available. -To add a custom hostname after your instance is created, submit a [support ticket](https://support.gitlab.com/hc/en-us/requests/new?ticket_form_id=4414917877650). +For more information about using a custom hostname for your GitLab Dedicated instance, see [bring your own domain (BYOD)](../../administration/dedicated/configure_instance/network_security.md#bring-your-own-domain-byod). {{< alert type="note" >}} diff --git a/doc/topics/plan_and_track.md b/doc/topics/plan_and_track.md index 1bd3335280c..0c8f298d4c6 100644 --- a/doc/topics/plan_and_track.md +++ b/doc/topics/plan_and_track.md @@ -17,7 +17,7 @@ use Git to interact with GitLab. For a thorough demo of Plan features, see [Multi-team planning with GitLab Ultimate](https://www.youtube.com/watch?v=KmASFwSap7c). In this video, Gabe describes a use case of a multi-team organization that uses GitLab -with [Scaled Agile Framework (SAFe)](https://handbook.gitlab.com/handbook/marketing/brand-and-product-marketing/product-and-solution-marketing/demo/executive-demo/#scaled-agile-framework-safe). +with Scaled Agile Framework (SAFe). Alternatively, to learn how to map the SAFe to what you can do in GitLab see [SAFe without silos in GitLab](https://about.gitlab.com/blog/2025/04/08/safe-without-silos-in-gitlab/). diff --git a/doc/tutorials/boards_for_standups/_index.md b/doc/tutorials/boards_for_standups/_index.md index 30563a59683..62e0e483bf9 100644 --- a/doc/tutorials/boards_for_standups/_index.md +++ b/doc/tutorials/boards_for_standups/_index.md @@ -179,4 +179,3 @@ Your team can now use this board to run effective stand-ups. - [Plan and track work tutorials](../plan_and_track.md). - [Stand-ups, retrospectives, and velocity](../scrum_events/standups_retrospectives_velocity.md) -- [Product Development Flow](https://handbook.gitlab.com/handbook/product-development-flow/): how we use workflow labels at GitLab. diff --git a/doc/tutorials/boards_for_teams/_index.md b/doc/tutorials/boards_for_teams/_index.md index 40f7b8c0822..15d770536ef 100644 --- a/doc/tutorials/boards_for_teams/_index.md +++ b/doc/tutorials/boards_for_teams/_index.md @@ -19,7 +19,6 @@ This tutorial shows you how to set up [issue boards](../../user/project/issue_bo In this example, you'll create two issue boards for the UX and Frontend teams. Using the following steps, you can create issue boards and workflows for more sub-teams, like Backend or Quality Assurance. -To learn how we use workflow labels at GitLab, see [Product Development Flow](https://handbook.gitlab.com/handbook/product-development-flow/). To set up issue boards for multiple teams: diff --git a/doc/user/application_security/api_fuzzing/_index.md b/doc/user/application_security/api_fuzzing/_index.md index 9d999144b0d..23dd5df83c2 100644 --- a/doc/user/application_security/api_fuzzing/_index.md +++ b/doc/user/application_security/api_fuzzing/_index.md @@ -58,7 +58,7 @@ Example projects using these methods are available: To get support for your particular problem use the [getting help channels](https://about.gitlab.com/get-help/). The [GitLab issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues) is the right place for bugs and feature proposals about API Security and API Fuzzing. -Use `~"Category:API Security"` label when opening a new issue regarding API fuzzing to ensure it is quickly reviewed by the right people. Refer to our [review response SLO](https://handbook.gitlab.com/handbook/engineering/workflow/code-review/#review-response-slo) to understand when you should receive a response. +Use `~"Category:API Security"` label when opening a new issue regarding API fuzzing to ensure it is quickly reviewed by the right people. Refer to our review response SLO to understand when you should receive a response. [Search the issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues) for similar entries before submitting your own, there's a good chance somebody else had the same issue or feature proposal. Show your support with an emoji reaction or join the discussion. diff --git a/doc/user/application_security/api_security/api_discovery/_index.md b/doc/user/application_security/api_security/api_discovery/_index.md index b9b434bb8f8..d94717908d9 100644 --- a/doc/user/application_security/api_security/api_discovery/_index.md +++ b/doc/user/application_security/api_security/api_discovery/_index.md @@ -173,7 +173,7 @@ After the API Discovery job has successfully run, the OpenAPI document is availa To get support for your particular problem, use the [getting help channels](https://about.gitlab.com/get-help/). The [GitLab issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues) is the right place for bugs and feature proposals about API Discovery. -Use `~"Category:API Security"` label when opening a new issue regarding API Discovery to ensure it is quickly reviewed by the right people. Refer to our [review response SLO](https://handbook.gitlab.com/handbook/engineering/workflow/code-review/#review-response-slo) to understand when you should receive a response. +Use `~"Category:API Security"` label when opening a new issue regarding API Discovery to ensure it is quickly reviewed by the right people. Refer to our review response SLO to understand when you should receive a response. [Search the issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues) for similar entries before submitting your own, there's a good chance somebody else had the same issue or feature proposal. Show your support with an emoji reaction or join the discussion. diff --git a/doc/user/application_security/api_security_testing/_index.md b/doc/user/application_security/api_security_testing/_index.md index 3d23a27668c..913050a7538 100644 --- a/doc/user/application_security/api_security_testing/_index.md +++ b/doc/user/application_security/api_security_testing/_index.md @@ -76,7 +76,7 @@ The following projects demonstrate API security testing scanning: To get support for your particular problem, use the [getting help channels](https://about.gitlab.com/get-help/). The [GitLab issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues) is the right place for bugs and feature proposals about API Security and API security testing. -Use `~"Category:API Security"` label when opening a new issue regarding API security testing to ensure it is quickly reviewed by the right people. Refer to our [review response SLO](https://handbook.gitlab.com/handbook/engineering/workflow/code-review/#review-response-slo) to understand when you should receive a response. +Use `~"Category:API Security"` label when opening a new issue regarding API security testing to ensure it is quickly reviewed by the right people. Refer to our review response SLO to understand when you should receive a response. [Search the issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues) for similar entries before submitting your own, there's a good chance somebody else had the same issue or feature proposal. Show your support with an emoji reaction or join the discussion. diff --git a/doc/user/group/epics/linked_epics.md b/doc/user/group/epics/linked_epics.md index cd71b05759d..90cda711739 100644 --- a/doc/user/group/epics/linked_epics.md +++ b/doc/user/group/epics/linked_epics.md @@ -193,7 +193,7 @@ The relationship only shows up in the UI if the user can see both items. When you try to close an epic linked to an open blocker, a warning is displayed. To manage linked epics through our API, see the -[Work Items API](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items/). +Work Items API. ### Add a linked item diff --git a/doc/user/group/epics/manage_epics.md b/doc/user/group/epics/manage_epics.md index 86760dc2f5a..6c10e92ea81 100644 --- a/doc/user/group/epics/manage_epics.md +++ b/doc/user/group/epics/manage_epics.md @@ -859,8 +859,6 @@ You can create a spreadsheet template to manage a pattern of consistently repeat For an introduction to epic templates, see [GitLab Epics and Epic Template Tip](https://www.youtube.com/watch?v=D74xKFNw8vg). -For more on epic templates, see [Epic Templates - Repeatable sets of issues](https://handbook.gitlab.com/handbook/marketing/brand-and-product-marketing/product-and-solution-marketing/getting-started/104/). - ## Multi-level child epics {{< details >}} diff --git a/doc/user/group/saml_sso/troubleshooting_scim.md b/doc/user/group/saml_sso/troubleshooting_scim.md index 7c2010ed069..f5419e3ad65 100644 --- a/doc/user/group/saml_sso/troubleshooting_scim.md +++ b/doc/user/group/saml_sso/troubleshooting_scim.md @@ -161,7 +161,7 @@ To resolve this issue, you can do either of the following: {{< /details >}} GitLab.com administrators can search for SCIM requests in the `api_json.log` using the `pubsub-rails-inf-gprd-*` index in -[Kibana](https://handbook.gitlab.com/handbook/support/workflows/kibana/#using-kibana). Use the following filters based +Kibana. Use the following filters based on the internal [group SCIM API](../../../development/internal_api/_index.md#group-scim-api): - `json.path`: `/scim/v2/groups/` diff --git a/doc/user/infrastructure/clusters/_index.md b/doc/user/infrastructure/clusters/_index.md index 48fc7257d7f..b6542466271 100644 --- a/doc/user/infrastructure/clusters/_index.md +++ b/doc/user/infrastructure/clusters/_index.md @@ -49,9 +49,6 @@ scheduled yet. Follow this [epic](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) for updates. -You can find technical information about why we moved away from cluster certificates into -the GitLab agent model on the [agent's design document](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/gitlab_to_kubernetes_communication/). - If you need more time to migrate to GitLab agent, you can [enable the feature flag](../../../administration/feature_flags.md) named `certificate_based_clusters`, which was [introduced in GitLab 15.0](../../../update/deprecations.md#gitlab-self-managed-certificate-based-integration-with-kubernetes). This feature flag re-enables the certificate-based Kubernetes integration. diff --git a/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md b/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md index 5ae6752a361..8c199165e25 100644 --- a/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md +++ b/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md @@ -81,7 +81,7 @@ With GitLab-managed Kubernetes resources, you can: - Set up environments securely without manual intervention. - Control resource creation and access without giving developers administrative cluster permissions. -- Provide self-service capabilities for [developers](https://handbook.gitlab.com/handbook/product/personas/#sasha-software-developer) when they create a new project or environment. +- Provide self-service capabilities for developers when they create a new project or environment. - Allow developers to deploy testing and development versions in dedicated or shared namespaces. Prerequisites: diff --git a/doc/user/permissions.md b/doc/user/permissions.md index a6944210fda..4963a632b21 100644 --- a/doc/user/permissions.md +++ b/doc/user/permissions.md @@ -666,7 +666,6 @@ To work around the issue, give these users the Guest role or higher to any proje ## Related topics - [Custom roles](custom_roles/_index.md) -- [The GitLab principles behind permissions](https://handbook.gitlab.com/handbook/product/categories/gitlab-the-product/#permissions-in-gitlab) - [Members](project/members/_index.md) - Customize permissions on [protected branches](project/repository/branches/protected.md) - [LDAP user permissions](group/access_and_permissions.md#manage-group-memberships-with-ldap) diff --git a/doc/user/profile/_index.md b/doc/user/profile/_index.md index ad7722365a1..4adf782e94a 100644 --- a/doc/user/profile/_index.md +++ b/doc/user/profile/_index.md @@ -84,8 +84,7 @@ Prerequisites: - Your namespace must not: - Contain a project with [Container Registry](../packages/container_registry/_index.md) tags. - - Have a project that hosts [GitLab Pages](../project/pages/_index.md). For more information, - see [changing your username in the GitLab Team Handbook](https://handbook.gitlab.com/handbook/tools-and-tips/#change-your-username-at-gitlabcom). + - Have a project that hosts [GitLab Pages](../project/pages/_index.md). - Your username: - Must be between 2 and 255 characters in length. - Must only include non-accented letters, digits, `_`, `-`, and `.`. diff --git a/doc/user/profile/service_accounts.md b/doc/user/profile/service_accounts.md index d0ae28cf208..d25fe3d089f 100644 --- a/doc/user/profile/service_accounts.md +++ b/doc/user/profile/service_accounts.md @@ -55,7 +55,7 @@ You can also manage service accounts through the API. {{< /history >}} -The Service Accounts page displays information about service accounts in your top-level group or instance. Each top-level group and GitLab Self-Managed instance has a separate Service Accounts page. From these pages, you can: +The service accounts page displays information about service accounts in your top-level group or instance. Each top-level group and GitLab Self-Managed instance has a separate service accounts page. From these pages, you can: - View all service accounts for your group or instance. - Delete a service account. @@ -69,7 +69,7 @@ The Service Accounts page displays information about service accounts in your to To view service accounts for the entire instance: 1. On the left sidebar, at the bottom, select **Admin**. -1. Select **Settings > Service Accounts**. +1. Select **Settings > Service accounts**. {{< /tab >}} @@ -78,7 +78,7 @@ To view service accounts for the entire instance: To view service accounts for a top-level group: 1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Service Accounts**. +1. Select **Settings > Service accounts**. {{< /tab >}} @@ -107,7 +107,7 @@ The number of service accounts you can create is limited by your license: To create a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Select **Add service account**. 1. Enter a name for the service account. A username is automatically generated based on the name. You can modify the username if needed. 1. Select **Create service account**. @@ -118,7 +118,7 @@ You can edit the name or username of a service account. To edit a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. 1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Edit**. 1. Edit the name or username for the service account. @@ -148,18 +148,18 @@ merge requests, issues, projects, and groups. To delete a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. -1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Delete Account**. +1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Delete account**. 1. Enter the name of the service account. 1. Select **Delete user**. You can also delete the service account and any contributions made by the account. These contributions can include activity such as merge requests, issues, groups, and projects. -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. -1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Delete Account and Contributions**. +1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Delete account and contributions**. 1. Enter the name of the service account. 1. Select **Delete user and contributions**. @@ -183,9 +183,9 @@ You can also manage personal access tokens for service accounts through the API. To view the personal access tokens page for a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. -1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage Access Tokens**. +1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage access tokens**. ### Create a personal access token for a service account @@ -193,9 +193,9 @@ To use a service account, you must create a personal access token to authenticat To create a personal access token for a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. -1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage Access Tokens**. +1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage access tokens**. 1. Select **Add new token**. 1. In **Token name**, enter a name for the token. 1. Optional. In **Token description**, enter a description for the token. @@ -218,9 +218,9 @@ This cannot be undone. Any services that rely on the rotated token will stop wor To rotate a personal access token for a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. -1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage Access Tokens**. +1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage access tokens**. 1. Select **Rotate**. 1. On the confirmation dialog, select **Rotate**. @@ -236,9 +236,9 @@ This cannot be undone. Any services that rely on the revoked token will stop wor To revoke a personal access token for a service account: -1. Go to the [Service Accounts](#view-and-manage-service-accounts) page. +1. Go to the [Service accounts](#view-and-manage-service-accounts) page. 1. Identify a service account. -1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage Access Tokens**. +1. Select the vertical ellipsis ({{< icon name="ellipsis_v" >}}) > **Manage access tokens**. 1. Select **Revoke**. 1. On the confirmation dialog, select **Revoke**. diff --git a/lib/tasks/gitlab/openapi.rake b/lib/tasks/gitlab/openapi.rake index e54d0d99e7c..d59f5a0b4c0 100644 --- a/lib/tasks/gitlab/openapi.rake +++ b/lib/tasks/gitlab/openapi.rake @@ -1,5 +1,17 @@ # frozen_string_literal: true +YAML_DOC_INTRODUCTION = <<-INTRO +############################################################################################# +# This documentation is auto-generated by a script. # +# Please do not edit this file directly. # +# # +# To edit the introductory text, modify `lib/tasks/gitlab/openapi.rake`. # +# # +# Run `bin/rake gitlab:openapi:generate` # +############################################################################################# + +INTRO + if Rails.env.development? || Rails.env.test? require 'grape-swagger/rake/oapi_tasks' GrapeSwagger::Rake::OapiTasks.new('::API::API') @@ -17,14 +29,16 @@ namespace :gitlab do end task :generate do - raise 'This task can only be run in the development environment' unless Rails.env.development? + unless Rails.env.development? || Rails.env.test? + raise 'This task can only be run in the development or test environment' + end ENV['store'] = 'tmp/openapi.json' Rake::Task["oapi:fetch"].invoke(['openapi.json']) yaml_content = Gitlab::Json.parse(File.read('tmp/openapi_swagger_doc.json')).to_yaml - File.write("doc/api/openapi/openapi_v2.yaml", yaml_content) + File.write("doc/api/openapi/openapi_v2.yaml", YAML_DOC_INTRODUCTION + yaml_content) end task generate_and_check: [:generate, :validate] @@ -35,7 +49,9 @@ namespace :gitlab do Rake::Task["oapi:fetch"].invoke(['openapi.json']) current_doc = Digest::SHA512.hexdigest(File.read('doc/api/openapi/openapi_v2.yaml')) - generated_doc = Digest::SHA512.hexdigest(Gitlab::Json.parse(File.read('tmp/openapi_swagger_doc.json')).to_yaml) + generated_doc = Digest::SHA512.hexdigest( + YAML_DOC_INTRODUCTION + Gitlab::Json.parse(File.read('tmp/openapi_swagger_doc.json')).to_yaml + ) if current_doc == generated_doc puts "OpenAPI documentation is up to date" diff --git a/locale/gitlab.pot b/locale/gitlab.pot index cf27648c9ce..b57d118793d 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -5885,6 +5885,9 @@ msgstr "" msgid "AiPowered|GitLab Duo Workflow is now on for the instance and the service account (%{accountId}) was created. To use Workflow in your groups, you must turn on AI features for specific groups." msgstr "" +msgid "AiPowered|GitLab Duo Workflow is now on for the instance. To use Workflow in your groups, you must turn on AI features for specific groups." +msgstr "" + msgid "AiPowered|GitLab Duo seat assignment is now located in GitLab Duo settings." msgstr "" @@ -27878,6 +27881,9 @@ msgstr "" msgid "GiB" msgstr "" +msgid "Git" +msgstr "" + msgid "Git HTTP rate limits" msgstr "" @@ -28007,6 +28013,9 @@ msgstr "" msgid "GitLab Billing Team." msgstr "" +msgid "GitLab CI/CD" +msgstr "" + msgid "GitLab CLI" msgstr "" @@ -35803,6 +35812,9 @@ msgstr[1] "" msgid "LearnGitLab|%{percentage}%{percentSymbol} completed" msgstr "" +msgid "LearnGitLab|10 best practices for using GitLab Duo" +msgstr "" + msgid "LearnGitLab|Add code" msgstr "" @@ -35851,6 +35863,9 @@ msgstr "" msgid "LearnGitLab|Enable require merge approvals" msgstr "" +msgid "LearnGitLab|Enroll" +msgstr "" + msgid "LearnGitLab|Follow these steps to get familiar with the GitLab workflow." msgstr "" @@ -35863,6 +35878,9 @@ msgstr "" msgid "LearnGitLab|GitLab works best as a team. Invite your colleague to enjoy all features." msgstr "" +msgid "LearnGitLab|In this tutorial, we explore 10 tips and best practices to integrate GitLab Duo Chat into your AI-powered DevSecOps workflows and refine your prompts for the best results." +msgstr "" + msgid "LearnGitLab|Included in trial" msgstr "" @@ -35875,6 +35893,9 @@ msgstr "" msgid "LearnGitLab|Learn GitLab" msgstr "" +msgid "LearnGitLab|Learn more" +msgstr "" + msgid "LearnGitLab|Next steps" msgstr "" @@ -36651,6 +36672,9 @@ msgstr "" msgid "Managed Account" msgstr "" +msgid "Managing code" +msgstr "" + msgid "Managing users" msgstr "" @@ -42817,6 +42841,9 @@ msgstr "" msgid "Organization|my-organization" msgstr "" +msgid "Organize work with projects" +msgstr "" + msgid "Orphaned member" msgstr "" @@ -56742,9 +56769,6 @@ msgstr "" msgid "Service Account Key" msgstr "" -msgid "Service Accounts" -msgstr "" - msgid "Service Accounts keys authorize GitLab to deploy your Google Cloud project" msgstr "" @@ -56772,10 +56796,7 @@ msgstr "" msgid "Service accounts" msgstr "" -msgid "ServiceAccounts|Access Tokens" -msgstr "" - -msgid "ServiceAccounts|Add Service Account" +msgid "ServiceAccounts|Add service account" msgstr "" msgid "ServiceAccounts|An error occurred creating the service account." @@ -56790,16 +56811,16 @@ msgstr "" msgid "ServiceAccounts|An error occurred while fetching the service accounts." msgstr "" -msgid "ServiceAccounts|Delete Account" +msgid "ServiceAccounts|Delete account" msgstr "" -msgid "ServiceAccounts|Delete Account and Contributions" +msgid "ServiceAccounts|Delete account and contributions" msgstr "" msgid "ServiceAccounts|Edit" msgstr "" -msgid "ServiceAccounts|Manage Access Tokens" +msgid "ServiceAccounts|Manage access tokens" msgstr "" msgid "ServiceAccounts|Name" @@ -56808,7 +56829,10 @@ msgstr "" msgid "ServiceAccounts|No service accounts" msgstr "" -msgid "ServiceAccounts|Service Accounts" +msgid "ServiceAccounts|Personal access tokens" +msgstr "" + +msgid "ServiceAccounts|Service accounts" msgstr "" msgid "ServiceAccounts|Service accounts are non-human accounts that allow interactions between software applications, systems, or services. %{learnMore}" diff --git a/spec/frontend/ci/reports/codequality_report/components/codequality_issue_body_spec.js b/spec/frontend/ci/reports/codequality_report/components/codequality_issue_body_spec.js index 881924eaec2..6788f51dace 100644 --- a/spec/frontend/ci/reports/codequality_report/components/codequality_issue_body_spec.js +++ b/spec/frontend/ci/reports/codequality_report/components/codequality_issue_body_spec.js @@ -9,9 +9,12 @@ describe('code quality issue body issue body', () => { const findSeverityIcon = () => wrapper.findByTestId('codequality-severity-icon'); const findGlIcon = () => wrapper.findComponent(GlIcon); + const findName = () => wrapper.findByTestId('codequality-name'); + const issueName = + 'rubygem-rest-client: session fixation vulnerability via Set-Cookie headers in 30x redirection responses.'; const codequalityIssue = { - name: 'rubygem-rest-client: session fixation vulnerability via Set-Cookie headers in 30x redirection responses', + name: `${issueName} See [here](https://example.org) for details.`, path: 'Gemfile.lock', severity: 'normal', type: 'Issue', @@ -82,7 +85,10 @@ describe('code quality issue body issue body', () => { it('renders name', () => { createComponent(STATUS_NEUTRAL); - expect(wrapper.text()).toContain(codequalityIssue.name); + const link = findName().find('a'); + expect(link.attributes('href')).toBe('https://example.org'); + + expect(wrapper.text()).toContain(issueName); }); }); diff --git a/spec/tasks/gitlab/openapi_rake_spec.rb b/spec/tasks/gitlab/openapi_rake_spec.rb index 1fb9c213f3c..c52874a09fc 100644 --- a/spec/tasks/gitlab/openapi_rake_spec.rb +++ b/spec/tasks/gitlab/openapi_rake_spec.rb @@ -9,6 +9,56 @@ RSpec.describe 'gitlab:openapi namespace rake tasks', :silence_stdout, feature_c Rake::Task.define_task(:enable_feature_flags) end + let(:yaml_doc_introduction) do + <<~INTRO + ############################################################################################# + # This documentation is auto-generated by a script. # + # Please do not edit this file directly. # + # # + # To edit the introductory text, modify `lib/tasks/gitlab/openapi.rake`. # + # # + # Run `bin/rake gitlab:openapi:generate` # + ############################################################################################# + + INTRO + end + + describe 'gitlab:openapi:generate' do + let(:json_content) { '{"key": "value"}' } + let(:yaml_content) { "---\nkey: value\n" } + + before do + allow(Rake::Task['oapi:fetch']).to receive(:invoke) + allow(File).to receive(:read).with('tmp/openapi_swagger_doc.json').and_return(json_content) + allow(File).to( + receive(:read).with(Rails.root.join('deprecations/tasks/gitlab/openapi_rake.yml').to_s).and_call_original + ) + end + + it 'generates the OpenAPI documentation' do + expect(ENV).to receive(:[]=).with('store', 'tmp/openapi.json') + expect(Rake::Task['oapi:fetch']).to receive(:invoke).with(['openapi.json']) + expect(File).to receive(:write).with( + 'doc/api/openapi/openapi_v2.yaml', + yaml_doc_introduction + yaml_content + ) + + run_rake_task('gitlab:openapi:generate') + end + + context 'when not on test or development environments' do + before do + allow(Rails).to receive_message_chain(:env, :test?).and_return(false) + allow(Rails).to receive_message_chain(:env, :development?).and_return(false) + end + + it 'raises an error' do + expect { run_rake_task('gitlab:openapi:generate') } + .to raise_error(RuntimeError, 'This task can only be run in the development or test environment') + end + end + end + describe 'gitlab:openapi:check_docs' do let(:documentation) { {} } @@ -16,7 +66,8 @@ RSpec.describe 'gitlab:openapi namespace rake tasks', :silence_stdout, feature_c allow(Rake::Task['oapi:fetch']).to receive(:invoke) allow(File).to receive(:read).and_call_original allow(File).to receive(:read).with('tmp/openapi_swagger_doc.json').and_return('{}') - allow(File).to receive(:read).with('doc/api/openapi/openapi_v2.yaml').and_return(documentation.to_yaml) + allow(File).to receive(:read).with('doc/api/openapi/openapi_v2.yaml') + .and_return(yaml_doc_introduction + documentation.to_yaml) end it 'passes when documentation is up to date' do