From 994a2e26e40687df420263675e9656b31e743bd4 Mon Sep 17 00:00:00 2001 From: dawei-wang Date: Fri, 6 Jan 2023 11:01:06 -0800 Subject: [PATCH 01/41] Move line 14 into permission statement frontmatter --- .../reporting-abuse-or-spam.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam.md b/content/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam.md index 74c583d24e..ece6bf2d8d 100644 --- a/content/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam.md +++ b/content/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam.md @@ -1,6 +1,7 @@ --- title: Reporting abuse or spam intro: You can report behavior and content that violates community guidelines and terms. +permissions: Owners, collaborators, prior contributors, and people with write access can report issues, pull requests, and comments on issues, pull requests, and commits. Anyone can report apps in {% data variables.product.prodname_marketplace %}. redirect_from: - /articles/reporting-abuse-or-spam - /github/building-a-strong-community/reporting-abuse-or-spam @@ -11,8 +12,6 @@ topics: - Community --- -Owners, collaborators, prior contributors, and people with write access can report issues, pull requests, and comments on issues, pull requests, and commits. Anyone can report apps in {% data variables.product.prodname_marketplace %}. - ## About reporting abuse or spam {% data reusables.policies.github-community-guidelines-and-terms %} From 1f842bf1bcb29727a725e099c12909b5fe2f7b01 Mon Sep 17 00:00:00 2001 From: Evan Bonsignori Date: Sat, 7 Jan 2023 18:25:55 -0800 Subject: [PATCH 02/41] npm build -> npm run build (example) --- .../caching-dependencies-to-speed-up-workflows.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/actions/using-workflows/caching-dependencies-to-speed-up-workflows.md b/content/actions/using-workflows/caching-dependencies-to-speed-up-workflows.md index c7fc037163..3b2b2cc495 100644 --- a/content/actions/using-workflows/caching-dependencies-to-speed-up-workflows.md +++ b/content/actions/using-workflows/caching-dependencies-to-speed-up-workflows.md @@ -150,7 +150,7 @@ jobs: run: npm install - name: Build - run: npm build + run: npm run build - name: Test run: npm test From 0e17f92559c9ad690756f5d08ae4691b34adc59b Mon Sep 17 00:00:00 2001 From: Steve Guntrip <12534592+stevecat@users.noreply.github.com> Date: Mon, 9 Jan 2023 06:29:19 +0000 Subject: [PATCH 03/41] [2023-01-10]: GitHub Actions Required workflows - [Public Beta] (#32793) Co-authored-by: github-actions Co-authored-by: Lucas Costi Co-authored-by: Jyotsna --- .../actions-required-workflow-locate.png | Bin 0 -> 23842 bytes .../actions-required-workflows-add.png | Bin 0 -> 23195 bytes .../actions-required-workflows-repos.png | Bin 0 -> 33610 bytes ...ctions-required-workflows-select-repos.png | Bin 0 -> 27226 bytes .../settings/example-required-workflow.png | Bin 0 -> 63649 bytes .../help/settings/view-required-workflows.png | Bin 0 -> 11899 bytes .../security-hardening-for-github-actions.md | 8 +++ content/actions/using-workflows/index.md | 1 + .../using-workflows/required-workflows.md | 55 ++++++++++++++++++ ...ing-the-audit-log-for-your-organization.md | 5 ++ ...ng-github-actions-for-your-organization.md | 51 ++++++++++++++++ data/features/required-workflows.yml | 6 ++ .../workflows/required-workflow-beta.md | 5 ++ .../required-workflow-prerequisites.md | 6 ++ .../required-workflow-source-notes.md | 4 ++ .../required-workflow-target-notes.md | 3 + 16 files changed, 144 insertions(+) create mode 100644 assets/images/help/settings/actions-required-workflow-locate.png create mode 100644 assets/images/help/settings/actions-required-workflows-add.png create mode 100644 assets/images/help/settings/actions-required-workflows-repos.png create mode 100644 assets/images/help/settings/actions-required-workflows-select-repos.png create mode 100644 assets/images/help/settings/example-required-workflow.png create mode 100644 assets/images/help/settings/view-required-workflows.png create mode 100644 content/actions/using-workflows/required-workflows.md create mode 100644 data/features/required-workflows.yml create mode 100644 data/reusables/actions/workflows/required-workflow-beta.md create mode 100644 data/reusables/actions/workflows/required-workflow-prerequisites.md create mode 100644 data/reusables/actions/workflows/required-workflow-source-notes.md create mode 100644 data/reusables/actions/workflows/required-workflow-target-notes.md diff --git a/assets/images/help/settings/actions-required-workflow-locate.png b/assets/images/help/settings/actions-required-workflow-locate.png new file mode 100644 index 0000000000000000000000000000000000000000..3e374a3b66e4bab4b87dc149ff38b8bc932a819b GIT binary patch literal 23842 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 Y^p@Rszdbu09qjV^#A|> literal 0 HcmV?d00001 diff --git a/assets/images/help/settings/actions-required-workflows-add.png b/assets/images/help/settings/actions-required-workflows-add.png new file mode 100644 index 0000000000000000000000000000000000000000..ebcfec78015f1ffa9837646f73de1e32676b2d93 GIT binary patch literal 23195 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 literal 0 HcmV?d00001 diff --git a/assets/images/help/settings/example-required-workflow.png b/assets/images/help/settings/example-required-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0196fb04fa0f7563b67008ede85c9e7d40ec49 GIT binary patch literal 63649 zcmbrl1yEc~@GrVRfB?aR1cC%YAZT!1BqT_H;O@bKFD{E~LU1Rz1=m1W+}+(44-UKd z;=KL-pWb_4)w@-1YfqgyGt)EE-E-#jbpPh7(no1rYzk}u0Dvni^G*c-KtlikD9Vp9 zkU5-s`Xm4Vc8#T^q>`+pB(0L8y}6~082}*jH6aO8EpDF35B^ZVuLD4Noy{*HgpwCT z9Y#y_j^QQB+pnAi-rm9B)rdk+&Pkp|>=^IQSC4Bb2vl;M`7X7FVAkOMq z>_6?U)0PvK-ljVD_5i1WReU6YK8$gzLkcnW?!P6i`x(zm6T6r{pdgxp& z_r#+~XhdZb!D|BJW1im8lN-y(bYmW$9>$k_xW?*$BU4g2a(uu%plWhr{#fRDHGhY> z7hY5p=vBwZ*RM+iAJ@IG@wV=S1^N%hca460jFq|J zY%n(=_)!7-A|2rnHy4~kD|@HclCsTWSaKe(cf8Ml*SOz zP9>49(059BHH6F|16jCZi_cDzrI==XeF-+&zNps32B7igJQF95-?|JU2@IFE?Kp*LaUe-4(r_W<-tl zYOYcqQC%)xzPNoU5t1cW$@qvsAc*zt>oq`jIwFgyE;b51p-=A@39i?c&mU8$X*co3A#32fXvff@x_PX`#=h%f;| zK{YP5i$Xn(XZlR7W5zGQ#^W6uI5b5a#Ztu*#n$SG64#Q*lA;oiBCILbB7HSVbxk!l zWkod(O}G-xc$Srb^)8dDvHLn2#wRrN_-)x3JepVCe$a)vBwEQTf8 z`$c@pspV7!`sGVSz#qBU8x?W6lZB@;Nm+8U3S&z}i}}LY1r=oFb+Q%e_F9IrnMIjp zD}@hTexFutDtoeKR?A<^MB62sLKcq_32jVmUvs7 zDn)AZ&FWiY;!`=rLA^n~L4J)M4ZRYe27YPL%>7Jisc>2A!ra1R+wV3~HZC?MHr6)q z$<1B=GoovC;qdelBumd46)*TMEH8Qw9~|E}$T)rmksIW+1~vX}i$#%UlTO?am98Ql ze%-Tc!C3Y42lrt8%vJrjUpT#+S%U$%G_F!5BQ@Nj*0T8r3nWH}9Q4#|wtX2$G4x%QhbASm=spE;KNaS%1 zNT39_FS>a1cz!z+N)$5HaLWs^3YCi5&_RJsta{I@1U~6^MaU$`7?|olWoKsHGn%?| zjM@}V#Fx^QCX-sx&2FW0>aI;-W{K0x&}V24tKEC|WTe&!Ciafg* z{~b(a-v(7rm+Ri}%5dV8>Xh3d7;A3nu(srU#(Zn(`wFv)!=dq^`RK{k$SS)P&(Gcm z*CTp|&;V$=NJUcvZWpdBrOzP$AjhC@E2ozU*k4D&puG*>K#Yg<0|_<`+}?4n1|fYG z)kFj4)3sZ!z0xHt*zv5=c6fiBMC96ko;l=Od~0bX2TjaSNu2=dR_R{p!flAQ7zYm_f0ON2+80EI<7_A)$q*{O_2({gHO)sjeG9rL%cWE1r?JO zb<36Y;}f<^-h2G}D<9A2&T61F&GW8cmX(CW0wehQ0d$@gwXyoCcH zG~R}{ey2v4#wVTpQ4=%@q9fn{50x{uEz551X^Yxc%KK&3Uxb;5Zg98{_3iC30K7U) zQ{?OQjMZJjLzy#=Q%%f<)62Ze>G#awCI_Y=mVrVf>HX^)i(%`)S;hy)s}eBlC!3>) zqv5H=ShoQsZ@dQ)o|I#BME*(1+U$jW%SwiP zzPtjK*4r6*7QeR`&&e>`79{~nbSPQNsD2QyUlkdIpD%QcLfU-S=a<1!Hh|CK@vS%$ zOTS-)e@;J@Q49zd50caa*jT=P<^(*FZxv4#lMv_2VcSW?h7y` zmCM@1&RYRBikRkPc!JePGgiY)OV(UL0lKfw?{?mqIhid$M!-i!CIB9DkH>aI(MQ_@`|osmLF>LQ0nIW;WXIENzkELG~fa&CM_J zKlT5Ql7D;r52e<>l$>ukdH+lLpQ8VrRNcwUQPSQP*{8GUzpD9*_`ijJ5sGm9!TNth z@u!^sCl@JbQEU;8f0QPQ&A%tk3IObz$i95q*6Y z`j${}B5r2*U}yvux#o^17{dJ=uXhX#mw*E$;LV6-FitG31mF>tBpUK5gtqTywjai- z#@|300>Fyheg_3K$ZM!;XsG+7@Y~;WWHW{3{Po|fpLzI1s`T`|@?Zb8jK7PJbvl6m zm*o6yhqtA6iry(s{FU6yz?Z5?v&&@5(IKhG%-4e&wz1KbU=`)# ztbVS|W0ROL%!Jt33^qhAF$1eeq*U(sXC8`(KW;Uz>KX};iIS4pyBW+*9)lLhLB1?6 z<$L7Q?&STK(<9Ok*s6}dDxe~cWuH0r_9?Y_dt9M;XsN&dw+SAdI9;<%$^H=*r7T|# zE{Opa=FBHBw19w24@GZVz7fD}G9*aqpvsrE>Z>J@1vyvzzr1Dyw-uz!Upa~~D-R5? zP+%ZZv;~JL_R9Dydr&n2m(j;m^%vI${fDM@g3F0PNVL`%J-yo~`fc7scc zI)tdJ16Azs&CEzxf&Yj}?dMpobkuJHwSf4Uj$-yTpOJusQ4%PJVe{2j?k9G5ZuA@K zJ%4NAy|S7Up(mVJm1`d#VX*N-OcNyLcpJ_*!upQxT_x(jim>`Pz`+{Rm;C#>^X~M~ z#lmC6KOIheD-6gX!itimgA&7D|3lIN{I7~1BmS#at1YC=e@DhABn)o!M&;+#sEz11 zy@eF~GhYg~(P8$KMuzI@3=-|ejyrSDoR+WXdq;`>(?M~4=N)nm*XE zDr>I6_upQ>3q!#Xso8qR_|(9|N)axhkJLcVGiV!->l;Y%9~m^qgQ7BSCMLM*!5kgN z9>L3=P@-(Tuco_^?mzL`Nkce_IHj{pn3WSm+CH6NL zKKdH2kXT$S&C2_)c#t%29*qtTvMAl4oz#iEue4`^CdDVRR7OQA#)RURXnp#Z?IcQ= zapMKG@{RqXOXd8ilcA0Va`fXSik1J$<}uQX zfO+uu#~vzeCzEt}L1Fc4>K%?2$;A&_UzTGxfa=(8cJak&tR8yG?L-Rya1ZhI1mTzI zw3dCmkx!{tx<$2<)o_ixyj+g1ireCO4eca(urqCfMtz7cmLA1BurGKdml=4M-&sC# za{lWA&(&6Cf}*SDGqVITr2X?IfL5GA zt(J=huUR;f1_nMH*RL}owUNLXXFfYeO&djh)6K%i#P8GQ^Xx~y(|3)Es#Q@DA?5lF zO*IksJ^qcg+|X)Hqn|a4_hr(R6}T{k{j>UbgXTV!kN--;o&rL{->pl^wvx3~U!lM_ zs^=_2&&RHOzQvCYB_l~1Sd!6ozLi!SXK2l867NaR&|;aI#ep4aK%C-aNYGGK{!+ZU zTmH7%2kl_+E6-c4mn;w2YNB4ym%SXkk?E>OW4GzLS`6K0xF$SV=|Z!`y$Xqj_z^V@ z;TF8rHz^&>27KUlY%It#R`lRtj6e-Ra_6mEvrwLO;@G^xLP&oPa<;`6E#KUXe`U_n zSH%Hdc;n+1a?j0@!Hny_ne)M9DX&iEm}=j6V0)aEo>x|iGvk8KSVe@w!fbkdwE8)o zOy35(Nt)%yclCUb)hj)uQm(Kl8@n&%6leNlA?6L{qaIBN26O3`FFNokk{Cv|!vmrg!=-RG3jW z+T`i)Ex9UMYhwKx=v%DJ412ac66Txa>Ug-H=y+HX)dg=Hed*|5CsORixpq1pi0Qai zX4oIh@B7*zbyoCz!|?txYHzNnH|ogx9j|?PMRDxdxa8&pxK-7RR3j!q9dSn^`ZP0Y zS?T6|h0f5EeB|p__(~}%1#80GGpF%y9>oC~jXBR@Il14) zI>qr<*D@oe$1VZ41CSlYV#rE5-*Rb<@Zzv2RlW!?0;CA>wIdNJ&AhxDllnBvZeh+N z?onr-0uK~c?fG!huCJnQV1RIwXZUk%`;G%`oD2+&VxUK4OG83aeHyBUJ3VRD%$Fq{ zA}yAcAfxPs#hhtv&tN}KN}vXe(EYfGLz)JMwO)^PFB(AxB~6HQOM(VZ3*uBY_(uOG zQbtPS*MgWRr}m5u)S%$*m3%r&Xk>=Quo7|Yd* zcA}r=Dcafih>Q;qMyOcb$<2jo!YsmE;S-YKuVB~0+s27KwsYu|=AR!6D+ADql}t^k zP_k|Lij%0~GMusqa1nT~?8ui@hyk@1O0>2+wS&vdd$X^wz01uuIz4_~OZCgQLNRY> zKGrx=yMhBM%>az9km@O}S>Ap20%-nHM#VfI4Qel#z>YfU+r=+r;Qi)GV7O~qx*cvGh(2sal4NzLJtI0TG9QvgstkXzI ze+So%deted*e%voPq}F~PnHdg#tjiR15rgOP$+T=8J3GDA_fqhM7=ZheeX}Z5Z@3C zS&MFw_%?RsFKOoJU(kojD7C_RT%Gb?@+}yr`OKKneATW~QHgvWKM>$03vJf7!#!Z& zEJ-Z7tFpa6q^%crX$o@3O`I|bwSIyk9{9dJouFRKDNJbO?pYjz7!Twl?lbbq4A=E9 zK@q1ay%8%7%3*Y!!&Mz4AVVS=Mow#uK3kK;JnzOlx{|Hr{F5Q)uZuMrcDQ>CFX%Cf z4yk`{&dlMNd{d30iXG$ZWN`oND+{f9AC^mR9eh(gWtw17*_4&K(!6^^bjF|F?#@qf> z<_de~>koG$xRAA$@q(O=zHfuft@h_|%Xm%t)(A(dh^*Ke-?|T&5k`31zW1d%k+&cw z{vMAmdmYC1&TGnTAvKloYUK>&Q#6gl?{rm^8iR+~cfUt2V~TGzOlO^aIpkzxlcxuN z&-i5!33(>xrHd2~G)@l6V8d4u=FUqtNi)&~CmA-@=P3|bbi#}7Qus1+K`}&DBBNg$ z>twYZV^gGVFBFKTT2l|Hj@KxAxU2O(&6cT*8m%q8acQpF*A#@NhIV)V+6>7S`O{q5 z+ikns#(@5ysNAl2!C>@hJNEnTG~EU_%aLfz5juGu?_Ew z-}#NnwFq!I*q~fruzmPmwGw(qXV%?rBP-)e`_0v&=x+4U(`icBnu4GAV$|1!wj&im zGOd?}PrfPla`+z21>N9>Z=_#vsEn=n+QnX%RUo>~-`3uRE9_c`kbqd};ukr0b6U@S zvTj}lfaQ%t1rIyvbEhF5tdxR2A-{ib$*MT&{0s&6QJ7Y6#%rhTIt(-hYmyC`SZYaj z(C41OuwdNM2z#Z5aTc!?InUC|VtS8lg6453BFRzl9s&hF&+bM9n!3>ppJR z?LmY-d|7%d#{&YkyhW>V7A{5=SF%q+kYUA)b!mL|{>5Pz?!CuR@=}B%3e> zy4`#>Di5bQmXnIBxwwaIR!VyKTFYWyMXF|GzyRZYa+mO94(<9*MJsNGg@>Q`ON&}Y2g$zQkS#ZwSo3g2W+yQmE*je(Xe({B z6oMzqYg1_6E5~d(c3F-+ghm{z?8o#n;g4AA*{>{^Xg6`2)s%%oTyQ#<%avP7abIp? zJihTdYWU{GH?UUBV3m41w#YuHI92`Lj#3J>!Dstqd5Id@%j(4MbE(3nI9EMy{7_j% zKXo!z)j4eDA>r>>)Xl=1NtVmHx%{Ni$4yVbUT?$R%5HYOPKAKtlU@nix!1y5 z>fdVoJi((WTU*p#RtD1TOTtpu&QV7FVpz+F5u$O%FK2Zt6;ZY zq!i|#dq5x+1k(>yB^`Hgsofj#?3WaZ^|WW_u^usO9P`@Yfhh&THw~p3T=4Af%X29Y zg=svaR8tfEMHgH{LBSSC`U*KEIVj%XkBz)8-HNG6`=DJTta=hwEDteks%wz^ZC8rh zgR(G2i+0h=?iO@N_$@X;Lcf5q(7<>9$bYcCyLu|)N61a;T7L1G3A9)()JmY-Y_7xV zQp)~5P%6!GwWtl~M-7|~jZAmYq9!3O=&2UN2UP&Fvb5@V_(MkC8-Q>w(D3nNst2kW zKeRG)>rXWNa=^W$(vdY&xubjyAa9_9owma_&Ea_1Z^z^GH!kz@9nXKd9Re;Q^D;&4 z4&WRpK;b!w-z5F`^@jiiHbB^yzTV%5NEBR*_U3(s9;+a~7lXT&p_50^9fe91HBVBv z{d|_^i#S)!&Ubsqo$M8u(GIyLx;Qnk_$FO{#}#lxeJK-H2MTh_$QZ?2z8UhaLd%q0 zvZCPQ>E8CQ{fnCmZkGrT36$csw~{3nLXi2!I4qghp@^b=JWBo!`Jb!|^%zikLl>PE zL!Xxk!M`-Rrc9hzUN|Y#p4?!~ZH#Uw5wbVBnFE#ro=C&PHs6MI|LklLI21JDQKM zne{&0SDYe9wlSpn>1A+t3*00Ga1i1i@C*4cXlruFZf)Z9c=#43qPsqf*o2ScQq*Cb zM+a0A^y5P85{DNh!Hc305)yMsWoXFsp6E8_O6*`}lbJBw_SY%i!Bz9!l}$+oVm+DZ zXVSe?DBqs7E{Ji;%XKv|$}vi$%j3_ja&$oZ-3l2cUG_6~Yx!!qH- z_+t55OIF^8WjOKcOuVm&<#8Jd;0m`qtEV7s8h)FVe6MFa=}b!nJtZde%`K-y`?!cB zqR&94g~J*z3RuNT(FL7M|1UP2CVP_#j^pR|aHG8yy^&mox%%OnY7-I#GF` z`^Fd}lNV*e-*Xe|o)OaDSuhSrWCnP4Gkm57iMck!Cu#OY`03&ePEK$$um~gS{lRC; z{G?EPpb(S|iur2ACWu}n5gI(Xbg@hZgHC0sp@7Rhw{L~(;x32x)!@wm4SgWuFO#Dh z(!0|5KjE4*3n*4uXi!7TbJtpy%Hy+ZZ$v$n%`z_#HEiS4kO?#B&C{`^nLrAWPg(U; zfc23eRncFNOE%}C=-J=1>kKIRln4k^R}M1GF0f7E7mM1%4u9YI0OyClgcrZo?1c) zB(mj@{QX|}9fWJ!_^A$PWA-LHJBvrKU&Qz9QRp0;P+Wn30Pq<8@tKKr>F3#jc3d&z z#aD~Ko0{OmOHv4?h!6nwh=cO^{a8=?Pg;)$cH*Wr?KLbI%B%+eDR}bLLTKb|yX$ft z>hOlH{wm6yrp_XO&n73SzNy><=F*ARgu%?kJ;e2`hxT_}Mo(EeDAVV{)TRCxzo*2} zL>o}rgDEm1riNIWErJy>bO;&^ymnPyRNvYxIVlD2a-QX0``pY?ZX0OQ-qCVY2>Fg= z){47TH{ji>&yE+BHK!reZi=d{;>m1GYz4w*5f9%GLvH?7PhR|wcTMeQz)eGBJyIwc zdmOmpG>sEg8}uSo(4d=~32AJYG>2SFr{;;mqKA;?$AzVZ^xA!!4AeD-MlLh>m5AV$ zE-f3bpWS0Ef78Z~FC~RnuzM-$of^EPO^>6h+jxg2hx6jJNm6m~>qalCoCc zB;fU|x7vU*wbM394_cRwo5Mm@$cqOC;-~P+mM~_l3kN1AUOM)RpgA`t14E{pAvjZf zFG!z^16??PEDi2>!uwbEhkLMY*R-Zxm0GI_cBoT~q-Sf*;`90ysq$-vG~< z6ic+ngG-X#Zas?6G;mQl#;#%(8^KwUBw#Q&w#>H!U+i~fQ|(o6%+MV{C$Q*PJfxKs za~cS`>x}|7u0tsJj9lQMfFKPro8S7k7ZJt$P;6~pn3+^Vz2aAtD67XoOT;KgILXo+ zZ+hOb?C`=8a0A5LJksmfGDto{D?5NA-Nk;emG8JHGd#DAJ|>J<@c&+xM4Mv|AK0`t=h7?s=PY>ERDv=xf6g<1Doy{JI_n}p!v)%jnfpo3epW8-5;G6NPA0@u7 z?VT71s39)9h5_n$|1>KJsVciFf1YehH`@v^6rZ!)!Otx=aPjW$(vhC(=K6jA$#EOg zRzGWs#*7j-b~WAp=+4;ZgMZ_D;gqsyuH8IJSRWDZ3nW7a7i&A zlC=Ec|7oT^nrdqiZ1;Yr5u^(-bnsTs6>Ul}C=c8>!-J21?q$Mmwb$rV-&}(9VhR7! zcyPtGBI9evXz*F_-g=B^7KZrWj8B6McOD}&<`5nay!Fr%MbewxrTgDRptT8`hBijV zX)IWJ?k46UB{L5c^L*bbplG9>{Nk8qYNfP9G}gl_U>NFUBH)jYYG;e(0ppP<*cw+izrx)Eb}Lcphj70)ifZ$t9lvEvnpuRQb+1JxT#@3^Mx^{2F&=Uzrg?%(tGI= zP7fCmH1M(`8C-8pIWc}<3ia~@Y`cNq4@3v|6S-HY%~16#H&5y+{%#Oi4)fM7-u8h9 zizG;eem%Cj32E~-?x)}6Tj>zEKei68hJR{lGPzw@n4{^$-a|!@1%^#uou#F}%*GhA z=J$lN{W94i6H}Rmj`sx)N>P`JB$q{o?pJm+M<%w~*e5n*jO}pgilA)hEkr~nj4=hW zMA)unh`rgV@_|XFR+1kCiW3(=$m1ujh5Z`{};Fx_)v>A># z|H!hjjxHkw9yhf3dUA7y=ey_+fpQk+@X;Sugu-QK75Z*iUv0q*r%s#a2!%TJ%rKH_)5 z2hq&!V}i#z?WiZ+i6Dw%-lbCE7ju-i~MD$Of)Erh)b1Lc z7K+@X3|YG1UW@FUw;rZ>=|bh7EO(C2&;7yHlB&yPw11i9X6I=MOokDWF7f)+K&RZkxmN?!H5@9gnWIj^h9X;@aErFG3<|rO z6cJ1QR~pxg{%*sB(h#^&+T!gYthb3QQLP`j;%@<_1IZXtPL~Qc=bBIh=!*B3KUXRZ zc9bMtLD@A_Pj;OaytsPTZc#Q3!@qDwReAaT5*%512CKRi-bfoaicUUmtNdUo%se9x z?uw14*f`0gg!s^QSNsQc<1{q{bX}YsKkt6x^H^`pJrm2kobU~9wFr1@@{5+a7@TJwU zUeYX@3};~Vv)&164E%53t_nHDD)t8HcjErKgjROgJZTgDtD861yAh!@^G?>Nw3YV17p zR^NEQ)oKc$wdz?}HTJeaO#4ZP4~O7D@SYa(Q5!Y$L6X+(fp@ zgn~rh_^_e9-AAVZ_9>QA$-l}nKvB0-t(<0=9>a+#*rl7q%P)&X=1$wv*ZImcuBe(n zWusm0nJ^s8tsf0tQkb18=dbdvq)_wyWiG**Ty!zoI&C{j#cmzXGKHC1@b z+&mCc5V||MhNZM=PT|a|F+1BPnbn?Mz2}g-LfLW0?FY`B8?;*!eZf(sY!6xv>j}IG zKP_NmKdO+MgRD8)_q;oX-`3WPc)_0N4(d!x)&pyz>Yu~*vU@Isxa#av@#FX1Oxl1s z;C-_%wA7;Z4V`nJ6pg-BZO&x*852u?AD<@VeBNA*d^H~X4?opxv2WX1Dnx-()TXVe_#@2$@AIh*BIlC4kTz_H*~!+S|YDN&ASum=n5? zuwG~PruiA{Bc(}y2uCx|cBS(LW%{GF=?L|j&t z-6ox+a|F$>WDJ!+;ZM&2T`p*C>0fgXMhz2U_}LC6#g=0mReLE$w|IWCu6a!1ihH^S zv{8%6KzpW%s*Dn~Tj)rKT>Hq*CZySq6Ct=Pn>vk(2Z)C_owXK$Ukx$n!24{I&>}=g z3;y3>!Hzqe?L>GIC>N=^NJN*E(_m=q#bInoW^ExS#%-*!taOk^$v43sywGrJJ(Ea> zR=8La>doygHq1ia5f>472of_6M~C59w*lilu5wU-G}FnNqMu;$QKwKeae_yRh>!cn zCrD2YLw5|}uf%%K4q(>#Oj`z?NgRrQ^2buT#)UGh-5iIm?N0vZTRgpLZeI#3@_XwF zG6X)c%L#i!p^WCkTnVJ*)1FiSwH1zKO~MK5xD|x$kilG7xRqu><797&N5JlRX+Tnk z3#3Z-2UZZjMBmN}Y>o7_mY3x}ZphYowZQf+xnDxG-5N}yW{^Uk5sz#rB9C~Tj5m_~ zoMJmXn>hHwVS5XQleKH>`$HlU^|iBEjzWAC?r;*hxi!n&W_n#eIbAlxz<`JQ(n=$A z?T*1Ft*jlzWT%8uJ8aWDGZGJ%Eos?TpO;GusA99|!j)04`TWO^t~1{mBQGXNa%Lmk znlC58#+(ht3Y+s)^yV9JR|hq>aqn15?S>=((oasumhl=KUQ}vIPlCIMp^{jO{KD}r zJf@qMH`=Q$T8EN<1!+A8KvBo1qr`I?Ua2_HQ1Iizx*1>n+~w7w7;inyDawmSDCbjY zGsYM@@R%-r;g>giBvCPqC>igS31i6|7hj;dsXjLPPUfY{oR-r+>nV%zm`+EeXIac= zN?^kPknrU_fZtScBR9q^nZN01S-%cAeLjGO_6tNsQJJbkp5rg@1QxI|{XSU(cNv}G z_&6f*p`5}ojGjJXBS@gFtnoxiU8C-{^C&W)QYmV2slNfhRh9=&7_cc;siS z3Q0Q6=FH@2=nGmVe0L0B0!KU<6m376(rpy$N2~RYH}lu8%7~OdLyuOkKw{wgux)Hu zQYm!KW>vJL>r~C%EFl8TOx^Nz>_WDBu41tCKS9K1T9EHq*F3ViWCx6w5)vv!O>@}J zy8`dWKf0`1l(|A$GK*T*|HR4-Tp^01eX)clnfR5NJl-v88lpBDAYZ|YFkJ}T4dnM! z{V7oSI^pXv^XCjX2z=}V^^bz8vwx5g%?BX-t7~-8^ZLDg>s-c>*rUE=ss7TQpqqo( z=U3)8ZgwcX7Yz1Ao>P^_v+9D{cHn~qx%-z5zyE205XRO(=-xOV02INY%lSmf_LG7b zmfhVl2<-sc?A2dOUsenZC)Q*figb8i4O6mS{S(~|0!wdhlJs54X?BChi!GMpknn*g z+BIIydInWsj5N$ z$WA%vCh21YE@G@@?2dZPAhm8(M3BZsV&WTD-fxK_k#bL_C~Ta3EYm39xv42P{Lnr#eZs_1Av;o$ zm#2mr7{I{M+IGknMGZ_eVH_DqLuWC)+e)t`>k4?AA_|VtgE*_-UDP}3Csr)y-TPi1 zWxG@EJ{NX@)w6JKa~Q;+%W2LwEH&T6IG$?s$=%o>Ar3Nl)Pk>nZm}ik-{8$!X3jw# zX+xYNka!FJon*>z$9nkc@vG)?UdmtnyQkqU5`Rjc5N7xR!tc+qks&Y2ukJ~;Lx1?o zd;b|sxF&IE4fxW&TZDJkTXpAnqt_AP6XXmN)Dm*0q~%AouV3N=(#r|C(lDu-vqulM z_|*PLPf1{tlvYU82iqFe*=~#Oa(|A$erON;@QmBxhs{zI0y%a--$x)uy}qG=!HXMw z8cmO25pV5;-nle3ON<5*RRn z@vliq2W=Gxtvu&(nR#39IK0vqO0+v;k*o_@`Q_C5BRc8V;Qr5{vQg3$eKHUoxE zDFqFqT8|rQr_ADF=3@$Bh4LHBX+Lmjs*tt6qeEy1eU9mGh$Rt`t0FR1OD`$?F?Rkm zspznVn&QEJu39c6@_XLMTFxl%e6@E)c#6Q_;W^4L3(89Vp*hTLw=TfP(`B-x!c&|E zs^TWX5O;-mhd2v43FBK6{N2~s&26gKCG$*DTGfQ|`5vPV#=082| ztody;5kn2s9-kXqWQ*528pK3c6HB4Aol=S#yYPA6t~IZbGz8}fs95O1@+aAMTKrj0 zsI}h1W0Sj)=Fq&Hb^if)iIm4=acOD%vFcV|_u%Z_69nSWBm9QfVL`8+hEN|3#&M~a zux9duytSb3SasVvugddILp>6-wCF}tin3lXVxVIALUC)zkUc*?-)@aMf*ex*rH}ml zMgx=_p3Wn;*`H^5`h0-+uQ^2s!$K(J(4m2{iO>v0+JSy%-3!CmGZz$olmza&{+mW< zl?@20A6aB=LFa>-_BH;gC^47b7af}vApEv>`20Plk_#*VBTNG5FYDH8pvSeyPsG!W z+cmSwAsOGKs^Kg`;=GmB@rn8Z>oJT<6aeNEDn?9PaYHL{=8M_hM_L=?z?&$g2qH|p z%xLyzjKRX=NrgFK@O?Gvm9|sTz%p9z)SEz*&Yt?|!~M*`!lBu!m{GqvCNQ202h}R*uTpP5+V53JF*$J3 zk>DxkU=o-Lx-md&vcVPXxz1;qEit(^z<)!TK(LR3@Yo-@+taC}en>U)-OAD7^F3xJ zVF5%hgWF`d@%%_&F_=g0;}L4FEqA3BB-L!NSX19j>)wrw^luI({<*yW0YpnRsBH&6 zC4ZWe#n{?5L;N)ZZo)WPRCTHI4Ojed$|P$q#`ZB3Gjy4Aa={9I#m>ym7a3z2_{Jn9 zN5^6+Y@gpou4i zQ-wMul#yY+Cl3h z$28ULU~>-%W+S#lJFz;G1PvG5c z;M8>}DZe**a-2nDFn9?-Xx4UWhSnCDCP1ItGpbaM(16T>a8ZsbS%vrvP}uLIBHUPM z01HTF{9c|k>8=8-TqmO!<`U6#wtxR9;T<@#-q@0$a_J^}gho{O)n+^Aafg^mIW;;4GAemi>6 z8Uw2MopZ(bS(DgUA)5Z#vHEu9!?2jx-Vc^Vh@!NmuWs#G|iU z2e4q$ipguFFci1|hqn*;BtDZ<2zW^qZ*yxa1w>;)evetBQ|sP+Err}rZj5p2iEq>E zHMwxuBR9oKPPeX%knLQu#q_b$a1*?X?^!(sokwDTYgd`%1&roda?L2`GePQKU2JWa zZsBsX`{tvD%cdZFe3bZ@je=2d5P19ZRUGczEC?R~-nQ;h!g&<`2$~zdL7ow?h5|c3 zU)OWMFAKm#>sipPtKwVu8=3ouwo6y3CsR?R;$l^YY-bkf`%SzYO**{I&3_4I7>0ts zeU&@fNsJPA5Fjg&JA=MwL9WC*`L3>D%rh7MlcK6s1Dxi@Bigo$FZuxE12O1W8ECN< zK|l;cSrV!!8FczeVTk7j5_?GHb2}Yk4c)lBMrU>pkw!b==&W8&2OS)wiD*}v);{4` z{k7$!##}I}uhQG-!~tc1n#`g2>=zN9BSmRAn*rt-GZJZ3-(kZ{o<)aMmASUN<=31& zsWsrY+W|+4$jK^juTgg@s!VcC)zc~JVIcr0bPiEt0)HcogTNi$KZC%yzsa4RkaxP< zogML^LnT4IJ$!z;;-VKcJYE615NW@r$R*4^7c|Flr?AsD-Wd|u8bcOpj&Ybc+DP>i z+MpYe8GhsmIt+9`NheEwJZK($DLW<2OZlm8)voS(L@5V^@gu2HFYn z_803m@|)eCWU>!0Ow{gkG@tKR4gC_8wf&ai2uUX+B`xYnk)7OP<_Ly1iOg4RXAR{3 zj#uN|d=W5Nrc?Lc*3igCtP@=2{>%?|jz-KS($S+g*%@jLL2TTrs7&g20E3)5l~A8Z zw1uORvs47arqN-X){>gJ;rd6&`HoiS{-}4c#o9N0m3o)X+ntxT6=?#g2Rpkd}wK&KC>68s`nP|9&W+Ak45q zx4^b$ywx9T)NM#F4M0>Yl6q;=nlA0k13(s zb8FN$2i&v+;C9E9R?}MSr=hQBq3zxd4pjl#ht#-au8*W9L54;&8U*&@8CZymWzRPD zpk?#$$yv*`h(%JKN>|8=6@amAG@YOVpt|^iZOI7WKC{t`l8JUOiQfTOOO6E1H07I9 zkn^wj_Gvj$4m~l#jSi&+-C;y=&YHOT>n0jGT4IdhRYOt`JN$1Y8t`HsH=m zJrnG)F9s(2w2Ma$auu{EV^UZ zYujM)cH^?F_w9c+j#vmaZnCZPUS}{l@gcA4_tM20NxIxmDV%?A5&tlx{&w>G(JFG= z^e>hfiTwXF#_%Wa|0_!T|Gwt`J@Wkjtoa`x_#Z?4d)UZT9*I%>hf(FH$d&P5$oT&+ zrrb~vNLV=oOP$|;k0qF!$QEe_-CVbMYq_Vr>n)i0`@jP7+`^0vYX<&Xb|CEDE>j$G$(ERl)dBX>-)^0G;>)!57b zgRHH8Mm-c?^Q7L1Lk|_zexP=Lwi~fftAo3U4sEg&StYdc6mP{qzAnqtZiH0y)29iQtOQ7f4!57+d}H7el5#y< zW)r*HRorA0yZU;2mHAMAJD+){T^4d!c{l2N?<5F1%K8wB&;QTxD|a9-Q@EUB!a2qH zS2YTMlRlMIwycj&6mvgr_Qnl?IEks4yK^L9Vf@Bi`D&Cxi?lj3UF1wmolDOS=6`;C zW0-orzhap4>63bcSKHs(Yh)|KTM5Zok%t@N<1D`oZXCjI?CxUhhrD*$Tu-1J!bhs|zNoI6B^U&^`Nx?5ue++CcE1TU)>~Y;~Sd09cjE>`BXmrSk*~uV5qFBMc*8jDs*8PEp*9e zXytOU@r35#PWLMhv&1l`uO!kSoCV!Z&3hh(h7p$vs;dw%5pJ8}CPO}*dnP<=y!vQ; z!l^&fYghW>bwmOT9#MU18_Ld`$e~p;WOCI)wcemY;L5MJdH8U<SfN8tv=Dyc!H{?vY0p#+Y(YqRb@Ob~WgQCt2dvq8~ zQ_JV;3*E!+r^!Ez`Zu8ce$Ra&^o0tEH*Ej+bF|1j4@n zK2!8lwAyI5!Q#T^X}n1E?Yb2UYkRZ%2bZu3OfGA=hM;%z%MpZM^Q$-2B6U6@m(|on z&v|J(-2H8b)KoOEOoQ*zk`Y~w$!3D4?>516_*|6<_UhokKweHxhl!675V@{cjApn1 zZuwVybR#w^4xcM|T$mb|^fWHH?S}CdPt5DlpJfXA%IbF>)Z^@{D_`AZ>h$gV+PuJ$ zEgIg^afQuSjO>n$6K_>tcA4&u)rUR`6o(cfX>Yf`^e@Hh~?!z?i|te=6fha;zq`tGazJTYaVBWj7O z`>aii2m?|q1YZRWv_MhxZlHb9wsXt&B=g}e?7(TVO@A8^=kS2iau*UF6N6Ex%f|kq ze&&vIbGoMttVUnL4PA)}OV}*o7gMc_2vbnnc0QOwpN=c`#EqNCL-@s5F<1A9Qj3sW zKcUE{AkwH%xeez;Vf6umj2)UNhAS7l*2 zx*w-Pj}SCFzn7F&Z`k>AG{wp7wCuP+<+%Nf=l>z?J;R!cx~)+V1VM_Z^e!UOqzOm~ zsEDW_h&1UU0@8a80R$;hMFpe<5a~^%g%W~NqVys?B=iGD}sHNpV-V{t~fjF z>8D)Cg!QaW`|Vjk>u(PVH+_!;oKzD`#see8i9Rc$J-}Tr(r2$+JiFgK(wu7{82%=l~6&w@YW*eVMBTpHw z-1q`Iow6-C45ut<8lU<*zk~^LSM|Fd&>sGnf)nzanb?iogSc;8FZv>L1s0_Srk~g5 z1yX0%>=(!J^@&mqHHYUD{eI!1`yj*<2gkK?_Z*sn4sC$Ke^YFT>fpjlFl_spv>pvt z-sk6%C`*D7dtuxghGyTP&_7EuRuPKFbBruTYpZwC#SL?f{3@|Nac37=_$4w`f;YS4 zmz*aDuMv0U917Yg6BDRPR44-zqf)gpT6my;OWnNDCrP!$pSS4?;T-7tu^^mlVtXVj zA^lYj!WVi?8m<`v_EIk&+wg#IP*sL1PlZwJ@IU_fTpIot~MWX z!#q2%iU_LlI}2Me3EPGO&tg2#EQav#hM#bMO;q7*LEy4Y(C1*p4kwn{&l5;WyIbnE zZ000}{!(eCdA^)>82a5h#IaH9)QcY(OwWsKLTfHJAPjGb6fW`gKJ#&j@mn7?vhGt_ z%JK{QrO314u(mqMl^p4lu-4y&N26(rv1qzA+b3)UT#cdc30%aPYATJk+?=>$J4 zVPKU#toD%*3DU&+xWfgOo7&UGqKTVeXbBnFI%N^?9fg7Ex6xR^1wS|eZI`+aK356z ztehue(Y84i`*l&SJ~qYZl85F9T=-ZOk_TX!7ag8?@wG{&BEo~Pp!2gWdIjE(Wx_u` zX^tUc-~ROP)ioGiU?M=7f*G11foQcsJgOzA-r){})z0fZ4oFQc^I#%3JpF-tfYB z7$^E=UY6nXzL$T~Z3;XSx#u4Pq~9byl$Dw=yQsl#+J`GFZ98ET}SwqJx{liOlkntfk-W zgTeNixf9=<>s+FVuFB^I?8D~TqcX#=L$eZ8cO8(;PJtcsY>p0ZhKEyE_b8_;l8pNP z+RvJAR9jRGvSY)EGkLFP^gItWC5C(JIwP*lMb55b@qZ~I4^zyX^>S5on%{07P>zr2 zFS}5@?QT4bfaO9`i( zDrO?yWcEFAz{<2&d%FcOz0kZhLq)ehCyRwpkNk7zQfqsSDi0Qulrg?j1VXr*-9=gM zyi#0>|J;t@l1oHF!`EY6Y}I%`DGI#z`}p@AO}D^}A2ppV1WmFY`DM<~>p~{d8s*GX z<80aYeDKtfSxuXr64a`BwWRu99%qbJ8)c+KLeO9266y>Sj5y_{nkNl6x3)C36r7(8 zz|Ub8cuMs0>{lu6Q9Av-v4bUbYY>-cFho-|5O1Gj=Blu*KNnIaPj~aQ#g!5v-{^_0)J;qYxqs!2RH=(V8eru zQV9l(gch@M%bKuq9VW_<^-Cg)2c}_i!3OfTJgHM5{viWNZ>HDT^91J4dq~mFtJs84 z;&%nQ@mp=@u1t6_zbNMYGCValv8RC~y1ntb)gcX9Czmd1F6My%uAO(5Ib@8sE+OmfMUglU3z%c)yL`s-s-px5fw zWH@VT$NmO(?d8wf~VRsTaX-i7k=tL#CLhnGJJ``jCDK;?`OWov# zX0{B-M!xk2N_V$r$Lg}eV$p37oe);OqI6++bl*f4VWTDdgP(l${<67Xntqc;C(7?p zS6|g7ooA~4gUAS?@QvU0u+9UOgn=bi0Xf5Sb5?@eC-n{$$_e-+OaDl48?XP;HE48! zjs3W974JqZ%VAk?LV7tKRrM12Bl1+ZJrF=pX8vD>TL}(h6S%b-`_G~SAD zp9K=Kf&Lx6sAye)mLhQz(O}lq{$|!@wcpasbVm_Y_>nTvDmZ(0xU_2k+WJWG>bg6? z$KOA$wpX5Zr+Ss5K{M`o@X~xifKFLbhUNo7;Eu5qEEa+(%a*cfc}_kUjNMeWS*OZR zvTV$pm9lAkK4{zK*79LCqM}5#q?+#8f-+#p4D#SFW65UBFL}hYbQ05TXC=vlUaVR& z@;tJQ+bGG58XL1qCnsi@a>m^V;l}uzd#op+B&9rLxcY2ljZ(xSN7tx-~q4lmj z()5$Z5!LG!o^*neQ(~xZUz(qxQlV0CvyUc*Ma78U!Oaxb>?s{@W()pRLiZ@xM}ys> zde{>|tO0TpGyJHf7a$_bbM|*;;gn*F#;`FZlXmZ#4|z3Yvb4X9%*_5*FyPOEf+l1S zv@qG-eWohvYEzs^Pj~i4=CMqKmIC?}R^kFrY6=w^LeJVazfkCwHZ-aU^3sP4*OMZ9E>pd7OHv6bcQJ9{>XO#i|?(1Nnk0?}G$+R7aQ}G9h9}acgu=4v7fAJ7b zAM0PFk05Rr%&kw0f8{K>ke2>8KY3B)>HoGWKz^J%yXZ-JLV_b+dPI%Z{vyS(iS%Qo zBqW}{Jp^dnTqSv_sdl&o=vi?jvBUCbGN_mXmh$w`a~TmV?3uBRY`S45#Ol?LOw(jI zr$EPB&cYb5@%n+%n=)hRkRJItk>uVSfHu*56dVa=j%>LcZ=(yb9t8dM!jJd)4Mq5K zODGsQ^_x-zH3G_KAj75et=Q(K7Ujh+cLc5FsBdo8`)fn$4Da=L9`t9!+4a3J4LX{K zvqPhiZ2?P;b(|B7gg1%9vwk>7Un5`Tzjs^D7k+dLdm(0^teG4#-9Np*O_0`MmL9ed zI4z9#u{*z$8W2bsm<=%3=xRi3^8X%D@pL&@(voMEqp&3P1WK>dVWVRO{hr zv_4f7%Y0LMWswjbg7hn!?9+I2Qf3iTa8Y%B5wOKkD*edj(89L{!P75dtc4!NgiPkD ztUYU=ODc*Li>tbJY|RXdC4BIIF|@w>>95c2Vvsuw39koA_$F?ckDJrRr(A>!eI95= zL%e~yat&qIogOb{T#2P2aQ%p0L)cG3)9F(E4il+YcfsXzu3ei8uLpeFfF`^hyQBh| zeU4iu*m=3VZ(giIbnjefx>h;UzfdD8iGEl$y(0m2v=EG70~-~t0?=p$8qA*Kxpmt< z`wz>|wGcSyC*1dvd}1N;sCM^{qo;Z`@>DutB|Ut7$~ldG!tOOvKhJEoKqG%aL%!If zy2<{=fIN5=koB0~*?KA$#ww`L@bH=9{oMq6kske;F<7t@Ofz`3%{;FwkT)r~5#R4u zmlH~I*E#7YgC4^FZvKfml-^?gwf+-OaVdOjrD+**;Zi&ICRfZ)-C4{l0I^bzsP&FNXOlKS5i%_H#}4uf_u|_|Z=x{3@Q29@d03Iq!~+FUH_|r4fW2 z+UY=`^i>i?y;&9eV3Gl6$r7Iqv`h8-TK`bi>Z#NhMj^IF_G&_ps?UKjjnce1G3>Yu zDf3r0Yh^|yn}8+{3*ViWxK_W7(Hl`<*P&_!lr0>GA8z$%`8;D?Oid`gxkM36WUM}f z+0G){7Daj3*zE;a*+K3h+&0BLI0SwQZbN-|8$}r|3(;i0j`3gLRf3|SevX5gB^?||A}xF6du;+_L z!>u$OIZ+8P-NXd-;4EW`V3FW$>q1;ps*=P9Xm3;XU&y|-Scb>R#3S4etivZ!8ZzUh z88r1McIDJuYpHrrb9S~B=?>Qxz7-hE=`TChc z+R0=(RjllF1FsbHZU4avWpz0eekQ!@nC@L>!0a6v>t;;*+J{Xxoe%H=x=?!}h(1~I z0&ddHF9&4*j=EXb)a}{5`)q$%;U~$rkSYQT0uBy;dYR=XBAjotFmWmAy9?Uq-LI|o z(hNQgZD4YK!+R&RO}Ywp{X8M$_@1?1xBTOQXP`46087I`Vs%^KTJu?mssbtjwl}m9 zfe&o%$^G+!hD%OQ?(sYRph98s*hX&>HgQ|mmEN?c zbcBfx<3X>Kc!l|+R+hQ`Cs%BqOvn+|9Y)yOzkc+oi@ijha2wS*pfAY!mNcw(LF+tM zxSVumjgco9ve53^q`^UjFq1^tPf+jY9GMR}SDYq1p^Kqgw-H~9Z9r&3?fSGE%pe@WRys{MwHW{Kh34_X9RvG?x?=lnYdkj1-p)7gNC+DdeNuosb zBa=aPAhATyMAD6ICRlwMMT_NLq}5N5gx17<7tD*fbp1rff$^oKEzHw7@1#Q&Qc!)> z?m`MXPARhnGr5h*K-VDmU9B=%jp(RdHURld6(hL9UCcZ%FrfEqfm`8rQRiQ1~* zeV=lVc6u@$mIIfObuVYr@(o|dE}*2PMr+e`Oe(5SdXixi<TD*2TwCOk^130xMhSuk)x zb0Gf=dK@s#%f&ZjS6&WY$bDDvU~ujG2pIw_f=|yC#xKRJ(h{_b()IvZ9QLQSZ;6St z=U1v?9%dgwsgDGi6F>T?1+_*JRV+uBqry^qi`pA%Sx4)ClA=gB5@q zXd*o(Bf!SD{J%?(41Hq2Ft-K5*CNSrkl{V5*y%{BMXjB0UYhQvhdWnbr5k>SC;7tE zz#~Z;F-4+JDNo7Xh;hKDjlmJ8p(8N6?PmIKn<-yBght*n=Zd(ydcHld_?oQwPxy>i zCa67RQuA{jFo6h>&ql7= z3x}HRg*~Sm7yhn`cPo_8bS;GQUuAaS9qZXZlV;}0yx`6VoHuJqyrIAi7B5dvsnM64 zj5vRqi0TIm&{urd(w{;#T7P=g#1?He=mi%e`vAB*>i1N`YyC^F?*n_}7qII|Pjmeb z`jLzEDdT*ODNY5}W2tmU_f%E!DS7Iyf;Hs#+0HYU2Nr~?dr+R}7F}!QUPSU-J~BSc zg*E2Ajn7$6B}WUPrEEc9=}|3T64wMky=B#6n2$-4kL$T~J8m3kx6l0p-cHP&w*RGhG!ax*tJ;D z7@;Gy(*d0)%7}0CbE+cRuY6hgcA1GAwYzRO)I z4d^jhjhTIiFBtOg_xpzdeFP}t1zh1^r@ODc@!`ppl0g%LIwv3i(-}zLZv7hq+t2Py zR`my%VGfMURqnHtXZCvG)(bYu&n=wJezr3E-{ZeIJ*`!1hPme-N#uPiEbqCS<#?Vz z8Gk`6+G+EUzhfVGID#!=>52tygzd5bRngsZ%DY>%KIX-2Wj)K(&%LVe+ z?p#j$IB%Jp1%aKfyavWExmt-5xTpYXz_ir>O4{m5`SeC!3mTgOvJWWapSVa?Wk*X_ z@0LiryV4=+V)~gLEl_Mv#DHbsmyOLcop~P1j&7OHlFH{u3tE-DVmT$=_55|(RrYx3 zRh;|xX07HU6Z$0A!gCL1<~4>A>s}^(XZdg+3M99ZWMDU_aKmhc{XMxqJKLa)s3!8) zD(+DC)KugPrP-Tncf_n@?mk8Kaw!HxHVa1bZ^qmipMT|vDrLr{3ZyStM+jWtqZtCO zW!1>`0*>W3U=e6D#_H(ngAhfA1tDXJUMbtWjD&ruqz~{dfm>A1NYMMQ{XtCUJ#eM{ z0AcLHdn~VFz}M;F!dRIF4Xhucc5UP?F_HJe=eQ>~92M`{z!FwH6CgV+jQPgC{iKTC z1K$f;g>3mxL6b)dN-(FOl4;a)TZn{L-kWB#?IZ$Cq|VGa{`Nwi;9d32X)`zc@4$Z7 zQ7=#4nX$QpxQITD>hl7xcyOsKdsq9s)%)L^3k;nFdslQq?tYNKpClN!U3Am*-ju2< zFx9LBN&&n+Tg&Ekau4(J6q6s@car{^Uu4g>g@r!7WepdG(*=qD9`{0&u>o1>HEF|T zw%V|b-Xy?bVZv$GwT2+`RkG~#R6@4As7{c;>`ShQ6z`|Mb=!>C+E_hE7j9jUIq#;> z@rW0TWh7)&AD3;fN?R1=3;aCio&1j=hj87|?~pn->47r-py{|M#l5AN3P?m|+RnRY zDtZP3U}bD>lRJ8+x~ugPH2U~fK{d@69Z-2L$y3s#b5@55*al;UA@)5D$k8i?=~M9m}guA zkETr@?~@ zM+%Pp9{?!=h4AlqfJC%U*9q!zDd!wj)QlAe>A{*3#~PpBn<($mWvup!6G)OfF7>i6 zm$j5_zZ83Wh-V%G6fq7*H{TdTb1ff^*cXG{cYbLdK=^|mYlTcgN$NI3%@-SY%S#{3 z7SA+0yIx%%X`%xHwC0&P9+`0Fic+af?0NMKsHpMBH5m(>?CM1==E$Uj;o0|7)Ias@ zadMmu0Qg*`mZ+V9PjEbwnGHR$4-q37-W$HD2acvFyUnc1YPKc&<`+z>avsYPugaPN zt^T)wkR#51TX>OHXm zi=Q*ookz&|dv#OVve)bD?X#nG(rG75Et>&ykgpD(Rr1+V%zw0B;UmBq<7!I-Jgkc=< zPj%jfk5lkdTwJ3QxYqZWVK0Z#VcaHU3EB0>1of-p5l6?AsOy-eH(M zBz^w*y1FB$J%fLXP7?9`%e#Qlyovc#GEfa=9J-mOnsQ@yPUP^?IcBU<;8``}sk@Ms zozfkPsI`sl!dHu^WN`sC@A&DLg&Bo%`Xx>mXO#cC&38c_;*(i=-hd}sGL5cnc6`~< zr+)PHRVgYb$%!o~c;?D_gEHDw3!<*5Zx=xQtsqa0nec{>LAJNRBkrDgeS6^oWH+kl zr#I$jAtQOAsG#o}&n(}3yMH#_Pf&41`V{9g1?&U|-vz4kWVN52 zg6Uy8nNiqwmIv{6Y;Rr~F70gNWtZnr=YgV3{wVn1*m=M8-R<-mD<`G?h1?%g@+Q!8 z(Gf!IZN00Jh(2^hj!SW-?bOch%;NwUVu22~OBPi0Xqlng@1_B^TQKMZ75^IZN&&}H zhGq*fdGKex66$7NtdoA&K*pat)hC$ecoo|BCPoYAo1qdcW6DSCYF6$FZ@Op|c5-9D z{l1vywR|4Ek@yGPDL`CG2A*uFC)sqiyoSb3BdjJ*@+rsi*5UN8Id z?9*Gr(NWomlNOP28;xuO#|nt%Ca0+GkwYnDCNa*C4R6UD|B;ob{RAoQ4fNy@EIw8a zG7}pGUaO%;A>06nX2xAqsJkvQj9F6JP_CAoB()U3zw1UhlcBu&by{jzxD4?67FSk8 zd6nFrO5aUF1D+uvS>~DuX-B8hyV;<d;HW zcRRJRimfxdclhR8VnWCJh{q@~z4xWOH@xsvr9pHrsWh#|%IelkSXCOm+nc5YKxAm~ zj_c;0^%AILP`s%})r!7a(4NgO^`}C9tjWu)9@R9@LZ-g~RW~pC@BX@5M8D*Ry)50V zu`;UyTBbp}LwjZRIM6fti<8%rdmt@Xj;kJ&fsbE%B`cy;>5eqUSf>AB0qIJA)o@ANjF7Qfm@8 zY*}$_{Ec=RcJ)-sieZm8c=p!W%!9LhV|&=rrZDW;+1*erMu)XbK9z;+lAbP_`6_0r zrfcyle;Y!Z1wFyVpA`C5a>CoUR5B#Vg!t>K&BpvlrE1DsDGzIFD6n$cBk^ z$?{vqUxD+ls&iVPGQuNCyk0=cKIdVdCzF=J=&UEg{@jTsc}erht5;voouz1;K3W~j zl`JvHOAkLS3HOO0hLa}4O=e#Jis@fND2GadO>W|bwcZA`X}GujnN7of?4#i$SKOJ; z#l|g$kOQ|TPQQ)BWk*pT&&;f8jDv{B2|dZ55A?#~vO6v%3EIy=C$8!k6%Q%lYXS_A zA7Ve1RDkr;tE^l-qJGrSZ9idpT^Yd^j|`zvc8^{d0Pf=;Y^ z&e6o;JC5%}<4V<{Bwg$UfjqgUyViLgwCHj2IL8pMz0~dJb`ov3;4!6WH`+|Cp(CJB zeo{FCRf}3%jj9y@{R5bi?RP;T(&UVK&HYlG_dtxa#FH~L30M<3oWcmhbT&?!r6oBW{;a6a zV7Xea!oVOT%Wb-G?7-u`$OaTbpIvEpapS8S_(ySs&1V^_5|6GR)0oWXUH}9>`I;sg zl=L#^6wsYrnI9Ru%%9Qalz3z{i_)%esG~mKSq+hxPybY+Zl7IfcA+hwMNm`nQ?ZOJ zmq_+X6u`_2=MXgSPdKZgoKnW)A_V#PDtiD#OvaOOc$W@{iAkD;APP6m0B+Cpy}a-yRB{>WhJn0DQlZ~r5meZYzWv}= zo`%zVH&mm+Ku>CFTA%z~fU^o@Vw#R0s05!@)}QQ2o-~CMl}~n4!mY&eDSebYcumAd z?43FdipR&g?764p>)Fh10iQJIKYW^^Hqw)O5b%n7>5k)v*K!KLU)}9j0=pMc8L9=B~e9mj@%=0I}_BIb>F&>A!|>{*S?NQLF$xS8$g$K#)@VL~=xD<-v?2Onn6 zZGPIjW$^L(3=;NJ#L6&Fudi^6`2%s2lYE91nc! zIm!t2=|3M{CH#B+=k5RJvH#bHz;6Su{|x1SpZ9t<$yx*_^7YfB{~WMaEz%8g!u`J^ z8T?-(`M=Kozfbr7Z_0VqIjKf>#(aDQWNSo6;7IYw}ONIjzL)mGhWN{bx$?;CQ0iz~ZP6+Z9e3 z(;9OT@}VuoBy{1T?IjApzsievkELv5$WPr+^^c>Yc3w39=W2-K#Bumbx+`kkJz{Zz zXo&L7d-w!F$U!P2>nf@8<^PQ9XT2Rl5j+IwB%%4KDD5gnC3ffL;>fWeZ@)4smN_a%9*UT3`xH`xQ$Jm6Vr9^fNE0}-gWyl>K2zfQ-T zcWD@8R;`^7sImE#F0CzBP|Z30&19KD-C|m{?e*dzb1Agz?9+oSWh*`gwWkIDwHEV~ zy`@!r%+uF3MCMl49Wt-oZtLPe-Fv#3HgS_K1oGT8EoiHdOYZesS9$NDKi78G^u6yz z-vd@M=6X+;Sez{;Fi-k71!#~l=Tr52#1Pa!V`gTitm>PB^@6;3@ukH!_HaierF4hp zJ^h0-IHCCg{7)WbGw{{f^2U+>wyK{AQn(rtotE}V40qBESxjm|Bit7S>M(QQL(YQO zlyZ!;I1b}EW^=YUiQqhm?v~D)yh^ym!mVL(wi?Kqa51BL1}Xo;$HXF^>He{@*uNUo zWAAAbhJH~=!NK|a0W89rrB8cJsQXMDoi9S3c(*+Nh^K}j@U`gJtd$Lr8dE-`_$ zNTT@(VZQle{x7V$ut_~XFN`c%Rmv`s;rRaI$jZN^IIuRp{7B9NdmK>>7q}wUzMqSq ziad+vwE2$l?}(u8^$n{qt?K&W(DxwYmUWk8#@|%{Dh_qRMjC zj&v-hX}F;55@~B);W(YPjzjBYHmeB%1g8j~&(GsNIh7D;5^jz#ip zItF=)f2m2FD05fU178r&58^hwqa zx}YtC@J4B7uK^4ubg~4N2l6cFJZIN`{3j`%$X&Nq=KB5MuHYDfSx`}5{a`(BOBR!X z&yOxslFU;GPlaG2yZgp#|BN{{et}I6;buBTKL`dLGl)WkPi;fCnPbPhKX26W{|bK> zN;U`&MyL`hh=NyV192vlrW06Qi(_Z8^d=!*5xc#%jjFTd&sGd9kX9-g$`T7Z$<~}2 z3NAKrP0h*jz|^4`b@s`cXND`Ri#r*dwyrPvzdCJdu?iX?=vjHkD^>5f9lTZqyRFJW z`7^$hzf%pXv1&CxSXb+}lWz~(*B>dc3>ST}%Nr(q%F16tD+%=E3wbXd1Z(X$CXlsy zX4cgHIQ??z;N#+!b1a7lc*nmt_%VbOD~fNAdN{jg*Aqtm2sZ!q!-Ths=-yi9i*MYJ z*mtN4DKX#Am;k+l+s(=Q9mf(qIL$8{nP{`vVlh&QVM z!m8YHN36=%;Mta@(KRTZqb4~D?)0s~e@~RX;Ye;kd;$_Xm==dPG^kHOj4B&i#rq#B z3mpl%UJ+3eymcUf8?uqP5-zyjPMBMGy!c8_1%PDmSflTiuSY`eyY6n4I(0)6h*2B_ z1C5h!OV$`L9v;y}BH|Hv7~UZK)acowO~U*=>bUZ|U8IDXGwb)7o`YxgF#0?QSzElP zByK_mQ5{BE={6e&Nekl|o;^@+IouQrIS>%S5lJGzbChfyQtBFj2MymvX>lRQtKe5% z>$?(6d|0)Y>tfe%ySKJg1K5p+`PSjv-HCyhY_Ln0eYT)!8@erFdHi+!8GZe3ei( zZ;$_>5M`H^XneJe?LAt4UP-7 zYIVifDF)R!AT>sc?Pa_d_7n}D8B4J6s}&9E^tODZm)ZgMS5v z(M9b1)U8P;Rz^A0BhG4l>Ow9(?@Bvn^gei17S!&VbNur450D6}H)7*Mpf`ma_j-5Y z!*zdaW1pfRBQnOxQT5+bW>;+WK?KTuQXlkcYH4wPT!b3q6i-CM!LxYt=g+UT??lVc zwlx6)55*AAAt)&7G6C}KZgi|M~(HUaX5uC)t9`xROneX|WuV69k+ z^VE$4yDuh9yYlyZbg1BAC*Z@5Yg=x}t2Vxcc^*z?{Jl)a7vZVBFx1OG5n+f`Rr!AcJIC`&0xko}w4x7iwV#~QqB4M0 zGLDto)VT1>_eR)2&-S$&8s_G(`Lpi6K?eq`R=|6pw>R~3R>7c7_l@#E>ajYXG+2A+ zcth8Dg%fKqv*AKWvElC{crp=$F-Qm>Ls0_ah#%a+e0>f(O#Q>kEq`@-f{)k5a-q+-2&hge)X4KLha|#vb@4W}dJ>zH5+a6epm<_;r2YchkhtPlK7j*JI z1|L8#Xoi;=dV3C@5-mFgZtC_*j3*xN8ZGpG6Sz<5%G{@ZPi)|A5;r<#6ojIi@Qfz+ z$IaAbbRL)&p8^&It#y@+o^STjk3J=Pq-Xzc!j|TJKuw^tQMLmxW2BghJANCAFH}l& zAL+L)EuxKni)hfZ@O$3gb{e!S?>}8ix+7AR(dTD2$lQ8hq3~Fv@mV9^ujE}7w#hpF806BG7s+u1 zT?`w{Q8@xbRsAJydIKpF7mQjU4wc^pddEr2-oMlba%2#01Rrs~89G+Ffh!rvsThoP zo7*r$X%Z$g_;bU)cq|={d^c)@Q93(QW)~%e#YJy=V~Qb8hrIfj17H0d7Efaof@H(% z|Fp7J$s&PhSJ=a?KN0^|E@(XV(Zpid**E8&Q_@M(Q4%JdXQ^We)V+--%2sDf3BDJ`OU zJkbKa@b^>6(EChZjyN;h@L7u`{81z(u;WtAqCgnU0WsKel~a z4y$pU&*ulfv_4?)^c_&Elo_;6e1=8Y38d`&lCj#A#FY$Mt(Te!HsVL5y#FaI=692R z6}kTP7aOwK*?c2+L)d&vEl4ks3%jQiQMG?3;lINnR&T+y=Vk8>hof)R5%rghy0N4y z-R%n9N`W!#@8_O>upfXc1JF9~3oh{UV%Y4+egC0|<_+ouu%d9Lg?OWY_*IBwahYqa zRKz0L_ZqIRqFfuPo%^@{tUed#zEEBC;C+TzyA)ad)V!9m_wz=ydpxl~D|QBNZfPmm zemY)5cYO;W%22EU`MqfZi-7u_o8GJ=NArSt#$R1fUCxc%vbgRU_sW5G9`5l{Sk3J= zoKA4iCqm;Y`NbF43Eb$o>yztCFI+;>vx+7syB-TicnJ$xySCC?A$WzY`Gic`e15UI z1d=j>gfEhp^ymI6>Llm63E{#C^Y%~rg*Ez2D{J}3?lDyZouDN0{=Q7veh^g24l%bV z&^6&RL^@i{LsX<>{*rq5maz9fL$R`&M1bPk&a?mbMPDvZE;M~`F!4=7yX zUzDm~W!k*mPt2NokD}>OTp%ErCP@vWiF?V>^3r-hKav=S{K&;u0;1HPOoSkN7*uSZ^JviL>9U?xuC#^!`zzwp zg~F%-H9g- zWt)e^YV)Uc3vi0?6)h^|8#sDa!R?tI&$DlIi(~>T$YW>% zD@)k&E$U2*!v>uGG!%kHA07ujL9uel-#1t4uo9SMa`8N>TfO!D=}v=f6c|s8lK%SC zJH__#+Jqv45JE3r`DDV~A$Lb?Yb^Y`KUo}{ z0CJyud#r&uHBlVSmy)df84Unar3z^EY`ryu?S_nVgAHw!nv`W?x%atCj)ZQuRX9hd9l!{`cNfyM3w z_@egj)cdvMmv4g}GVTt3LR}GxT6Ma)pb`8uIZm(qlD0#`;-7%puOyhU_wxNRt_CS1 zm5qxJP$C{d=sx(B&q$Izr|$SE*~93$I8M`ZvHfey!+Oh|+RMjYIk5|QQ-KbLjuCqu@{Ph(_VJ+KXS*;@C=_fL(=0k(?*#fz}j6Hc23jAa7&%U7&B zxdX5ns<`fmSb@rptZ+AOC)Gn<#hw*&0escOvW&&VYwwi6{rap3D&?jxogGn`fk935 z0>Ps*M>{I1*|zJK2=jn+$CmYZn_!Z3Ef_a{h`hVM(cp`X1r^>yevA5Hm>)O7I~zpbidU|+YO1y`XD|D6nNf+;tB2V2Br z$@}u!4{bU%f?hpL3o1eoPwf&Ew4IBHq24FVBZl!1(VfZFQhPQ1tMA1$0vJw}V?`69 zXZNLILzK6xb{hG_eG-U+9(8B+C>P}ZX}`Xi{>e?8W-QC$o^HZ6_u0~Jt-qEYh zXD{;T1&dwj#H{Bm_YP<$YunXYAvdlo~y?Pk3(LF@E zzD98YCU{@@#ZP&=J*M4LP4r>ku$B&uyl(7=qr=cHgQ0xv&vQm7aBGiQ%OZ%h!v8=$ zXXfOh7V-*q`7klOCB=X1=^r90@)fcps>$_9uOz9YtRFkNSN?F2$U@`LZL6AQVTnJ9 z7fjco-A4!6I4gv5px88T$b+(4Mb7<$iXZc;sHwm76MfyxY&NEA;06DOwD$mN^4s2p zK@>!K5l{$K1nG$M4kAcLdT&ys_ZF)3E+QR*f`ZaJp@a0^2_=Ap-V%D~+}Gc^=Y0Qj zXYM!O%r|71$>hz>+R3}uUi*30dY1KJ*5wf5XrAKnDLFd#o%2QaJ1zO|M$SnU2-4)P z)kH}rJhzf+HATgD_wF)mAS6t0;)oaO9LY?t=3z95+qS!_Ho1U+7AD7cnwp^96T@0R z)regG-U+$#50Sc;YVND|NaE2{JU(Hhx_|Ncihxbp1buJkuGS;Y8zX1LZStRiT52sL zozl5>BAS0Je0K4Rx%_`oVv+pncAl>29!UJZNsPbbhZ?ha0^ayJ zFx7xap1Y&8HV)NX3C^9Johf{AF$6dU9Dp3k;InIK^}Ussyi9tOwyXcIi2(oqp+GQ_ zH7C2_7kE#F2Co3AAy(SJb8`|}+On=zUqaPmE+gpIkyVjVFeRsckyual$NwU1mN9=< zlF#(0$U&Ki~lnJ|1$3XaqY+dvgrTUhXO@%%hD*(>(2^JJW}L8oXDns;38&9vxZpzV>U30 zt0rkUY`KKo*OmQy)SbC{9ASXL7wcT&`W^cW^Z$I$e@TMeFVImXJ$6R#yXUs%&hA%< za#O95uRY(s;*0-}O~6cVRb#+IGb|A;zm$<#9D5+fI~GQE3r4<#|Gp^dD)ZVH^<@QS{gFH$C{y{lYc+~ZGHttCO|+-yECXH#SECexiJ5yuV zJ8$U`T>EAg|GI@-gJ99%7f?&0dO{!0n_7@$%5}!tsBuvJGFiowpvxaCK4!`JPrW~+ zrBB|75P-ime!QRU(X8{P}_s@9KJ%kowuj-l~o^tq=9qL$b>F|ID5h zi4t(lC0$~sH;0gkn@;I`k8Px0ulv)a9V9z7O%b~@A(Z4-rY5!WWu3;}%_x7w$-`qr zT)6%!D0=qT5Sh@-HbSa|bN8kMboKpb8SAB1G#LLg$JTKGZyOBVHNC2oN&aRp9JF&Q zcN6F#zjSvT7BfMUQfKDsMA{vIp^zwQ6-nJ#RNSZ1GW2okei$l;al_-P4(jE`PZs*m zPYB#HZ{e1vm%wed5>$7Cpm)s|;r@ES7RxAiokV#PL0OARL|Cg#c0nl6)s6ltH@Q@< zQeCD?Oe1vZPTp_^MdvA<0OY`%*ckAOo}`|KyA$7pRUR>2?pb@@WjigCYp;iwG;_`o zetAFdYn%>JbEU&Ta5+?Vmj0E$lcBvO;Jt5cm*guv4Wse;#2!#j zK}ETvjD)}kfhO*%XF%=Ury%!Ld%wTrMEt{hM{pmnP{VHum}Z+76HA3 zhv@H|&xvbJq4KhQPN_NA2h@AHXd&f+x%0d_J%?Z81|u!jqj2O(nJpCYCcC$DEV~*H z)ncq<1DWbZ{N-AYBd`k&AEMUk%q0*(hPfrEqUeCTf-Fw^_ z$ReP2Q~Yp2WGKOM;8fP4w^^`jXvDN~$eB*ZHKD0yfsl!LCrWv;%wl-9ckM!c`tB`E zX8*Xi9zV$y4Cg1FyeMW93)3+9%=xI=V$b6+dwjX+gvpZzX1n&?DD}gVnnU_|jUGP& zv(j`!1Cb(5u*A;CU=&ui_pIDky@ci#$JZE~L=x24;i<>yYGx&0Y0*Wel`b!MqCI*L zxym4`)m*Ve#h1FU+01pkkLmh8!1?`Oz^%HDg%)W=_ z&vjRN^u2S}uj#jV>l86^t_nYn!qB?;=Ri9$92HaCoBHzC^M&x~G_B`s02h!+p^wpuw_EgDRk z-GJY9VWyyp#bF(u!RN6r)r27iI_U-zBNSX_)e zNvM3fI4LP13nDeIGV*P;30PDiap!tHt)KQ|X!T_qb}^VAxIeSa85(7EQgw8XUnU;JY3I|D=q7M_)q(}><<|PO zt43N&5S4+yHD4mhs6n$6`)|9V9}kSSb7d?KM!*Z_^FCjbYiOr(uL`^?d2;iUt=yLG zPg?spt&gMNjOaW;7s04-O-F*v{V*ay4%OPTh(CU5@?@+3NJl^%VV{Ic0~ zfyMW}Ded{-Iu2X*y?i9uKRWZjgpZ&SZmKK_V8rRfSmqmCb~N7+&fLJ0abzE5xxYV z4^r3Rbt&InK|-W*fb`8sl%!>3a;~c}XrcCx@hNouAohvX-+QZmQqq>GkJF~McuuK9 z*+l}~!TyFryBDCVrR0S-^XP69xKr15am=Oni7=X8c{X)r#5?U`r|SMiBe@`n#NgtN z22s(jPP~5?NgX?P5EBL3Ii0RoHp1XS`_Ea6i)TFpa(BI@>~s)Ew<&BRK2x!>0!6fU zZ8~-pv zoOx2Qj`dc)YBx^3lkGD05H=_-W2HC-2aT3VZZz$goTvf>;p&>CU=*r~0X>feYEL>1 z$oA}EON>e@t3C$bs)Zg2m2aX;d?=zH1l+>(3rg=`alWtDaX-=c&PouO7nKXw285Be zBK_9wa!>Bu8-sKSX3u|5grJLd1(f|}4jo{}cdT`zfu+(<9dfT41KO6oEJq~cJa#^C z8egUk5uy3@Bs4X$OLx*X-Rqu=w)%Ej5!AXK@$H~zGPw1y0($q3NMGJ`M>uY6$#<3d z!RTc*yt13i%tf30w@~|j;R0Fz+G&9Bgg)spZ-3!=g5=qoY8CFvQ{%O=D}RanSM2At z=-aLvWH{Xu3lYWW*oMWn51u@9IypW=KAhB-)JiV?O2d$k>=Da0%V0m)eGQW@%-vI> zNJ2lnSg?ym8@TI~kNQh`$DU>1$>#ou_uIhFnYd!DzCStN(8q;z?lvx%1Dil2>wt>Z z%sp$HxiqMt4Vp=3$0z&tdwi)6$->MuLZ4s- zIW5;$pzhqGzl{_95{n?7;~8hRb5*qrF%h zx7tN58erd!Va5uyGbF``oH?soT3=vmaWPgtr?@g!#M7jHj4rwcWwR*aO>}R(2;#S1 zTGoU;Hx_*#d)A^fADvaJ&E{zB?MX1tv30|AYQkEmVKXB#bmWTvL7*IVM};Mwm6A@h zEIKR^@x)3KzH22-wKtIbA#qbKvMI*~LX`9C_lT;9GhJx7tR;e0tg0+g`Pia~b37FH zEeVeHRjvP4c?lZGFAwTFY4fR}=12JS@rdS}DnlvINVjIAweKbr+Ex!K91ax=kxq`bO5CxtCf`wJ8s%JZwQ!-^DnBl;TBZ( zR|Rz*-MfzH6A&La6|Sn#a3!jCssEH~jVJTaqYDR%F}RH%&0`+X_sT}?RGBO66*e1& zsXY>l5`Frv{jQ5P`&XrxOfXc=XfWm_LCEH#a<~X~dfrpt6~)y%ujo!+)a>&?;^K!y zSj4SnqwvJ@mK~)kh zz!0<}&xidLVsWc?duz$qjpHlhxR2`U8sV*F1w~yDg2?pnKfp!L*ZPPsHegYfa?$o< zoE}z!p2N+w%Sr2!^P5fQWM~^N6&`Fn=O`7;TZfctR551!Vyw~Whwg(bP-qhIHd4%` zHf;m>xRIm7WBI1UHNnRrb7J7>$%QtSYogVoght6h{>~PUgL07PQ4#rABjMD=EWb=F zm?Na!>=QfZ;C_Zj`hfj2lR4*J%t7&?m!MYXBKfA3n7hm9QW^y9db`oQ86gt1IM$n# zfTQb)rwC`EYWn!yNYajo=L@AxkxLR`QGE8h@(#MCc96`quq$%PCc2AOl3anb3o@st}2-r{DRo$g+;O52xDr^$?W zg^$hE%fZX3&cMAb#BVO=!vli0qKavKf)6}BH`;7`uaQV{xosH0JrfhKN8HS~NStF; zI-V83n~l>Yyx2Qhk%!9$zlIobEV!t6=N*^xxRq0;pp9PD3H01elj%AYpt8}NyJmFk z0$~i+%KSr577*~YuU!EeP9I544aiGr4sj}jd<{uFtwSwyJT<#+ju_h9Xykoo3dUBz zEOV|gEfvNzi?i~3*>^-45<#_`)KWv2mM)gCkM#uA$9JSzg%T_Y&a|vmpSfmN@`pw% zQ^o%n1G}YEtCFZbm%y)#KvSOX00?h8X7=pME`GDI5)&q#&0x5;_S0{uKD_X-x+thmTcRPpg_msT+i~31^ZW}Y4tS=VtxZbp?5`0M%964Jm0D~Mq3-4R+p(bjtljIeCHxz*YcShNb@4U^(_l#a>6pC zHD1*F{Lnxz6uB&1a_>)(2GP$pmij~u)x8tXx&Abo(ayL6HCJxAAJLqACU|=Aa=N=3 zKFOGuas1tFM^9n3mUJ2jrP08gCEgB_h`B@braBSdw9Dr@|GskSlEZEXC&2R&uAV$y z=*B`O-8=EFBgQp=57v0cT$KxViDR&Y@l-}q39dFe`+_|K?~X=VkM(2NuUmX@!-H>gma``ZNQE2-E z_)W_TMBq)BP0sq)sxA{hOq{?dqM_bl>E}aHmcK$@Ao+jGM8r%VWm6<&QW7-|;-!+C z1!LS24B7Kgsqe0kk7Pm7G}ppS;Ez@W2ab>LPRSq@oS-3p`Q}eH=cX`mXM}|4#m4~r zTadD?{TJY@woQy?6@;WOtTv^7x{avDPw?t~aF=D(l?5f@S4QU`0_&QF)}IS?wNx)c zVa`q8x^F&*pl3a&n34JTrp&4=-)7^V9q^+^JYMj6p@O01MXVlIqQWaR{;Yj*RXB(L z^XDWl+&_4MWPij}W1Fq{TNI4$X**6+p+IkBf~|hrm6ql%+%y$gmV|Y8gS>1=tKSgn z+3#Zxz1~e&|IvvDN(&Fix1&d<5w$E^&A0pskoP(Gw5a7;9#+a9`_$RzNBzBe#7+zf zf$0ajtp07p1fdAv*eX4+vmcnohzt~Hb^t<~*ho0yp2^;+l;ZD{fU`sQtAZ;MG?Krb z%^0By4ga81BFYsZ`&tv;lzg75kbG|_J4J5ERIH|*LI(m_9`<*lGHHSOdsL<`@3xhC z4&7O%<)l7FhezawYM*)X*qDm_VIk;hv21@6(-2Q)IJbUmHyeYEXyrvA4B(@vQ&42T z&^6Xjm9-K#9b}h^rqO@On5byrcz-hsVS;rLaC3sakc)}^pc%8eniVa=vF9|N4(FL0C%RAL z<&|Q<)r(Q~>YF+H5!|jscTdlP=O*eBL~1NYmJOBRSo1r!-DAu1u2SOo3oqlWFaG0e zwaA~BAHP64YuVJ>W>0dTq7O^xYNMdKG80=sx1YL#j~NY+4EzNI#H!a|@o^_ocjMRi zN|yGfo9i8&p(--)Jsy3U{-NO0s4I~Ba>eRbn|FK&xJ>IWz`DL=ee0G)(S%jssNEU; zp!(lFgQV4Wx{sPz!NHc_R-~8HpovXT<5EkU%9}5oCh|=*2=mxiX;AJun6@QYn82qK zCSy=u8xd?Gimb#&(27!|6B0TeT655i`G%j?@AlmEGa#o)KdzvEK}~p+lg%&pDMoSa z_S+!gl8vpo0U&ITRQ&5-icQMCYC1=9yNf|=kE#|!AFAZ~Y2@pzFCj(@nR2E-Eb5EDzhBG1)a zw^4&$$S14wFE`W+GDW-ZTOA;mpDj09g#_Q?zV70?n3uj1wm~b`%F!YX?OFy`JjHWR z6P>lIAxkeOa-pV}ERm@^s_`ODX>WzP!)(Qy?DLE%JwRBbTqunTLOb(q6*%AnB!HX_ z@hZokwF$cO_Dh0l;4%%@Ag@uMLCQW|xe$#R0H3N_HGi~|N{+6O(b(^S_KMBN2MNs+ z0Myww^uy-`;k8R#wODrfv?u~Hi02;uI4R=xppo{hveuGTlY*aN(qQr%?O()49VliH zRD(MMPS~D(!axUZy0?3yzYsKGfuOZlv+=xbL7{%?MjVsuS#%oh+YIyGC48oV7d0fFG*wrIaoQB`YU_ zj&H5Ae9CEV4GmdQ=~o4uM*#k$Zd`1$R#~>lA8P76dTBX)R;SOcv~rwhz=wSKIH;qN z+b1>}9F4`ksDuODK^c`4SL_KH;3yD!e!myMMS~~@BX4@n#t0+5pE_wCl>d6wC145U zQ4b9o+n1qS)B7!9SZf&>+(JYoIMx1qru0Y#G0(Z++D?iWM|H!2{YxKJoF~1I?aHz| z5-Wab-`eU{jdm)Zb!I{38>E+*miIU>*IFKAaNz{-?DrZ32JBx(tFi5H-l=n)DAx$O zmSZ=+Hy*#JkV;*ywY>YelgyPn_m&bkAMhl?44XUjHzVGv^;hklX}h>xvF17&xOcap zy;jrSG$qYOLA^Prr5g@T%q_SkZE;-_1*oy2Aft1_cOa*5`M-$mUnE*Z&b7xR7tt!j zS0lHY?cZ1m+ce8+HVet{;%pbM|IH`54Fm`-pf7pI*#gY7p+fN8W}C2eGB4Ou?0rT0 z!oFe8(@mSMU;CESQDBc|l}L*}x9fCDmFM1rWGAtyP{{=;ILhR_mDvk&co_&&Eh8Sp zUfzYX7(7xM`Y1ZFviGL)=bc(yKwi+g3q4iPT)n=8$S8Z{ohpG(`fhP2TE#ux(dId% zI&4Lk(;1OGeaPNRDLNC{*}s@{db1z$SX1aPs=Df%SSbN#mRecBFq~@uT?LqS4|@Hi zbf2KDnQLoqv83~KaIcenq%gTESi+l7g0dfdv;giL+>LQ3+uyCQzgJhm2V3Y|5E@Xx zN)FV78}5#*U@kd9k2ITOuigWS^!-Y8OZi6oeqVEAk779q(g-hqG3UW&ND95~s%5kPRftj63=;iSPM&84nK+z@P znKCkkt54gd(`P<)p)wg~#G%A7WktH>XTiD74*Z3Kv32+d*pnTG*FSOwaKgc6YlT$_ zB_4HF4R4DivPRoWt}0b-;Iwnh7NgDrVXo0kaY~V!!b=O0~WQqQSEs4iB4 zKCcCUMbVtvsiK{uD>!9AqDrrb(V@mzv^X%2V>Tpr*a$E7m(OsNnO+9H%FsF+(#tY7 zV0fIMEQcz!?`2`jQI^ybIT4!0F~hKMe60(ojcyft@6dS7Y=i{=^CA1juW`@-d+6>C z0mlzvA>D4A(dcB~Jp;xgZE)egL3n^{l9Idi%|%EsH`~Pa2tPl0Qa&0jaj*tb5_D(^ zuk9yhX|4P2W~|G8#FxLvxnl8K_GuJ2{_@iAu?cX0#`ZkU`}v(-4%bYL1ksF4B^9`> zb2-L&7zMA1inx6!hQaVhCEILHHoO-jcGTwW;r=kklY3w3*=IK68V;)zr8eJIuAmH3 zf}Us`wUjla5%}P##$QSdh4gNerOWju;};V*hbL@%>)19p2a?o@7m8hpV~LpX=LgWDe(=`)~Bf zr_qaci8{Bg(4l{Ro_|i_wDqs|Rw(@+p+2sua2~~-=L78s-MHOec8dc$1z9eS*>H`G zYZkWsim{<;po1u(BbOOxSSf3ZxXs`YY>yfAPlWMzPr-@){bg7p+yi3g3Vh8Z%mHw3BhJtt`ts=+|Cs-8 zhsYUfh`5B{Tt7Ml?0!CQH1dGlz-x-ecQo;7M(y3FCvX47bpikXRz!VfRbE=tjkE6w zlVE zX`KI98t*EnjX1oYVMy$M41@5B1uFqrqJhJs6uuq9v&-y7G5P7P|21cCRd|!SCd6(S zA*eDXkGxFji_YNQar&}YCuGt@%LyowG1}SNQ)g!hc_!#Jy0u(NvIv@5`T&hEa$mq3 zJ(Ws~s^6xf#w`w_a4{E?KWCQh$d+o;$<(1Jl5K|Wh6=UYI`X?WN}B>8e_M=hyNR=< zJ{ZIUBx@M_PU#pF6$d4zQAx>JEFx$s))7csmooETN*fEy8YrxN6O$eqM5r*uLK7sr z*3C&FSmfqh{j-SD*pGn1IbiH9jihTq#|14=d58P%57zb*{hh|JuC=D(KWSfLk}M0O zu_6;{eP#jO^~XThTBnJY{<+$`{d6r2^>>t00sB1#F`T_h61t~{8^a>nbu&)z`86Jw zyE%7CXG5CA@Ei&{e|TtoA!!e;#n#Wad3rPA@!yzOit4&3UshLjx0|oNws<$dLgDPO z1{52X-L{ds8mDAD9Y2q@mRT?#I9C+lBm6V$FYvAnnkK*odj7d=e z35`WfW6k_PZv9rBlcc=5U+HZ=KhjTLP|=KSui@FQx)5M{OTI8OGd~I2&TDMkNWM{p zP5%;!3o(fQkLv+V1hX>O{a9#q#8?XE^K3dFa`n zPLD~Ujp&^nJAh?g{vApQr23QEz2E#XGwJ{;Yja(-R!6iJZKNK=U7mioJKU1zW#nsH zsdjp+qXQfC_&`O0%y|5Hxu(i61a9SO=a4ed?ia%oxB+cjulw=< zDAmuAL8VMYYgLhAim<6`QBl#E?~=9-HN-gqD(`DIfX}-VTP~81&?ob;A=-{3Om7qM zDo(1Il#-|1&Pg-RMf?J&{4o;B@sIksoEbemc4!nrVOGD{sdZPtB zU-VUJvK4IEn_zpZJnq4lUWtK>+cG~!w&$wN#~PIKH_ej>TF+ABO$mv%N`C1YW1rDC z3tYvjmjg=QtLss%FOW&P5XU5LS2~64=2}CQ7xw360jzD}k5f`4+HB%~#BX|2UF_}B z(x7$9)G3lEU}b__!H2`e1a5z(`0lO)ilJ9@z2qK8ox^gz2o{9k0}rCrJyF^MXu552`#EK&@v*(YuT?6NeQ~qzA_b6I z%fz38PhDP(<$wvbHWxg$m>J9DqKOvJ`c^Hrq5{*c&Qnzm8un4=F*|;TGsL=LbdF?91to)?_;1WG z5aA}cWoTPUCJH1gaqA_$LSd=s*}&0+{tq${7u+6)y^@Q;DYJ13-{B_5#v=P3)y!>T zJS(g9y6!%(V^d7B&4?fyGBze=y0390w*fD8A(W>vxy~LXJ>D{^ej0Seb@STD|1(n@ z;6;kv5{{#oQZv*0M*1HE35UfaZOdg%v&2=Cx3<8Ndv`$yrO4591_?amNbdp~E6-^! zz4zCgoS44bn4n1SMCcWXMc8=m&6s)#=teWM&&;77k?Dho#CGA~>}-K-H=?IH=I5Q! znk!y;WI2A&ofRB9?=;upgQqh<8Qoq*JCIQ;($!MTxm~hzc`_Hf zFH*2T#3@9tIPCq}ASF%roZO7AUjSo9j^_r3rupJ&QYbFcE~I0yAwbmPagixfz=;nK zDEU1qWLOai+WQz~lcBl#`odmMuz+3#dwoG3v{yt=R@r17o1%-4go)p>!<^jk6Ylib}TP0!t?A=3}@9aM|c5pw7=iI z>z8Bil8NXbC71lqgS2#@y=+iYuYgU0e0vg49 z$$;Qg6GtCr#bduj%CBj6@19GPIU?aak?+XtJpDz&Q7k&*LAXSs#~W&E zh-ocX*U0LU$+1sCz#Z^S(tPk*n|(1&3s9(2@-y7JSszhl88ZP^893MkbmfRYw)qhW znx1*QuFI8I7^m?9$Fz>jWo@j-LuBWHS*~NtZn~Kb%ebRX4rWBl6gh>gL@cA(?yxL- z4V@=#jPrdj!|zC7+0Fj)0W^|Ub=n2S7r}lOfr9EIX=NVua<;{uP3tOf`Ceur#8mnV zLF>jtaW~^-xxLwzP zQV@;fs}k?3p5UvVs#gu*v&zN6B4z4PsT~ZM?XOPoGOy)GzSRHe{iJG9XC*dYAy~STI6D})!2{KBotCc!?f(8j$M26J$l8+Xt36E`QI(egC z9IC+9NtfS!FQq+^ZJ9AgWZ15b>lD`&e;pfdGj8?EH+U1lOf3@6GMc^_B_GmUn05_; zF3htRsYti5{Ifx+-6tNjtr_chgF{L85zr#!*N5k8$od3eCw!K@-;)TX0<^+|j! zl74SW|8zylvKhS0VCYhx3?hTq-;HTpjEmAQU5qi~pBe0y0~IMhMa~MKl0N59W@Pc+ z_}X8+P{V$W7JQ^w@=1b3W%?Ygwy!Ie*gJoh;(4_zu{`>>i+Q=%3(wz4!D5kmoDWw&? zq#&{n^T0@LcvEofexXWDl4 z-5(MX>NH#LdF7Ro#2??SXA!h0fp=c*WBOT5F5x0{&mT1IuoiqTT2|0ahvrWbnPVjZ zorEcUoJ;s4$7uLmBVu4AFTPIE%YDe;PajvAPWxLoD2+Fz7=E#RTqQFtL-s@K$`}}&i=Rirm2J=D|VU@9ThP;jUg&j<)w@mz- zPH)}P2pR+??5mM17$Bao>duVc$#j4BFdd7qeVsjNNADZ+t$OPrc)D@82=2KjAVrY9 zCEzkq<69IEqonZ8>WRgZbqvt1eG)HQAW+@>m;{#Bl8VQSw7QikkqzE$3=ycdxg%k` zhBHq$@Z;dn2a9!!i!2(znUrhFi5ICH=IQ*V?9>E{q=mX3w5658zYfK<5Jau$mxa_r zEJ8UXS&yNFp1-RdrEW~>2G)tNu^1GoPC#tCPEd{o7Nh+phshSqKm#LB3y4Chs~k;| z+IZ#Rj#vrpP@P;`TSFjdJNBqabAxXH=jf|Fs-w<@PQtoMT)}_s{4H~sDSg=+)krp+crJ zso0A}DY3&ivZ_5Zv+3;Y19G%&ujHqFVr*w#AE7rfj{e@w1a7vmnAvoEt_6>XGa7>yK=SKXWe^+~!GFscJg^ zl$DJtIIn>woZ81+*^D^j4jr{Fm=>xvtHd2y+OWKV zLdvO*$xcn5HdrV7I%O=)28D^IWY@QQKII^$GTe83St+T$OK0wcd^85j?%Q~53+ts= z`3IfQvko*X!8hlUv9~63Qa^-(dGrd8v=_N)L1hJ^jokV#)@{K0%PGnHNN%kM`upV@dksq2bH#g*~^aTsD5e0tbu<=vq zb&arLA3r+?gR0du&SSFitc z_G*ymHGK8DOI!F1)z@X`$~kT|QG`QI%4c6HMr?6roz~v_^>@lS+v#1mo;S{}jPegC zWN&eemd>-J!3)L=b6^npTmXfwKLV9-wP4RZUpQCKgLkt$6Fq|GLVM%H!ayP-Pq$cA z_)vhX#Qh7mh`%CG7B2%GgJNCujc{CI0*2& zuO=IR<~GxX;?^s{neI+n6c0-D3PoHtI2NWd@TP_u>$rGDk&TP5Mah0bVHWphcpFRX zb`z+S{PQ{!ItZGKlh*r7lH)Vh?OofnS`)E3@U%8(?3TyB^)|^!VKXB6URLj6iV}ob z8H~QNPAy;ffPX*hp%z^BtDW*^1l9T|bza`8*3xrB8C`i$+lK*z|cqv)b<$wG)8J6%#Qpuv2a*=z9gv7r^&J{fkO z$3i$-mfBEni$ZId1bumx@bW_{!Dv6m=-KG2!QOV<3HYn+nf1$~X@zog`r#{lnh!)k z?HLZv0S3^)392AH9 zJl*2+6!GTy&xHqqN8CA9G1Oa!Bt9qfo^A<=A|cin1<**-$5tAiT{(2;v}Qanm*m?> z5P`qH%$+$q3V+JkKNAc`%e0N?=8|rD__Raze3kR6y1QfMwmVU`IW9WkM{u6LQXl5~=w0I58m5|y|uQFd7e5iO3-Rd(UXOFuF+6^4*+tqjMqHhn=!KS?L0^)LGk zDvQ<^h}Pvjd@HBr4;Gnv)%EJ)O-nI-?YW&LG)qz#Icn1(1c9PDtd6jR7OH&O;~FW@TY8y{W&?2#&PoKawa0j04WA@!0u0OR z1_8R$2ku^mK_|eHBfMNC)F?g<>W`@{x@L01kT_|a+#(=G`;;f7zHoM}3@VI_Dt}=T zN`kJA13f*UB~Ijd{D7xDMEccthOXyfpW1-+1@S0^FLo^EBL%x#w!3LTFJbKp$^g93 z^0>f|UX5b$69145sR1;p=lOgR%kp@Ots>e3hQC|N|zud<9)~A z?Xf*Tj-Y>XGZs_l>S3~fjr8p`$|nX~llxP2gF}2LZZOlb1;zuYtmI?A8@?1Uo7Ec! zv{oXaqa&`Hi$B;&2-&F~T6}TW`}wu`w=$fDru)u?&@Qk2<@lRSV3_Z?mvYwG2W1sw zM-TAdTLwSHvQ2N0Z^#yLH&5;kXk6#v73rDd9-E;jz64SbmY?$we>k&w6l)xsM9JMy zLZ}{D`5tfOPs@pNYn`GkfCUA=ZBcUlLl~m*eC&21AWIxaJIm=_o?n4g?ZoJSq;r7c z7bQ-l3Om^sqVM6G7_va~>6;kv7rx1t4;+P3N$7JZ1~13wo+|LRP3y(TxvKrep@SHu zAfN@c?8&*l>pNrJX1%ENA> z*&j=E-zdIl=3Tg3i6S4jf73|Sz|r&;sAL*7- z=xoyQ?OhZ3TekGF_$sL2hb+iVh00wupIz0=!g_yB09`QR`;czTJJ_x;_hHsyST8>r zGub%^u~e(-5rtfEm9kM-!keFw^A}&-RK|_{~Dr?%)pg3cxW&~WR`(Hu9+eMPD ziDEn<%v1(?U^27;hk!O5eN2_z5ts8aQDA_$1lMd4Gx^3*6fIgJx#y)-Cr{Ab(u5T^ zQcLkHjiciu|Lummx>qIPbik-KuS}1|RheG1gUSJ7NkNShS$rK0)=%Bpb$;^EyVi0T z2va(kShTW!!Kik<7^qxP!a{jnHxZ=-2^ol6V|&Nao=cU5fEe&iAgg4ke4K6p+_u`I zMGFxKuffKOGl1tKrNyq?@_uk8DUW|ZWLF~%aV4<4Uw6ZP>zm-!{32DWhzkG5eIyD*#rE?yl$#P`Go(Dp5 zZ0b*R*4clBM<4a@j*+GPJi51yPxnXvdyoCq^lhIrCg2OG zC z;;rbS7(RN~92`yC4}@_o^L&dmYnOi;3l_S(RL_uY5`A!)|2MRFuH{LaL!z1ejmg%l zBzUQ6#aS6{4=-u@@!Df|3760{k@N5s1VzieM71UW3TF~^Mg(4Bdl$Myk{?kKyA0_e zIXz;)MDcU3Mn$&M)29pzenac<^6$+fHgNGf=S5MC=2<4`DR5Y^a%t0v_U`H{^$0N= zM-Snlb z{}2O5t=?F*gWsaxSA>bT*wDy$Wd)yfESPU;zUJ|17xkELheOh)8D%z^fG#|%ItOqc zqc3B{1Z)xjR&bQFnBKoesKKHXPXLF8{=ncJJfFsrVrhXsCZlcRB@>2~ZY_kCeEtJncPj_F(y?9_=4$ z?9B?V%t0X(o_G<5vxjhWOag&WqROP@D1%%rzLbO-x6Q$GWD=#`{2I;qE@=f6=g(_` zP?~~ryr6x$uuna;eYU#UakVfi4>>&>e+P3B%MnKHUh1`+(|TT4RB6k!gr%}8(ae*D zuB{OG$B%hHehwok*5?qJtMB8CBvu5TYO!EFRYqeEe+(f)pb*wpwq`n%BFSFB;n24F z`GPN;9MDknep;|w@$l$5vi#}#JURN;_7ei@;gvC$Lh?QRxdu)~Brn5Sxf+lN(^*A; z#kN78U?MW9uS^b>z6LZ-x-3Lql^#_cW|BR;!6L%jse2P+WNg|Bu#G?(x~C{O=c zH7Uvcm`wUAGkoT$Hce+ESKRgQ%1=i!j?rMpf|%2T?(QEu&@&#IpU_^BZ9?O#CJ2*c zfgW9qzRVDZZFMopQRhQEOb?&KGN3J4{V-z-=I-VSlyDceQhIAAlX8?U>GZ>X@wxH> zL(zibH&EKfOBjlWLFKx^JsV1+%WN@e_d09*1wog%^|tALGONWq`>9}QBft2@g5573 z8tMitgkfpXI>rbG*Tj9)9~HWSi;HeSxw5t505ZAFw`DzF)t8PvB8ApfBpE9W2t=BB z>EDXYN$5BRc%S+G@JrmLcAq};PqQfQ;(NJA%lEQ5hRP$jl904|j0zWJ?Mq0c1@C-M zL}yb%5H=Rl$-Ex`PlL+$;(&;J`s7&1?O(Yj7Fs?7j#$e9LuY?16V~rPbRG?1+6fJ6 zXA|Vrnd@!T^QrA^lr|#j)$wr#vV;QjLvf^2Ryt2+vYES-o`ufhoH&ac$W)+n7)hnobR!Xtpho1gQpX$%8ztP(B;_-%xeVpX}&MS7_xxLos zI$7eE`Qu1WIP&;&?@vQ7+Ci`fttF3YP<3Jd89Bu>Tdaed&`^;sBAM|tC~VMdEP+9} zWmgX1t{jOFaaQhnN=TwDLEDuCW5=3ynGBh$_*b$G+JT(@LWZH5g4w;PHGSSf6S7xA z@XO~wI{u0>DHfG28PAp*(Cq+RPp;-F833&8!lX@Bygs@w8fvaYo5@jR*ui5PteZ_$ z*;l03#}wsNIf)zVo5juyNFeQeUtpy35#csQwa@;dNi4Xf*%lDSt5YM}zfWpKl^Us( zT3+26k_M#ij-zFoB40it1Gi*_QJ`7VP{2np58PkUgs+N~^s7t!Q6_T4z?LOe3kY!U z4v3yEq*=}XyV~=A30qzyg-j}O$ai={TlUC+;9*tBE5eQ7Q@oba=Gf9VqF>$O1B9)D z(8Pagft^uJX-za=OHZjzJ){4yO}BS6KxlvE3OOdMGTm2eS;8Q@UNLzycUU=2huhLR z{7NYzALQ}gg|M0^Jw*@(&p*CrULZL@<)Y{0sZ5V_HbBtQDy2XHy|AT%?)wt=g`Aw% z8L5r^U+q77CO0ysK?XAP?}!^ogGL^h)KyFQW_mk@Q!@D}NgEmI*mz=Cu^2zP={?c$ zd8Z)HtQ$L%IwvLsP9CgWgmXqbx&6k-44*D(t33j92zf(pCDPbB%Grfu^Wb|D_Z8Wivy2#r$1=v3 zwpadOFO?D*R?nUvfCIA`&JRiIk7WXVJRz%{Z9Q&LKg4&ySk@#5n1c1HlZ2HHuBb}p zBvN$G%v&C&87x^=wOK`_D>o^5!jC4-t6|43w%Q*uWb!o8-x?l6IJl|S+8f23Wq!1| zoz0A0iDFCFsE7YtF!N1`jQ#;6d#C!wTqW6gQAia&J)A&=cywnPnS#rhl=p)NbCwvq zvQKq<3S{d@i)F!!me%9h@gbv+95{dA+^MV8)VmPifBJAo39Kh2Gry+`56$uTt0n%P zFt5i0#iTqcYEjtDEK7Jg41P)+91T3(jQ8JhE5UaiYy9`S;|Q6t>6>v0#p$sSB9mei zSoy{!rQ%65#D_qJahH3JKT%5x#e5HEYI1p=MOvS9Q$(HoCa*}`f_Fpx=*Lb8$1_5i zXBjj1wn}!TA2?U%`LT;>!aEtcIJwFFTti~9k|vcW_0 zoL+@w&>Py-rtP6s*Sdq?xlq1n-`2~AEMNUT&6Kp|G!mU`+p1t$EWnpYF7k$3Ybk?{#ZNy! z#NT4ztb`aYCmI`wfj%RG@D;W@{KdbPb3X7iw5?Mio@$iL!wFN0Uzd8$vmo*Qdy{F1 zNT_q}k^$K^)Oeb@Sp3sRvi$}nc+2bj1W;{X;BflrA`{S<}XNliRd_&!9Ejw{F~Zzr-eoE>`k_cO~BGfetvug z)~j*6)a4Vv-3}|D^~fkD!thf@BdZacSbe!bnga&^r9$;R2!glq?b@s zM5T)~kuJT3UIK)Uf`F*>4pO9rPUu}asB{RB&>}4mT7Xb){MGmU-*xY&`|Zv;i^ZBV z*|X1{WX_)1&peyzi`??{YsW@aGfbD|O+<{1FV$ZYNTO(PS$Y!HOxEGxB&|rIBl=>2 zKzx#*(V)FP;-hK9Me6me{Y1?<;#Q5b2o2nr8 z*6HV?Pb&*1Qagz~OgAa=X}*u}^1^Ih__nXp5R+Fe1=ZEn(9FF0qO5gUeNuBlNCo4l zaId_!au}`aFdUG5(X`9gW20dYbkMl9J8<@;Q6TEPh2p8oNM&SYkb!m5dYyi{CgbCl zr66muLpBO7erM&(pL>QBdp`Q5h{^?2xa-@9_Q`yJElE$v>PI@qIXleZk2Gi5KTyh0 zE2IkIDhXD~@v3asSpm&_7f8`BrQ9D!Wcf_!dz2WxB4X?Ngp>XgG3Ou8XWv!Bw)B8R z3Ba4GD}`Re=9WJIR2j2U<*L6o1qj;$JOmUqA)qN<{DYHxu?jeN%}mYq<8|!;4WQ}m zn3_ovtnDQ~Spv&btr9;s`Jy^eFv|cPasx1sgluigykwo_ufxaE?)q}G+HL1)lEw9# ze|*Qd|Au7U{2g-q|CBxB|7e6PxN|K$_O1GFZqq-nzQ&kqIK{X4-YLStY`2iVY6)HJHATJ+1_Sr>i^WIKu(G>o|WDgQB(mcYS zP;5+Jlz{QlD^=# znkEGqPAG3Dxu5CNEC*YzmO`t}`i%IYAx#noBDK|ZQ7H|+D4xB0Q_glymbn^Q*OUm? z70itjQjE%7Z*N{6hWGBCXQ^Qy8#rGYE)@1-hR)N{jat7p=olE~0_3NDeml**7nwu2 z$Z?_g`7nIZ`YY6-Zu!j@p?JB7Qz#V-_S~RP=;F^d_c}nRmPsW0>XCjOtHY}5Z6$c? zm0;(nhk9RasB4Aj?*Ad_k5*pDmiii_cF@htOL4am3rzI`{vBwT8T*SrG}H=(bog(# zfhNw0F$U!KJIs zfqErw6OQWF?3bnFpvai}%Tx)DmkF_@s@lYo89rU-sdm!es$dh3^NVwu_oPX$8#X?+ zhj7rD*18MFI%(^WttZn$KdguNYr}#o)og5AYew_)<1$_H|FFpjD&YL*!E-zNU0eO9Uc>nDrcYU{Y>*px7hz$qJT?uTLe&W$G+SQ(8o(7OzcU42|ZL)pQ z?Zv}!&&Uz9Zr3GYrYR=5>A76dDerRiZkU+uJB^ZAj?1NN%_J=c>5D(;B9*j!AY)4& zyUqRf(#}SKA5AX`TIYEW*(5t??Va@{`X8JwCgz#zx$Yl2?#Hey4sbqUDK}1-3%C>c zIJq@4oaU^si|)!|lC?GEZD;x|?-4%A8Xw7kWxvAo^v2RxP5T}Ok52_mBD|N+ zZd3H>EfMER5XS#wI=1tyT1RKGLaW;xvuY=79b)qSIQz9Du)M!m26735ExR=T3*379 z{!QbLxb@QZP!|5vCj=BQ!Ev#lGTY*WLs3yLbWC#CIHYEIzwrwNa5Rmxna`a!$oa%H z+eY6OtMdwo)jI!Fm5LXgYl(NHA-%j+-sw$#Kl!IRvcZOK5+b9yDc6b;zjaZY(ou&45F#%Y8cIC8T{9ZAGeGG*lRuD;Kr zF2eYah4wa)<>0n}t}xtonP0ZWR@wSxYgqML2a25dAa$~?)rME&4sPl$#ZQN98OtJ{ zn(`KJUcQl-GA;#>X-u}SMW7S$0*tjqZnDBw2s`GoNPgvYodTwjY-@i8#7Obw?%kFG zOY7qo&x&oTlN(L$J8EM$9GeDwD7Mhccz9#-+<;fzyT}yUV(pRzw#kP&9u>E|+H0Ay za1#7Zd(b$9IOn3*e1pw}4pbFh-QHLlZ|Z8$0{jUwhAXEeo;+NOX$Q&*CNNH+*tcUu zTlBx*UJuc048wEFxt* zZBA=JO%IbF8K@@q2-eTMWX7+YS0zS2aDo*pJ%GtRfN5>3_wDoVR2RF3H>79G<}6kk zrr+F(L)%>azDS;{hhx^Oga~D>e5u5=woZ zz1924vMF22vsu&DbYiZ7D_2cH+PGI@<|<^iaQ8_q$Ms#qabbV9b%k1kNePZJJ=~Z} zq7Jj|$Bzszt4?|wE6Zhv;BCp702qZGwMp&!1ysfPn5=MsahSl<@tzs<=S|n{0e*eUqX=tHyZjaB5 z8hoR2bDM2v*=sm9wzj~r)5d^X)%F)IR2>yY&ciK)9FKta6s_!}w-bEgQ`hc|0BXB>*;FkE zHuJo?OPV&25B4q;GiMt;ad3pkco|b+%zT{*WQxI;18LbzcsyApeqKt~_RpADVd5&f zNLgnbP}M#JuBq|NTgy{{&`Y_IY;ER~JNKQ0wuN6b;|Js~pak(GY zRe`fiE?;oguyc?Xr;wp%J3waO*>!Eyq;7$Q^P8XOFcC`f zV(Q%+%OKB5d3JiVz?)=KlLEeoO%DMPUOhIvErwWlv!?Fh%E8LyI5yu3s5x1(aQ6gs z{$|Xp*QG{jtTZ}eolTeja7mw1%Q_g9(D_YaI;%opV+O~0SDtG`3q7!<=V0l)Nw?DP z+8F@ryeGr_ zIBe^G%)ug=uP=+Q->Z*Jr>fD|pdAa#&_4HfG&dMj%>J<}C+}P&KHHtupxzw8?<6Y| zW6`G6ga6fQUToBb3~DZGy|uxGkywSmycKJ8rec?v?lIw1!jdX}*7I3sl~^bbiy3V7 zAvMxG9L{NThdOSu)*kq)_d-k(KE%LlV05vqA~~leQ*7m=qv5@WnEGzXWwr_=`}bS>;}BG3}$oPBwCs?-p}|p}L;) zS1!JO7QM8e)W@>3d|CK#R8SRea@%uDDl5k93A8QCx?6DXx(xEXFf@p9`Uykg=dW9x z${LTGCv)<6yKC8=6}>mjGVi4ljQT2KrQ8O>gjml&kmVJ!T_(KwgGcJisaq3NoyOO5 zI);gGI$gYQKd9921i4F`B)P%tEE z`Of@%UVgh(R-~wxeKaxSGJii2sRDSURCz;3sy)B~_|%k(l@@2Ba`Q3!npb=MfMrG- zAIEX1pZuNeh&?(h(XakYFK=K=_4=0r@gtnyvsgQL%sLjIdtBIL>Asn$nS;<3Ex1F~ z(!H@O5?!5VnVL8tVxxgvrDWo;cN!6$S|>$1G*L49r8auu8aJXJ8BA$U zNrMwqnd$*hFG8%twMh5owkSy?QbGj1X_t>B28v#`+!9C}DMUZJAI*rMyP=n(z$DU* zA7vSLA;gnUvmb2B$D2~2oo&1r2Mz%}uJBQM(s0*AD6z`$=I501|mijM2$nE#U$Ct-fky25WC|S}k@W1F8o{ac|^u1eQ){ z$kxY@cJE-F!H{KO|MhtypA&d;ZE_et!KwS+Y-%R#p~LXkTp@$#{K9@=k-&;4YMuJV z*PJm;hOkIK`>126%I#OsrAVQ#xj3Jjz!1oWfnED7iK+8b3npFxYXVj6;XQ$XvM?`S zHu*2spDmKfiIc8G0Pk(2jEQa3-JQD(S0?Ktt`fN(?OnGObHe`AjqgU=g|&!VXWC5q zrZA#Ynt0aGbJGJsH&QmV@dG;=aIJQ8iaUne`Ymx{k1)WEx2?I>w=L_XXgM8j0i26s z&pHbX#Y@clj+i+`sY5(53=z|y!}iCm1>jaQw_xv`IHC#F=9m#DW0S>0o)0~$sHKpM zD_6NSyxN+@ladDC@(FK(s=#|?=pT>%~$apc&Ft6p-6>zJ5hjdwH)ejgcWy4-L z2My++gj>35%DA~sfQzu5aFqu*IwZFF3O~wx2Prp^0&yRK|{9o7ZY(laV`PuySV}uHmiMR%!Sy{ zop660MzgP1T2|SIPr(_T+`%LuKn@$GD)Q0l6oc54>BiU0^{UIgSnZewG9!3W?qN2D z7(;Y2cS7?a>pZa$Q)h)V@n3QjwwRz>hsq#;1b+2p+l3!e z5i1Y97I5WBLM}yi+(McWd&4G!F%DOUTmycrRw>eaNEVV)T19;?7sb1%)OZiGdIJ%_ zv1)CJF|xp1@lu$?o^)0DIFDeJ!!Vn5pX*V-MD`KyP>_`4c#vyE9&35Vly{+eH)ysR z0YJ?18-5spGXg2^Spenv82bzqBi3X|bIYz{Vl(Jg_A2LyiXFD&SLhQcz2%I;O;R+u zGH&S6OCUB}qpe9c1;oj?v;;r2$UE#reY&1{Ck-72t0zN1Z>%y^%fNfu$P{Eb`O-gJ z%=mKo4f#tV?xbJUX1+61rdH`-1HU+Ub8kqvuz(c&1|J;6bQ)VLfzoe&wfjgi_xF~O z95v?0eKHbaJEAAN6HeMfQ5*!5S%|w=P(-D2vd+}l;*DL79;W~?R2=|eb^=DFQbo_1 zCJGu$`~uX;N`t`~wC=zU6oS|=qbKB;tq<>O4o>D{a8tF)XJMZdlh8}7gN3t8vI%KF zEZ~zWth!3|96!}$(4B!)yVuqni7MVdl38ukLC){yngabk$IYiyT!08K)7vtL(blv1 z3Ux*{N4#~BrZJ{v`&NYq9;Sslcb5QPj3UBv7A!Qrv2LE&{dC9HLC(JpItfF_v=_ke zI=UxjkUWxI8yB@iBp`|Da2<@r^a|UB3o;{$V`@Xg-+d~0hmL3|QaxMngM{`&+NcME z1y`g7cG?QU?^RvwK-fQAKKZ=4IX#(e&c-jDuMeRjOb=Cao;1=vc27n|1zxzmA4b|t zyPWBJ5@*M*_O`xAy8jal3nKBgPEht^?o>3Er9BW0v~z>VAaX;RZIq*#j??u#94c6E zp1n{(fEOGLwIjFU8*@i?n#G3r^UDg|z3Y0Y6UE0twgQH4$uO`1z6DjF4C10`+VS9rgXM`!)0D+eEjMRzSBDOS{9%K>!hN_OF@Ghff^U} zYs}=WI-vr7)H26&#K3x=ns&BDuwl0BGYp5Oe{`a6vlW)jmUHG{;y?T7%qif>0d*t& zJwGQu<$r~_-OPYsp!zhILpwn;{0J(?A2N5oG5JEPKRS)JBy4rTu~*0GGrx+oTVK8jPYPDc>0}0fiMXpUrQn^ zG*x@V49_oCU&eNFhlfK3_XCbB>b+kFi3`>6n%}wvTXQuf`{Tfo;Nx15jWH7v9>OFHRBJ5l?+kLv8i&&j%A~J%hWak;(k~3 z8mU9Z0@3|IOhWCj6UsPsW!8FMq-u}V>ex1aybS{!o|Z+(FisKHp`u;PTpx_xZkof0 z#8#R2KIMl6qxxD}G>~%WNHZ?z;{J5GhF#cv=f+-Y{{GitvE)_0rs0q;{>pc(j{L`o z$Pn8y?)~~E&|4ClR77kOn*u+t&z?vLw*jo*_RF+LwPm4Nkc>ePi|<@YGy-QoXb&1f zAYVXM9klFntG~u__l#DBr8|Hbe!4@wh5>@LPO%g?{bE{ESe?``&piRH5b`9CP7m&n z+H5MsWn>t$@K_5nhY`?edYrH|2GyjJ2)nJ9?2EQ6o+#XkU}yWq)D)Q4esOvx=d$W& zwOk3L$OQm;(4Q+qibBYH41HJSX2mTchsC7PPatOQ<|F8c7$9@?Qq4vfq*1#dqYac{ zF!E|#g5W2sc@?)u)eaNl1KXBprhzLR>25@Cv8OX@rlN#XdHG*^z%Z+a=&+xF%m&H` z2(`^r(53lP6kNa)%euPiCagRfUfSEbb?eN z+Elkw*)!3z6-A?LGaI*gdypD*Xj! z8v1mrbLQ9^CC4fDD0$LZed-n|-3?}*C2_*6%RxHjc^BhS{m5q2olOlPTk1C(_@H6ZGb$3 z)jg^Y2IrQ7AW0*+>gKw0MWdAtfGG$I26dOV2UzPG8T3xSMbwuV_ms})B94q{^Jr4E zF1O4=O2G?Er<{E_?U&9S2sw?#Av~++QCXrQt=+Ebk^`amLncD9mX>=i`b_ts0FEs7 zOE3zYxAT}q^X4U!>%t|e4JGF`C5q0!gEL;&5KGGbUu|9KBJ3U6j0nEQmLr$<42mUV zljxmtnXns7k$tDhNjpcs3ad8|lok$YE5K5-DAlY10RS4bFUkt{V*=rLKE38|^1Vz*~V%UuyghGvrl$@KO>TWW{*@+`zU$&Fvk^vxaT(6M@Pr+C9V>cm>d*1SVk}%qWq;kh4OH!L`Mv^Gs_EVCX zOVdA;BX(= zU1AbKj1zpy#7dx=^;mUbA51Vw-NYOuL#S^fC9PPntlkq{%TMAx0|U-BQDC}HhDUe4 z4_sOd!(XBpFS@#Yz+&%w;A=y8i?fKh{+be0dyv3wN?=oka|nIo+(m5JrOTB8Nv6qM z0S+U*UhV!wCxI6zdSfuVDQVSyl7Vt^IUN(yXVV@-bUQ@O^Q)VfJ3wFP10cypLTwZO z4D74@jl*V>zMzuEJIyp;_H`%dCkv3Jn}N*^jND?PZ87z|Fo8Cxyk|X&D+1oPwH^aZ zRVObP(jF`Z;h&5yvrjtB#W68p#+^@dEQ^fVT$#qIlB)u);pC?lUNHtr7qi)|bAmFV zQd&k;_S->I3BV}cc#%H7Wc8!nPQy{zMbIdnVjGD$;LbVO7otsiRi;f9c#kjiG*%25 z*fzaUJnktAj@=Ey1=h=w+B8+p1${l*HgMyh!eC4KlNUx9){ouZNIk4iWwqGy)<6bq zYA_USwNpzCD;kir8H()e)^qiVeqSSayU_VprTtRt!lci&T164O_GMxL@dZqmLnrZ9 zs-k^iWaH(J0VD3+bBrECXM^JbmhGX6ule$BNDc62oIFkls$D3fz&+KL)K(jQ@RQNx zfntOG6o?_4RGyPz0I=o;L)3mZwrE|v4^2WE|q9AE+fY|6LK1{V-2X`Wc%vIP9+l1p3o#PJc1iahEVC9 z^~sqJUG$_F3wM)BqJT~{a2BEf+h!jeVYi(Ftn^q2^xAUr({Zq?W1^h}{6sD+M{&7GOxi#w&8ypOYm zjRftL=o`0V(+<(3)VCI>WVfz_$nW&i0NQ;B0aTtIN8efoTvq@q^l*>^1y1kexs=%s83?tK1*UzksaCpZz7)8z z!XNlb3~4QM9b7z#SaO3pt5S61e`u`4jQ9ztP!=|nHSgWQ*qVXqHWFR-9-7E1G_z;< zk(2Oq=L$7XuAMH1zR(c}F^592ePn~O3G=68Ff zP;!%}(jm;{A6(jCfEJQKB2(%%)?spkVPxG}sn?UsQ}+na0qYKs6?h9^Y`~_8-&d_l zAuyzW^=C#L@L}tt633Vc8D27*KkzcAK3at(OZlv)tj~lCwb|3_jC-t~6s7ozX#(yu z#h2USsNXxoGM|GACXk(tGEKj{Z~_2hNm!?YJo0$w-OB@NkLV#Y5$=Qa*=@4eyu!U5 zV@bLJ`Vu1Y`g99JvRGW>2Y=3We_@u`jRObo$JSFuw-%O~d}Bv%B-_cHrm6UJ_t&#c z%q+F^*`nFN&fYaJ9YW?>&Y)I(!x%`1O3M<y~ga{B{q>*8B?r#`Zgy4aWdgCgsy~&+wKcr&yAPp)q0Ck& zLhh8Z4WlQ)bidjFnwH3Qu~rx7i%_Ey>7TR2aGb8;<&5pQctQNf2$uWH3)^4!n1pQX znuQOp0Xf^{;MZq{^tUfN8%<`MTfF*^Wb)vh$7_F&oT^6GW5X``oFk|*O>y)gQ)VA$ zxz;t*c}ystg+K7CaB7RmXJ0@1l%lTrN8J2^+pPtP6JV&!%gWKUR+~}`y`$O#CxFbSegc18!f#1NSPL$k& z&T#Of|L94|?Jq0*u4^u6_{OO9di@Tf=c=?c>^U6Q8@geR%Kr0fLHO%L>EU_CRRpBT z$tg+zb7&kv37PB`U9%0VYrQG~|A^I+2rD~3bnfhL+T%gV&1)`9@kRFg@hSZCP-ALD zhXi_(oH1<=wG2+gYzOpwj{{X!$Y^QYYO@XJk#0O6BL3GPbNbqTfz8WWNlVv1e;(Kp z=r}tdfx&cN-zOvvkk1<2H=Kn1@^JPvDKq$|Y)E}2UG!6b=UHc-? literal 0 HcmV?d00001 diff --git a/assets/images/help/settings/view-required-workflows.png b/assets/images/help/settings/view-required-workflows.png new file mode 100644 index 0000000000000000000000000000000000000000..d6217ad5725e9531c12e52b91fc7eab17dcca5ff GIT binary patch literal 11899 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 z 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.8' diff --git a/data/reusables/actions/workflows/required-workflow-beta.md b/data/reusables/actions/workflows/required-workflow-beta.md new file mode 100644 index 0000000000..760e9a420e --- /dev/null +++ b/data/reusables/actions/workflows/required-workflow-beta.md @@ -0,0 +1,5 @@ +{% note %} + +**Note:** Required workflows are currently in beta and subject to change. + +{% endnote %} \ No newline at end of file diff --git a/data/reusables/actions/workflows/required-workflow-prerequisites.md b/data/reusables/actions/workflows/required-workflow-prerequisites.md new file mode 100644 index 0000000000..917051c5e3 --- /dev/null +++ b/data/reusables/actions/workflows/required-workflow-prerequisites.md @@ -0,0 +1,6 @@ +* {% data variables.product.prodname_actions %} must be enabled for a repository in the organization's settings in order for required workflows to run. Once enabled at an organization-level, required workflows will run even when {% data variables.product.prodname_actions %} is disabled in the repository's settings. For more information on managing {% data variables.product.prodname_actions %} in your organization's repositories, see "[Managing GitHub Actions permissions for your organization](/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#managing-github-actions-permissions-for-your-organization)." +* Required workflows are available for organizations and only in repositories where the organization's plan supports required status checks. If required status checks are not supported, the workflow will still run, but it will not be a required check and will not block merging. For more information about support for required status checks, see "[About protected branches](/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches)." +* The repository's default branch must match the organization's default branch setting in order for required workflows to run as required status checks. If the default branch names do not match, the workflow will still run, but it will not be a required check. For more information about managing default branch names, see "[Managing the default branch name for repositories in your organization](/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization)" and "[Changing the default branch](/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/changing-the-default-branch)." +* For required workflows to run, the pull request's source repository must be in the same organization as the target repository. {% data variables.product.product_name %} will source the required workflow from the HEAD commit of the default branch from the repository containing the workflow. +* Secrets used in a required workflow should be created at either the organization level or in the target repositories. +* Secrets in the source repository will not be fetched when a workflow runs in the target repository. \ No newline at end of file diff --git a/data/reusables/actions/workflows/required-workflow-source-notes.md b/data/reusables/actions/workflows/required-workflow-source-notes.md new file mode 100644 index 0000000000..278cdf124c --- /dev/null +++ b/data/reusables/actions/workflows/required-workflow-source-notes.md @@ -0,0 +1,4 @@ +* Required workflows can be stored in any repository folder and are not restricted to the `.github/workflows` folder like normal workflows. If a required workflow calls a reusable workflow, the reusable workflow must be stored in the `.github/workflows` folder. When calling a reusable workflow, a required workflow must use the full path and ref to the reusable workflow. For example, `{owner}/{repo}/.github/workflows/{filename}@{ref}`. +* If the required workflow is contained in a private {% ifversion ghes or ghec or ghae %}or internal {% endif %}repository, you must ensure that workflows within the repository are accessible by other repositories in your organization. For more information, see "[Allowing access to components in a private repository](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#managing-access-for-a-private-repository){% ifversion ghes or ghec or ghae %}" and "[Allowing access to components in an internal repository](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#allowing-access-to-components-in-an-internal-repository){% endif %}." +* Workflows stored in a public repository can be configured as required workflows for any repository in your organization. Workflows stored in a private repository can only be configured as required workflows for other private repositories in your organization. {% ifversion ghes or ghec or ghae %} Workflows stored in internal repositories can be configured as required workflows for internal and private repositories in your organization.{% endif %} +* CodeQL is not supported in required workflows because CodeQL requires configuration at the repository level. For information on configuring code scanning, see "[Setting up code scanning for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository)." \ No newline at end of file diff --git a/data/reusables/actions/workflows/required-workflow-target-notes.md b/data/reusables/actions/workflows/required-workflow-target-notes.md new file mode 100644 index 0000000000..0996d67dbe --- /dev/null +++ b/data/reusables/actions/workflows/required-workflow-target-notes.md @@ -0,0 +1,3 @@ +* When configuring a required workflow to run on all or selected repositories, the visibility of the repository containing the required workflow will affect which repositories in your organization the workflow runs on. Required workflows stored in public repositories will run on all repositories. Required workflows stored in private repositories will only run on other private repositories. {% ifversion ghes or ghec or ghae %} Required workflows stored in internal repositories will run on internal and private repositories.{% endif %} +* Required workflows cannot be configured to run in the repository the workflow is created in. You should consider creating a separate repository to store your required workflows. +* When configuring a required workflow to run on all or selected repositories, required workflows will not run in repositories where actions is disabled in the organization settings. \ No newline at end of file From bbad8e1ca7a3c958f052e927a7049597d321f7d4 Mon Sep 17 00:00:00 2001 From: Sanjana Bhat <104997027+bhat-sanjana@users.noreply.github.com> Date: Mon, 9 Jan 2023 12:29:38 +0530 Subject: [PATCH 04/41] =?UTF-8?q?Adding=20a=20new=20subcategory=20for=20re?= =?UTF-8?q?quired=20workflows=20+=20Permission=20for=20GitH=E2=80=A6=20(#3?= =?UTF-8?q?3698)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sarah Edwards Co-authored-by: Lucas Costi Co-authored-by: github-openapi-bot <69533958+github-openapi-bot@users.noreply.github.com> Co-authored-by: github-openapi-bot --- content/rest/actions/index.md | 1 + content/rest/actions/required-workflows.md | 12 + .../permissions-required-for-github-apps.md | 19 +- .../client-side-rest-api-redirects.json | 24 + lib/rest/static/apps/enabled-for-apps.json | 144 + .../decorated/api.github.com.2022-11-28.json | 11047 +++++++++++++++- .../static/decorated/ghec.2022-11-28.json | 11047 +++++++++++++++- lib/rest/static/decorated/ghes-3.3.json | 10 +- lib/rest/static/decorated/ghes-3.4.json | 10 +- lib/rest/static/decorated/ghes-3.5.json | 10 +- lib/rest/static/decorated/ghes-3.6.json | 10 +- lib/rest/static/decorated/ghes-3.7.json | 10 +- lib/rest/static/decorated/github.ae.json | 10 +- 13 files changed, 22312 insertions(+), 42 deletions(-) create mode 100644 content/rest/actions/required-workflows.md diff --git a/content/rest/actions/index.md b/content/rest/actions/index.md index 9d2e41d225..1fe2c4d495 100644 --- a/content/rest/actions/index.md +++ b/content/rest/actions/index.md @@ -17,6 +17,7 @@ children: - /cache - /oidc - /permissions + - /required-workflows - /secrets - /variables - /self-hosted-runner-groups diff --git a/content/rest/actions/required-workflows.md b/content/rest/actions/required-workflows.md new file mode 100644 index 0000000000..8cd4c32c50 --- /dev/null +++ b/content/rest/actions/required-workflows.md @@ -0,0 +1,12 @@ +--- +title: GitHub Actions Required Workflows +allowTitleToDifferFromFilename: true +shortTitle: Required Workflows +intro: 'Use the REST API to access and configure required workflows in an organization in {% data variables.product.prodname_actions %}.' +topics: + - API +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.8' +--- \ No newline at end of file diff --git a/content/rest/overview/permissions-required-for-github-apps.md b/content/rest/overview/permissions-required-for-github-apps.md index 9bfdd1236e..3a9036a13c 100644 --- a/content/rest/overview/permissions-required-for-github-apps.md +++ b/content/rest/overview/permissions-required-for-github-apps.md @@ -58,7 +58,9 @@ shortTitle: GitHub App permissions - [`POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches`](/rest/reference/actions#create-a-workflow-dispatch-event) (write) - [`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable`](/rest/reference/actions#enable-a-workflow) (write) {% ifversion fpt or ghec or ghae %}- [`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing`](/rest/reference/actions#get-workflow-usage) (read){% endif %} -{% ifversion fpt or ghec or ghes > 3.8 %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`GET /repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs`](/rest/actions/workflow-runs#list-workflow-runs-for-a-required-workflow) (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`GET /repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/timing`](/rest/actions/required-workflows#get-required-workflow-usage) (read){% endif %} +{%- ifversion fpt or ghec or ghes > 3.8 %} - [`GET /repos/{owner}/{repo}/actions/variables`](/rest/reference/actions#list-repository-variables) (read) - [`GET /repos/{owner}/{repo}/actions/variables/{variable_name}`](/rest/reference/actions#get-a-repository-variable) (read) - [`POST /repos/{owner}/{repo}/actions/variables/{variable_name}`](/rest/reference/actions#create-a-repository-variable) (write) @@ -78,7 +80,7 @@ shortTitle: GitHub App permissions - [`PUT /orgs/{org}/actions/variables/{variable_name}/repositories`](/rest/reference/actions#set-selected-repositories-for-an-organization-variable) (write) - [`PUT /orgs/{org}/actions/variables/{variable_name}/repositories/{repository_id}`](/rest/reference/actions#add-selected-repository-to-an-organization-variable) (write) - [`DELETE /orgs/{org}/actions/variables/{variable_name}/repositories/{repository_id}`](/rest/reference/actions#remove-selected-repository-from-an-organization-variable) (write) -{% endif %} +{%- endif %} ## Administration @@ -498,6 +500,10 @@ shortTitle: GitHub App permissions - [`GET /repos/{owner}/{repo}/stats/punch_card`](/rest/metrics/statistics#get-the-hourly-commit-count-for-each-day) (read) - [`GET /search/labels`](/rest/reference/search#search-labels) (read) - [`GET /repos/{owner}/{repo}/topics`](/rest/reference/repos#get-all-repository-topics) (read) +{% ifversion fpt or ghec or ghes > 3.7 %}- [`GET orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories`](/rest/reference/actions#list-selected-repositories-required-workflows) (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`PUT /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id`}](/rest/reference/actions#add-a-repository-to-selected-repositories-list-for-a-required-workflow') (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`DELETE /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}`](/rest/reference/actions#remove-a-repository-from-selected-repositories-list-for-a-required-workflow) (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`PUT /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories`](/rest/reference/actions#set-selected-repositories-for-a-required-workflow) (read){% endif %} ## Notifications @@ -529,6 +535,15 @@ shortTitle: GitHub App permissions {% ifversion fpt or ghec or ghes > 3.6 %}- [`DELETE /orgs/{org}/security-managers/teams/{team_slug}`](/rest/reference/orgs#remove-a-security-manager-team) (write){% endif %} - [`PATCH /orgs/{org}`](/rest/reference/orgs/#update-an-organization) (write) - [`GET /orgs/{org}/installations`](/rest/reference/orgs#list-app-installations-for-an-organization) (read) +{% ifversion fpt or ghec or ghes > 3.7 %}- [`GET /orgs/{org}/actions/required_workflows`](/rest/reference/actions#list-required-workflows) (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`GET /orgs/{org}/actions/required_workflows/{required_workflow_id}`](/rest/reference/actions#get-a-required-workflow) (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`GET orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories`](/rest/reference/actions#list-selected-repositories-required-workflows) (read){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`POST /orgs/{org}/actions/required_workflows`](/rest/reference/actions#create-a-required-workflow) (write){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`DELETE /orgs/{org}/actions/required_workflows/{required_workflow_id}`](/rest/reference/actions#delete-a-required-workflow) (write){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`PATCH /orgs/{org}/actions/required_workflows/{required_workflow_id}`](/rest/reference/actions#update-a-required-workflow) (write){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`PUT /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id`}](/rest/reference/actions#add-a-repository-to-selected-repositories-list-for-a-required-workflow') (write){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`DELETE /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}`](/rest/reference/actions#remove-a-repository-from-selected-repositories-list-for-a-required-workflow) (write){% endif %} +{% ifversion fpt or ghec or ghes > 3.7 %}- [`PUT /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories`](/rest/reference/actions#set-selected-repositories-for-a-required-workflow) (write){% endif %} {% ifversion fpt or ghec %} diff --git a/lib/redirects/static/client-side-rest-api-redirects.json b/lib/redirects/static/client-side-rest-api-redirects.json index 164b4ca526..a7ad1730f3 100644 --- a/lib/redirects/static/client-side-rest-api-redirects.json +++ b/lib/redirects/static/client-side-rest-api-redirects.json @@ -290,6 +290,16 @@ "/rest/actions#set-allowed-actions-for-an-organization": "/rest/actions/permissions#set-allowed-actions-for-an-organization", "/rest/actions#get-default-workflow-permissions": "/rest/actions/permissions#get-default-workflow-permissions", "/rest/actions#set-default-workflow-permissions": "/rest/actions/permissions#set-default-workflow-permissions", + "/rest/actions#list-required-workflows": "/rest/actions/required-workflows#list-required-workflows", + "/rest/actions#required-workflows": "/rest/actions/required-workflows", + "/rest/actions#create-a-required-workflow": "/rest/actions/required-workflows#create-a-required-workflow", + "/rest/actions#get-a-required-workflow": "/rest/actions/required-workflows#get-a-required-workflow", + "/rest/actions#update-a-required-workflow": "/rest/actions/required-workflows#update-a-required-workflow", + "/rest/actions#delete-a-required-workflow": "/rest/actions/required-workflows#delete-a-required-workflow", + "/rest/actions#list-selected-repositories-required-workflows": "/rest/actions/required-workflows#list-selected-repositories-required-workflows", + "/rest/actions#set-selected-repositories-for-a-required-workflow": "/rest/actions/required-workflows#set-selected-repositories-for-a-required-workflow", + "/rest/actions#add-a-repository-to-selected-repositories-list-for-a-required-workflow": "/rest/actions/required-workflows#add-a-repository-to-selected-repositories-list-for-a-required-workflow", + "/rest/actions#remove-a-repository-from-selected-repositories-list-for-a-required-workflow": "/rest/actions/required-workflows#remove-a-repository-from-selected-repositories-list-for-a-required-workflow", "/rest/actions#list-self-hosted-runner-groups-for-an-organization": "/rest/actions/self-hosted-runner-groups#list-self-hosted-runner-groups-for-an-organization", "/rest/actions#create-a-self-hosted-runner-group-for-an-organization": "/rest/actions/self-hosted-runner-groups#create-a-self-hosted-runner-group-for-an-organization", "/rest/actions#get-a-self-hosted-runner-group-for-an-organization": "/rest/actions/self-hosted-runner-groups#get-a-self-hosted-runner-group-for-an-organization", @@ -481,6 +491,9 @@ "/rest/projects#get-project-permission-for-a-user": "/rest/projects/collaborators#get-project-permission-for-a-user", "/rest/projects#list-project-columns": "/rest/projects/columns#list-project-columns", "/rest/projects#create-a-project-column": "/rest/projects/columns#create-a-project-column", + "/rest/actions#list-repository-required-workflows": "/rest/actions/required-workflows#list-repository-required-workflows", + "/rest/actions#get-repository-required-workflow": "/rest/actions/required-workflows#get-repository-required-workflow", + "/rest/actions#get-repository-required-workflow-usage": "/rest/actions/required-workflows#get-repository-required-workflow-usage", "/rest/repos#get-a-repository": "/rest/repos/repos#get-a-repository", "/rest/repos/repos#update-a-repository": "/rest/repos/repos#update-a-repository", "/rest/repos#delete-a-repository": "/rest/repos/repos#delete-a-repository", @@ -508,6 +521,7 @@ "/rest/actions#set-allowed-actions-for-a-repository": "/rest/actions/permissions#set-allowed-actions-for-a-repository", "/rest/actions#get-default-workflow-permissions-for-a-repository": "/rest/actions/permissions#get-default-workflow-permissions-for-a-repository", "/rest/actions#set-default-workflow-permissions-for-a-repository": "/rest/actions/permissions#set-default-workflow-permissions-for-a-repository", + "/rest/actions#list-required-workflow-runs": "/rest/actions/workflow-runs#list-required-workflow-runs", "/rest/actions#list-self-hosted-runners-for-a-repository": "/rest/actions/self-hosted-runners#list-self-hosted-runners-for-a-repository", "/rest/actions#list-runner-applications-for-a-repository": "/rest/actions/self-hosted-runners#list-runner-applications-for-a-repository", "/rest/actions#create-a-registration-token-for-a-repository": "/rest/actions/self-hosted-runners#create-a-registration-token-for-a-repository", @@ -668,11 +682,21 @@ "/rest/dependency-graph#dependency-review": "/rest/dependency-graph/dependency-review", "/rest/dependency-graph#create-a-snapshot-of-dependencies-for-a-repository": "/rest/dependency-graph/dependency-submission#create-a-snapshot-of-dependencies-for-a-repository", "/rest/dependency-graph#dependency-submission": "/rest/dependency-graph/dependency-submission", + "/rest/deployments/deployments#list-deployments": "/rest/deployments/deployments#list-deployments", "/rest/deployments#deployments": "/rest/deployments/deployments", + "/rest/deployments/deployments#create-a-deployment": "/rest/deployments/deployments#create-a-deployment", + "/rest/deployments/deployments#get-a-deployment": "/rest/deployments/deployments#get-a-deployment", + "/rest/deployments/deployments#delete-a-deployment": "/rest/deployments/deployments#delete-a-deployment", + "/rest/deployments/statuses#list-deployment-statuses": "/rest/deployments/statuses#list-deployment-statuses", "/rest/deployments#statuses": "/rest/deployments/statuses", + "/rest/deployments/statuses#create-a-deployment-status": "/rest/deployments/statuses#create-a-deployment-status", + "/rest/deployments/statuses#get-a-deployment-status": "/rest/deployments/statuses#get-a-deployment-status", "/rest/repos#create-a-repository-dispatch-event": "/rest/repos/repos#create-a-repository-dispatch-event", "/rest/deployments/environments#list-environments": "/rest/deployments/environments#list-environments", "/rest/deployments#environments": "/rest/deployments/environments", + "/rest/deployments/environments#get-an-environment": "/rest/deployments/environments#get-an-environment", + "/rest/deployments/environments#create-or-update-an-environment": "/rest/deployments/environments#create-or-update-an-environment", + "/rest/deployments/environments#delete-an-environment": "/rest/deployments/environments#delete-an-environment", "/rest/deployments/branch-policies#list-deployment-branch-policies": "/rest/deployments/branch-policies#list-deployment-branch-policies", "/rest/deployments#branch-policies": "/rest/deployments/branch-policies", "/rest/deployments/branch-policies#create-deployment-branch-policy": "/rest/deployments/branch-policies#create-deployment-branch-policy", diff --git a/lib/rest/static/apps/enabled-for-apps.json b/lib/rest/static/apps/enabled-for-apps.json index 4b28eb8202..3c77474e7f 100644 --- a/lib/rest/static/apps/enabled-for-apps.json +++ b/lib/rest/static/apps/enabled-for-apps.json @@ -103,6 +103,60 @@ "verb": "put", "requestPath": "/orgs/{org}/actions/permissions/workflow" }, + { + "slug": "list-required-workflows", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows" + }, + { + "slug": "create-a-required-workflow", + "subcategory": "required-workflows", + "verb": "post", + "requestPath": "/orgs/{org}/actions/required_workflows" + }, + { + "slug": "get-a-required-workflow", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}" + }, + { + "slug": "update-a-required-workflow", + "subcategory": "required-workflows", + "verb": "patch", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}" + }, + { + "slug": "delete-a-required-workflow", + "subcategory": "required-workflows", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}" + }, + { + "slug": "list-selected-repositories-for-a-required-workflow", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories" + }, + { + "slug": "sets-repositories-for-a-required-workflow", + "subcategory": "required-workflows", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories" + }, + { + "slug": "add-a-repository-to-a-required-workflow", + "subcategory": "required-workflows", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}" + }, + { + "slug": "remove-a-selected-repository-from-required-workflow", + "subcategory": "required-workflows", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}" + }, { "slug": "list-self-hosted-runner-groups-for-an-organization", "subcategory": "self-hosted-runner-groups", @@ -349,6 +403,18 @@ "verb": "delete", "requestPath": "/orgs/{org}/actions/variables/{name}/repositories/{repository_id}" }, + { + "slug": "list-repository-required-workflows", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows" + }, + { + "slug": "get-a-required-workflow-entity-for-a-repository", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}" + }, { "slug": "list-artifacts-for-a-repository", "subcategory": "artifacts", @@ -475,6 +541,12 @@ "verb": "put", "requestPath": "/repos/{owner}/{repo}/actions/permissions/workflow" }, + { + "slug": "list-workflow-runs-for-a-required-workflow", + "subcategory": "workflow-runs", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs" + }, { "slug": "list-self-hosted-runners-for-a-repository", "subcategory": "self-hosted-runners", @@ -4006,6 +4078,60 @@ "verb": "put", "requestPath": "/orgs/{org}/actions/permissions/workflow" }, + { + "slug": "list-required-workflows", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows" + }, + { + "slug": "create-a-required-workflow", + "subcategory": "required-workflows", + "verb": "post", + "requestPath": "/orgs/{org}/actions/required_workflows" + }, + { + "slug": "get-a-required-workflow", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}" + }, + { + "slug": "update-a-required-workflow", + "subcategory": "required-workflows", + "verb": "patch", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}" + }, + { + "slug": "delete-a-required-workflow", + "subcategory": "required-workflows", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}" + }, + { + "slug": "list-selected-repositories-for-a-required-workflow", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories" + }, + { + "slug": "sets-repositories-for-a-required-workflow", + "subcategory": "required-workflows", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories" + }, + { + "slug": "add-a-repository-to-a-required-workflow", + "subcategory": "required-workflows", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}" + }, + { + "slug": "remove-a-selected-repository-from-required-workflow", + "subcategory": "required-workflows", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}" + }, { "slug": "list-self-hosted-runner-groups-for-an-organization", "subcategory": "self-hosted-runner-groups", @@ -4258,6 +4384,18 @@ "verb": "delete", "requestPath": "/orgs/{org}/actions/variables/{name}/repositories/{repository_id}" }, + { + "slug": "list-repository-required-workflows", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows" + }, + { + "slug": "get-a-required-workflow-entity-for-a-repository", + "subcategory": "required-workflows", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}" + }, { "slug": "list-artifacts-for-a-repository", "subcategory": "artifacts", @@ -4384,6 +4522,12 @@ "verb": "put", "requestPath": "/repos/{owner}/{repo}/actions/permissions/workflow" }, + { + "slug": "list-workflow-runs-for-a-required-workflow", + "subcategory": "workflow-runs", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs" + }, { "slug": "list-self-hosted-runners-for-a-repository", "subcategory": "self-hosted-runners", diff --git a/lib/rest/static/decorated/api.github.com.2022-11-28.json b/lib/rest/static/decorated/api.github.com.2022-11-28.json index 77b6ad3d00..aa7a60b7ea 100644 --- a/lib/rest/static/decorated/api.github.com.2022-11-28.json +++ b/lib/rest/static/decorated/api.github.com.2022-11-28.json @@ -5752,6 +5752,8298 @@ ] } ], + "required-workflows": [ + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows", + "title": "List required workflows", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "

The number of results per page (max 100).

", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "page", + "description": "

Page number of the results to fetch.

", + "in": "query", + "schema": { + "type": "integer", + "default": 1 + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "total_count": 2, + "required_workflows": [ + { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/organizations/org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + { + "id": 30433643, + "name": "Required Linter", + "path": ".github/workflows/lint.yml", + "scope": "all", + "ref": "refs/head/main", + "state": "active", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "required_workflows" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "required_workflows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

List all required workflows in an organization.

\n

You must authenticate using an access token with the read:org scope to use this endpoint.

\n
", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "post", + "requestPath": "/orgs/{org}/actions/required_workflows", + "title": "Create a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [ + { + "type": "string", + "name": "workflow_file_path", + "in": "body", + "description": "

Path of the workflow file to be configured as a required workflow.

", + "isRequired": true + }, + { + "type": "string", + "name": "repository_id", + "in": "body", + "description": "

The ID of the repository that contains the workflow file.

", + "isRequired": true + }, + { + "type": "string", + "name": "scope", + "in": "body", + "description": "

Enable the required workflow for all repositories or selected repositories in the organization.

", + "enum": [ + "selected", + "all" + ], + "default": "all" + }, + { + "type": "array of integers", + "name": "selected_repository_ids", + "in": "body", + "description": "

A list of repository IDs where you want to enable the required workflow. You can only provide a list of repository ids when the scope is set to selected.

" + } + ], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "contentType": "application/json", + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "bodyParameters": { + "workflow_file_path": ".github/workflows/ci.yaml", + "repository_id": 53, + "scope": "selected", + "selected_repository_ids": [ + 32, + 91 + ] + }, + "parameters": { + "org": "ORG" + } + }, + "response": { + "statusCode": "201", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Create a required workflow in an organization.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "201", + "description": "

Created

" + }, + { + "httpStatusCode": "422", + "description": "

Validation failed, or the endpoint has been spammed.

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}", + "title": "Get a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Get a required workflow configured in an organization.

\n

You must authenticate using an access token with the read:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "patch", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}", + "title": "Update a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [ + { + "type": "string", + "name": "workflow_file_path", + "in": "body", + "description": "

Path of the workflow file to be configured as a required workflow.

" + }, + { + "type": "string", + "name": "repository_id", + "in": "body", + "description": "

The ID of the repository that contains the workflow file.

" + }, + { + "type": "string", + "name": "scope", + "in": "body", + "description": "

Enable the required workflow for all repositories or selected repositories in the organization.

", + "enum": [ + "selected", + "all" + ], + "default": "all" + }, + { + "type": "array of integers", + "name": "selected_repository_ids", + "in": "body", + "description": "

A list of repository IDs where you want to enable the required workflow. A list of repository IDs where you want to enable the required workflow. You can only provide a list of repository ids when the scope is set to selected.

" + } + ], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "contentType": "application/json", + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "bodyParameters": { + "workflow_file_path": ".github/workflows/ci.yaml", + "repository_id": 53, + "scope": "selected", + "selected_repository_ids": [ + 32, + 91 + ] + }, + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Update a required workflow in an organization.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "422", + "description": "

Validation failed, or the endpoint has been spammed.

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}", + "title": "Delete a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Response

" + } + } + ], + "previews": [], + "descriptionHTML": "

Deletes a required workflow configured in an organization.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

No Content

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories", + "title": "List selected repositories for a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Success

", + "example": { + "total_count": 1, + "repositories": [ + { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "clone_url": "https://github.com/octocat/Hello-World.git", + "mirror_url": "git:git.example.com/octocat/Hello-World", + "hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks", + "svn_url": "https://svn.github.com/octocat/Hello-World", + "homepage": "https://github.com", + "language": null, + "forks_count": 9, + "stargazers_count": 80, + "watchers_count": 80, + "size": 108, + "default_branch": "master", + "open_issues_count": 0, + "is_template": true, + "topics": [ + "octocat", + "atom", + "electron", + "api" + ], + "has_issues": true, + "has_projects": true, + "has_wiki": true, + "has_pages": false, + "has_downloads": true, + "archived": false, + "disabled": false, + "visibility": "public", + "pushed_at": "2011-01-26T19:06:43Z", + "created_at": "2011-01-26T19:01:12Z", + "updated_at": "2011-01-26T19:14:43Z", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "allow_rebase_merge": true, + "template_repository": null, + "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", + "allow_squash_merge": true, + "allow_auto_merge": false, + "delete_branch_on_merge": true, + "allow_merge_commit": true, + "subscribers_count": 42, + "network_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "url": "https://api.github.com/licenses/mit", + "spdx_id": "MIT", + "node_id": "MDc6TGljZW5zZW1pdA==", + "html_url": "https://github.com/licenses/mit" + }, + "forks": 1, + "open_issues": 1, + "watchers": 1 + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "repositories" + ], + "properties": { + "total_count": { + "type": "number" + }, + "repositories": { + "type": "array", + "items": { + "title": "Repository", + "description": "A repository on GitHub.", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier of the repository", + "type": "integer", + "examples": [ + 42 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "description": "The name of the repository.", + "type": "string", + "examples": [ + "Team Environment" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "license": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "License Simple", + "description": "License Simple", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "mit" + ] + }, + "name": { + "type": "string", + "examples": [ + "MIT License" + ] + }, + "url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "examples": [ + "https://api.github.com/licenses/mit" + ] + }, + "spdx_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "MIT" + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDc6TGljZW5zZW1pdA==" + ] + }, + "html_url": { + "type": "string", + "format": "uri" + } + }, + "required": [ + "key", + "name", + "url", + "spdx_id", + "node_id" + ] + } + ] + }, + "organization": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + } + ] + }, + "forks": { + "type": "integer" + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + } + }, + "required": [ + "admin", + "pull", + "push" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "description": "Whether the repository is private or public.", + "default": false, + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string", + "examples": [ + "git:github.com/octocat/Hello-World.git" + ] + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string", + "examples": [ + "git@github.com:octocat/Hello-World.git" + ] + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string", + "examples": [ + "https://github.com/octocat/Hello-World.git" + ] + }, + "mirror_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "examples": [ + "git:git.example.com/octocat/Hello-World" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://svn.github.com/octocat/Hello-World" + ] + }, + "homepage": { + "type": [ + "string", + "null" + ], + "format": "uri", + "examples": [ + "https://github.com" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer", + "examples": [ + 9 + ] + }, + "stargazers_count": { + "type": "integer", + "examples": [ + 80 + ] + }, + "watchers_count": { + "type": "integer", + "examples": [ + 80 + ] + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer", + "examples": [ + 108 + ] + }, + "default_branch": { + "description": "The default branch of the repository.", + "type": "string", + "examples": [ + "master" + ] + }, + "open_issues_count": { + "type": "integer", + "examples": [ + 0 + ] + }, + "is_template": { + "description": "Whether this repository acts as a template that can be used to generate new repositories.", + "default": false, + "type": "boolean", + "examples": [ + true + ] + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "description": "Whether issues are enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_projects": { + "description": "Whether projects are enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_wiki": { + "description": "Whether the wiki is enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "description": "Whether downloads are enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_discussions": { + "description": "Whether discussions are enabled.", + "default": false, + "type": "boolean", + "examples": [ + true + ] + }, + "archived": { + "description": "Whether the repository is archived.", + "default": false, + "type": "boolean" + }, + "disabled": { + "type": "boolean", + "description": "Returns whether or not this repository disabled." + }, + "visibility": { + "description": "The repository visibility: public, private, or internal.", + "default": "public", + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "allow_rebase_merge": { + "description": "Whether to allow rebase merges for pull requests.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "template_repository": { + "type": [ + "object", + "null" + ], + "properties": { + "id": { + "type": "integer" + }, + "node_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "owner": { + "type": "object", + "properties": { + "login": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "node_id": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "gravatar_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "html_url": { + "type": "string" + }, + "followers_url": { + "type": "string" + }, + "following_url": { + "type": "string" + }, + "gists_url": { + "type": "string" + }, + "starred_url": { + "type": "string" + }, + "subscriptions_url": { + "type": "string" + }, + "organizations_url": { + "type": "string" + }, + "repos_url": { + "type": "string" + }, + "events_url": { + "type": "string" + }, + "received_events_url": { + "type": "string" + }, + "type": { + "type": "string" + }, + "site_admin": { + "type": "boolean" + } + } + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "archive_url": { + "type": "string" + }, + "assignees_url": { + "type": "string" + }, + "blobs_url": { + "type": "string" + }, + "branches_url": { + "type": "string" + }, + "collaborators_url": { + "type": "string" + }, + "comments_url": { + "type": "string" + }, + "commits_url": { + "type": "string" + }, + "compare_url": { + "type": "string" + }, + "contents_url": { + "type": "string" + }, + "contributors_url": { + "type": "string" + }, + "deployments_url": { + "type": "string" + }, + "downloads_url": { + "type": "string" + }, + "events_url": { + "type": "string" + }, + "forks_url": { + "type": "string" + }, + "git_commits_url": { + "type": "string" + }, + "git_refs_url": { + "type": "string" + }, + "git_tags_url": { + "type": "string" + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string" + }, + "issue_events_url": { + "type": "string" + }, + "issues_url": { + "type": "string" + }, + "keys_url": { + "type": "string" + }, + "labels_url": { + "type": "string" + }, + "languages_url": { + "type": "string" + }, + "merges_url": { + "type": "string" + }, + "milestones_url": { + "type": "string" + }, + "notifications_url": { + "type": "string" + }, + "pulls_url": { + "type": "string" + }, + "releases_url": { + "type": "string" + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string" + }, + "statuses_url": { + "type": "string" + }, + "subscribers_url": { + "type": "string" + }, + "subscription_url": { + "type": "string" + }, + "tags_url": { + "type": "string" + }, + "teams_url": { + "type": "string" + }, + "trees_url": { + "type": "string" + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": "string" + }, + "hooks_url": { + "type": "string" + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": "string" + }, + "language": { + "type": "string" + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "allow_rebase_merge": { + "type": "boolean" + }, + "temp_clone_token": { + "type": "string" + }, + "allow_squash_merge": { + "type": "boolean" + }, + "allow_auto_merge": { + "type": "boolean" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "allow_update_branch": { + "type": "boolean" + }, + "use_squash_pr_title_as_default": { + "type": "boolean" + }, + "squash_merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "COMMIT_OR_PR_TITLE" + ], + "description": "The default value for a squash merge commit title:\n\n- `PR_TITLE` - default to the pull request's title.\n- `COMMIT_OR_PR_TITLE` - default to the commit's title (if only one commit) or the pull request's title (when more than one commit)." + }, + "squash_merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "COMMIT_MESSAGES", + "BLANK" + ], + "description": "The default value for a squash merge commit message:\n\n- `PR_BODY` - default to the pull request's body.\n- `COMMIT_MESSAGES` - default to the branch's commit messages.\n- `BLANK` - default to a blank commit message." + }, + "merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "MERGE_MESSAGE" + ], + "description": "The default value for a merge commit title.\n\n- `PR_TITLE` - default to the pull request's title.\n- `MERGE_MESSAGE` - default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name)." + }, + "merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "PR_TITLE", + "BLANK" + ], + "description": "The default value for a merge commit message.\n\n- `PR_TITLE` - default to the pull request's title.\n- `PR_BODY` - default to the pull request's body.\n- `BLANK` - default to a blank commit message." + }, + "allow_merge_commit": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + } + } + }, + "temp_clone_token": { + "type": "string" + }, + "allow_squash_merge": { + "description": "Whether to allow squash merges for pull requests.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "allow_auto_merge": { + "description": "Whether to allow Auto-merge to be used on pull requests.", + "default": false, + "type": "boolean", + "examples": [ + false + ] + }, + "delete_branch_on_merge": { + "description": "Whether to delete head branches when pull requests are merged", + "default": false, + "type": "boolean", + "examples": [ + false + ] + }, + "allow_update_branch": { + "description": "Whether or not a pull request head branch that is behind its base branch can always be updated even if it is not required to be up to date before merging.", + "default": false, + "type": "boolean", + "examples": [ + false + ] + }, + "use_squash_pr_title_as_default": { + "type": "boolean", + "description": "Whether a squash merge commit can use the pull request title as default. **This property has been deprecated. Please use `squash_merge_commit_title` instead.", + "default": false, + "deprecated": true + }, + "squash_merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "COMMIT_OR_PR_TITLE" + ], + "description": "The default value for a squash merge commit title:\n\n- `PR_TITLE` - default to the pull request's title.\n- `COMMIT_OR_PR_TITLE` - default to the commit's title (if only one commit) or the pull request's title (when more than one commit)." + }, + "squash_merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "COMMIT_MESSAGES", + "BLANK" + ], + "description": "The default value for a squash merge commit message:\n\n- `PR_BODY` - default to the pull request's body.\n- `COMMIT_MESSAGES` - default to the branch's commit messages.\n- `BLANK` - default to a blank commit message." + }, + "merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "MERGE_MESSAGE" + ], + "description": "The default value for a merge commit title.\n\n- `PR_TITLE` - default to the pull request's title.\n- `MERGE_MESSAGE` - default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name)." + }, + "merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "PR_TITLE", + "BLANK" + ], + "description": "The default value for a merge commit message.\n\n- `PR_TITLE` - default to the pull request's title.\n- `PR_BODY` - default to the pull request's body.\n- `BLANK` - default to a blank commit message." + }, + "allow_merge_commit": { + "description": "Whether to allow merge commits for pull requests.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "allow_forking": { + "description": "Whether to allow forking this repo", + "type": "boolean" + }, + "web_commit_signoff_required": { + "description": "Whether to require contributors to sign off on web-based commits", + "default": false, + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "open_issues": { + "type": "integer" + }, + "watchers": { + "type": "integer" + }, + "master_branch": { + "type": "string" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:42Z\"" + ] + }, + "anonymous_access_enabled": { + "type": "boolean", + "description": "Whether anonymous git access is enabled for this repository" + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url", + "clone_url", + "default_branch", + "forks", + "forks_count", + "git_url", + "has_downloads", + "has_issues", + "has_projects", + "has_wiki", + "has_pages", + "homepage", + "language", + "archived", + "disabled", + "mirror_url", + "open_issues", + "open_issues_count", + "license", + "pushed_at", + "size", + "ssh_url", + "stargazers_count", + "svn_url", + "watchers", + "watchers_count", + "created_at", + "updated_at" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

Lists the selected repositories that are configured for a required workflow in an organization. To use this endpoint, the required workflow must be configured to run on selected repositories.

\n

You must authenticate using an access token with the read:org scope to use this endpoint. GitHub Apps must have the administration organization permission to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Success

" + }, + { + "httpStatusCode": "404", + "description": "

Resource Not Found

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories", + "title": "Sets repositories for a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [ + { + "type": "array of integers", + "name": "selected_repository_ids", + "in": "body", + "description": "

The IDs of the repositories for which the workflow should be required.

", + "isRequired": true + } + ], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "contentType": "application/json", + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "bodyParameters": { + "selected_repository_ids": [ + 32, + 91 + ] + }, + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Response

" + } + } + ], + "previews": [], + "descriptionHTML": "

Sets the repositories for a required workflow that is required for selected repositories.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

No Content

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}", + "title": "Add a repository to a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repository_id", + "description": "

The unique identifier of the repository.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID", + "repository_id": "REPOSITORY_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Success

" + } + } + ], + "previews": [], + "descriptionHTML": "

Adds a repository to a required workflow. To use this endpoint, the required workflow must be configured to run on selected repositories.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

Success

" + }, + { + "httpStatusCode": "404", + "description": "

Resource Not Found

" + }, + { + "httpStatusCode": "422", + "description": "

Validation Error

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}", + "title": "Remove a selected repository from required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repository_id", + "description": "

The unique identifier of the repository.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID", + "repository_id": "REPOSITORY_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Success

" + } + } + ], + "previews": [], + "descriptionHTML": "

Removes a repository from a required workflow. To use this endpoint, the required workflow must be configured to run on selected repositories.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

Success

" + }, + { + "httpStatusCode": "404", + "description": "

Resource Not Found

" + }, + { + "httpStatusCode": "422", + "description": "

Validation Error

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows", + "title": "List repository required workflows", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "

The number of results per page (max 100).

", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "page", + "description": "

Page number of the results to fetch.

", + "in": "query", + "schema": { + "type": "integer", + "default": 1 + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "repo": "REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "total_count": 1, + "required_workflows": [ + { + "id": 161335, + "node_id": "MDg6V29ya2Zsb3cxNjEzMzU=", + "name": "RequiredCI", + "path": ".github/workflows/required_ci.yaml", + "state": "active", + "created_at": "2020-01-08T23:48:37.000-08:00", + "updated_at": "2020-01-08T23:50:21.000-08:00", + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/required_workflows/161335", + "html_url": "https://github.com/octo-org/octo-repo/blob/master/octo-org/hello-world/.github/workflows/required_ci.yaml", + "badge_url": "https://github.com/octo-org/octo-repo/workflows/required/octo-org/hello-world/.github/workflows/required_ci.yaml/badge.svg", + "source_repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octo-org/Hello-World", + "owner": { + "login": "octo-org", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octo-org_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octo-org", + "html_url": "https://github.com/octo-org", + "followers_url": "https://api.github.com/users/octo-org/followers", + "following_url": "https://api.github.com/users/octo-org/following{/other_user}", + "gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octo-org/subscriptions", + "organizations_url": "https://api.github.com/users/octo-org/orgs", + "repos_url": "https://api.github.com/users/octo-org/repos", + "events_url": "https://api.github.com/users/octo-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/octo-org/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octo-org/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octo-org/Hello-World", + "archive_url": "https://api.github.com/repos/octo-org/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octo-org/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octo-org/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octo-org/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octo-org/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octo-org/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octo-org/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octo-org/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octo-org/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octo-org/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octo-org/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octo-org/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octo-org/Hello-World/events", + "forks_url": "https://api.github.com/repos/octo-org/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octo-org/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octo-org/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octo-org/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octo-org/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octo-org/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octo-org/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octo-org/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octo-org/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octo-org/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octo-org/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octo-org/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octo-org/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octo-org/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octo-org/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octo-org/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octo-org/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octo-org/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octo-org/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octo-org/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octo-org/Hello-World/hooks" + } + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "required_workflows" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "required_workflows": { + "type": "array", + "items": { + "title": "Required workflow", + "description": "A GitHub Actions required workflow", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 5 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDg6V29ya2Zsb3cxMg==" + ] + }, + "name": { + "type": "string", + "examples": [ + "Required CI" + ] + }, + "path": { + "type": "string", + "examples": [ + ".github/workflows/required_ci.yaml" + ] + }, + "state": { + "type": "string", + "enum": [ + "active", + "deleted" + ], + "examples": [ + "active" + ] + }, + "source_repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "created_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "url": { + "type": "string", + "examples": [ + "https://api.github.com/repos/sample-org/sample-repo/actions/required_workflows/5" + ] + }, + "html_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/source-repo/blob/main/.github/workflows/required_ci.yaml" + ] + }, + "badge_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/sample-repo/workflows/required/sample-org/source-repo/.github/workflows/required_ci.yaml/badge.svg" + ] + } + }, + "required": [ + "id", + "node_id", + "name", + "path", + "state", + "source_repository", + "url", + "html_url", + "badge_url", + "created_at", + "updated_at" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

Lists the required workflows in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. GitHub Apps must have the actions:read permission to use this endpoint. For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}", + "title": "Get a required workflow entity for a repository", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id_for_repo", + "in": "path", + "description": "

The ID of the required workflow that has run at least once in a repository.

", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "repo": "REPO", + "required_workflow_id_for_repo": "REQUIRED_WORKFLOW_ID_FOR_REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 161335, + "node_id": "MDg6V29ya2Zsb3cxNjEzMzU=", + "name": "RequiredCI", + "path": ".github/workflows/required_ci.yaml", + "state": "active", + "created_at": "2020-01-08T23:48:37.000-08:00", + "updated_at": "2020-01-08T23:50:21.000-08:00", + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/required_workflows/161335", + "html_url": "https://github.com/octo-org/octo-repo/blob/master/octo-org/hello-world/.github/workflows/required_ci.yaml", + "badge_url": "https://github.com/octo-org/octo-repo/workflows/required/octo-org/hello-world/.github/workflows/required_ci.yaml/badge.svg", + "source_repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octo-org/Hello-World", + "owner": { + "login": "octo-org", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octo-org_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octo-org", + "html_url": "https://github.com/octo-org", + "followers_url": "https://api.github.com/users/octo-org/followers", + "following_url": "https://api.github.com/users/octo-org/following{/other_user}", + "gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octo-org/subscriptions", + "organizations_url": "https://api.github.com/users/octo-org/orgs", + "repos_url": "https://api.github.com/users/octo-org/repos", + "events_url": "https://api.github.com/users/octo-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/octo-org/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octo-org/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octo-org/Hello-World", + "archive_url": "https://api.github.com/repos/octo-org/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octo-org/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octo-org/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octo-org/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octo-org/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octo-org/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octo-org/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octo-org/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octo-org/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octo-org/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octo-org/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octo-org/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octo-org/Hello-World/events", + "forks_url": "https://api.github.com/repos/octo-org/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octo-org/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octo-org/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octo-org/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octo-org/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octo-org/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octo-org/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octo-org/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octo-org/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octo-org/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octo-org/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octo-org/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octo-org/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octo-org/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octo-org/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octo-org/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octo-org/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octo-org/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octo-org/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octo-org/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octo-org/Hello-World/hooks" + } + }, + "schema": { + "title": "Required workflow", + "description": "A GitHub Actions required workflow", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 5 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDg6V29ya2Zsb3cxMg==" + ] + }, + "name": { + "type": "string", + "examples": [ + "Required CI" + ] + }, + "path": { + "type": "string", + "examples": [ + ".github/workflows/required_ci.yaml" + ] + }, + "state": { + "type": "string", + "enum": [ + "active", + "deleted" + ], + "examples": [ + "active" + ] + }, + "source_repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "created_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "url": { + "type": "string", + "examples": [ + "https://api.github.com/repos/sample-org/sample-repo/actions/required_workflows/5" + ] + }, + "html_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/source-repo/blob/main/.github/workflows/required_ci.yaml" + ] + }, + "badge_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/sample-repo/workflows/required/sample-org/source-repo/.github/workflows/required_ci.yaml/badge.svg" + ] + } + }, + "required": [ + "id", + "node_id", + "name", + "path", + "state", + "source_repository", + "url", + "html_url", + "badge_url", + "created_at", + "updated_at" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Gets a specific required workflow present in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. GitHub Apps must have the actions:read permission to use this endpoint. For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/timing", + "title": "Get required workflow usage", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id_for_repo", + "in": "path", + "description": "

The ID of the required workflow that has run at least once in a repository.

", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": false, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "repo": "REPO", + "required_workflow_id_for_repo": "REQUIRED_WORKFLOW_ID_FOR_REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "billable": { + "UBUNTU": { + "total_ms": 180000 + }, + "MACOS": { + "total_ms": 240000 + }, + "WINDOWS": { + "total_ms": 300000 + } + } + }, + "schema": { + "title": "Workflow Usage", + "description": "Workflow Usage", + "type": "object", + "properties": { + "billable": { + "type": "object", + "properties": { + "UBUNTU": { + "type": "object", + "properties": { + "total_ms": { + "type": "integer" + } + } + }, + "MACOS": { + "type": "object", + "properties": { + "total_ms": { + "type": "integer" + } + } + }, + "WINDOWS": { + "type": "object", + "properties": { + "total_ms": { + "type": "integer" + } + } + } + } + } + }, + "required": [ + "billable" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Gets the number of billable minutes used by a specific required workflow during the current billing cycle.

\n

Billable minutes only apply to required workflows running in private repositories that use GitHub-hosted runners. Usage is listed for each GitHub-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see \"Managing billing for GitHub Actions.\"

\n

Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. GitHub Apps must have the actions:read permission to use this endpoint.

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + } + ] + } + ], "secrets": [ { "serverUrl": "https://api.github.com", @@ -30022,6 +38314,2751 @@ } ] }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs", + "title": "List workflow runs for a required workflow", + "category": "actions", + "subcategory": "workflow-runs", + "parameters": [ + { + "name": "owner", + "description": "

The account owner of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id_for_repo", + "in": "path", + "description": "

The ID of the required workflow that has run at least once in a repository.

", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "actor", + "description": "

Returns someone's workflow runs. Use the login for the user who created the push associated with the check suite or workflow run.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "branch", + "description": "

Returns workflow runs associated with a branch. Use the name of the branch of the push.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "event", + "description": "

Returns workflow run triggered by the event you specify. For example, push, pull_request or issue. For more information, see \"Events that trigger workflows.\"

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "status", + "description": "

Returns workflow runs with the check run status or conclusion that you specify. For example, a conclusion can be success or a status can be in_progress. Only GitHub can set a status of waiting or requested.

", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "completed", + "action_required", + "cancelled", + "failure", + "neutral", + "skipped", + "stale", + "success", + "timed_out", + "in_progress", + "queued", + "requested", + "waiting" + ] + } + }, + { + "name": "per_page", + "description": "

The number of results per page (max 100).

", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "page", + "description": "

Page number of the results to fetch.

", + "in": "query", + "schema": { + "type": "integer", + "default": 1 + } + }, + { + "name": "created", + "description": "

Returns workflow runs created within the given date-time range. For more information on the syntax, see \"Understanding the search syntax.\"

", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "exclude_pull_requests", + "description": "

If true pull requests are omitted from the response (empty array).

", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "check_suite_id", + "description": "

Returns workflow runs with the check_suite_id that you specify.

", + "in": "query", + "schema": { + "type": "integer" + } + }, + { + "name": "head_sha", + "description": "

Only returns workflow runs that are associated with the specified head_sha.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "owner": "OWNER", + "repo": "REPO", + "required_workflow_id_for_repo": "REQUIRED_WORKFLOW_ID_FOR_REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "total_count": 1, + "workflow_runs": [ + { + "id": 30433642, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "master", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "run_number": 562, + "event": "push", + "status": "queued", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433642", + "pull_requests": [], + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "run_started_at": "2020-01-22T19:33:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/rerun", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:33:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "workflow_runs" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "workflow_runs": { + "type": "array", + "items": { + "title": "Workflow Run", + "description": "An invocation of a workflow", + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "The ID of the workflow run.", + "examples": [ + 5 + ] + }, + "name": { + "type": [ + "string", + "null" + ], + "description": "The name of the workflow run.", + "examples": [ + "Build" + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOkNoZWNrU3VpdGU1" + ] + }, + "check_suite_id": { + "type": "integer", + "description": "The ID of the associated check suite.", + "examples": [ + 42 + ] + }, + "check_suite_node_id": { + "type": "string", + "description": "The node ID of the associated check suite.", + "examples": [ + "MDEwOkNoZWNrU3VpdGU0Mg==" + ] + }, + "head_branch": { + "type": [ + "string", + "null" + ], + "examples": [ + "master" + ] + }, + "head_sha": { + "description": "The SHA of the head commit that points to the version of the workflow being run.", + "type": "string", + "examples": [ + "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + ] + }, + "path": { + "description": "The full path of the workflow", + "type": "string", + "examples": [ + "octocat/octo-repo/.github/workflows/ci.yml@main" + ] + }, + "run_number": { + "type": "integer", + "description": "The auto incrementing run number for the workflow run.", + "examples": [ + 106 + ] + }, + "run_attempt": { + "type": "integer", + "description": "Attempt number of the run, 1 for first attempt and higher if the workflow was re-run.", + "examples": [ + 1 + ] + }, + "referenced_workflows": { + "type": [ + "array", + "null" + ], + "items": { + "title": "Referenced workflow", + "description": "A workflow referenced/reused by the initial caller workflow", + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "sha": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "required": [ + "path", + "sha" + ] + } + }, + "event": { + "type": "string", + "examples": [ + "push" + ] + }, + "status": { + "type": [ + "string", + "null" + ], + "examples": [ + "completed" + ] + }, + "conclusion": { + "type": [ + "string", + "null" + ], + "examples": [ + "neutral" + ] + }, + "workflow_id": { + "type": "integer", + "description": "The ID of the parent workflow.", + "examples": [ + 5 + ] + }, + "url": { + "type": "string", + "description": "The URL to the workflow run.", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5" + ] + }, + "html_url": { + "type": "string", + "examples": [ + "https://github.com/github/hello-world/suites/4" + ] + }, + "pull_requests": { + "type": [ + "array", + "null" + ], + "items": { + "title": "Pull Request Minimal", + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "number": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "head": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "sha": { + "type": "string" + }, + "repo": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "name" + ] + } + }, + "required": [ + "ref", + "sha", + "repo" + ] + }, + "base": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "sha": { + "type": "string" + }, + "repo": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "name" + ] + } + }, + "required": [ + "ref", + "sha", + "repo" + ] + } + }, + "required": [ + "id", + "number", + "url", + "head", + "base" + ] + } + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "actor": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "triggering_actor": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "run_started_at": { + "type": "string", + "format": "date-time", + "description": "The start time of the latest run. Resets on re-run." + }, + "jobs_url": { + "description": "The URL to the jobs for the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/jobs" + ] + }, + "logs_url": { + "description": "The URL to download the logs for the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/logs" + ] + }, + "check_suite_url": { + "description": "The URL to the associated check suite.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/check-suites/12" + ] + }, + "artifacts_url": { + "description": "The URL to the artifacts for the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun/artifacts" + ] + }, + "cancel_url": { + "description": "The URL to cancel the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/cancel" + ] + }, + "rerun_url": { + "description": "The URL to rerun the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun" + ] + }, + "previous_attempt_url": { + "description": "The URL to the previous attempted run of this workflow, if one exists.", + "type": [ + "string", + "null" + ], + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/attempts/3" + ] + }, + "workflow_url": { + "description": "The URL to the workflow.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/workflows/main.yaml" + ] + }, + "head_commit": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Simple Commit", + "description": "A commit.", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "tree_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "author": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ] + }, + "committer": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ] + } + }, + "required": [ + "id", + "tree_id", + "message", + "timestamp", + "author", + "committer" + ] + } + ] + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "head_repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "head_repository_id": { + "type": "integer", + "examples": [ + 5 + ] + }, + "display_title": { + "type": "string", + "description": "The event-specific title associated with the run or the run-name if set, or the value of `run-name` if it is set in the workflow.", + "examples": [ + "Simple Workflow" + ] + } + }, + "required": [ + "id", + "node_id", + "head_branch", + "run_number", + "display_title", + "event", + "status", + "conclusion", + "head_sha", + "path", + "workflow_id", + "url", + "html_url", + "created_at", + "updated_at", + "head_commit", + "head_repository", + "repository", + "jobs_url", + "logs_url", + "check_suite_url", + "cancel_url", + "rerun_url", + "artifacts_url", + "workflow_url", + "pull_requests" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

List all workflow runs for a required workflow. You can use parameters to narrow the list of results. For more information about using parameters, see Parameters.

\n

Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + } + ] + }, { "serverUrl": "https://api.github.com", "verb": "get", @@ -200166,7 +211203,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -226282,7 +237319,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -459254,7 +470291,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -459320,7 +470357,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -469499,7 +480536,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/ghec.2022-11-28.json b/lib/rest/static/decorated/ghec.2022-11-28.json index 9bbeec0709..0b89018a58 100644 --- a/lib/rest/static/decorated/ghec.2022-11-28.json +++ b/lib/rest/static/decorated/ghec.2022-11-28.json @@ -5808,6 +5808,8298 @@ ] } ], + "required-workflows": [ + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows", + "title": "List required workflows", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "

The number of results per page (max 100).

", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "page", + "description": "

Page number of the results to fetch.

", + "in": "query", + "schema": { + "type": "integer", + "default": 1 + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "total_count": 2, + "required_workflows": [ + { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/organizations/org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + { + "id": 30433643, + "name": "Required Linter", + "path": ".github/workflows/lint.yml", + "scope": "all", + "ref": "refs/head/main", + "state": "active", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "required_workflows" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "required_workflows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

List all required workflows in an organization.

\n

You must authenticate using an access token with the read:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "post", + "requestPath": "/orgs/{org}/actions/required_workflows", + "title": "Create a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [ + { + "type": "string", + "name": "workflow_file_path", + "in": "body", + "description": "

Path of the workflow file to be configured as a required workflow.

", + "isRequired": true + }, + { + "type": "string", + "name": "repository_id", + "in": "body", + "description": "

The ID of the repository that contains the workflow file.

", + "isRequired": true + }, + { + "type": "string", + "name": "scope", + "in": "body", + "description": "

Enable the required workflow for all repositories or selected repositories in the organization.

", + "enum": [ + "selected", + "all" + ], + "default": "all" + }, + { + "type": "array of integers", + "name": "selected_repository_ids", + "in": "body", + "description": "

A list of repository IDs where you want to enable the required workflow. You can only provide a list of repository ids when the scope is set to selected.

" + } + ], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "contentType": "application/json", + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "bodyParameters": { + "workflow_file_path": ".github/workflows/ci.yaml", + "repository_id": 53, + "scope": "selected", + "selected_repository_ids": [ + 32, + 91 + ] + }, + "parameters": { + "org": "ORG" + } + }, + "response": { + "statusCode": "201", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Create a required workflow in an organization.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "201", + "description": "

Created

" + }, + { + "httpStatusCode": "422", + "description": "

Validation failed, or the endpoint has been spammed.

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}", + "title": "Get a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Get a required workflow configured in an organization.

\n

You must authenticate using an access token with the read:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "patch", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}", + "title": "Update a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [ + { + "type": "string", + "name": "workflow_file_path", + "in": "body", + "description": "

Path of the workflow file to be configured as a required workflow.

" + }, + { + "type": "string", + "name": "repository_id", + "in": "body", + "description": "

The ID of the repository that contains the workflow file.

" + }, + { + "type": "string", + "name": "scope", + "in": "body", + "description": "

Enable the required workflow for all repositories or selected repositories in the organization.

", + "enum": [ + "selected", + "all" + ], + "default": "all" + }, + { + "type": "array of integers", + "name": "selected_repository_ids", + "in": "body", + "description": "

A list of repository IDs where you want to enable the required workflow. A list of repository IDs where you want to enable the required workflow. You can only provide a list of repository ids when the scope is set to selected.

" + } + ], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "contentType": "application/json", + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "bodyParameters": { + "workflow_file_path": ".github/workflows/ci.yaml", + "repository_id": 53, + "scope": "selected", + "selected_repository_ids": [ + 32, + 91 + ] + }, + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 30433642, + "name": "Required CI", + "path": ".github/workflows/ci.yml", + "scope": "selected", + "ref": "refs/head/main", + "state": "active", + "selected_repositories_url": "https://api.github.com/orgs/octo-org/actions/required_workflows/1/repositories", + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "description": "Unique identifier for a required workflow", + "type": "number" + }, + "name": { + "description": "Name present in the workflow file", + "type": "string" + }, + "path": { + "description": "Path of the workflow file", + "type": "string" + }, + "scope": { + "description": "Scope of the required workflow", + "enum": [ + "all", + "selected" + ], + "type": "string" + }, + "ref": { + "description": "Ref at which the workflow file will be selected", + "type": "string" + }, + "state": { + "description": "State of the required workflow", + "enum": [ + "active", + "deleted" + ], + "type": "string" + }, + "selected_repositories_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/organizations/org/actions/required_workflows/1/repositories" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + } + }, + "required": [ + "id", + "name", + "path", + "scope", + "ref", + "state", + "created_at", + "updated_at", + "repository" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Update a required workflow in an organization.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "422", + "description": "

Validation failed, or the endpoint has been spammed.

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}", + "title": "Delete a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Response

" + } + } + ], + "previews": [], + "descriptionHTML": "

Deletes a required workflow configured in an organization.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

No Content

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories", + "title": "List selected repositories for a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Success

", + "example": { + "total_count": 1, + "repositories": [ + { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "clone_url": "https://github.com/octocat/Hello-World.git", + "mirror_url": "git:git.example.com/octocat/Hello-World", + "hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks", + "svn_url": "https://svn.github.com/octocat/Hello-World", + "homepage": "https://github.com", + "language": null, + "forks_count": 9, + "stargazers_count": 80, + "watchers_count": 80, + "size": 108, + "default_branch": "master", + "open_issues_count": 0, + "is_template": true, + "topics": [ + "octocat", + "atom", + "electron", + "api" + ], + "has_issues": true, + "has_projects": true, + "has_wiki": true, + "has_pages": false, + "has_downloads": true, + "archived": false, + "disabled": false, + "visibility": "public", + "pushed_at": "2011-01-26T19:06:43Z", + "created_at": "2011-01-26T19:01:12Z", + "updated_at": "2011-01-26T19:14:43Z", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "allow_rebase_merge": true, + "template_repository": null, + "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", + "allow_squash_merge": true, + "allow_auto_merge": false, + "delete_branch_on_merge": true, + "allow_merge_commit": true, + "subscribers_count": 42, + "network_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "url": "https://api.github.com/licenses/mit", + "spdx_id": "MIT", + "node_id": "MDc6TGljZW5zZW1pdA==", + "html_url": "https://github.com/licenses/mit" + }, + "forks": 1, + "open_issues": 1, + "watchers": 1 + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "repositories" + ], + "properties": { + "total_count": { + "type": "number" + }, + "repositories": { + "type": "array", + "items": { + "title": "Repository", + "description": "A repository on GitHub.", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier of the repository", + "type": "integer", + "examples": [ + 42 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "description": "The name of the repository.", + "type": "string", + "examples": [ + "Team Environment" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "license": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "License Simple", + "description": "License Simple", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "mit" + ] + }, + "name": { + "type": "string", + "examples": [ + "MIT License" + ] + }, + "url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "examples": [ + "https://api.github.com/licenses/mit" + ] + }, + "spdx_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "MIT" + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDc6TGljZW5zZW1pdA==" + ] + }, + "html_url": { + "type": "string", + "format": "uri" + } + }, + "required": [ + "key", + "name", + "url", + "spdx_id", + "node_id" + ] + } + ] + }, + "organization": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + } + ] + }, + "forks": { + "type": "integer" + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + } + }, + "required": [ + "admin", + "pull", + "push" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "description": "Whether the repository is private or public.", + "default": false, + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string", + "examples": [ + "git:github.com/octocat/Hello-World.git" + ] + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string", + "examples": [ + "git@github.com:octocat/Hello-World.git" + ] + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string", + "examples": [ + "https://github.com/octocat/Hello-World.git" + ] + }, + "mirror_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "examples": [ + "git:git.example.com/octocat/Hello-World" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://svn.github.com/octocat/Hello-World" + ] + }, + "homepage": { + "type": [ + "string", + "null" + ], + "format": "uri", + "examples": [ + "https://github.com" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer", + "examples": [ + 9 + ] + }, + "stargazers_count": { + "type": "integer", + "examples": [ + 80 + ] + }, + "watchers_count": { + "type": "integer", + "examples": [ + 80 + ] + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer", + "examples": [ + 108 + ] + }, + "default_branch": { + "description": "The default branch of the repository.", + "type": "string", + "examples": [ + "master" + ] + }, + "open_issues_count": { + "type": "integer", + "examples": [ + 0 + ] + }, + "is_template": { + "description": "Whether this repository acts as a template that can be used to generate new repositories.", + "default": false, + "type": "boolean", + "examples": [ + true + ] + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "description": "Whether issues are enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_projects": { + "description": "Whether projects are enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_wiki": { + "description": "Whether the wiki is enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "description": "Whether downloads are enabled.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "has_discussions": { + "description": "Whether discussions are enabled.", + "default": false, + "type": "boolean", + "examples": [ + true + ] + }, + "archived": { + "description": "Whether the repository is archived.", + "default": false, + "type": "boolean" + }, + "disabled": { + "type": "boolean", + "description": "Returns whether or not this repository disabled." + }, + "visibility": { + "description": "The repository visibility: public, private, or internal.", + "default": "public", + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "allow_rebase_merge": { + "description": "Whether to allow rebase merges for pull requests.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "template_repository": { + "type": [ + "object", + "null" + ], + "properties": { + "id": { + "type": "integer" + }, + "node_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "owner": { + "type": "object", + "properties": { + "login": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "node_id": { + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "gravatar_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "html_url": { + "type": "string" + }, + "followers_url": { + "type": "string" + }, + "following_url": { + "type": "string" + }, + "gists_url": { + "type": "string" + }, + "starred_url": { + "type": "string" + }, + "subscriptions_url": { + "type": "string" + }, + "organizations_url": { + "type": "string" + }, + "repos_url": { + "type": "string" + }, + "events_url": { + "type": "string" + }, + "received_events_url": { + "type": "string" + }, + "type": { + "type": "string" + }, + "site_admin": { + "type": "boolean" + } + } + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "archive_url": { + "type": "string" + }, + "assignees_url": { + "type": "string" + }, + "blobs_url": { + "type": "string" + }, + "branches_url": { + "type": "string" + }, + "collaborators_url": { + "type": "string" + }, + "comments_url": { + "type": "string" + }, + "commits_url": { + "type": "string" + }, + "compare_url": { + "type": "string" + }, + "contents_url": { + "type": "string" + }, + "contributors_url": { + "type": "string" + }, + "deployments_url": { + "type": "string" + }, + "downloads_url": { + "type": "string" + }, + "events_url": { + "type": "string" + }, + "forks_url": { + "type": "string" + }, + "git_commits_url": { + "type": "string" + }, + "git_refs_url": { + "type": "string" + }, + "git_tags_url": { + "type": "string" + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string" + }, + "issue_events_url": { + "type": "string" + }, + "issues_url": { + "type": "string" + }, + "keys_url": { + "type": "string" + }, + "labels_url": { + "type": "string" + }, + "languages_url": { + "type": "string" + }, + "merges_url": { + "type": "string" + }, + "milestones_url": { + "type": "string" + }, + "notifications_url": { + "type": "string" + }, + "pulls_url": { + "type": "string" + }, + "releases_url": { + "type": "string" + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string" + }, + "statuses_url": { + "type": "string" + }, + "subscribers_url": { + "type": "string" + }, + "subscription_url": { + "type": "string" + }, + "tags_url": { + "type": "string" + }, + "teams_url": { + "type": "string" + }, + "trees_url": { + "type": "string" + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": "string" + }, + "hooks_url": { + "type": "string" + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": "string" + }, + "language": { + "type": "string" + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "allow_rebase_merge": { + "type": "boolean" + }, + "temp_clone_token": { + "type": "string" + }, + "allow_squash_merge": { + "type": "boolean" + }, + "allow_auto_merge": { + "type": "boolean" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "allow_update_branch": { + "type": "boolean" + }, + "use_squash_pr_title_as_default": { + "type": "boolean" + }, + "squash_merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "COMMIT_OR_PR_TITLE" + ], + "description": "The default value for a squash merge commit title:\n\n- `PR_TITLE` - default to the pull request's title.\n- `COMMIT_OR_PR_TITLE` - default to the commit's title (if only one commit) or the pull request's title (when more than one commit)." + }, + "squash_merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "COMMIT_MESSAGES", + "BLANK" + ], + "description": "The default value for a squash merge commit message:\n\n- `PR_BODY` - default to the pull request's body.\n- `COMMIT_MESSAGES` - default to the branch's commit messages.\n- `BLANK` - default to a blank commit message." + }, + "merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "MERGE_MESSAGE" + ], + "description": "The default value for a merge commit title.\n\n- `PR_TITLE` - default to the pull request's title.\n- `MERGE_MESSAGE` - default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name)." + }, + "merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "PR_TITLE", + "BLANK" + ], + "description": "The default value for a merge commit message.\n\n- `PR_TITLE` - default to the pull request's title.\n- `PR_BODY` - default to the pull request's body.\n- `BLANK` - default to a blank commit message." + }, + "allow_merge_commit": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + } + } + }, + "temp_clone_token": { + "type": "string" + }, + "allow_squash_merge": { + "description": "Whether to allow squash merges for pull requests.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "allow_auto_merge": { + "description": "Whether to allow Auto-merge to be used on pull requests.", + "default": false, + "type": "boolean", + "examples": [ + false + ] + }, + "delete_branch_on_merge": { + "description": "Whether to delete head branches when pull requests are merged", + "default": false, + "type": "boolean", + "examples": [ + false + ] + }, + "allow_update_branch": { + "description": "Whether or not a pull request head branch that is behind its base branch can always be updated even if it is not required to be up to date before merging.", + "default": false, + "type": "boolean", + "examples": [ + false + ] + }, + "use_squash_pr_title_as_default": { + "type": "boolean", + "description": "Whether a squash merge commit can use the pull request title as default. **This property has been deprecated. Please use `squash_merge_commit_title` instead.", + "default": false, + "deprecated": true + }, + "squash_merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "COMMIT_OR_PR_TITLE" + ], + "description": "The default value for a squash merge commit title:\n\n- `PR_TITLE` - default to the pull request's title.\n- `COMMIT_OR_PR_TITLE` - default to the commit's title (if only one commit) or the pull request's title (when more than one commit)." + }, + "squash_merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "COMMIT_MESSAGES", + "BLANK" + ], + "description": "The default value for a squash merge commit message:\n\n- `PR_BODY` - default to the pull request's body.\n- `COMMIT_MESSAGES` - default to the branch's commit messages.\n- `BLANK` - default to a blank commit message." + }, + "merge_commit_title": { + "type": "string", + "enum": [ + "PR_TITLE", + "MERGE_MESSAGE" + ], + "description": "The default value for a merge commit title.\n\n- `PR_TITLE` - default to the pull request's title.\n- `MERGE_MESSAGE` - default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name)." + }, + "merge_commit_message": { + "type": "string", + "enum": [ + "PR_BODY", + "PR_TITLE", + "BLANK" + ], + "description": "The default value for a merge commit message.\n\n- `PR_TITLE` - default to the pull request's title.\n- `PR_BODY` - default to the pull request's body.\n- `BLANK` - default to a blank commit message." + }, + "allow_merge_commit": { + "description": "Whether to allow merge commits for pull requests.", + "default": true, + "type": "boolean", + "examples": [ + true + ] + }, + "allow_forking": { + "description": "Whether to allow forking this repo", + "type": "boolean" + }, + "web_commit_signoff_required": { + "description": "Whether to require contributors to sign off on web-based commits", + "default": false, + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "open_issues": { + "type": "integer" + }, + "watchers": { + "type": "integer" + }, + "master_branch": { + "type": "string" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:42Z\"" + ] + }, + "anonymous_access_enabled": { + "type": "boolean", + "description": "Whether anonymous git access is enabled for this repository" + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url", + "clone_url", + "default_branch", + "forks", + "forks_count", + "git_url", + "has_downloads", + "has_issues", + "has_projects", + "has_wiki", + "has_pages", + "homepage", + "language", + "archived", + "disabled", + "mirror_url", + "open_issues", + "open_issues_count", + "license", + "pushed_at", + "size", + "ssh_url", + "stargazers_count", + "svn_url", + "watchers", + "watchers_count", + "created_at", + "updated_at" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

Lists the selected repositories that are configured for a required workflow in an organization. To use this endpoint, the required workflow must be configured to run on selected repositories.

\n

You must authenticate using an access token with the read:org scope to use this endpoint. GitHub Apps must have the administration organization permission to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Success

" + }, + { + "httpStatusCode": "404", + "description": "

Resource Not Found

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories", + "title": "Sets repositories for a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [ + { + "type": "array of integers", + "name": "selected_repository_ids", + "in": "body", + "description": "

The IDs of the repositories for which the workflow should be required.

", + "isRequired": true + } + ], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "contentType": "application/json", + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "bodyParameters": { + "selected_repository_ids": [ + 32, + 91 + ] + }, + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Response

" + } + } + ], + "previews": [], + "descriptionHTML": "

Sets the repositories for a required workflow that is required for selected repositories.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

No Content

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "put", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}", + "title": "Add a repository to a required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repository_id", + "description": "

The unique identifier of the repository.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID", + "repository_id": "REPOSITORY_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Success

" + } + } + ], + "previews": [], + "descriptionHTML": "

Adds a repository to a required workflow. To use this endpoint, the required workflow must be configured to run on selected repositories.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

Success

" + }, + { + "httpStatusCode": "404", + "description": "

Resource Not Found

" + }, + { + "httpStatusCode": "422", + "description": "

Validation Error

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "delete", + "requestPath": "/orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}", + "title": "Remove a selected repository from required workflow", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id", + "description": "

The unique identifier of the required workflow.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "repository_id", + "description": "

The unique identifier of the repository.

", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "required_workflow_id": "REQUIRED_WORKFLOW_ID", + "repository_id": "REPOSITORY_ID" + } + }, + "response": { + "statusCode": "204", + "description": "

Success

" + } + } + ], + "previews": [], + "descriptionHTML": "

Removes a repository from a required workflow. To use this endpoint, the required workflow must be configured to run on selected repositories.

\n

You must authenticate using an access token with the admin:org scope to use this endpoint.

\n

For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "204", + "description": "

Success

" + }, + { + "httpStatusCode": "404", + "description": "

Resource Not Found

" + }, + { + "httpStatusCode": "422", + "description": "

Validation Error

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows", + "title": "List repository required workflows", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "

The number of results per page (max 100).

", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "page", + "description": "

Page number of the results to fetch.

", + "in": "query", + "schema": { + "type": "integer", + "default": 1 + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "repo": "REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "total_count": 1, + "required_workflows": [ + { + "id": 161335, + "node_id": "MDg6V29ya2Zsb3cxNjEzMzU=", + "name": "RequiredCI", + "path": ".github/workflows/required_ci.yaml", + "state": "active", + "created_at": "2020-01-08T23:48:37.000-08:00", + "updated_at": "2020-01-08T23:50:21.000-08:00", + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/required_workflows/161335", + "html_url": "https://github.com/octo-org/octo-repo/blob/master/octo-org/hello-world/.github/workflows/required_ci.yaml", + "badge_url": "https://github.com/octo-org/octo-repo/workflows/required/octo-org/hello-world/.github/workflows/required_ci.yaml/badge.svg", + "source_repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octo-org/Hello-World", + "owner": { + "login": "octo-org", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octo-org_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octo-org", + "html_url": "https://github.com/octo-org", + "followers_url": "https://api.github.com/users/octo-org/followers", + "following_url": "https://api.github.com/users/octo-org/following{/other_user}", + "gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octo-org/subscriptions", + "organizations_url": "https://api.github.com/users/octo-org/orgs", + "repos_url": "https://api.github.com/users/octo-org/repos", + "events_url": "https://api.github.com/users/octo-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/octo-org/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octo-org/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octo-org/Hello-World", + "archive_url": "https://api.github.com/repos/octo-org/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octo-org/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octo-org/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octo-org/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octo-org/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octo-org/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octo-org/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octo-org/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octo-org/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octo-org/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octo-org/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octo-org/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octo-org/Hello-World/events", + "forks_url": "https://api.github.com/repos/octo-org/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octo-org/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octo-org/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octo-org/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octo-org/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octo-org/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octo-org/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octo-org/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octo-org/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octo-org/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octo-org/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octo-org/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octo-org/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octo-org/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octo-org/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octo-org/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octo-org/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octo-org/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octo-org/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octo-org/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octo-org/Hello-World/hooks" + } + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "required_workflows" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "required_workflows": { + "type": "array", + "items": { + "title": "Required workflow", + "description": "A GitHub Actions required workflow", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 5 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDg6V29ya2Zsb3cxMg==" + ] + }, + "name": { + "type": "string", + "examples": [ + "Required CI" + ] + }, + "path": { + "type": "string", + "examples": [ + ".github/workflows/required_ci.yaml" + ] + }, + "state": { + "type": "string", + "enum": [ + "active", + "deleted" + ], + "examples": [ + "active" + ] + }, + "source_repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "created_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "url": { + "type": "string", + "examples": [ + "https://api.github.com/repos/sample-org/sample-repo/actions/required_workflows/5" + ] + }, + "html_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/source-repo/blob/main/.github/workflows/required_ci.yaml" + ] + }, + "badge_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/sample-repo/workflows/required/sample-org/source-repo/.github/workflows/required_ci.yaml/badge.svg" + ] + } + }, + "required": [ + "id", + "node_id", + "name", + "path", + "state", + "source_repository", + "url", + "html_url", + "badge_url", + "created_at", + "updated_at" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

Lists the required workflows in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. GitHub Apps must have the actions:read permission to use this endpoint. For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}", + "title": "Get a required workflow entity for a repository", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id_for_repo", + "in": "path", + "description": "

The ID of the required workflow that has run at least once in a repository.

", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "repo": "REPO", + "required_workflow_id_for_repo": "REQUIRED_WORKFLOW_ID_FOR_REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "id": 161335, + "node_id": "MDg6V29ya2Zsb3cxNjEzMzU=", + "name": "RequiredCI", + "path": ".github/workflows/required_ci.yaml", + "state": "active", + "created_at": "2020-01-08T23:48:37.000-08:00", + "updated_at": "2020-01-08T23:50:21.000-08:00", + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/required_workflows/161335", + "html_url": "https://github.com/octo-org/octo-repo/blob/master/octo-org/hello-world/.github/workflows/required_ci.yaml", + "badge_url": "https://github.com/octo-org/octo-repo/workflows/required/octo-org/hello-world/.github/workflows/required_ci.yaml/badge.svg", + "source_repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octo-org/Hello-World", + "owner": { + "login": "octo-org", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octo-org_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octo-org", + "html_url": "https://github.com/octo-org", + "followers_url": "https://api.github.com/users/octo-org/followers", + "following_url": "https://api.github.com/users/octo-org/following{/other_user}", + "gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octo-org/subscriptions", + "organizations_url": "https://api.github.com/users/octo-org/orgs", + "repos_url": "https://api.github.com/users/octo-org/repos", + "events_url": "https://api.github.com/users/octo-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/octo-org/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octo-org/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octo-org/Hello-World", + "archive_url": "https://api.github.com/repos/octo-org/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octo-org/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octo-org/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octo-org/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octo-org/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octo-org/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octo-org/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octo-org/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octo-org/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octo-org/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octo-org/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octo-org/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octo-org/Hello-World/events", + "forks_url": "https://api.github.com/repos/octo-org/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octo-org/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octo-org/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octo-org/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octo-org/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octo-org/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octo-org/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octo-org/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octo-org/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octo-org/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octo-org/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octo-org/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octo-org/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octo-org/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octo-org/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octo-org/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octo-org/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octo-org/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octo-org/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octo-org/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octo-org/Hello-World/hooks" + } + }, + "schema": { + "title": "Required workflow", + "description": "A GitHub Actions required workflow", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 5 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDg6V29ya2Zsb3cxMg==" + ] + }, + "name": { + "type": "string", + "examples": [ + "Required CI" + ] + }, + "path": { + "type": "string", + "examples": [ + ".github/workflows/required_ci.yaml" + ] + }, + "state": { + "type": "string", + "enum": [ + "active", + "deleted" + ], + "examples": [ + "active" + ] + }, + "source_repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "created_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time", + "examples": [ + "2019-12-06T14:20:20.000Z" + ] + }, + "url": { + "type": "string", + "examples": [ + "https://api.github.com/repos/sample-org/sample-repo/actions/required_workflows/5" + ] + }, + "html_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/source-repo/blob/main/.github/workflows/required_ci.yaml" + ] + }, + "badge_url": { + "type": "string", + "examples": [ + "https://github.com/sample-org/sample-repo/workflows/required/sample-org/source-repo/.github/workflows/required_ci.yaml/badge.svg" + ] + } + }, + "required": [ + "id", + "node_id", + "name", + "path", + "state", + "source_repository", + "url", + "html_url", + "badge_url", + "created_at", + "updated_at" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Gets a specific required workflow present in a repository. Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. GitHub Apps must have the actions:read permission to use this endpoint. For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + } + ] + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/timing", + "title": "Get required workflow usage", + "category": "actions", + "subcategory": "required-workflows", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id_for_repo", + "in": "path", + "description": "

The ID of the required workflow that has run at least once in a repository.

", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": false, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG", + "repo": "REPO", + "required_workflow_id_for_repo": "REQUIRED_WORKFLOW_ID_FOR_REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "billable": { + "UBUNTU": { + "total_ms": 180000 + }, + "MACOS": { + "total_ms": 240000 + }, + "WINDOWS": { + "total_ms": 300000 + } + } + }, + "schema": { + "title": "Workflow Usage", + "description": "Workflow Usage", + "type": "object", + "properties": { + "billable": { + "type": "object", + "properties": { + "UBUNTU": { + "type": "object", + "properties": { + "total_ms": { + "type": "integer" + } + } + }, + "MACOS": { + "type": "object", + "properties": { + "total_ms": { + "type": "integer" + } + } + }, + "WINDOWS": { + "type": "object", + "properties": { + "total_ms": { + "type": "integer" + } + } + } + } + } + }, + "required": [ + "billable" + ] + } + } + } + ], + "previews": [], + "descriptionHTML": "

Gets the number of billable minutes used by a specific required workflow during the current billing cycle.

\n

Billable minutes only apply to required workflows running in private repositories that use GitHub Enterprise Cloud-hosted runners. Usage is listed for each GitHub Enterprise Cloud-hosted runner operating system in milliseconds. Any job re-runs are also included in the usage. The usage does not include the multiplier for macOS and Windows runners and is not rounded up to the nearest whole minute. For more information, see \"Managing billing for GitHub Actions.\"

\n

Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. GitHub Apps must have the actions:read permission to use this endpoint.

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + } + ] + } + ], "secrets": [ { "serverUrl": "https://api.github.com", @@ -30143,6 +38435,2751 @@ } ] }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs", + "title": "List workflow runs for a required workflow", + "category": "actions", + "subcategory": "workflow-runs", + "parameters": [ + { + "name": "owner", + "description": "

The account owner of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "

The name of the repository. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "required_workflow_id_for_repo", + "in": "path", + "description": "

The ID of the required workflow that has run at least once in a repository.

", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "actor", + "description": "

Returns someone's workflow runs. Use the login for the user who created the push associated with the check suite or workflow run.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "branch", + "description": "

Returns workflow runs associated with a branch. Use the name of the branch of the push.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "event", + "description": "

Returns workflow run triggered by the event you specify. For example, push, pull_request or issue. For more information, see \"Events that trigger workflows.\"

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "status", + "description": "

Returns workflow runs with the check run status or conclusion that you specify. For example, a conclusion can be success or a status can be in_progress. Only GitHub can set a status of waiting or requested.

", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "completed", + "action_required", + "cancelled", + "failure", + "neutral", + "skipped", + "stale", + "success", + "timed_out", + "in_progress", + "queued", + "requested", + "waiting" + ] + } + }, + { + "name": "per_page", + "description": "

The number of results per page (max 100).

", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "page", + "description": "

Page number of the results to fetch.

", + "in": "query", + "schema": { + "type": "integer", + "default": 1 + } + }, + { + "name": "created", + "description": "

Returns workflow runs created within the given date-time range. For more information on the syntax, see \"Understanding the search syntax.\"

", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "exclude_pull_requests", + "description": "

If true pull requests are omitted from the response (empty array).

", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "check_suite_id", + "description": "

Returns workflow runs with the check_suite_id that you specify.

", + "in": "query", + "schema": { + "type": "integer" + } + }, + { + "name": "head_sha", + "description": "

Only returns workflow runs that are associated with the specified head_sha.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [], + "enabledForGitHubApps": true, + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "owner": "OWNER", + "repo": "REPO", + "required_workflow_id_for_repo": "REQUIRED_WORKFLOW_ID_FOR_REPO" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response

", + "example": { + "total_count": 1, + "workflow_runs": [ + { + "id": 30433642, + "name": "Build", + "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", + "check_suite_id": 42, + "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", + "head_branch": "master", + "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", + "run_number": 562, + "event": "push", + "status": "queued", + "conclusion": null, + "workflow_id": 159038, + "url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642", + "html_url": "https://github.com/octo-org/octo-repo/actions/runs/30433642", + "pull_requests": [], + "created_at": "2020-01-22T19:33:08Z", + "updated_at": "2020-01-22T19:33:08Z", + "actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "run_attempt": 1, + "run_started_at": "2020-01-22T19:33:08Z", + "triggering_actor": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "jobs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/jobs", + "logs_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/logs", + "check_suite_url": "https://api.github.com/repos/octo-org/octo-repo/check-suites/414944374", + "artifacts_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/artifacts", + "cancel_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/cancel", + "rerun_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/30433642/rerun", + "workflow_url": "https://api.github.com/repos/octo-org/octo-repo/actions/workflows/159038", + "head_commit": { + "id": "acb5820ced9479c074f688cc328bf03f341a511d", + "tree_id": "d23f6eedb1e1b9610bbc754ddb5197bfe7271223", + "message": "Create linter.yaml", + "timestamp": "2020-01-22T19:33:05Z", + "author": { + "name": "Octo Cat", + "email": "octocat@github.com" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com" + } + }, + "repository": { + "id": 1296269, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", + "name": "Hello-World", + "full_name": "octocat/Hello-World", + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/octocat/Hello-World", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/octocat/Hello-World", + "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", + "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", + "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", + "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", + "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", + "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", + "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", + "events_url": "https://api.github.com/repos/octocat/Hello-World/events", + "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", + "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", + "git_url": "git:github.com/octocat/Hello-World.git", + "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", + "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", + "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", + "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", + "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", + "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", + "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", + "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", + "ssh_url": "git@github.com:octocat/Hello-World.git", + "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", + "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", + "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", + "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", + "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", + "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", + "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" + }, + "head_repository": { + "id": 217723378, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTc3MjMzNzg=", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments" + } + } + ] + }, + "schema": { + "type": "object", + "required": [ + "total_count", + "workflow_runs" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "workflow_runs": { + "type": "array", + "items": { + "title": "Workflow Run", + "description": "An invocation of a workflow", + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "The ID of the workflow run.", + "examples": [ + 5 + ] + }, + "name": { + "type": [ + "string", + "null" + ], + "description": "The name of the workflow run.", + "examples": [ + "Build" + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOkNoZWNrU3VpdGU1" + ] + }, + "check_suite_id": { + "type": "integer", + "description": "The ID of the associated check suite.", + "examples": [ + 42 + ] + }, + "check_suite_node_id": { + "type": "string", + "description": "The node ID of the associated check suite.", + "examples": [ + "MDEwOkNoZWNrU3VpdGU0Mg==" + ] + }, + "head_branch": { + "type": [ + "string", + "null" + ], + "examples": [ + "master" + ] + }, + "head_sha": { + "description": "The SHA of the head commit that points to the version of the workflow being run.", + "type": "string", + "examples": [ + "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d" + ] + }, + "path": { + "description": "The full path of the workflow", + "type": "string", + "examples": [ + "octocat/octo-repo/.github/workflows/ci.yml@main" + ] + }, + "run_number": { + "type": "integer", + "description": "The auto incrementing run number for the workflow run.", + "examples": [ + 106 + ] + }, + "run_attempt": { + "type": "integer", + "description": "Attempt number of the run, 1 for first attempt and higher if the workflow was re-run.", + "examples": [ + 1 + ] + }, + "referenced_workflows": { + "type": [ + "array", + "null" + ], + "items": { + "title": "Referenced workflow", + "description": "A workflow referenced/reused by the initial caller workflow", + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "sha": { + "type": "string" + }, + "ref": { + "type": "string" + } + }, + "required": [ + "path", + "sha" + ] + } + }, + "event": { + "type": "string", + "examples": [ + "push" + ] + }, + "status": { + "type": [ + "string", + "null" + ], + "examples": [ + "completed" + ] + }, + "conclusion": { + "type": [ + "string", + "null" + ], + "examples": [ + "neutral" + ] + }, + "workflow_id": { + "type": "integer", + "description": "The ID of the parent workflow.", + "examples": [ + 5 + ] + }, + "url": { + "type": "string", + "description": "The URL to the workflow run.", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5" + ] + }, + "html_url": { + "type": "string", + "examples": [ + "https://github.com/github/hello-world/suites/4" + ] + }, + "pull_requests": { + "type": [ + "array", + "null" + ], + "items": { + "title": "Pull Request Minimal", + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "number": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "head": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "sha": { + "type": "string" + }, + "repo": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "name" + ] + } + }, + "required": [ + "ref", + "sha", + "repo" + ] + }, + "base": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "sha": { + "type": "string" + }, + "repo": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "name" + ] + } + }, + "required": [ + "ref", + "sha", + "repo" + ] + } + }, + "required": [ + "id", + "number", + "url", + "head", + "base" + ] + } + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "actor": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "triggering_actor": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "run_started_at": { + "type": "string", + "format": "date-time", + "description": "The start time of the latest run. Resets on re-run." + }, + "jobs_url": { + "description": "The URL to the jobs for the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/jobs" + ] + }, + "logs_url": { + "description": "The URL to download the logs for the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/logs" + ] + }, + "check_suite_url": { + "description": "The URL to the associated check suite.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/check-suites/12" + ] + }, + "artifacts_url": { + "description": "The URL to the artifacts for the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun/artifacts" + ] + }, + "cancel_url": { + "description": "The URL to cancel the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/cancel" + ] + }, + "rerun_url": { + "description": "The URL to rerun the workflow run.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/rerun" + ] + }, + "previous_attempt_url": { + "description": "The URL to the previous attempted run of this workflow, if one exists.", + "type": [ + "string", + "null" + ], + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/runs/5/attempts/3" + ] + }, + "workflow_url": { + "description": "The URL to the workflow.", + "type": "string", + "examples": [ + "https://api.github.com/repos/github/hello-world/actions/workflows/main.yaml" + ] + }, + "head_commit": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Simple Commit", + "description": "A commit.", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "tree_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "author": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ] + }, + "committer": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ] + } + }, + "required": [ + "id", + "tree_id", + "message", + "timestamp", + "author", + "committer" + ] + } + ] + }, + "repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "head_repository": { + "title": "Minimal Repository", + "description": "Minimal Repository", + "type": "object", + "properties": { + "id": { + "type": "integer", + "examples": [ + 1296269 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDEwOlJlcG9zaXRvcnkxMjk2MjY5" + ] + }, + "name": { + "type": "string", + "examples": [ + "Hello-World" + ] + }, + "full_name": { + "type": "string", + "examples": [ + "octocat/Hello-World" + ] + }, + "owner": { + "title": "Simple User", + "description": "A GitHub user.", + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "login": { + "type": "string", + "examples": [ + "octocat" + ] + }, + "id": { + "type": "integer", + "examples": [ + 1 + ] + }, + "node_id": { + "type": "string", + "examples": [ + "MDQ6VXNlcjE=" + ] + }, + "avatar_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/images/error/octocat_happy.gif" + ] + }, + "gravatar_id": { + "type": [ + "string", + "null" + ], + "examples": [ + "41d064eb2195891e12d0413f63227ea7" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat" + ] + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat" + ] + }, + "followers_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/followers" + ] + }, + "following_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/following{/other_user}" + ] + }, + "gists_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/gists{/gist_id}" + ] + }, + "starred_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/starred{/owner}{/repo}" + ] + }, + "subscriptions_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/subscriptions" + ] + }, + "organizations_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/orgs" + ] + }, + "repos_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/repos" + ] + }, + "events_url": { + "type": "string", + "examples": [ + "https://api.github.com/users/octocat/events{/privacy}" + ] + }, + "received_events_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/users/octocat/received_events" + ] + }, + "type": { + "type": "string", + "examples": [ + "User" + ] + }, + "site_admin": { + "type": "boolean" + }, + "starred_at": { + "type": "string", + "examples": [ + "\"2020-07-09T00:17:55Z\"" + ] + } + }, + "required": [ + "avatar_url", + "events_url", + "followers_url", + "following_url", + "gists_url", + "gravatar_id", + "html_url", + "id", + "node_id", + "login", + "organizations_url", + "received_events_url", + "repos_url", + "site_admin", + "starred_url", + "subscriptions_url", + "type", + "url" + ] + }, + "private": { + "type": "boolean" + }, + "html_url": { + "type": "string", + "format": "uri", + "examples": [ + "https://github.com/octocat/Hello-World" + ] + }, + "description": { + "type": [ + "string", + "null" + ], + "examples": [ + "This your first repo!" + ] + }, + "fork": { + "type": "boolean" + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/repos/octocat/Hello-World" + ] + }, + "archive_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}" + ] + }, + "assignees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/assignees{/user}" + ] + }, + "blobs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}" + ] + }, + "branches_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/branches{/branch}" + ] + }, + "collaborators_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}" + ] + }, + "comments_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/comments{/number}" + ] + }, + "commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/commits{/sha}" + ] + }, + "compare_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}" + ] + }, + "contents_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contents/{+path}" + ] + }, + "contributors_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/contributors" + ] + }, + "deployments_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/deployments" + ] + }, + "downloads_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/downloads" + ] + }, + "events_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/events" + ] + }, + "forks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/forks" + ] + }, + "git_commits_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/commits{/sha}" + ] + }, + "git_refs_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/refs{/sha}" + ] + }, + "git_tags_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/tags{/sha}" + ] + }, + "git_url": { + "type": "string" + }, + "issue_comment_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/comments{/number}" + ] + }, + "issue_events_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues/events{/number}" + ] + }, + "issues_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/issues{/number}" + ] + }, + "keys_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/keys{/key_id}" + ] + }, + "labels_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/labels{/name}" + ] + }, + "languages_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/languages" + ] + }, + "merges_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/merges" + ] + }, + "milestones_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/milestones{/number}" + ] + }, + "notifications_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}" + ] + }, + "pulls_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/pulls{/number}" + ] + }, + "releases_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/releases{/id}" + ] + }, + "ssh_url": { + "type": "string" + }, + "stargazers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/stargazers" + ] + }, + "statuses_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/statuses/{sha}" + ] + }, + "subscribers_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscribers" + ] + }, + "subscription_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/subscription" + ] + }, + "tags_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/tags" + ] + }, + "teams_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/teams" + ] + }, + "trees_url": { + "type": "string", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/git/trees{/sha}" + ] + }, + "clone_url": { + "type": "string" + }, + "mirror_url": { + "type": [ + "string", + "null" + ] + }, + "hooks_url": { + "type": "string", + "format": "uri", + "examples": [ + "http://api.github.com/repos/octocat/Hello-World/hooks" + ] + }, + "svn_url": { + "type": "string" + }, + "homepage": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "forks_count": { + "type": "integer" + }, + "stargazers_count": { + "type": "integer" + }, + "watchers_count": { + "type": "integer" + }, + "size": { + "description": "The size of the repository. Size is calculated hourly. When a repository is initially created, the size is 0.", + "type": "integer" + }, + "default_branch": { + "type": "string" + }, + "open_issues_count": { + "type": "integer" + }, + "is_template": { + "type": "boolean" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_issues": { + "type": "boolean" + }, + "has_projects": { + "type": "boolean" + }, + "has_wiki": { + "type": "boolean" + }, + "has_pages": { + "type": "boolean" + }, + "has_downloads": { + "type": "boolean" + }, + "has_discussions": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "visibility": { + "type": "string" + }, + "pushed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:06:43Z" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:01:12Z" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "examples": [ + "2011-01-26T19:14:43Z" + ] + }, + "permissions": { + "type": "object", + "properties": { + "admin": { + "type": "boolean" + }, + "maintain": { + "type": "boolean" + }, + "push": { + "type": "boolean" + }, + "triage": { + "type": "boolean" + }, + "pull": { + "type": "boolean" + } + } + }, + "role_name": { + "type": "string", + "examples": [ + "admin" + ] + }, + "temp_clone_token": { + "type": "string" + }, + "delete_branch_on_merge": { + "type": "boolean" + }, + "subscribers_count": { + "type": "integer" + }, + "network_count": { + "type": "integer" + }, + "code_of_conduct": { + "title": "Code Of Conduct", + "description": "Code Of Conduct", + "type": "object", + "properties": { + "key": { + "type": "string", + "examples": [ + "contributor_covenant" + ] + }, + "name": { + "type": "string", + "examples": [ + "Contributor Covenant" + ] + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://api.github.com/codes_of_conduct/contributor_covenant" + ] + }, + "body": { + "type": "string", + "examples": [ + "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response\n to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address,\n posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [EMAIL]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n" + ] + }, + "html_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "url", + "html_url", + "key", + "name" + ] + }, + "license": { + "type": [ + "object", + "null" + ], + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "spdx_id": { + "type": "string" + }, + "url": { + "type": "string" + }, + "node_id": { + "type": "string" + } + } + }, + "forks": { + "type": "integer", + "examples": [ + 0 + ] + }, + "open_issues": { + "type": "integer", + "examples": [ + 0 + ] + }, + "watchers": { + "type": "integer", + "examples": [ + 0 + ] + }, + "allow_forking": { + "type": "boolean" + }, + "web_commit_signoff_required": { + "type": "boolean", + "examples": [ + false + ] + }, + "security_and_analysis": { + "type": [ + "object", + "null" + ], + "properties": { + "advanced_security": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "secret_scanning_push_protection": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + } + } + } + } + } + }, + "required": [ + "archive_url", + "assignees_url", + "blobs_url", + "branches_url", + "collaborators_url", + "comments_url", + "commits_url", + "compare_url", + "contents_url", + "contributors_url", + "deployments_url", + "description", + "downloads_url", + "events_url", + "fork", + "forks_url", + "full_name", + "git_commits_url", + "git_refs_url", + "git_tags_url", + "hooks_url", + "html_url", + "id", + "node_id", + "issue_comment_url", + "issue_events_url", + "issues_url", + "keys_url", + "labels_url", + "languages_url", + "merges_url", + "milestones_url", + "name", + "notifications_url", + "owner", + "private", + "pulls_url", + "releases_url", + "stargazers_url", + "statuses_url", + "subscribers_url", + "subscription_url", + "tags_url", + "teams_url", + "trees_url", + "url" + ] + }, + "head_repository_id": { + "type": "integer", + "examples": [ + 5 + ] + }, + "display_title": { + "type": "string", + "description": "The event-specific title associated with the run or the run-name if set, or the value of `run-name` if it is set in the workflow.", + "examples": [ + "Simple Workflow" + ] + } + }, + "required": [ + "id", + "node_id", + "head_branch", + "run_number", + "display_title", + "event", + "status", + "conclusion", + "head_sha", + "path", + "workflow_id", + "url", + "html_url", + "created_at", + "updated_at", + "head_commit", + "head_repository", + "repository", + "jobs_url", + "logs_url", + "check_suite_url", + "cancel_url", + "rerun_url", + "artifacts_url", + "workflow_url", + "pull_requests" + ] + } + } + } + } + } + } + ], + "previews": [], + "descriptionHTML": "

List all workflow runs for a required workflow. You can use parameters to narrow the list of results. For more information about using parameters, see Parameters.

\n

Anyone with read access to the repository can use this endpoint. If the repository is private you must use an access token with the repo scope. For more information, see \"Required Workflows.\"

", + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

OK

" + } + ] + }, { "serverUrl": "https://api.github.com", "verb": "get", @@ -200803,7 +211840,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -226919,7 +237956,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -461431,7 +472468,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -461497,7 +472534,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -474162,7 +485199,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/ghes-3.3.json b/lib/rest/static/decorated/ghes-3.3.json index b20bf5c346..f2d1b0c043 100644 --- a/lib/rest/static/decorated/ghes-3.3.json +++ b/lib/rest/static/decorated/ghes-3.3.json @@ -141732,7 +141732,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -158480,7 +158480,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -373093,7 +373093,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -373159,7 +373159,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -382506,7 +382506,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/ghes-3.4.json b/lib/rest/static/decorated/ghes-3.4.json index cc60c75929..6bdef16f32 100644 --- a/lib/rest/static/decorated/ghes-3.4.json +++ b/lib/rest/static/decorated/ghes-3.4.json @@ -147142,7 +147142,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -166009,7 +166009,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -391454,7 +391454,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -391520,7 +391520,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -400867,7 +400867,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/ghes-3.5.json b/lib/rest/static/decorated/ghes-3.5.json index 118fafeacf..3c7afcdb55 100644 --- a/lib/rest/static/decorated/ghes-3.5.json +++ b/lib/rest/static/decorated/ghes-3.5.json @@ -154288,7 +154288,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -173167,7 +173167,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -398749,7 +398749,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -398815,7 +398815,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -408487,7 +408487,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/ghes-3.6.json b/lib/rest/static/decorated/ghes-3.6.json index 4990655081..5441352b87 100644 --- a/lib/rest/static/decorated/ghes-3.6.json +++ b/lib/rest/static/decorated/ghes-3.6.json @@ -156905,7 +156905,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -176205,7 +176205,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -409773,7 +409773,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -409839,7 +409839,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -419835,7 +419835,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/ghes-3.7.json b/lib/rest/static/decorated/ghes-3.7.json index 8c106220c7..36e3e7d5a7 100644 --- a/lib/rest/static/decorated/ghes-3.7.json +++ b/lib/rest/static/decorated/ghes-3.7.json @@ -159347,7 +159347,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -179026,7 +179026,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -413563,7 +413563,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -413629,7 +413629,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -423676,7 +423676,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/lib/rest/static/decorated/github.ae.json b/lib/rest/static/decorated/github.ae.json index 298277aceb..e659bcf5d0 100644 --- a/lib/rest/static/decorated/github.ae.json +++ b/lib/rest/static/decorated/github.ae.json @@ -120361,7 +120361,7 @@ }, { "name": "sha", - "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually master).

", + "description": "

SHA or branch to start listing commits from. Default: the repository’s default branch (usually main).

", "in": "query", "required": false, "schema": { @@ -137134,7 +137134,7 @@ } ], "previews": [], - "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", + "descriptionHTML": "

If the repository only has one deployment, you can delete the deployment regardless of its status. If the repository has more than one deployment, you can only delete inactive deployments. This ensures that repositories with multiple deployments will always have an active deployment. Anyone with repo or repo_deployment scopes can delete a deployment.

\n

To set a deployment as inactive, you must:

\n
    \n
  • Create a new deployment that is active so that the system has a record of the current state, then delete the previously active deployment.
  • \n
  • Mark the active deployment as inactive by adding any non-successful deployment status.
  • \n
\n

For more information, see \"Create a deployment\" and \"Create a deployment status.\"

", "statusCodes": [ { "httpStatusCode": "204", @@ -348587,7 +348587,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", + "descriptionHTML": "

Gets a redirect URL to download a tar archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.\nNote: For private repositories, these links are temporary and expire after five minutes.

", "statusCodes": [ { "httpStatusCode": "302", @@ -348653,7 +348653,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmaster) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", + "descriptionHTML": "

Gets a redirect URL to download a zip archive for a repository. If you omit :ref, the repository’s default branch (usually\nmain) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use\nthe Location header to make a second GET request.

\n

Note: For private repositories, these links are temporary and expire after five minutes. If the repository is empty, you will receive a 404 when you follow the redirect.

", "statusCodes": [ { "httpStatusCode": "302", @@ -358080,7 +358080,7 @@ } ], "previews": [], - "descriptionHTML": "

Find commits via various criteria on the default branch (usually master). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", + "descriptionHTML": "

Find commits via various criteria on the default branch (usually main). This method returns up to 100 results per page.

\n

When searching for commits, you can get text match metadata for the message field when you provide the text-match media type. For more details about how to receive highlighted search results, see Text match\nmetadata.

\n

For example, if you want to find commits related to CSS in the octocat/Spoon-Knife repository. Your query would look something like this:

\n

q=repo:octocat/Spoon-Knife+css

", "statusCodes": [ { "httpStatusCode": "200", From a9188ee4d1e1f1bd376e28ead98fc5fc9f7ed9d5 Mon Sep 17 00:00:00 2001 From: github-openapi-bot <69533958+github-openapi-bot@users.noreply.github.com> Date: Mon, 9 Jan 2023 01:38:40 -0800 Subject: [PATCH 05/41] Update OpenAPI Descriptions (#33825) Co-authored-by: github-openapi-bot From a5019c4ec7087dbca61fc6c50fd526f759cfc9a9 Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Mon, 9 Jan 2023 11:00:00 +0000 Subject: [PATCH 06/41] [Improvement] Document how to add a description to a multi-arch image (#33759) Co-authored-by: Lucas Costi --- .../publishing-docker-images.md | 2 +- .../working-with-the-container-registry.md | 42 +++++++++++++++++-- .../package_registry/about-annotation-keys.md | 1 + .../package_registry/about-docker-labels.md | 1 - 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 data/reusables/package_registry/about-annotation-keys.md delete mode 100644 data/reusables/package_registry/about-docker-labels.md diff --git a/content/actions/publishing-packages/publishing-docker-images.md b/content/actions/publishing-packages/publishing-docker-images.md index 8f521c2664..5fe4024a0a 100644 --- a/content/actions/publishing-packages/publishing-docker-images.md +++ b/content/actions/publishing-packages/publishing-docker-images.md @@ -47,7 +47,7 @@ This guide assumes that you have a complete definition for a Docker image stored {% ifversion fpt or ghec or ghes > 3.4 %} -{% data reusables.package_registry.about-docker-labels %} For more information, see "[Working with the {% data variables.product.prodname_container_registry %}](/packages/working-with-a-github-packages-registry/working-with-the-container-registry#labelling-container-images)." +{% data reusables.package_registry.about-annotation-keys %} For more information, see "[Working with the {% data variables.product.prodname_container_registry %}](/packages/working-with-a-github-packages-registry/working-with-the-container-registry#labelling-container-images)." {% endif %} diff --git a/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md b/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md index 6f00ec0d2e..b5072fae2c 100644 --- a/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md +++ b/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md @@ -139,17 +139,21 @@ This example builds the `hello_docker` image: ## Labelling container images -{% data reusables.package_registry.about-docker-labels %} For more information on Docker labels, see [LABEL](https://docs.docker.com/engine/reference/builder/#label) in the official Docker documentation and [Pre-Defined Annotation Keys](https://github.com/opencontainers/image-spec/blob/master/annotations.md#pre-defined-annotation-keys) in the `opencontainers/image-spec` repository. +{% data reusables.package_registry.about-annotation-keys %} Values for supported keys will appear on the package page for the image. -The following labels are supported in the {% data variables.product.prodname_container_registry %}. Supported labels will appear on the package page for the image. +For most images, you can use Docker labels to add the annotation keys to an image. For more information, see [LABEL](https://docs.docker.com/engine/reference/builder/#label) in the official Docker documentation and [Pre-Defined Annotation Keys](https://github.com/opencontainers/image-spec/blob/master/annotations.md#pre-defined-annotation-keys) in the `opencontainers/image-spec` repository. -Label | Description +For multi-arch images, you can add a description to the image by adding the appropriate annotation key to the `annotations` field in the image's manifest. For more information, see "[Adding a description to multi-arch images](#adding-a-description-to-multi-arch-images)." + +The following annotation keys are supported in the {% data variables.product.prodname_container_registry %}. + +Key | Description ------|------------ | `org.opencontainers.image.source` | The URL of the repository associated with the package. For more information, see "[Connecting a repository to a package](/packages/learn-github-packages/connecting-a-repository-to-a-package#connecting-a-repository-to-a-container-image-using-the-command-line)." | `org.opencontainers.image.description` | A text-only description limited to 512 characters. This description will appear on the package page, below the name of the package. | `org.opencontainers.image.licenses` | An SPDX license identifier such as "MIT," limited to 256 characters. The license will appear on the package page, in the "Details" sidebar. For more information, see [SPDX License List](https://spdx.org/licenses/). -To add labels to an image, we recommend using the `LABEL` instruction in your `Dockerfile`. For example, if you're the user `monalisa` and you own `my-repo`, and your image is distributed under the terms of the MIT license, you would add the following lines to your `Dockerfile`: +To add a key as a Docker label, we recommend using the `LABEL` instruction in your `Dockerfile`. For example, if you're the user `monalisa` and you own `my-repo`, and your image is distributed under the terms of the MIT license, you would add the following lines to your `Dockerfile`: ```dockerfile LABEL org.opencontainers.image.source=https://{% ifversion fpt or ghec %}github.com{% else %}HOSTNAME{% endif %}/monalisa/my-repo @@ -164,3 +168,33 @@ $ docker build \ --label "org.opencontainers.image.source=https://{% ifversion fpt or ghec %}github.com{% else %}HOSTNAME{% endif %}/monalisa/my-repo" \ --label "org.opencontainers.image.description=My container image" \ --label "org.opencontainers.image.licenses=MIT" +``` + +### Adding a description to multi-arch images + +A multi-arch image is an image that supports multiple architectures. It works by referencing a list of images, each supporting a different architecture, within a single manifest. + +The description that appears on the package page for a multi-arch image is obtained from the `annotations` field in the image's manifest. Like Docker labels, annotations provide a way to associate metadata with an image, and support pre-defined annotation keys. For more information, see [Annotations](https://github.com/opencontainers/image-spec/blob/main/annotations.md) in the `opencontainers/image-spec` repository. + +To provide a description for a multi-arch image, set a value for the `org.opencontainers.image.description` key in the `annotations` field of the manifest, as follows. + +```json +"annotations": { + "org.opencontainers.image.description": "My multi-arch image" +} +``` + +For example, the following {% data variables.product.prodname_actions %} workflow step builds and pushes a multi-arch image. The `outputs` parameter sets the description for the image. + +```yaml +{% data reusables.actions.actions-not-certified-by-github-comment %} + +- name: Build and push Docker image + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + file: ./Dockerfile + platforms: {% raw %}${{ matrix.platforms }}{% endraw %} + push: true + outputs: type=image,name=target,annotation-index.org.opencontainers.image.description=My multi-arch image +``` \ No newline at end of file diff --git a/data/reusables/package_registry/about-annotation-keys.md b/data/reusables/package_registry/about-annotation-keys.md new file mode 100644 index 0000000000..94ed68f23b --- /dev/null +++ b/data/reusables/package_registry/about-annotation-keys.md @@ -0,0 +1 @@ +You can use pre-defined annotation keys to add metadata including a description, a license, and a source repository to your container image. diff --git a/data/reusables/package_registry/about-docker-labels.md b/data/reusables/package_registry/about-docker-labels.md deleted file mode 100644 index 88c689c613..0000000000 --- a/data/reusables/package_registry/about-docker-labels.md +++ /dev/null @@ -1 +0,0 @@ -You can use Docker labels to add metadata including a description, a license, and a source repository to your container image. From 41a79c40c5a1bae7f6bb000722f32ce8f4adbdec Mon Sep 17 00:00:00 2001 From: Sam Browning <106113886+sabrowning1@users.noreply.github.com> Date: Mon, 9 Jan 2023 09:43:39 -0500 Subject: [PATCH 07/41] Add content for enabling code scanning without a workflow file (#33700) Co-authored-by: github-actions Co-authored-by: Dorothy Mitchell Co-authored-by: Felicity Chapman --- .../security/advanced-code-scanning-setup.png | Bin 0 -> 119074 bytes .../security/default-code-scanning-setup.png | Bin 0 -> 117520 bytes .../security/enable-codeql-default-setup.png | Bin 0 -> 62738 bytes .../security-hardening-for-github-actions.md | 2 +- .../about-code-scanning-with-codeql.md | 22 +++- .../configuring-code-scanning.md | 12 +- ...-codeql-workflow-for-compiled-languages.md | 36 +++--- .../index.md | 2 +- ...tting-up-code-scanning-for-a-repository.md | 111 +++++++++++++++--- .../troubleshooting-the-codeql-workflow.md | 40 ++++--- ...eshooting-your-default-setup-for-codeql.md | 34 ++++++ .../viewing-code-scanning-logs.md | 24 ++-- .../securing-your-repository.md | 53 +++++---- .../about-github-advanced-security.md | 2 +- .../code-scanning-without-workflow.yml | 5 + .../actions/starter-workflow-categories.md | 6 +- data/reusables/code-scanning/edit-workflow.md | 2 +- .../code-scanning/enabling-options.md | 4 +- .../user-settings/security-analysis.md | 2 +- 19 files changed, 266 insertions(+), 91 deletions(-) create mode 100644 assets/images/help/security/advanced-code-scanning-setup.png create mode 100644 assets/images/help/security/default-code-scanning-setup.png create mode 100644 assets/images/help/security/enable-codeql-default-setup.png create mode 100644 content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-default-setup-for-codeql.md create mode 100644 data/features/code-scanning-without-workflow.yml diff --git a/assets/images/help/security/advanced-code-scanning-setup.png b/assets/images/help/security/advanced-code-scanning-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..43e8568d3853b98b374dc915d3d05d5014f4334b GIT binary patch literal 119074 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

FH~|WDv6i!M#)fnvGjF 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 literal 0 HcmV?d00001 diff --git a/content/actions/security-guides/security-hardening-for-github-actions.md b/content/actions/security-guides/security-hardening-for-github-actions.md index 0c24e92372..273e462b9c 100644 --- a/content/actions/security-guides/security-hardening-for-github-actions.md +++ b/content/actions/security-guides/security-hardening-for-github-actions.md @@ -151,7 +151,7 @@ With this approach, the value of the {% raw %}`${{ github.event.issue.title }}`{ {% data reusables.advanced-security.starter-workflows-beta %} {% data variables.product.prodname_code_scanning_capc %} allows you to find security vulnerabilities before they reach production. {% data variables.product.product_name %} provides starter workflows for {% data variables.product.prodname_code_scanning %}. You can use these suggested workflows to construct your {% data variables.product.prodname_code_scanning %} workflows, instead of starting from scratch. {% data variables.product.company_short%}'s workflow, the {% data variables.code-scanning.codeql_workflow %}, is powered by {% data variables.product.prodname_codeql %}. There are also third-party starter workflows available. -For more information, see "[About {% data variables.product.prodname_code_scanning %}](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning)" and "[Setting up {% data variables.product.prodname_code_scanning %} using starter workflows](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)." +For more information, see "[About {% data variables.product.prodname_code_scanning %}](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning)" and "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)." {% endif %} diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql.md index 16578c6e5f..2c75ea5bc6 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql.md @@ -24,10 +24,22 @@ topics: {% data reusables.code-scanning.about-codeql-analysis %} +{% ifversion code-scanning-without-workflow %} + +There are three main ways to use {% data variables.product.prodname_codeql %} analysis for {% data variables.product.prodname_code_scanning %}: + +- Use default setup to automatically configure {% data variables.product.prodname_codeql %} analysis for {% data variables.product.prodname_code_scanning %} on your repository. The default setup chooses the languages to analyze, query suites to run, and events that trigger scans, then displays a summary of the analysis settings. After you enable {% data variables.product.prodname_codeql %}, {% data variables.product.prodname_actions %} will execute workflow runs to scan your code. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-automatically)." +- Use advanced setup to add the {% data variables.product.prodname_codeql %} workflow to your repository. This generates a customizable workflow file which uses the [github/codeql-action](https://github.com/github/codeql-action/) to run the {% data variables.product.prodname_codeql_cli %}. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)." + +{% else %} + There are two main ways to use {% data variables.product.prodname_codeql %} analysis for {% data variables.product.prodname_code_scanning %}: -- Add the {% data variables.product.prodname_codeql %} workflow to your repository. This uses the [github/codeql-action](https://github.com/github/codeql-action/) to run the {% data variables.product.prodname_codeql_cli %}. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-actions)." -- Run the {% data variables.product.prodname_codeql %} CLI directly in an external CI system and upload the results to {% data variables.product.prodname_dotcom %}. For more information, see "[About {% data variables.product.prodname_codeql %} code scanning in your CI system ](/code-security/secure-coding/using-codeql-code-scanning-with-your-existing-ci-system/about-codeql-code-scanning-in-your-ci-system)." +- Add the {% data variables.product.prodname_codeql %} workflow to your repository. This uses the [github/codeql-action](https://github.com/github/codeql-action/) to run the {% data variables.product.prodname_codeql_cli %}. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-manually)." + +{% endif -%} + +- Run the {% data variables.product.prodname_codeql %} CLI directly in an external CI system and upload the results to {% data variables.product.prodname_dotcom %}. For more information, see "[About {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} in your CI system ](/code-security/secure-coding/using-codeql-code-scanning-with-your-existing-ci-system/about-codeql-code-scanning-in-your-ci-system)." {% ifversion ghes or ghae %} @@ -43,8 +55,8 @@ On {% data variables.product.product_name %} {% ifversion ghes %}{{ allVersions[ {% data variables.product.prodname_codeql %} treats code like data, allowing you to find potential vulnerabilities in your code with greater confidence than traditional static analyzers. 1. You generate a {% data variables.product.prodname_codeql %} database to represent your codebase. -2. Then you run {% data variables.product.prodname_codeql %} queries on that database to identify problems in the codebase. -3. The query results are shown as {% data variables.product.prodname_code_scanning %} alerts in {% data variables.product.product_name %} when you use {% data variables.product.prodname_codeql %} with {% data variables.product.prodname_code_scanning %}. +1. Then you run {% data variables.product.prodname_codeql %} queries on that database to identify problems in the codebase. +1. The query results are shown as {% data variables.product.prodname_code_scanning %} alerts in {% data variables.product.product_name %} when you use {% data variables.product.prodname_codeql %} with {% data variables.product.prodname_code_scanning %}. {% data variables.product.prodname_codeql %} supports both compiled and interpreted languages, and can find vulnerabilities and errors in code that's written in the supported languages. @@ -54,7 +66,7 @@ On {% data variables.product.product_name %} {% ifversion ghes %}{{ allVersions[ {% data variables.product.company_short %} experts, security researchers, and community contributors write and maintain the default {% data variables.product.prodname_codeql %} queries used for {% data variables.product.prodname_code_scanning %}. The queries are regularly updated to improve analysis and reduce any false positive results. The queries are open source, so you can view and contribute to the queries in the [`github/codeql`](https://github.com/github/codeql) repository. For more information, see [{% data variables.product.prodname_codeql %}](https://codeql.github.com/) on the {% data variables.product.prodname_codeql %} website. You can also write your own queries. For more information, see "[About {% data variables.product.prodname_codeql %} queries](https://codeql.github.com/docs/writing-codeql-queries/about-codeql-queries/)" in the {% data variables.product.prodname_codeql %} documentation. -You can run additional queries as part of your code scanning analysis. +If you are scanning your code with the advanced setup or an external CI system, you can run additional queries as part of your analysis. {%- ifversion codeql-packs %} These queries must belong to a published {% data variables.product.prodname_codeql %} query pack (beta) or a {% data variables.product.prodname_codeql %} pack in a repository. {% data variables.product.prodname_codeql %} packs (beta) provide the following benefits over traditional {% data variables.product.prodname_ql %} packs: diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning.md index 229d73aaa9..a9fe8bcf43 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning.md @@ -41,12 +41,20 @@ shortTitle: Configure code scanning You can run {% data variables.product.prodname_code_scanning %} on {% data variables.product.product_name %}, using {% data variables.product.prodname_actions %}, or from your continuous integration (CI) system. For more information, see "[About {% data variables.product.prodname_actions %}](/actions/getting-started-with-github-actions/about-github-actions)" or "[About {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} in your CI system](/code-security/secure-coding/about-codeql-code-scanning-in-your-ci-system)." -This article is about running {% data variables.product.prodname_code_scanning %} on {% data variables.product.product_name %} using actions. +{% ifversion code-scanning-without-workflow %}Both the default and advanced setups for {% data variables.product.prodname_code_scanning %} run on {% data variables.product.prodname_actions %}. The default setup automatically detects the best {% data variables.product.prodname_code_scanning %} configuration for your repository, while you can use the advanced setup to customize a {% data variables.product.prodname_code_scanning %} workflow. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#options-for-setting-up-code-scanning)."{% endif %} This article is about {% ifversion code-scanning-without-workflow %}configuring your advanced setup for {% data variables.product.prodname_code_scanning %}.{% else %}running {% data variables.product.prodname_code_scanning %} on {% data variables.product.product_name %} using actions.{% endif %} -Before you can configure {% data variables.product.prodname_code_scanning %} for a repository, you must set up {% data variables.product.prodname_code_scanning %} by adding a {% data variables.product.prodname_actions %} workflow to the repository. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository)." +{% ifversion code-scanning-without-workflow %}{% else %}Before you can configure {% data variables.product.prodname_code_scanning %} for a repository, you must set up {% data variables.product.prodname_code_scanning %} by adding a {% data variables.product.prodname_actions %} workflow to the repository. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository)."{% endif %} + +{% ifversion code-scanning-without-workflow %} + +With the advanced setup, you can edit workflows like {% data variables.product.prodname_dotcom %}'s {% data variables.code-scanning.codeql_workflow %} to specify the frequency of scans, the languages or directories to scan, and what {% data variables.product.prodname_code_scanning %} looks for in your code. You might also need to edit the workflow if you use a specific set of commands to compile your code. + +{% else %} {% data reusables.code-scanning.edit-workflow %} +{% endif %} + {% data variables.product.prodname_codeql %} analysis is just one type of {% data variables.product.prodname_code_scanning %} you can do in {% data variables.product.prodname_dotcom %}. {% data variables.product.prodname_marketplace %}{% ifversion ghes %} on {% data variables.product.prodname_dotcom_the_website %}{% endif %} contains other {% data variables.product.prodname_code_scanning %} workflows you can use. {% ifversion fpt or ghec %}You can find a selection of these on the "Get started with {% data variables.product.prodname_code_scanning %}" page, which you can access from the **{% octicon "shield" aria-label="The shield symbol" %} Security** tab.{% endif %} The specific examples given in this article relate to the {% data variables.code-scanning.codeql_workflow %} file. ## Editing a {% data variables.product.prodname_code_scanning %} workflow diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages.md index d85bffb394..5f4f06a75e 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages.md @@ -35,14 +35,22 @@ topics: ## About the {% data variables.code-scanning.codeql_workflow %} and compiled languages +{% ifversion code-scanning-without-workflow %} + +For {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %}, you can use the default setup, which analyzes your code and automatically configures your {% data variables.product.prodname_code_scanning %}, or the advanced setup, which generates a workflow file you can edit. Currently, the default setup does not support any compiled languages, so you must use the advanced setup. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)." + +{% else %} + You set up {% data variables.product.prodname_dotcom %} to run {% data variables.product.prodname_code_scanning %} for your repository by adding a {% data variables.product.prodname_actions %} workflow to the repository. For {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %}, you add the {% data variables.code-scanning.codeql_workflow %}. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository)." -{% data reusables.code-scanning.edit-workflow %} +{% endif %} + +{% data reusables.code-scanning.edit-workflow %} For general information about configuring {% data variables.product.prodname_code_scanning %} and editing workflow files, see "[Configuring {% data variables.product.prodname_code_scanning %}](/code-security/secure-coding/configuring-code-scanning)" and "[Learn {% data variables.product.prodname_actions %}](/actions/learn-github-actions)." ## About autobuild for {% data variables.product.prodname_codeql %} -{% data variables.product.prodname_code_scanning_capc %} works by running queries against one or more databases. Each database contains a representation of all of the code in a single language in your repository. +{% data variables.product.prodname_code_scanning_capc %} works by running queries against one or more databases. Each database contains a representation of all of the code in a single language in your repository. For the compiled languages C/C++, C#,{% ifversion codeql-go-autobuild %} Go,{% endif %}{% ifversion codeql-kotlin-beta %} Kotlin, {% endif %} and Java, the process of populating this database involves building the code and extracting data. {% data reusables.code-scanning.analyze-go %} {% data reusables.code-scanning.autobuild-compiled-languages %} @@ -70,13 +78,13 @@ The behavior of the `autobuild` step varies according to the operating system th 1. Invoke `MSBuild.exe` on the solution (`.sln`) or project (`.vcxproj`) file closest to the root. If `autobuild` detects multiple solution or project files at the same (shortest) depth from the top level directory, it will attempt to build all of them. -2. Invoke a script that looks like a build script—_build.bat_, _build.cmd_, _and build.exe_ (in that order). +1. Invoke a script that looks like a build script—_build.bat_, _build.cmd_, _and build.exe_ (in that order). On Linux and macOS, the `autobuild` step reviews the files present in the repository to determine the build system used: 1. Look for a build system in the root directory. -2. If none are found, search subdirectories for a unique directory with a build system for C/C++. -3. Run an appropriate command to configure the system. +1. If none are found, search subdirectories for a unique directory with a build system for C/C++. +1. Run an appropriate command to configure the system. ### C# @@ -88,9 +96,9 @@ On Linux and macOS, the `autobuild` step reviews the files present in the reposi The `autobuild` process attempts to autodetect a suitable build method for C# using the following approach: 1. Invoke `dotnet build` on the solution (`.sln`) or project (`.csproj`) file closest to the root. -2. Invoke `MSbuild` (Linux) or `MSBuild.exe` (Windows) on the solution or project file closest to the root. +1. Invoke `MSbuild` (Linux) or `MSBuild.exe` (Windows) on the solution or project file closest to the root. If `autobuild` detects multiple solution or project files at the same (shortest) depth from the top level directory, it will attempt to build all of them. -3. Invoke a script that looks like a build script—_build_ and _build.sh_ (in that order, for Linux) or _build.bat_, _build.cmd_, _and build.exe_ (in that order, for Windows). +1. Invoke a script that looks like a build script—_build_ and _build.sh_ (in that order, for Linux) or _build.bat_, _build.cmd_, _and build.exe_ (in that order, for Windows). {% ifversion codeql-go-autobuild %} @@ -104,9 +112,9 @@ If `autobuild` detects multiple solution or project files at the same (shortest) The `autobuild` process attempts to autodetect a suitable way to install the dependencies needed by a Go repository before extracting all `.go` files: 1. Invoke `make`, `ninja`, `./build` or `./build.sh` (in that order) until one of these commands succeeds and a subsequent `go list ./...` also succeeds, indicating that the needed dependencies have been installed. -2. If none of those commands succeeded, look for `go.mod`, `Gopkg.toml` or `glide.yaml`, and run `go get` (unless vendoring is in use), `dep ensure -v` or `glide install` respectively to try to install dependencies. -3. Finally, if configurations files for these dependency managers are not found, rearrange the repository directory structure suitable for addition to `GOPATH`, and use `go get` to install dependencies. The directory structure reverts to normal after extraction completes. -4. Extract all Go code in the repository, similar to running `go build ./...`. +1. If none of those commands succeeded, look for `go.mod`, `Gopkg.toml` or `glide.yaml`, and run `go get` (unless vendoring is in use), `dep ensure -v` or `glide install` respectively to try to install dependencies. +1. Finally, if configurations files for these dependency managers are not found, rearrange the repository directory structure suitable for addition to `GOPATH`, and use `go get` to install dependencies. The directory structure reverts to normal after extraction completes. +1. Extract all Go code in the repository, similar to running `go build ./...`. {% endif %} @@ -120,8 +128,8 @@ The `autobuild` process attempts to autodetect a suitable way to install the dep The `autobuild` process tries to determine the build system for Java codebases by applying this strategy: 1. Search for a build file in the root directory. Check for Gradle then Maven then Ant build files. -2. Run the first build file found. If both Gradle and Maven files are present, the Gradle file is used. -3. Otherwise, search for build files in direct subdirectories of the root directory. If only one subdirectory contains build files, run the first file identified in that subdirectory (using the same preference as for 1). If more than one subdirectory contains build files, report an error. +1. Run the first build file found. If both Gradle and Maven files are present, the Gradle file is used. +1. Otherwise, search for build files in direct subdirectories of the root directory. If only one subdirectory contains build files, run the first file identified in that subdirectory (using the same preference as for 1). If more than one subdirectory contains build files, report an error. ## Adding build steps for a compiled language @@ -140,11 +148,11 @@ For more information about the `run` keyword, see "[Workflow syntax for {% data If your repository contains multiple compiled languages, you can specify language-specific build commands. For example, if your repository contains C/C++, C# and Java, and `autobuild` correctly builds C/C++ and C# but fails to build Java, you could use the following configuration in your workflow, after the `init` step. This specifies build steps for Java while still using `autobuild` for C/C++ and C#: ```yaml -- if: matrix.language == 'cpp' || matrix.language == 'csharp' +- if: matrix.language == 'cpp' || matrix.language == 'csharp' name: Autobuild uses: {% data reusables.actions.action-codeql-action-autobuild %} -- if: matrix.language == 'java' +- if: matrix.language == 'java' name: Build Java run: | make bootstrap diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/index.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/index.md index 6c1d00f0ab..355f573c98 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/index.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/index.md @@ -25,8 +25,8 @@ children: - /about-code-scanning-with-codeql - /recommended-hardware-resources-for-running-codeql - /configuring-the-codeql-workflow-for-compiled-languages + - /troubleshooting-your-default-setup-for-codeql - /troubleshooting-the-codeql-workflow - /running-codeql-code-scanning-in-a-container - /viewing-code-scanning-logs --- - diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository.md index 4cad55a2e4..6fa37d10d2 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository.md @@ -1,7 +1,7 @@ --- title: Setting up code scanning for a repository shortTitle: Set up code scanning -intro: 'You can set up {% data variables.product.prodname_code_scanning %} by adding a workflow to your repository.' +intro: 'You can set up {% data variables.product.prodname_code_scanning %} for a repository to find security vulnerabilities in your code.' product: '{% data reusables.gated-features.code-scanning %}' permissions: 'If you have write permissions to a repository, you can set up or configure {% data variables.product.prodname_code_scanning %} for that repository.' redirect_from: @@ -40,7 +40,7 @@ You decide how to generate {% data variables.product.prodname_code_scanning %} a {% ifversion ghes or ghae %} {% note %} -**Note:** If you want to use the CodeQL analysis, note that this article describes the features available with the version of the CodeQL action and associated CodeQL CLI bundle included in the initial release of this version of {% data variables.product.product_name %}. If your enterprise uses a more recent version of the CodeQL action, see the [{% data variables.product.prodname_ghe_cloud %} article](/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository) for information on the latest features. {% ifversion not ghae %} For information on using the latest version, see "[Configuring code scanning for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#configuring-codeql-analysis-on-a-server-without-internet-access)."{% endif %} +**Note:** If you want to use the {% data variables.product.prodname_codeql %} analysis, note that this article describes the features available with the version of the {% data variables.product.prodname_codeql %} action and associated {% data variables.product.prodname_codeql_cli %} bundle included in the initial release of this version of {% data variables.product.product_name %}. If your enterprise uses a more recent version of the {% data variables.product.prodname_codeql %} action, see the [{% data variables.product.prodname_ghe_cloud %} article](/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository) for information on the latest features. {% ifversion not ghae %} For information on using the latest version, see "[Configuring code scanning for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#configuring-codeql-analysis-on-a-server-without-internet-access)."{% endif %} {% endnote %} {% endif %} @@ -53,15 +53,51 @@ Before setting up {% data variables.product.prodname_code_scanning %} for a repo Enterprise owners, organization and repository administrators can add self-hosted runners. For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners)" and "[Adding self-hosted runners](/actions/hosting-your-own-runners/adding-self-hosted-runners)." {% endif %} +{% ifversion code-scanning-without-workflow %} + +## Setting up {% data variables.product.prodname_code_scanning %} automatically + +The default setup for {% data variables.product.prodname_code_scanning %} will automatically configure {% data variables.product.prodname_code_scanning %} with the best settings for your repository. Your repository is eligible for default setup if it uses {% data variables.product.prodname_actions %} and contains only the following {% data variables.product.prodname_codeql %}-supported languages: JavaScript/TypeScript, Python, or Ruby. While you can use default setup if your repository includes languages that aren't supported by CodeQL, such as R, you must use the advanced setup if you include {% data variables.product.prodname_codeql %}-supported languages other than those previously listed. For more information on {% data variables.product.prodname_codeql %}-supported languages, see "[About {% data variables.product.prodname_code_scanning %} with {% data variables.product.prodname_codeql %}](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql#about-codeql)." + +Enabling default setup is the quickest way to set up {% data variables.product.prodname_code_scanning %} for your repository. Additionally, default setup requires none of the maintenance necessary with a {% data variables.product.prodname_codeql %} workflow file. Before you enable default setup, you'll see the languages it will analyze, the query suites it will run, and the events that will trigger a new scan. + +Try default setup if you don't need to run extra queries, change the scan schedule, or scan a language that is currently unsupported by default setup. + +{% data reusables.repositories.navigate-to-repo %} +{% data reusables.repositories.sidebar-settings %} +{% data reusables.user-settings.security-analysis %} +1. In the "{% data variables.product.prodname_code_scanning_capc %}" section, select **Set up** {% octicon "triangle-down" aria-label="The downwards-facing triangle icon" %}, then click **Default**. + + ![Screenshot of the "{% data variables.product.prodname_code_scanning_capc %}" section with emphasis on the "Default" setup option](/assets/images/help/security/default-code-scanning-setup.png) +1. In the {% data variables.product.prodname_codeql %} default configuration window that is displayed, review the settings for your repository, then click **Enable {% data variables.product.prodname_codeql %}**. + + ![Screenshot of the "{% data variables.product.prodname_codeql %} default configuration" pop-up window with emphasis on the "Enable {% data variables.product.prodname_codeql %}" button](/assets/images/help/security/enable-codeql-default-setup.png) + + {% note %} + + **Notes:** + - The {% data variables.product.prodname_codeql %} default configuration window displays the details of the default setup, including the languages to analyze, the query suites to run, and the events that trigger a new scan. If you would like to change which query suites will run, what events will trigger a new scan, or other {% data variables.product.prodname_code_scanning %} features, you need to use the advanced setup. For more information, see "[Creating an advanced setup](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)." + - If you are switching to the default setup from the advanced setup, you will see a warning informing you that the default setup will override existing configurations. Once you have enabled {% data variables.product.prodname_codeql %}, be sure to delete or disable your existing workflow file. Otherwise, the workflow will continue to run regularly without uploading any {% data variables.product.prodname_code_scanning %} results, using your {% data variables.product.prodname_actions %} minutes. + - If you would like to see your default {% data variables.product.prodname_codeql %} configuration after setup, select {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}, then click {% octicon "gear" aria-label="The gear icon" %} **View {% data variables.product.prodname_codeql %} configuration**. + + {% endnote %} + +{% endif %} + +{% ifversion code-scanning-without-workflow %} +## Creating an advanced setup + +The advanced setup for {% data variables.product.prodname_code_scanning %} is helpful when you need to customize your {% data variables.product.prodname_code_scanning %}. By creating and editing a workflow file, you can choose which queries to run, change the scan schedule, scan any {% data variables.product.prodname_codeql %}-supported language, use a matrix build, and more. + {% ifversion fpt or ghec %} -## Setting up {% data variables.product.prodname_code_scanning %} using starter workflows +### Setting up {% data variables.product.prodname_code_scanning %} using starter workflows {% data reusables.advanced-security.starter-workflows-beta %} {% ifversion ghes or ghae %} {% note %} -**Note:** This article describes the features available with the version of the CodeQL action and associated CodeQL CLI bundle included in the initial release of this version of {% data variables.product.product_name %}. If your enterprise uses a more recent version of the CodeQL action, see the [{% data variables.product.prodname_ghe_cloud %} article](/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository) for information on the latest features. {% ifversion not ghae %} For information on using the latest version, see "[Configuring code scanning for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#configuring-codeql-analysis-on-a-server-without-internet-access)."{% endif %} +**Note:** This article describes the features available with the version of the {% data variables.product.prodname_codeql %} action and associated {% data variables.product.prodname_codeql_cli %} bundle included in the initial release of this version of {% data variables.product.product_name %}. If your enterprise uses a more recent version of the {% data variables.product.prodname_codeql %} action, see the [{% data variables.product.prodname_ghe_cloud %} article](/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository) for information on the latest features. {% ifversion not ghae %} For information on using the latest version, see "[Configuring code scanning for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#configuring-codeql-analysis-on-a-server-without-internet-access)."{% endif %} {% endnote %} {% endif %} @@ -82,35 +118,74 @@ Enterprise owners, organization and repository administrators can add self-hoste {% endif %} -## Setting up {% data variables.product.prodname_code_scanning %} manually +### Setting up {% data variables.product.prodname_code_scanning %} manually -{% ifversion fpt %} - -You can set up {% data variables.product.prodname_code_scanning %} in any public repository where you have write access. - -{% endif %} +You can customize your {% data variables.product.prodname_code_scanning %} by creating and editing a workflow file. The advanced setup generates a basic workflow file for you to customize. {% data reusables.code-scanning.billing %} + +{% ifversion fpt %} + {% note %} + + **Note:** You can set up {% data variables.product.prodname_code_scanning %} in any public repository where you have write access. + + {% endnote %} +{% endif %} + +{% data reusables.repositories.navigate-to-repo %} +{% data reusables.repositories.sidebar-settings %} +{% data reusables.user-settings.security-analysis %} +1. In the "{% data variables.product.prodname_code_scanning_capc %}" section, select **Set up** {% octicon "triangle-down" aria-label="The downwards-facing triangle icon" %}, then click **Advanced**. + + {% note %} + + **Note:** If you are switching to the advanced {% data variables.product.prodname_code_scanning %} setup from the default setup, in the "{% data variables.product.prodname_code_scanning_capc %}" section, select {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}, then click {% octicon "workflow" aria-label="The workflow icon" %} **Switch to advanced**. In the pop-up window that appears, click **Disable {% data variables.product.prodname_codeql %}**. + + {% endnote %} + + ![Screenshot of the "{% data variables.product.prodname_code_scanning_capc %}" section with emphasis on the "Advanced" setup option](/assets/images/help/security/advanced-code-scanning-setup.png) + +1. To customize how {% data variables.product.prodname_code_scanning %} scans your code, edit the workflow. + + Generally, you can commit the {% data variables.code-scanning.codeql_workflow %} without making any changes to it. However, many of the third-party workflows require additional configuration, so read the comments in the workflow before committing. + + For more information, see "[Configuring {% data variables.product.prodname_code_scanning %}](/code-security/secure-coding/configuring-code-scanning)." +1. Use the **Start commit** drop-down, and type a commit message. + ![Start commit](/assets/images/help/repository/start-commit-commit-new-file.png) +1. Choose whether you'd like to commit directly to the default branch, or create a new branch and start a pull request. + ![Choose where to commit](/assets/images/help/repository/start-commit-choose-where-to-commit.png) +1. Click **Commit new file** or **Propose new file**. + +In the suggested {% data variables.code-scanning.codeql_workflow %}, {% data variables.product.prodname_code_scanning %} is configured to analyze your code each time you either push a change to the default branch or any protected branches, or raise a pull request against the default branch. As a result, {% data variables.product.prodname_code_scanning %} will now commence. + +The `on:pull_request` and `on:push` triggers for code scanning are each useful for different purposes. For more information, see "[Scanning pull requests](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#scanning-pull-requests)" and "[Scanning on push](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#scanning-on-push)." + +{% else %} +## Setting up {% data variables.product.prodname_code_scanning %} manually + {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-security %} 1. To the right of "{% data variables.product.prodname_code_scanning_capc %} alerts", click **Set up {% data variables.product.prodname_code_scanning %}**.{% ifversion ghec or ghes or ghae %} If {% data variables.product.prodname_code_scanning %} is missing, you need to ask an organization owner or repository administrator to enable {% data variables.product.prodname_GH_advanced_security %}.{% endif %} For more information, see "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization)" or "[Managing security and analysis settings for your repository](/github/administering-a-repository/managing-security-and-analysis-settings-for-your-repository)." !["Set up {% data variables.product.prodname_code_scanning %}" button to the right of "{% data variables.product.prodname_code_scanning_capc %}" in the Security Overview](/assets/images/help/security/overview-set-up-code-scanning.png) -4. Under "Get started with {% data variables.product.prodname_code_scanning %}", click **Set up this workflow** on the {% data variables.code-scanning.codeql_workflow %} or on a third-party workflow. +1. Under "Get started with {% data variables.product.prodname_code_scanning %}", click **Set up this workflow** on the {% data variables.code-scanning.codeql_workflow %} or on a third-party workflow. !["Set up this workflow" button under "Get started with {% data variables.product.prodname_code_scanning %}" heading](/assets/images/help/repository/code-scanning-set-up-this-workflow.png)Workflows are only displayed if they are relevant for the programming languages detected in the repository. The {% data variables.code-scanning.codeql_workflow %} is always displayed, but the "Set up this workflow" button is only enabled if {% data variables.product.prodname_codeql %} analysis supports the languages present in the repository. -5. To customize how {% data variables.product.prodname_code_scanning %} scans your code, edit the workflow. +1. To customize how {% data variables.product.prodname_code_scanning %} scans your code, edit the workflow. - Generally you can commit the {% data variables.code-scanning.codeql_workflow %} without making any changes to it. However, many of the third-party workflows require additional configuration, so read the comments in the workflow before committing. + Generally, you can commit the {% data variables.code-scanning.codeql_workflow %} without making any changes to it. However, many of the third-party workflows require additional configuration, so read the comments in the workflow before committing. For more information, see "[Configuring {% data variables.product.prodname_code_scanning %}](/code-security/secure-coding/configuring-code-scanning)." -6. Use the **Start commit** drop-down, and type a commit message. +1. Use the **Start commit** drop-down, and type a commit message. ![Start commit](/assets/images/help/repository/start-commit-commit-new-file.png) -7. Choose whether you'd like to commit directly to the default branch, or create a new branch and start a pull request. +1. Choose whether you'd like to commit directly to the default branch, or create a new branch and start a pull request. ![Choose where to commit](/assets/images/help/repository/start-commit-choose-where-to-commit.png) -8. Click **Commit new file** or **Propose new file**. +1. Click **Commit new file** or **Propose new file**. -In the default {% data variables.code-scanning.codeql_workflow %}, {% data variables.product.prodname_code_scanning %} is configured to analyze your code each time you either push a change to the default branch or any protected branches, or raise a pull request against the default branch. As a result, {% data variables.product.prodname_code_scanning %} will now commence. +In the suggested {% data variables.code-scanning.codeql_workflow %}, {% data variables.product.prodname_code_scanning %} is configured to analyze your code each time you either push a change to the default branch or any protected branches, or raise a pull request against the default branch. As a result, {% data variables.product.prodname_code_scanning %} will now commence. The `on:pull_request` and `on:push` triggers for code scanning are each useful for different purposes. For more information, see "[Scanning pull requests](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#scanning-pull-requests)" and "[Scanning on push](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#scanning-on-push)." + +{% endif %} + ## Bulk set up of {% data variables.product.prodname_code_scanning %} You can set up {% data variables.product.prodname_code_scanning %} in many repositories at once using a script. If you'd like to use a script to raise pull requests that add a {% data variables.product.prodname_actions %} workflow to multiple repositories, see the [`jhutchings1/Create-ActionsPRs`](https://github.com/jhutchings1/Create-ActionsPRs) repository for an example using PowerShell, or [`nickliffen/ghas-enablement`](https://github.com/NickLiffen/ghas-enablement) for teams who do not have PowerShell and instead would like to use NodeJS. @@ -137,7 +212,7 @@ After setting up {% data variables.product.prodname_code_scanning %} for your re {% note %} -**Note:** If you raised a pull request to add the {% data variables.product.prodname_code_scanning %} workflow to the repository, alerts from that pull request aren't displayed directly on the {% data variables.product.prodname_code_scanning_capc %} page until the pull request is merged. If any alerts were found you can view these, before the pull request is merged, by clicking the **_n_ alerts found** link in the banner on the {% data variables.product.prodname_code_scanning_capc %} page. +**Note:** If you raised a pull request to add the {% data variables.product.prodname_code_scanning %} workflow to the repository, alerts from that pull request aren't displayed directly on the {% data variables.product.prodname_code_scanning_capc %} page until the pull request is merged. If any alerts were found you can view these, before the pull request is merged, by clicking the **NUMBER alerts found** link in the banner on the {% data variables.product.prodname_code_scanning_capc %} page. ![Click the "n alerts found" link](/assets/images/help/repository/code-scanning-alerts-found-link.png) diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow.md index abab0e580d..87635fe360 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow.md @@ -1,7 +1,7 @@ --- -title: Troubleshooting the CodeQL workflow -shortTitle: Troubleshoot CodeQL workflow -intro: 'If you''re having problems with {% data variables.product.prodname_code_scanning %}, you can troubleshoot by using these tips for resolving issues.' +title: Troubleshooting {% ifversion code-scanning-without-workflow %}your advanced setup for CodeQL{% else %}the CodeQL workflow{% endif %} +shortTitle: Troubleshoot {% ifversion code-scanning-without-workflow %}advanced setup{% else %}CodeQL workflow{% endif %} +intro: 'If you''re having problems with {% ifversion code-scanning-without-workflow %}advanced setup for {% data variables.product.prodname_code_scanning %}{% else %}{% data variables.product.prodname_code_scanning %} setup{% endif %}, you can troubleshoot by using these tips for resolving issues.' product: '{% data reusables.gated-features.code-scanning %}' miniTocMaxHeadingLevel: 3 redirect_from: @@ -9,6 +9,7 @@ redirect_from: - /github/finding-security-vulnerabilities-and-errors-in-your-code/troubleshooting-the-codeql-workflow - /code-security/secure-coding/troubleshooting-the-codeql-workflow - /code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow + - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-advanced-setup-for-codeql versions: fpt: '*' ghes: '*' @@ -26,6 +27,7 @@ topics: - C/C++ - C# - Java +allowTitleToDifferFromFilename: true --- @@ -35,7 +37,7 @@ topics: {% ifversion ghes or ghae %} {% note %} -**Note:** This article describes the features available with the version of the CodeQL action and associated CodeQL CLI bundle included in the initial release of this version of {% data variables.product.product_name %}. If your enterprise uses a more recent version of the CodeQL action, see the [{% data variables.product.prodname_ghe_cloud %} article](/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow) for information on the latest features. {% ifversion not ghae %} For information on using the latest version, see "[Configuring code scanning for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#configuring-codeql-analysis-on-a-server-without-internet-access)."{% endif %} +**Note:** This article describes the features available with the version of the {% data variables.product.prodname_codeql %} action and associated {% data variables.product.prodname_codeql_cli %} bundle included in the initial release of this version of {% data variables.product.product_name %}. If your enterprise uses a more recent version of the {% data variables.product.prodname_codeql %} action, see the [{% data variables.product.prodname_ghe_cloud %} article](/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-advanced-setup-for-codeql) for information on the latest features. {% ifversion not ghae %} For information on using the latest version, see "[Configuring {% data variables.product.prodname_code_scanning %} for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#configuring-codeql-analysis-on-a-server-without-internet-access)."{% endif %} {% endnote %} {% endif %} @@ -80,13 +82,23 @@ You can create {% data variables.product.prodname_codeql %} debugging artifacts {% endif %} +{% ifversion code-scanning-without-workflow %} + +## Results are different than expected + +If your {% data variables.product.prodname_code_scanning %} results are different than you expected, your repository may have both default and advanced {% data variables.product.prodname_code_scanning %} setups. When you enable default setup, this blocks any {% data variables.product.prodname_codeql %} workflow files in the repository from uploading results. + +To check if default setup is enabled, navigate to the main page of the repository, then click {% octicon "gear" aria-label="The gear icon" %} **Settings**. In the "Security" section of the sidebar, click {% octicon "codescan" aria-label="The {% data variables.product.prodname_code_scanning %} icon" %} **Code security and analysis**. In the "{% data variables.product.prodname_code_scanning_capc %}" section of the page, next to "{% data variables.product.prodname_codeql %} analysis," click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}. If there is a {% octicon "workflow" aria-label="The workflow icon" %} **Switch to advanced** option, you are currently using the default setup. To switch to the advanced setup and get {% data variables.product.prodname_code_scanning %} results from your custom workflow file, click {% octicon "stop" aria-label="The stop icon" %} **Disable {% data variables.product.prodname_codeql %}**. This option will only disable default setup, and your pre-existing workflow will start uploading results again. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)." + +{% endif %} + ## Automatic build for a compiled language fails If an automatic build of code for a compiled language within your project fails, try the following troubleshooting steps. - Remove the `autobuild` step from your {% data variables.product.prodname_code_scanning %} workflow and add specific build steps. For information about editing the workflow, see "[Configuring {% data variables.product.prodname_code_scanning %}](/code-security/secure-coding/configuring-code-scanning#editing-a-code-scanning-workflow)." For more information about replacing the `autobuild` step, see "[Configuring the {% data variables.product.prodname_codeql %} workflow for compiled languages](/code-security/secure-coding/configuring-the-codeql-workflow-for-compiled-languages#adding-build-steps-for-a-compiled-language)." -- If your workflow doesn't explicitly specify the languages to analyze, {% data variables.product.prodname_codeql %} implicitly detects the supported languages in your code base. In this configuration, out of the compiled languages C/C++, C#,{% ifversion codeql-go-autobuild %} Go,{% endif %} and Java, {% data variables.product.prodname_codeql %} only analyzes the language with the most source files. Edit the workflow and add a matrix specifying the languages you want to analyze. The default CodeQL analysis workflow uses such a matrix. +- If your workflow doesn't explicitly specify the languages to analyze, {% data variables.product.prodname_codeql %} implicitly detects the supported languages in your code base. In this configuration, out of the compiled languages C/C++, C#,{% ifversion codeql-go-autobuild %} Go,{% endif %} and Java, {% data variables.product.prodname_codeql %} only analyzes the language with the most source files. Edit the workflow and add a matrix specifying the languages you want to analyze. The default {% data variables.product.prodname_codeql %} analysis workflow uses such a matrix. The following extracts from a workflow show how you can use a matrix within the job strategy to specify languages, and then reference each language within the "Initialize {% data variables.product.prodname_codeql %}" step: @@ -110,13 +122,13 @@ If an automatic build of code for a compiled language within your project fails, languages: {% raw %}${{ matrix.language }}{% endraw %} ``` - For more information about editing the workflow, see "[Configuring code scanning](/code-security/secure-coding/configuring-code-scanning)." + For more information about editing the workflow, see "[Configuring {% data variables.product.prodname_code_scanning %}](/code-security/secure-coding/configuring-code-scanning)." ## No code found during the build If your workflow fails with an error `No source code was seen during the build` or `The process '/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' failed with exit code 32`, this indicates that {% data variables.product.prodname_codeql %} was unable to monitor your code. Several reasons can explain such a failure: -1. The repository may not contain source code that is written in languages supported by {% data variables.product.prodname_codeql %}. Check the list of supported languages and, if this is the case, remove the {% data variables.product.prodname_codeql %} workflow. For more information, see "[About code scanning with CodeQL](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql#about-codeql) +1. The repository may not contain source code that is written in languages supported by {% data variables.product.prodname_codeql %}. Check the list of supported languages and, if this is the case, remove the {% data variables.product.prodname_codeql %} workflow. For more information, see "[About {% data variables.product.prodname_code_scanning %} with CodeQL](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql#about-codeql) 1. Automatic language detection identified a supported language, but there is no analyzable code of that language in the repository. A typical example is when our language detection service finds a file associated with a particular programming language like a `.h`, or `.gyp` file, but no corresponding executable code is present in the repository. To solve the problem, you can manually define the languages you want to analyze by updating the list of languages in the `language` matrix. For example, the following configuration will analyze only Go, and JavaScript. @@ -136,12 +148,12 @@ If your workflow fails with an error `No source code was seen during the build` 1. Your workflow is analyzing a compiled language (C, C++, C#,{% ifversion codeql-go-autobuild %} Go,{% endif %} or Java), but compilation does not occur between the `init` and `analyze` steps in the workflow. {% data variables.product.prodname_codeql %} requires that your build happens in between these two steps in order to observe the activity of the compiler and perform analysis. 1. Your compiled code (in C, C++, C#,{% ifversion codeql-go-autobuild %} Go,{% endif %} or Java) was compiled successfully, but {% data variables.product.prodname_codeql %} was unable to detect the compiler invocations. The most common causes are: - - Running your build process in a separate container to {% data variables.product.prodname_codeql %}. For more information, see "[Running CodeQL code scanning in a container](/code-security/secure-coding/running-codeql-code-scanning-in-a-container)." + - Running your build process in a separate container to {% data variables.product.prodname_codeql %}. For more information, see "[Running {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} in a container](/code-security/secure-coding/running-codeql-code-scanning-in-a-container)." - Building using a distributed build system external to GitHub Actions, using a daemon process. - {% data variables.product.prodname_codeql %} isn't aware of the specific compiler you are using. For .NET Framework projects, and for C# projects using either `dotnet build` or `msbuild`, you should specify `/p:UseSharedCompilation=false` in your workflow's `run` step, when you build your code. - + For example, the following configuration for C# will pass the flag during the first build step. ``` yaml @@ -228,14 +240,14 @@ If your analysis is still too slow to be run during `push` or `pull_request` eve ### Check which query suites the workflow runs -By default, there are three main query suites available for each language. If you have optimized the CodeQL database build and the process is still too long, you could reduce the number of queries you run. The default query suite is run automatically; it contains the fastest security queries with the lowest rates of false positive results. +By default, there are three main query suites available for each language. If you have optimized the {% data variables.product.prodname_codeql %} database build and the process is still too long, you could reduce the number of queries you run. The default query suite is run automatically; it contains the fastest security queries with the lowest rates of false positive results. You may be running extra queries or query suites in addition to the default queries. Check whether the workflow defines an additional query suite or additional queries to run using the `queries` element. You can experiment with disabling the additional query suite or queries. For more information, see "[Configuring {% data variables.product.prodname_code_scanning %}](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs)." {% ifversion codeql-ml-queries %} {% note %} -**Note:** If you run the `security-extended` or `security-and-quality` query suite for JavaScript, then some queries use experimental technology. For more information, see "[About code scanning alerts](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-alerts#about-experimental-alerts)." +**Note:** If you run the `security-extended` or `security-and-quality` query suite for JavaScript, then some queries use experimental technology. For more information, see "[About {% data variables.product.prodname_code_scanning %} alerts](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-alerts#about-experimental-alerts)." {% endnote %} {% endif %} @@ -299,7 +311,7 @@ This type of merge commit is authored by {% data variables.product.prodname_depe ## Error: "is not a .ql file, .qls file, a directory, or a query pack specification" -You will see this error if CodeQL is unable to find the named query, query suite, or query pack at the location requested in the workflow. There are two common reasons for this error. +You will see this error if {% data variables.product.prodname_codeql %} is unable to find the named query, query suite, or query pack at the location requested in the workflow. There are two common reasons for this error. - There is a typo in the workflow. - A resource the workflow refers to by path was renamed, deleted, or moved to a new location. @@ -311,8 +323,8 @@ After verifying the location of the resource, you can update the workflow to spe If you're using an old {% data variables.product.prodname_codeql %} workflow you may get the following warning in the output from the "Initialize {% data variables.product.prodname_codeql %}" action: ``` -Warning: 1 issue was detected with this workflow: git checkout HEAD^2 is no longer -necessary. Please remove this step as Code Scanning recommends analyzing the merge +Warning: 1 issue was detected with this workflow: git checkout HEAD^2 is no longer +necessary. Please remove this step as Code Scanning recommends analyzing the merge commit for best results. ``` diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-default-setup-for-codeql.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-default-setup-for-codeql.md new file mode 100644 index 0000000000..9ce32bdc15 --- /dev/null +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-default-setup-for-codeql.md @@ -0,0 +1,34 @@ +--- +title: Troubleshooting your default setup for CodeQL +shortTitle: Troubleshoot default setup +intro: 'If you''re having problems with the default {% data variables.product.prodname_code_scanning %} setup, you can troubleshoot by using these tips for resolving issues.' +product: '{% data reusables.gated-features.code-scanning %}' +miniTocMaxHeadingLevel: 3 +versions: + feature: code-scanning-without-workflow +type: how_to +topics: + - Advanced Security + - Code scanning + - CodeQL + - Actions + - Troubleshooting +--- + +## Disabling a pre-existing {% data variables.product.prodname_codeql %} workflow + +If you see two workflows named **{% data variables.product.prodname_codeql %}**, you need to disable the workflow triggered by your pre-existing {% data variables.product.prodname_codeql %} workflow file. Navigate to the main page of your repository, then click {% octicon "play" aria-label="The play icon" %} **Actions**. In the sidebar, find the two workflows named **{% data variables.product.prodname_codeql %}**, then open both workflows. Following the workflow title, look for a link to the workflow file. This file will likely be named `codeql.yml` or `codeql-analysis.yml`. Once you have found the {% data variables.product.prodname_codeql %} workflow with an associated workflow file, select {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %} on the workflow summary page, then click **Disable workflow**. For more information about disabling workflows, see "[Disabling and enabling a workflow](/actions/managing-workflow-runs/disabling-and-enabling-a-workflow#disabling-a-workflow)." + +## Using more {% data variables.product.prodname_actions %} minutes than expected + +If a repository uses more {% data variables.product.prodname_actions %} minutes than expected, and you previously scanned the repository using the advanced setup for {% data variables.product.prodname_codeql %}, your pre-existing workflow file may be running in addition to the default {% data variables.product.prodname_codeql %} setup. For more information on disabling your pre-existing workflow file, see "[Disabling a pre-existing {% data variables.product.prodname_codeql %} workflow](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-default-setup-for-codeql#disabling-a-pre-existing-codeql-workflow)." + +Optionally, if you are certain you no longer need the pre-existing workflow file, you can instead delete the file from your repository. For more information, see "[Deleting files in a repository](/repositories/working-with-files/managing-files/deleting-files-in-a-repository)." + +## Enabling the default setup takes too long + +If enabling your default setup is taking too long, try canceling the workflow run and restarting the setup. To restart your setup, navigate to the main page of your repository, then click {% octicon "play" aria-label="The play icon" %} **Actions**. Click the **{% data variables.product.prodname_codeql %}** workflow run that's in progress, then click **Cancel workflow**. Once {% octicon "stop" aria-label="The stop icon" %} appears beside the workflow run name, navigate back to the **Code security and analysis** settings and re-enable the default setup. If the default setup continues to stall, please contact {% data variables.contact.contact_support %} or try enabling the advanced setup. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)." + +## Unclear what triggered a workflow run + +If you don't know what triggered an analysis, look at the log for the last scan. For more information on viewing your last scan's log, see "[Viewing {% data variables.product.prodname_code_scanning %} logs](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/viewing-code-scanning-logs#viewing-the-logging-output-from-code-scanning)." \ No newline at end of file diff --git a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/viewing-code-scanning-logs.md b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/viewing-code-scanning-logs.md index 2066a0a5cc..ff392c9839 100644 --- a/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/viewing-code-scanning-logs.md +++ b/content/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/viewing-code-scanning-logs.md @@ -19,7 +19,7 @@ shortTitle: View code scanning logs {% data reusables.code-scanning.beta %} {% data reusables.code-scanning.enterprise-enable-code-scanning-actions %} -## About your {% data variables.product.prodname_code_scanning %} setup +## About your {% data variables.product.prodname_code_scanning %} setup You can use a variety of tools to set up {% data variables.product.prodname_code_scanning %} in your repository. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#options-for-setting-up-code-scanning)." @@ -27,9 +27,9 @@ The log and diagnostic information available to you depends on the method you us ## About analysis and diagnostic information -You can see analysis and diagnostic information for {% data variables.product.prodname_code_scanning %} run using {% data variables.product.prodname_codeql %} analysis on {% data variables.product.prodname_dotcom %}. +You can see analysis and diagnostic information for {% data variables.product.prodname_code_scanning %} run using {% data variables.product.prodname_codeql %} analysis on {% data variables.product.prodname_dotcom %}. -**Analysis** information is shown for the most recent analysis in a header at the top of the list of alerts. For more information, see "[Managing code scanning alerts for your repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/managing-code-scanning-alerts-for-your-repository#viewing-the-alerts-for-a-repository)." +**Analysis** information is shown for the most recent analysis in a header at the top of the list of alerts. For more information, see "[Managing {% data variables.product.prodname_code_scanning %} alerts for your repository](/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/managing-code-scanning-alerts-for-your-repository#viewing-the-alerts-for-a-repository)." **Diagnostic** information is displayed in the Action workflow logs and consists of summary metrics and extractor diagnostics. For information about accessing {% data variables.product.prodname_code_scanning %} logs on {% data variables.product.prodname_dotcom %}, see "[Viewing the logging output from {% data variables.product.prodname_code_scanning %}](#viewing-the-logging-output-from-code-scanning)" below. @@ -47,7 +47,7 @@ For information about the {% data variables.product.prodname_codeql_cli %}, see {% ifversion codeql-action-debug-logging %} -You can see more detailed information about {% data variables.product.prodname_codeql %} extractor errors and warnings that occurred during database creation by enabling debug logging. For more information, see "[Troubleshooting the CodeQL workflow](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow#creating-codeql-debugging-artifacts-by-re-running-jobs-with-debug-logging-enabled)." +You can see more detailed information about {% data variables.product.prodname_codeql %} extractor errors and warnings that occurred during database creation by enabling debug logging. For more information, see "[Troubleshooting the {% data variables.product.prodname_codeql %} workflow](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-your-advanced-setup-for-codeql#creating-codeql-debugging-artifacts-by-re-running-jobs-with-debug-logging-enabled)." {% endif %} @@ -65,18 +65,28 @@ After setting up {% data variables.product.prodname_code_scanning %} for your re 1. Click the entry for the {% data variables.product.prodname_code_scanning %} workflow. -2. Click the job name on the left. For example, **Analyze (LANGUAGE)**. +{%- ifversion code-scanning-without-workflow %} + {% note %} + + **Note:** If you are looking for the {% data variables.product.prodname_codeql %} workflow run triggered by enabling default setup, the text of the entry is "{% data variables.product.prodname_codeql %}." + + {% endnote %} +{% endif -%} + +1. Click the job name on the left. For example, **Analyze (LANGUAGE)**. ![Log output from the {% data variables.product.prodname_code_scanning %} workflow](/assets/images/help/repository/code-scanning-logging-analyze-action.png) 1. Review the logging output from the actions in this workflow as they run. +1. Optionally, to see more detail about the commit that triggered the workflow run, click {% octicon "git-commit" aria-label="The commit icon" %} **SHORT COMMIT HASH**. This short commit hash is 7 lowercase characters immediately following the commit author's username. + 1. Once all jobs are complete, you can view the details of any {% data variables.product.prodname_code_scanning %} alerts that were identified. For more information, see "[Managing {% data variables.product.prodname_code_scanning %} alerts for your repository](/code-security/secure-coding/managing-code-scanning-alerts-for-your-repository#viewing-the-alerts-for-a-repository)." {% note %} -**Note:** If you raised a pull request to add the {% data variables.product.prodname_code_scanning %} workflow to the repository, alerts from that pull request aren't displayed directly on the {% data variables.product.prodname_code_scanning_capc %} page until the pull request is merged. If any alerts were found you can view these, before the pull request is merged, by clicking the **_n_ alerts found** link in the banner on the {% data variables.product.prodname_code_scanning_capc %} page. +**Note:** If you raised a pull request to add the {% data variables.product.prodname_code_scanning %} workflow to the repository, alerts from that pull request aren't displayed directly on the {% data variables.product.prodname_code_scanning_capc %} page until the pull request is merged. If any alerts were found you can view these, before the pull request is merged, by clicking the **NUMBER alerts found** link in the banner on the {% data variables.product.prodname_code_scanning_capc %} page. -![Click the "n alerts found" link](/assets/images/help/repository/code-scanning-alerts-found-link.png) +![Click the "NUMBER alerts found" link](/assets/images/help/repository/code-scanning-alerts-found-link.png) {% endnote %} diff --git a/content/code-security/getting-started/securing-your-repository.md b/content/code-security/getting-started/securing-your-repository.md index 73b9c14c4a..b261d58407 100644 --- a/content/code-security/getting-started/securing-your-repository.md +++ b/content/code-security/getting-started/securing-your-repository.md @@ -30,7 +30,7 @@ Your security needs are unique to your repository, so you may not need to enable The first step to securing a repository is to set up who can see and modify your code. For more information, see "[Managing repository settings](/github/administering-a-repository/managing-repository-settings)." -From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %}Settings**, then scroll down to the "Danger Zone." +From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %} Settings**, then scroll down to the "Danger Zone." - To change who can view your repository, click **Change visibility**. For more information, see "[Setting repository visibility](/github/administering-a-repository/setting-repository-visibility)."{% ifversion fpt or ghec or ghes > 3.3 or ghae > 3.3 %} - To change who can access your repository and adjust permissions, click **Manage access**. For more information, see"[Managing teams and people with access to your repository](/github/administering-a-repository/managing-teams-and-people-with-access-to-your-repository)."{% endif %} @@ -38,9 +38,9 @@ From the main page of your repository, click **{% octicon "gear" aria-label="The ## Setting a security policy 1. From the main page of your repository, click **{% octicon "shield" aria-label="The shield symbol" %} Security**. -2. Click **Security policy**. -3. Click **Start setup**. -4. Add information about supported versions of your project and how to report vulnerabilities. +1. Click **Security policy**. +1. Click **Start setup**. +1. Add information about supported versions of your project and how to report vulnerabilities. For more information, see "[Adding a security policy to your repository](/code-security/getting-started/adding-a-security-policy-to-your-repository)." @@ -50,8 +50,8 @@ For more information, see "[Adding a security policy to your repository](/code-s The dependency graph is automatically generated for all public repositories, and you can choose to enable it for private repositories. It interprets manifest and lock files in a repository to identify dependencies. 1. From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %} Settings**. -2. Click **Security & analysis**. -3. Next to Dependency graph, click **Enable** or **Disable**. +1. Click **Security & analysis**. +1. Next to Dependency graph, click **Enable** or **Disable**. {% endif %} {% data reusables.dependabot.dependabot-alerts-dependency-graph-enterprise %} @@ -64,8 +64,8 @@ For more information, see "[Exploring the dependencies of a repository](/code-se {% ifversion fpt or ghec %} 1. Click your profile photo, then click **Settings**. -2. Click **Security & analysis**. -3. Click **Enable all** next to {% data variables.product.prodname_dependabot_alerts %}. +1. Click **Security & analysis**. +1. Click **Enable all** next to {% data variables.product.prodname_dependabot_alerts %}. {% endif %} {% data reusables.dependabot.dependabot-alerts-beta %} @@ -77,12 +77,12 @@ For more information, see "[About {% data variables.product.prodname_dependabot_ Dependency review lets you visualize dependency changes in pull requests before they are merged into your repositories. For more information, see "[About dependency review](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review)." -Dependency review is a {% data variables.product.prodname_GH_advanced_security %} feature. {% ifversion fpt or ghec %}Dependency review is already enabled for all public repositories. {% ifversion fpt %}Organizations that use {% data variables.product.prodname_ghe_cloud %} with {% data variables.product.prodname_advanced_security %} can additionally enable dependency review for private and internal repositories. For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/code-security/getting-started/securing-your-repository#managing-dependency-review). {% endif %}{% endif %}{% ifversion ghec or ghes or ghae %}To enable dependency review for a {% ifversion ghec %}private or internal {% endif %}repository, ensure that the dependency graph is enabled and enable {% data variables.product.prodname_GH_advanced_security %}. +Dependency review is a {% data variables.product.prodname_GH_advanced_security %} feature. {% ifversion fpt or ghec %}Dependency review is already enabled for all public repositories. {% ifversion fpt %}Organizations that use {% data variables.product.prodname_ghe_cloud %} with {% data variables.product.prodname_advanced_security %} can additionally enable dependency review for private and internal repositories. For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/code-security/getting-started/securing-your-repository#managing-dependency-review). {% endif %}{% endif %}{% ifversion ghec or ghes or ghae %}To enable dependency review for a {% ifversion ghec %}private or internal {% endif %}repository, ensure that the dependency graph is enabled and enable {% data variables.product.prodname_GH_advanced_security %}. 1. From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %}Settings**. -2. Click **Security & analysis**. -3. {% ifversion ghec %}If dependency graph is not already enabled, click **Enable**.{% elsif ghes or ghae %}Check that dependency graph is configured for your enterprise.{% endif %} -4. If {% data variables.product.prodname_GH_advanced_security %} is not already enabled, click **Enable**. +1. Click **Security & analysis**. +1. {% ifversion ghec %}If dependency graph is not already enabled, click **Enable**.{% elsif ghes or ghae %}Check that dependency graph is configured for your enterprise.{% endif %} +1. If {% data variables.product.prodname_GH_advanced_security %} is not already enabled, click **Enable**. {% endif %} @@ -93,8 +93,8 @@ Dependency review is a {% data variables.product.prodname_GH_advanced_security % For any repository that uses {% data variables.product.prodname_dependabot_alerts %}, you can enable {% data variables.product.prodname_dependabot_security_updates %} to raise pull requests with security updates when vulnerabilities are detected. 1. From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %}Settings**. -2. Click **Security & analysis**. -3. Next to {% data variables.product.prodname_dependabot_security_updates %}, click **Enable**. +1. Click **Security & analysis**. +1. Next to {% data variables.product.prodname_dependabot_security_updates %}, click **Enable**. For more information, see "[About {% data variables.product.prodname_dependabot_security_updates %}](/code-security/supply-chain-security/about-dependabot-security-updates)" and "[Configuring {% data variables.product.prodname_dependabot_security_updates %}](/code-security/supply-chain-security/configuring-dependabot-security-updates)." @@ -104,9 +104,9 @@ You can enable {% data variables.product.prodname_dependabot %} to automatically {% ifversion dependabot-settings-update-37 %} 1. From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %} Settings**. -2. Click **Security & analysis**. -3. Next to {% data variables.product.prodname_dependabot_version_updates %}, click **Enable** to create a basic *dependabot.yml* configuration file. -4. Specify the dependencies to update and commit the file to the repository. For more information, see "[Configuring Dependabot version updates](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates#enabling-dependabot-version-updates)." +1. Click **Security & analysis**. +1. Next to {% data variables.product.prodname_dependabot_version_updates %}, click **Enable** to create a basic *dependabot.yml* configuration file. +1. Specify the dependencies to update and commit the file to the repository. For more information, see "[Configuring Dependabot version updates](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates#enabling-dependabot-version-updates)." {% else %} To enable {% data variables.product.prodname_dependabot_version_updates %}, you must create a *dependabot.yml* configuration file. For more information, see "[Configuring {% data variables.product.prodname_dependabot %} version updates](/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/enabling-and-disabling-dependabot-version-updates)." @@ -116,7 +116,18 @@ To enable {% data variables.product.prodname_dependabot_version_updates %}, you ## Configuring {% data variables.product.prodname_code_scanning %} -You can set up {% data variables.product.prodname_code_scanning %} to automatically identify vulnerabilities and errors in the code stored in your repository by using a {% data variables.code-scanning.codeql_workflow %} or third-party tool. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository)." +You can set up {% data variables.product.prodname_code_scanning %} to automatically identify vulnerabilities and errors in the code stored in your repository by using a {% data variables.code-scanning.codeql_workflow %} or third-party tool.{% ifversion code-scanning-without-workflow %} Depending on the programming languages in your repository, you can configure {% data variables.product.prodname_code_scanning %} with {% data variables.product.prodname_codeql %} using the default setup, in which {% data variables.product.prodname_dotcom %} automatically determines the languages to scan, query suites to run, and events that will trigger a new scan.{% else %} For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository)."{% endif %} + +{% ifversion code-scanning-without-workflow %} + +1. From the main page of your repository, click {% octicon "gear" aria-label="The gear icon" %} **Settings**. +1. In the "Security" section of the sidebar, click **{% octicon "shield-lock" aria-label="The shield-lock icon" %} Code security and analysis**. +1. In the "{% data variables.product.prodname_code_scanning_capc %}" section, select **Set up** {% octicon "triangle-down" aria-label="The downwards-facing triangle icon" %}, then click **Default**. +1. In the pop-up window that appears, review the default configuration settings for your repository, then click **Enable {% data variables.product.prodname_codeql %}**. + +Alternatively, you can use the advanced setup, which generates a workflow file you can edit to customize your {% data variables.product.prodname_code_scanning %} with {% data variables.product.prodname_codeql %}. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/secure-coding/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)." + +{% endif %} {% data variables.product.prodname_code_scanning_capc %} is available {% ifversion fpt or ghec %}for all public repositories, and for private repositories owned by organizations that are part of an enterprise with a license for {% else %}for organization-owned repositories if your enterprise uses {% endif %}{% data variables.product.prodname_GH_advanced_security %}. @@ -130,9 +141,9 @@ You can set up {% data variables.product.prodname_code_scanning %} to automatica {% data variables.product.prodname_secret_scanning_caps %} is {% ifversion ghec %}enabled for all public repositories and is available for private repositories owned by organizations that are part of an enterprise with a license for {% else %}available for organization-owned repositories if your enterprise uses {% endif %}{% data variables.product.prodname_GH_advanced_security %}. {% ifversion fpt %}For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/code-security/getting-started/securing-your-repository#configuring-secret-scanning).{% else %}{% data variables.product.prodname_secret_scanning_caps %} may already be enabled for your repository, depending upon your organization's settings. 1. From the main page of your repository, click **{% octicon "gear" aria-label="The Settings gear" %}Settings**. -2. Click **Security & analysis**. -3. If {% data variables.product.prodname_GH_advanced_security %} is not already enabled, click **Enable**. -4. Next to {% data variables.product.prodname_secret_scanning_caps %}, click **Enable**. +1. Click **Security & analysis**. +1. If {% data variables.product.prodname_GH_advanced_security %} is not already enabled, click **Enable**. +1. Next to {% data variables.product.prodname_secret_scanning_caps %}, click **Enable**. {% endif %} {% endif %} diff --git a/content/get-started/learning-about-github/about-github-advanced-security.md b/content/get-started/learning-about-github/about-github-advanced-security.md index 02c53793e8..1e55d138f9 100644 --- a/content/get-started/learning-about-github/about-github-advanced-security.md +++ b/content/get-started/learning-about-github/about-github-advanced-security.md @@ -88,7 +88,7 @@ If you have an enterprise account, license use for the entire enterprise is show {% data reusables.advanced-security.starter-workflows-beta %} {% data reusables.advanced-security.starter-workflow-overview %} -For more information on starter workflows, see "[Setting up {% data variables.product.prodname_code_scanning %} using starter workflows](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)" and "[Using starter workflows](/actions/using-workflows/using-starter-workflows)." +For more information on starter workflows, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)" and "[Using starter workflows](/actions/using-workflows/using-starter-workflows)." {% endif %} diff --git a/data/features/code-scanning-without-workflow.yml b/data/features/code-scanning-without-workflow.yml new file mode 100644 index 0000000000..3b6f40beb6 --- /dev/null +++ b/data/features/code-scanning-without-workflow.yml @@ -0,0 +1,5 @@ +versions: + fpt: '*' + ghec: '*' + ghes: '>3.8' + ghae: '>3.8' diff --git a/data/reusables/actions/starter-workflow-categories.md b/data/reusables/actions/starter-workflow-categories.md index 01140ce455..85d84cf0df 100644 --- a/data/reusables/actions/starter-workflow-categories.md +++ b/data/reusables/actions/starter-workflow-categories.md @@ -1,5 +1,5 @@ {% data variables.product.prodname_dotcom %} provides ready-to-use starter workflows for the following high level categories: -- **Deployment (CD)**. For more information, see "[About continuous deployment](/actions/deployment/about-deployments/about-continuous-deployment)." -{% ifversion fpt or ghec %}- **Security**. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} using starter workflows](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)."{% endif %} -- **Continuous Integration (CI)**. For more information, see "[About continuous integration](/actions/automating-builds-and-tests/about-continuous-integration)." +- **Deployment (CD)**. For more information, see "[About continuous deployment](/actions/deployment/about-deployments/about-continuous-deployment)." +{% ifversion fpt or ghec %}- **Security**. For more information, see "[Setting up {% data variables.product.prodname_code_scanning %} for a repository](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)."{% endif %} +- **Continuous Integration (CI)**. For more information, see "[About continuous integration](/actions/automating-builds-and-tests/about-continuous-integration)." - **Automation**. Automation starter workflows offer solutions for automating workflows, such as triaging pull requests and applying a label based on the paths that are modified in the pull request, or greeting users who are first time contributors to the repository. diff --git a/data/reusables/code-scanning/edit-workflow.md b/data/reusables/code-scanning/edit-workflow.md index 17057d68fc..38cbedd483 100644 --- a/data/reusables/code-scanning/edit-workflow.md +++ b/data/reusables/code-scanning/edit-workflow.md @@ -1 +1 @@ -Typically, you don't need to edit the default workflow for {% data variables.product.prodname_code_scanning %}. However, if required, you can edit the workflow to customize some of the settings. For example, you can edit {% data variables.product.prodname_dotcom %}'s {% data variables.code-scanning.codeql_workflow %} to specify the frequency of scans, the languages or directories to scan, and what {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} looks for in your code. You might also need to edit the {% data variables.code-scanning.codeql_workflow %} if you use a specific set of commands to compile your code. +Typically, you don't need to edit the generated workflow file for {% data variables.product.prodname_code_scanning %}. However, if required, you can edit the workflow to customize some of the settings. For example, you can edit {% data variables.product.prodname_dotcom %}'s {% data variables.code-scanning.codeql_workflow %} to specify the frequency of scans, the languages or directories to scan, and what {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} looks for in your code. You might also need to edit the {% data variables.code-scanning.codeql_workflow %} if you use a specific set of commands to compile your code. diff --git a/data/reusables/code-scanning/enabling-options.md b/data/reusables/code-scanning/enabling-options.md index 5e5bf62734..1331f2545f 100644 --- a/data/reusables/code-scanning/enabling-options.md +++ b/data/reusables/code-scanning/enabling-options.md @@ -1,4 +1,4 @@ | Type of analysis | Options for generating alerts | |------------------|-------------------------------| -| {% data variables.product.prodname_codeql %} | Using {% data variables.product.prodname_actions %} (see "[Setting up {% data variables.product.prodname_code_scanning %} using actions](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-actions)") or running {% data variables.product.prodname_codeql %} analysis in a third-party continuous integration (CI) system (see "[About {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} in your CI system](/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system/about-codeql-code-scanning-in-your-ci-system)"). -| Third‑party | Using {% data variables.product.prodname_actions %} (see "[Setting up {% data variables.product.prodname_code_scanning %} using actions](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-actions)") or generated externally and uploaded to {% data variables.product.product_name %} (see "[Uploading a SARIF file to {% data variables.product.prodname_dotcom %}](/code-security/code-scanning/integrating-with-code-scanning/uploading-a-sarif-file-to-github)").| +| {% data variables.product.prodname_codeql %} | Using {% data variables.product.prodname_actions %} {% ifversion code-scanning-without-workflow%}with either the default setup (see "[Setting up {% data variables.product.prodname_code_scanning %} automatically](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-automatically)"), or an advanced setup {% endif %}{% ifversion fpt or ghec %}(see "[Creating an advanced setup](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#creating-an-advanced-setup)"){% else %}(see below){% endif %}{% ifversion code-scanning-without-workflow %},{% endif %} or running {% data variables.product.prodname_codeql %} analysis in a third-party continuous integration (CI) system (see "[About {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} in your CI system](/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system/about-codeql-code-scanning-in-your-ci-system)"). +| Third‑party | Using {% data variables.product.prodname_actions %} {% ifversion fpt or ghec %}(see "[Setting up {% data variables.product.prodname_code_scanning %} using starter workflows](/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/setting-up-code-scanning-for-a-repository#setting-up-code-scanning-using-starter-workflows)") {% endif %}or third-party tools and uploading results to {% data variables.product.product_name %} (see "[Uploading a SARIF file to {% data variables.product.prodname_dotcom %}](/code-security/code-scanning/integrating-with-code-scanning/uploading-a-sarif-file-to-github)").| diff --git a/data/reusables/user-settings/security-analysis.md b/data/reusables/user-settings/security-analysis.md index 633c1d4071..f0da723bbb 100644 --- a/data/reusables/user-settings/security-analysis.md +++ b/data/reusables/user-settings/security-analysis.md @@ -2,5 +2,5 @@ 1. In the "Security" section of the sidebar, click **{% octicon "shield-lock" aria-label="The shield-lock icon" %} Code security and analysis**. {% else %} 1. In the left sidebar, click **Security & analysis**. -![Security and analysis settings](/assets/images/help/settings/settings-sidebar-security-analysis.png) + ![Security and analysis settings](/assets/images/help/settings/settings-sidebar-security-analysis.png) {% endif %} From 1bf3a6da84aeaf34a55ad44d5b4c8502e3f9770f Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Mon, 9 Jan 2023 17:29:57 +0100 Subject: [PATCH 08/41] kill-port@2.0.1 (#33836) --- package-lock.json | 11 +++++++---- package.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 85313f3eb8..bbcfae4280 100644 --- a/package-lock.json +++ b/package-lock.json @@ -141,7 +141,7 @@ "jest-fail-on-console": "^3.0.1", "jest-github-actions-reporter": "^1.0.3", "jest-slow-test-reporter": "^1.0.0", - "kill-port": "2.0.0", + "kill-port": "2.0.1", "linkinator": "4.0.2", "lint-staged": "^13.0.1", "make-promises-safe": "^5.1.0", @@ -13772,9 +13772,10 @@ } }, "node_modules/kill-port": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kill-port/-/kill-port-2.0.1.tgz", + "integrity": "sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==", "dev": true, - "license": "MIT", "dependencies": { "get-them-args": "1.3.2", "shell-exec": "1.0.2" @@ -30396,7 +30397,9 @@ } }, "kill-port": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kill-port/-/kill-port-2.0.1.tgz", + "integrity": "sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==", "dev": true, "requires": { "get-them-args": "1.3.2", diff --git a/package.json b/package.json index ce71924160..4bd6b91931 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "jest-fail-on-console": "^3.0.1", "jest-github-actions-reporter": "^1.0.3", "jest-slow-test-reporter": "^1.0.0", - "kill-port": "2.0.0", + "kill-port": "2.0.1", "linkinator": "4.0.2", "lint-staged": "^13.0.1", "make-promises-safe": "^5.1.0", From a13833bb8dcd13e488d8fa9338643eb4d9d3609b Mon Sep 17 00:00:00 2001 From: Jo <82854796+AskJo@users.noreply.github.com> Date: Mon, 9 Jan 2023 11:36:08 -0500 Subject: [PATCH 09/41] Security_5389 Release Note Update (#33748) Co-authored-by: Vanessa --- .../enterprise-server/3-3/16.yml | 11 ++++--- .../enterprise-server/3-3/17.yml | 2 +- .../enterprise-server/3-4/11.yml | 21 ++++++------ .../enterprise-server/3-4/12.yml | 2 +- .../release-notes/enterprise-server/3-5/8.yml | 23 ++++++------- .../release-notes/enterprise-server/3-5/9.yml | 2 +- .../release-notes/enterprise-server/3-6/4.yml | 33 ++++++++++--------- .../release-notes/enterprise-server/3-6/5.yml | 2 +- 8 files changed, 50 insertions(+), 46 deletions(-) diff --git a/data/release-notes/enterprise-server/3-3/16.yml b/data/release-notes/enterprise-server/3-3/16.yml index 6201900c0d..5ddd0b33a0 100644 --- a/data/release-notes/enterprise-server/3-3/16.yml +++ b/data/release-notes/enterprise-server/3-3/16.yml @@ -4,12 +4,13 @@ sections: - "**MEDIUM**: Updated [CommonMarker](https://github.com/gjtorikian/commonmarker) to address a scenario where parallel requests to the Markdown REST API could result in unbounded resource exhaustion. This vulnerability has been assigned [CVE-2022-39209](https://nvd.nist.gov/vuln/detail/CVE-2022-39209)." - "**MEDIUM**: Scoped user-to-server tokens from GitHub Apps could bypass authorization checks in GraphQL API requests when accessing non-repository resources. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/)." - "**MEDIUM**: Pull request preview links did not properly sanitize URLs, allowing a malicious user to embed dangerous links in the instances web UI. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com)." - - The [Create or update file contents API](/rest/repos/contents#create-or-update-file-contents) correctly enforces workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com). + - | + **MEDIUM**: An incorrect authorization vulnerability was identified in GitHub Enterprise Server that allowed a repository-scoped token with read/write access to modify GitHub Actions workflow files without a workflow scope. The "[Create or Update file contents API](/rest/repos/contents#create-or-update-file-contents)" should enforce workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com) and has been assigned [CVE-2022-46258](https://www.cve.org/CVERecord?id=CVE-2022-46258). bugs: - - Setting the maintenance mode with an IP Exception List would not persist across upgrades. - - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. - - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. - - Zombie processes no longer accumulate in the `gitrpcd` container. + - Setting the maintenance mode with an IP Exception List would not persist across upgrades. + - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. + - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. + - Zombie processes no longer accumulate in the `gitrpcd` container. known_issues: - After upgrading to {% data variables.product.prodname_ghe_server %} 3.3, {% data variables.product.prodname_actions %} may fail to start automatically. To resolve this issue, connect to the appliance via SSH and run the `ghe-actions-start` command. - On a freshly set up {% data variables.product.prodname_ghe_server %} instance without any users, an attacker could create the first admin user. diff --git a/data/release-notes/enterprise-server/3-3/17.yml b/data/release-notes/enterprise-server/3-3/17.yml index 817a3b0c8f..fd554ff545 100644 --- a/data/release-notes/enterprise-server/3-3/17.yml +++ b/data/release-notes/enterprise-server/3-3/17.yml @@ -4,7 +4,7 @@ sections: - | **HIGH**: A path traversal vulnerability was identified in GitHub Enterprise Server that allowed remote code execution when building a GitHub Pages site. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the instance. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/) and has been assigned [CVE-2022-46256](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-46256). - | - **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: + **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: - Installation of GitHub Enterprise Server on the VMware ESXi hypervisor failed due to the generation of an OVA file with an invalid capacity value. - When users performed an operation using the API, GitHub Enterprise Server enforced repository size quotas even when disabled globally. diff --git a/data/release-notes/enterprise-server/3-4/11.yml b/data/release-notes/enterprise-server/3-4/11.yml index 85071ab246..046bc681fb 100644 --- a/data/release-notes/enterprise-server/3-4/11.yml +++ b/data/release-notes/enterprise-server/3-4/11.yml @@ -3,17 +3,18 @@ sections: security_fixes: - "**MEDIUM**: Updated [CommonMarker](https://github.com/gjtorikian/commonmarker) to address a scenario where parallel requests to the Markdown REST API could result in unbounded resource exhaustion. This vulnerability has been assigned [CVE-2022-39209](https://nvd.nist.gov/vuln/detail/CVE-2022-39209)." - "**MEDIUM**: Scoped user-to-server tokens from GitHub Apps could bypass authorization checks in GraphQL API requests when accessing non-repository resources. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/)." - - "**MEDIUM**: Pull request preview links did not properly sanitize URLs, allowing a malicious user to embed dangerous links in the instances web UI. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com)." - - The [Create or update file contents API](/rest/repos/contents#create-or-update-file-contents) correctly enforces workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com). + - "**MEDIUM**: Pull request preview links did not properly sanitize URLs, allowing a malicious user to embed dangerous links in the instances web UI. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com)." + - | + **MEDIUM**: An incorrect authorization vulnerability was identified in GitHub Enterprise Server that allowed a repository-scoped token with read/write access to modify GitHub Actions workflow files without a workflow scope. The "[Create or Update file contents API](/rest/repos/contents#create-or-update-file-contents)" should enforce workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com) and has been assigned [CVE-2022-46258](https://www.cve.org/CVERecord?id=CVE-2022-46258). bugs: - - If GitHub Actions was configured with S3 blob storage for the instance, content like logs and artifacts from deleted or expired workflow runs would remain in blob storage indefinitely. The instance will delete this content automatically the next time a regular background cleanup job runs. - - Setting the maintenance mode with an IP Exception List would not persist across upgrades. - - GitHub Pages builds could time out on instances in AWS that are configured for high availability. - - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. - - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. - - In some cases, users could not merge a pull request due to unexpected status checks. - - After running migrations for the GitHub Enterprise Importer on an instance configured for high availability, replication of migration storage assets would not catch up. - - Zombie processes no longer accumulate in the `gitrpcd` container. + - If GitHub Actions was configured with S3 blob storage for the instance, content like logs and artifacts from deleted or expired workflow runs would remain in blob storage indefinitely. The instance will delete this content automatically the next time a regular background cleanup job runs. + - Setting the maintenance mode with an IP Exception List would not persist across upgrades. + - GitHub Pages builds could time out on instances in AWS that are configured for high availability. + - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. + - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. + - In some cases, users could not merge a pull request due to unexpected status checks. + - After running migrations for the GitHub Enterprise Importer on an instance configured for high availability, replication of migration storage assets would not catch up. + - Zombie processes no longer accumulate in the `gitrpcd` container. known_issues: - On a freshly set up {% data variables.product.prodname_ghe_server %} instance without any users, an attacker could create the first admin user. - Custom firewall rules are removed during the upgrade process. diff --git a/data/release-notes/enterprise-server/3-4/12.yml b/data/release-notes/enterprise-server/3-4/12.yml index 1629ca971c..e37dd2c943 100644 --- a/data/release-notes/enterprise-server/3-4/12.yml +++ b/data/release-notes/enterprise-server/3-4/12.yml @@ -4,7 +4,7 @@ sections: - | **HIGH**: A path traversal vulnerability was identified in GitHub Enterprise Server that allowed remote code execution when building a GitHub Pages site. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the instance. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/) and has been assigned [CVE-2022-46256](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-46256). - | - **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: + **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: - When a site administrator ran the `ghe-repl-sync-ca-certificates` command from an instances primary node via the administrative shell (SSH), the command only replicated CA certificates from the instances primary node to a single replica node. The command did not replicate the certificates to all available replica nodes. - Installation of GitHub Enterprise Server on the VMware ESXi hypervisor failed due to the generation of an OVA file with an invalid capacity value. diff --git a/data/release-notes/enterprise-server/3-5/8.yml b/data/release-notes/enterprise-server/3-5/8.yml index 4eab55c433..66488a91c7 100644 --- a/data/release-notes/enterprise-server/3-5/8.yml +++ b/data/release-notes/enterprise-server/3-5/8.yml @@ -4,18 +4,19 @@ sections: - "**MEDIUM**: Updated [CommonMarker](https://github.com/gjtorikian/commonmarker) to address a scenario where parallel requests to the Markdown REST API could result in unbounded resource exhaustion. This vulnerability has been assigned [CVE-2022-39209](https://nvd.nist.gov/vuln/detail/CVE-2022-39209)." - "**MEDIUM**: Scoped user-to-server tokens from GitHub Apps could bypass authorization checks in GraphQL API requests when accessing non-repository resources. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/)." - "**MEDIUM**: Pull request preview links did not properly sanitize URLs, allowing a malicious user to embed dangerous links in the instances web UI. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com)." - - The [Create or update file contents API](/rest/repos/contents#create-or-update-file-contents) correctly enforces workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com). + - | + **MEDIUM**: An incorrect authorization vulnerability was identified in GitHub Enterprise Server that allowed a repository-scoped token with read/write access to modify GitHub Actions workflow files without a workflow scope. The "[Create or Update file contents API](/rest/repos/contents#create-or-update-file-contents)" should enforce workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com) and has been assigned [CVE-2022-46258](https://www.cve.org/CVERecord?id=CVE-2022-46258). bugs: - - Setting the maintenance mode with an IP Exception List would not persist across upgrades. - - GitHub Pages builds could time out on instances in AWS that are configured for high availability. - - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. - - The audit log timestamp for Dependabot alert events returned the creation date of the alert instead of the timestamp when a user took action on the alert. - - When accessing an instances JavaScript resources from behind a proxy, the browser displayed Cross-Origin Resource Sharing (CORS) errors. - - If a user named a status check with leading or trailing spaces, the instance created a duplicate check if another check existed with the same name and no leading or trailing spaces. - - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. - - When an enterprise owner impersonated a user and tried to install a GitHub App, the button to confirm the installation was disabled and could not be clicked. - - After running migrations for the GitHub Enterprise Importer on an instance configured for high availability, replication of migration storage assets would not catch up. - - Zombie processes no longer accumulate in the `gitrpcd` container. + - Setting the maintenance mode with an IP Exception List would not persist across upgrades. + - GitHub Pages builds could time out on instances in AWS that are configured for high availability. + - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. + - The audit log timestamp for Dependabot alert events returned the creation date of the alert instead of the timestamp when a user took action on the alert. + - When accessing an instances JavaScript resources from behind a proxy, the browser displayed Cross-Origin Resource Sharing (CORS) errors. + - If a user named a status check with leading or trailing spaces, the instance created a duplicate check if another check existed with the same name and no leading or trailing spaces. + - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. + - When an enterprise owner impersonated a user and tried to install a GitHub App, the button to confirm the installation was disabled and could not be clicked. + - After running migrations for the GitHub Enterprise Importer on an instance configured for high availability, replication of migration storage assets would not catch up. + - Zombie processes no longer accumulate in the `gitrpcd` container. known_issues: - On a freshly set up {% data variables.product.prodname_ghe_server %} instance without any users, an attacker could create the first admin user. - Custom firewall rules are removed during the upgrade process. diff --git a/data/release-notes/enterprise-server/3-5/9.yml b/data/release-notes/enterprise-server/3-5/9.yml index 4c152cd0d9..30beacffc0 100644 --- a/data/release-notes/enterprise-server/3-5/9.yml +++ b/data/release-notes/enterprise-server/3-5/9.yml @@ -4,7 +4,7 @@ sections: - | **HIGH**: A path traversal vulnerability was identified in GitHub Enterprise Server that allowed remote code execution when building a GitHub Pages site. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the instance. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/) and has been assigned [CVE-2022-46256](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-46256). - | - **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: + **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: - If a GitHub Actions dependency uses a pinned SHA version, Dependabot will no longer mark the dependency as vulnerable. - When a site administrator ran the `ghe-repl-sync-ca-certificates` command from an instances primary node via the administrative shell (SSH), the command only replicated CA certificates from the instances primary node to a single replica node. The command did not replicate the certificates to all available replica nodes. diff --git a/data/release-notes/enterprise-server/3-6/4.yml b/data/release-notes/enterprise-server/3-6/4.yml index 0ae3c7db10..60d99b268e 100644 --- a/data/release-notes/enterprise-server/3-6/4.yml +++ b/data/release-notes/enterprise-server/3-6/4.yml @@ -4,24 +4,25 @@ sections: - "**MEDIUM**: Updated [CommonMarker](https://github.com/gjtorikian/commonmarker) to address a scenario where parallel requests to the Markdown REST API could result in unbounded resource exhaustion. This vulnerability has been assigned [CVE-2022-39209](https://nvd.nist.gov/vuln/detail/CVE-2022-39209)." - "**MEDIUM**: Scoped user-to-server tokens from GitHub Apps could bypass authorization checks in GraphQL API requests when accessing non-repository resources. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/)." - "**MEDIUM**: Pull request preview links did not properly sanitize URLs, allowing a malicious user to embed dangerous links in the instances web UI. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com)." - - The [Create or update file contents API](/rest/repos/contents#create-or-update-file-contents) correctly enforces workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com). + - | + **MEDIUM**: An incorrect authorization vulnerability was identified in GitHub Enterprise Server that allowed a repository-scoped token with read/write access to modify GitHub Actions workflow files without a workflow scope. The "[Create or Update file contents API](/rest/repos/contents#create-or-update-file-contents)" should enforce workflow scope. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com) and has been assigned [CVE-2022-46258](https://www.cve.org/CVERecord?id=CVE-2022-46258). bugs: - - If a GitHub Actions dependency uses a pinned SHA version, Dependabot will no longer mark the dependency as vulnerable. - - Setting the maintenance mode with an IP Exception List would not persist across upgrades. - - GitHub Pages builds could time out on instances in AWS that are configured for high availability. - - Status details for the replication of Git LFS objects to repository cache replica nodes were not visible in the `ghe-repl-status` output on those nodes. - - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. - - The audit log timestamp for Dependabot alert events returned the creation date of the alert instead of the timestamp when a user took action on the alert. - - "When using the CodeQL action, the runs annotations would include a spurious `HttpError: Upload not found` error." - - When accessing an instances JavaScript resources from behind a proxy, the browser displayed Cross-Origin Resource Sharing (CORS) errors. - - If a user named a status check with leading or trailing spaces, the instance created a duplicate check if another check existed with the same name and no leading or trailing spaces. - - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. - - In some cases, an instance could replace an active repository with a deleted repository. - - Git LFS objects in a repository with a cache replication policy would not be copied to cache replicas if the total number of objects in the repository exceeded 5,000. - - After running migrations for the GitHub Enterprise Importer on an instance configured for high availability, replication of migration storage assets would not catch up. - - Zombie processes no longer accumulate in the `gitrpcd` container. + - If a GitHub Actions dependency uses a pinned SHA version, Dependabot will no longer mark the dependency as vulnerable. + - Setting the maintenance mode with an IP Exception List would not persist across upgrades. + - GitHub Pages builds could time out on instances in AWS that are configured for high availability. + - Status details for the replication of Git LFS objects to repository cache replica nodes were not visible in the `ghe-repl-status` output on those nodes. + - After configuration of Dependabot and alert digest emails, the instance would send digest emails to suspended users. + - The audit log timestamp for Dependabot alert events returned the creation date of the alert instead of the timestamp when a user took action on the alert. + - "When using the CodeQL action, the runs annotations would include a spurious `HttpError: Upload not found` error." + - When accessing an instances JavaScript resources from behind a proxy, the browser displayed Cross-Origin Resource Sharing (CORS) errors. + - If a user named a status check with leading or trailing spaces, the instance created a duplicate check if another check existed with the same name and no leading or trailing spaces. + - If a user configured a pre-receive hook for multiple repositories, the instances **Hooks** page would not always display the correct status for the hook. + - In some cases, an instance could replace an active repository with a deleted repository. + - Git LFS objects in a repository with a cache replication policy would not be copied to cache replicas if the total number of objects in the repository exceeded 5,000. + - After running migrations for the GitHub Enterprise Importer on an instance configured for high availability, replication of migration storage assets would not catch up. + - Zombie processes no longer accumulate in the `gitrpcd` container. changes: - - If a site administrator has not yet configured GitHub Actions for the instance, the UI for setting up code scanning will prompt the user to configure GitHub Actions. + - If a site administrator has not yet configured GitHub Actions for the instance, the UI for setting up code scanning will prompt the user to configure GitHub Actions. known_issues: - On a freshly set up {% data variables.product.prodname_ghe_server %} instance without any users, an attacker could create the first admin user. - Custom firewall rules are removed during the upgrade process. diff --git a/data/release-notes/enterprise-server/3-6/5.yml b/data/release-notes/enterprise-server/3-6/5.yml index bf23348e73..d4bc86aabb 100644 --- a/data/release-notes/enterprise-server/3-6/5.yml +++ b/data/release-notes/enterprise-server/3-6/5.yml @@ -4,7 +4,7 @@ sections: - | **HIGH**: A path traversal vulnerability was identified in GitHub Enterprise Server that allowed remote code execution when building a GitHub Pages site. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the instance. This vulnerability was reported via the [GitHub Bug Bounty Program](https://bounty.github.com/) and has been assigned [CVE-2022-46256](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-46256). - | - **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: + **HIGH**: An incorrect authorization vulnerability allowed a scoped user-to-server token to escalate to full admin access for a repository. An attacker would require an account with admin access to install a malicious GitHub App. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.7.0. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned [CVE-2022-23741](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23741). bugs: - A race condition blocked upgrades to GitHub Enterprise Server 3.6 or later until a site administrator retried the upgrade. - Site administrators were not able to manage security products settings for repositories they had unlocked. From b3f2529846933225133635eb8b1f45b540ccd93f Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Mon, 9 Jan 2023 08:57:56 -0800 Subject: [PATCH 10/41] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a11e3bcdda..440d93fbab 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ coverage/ .next .eslintcache *.tsbuildinfo +translations/ # blc: broken link checker blc_output.log From 9d41f5b5e55fd87a73930bfff8c80741f3d83843 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Mon, 9 Jan 2023 18:35:11 +0100 Subject: [PATCH 11/41] @primer/octicons@17.10.1 @primer/octicons-react@17.10.1 (#33841) --- package-lock.json | 30 ++++++++++++++---------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbcfae4280..87553fcae0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,8 @@ "@github/failbot": "0.8.0", "@primer/behaviors": "^1.3.1", "@primer/css": "^20.2.4", - "@primer/octicons": "17.7.0", - "@primer/octicons-react": "17.7.0", + "@primer/octicons": "17.10.1", + "@primer/octicons-react": "17.10.1", "@primer/react": "^35.2.2", "accept-language-parser": "^1.5.0", "ajv": "^8.11.0", @@ -4114,19 +4114,17 @@ } }, "node_modules/@primer/octicons": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.7.0.tgz", - "integrity": "sha512-J5cVJDhExmqLGLWu8zHTOqcC8g1rQL7QzQZdbvHxW85u8ya82GtF5F68uHMDI5En3fsMlbkkF8Rz6dCaV3r+KA==", - "license": "MIT", + "version": "17.10.1", + "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.10.1.tgz", + "integrity": "sha512-fyq/lItQp18Ibi7c2oXVVw7H5K2a8qb8D2dnkTLf2+yUPjc3Fc+SEGS9x6iU6sQAEpr4LctcFl9ZSZ732EM63A==", "dependencies": { "object-assign": "^4.1.1" } }, "node_modules/@primer/octicons-react": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-17.7.0.tgz", - "integrity": "sha512-rxJiArra+q7lorhzQH223btMcRR8di9TUei9DhQG18jmVEI+wQTY+MypI5FZqU8UyehBOtcnD4TWx+i4Zwpz5Q==", - "license": "MIT", + "version": "17.10.1", + "resolved": "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-17.10.1.tgz", + "integrity": "sha512-27F3OyrZVifha5bw84lVnuoxcLWaQFiOZ840itfvzRqlDD03q+bUb0wrw26+hGbbXuX8I65rzxh75T32blZFIw==", "engines": { "node": ">=8" }, @@ -23400,17 +23398,17 @@ } }, "@primer/octicons": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.7.0.tgz", - "integrity": "sha512-J5cVJDhExmqLGLWu8zHTOqcC8g1rQL7QzQZdbvHxW85u8ya82GtF5F68uHMDI5En3fsMlbkkF8Rz6dCaV3r+KA==", + "version": "17.10.1", + "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.10.1.tgz", + "integrity": "sha512-fyq/lItQp18Ibi7c2oXVVw7H5K2a8qb8D2dnkTLf2+yUPjc3Fc+SEGS9x6iU6sQAEpr4LctcFl9ZSZ732EM63A==", "requires": { "object-assign": "^4.1.1" } }, "@primer/octicons-react": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-17.7.0.tgz", - "integrity": "sha512-rxJiArra+q7lorhzQH223btMcRR8di9TUei9DhQG18jmVEI+wQTY+MypI5FZqU8UyehBOtcnD4TWx+i4Zwpz5Q==", + "version": "17.10.1", + "resolved": "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-17.10.1.tgz", + "integrity": "sha512-27F3OyrZVifha5bw84lVnuoxcLWaQFiOZ840itfvzRqlDD03q+bUb0wrw26+hGbbXuX8I65rzxh75T32blZFIw==", "requires": {} }, "@primer/primitives": { diff --git a/package.json b/package.json index 4bd6b91931..317673ec34 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "@github/failbot": "0.8.0", "@primer/behaviors": "^1.3.1", "@primer/css": "^20.2.4", - "@primer/octicons": "17.7.0", - "@primer/octicons-react": "17.7.0", + "@primer/octicons": "17.10.1", + "@primer/octicons-react": "17.10.1", "@primer/react": "^35.2.2", "accept-language-parser": "^1.5.0", "ajv": "^8.11.0", From 103d2ca6c28c1d56ed7f6d2491512f6fef2f9ab2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Mon, 9 Jan 2023 18:46:50 +0100 Subject: [PATCH 12/41] experiment with npm install reusable workflow (#33480) --- .github/actions/node-npm-setup/action.yml | 22 +++++++++++++++++++ .../check-broken-links-github-github.yml | 9 +------- .github/workflows/code-lint.yml | 17 ++------------ .github/workflows/enterprise-dates.yml | 9 +------- .github/workflows/keep-caches-warm.yml | 15 +------------ .github/workflows/link-check-daily.yml | 8 +------ .github/workflows/link-check-on-pr.yml | 15 +------------ .github/workflows/manually-purge-fastly.yml | 3 +-- .github/workflows/open-enterprise-issue.yml | 9 +------- .github/workflows/openapi-decorate.yml | 9 +------- .github/workflows/orphaned-assets-check.yml | 9 +------- .github/workflows/purge-fastly.yml | 9 +------- .../workflows/sync-search-elasticsearch.yml | 9 +------- .github/workflows/sync-search-pr.yml | 15 +------------ .github/workflows/test.yml | 9 +------- .../workflows/translation-health-report.yml | 8 +------ .github/workflows/update-graphql-files.yml | 8 +------ tests/unit/actions-workflows.js | 8 ++++++- 18 files changed, 46 insertions(+), 145 deletions(-) create mode 100644 .github/actions/node-npm-setup/action.yml diff --git a/.github/actions/node-npm-setup/action.yml b/.github/actions/node-npm-setup/action.yml new file mode 100644 index 0000000000..d00faed408 --- /dev/null +++ b/.github/actions/node-npm-setup/action.yml @@ -0,0 +1,22 @@ +name: Node set up composite + +description: Will set up Node and install all packages by caching node_modules + +runs: + using: 'composite' + steps: + - name: Cache node_modules + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 + with: + path: node_modules + key: ${{ runner.os }}-node_modules-${{ hashFiles('package*.json') }} + + - name: Setup node + uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 + with: + node-version: '16.17.0' + cache: npm + + - name: Install dependencies + shell: bash + run: npm install --prefer-offline --no-audit --ignore-scripts diff --git a/.github/workflows/check-broken-links-github-github.yml b/.github/workflows/check-broken-links-github-github.yml index 16d5230439..ecb9b7a439 100644 --- a/.github/workflows/check-broken-links-github-github.yml +++ b/.github/workflows/check-broken-links-github-github.yml @@ -52,17 +52,10 @@ jobs: path: docs-early-access ref: main - - name: Setup Node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - name: Merge docs-early-access repo's folders run: .github/actions-scripts/merge-early-access.sh - - name: Install Node.js dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Build server run: npm run build diff --git a/.github/workflows/code-lint.yml b/.github/workflows/code-lint.yml index c4b0ef2563..bc677996db 100644 --- a/.github/workflows/code-lint.yml +++ b/.github/workflows/code-lint.yml @@ -34,25 +34,12 @@ concurrency: jobs: lint: if: github.repository == 'github/docs-internal' || github.repository == 'github/docs' - runs-on: ubuntu-latest + runs-on: ${{ fromJSON('["ubuntu-latest", "ubuntu-20.04-xl"]')[github.repository == 'github/docs-internal'] }} steps: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Cache node_modules - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 - with: - path: node_modules - key: ${{ runner.os }}-node_modules-${{ hashFiles('package*.json') }} - - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm install --prefer-offline --no-audit --ignore-scripts + - uses: ./.github/actions/node-npm-setup - name: Run linter run: npm run lint diff --git a/.github/workflows/enterprise-dates.yml b/.github/workflows/enterprise-dates.yml index 73f0f0033f..bb03dbc1e4 100644 --- a/.github/workflows/enterprise-dates.yml +++ b/.github/workflows/enterprise-dates.yml @@ -38,14 +38,7 @@ jobs: - name: Checkout repository code uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Setup Node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install Node.js dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Run script/update-enterprise-dates.js run: | diff --git a/.github/workflows/keep-caches-warm.yml b/.github/workflows/keep-caches-warm.yml index bdefacf8b4..293af3f500 100644 --- a/.github/workflows/keep-caches-warm.yml +++ b/.github/workflows/keep-caches-warm.yml @@ -23,20 +23,7 @@ jobs: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Cache node_modules - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 - with: - path: node_modules - key: ${{ runner.os }}-node_modules-${{ hashFiles('package*.json') }} - - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm install --prefer-offline --no-audit --ignore-scripts + - uses: ./.github/actions/node-npm-setup - name: Cache nextjs build uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 diff --git a/.github/workflows/link-check-daily.yml b/.github/workflows/link-check-daily.yml index a324943725..72a6dc3e67 100644 --- a/.github/workflows/link-check-daily.yml +++ b/.github/workflows/link-check-daily.yml @@ -24,14 +24,8 @@ jobs: - name: Check out repo's default branch uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Setup Node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Figure out which docs-early-access branch to checkout, if internal repo if: ${{ github.repository == 'github/docs-internal' }} diff --git a/.github/workflows/link-check-on-pr.yml b/.github/workflows/link-check-on-pr.yml index 13d00a5eea..8efb2ca526 100644 --- a/.github/workflows/link-check-on-pr.yml +++ b/.github/workflows/link-check-on-pr.yml @@ -28,20 +28,7 @@ jobs: - name: Checkout uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Cache node_modules - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 - with: - path: node_modules - key: ${{ runner.os }}-node_modules-${{ hashFiles('package*.json') }} - - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm install --prefer-offline --no-audit --ignore-scripts + - uses: ./.github/actions/node-npm-setup - name: Figure out which docs-early-access branch to checkout, if internal repo if: ${{ github.repository == 'github/docs-internal' }} diff --git a/.github/workflows/manually-purge-fastly.yml b/.github/workflows/manually-purge-fastly.yml index bde1ec37ec..29180f0aed 100644 --- a/.github/workflows/manually-purge-fastly.yml +++ b/.github/workflows/manually-purge-fastly.yml @@ -18,8 +18,7 @@ jobs: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Soft-purge Fastly cache env: diff --git a/.github/workflows/open-enterprise-issue.yml b/.github/workflows/open-enterprise-issue.yml index 187e1b4563..45e739af69 100644 --- a/.github/workflows/open-enterprise-issue.yml +++ b/.github/workflows/open-enterprise-issue.yml @@ -21,14 +21,7 @@ jobs: - name: Checkout repository code uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Setup Node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Check for existing release or deprecation issues id: existingIssue diff --git a/.github/workflows/openapi-decorate.yml b/.github/workflows/openapi-decorate.yml index 530be9dc45..bec10987d4 100644 --- a/.github/workflows/openapi-decorate.yml +++ b/.github/workflows/openapi-decorate.yml @@ -45,14 +45,7 @@ jobs: # CI in the PR. (Events from GITHUB_TOKEN don't trigger new workflows.) token: ${{ secrets.DOCUBOT_REPO_PAT }} - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Decorate the dereferenced OpenAPI schemas run: script/rest/update-files.js --decorate-only diff --git a/.github/workflows/orphaned-assets-check.yml b/.github/workflows/orphaned-assets-check.yml index d0d5763ce3..001e3ee915 100644 --- a/.github/workflows/orphaned-assets-check.yml +++ b/.github/workflows/orphaned-assets-check.yml @@ -85,14 +85,7 @@ jobs: token: ${{ secrets.DOCUBOT_READORG_REPO_WORKFLOW_SCOPES }} path: translations/ko-KR - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Check for orphaned assets env: diff --git a/.github/workflows/purge-fastly.yml b/.github/workflows/purge-fastly.yml index 92f77cee03..c0ac1cf4f3 100644 --- a/.github/workflows/purge-fastly.yml +++ b/.github/workflows/purge-fastly.yml @@ -35,14 +35,7 @@ jobs: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Purge Fastly edge cache independent of language if: ${{ github.event.inputs.nuke_all }} diff --git a/.github/workflows/sync-search-elasticsearch.yml b/.github/workflows/sync-search-elasticsearch.yml index 7c704f3fbd..12eb39175a 100644 --- a/.github/workflows/sync-search-elasticsearch.yml +++ b/.github/workflows/sync-search-elasticsearch.yml @@ -118,14 +118,7 @@ jobs: token: ${{ secrets.DOCUBOT_READORG_REPO_WORKFLOW_SCOPES }} path: translation - - name: Setup Node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Cache nextjs build uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 diff --git a/.github/workflows/sync-search-pr.yml b/.github/workflows/sync-search-pr.yml index 18c22374cb..a90a0b7de5 100644 --- a/.github/workflows/sync-search-pr.yml +++ b/.github/workflows/sync-search-pr.yml @@ -46,20 +46,7 @@ jobs: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Cache node_modules - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 - with: - path: node_modules - key: ${{ runner.os }}-node_modules-${{ hashFiles('package*.json') }} - - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm install --prefer-offline --no-audit --ignore-scripts + - uses: ./.github/actions/node-npm-setup - name: Cache nextjs build uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 73a7116f10..fb8adab9ea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -67,14 +67,7 @@ jobs: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Setup node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - - name: Install dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Figure out which docs-early-access branch to checkout, if internal repo if: ${{ github.repository == 'github/docs-internal' }} diff --git a/.github/workflows/translation-health-report.yml b/.github/workflows/translation-health-report.yml index 86971f9d58..eb4b2f2c0b 100644 --- a/.github/workflows/translation-health-report.yml +++ b/.github/workflows/translation-health-report.yml @@ -72,13 +72,7 @@ jobs: gitref=$(cd ${{ matrix.language_dir }} && git rev-parse --short HEAD) echo "gitref=$gitref" >> $GITHUB_ENV - - name: 'Setup node' - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - - - name: npm ci - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Create translation health report run: | diff --git a/.github/workflows/update-graphql-files.yml b/.github/workflows/update-graphql-files.yml index 1ac0ca37a0..7a1de46113 100644 --- a/.github/workflows/update-graphql-files.yml +++ b/.github/workflows/update-graphql-files.yml @@ -33,13 +33,7 @@ jobs: exit 1 # prevents further steps from running - name: Checkout uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Setup Node - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 - with: - node-version: '16.17.0' - cache: npm - - name: Install Node.js dependencies - run: npm ci + - uses: ./.github/actions/node-npm-setup - name: Run updater scripts env: # need to use a token from a user with access to github/github for this step diff --git a/tests/unit/actions-workflows.js b/tests/unit/actions-workflows.js index d0cbc9e2ab..1b02acd382 100644 --- a/tests/unit/actions-workflows.js +++ b/tests/unit/actions-workflows.js @@ -27,7 +27,13 @@ const scheduledWorkflows = workflows .flat() .map((schedule) => schedule.cron) -const allUsedActions = chain(workflows).map(actionsUsedInWorkflow).flatten().uniq().sort().value() +const allUsedActions = chain(workflows) + .map(actionsUsedInWorkflow) + .flatten() + .uniq() + .filter((use) => !use.startsWith('.')) + .sort() + .value() describe('GitHub Actions workflows', () => { test('all used actions are listed', () => { From 5ed6db2bdb0be6b4a1b1fafd77cd31d6b9cf4d8f Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Mon, 9 Jan 2023 11:30:14 -0800 Subject: [PATCH 13/41] Remove TEST_TRANSLATION variable (#33839) --- package.json | 2 +- tests/linting/lint-files.js | 404 ++++++++++++++++++------------------ 2 files changed, 199 insertions(+), 207 deletions(-) diff --git a/package.json b/package.json index 317673ec34..87e535dbdc 100644 --- a/package.json +++ b/package.json @@ -185,7 +185,7 @@ "dev": "cross-env npm start", "index-test-fixtures": "node script/search/index-elasticsearch.js -l en -l ja -V ghae -V dotcom --index-prefix tests -- tests/content/fixtures/search-indexes", "lint": "eslint '**/*.{js,mjs,ts,tsx}'", - "lint-translation": "cross-env NODE_OPTIONS=--experimental-vm-modules TEST_TRANSLATION=true jest tests/linting/lint-files.js", + "lint-translation": "cross-env NODE_OPTIONS=--experimental-vm-modules jest tests/linting/lint-files.js", "prepare": "husky install", "prettier": "prettier -w \"**/*.{ts,tsx,js,mjs,scss,yml,yaml}\"", "prettier-check": "prettier -c \"**/*.{ts,tsx,js,mjs,scss,yml,yaml}\"", diff --git a/tests/linting/lint-files.js b/tests/linting/lint-files.js index 9507c510d9..6ec40465dc 100644 --- a/tests/linting/lint-files.js +++ b/tests/linting/lint-files.js @@ -228,69 +228,65 @@ const yamlWalkOptions = { // different lint rules apply to different content types let mdToLint, ymlToLint, ghesReleaseNotesToLint, ghaeReleaseNotesToLint, learningTracksToLint -if (!process.env.TEST_TRANSLATION) { - // compile lists of all the files we want to lint +// compile lists of all the files we want to lint - const contentMarkdownAbsPaths = walk(contentDir, mdWalkOptions).sort() - const contentMarkdownRelPaths = contentMarkdownAbsPaths.map((p) => - slash(path.relative(rootDir, p)) - ) - const contentMarkdownTuples = zip(contentMarkdownRelPaths, contentMarkdownAbsPaths) +const contentMarkdownAbsPaths = walk(contentDir, mdWalkOptions).sort() +const contentMarkdownRelPaths = contentMarkdownAbsPaths.map((p) => slash(path.relative(rootDir, p))) +const contentMarkdownTuples = zip(contentMarkdownRelPaths, contentMarkdownAbsPaths) - const reusableMarkdownAbsPaths = walk(reusablesDir, mdWalkOptions).sort() - const reusableMarkdownRelPaths = reusableMarkdownAbsPaths.map((p) => - slash(path.relative(rootDir, p)) - ) - const reusableMarkdownTuples = zip(reusableMarkdownRelPaths, reusableMarkdownAbsPaths) +const reusableMarkdownAbsPaths = walk(reusablesDir, mdWalkOptions).sort() +const reusableMarkdownRelPaths = reusableMarkdownAbsPaths.map((p) => + slash(path.relative(rootDir, p)) +) +const reusableMarkdownTuples = zip(reusableMarkdownRelPaths, reusableMarkdownAbsPaths) - mdToLint = [...contentMarkdownTuples, ...reusableMarkdownTuples] +mdToLint = [...contentMarkdownTuples, ...reusableMarkdownTuples] - // data/variables - const variableYamlAbsPaths = walk(variablesDir, yamlWalkOptions).sort() - const variableYamlRelPaths = variableYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) - const variableYamlTuples = zip(variableYamlRelPaths, variableYamlAbsPaths) +// data/variables +const variableYamlAbsPaths = walk(variablesDir, yamlWalkOptions).sort() +const variableYamlRelPaths = variableYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) +const variableYamlTuples = zip(variableYamlRelPaths, variableYamlAbsPaths) - // data/glossaries - const glossariesYamlAbsPaths = walk(glossariesDir, yamlWalkOptions).sort() - const glossariesYamlRelPaths = glossariesYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) - const glossariesYamlTuples = zip(glossariesYamlRelPaths, glossariesYamlAbsPaths) +// data/glossaries +const glossariesYamlAbsPaths = walk(glossariesDir, yamlWalkOptions).sort() +const glossariesYamlRelPaths = glossariesYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) +const glossariesYamlTuples = zip(glossariesYamlRelPaths, glossariesYamlAbsPaths) - // data/features (feature-based versioning) - const FbvYamlAbsPaths = walk(fbvDir, yamlWalkOptions).sort() - const FbvYamlRelPaths = FbvYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) - const fbvTuples = zip(FbvYamlRelPaths, FbvYamlAbsPaths) +// data/features (feature-based versioning) +const FbvYamlAbsPaths = walk(fbvDir, yamlWalkOptions).sort() +const FbvYamlRelPaths = FbvYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) +const fbvTuples = zip(FbvYamlRelPaths, FbvYamlAbsPaths) - // GHES release notes - const ghesReleaseNotesYamlAbsPaths = walk(ghesReleaseNotesDir, yamlWalkOptions).sort() - const ghesReleaseNotesYamlRelPaths = ghesReleaseNotesYamlAbsPaths.map((p) => - slash(path.relative(rootDir, p)) - ) - ghesReleaseNotesToLint = zip(ghesReleaseNotesYamlRelPaths, ghesReleaseNotesYamlAbsPaths) +// GHES release notes +const ghesReleaseNotesYamlAbsPaths = walk(ghesReleaseNotesDir, yamlWalkOptions).sort() +const ghesReleaseNotesYamlRelPaths = ghesReleaseNotesYamlAbsPaths.map((p) => + slash(path.relative(rootDir, p)) +) +ghesReleaseNotesToLint = zip(ghesReleaseNotesYamlRelPaths, ghesReleaseNotesYamlAbsPaths) - // GHAE release notes - const ghaeReleaseNotesYamlAbsPaths = walk(ghaeReleaseNotesDir, yamlWalkOptions).sort() - const ghaeReleaseNotesYamlRelPaths = ghaeReleaseNotesYamlAbsPaths.map((p) => - slash(path.relative(rootDir, p)) - ) - ghaeReleaseNotesToLint = zip(ghaeReleaseNotesYamlRelPaths, ghaeReleaseNotesYamlAbsPaths) +// GHAE release notes +const ghaeReleaseNotesYamlAbsPaths = walk(ghaeReleaseNotesDir, yamlWalkOptions).sort() +const ghaeReleaseNotesYamlRelPaths = ghaeReleaseNotesYamlAbsPaths.map((p) => + slash(path.relative(rootDir, p)) +) +ghaeReleaseNotesToLint = zip(ghaeReleaseNotesYamlRelPaths, ghaeReleaseNotesYamlAbsPaths) - // Learning tracks - const learningTracksYamlAbsPaths = walk(learningTracks, yamlWalkOptions).sort() - const learningTracksYamlRelPaths = learningTracksYamlAbsPaths.map((p) => - slash(path.relative(rootDir, p)) - ) - learningTracksToLint = zip(learningTracksYamlRelPaths, learningTracksYamlAbsPaths) +// Learning tracks +const learningTracksYamlAbsPaths = walk(learningTracks, yamlWalkOptions).sort() +const learningTracksYamlRelPaths = learningTracksYamlAbsPaths.map((p) => + slash(path.relative(rootDir, p)) +) +learningTracksToLint = zip(learningTracksYamlRelPaths, learningTracksYamlAbsPaths) - // Put all the yaml files together - ymlToLint = [].concat( - variableYamlTuples, // These "tuples" not tested independently; they are only tested as part of ymlToLint. - glossariesYamlTuples, - fbvTuples, - ghesReleaseNotesToLint, - ghaeReleaseNotesToLint, - learningTracksToLint - ) -} +// Put all the yaml files together +ymlToLint = [].concat( + variableYamlTuples, // These "tuples" not tested independently; they are only tested as part of ymlToLint. + glossariesYamlTuples, + fbvTuples, + ghesReleaseNotesToLint, + ghaeReleaseNotesToLint, + learningTracksToLint +) function formatLinkError(message, links) { return `${message}\n - ${links.join('\n - ')}` @@ -490,83 +486,81 @@ describe('lint markdown content', () => { expect(matches.length, errorMessage).toBe(0) }) - if (!process.env.TEST_TRANSLATION) { - test('does not use old site.data variable syntax', async () => { - const matches = content.match(oldVariableRegex) || [] - const matchesWithExample = matches.map((match) => { - const example = match.replace( - /{{\s*?site\.data\.([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)+)\s*?}}/g, - '{% data $1 %}' - ) - return `${match} => ${example}` - }) - const errorMessage = formatLinkError(oldVariableErrorText, matchesWithExample) - expect(matches.length, errorMessage).toBe(0) + test('does not use old site.data variable syntax', async () => { + const matches = content.match(oldVariableRegex) || [] + const matchesWithExample = matches.map((match) => { + const example = match.replace( + /{{\s*?site\.data\.([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)+)\s*?}}/g, + '{% data $1 %}' + ) + return `${match} => ${example}` + }) + const errorMessage = formatLinkError(oldVariableErrorText, matchesWithExample) + expect(matches.length, errorMessage).toBe(0) + }) + + test('does not use old octicon variable syntax', async () => { + const matches = content.match(oldOcticonRegex) || [] + const errorMessage = formatLinkError(oldOcticonErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) + + test('does not use old extended markdown syntax', async () => { + Object.keys(tags).forEach((tag) => { + const reg = new RegExp(`{{\\s*?[#|/]${tag}`, 'g') + if (reg.test(content)) { + const matches = content.match(oldExtendedMarkdownRegex) || [] + const tagMessage = oldExtendedMarkdownErrorText + .replace('{{#note}}', `{{#${tag}}}`) + .replace('{% note %}', `{% ${tag} %}`) + .replace('{% endnote %}', `{% end${tag} %}`) + const errorMessage = formatLinkError(tagMessage, matches) + expect(matches.length, errorMessage).toBe(0) + } + }) + }) + + test('URLs must not contain a hard-coded language code', async () => { + const matches = links.filter((link) => { + return /\/(?:${languageCodes.join('|')})\//.test(link) }) - test('does not use old octicon variable syntax', async () => { - const matches = content.match(oldOcticonRegex) || [] - const errorMessage = formatLinkError(oldOcticonErrorText, matches) - expect(matches.length, errorMessage).toBe(0) + const errorMessage = formatLinkError(languageLinkErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) + + test('URLs must not contain a hard-coded version number', async () => { + const initialMatches = content.match(versionLinkRegEx) || [] + + // Filter out some very specific false positive matches + const matches = initialMatches.filter(() => { + if ( + markdownRelPath.endsWith('migrating-from-github-enterprise-1110x-to-2123.md') || + markdownRelPath.endsWith('all-releases.md') + ) { + return false + } + return true }) - test('does not use old extended markdown syntax', async () => { - Object.keys(tags).forEach((tag) => { - const reg = new RegExp(`{{\\s*?[#|/]${tag}`, 'g') - if (reg.test(content)) { - const matches = content.match(oldExtendedMarkdownRegex) || [] - const tagMessage = oldExtendedMarkdownErrorText - .replace('{{#note}}', `{{#${tag}}}`) - .replace('{% note %}', `{% ${tag} %}`) - .replace('{% endnote %}', `{% end${tag} %}`) - const errorMessage = formatLinkError(tagMessage, matches) - expect(matches.length, errorMessage).toBe(0) - } - }) + const errorMessage = formatLinkError(versionLinkErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) + + test('URLs must not contain a hard-coded domain name', async () => { + const initialMatches = content.match(domainLinkRegex) || [] + + // Filter out some very specific false positive matches + const matches = initialMatches.filter(() => { + if (markdownRelPath === 'content/admin/all-releases.md') { + return false + } + return true }) - test('URLs must not contain a hard-coded language code', async () => { - const matches = links.filter((link) => { - return /\/(?:${languageCodes.join('|')})\//.test(link) - }) - - const errorMessage = formatLinkError(languageLinkErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) - - test('URLs must not contain a hard-coded version number', async () => { - const initialMatches = content.match(versionLinkRegEx) || [] - - // Filter out some very specific false positive matches - const matches = initialMatches.filter(() => { - if ( - markdownRelPath.endsWith('migrating-from-github-enterprise-1110x-to-2123.md') || - markdownRelPath.endsWith('all-releases.md') - ) { - return false - } - return true - }) - - const errorMessage = formatLinkError(versionLinkErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) - - test('URLs must not contain a hard-coded domain name', async () => { - const initialMatches = content.match(domainLinkRegex) || [] - - // Filter out some very specific false positive matches - const matches = initialMatches.filter(() => { - if (markdownRelPath === 'content/admin/all-releases.md') { - return false - } - return true - }) - - const errorMessage = formatLinkError(domainLinkErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) - } + const errorMessage = formatLinkError(domainLinkErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) test('contains valid Liquid', async () => { // If Liquid can't parse the file, it'll throw an error. @@ -711,111 +705,109 @@ describe('lint yaml content', () => { expect(matches.length, errorMessage).toBe(0) }) - if (!process.env.TEST_TRANSLATION) { - test('URLs must not contain a hard-coded language code', async () => { - const matches = [] + test('URLs must not contain a hard-coded language code', async () => { + const matches = [] - for (const [key, content] of Object.entries(dictionary)) { - const contentStr = getContent(content) - if (!contentStr) continue - const valMatches = contentStr.match(languageLinkRegex) || [] - if (valMatches.length > 0) { - matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) - } + for (const [key, content] of Object.entries(dictionary)) { + const contentStr = getContent(content) + if (!contentStr) continue + const valMatches = contentStr.match(languageLinkRegex) || [] + if (valMatches.length > 0) { + matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) } + } - const errorMessage = formatLinkError(languageLinkErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) + const errorMessage = formatLinkError(languageLinkErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) - test('URLs must not contain a hard-coded version number', async () => { - const matches = [] + test('URLs must not contain a hard-coded version number', async () => { + const matches = [] - for (const [key, content] of Object.entries(dictionary)) { - const contentStr = getContent(content) - if (!contentStr) continue - const valMatches = contentStr.match(versionLinkRegEx) || [] - if (valMatches.length > 0) { - matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) - } + for (const [key, content] of Object.entries(dictionary)) { + const contentStr = getContent(content) + if (!contentStr) continue + const valMatches = contentStr.match(versionLinkRegEx) || [] + if (valMatches.length > 0) { + matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) } + } - const errorMessage = formatLinkError(versionLinkErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) + const errorMessage = formatLinkError(versionLinkErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) - test('URLs must not contain a hard-coded domain name', async () => { - const matches = [] + test('URLs must not contain a hard-coded domain name', async () => { + const matches = [] - for (const [key, content] of Object.entries(dictionary)) { - const contentStr = getContent(content) - if (!contentStr) continue - const valMatches = contentStr.match(domainLinkRegex) || [] - if (valMatches.length > 0) { - matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) - } + for (const [key, content] of Object.entries(dictionary)) { + const contentStr = getContent(content) + if (!contentStr) continue + const valMatches = contentStr.match(domainLinkRegex) || [] + if (valMatches.length > 0) { + matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) } + } - const errorMessage = formatLinkError(domainLinkErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) + const errorMessage = formatLinkError(domainLinkErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) - test('does not use old site.data variable syntax', async () => { - const matches = [] + test('does not use old site.data variable syntax', async () => { + const matches = [] - for (const [key, content] of Object.entries(dictionary)) { - const contentStr = getContent(content) - if (!contentStr) continue - const valMatches = contentStr.match(oldVariableRegex) || [] - if (valMatches.length > 0) { - matches.push( - ...valMatches.map((match) => { - const example = match.replace( - /{{\s*?site\.data\.([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)+)\s*?}}/g, - '{% data $1 %}' - ) - return `Key "${key}": ${match} => ${example}` - }) - ) - } + for (const [key, content] of Object.entries(dictionary)) { + const contentStr = getContent(content) + if (!contentStr) continue + const valMatches = contentStr.match(oldVariableRegex) || [] + if (valMatches.length > 0) { + matches.push( + ...valMatches.map((match) => { + const example = match.replace( + /{{\s*?site\.data\.([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)+)\s*?}}/g, + '{% data $1 %}' + ) + return `Key "${key}": ${match} => ${example}` + }) + ) } + } - const errorMessage = formatLinkError(oldVariableErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) + const errorMessage = formatLinkError(oldVariableErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) - test('does not use old octicon variable syntax', async () => { - const matches = [] + test('does not use old octicon variable syntax', async () => { + const matches = [] - for (const [key, content] of Object.entries(dictionary)) { - const contentStr = getContent(content) - if (!contentStr) continue - const valMatches = contentStr.match(oldOcticonRegex) || [] - if (valMatches.length > 0) { - matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) - } + for (const [key, content] of Object.entries(dictionary)) { + const contentStr = getContent(content) + if (!contentStr) continue + const valMatches = contentStr.match(oldOcticonRegex) || [] + if (valMatches.length > 0) { + matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) } + } - const errorMessage = formatLinkError(oldOcticonErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) + const errorMessage = formatLinkError(oldOcticonErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) - test('does not use old extended markdown syntax', async () => { - const matches = [] + test('does not use old extended markdown syntax', async () => { + const matches = [] - for (const [key, content] of Object.entries(dictionary)) { - const contentStr = getContent(content) - if (!contentStr) continue - const valMatches = contentStr.match(oldExtendedMarkdownRegex) || [] - if (valMatches.length > 0) { - matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) - } + for (const [key, content] of Object.entries(dictionary)) { + const contentStr = getContent(content) + if (!contentStr) continue + const valMatches = contentStr.match(oldExtendedMarkdownRegex) || [] + if (valMatches.length > 0) { + matches.push(...valMatches.map((match) => `Key "${key}": ${match}`)) } + } - const errorMessage = formatLinkError(oldExtendedMarkdownErrorText, matches) - expect(matches.length, errorMessage).toBe(0) - }) - } + const errorMessage = formatLinkError(oldExtendedMarkdownErrorText, matches) + expect(matches.length, errorMessage).toBe(0) + }) }) }) From 5da624aff2bf23e3dcfeda9c014544f7e754639e Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Mon, 9 Jan 2023 21:01:11 +0100 Subject: [PATCH 14/41] remove leftover deletion of old translations (#33847) --- .github/workflows/azure-prod-build-deploy.yml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/.github/workflows/azure-prod-build-deploy.yml b/.github/workflows/azure-prod-build-deploy.yml index 8c67105a66..de30d69477 100644 --- a/.github/workflows/azure-prod-build-deploy.yml +++ b/.github/workflows/azure-prod-build-deploy.yml @@ -127,22 +127,6 @@ jobs: token: ${{ secrets.DOCUBOT_REPO_PAT }} path: translations/ko-kr - # As of Dec 2022, we still have checked in translations into - # the main repo. - # We're going to remove that later. - # For now, just delete the excess directories so they don't add - # unnecessary weight to the container image. - - name: Delete old checked in translation directories (TEMPORARY) - run: | - rm -fr translations/zh-CN - rm -fr translations/ja-JP - rm -fr translations/es-ES - rm -fr translations/pt-BR - rm -fr translations/de-DE - rm -fr translations/fr-FR - rm -fr translations/ru-RU - rm -fr translations/ko-KR - - name: 'Build and push image' uses: docker/build-push-action@1cb9d22b932e4832bb29793b7777ec860fc1cde0 with: From d27720c7291699323c783700184301d8f2e8a48f Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 01:58:20 +0100 Subject: [PATCH 15/41] 404 if apiVersion is unrecognized (#33850) --- .../overview/endpoints-available-for-github-apps.tsx | 8 ++++++++ tests/rendering/rest.js | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pages/[versionId]/rest/overview/endpoints-available-for-github-apps.tsx b/pages/[versionId]/rest/overview/endpoints-available-for-github-apps.tsx index 3e965f6c6a..a986063cc2 100644 --- a/pages/[versionId]/rest/overview/endpoints-available-for-github-apps.tsx +++ b/pages/[versionId]/rest/overview/endpoints-available-for-github-apps.tsx @@ -94,6 +94,14 @@ export const getServerSideProps: GetServerSideProps = async (context) => const automatedPageContext = getAutomatedPageContextFromRequest(req) const enabledForApps = await getEnabledForApps(currentVersion, apiVersion) + // If getEnabledForApps came back as undefined, it means that nothing + // could be found for that `apiVersion` + if (!enabledForApps) { + return { + notFound: true, + } + } + return { props: { mainContext, diff --git a/tests/rendering/rest.js b/tests/rendering/rest.js index 3c25181196..1028a04a00 100644 --- a/tests/rendering/rest.js +++ b/tests/rendering/rest.js @@ -1,7 +1,7 @@ import { jest, test } from '@jest/globals' import { slug } from 'github-slugger' -import { getDOM } from '../helpers/e2etest.js' +import { get, getDOM } from '../helpers/e2etest.js' import getRest, { getEnabledForApps, categoriesWithoutSubcategories } from '../../lib/rest/index.js' import { isApiVersioned, allVersions } from '../../lib/all-versions.js' import { getDiffOpenAPIContentRest } from '../../script/rest/test-open-api-schema.js' @@ -61,6 +61,15 @@ describe('REST references docs', () => { } }) + test('404 if unrecognized apiVersion', async () => { + const res = await get( + `/en/rest/overview/endpoints-available-for-github-apps?${new URLSearchParams({ + apiVersion: 'junk', + })}` + ) + expect(res.statusCode).toBe(404) + }) + test('test the latest version of the OpenAPI schema categories/subcategories to see if it matches the content/rest directory', async () => { const differences = await getDiffOpenAPIContentRest() const errorMessage = formatErrors(differences) From 2c6ca088ba55f05dd64d93a489cf4392b66ab6bb Mon Sep 17 00:00:00 2001 From: David Castillo Date: Mon, 9 Jan 2023 20:48:19 -0600 Subject: [PATCH 16/41] Fix typo Change "ony" to "only". --- .../reusables/code-scanning/alerts-found-in-generated-code.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/reusables/code-scanning/alerts-found-in-generated-code.md b/data/reusables/code-scanning/alerts-found-in-generated-code.md index 45f84085fb..ab29c249c0 100644 --- a/data/reusables/code-scanning/alerts-found-in-generated-code.md +++ b/data/reusables/code-scanning/alerts-found-in-generated-code.md @@ -1,3 +1,3 @@ -For compiled languages like Java,{% ifversion codeql-kotlin-beta %} Kotlin, {% endif %}{% ifversion codeql-go-autobuild %} Go,{% endif %} C, C++, and C#, {% data variables.product.prodname_codeql %} analyzes all of the code which was built during the workflow run. To limit the amount of code being analyzed, build ony the code which you wish to analyze by specifying your own build steps in a `run` block. You can combine specifying your own build steps with using the `paths` or `paths-ignore` filters on the `pull_request` and `push` events to ensure that your workflow only runs when specific code is changed. For more information, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)." +For compiled languages like Java,{% ifversion codeql-kotlin-beta %} Kotlin, {% endif %}{% ifversion codeql-go-autobuild %} Go,{% endif %} C, C++, and C#, {% data variables.product.prodname_codeql %} analyzes all of the code which was built during the workflow run. To limit the amount of code being analyzed, build only the code which you wish to analyze by specifying your own build steps in a `run` block. You can combine specifying your own build steps with using the `paths` or `paths-ignore` filters on the `pull_request` and `push` events to ensure that your workflow only runs when specific code is changed. For more information, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)." -For languages like{% ifversion codeql-go-autobuild %}{% else %} Go,{% endif %} JavaScript, Python, and TypeScript, that {% data variables.product.prodname_codeql %} analyzes without compiling the source code, you can specify additional configuration options to limit the amount of code to analyze. For more information, see "[Specifying directories to scan](/code-security/secure-coding/configuring-code-scanning#specifying-directories-to-scan)." \ No newline at end of file +For languages like{% ifversion codeql-go-autobuild %}{% else %} Go,{% endif %} JavaScript, Python, and TypeScript, that {% data variables.product.prodname_codeql %} analyzes without compiling the source code, you can specify additional configuration options to limit the amount of code to analyze. For more information, see "[Specifying directories to scan](/code-security/secure-coding/configuring-code-scanning#specifying-directories-to-scan)." From 471701851fa5fd8303b67f41c54570cce4d8bc98 Mon Sep 17 00:00:00 2001 From: Joe Clark <31087804+jc-clark@users.noreply.github.com> Date: Mon, 9 Jan 2023 21:17:34 -0800 Subject: [PATCH 17/41] Add documentation for GitHub Actions configuration variables (#33119) Co-authored-by: github-actions Co-authored-by: Tauhid Anjum Co-authored-by: Lucas Costi --- .../actions-organization-secrets-tab.png | Bin 0 -> 54507 bytes .../actions-organization-variables-tab.png | Bin 0 -> 49541 bytes .../help/repository/actions-secrets-tab.png | Bin 0 -> 52597 bytes .../help/repository/actions-variables-tab.png | Bin 0 -> 48257 bytes .../dockerfile-support-for-github-actions.md | 4 +- .../running-scripts-before-or-after-a-job.md | 2 +- content/actions/index.md | 2 +- .../actions/learn-github-actions/contexts.md | 136 +++++--- .../environment-variables.md | 211 ------------ .../essential-features-of-github-actions.md | 2 +- content/actions/learn-github-actions/index.md | 2 +- .../actions/learn-github-actions/variables.md | 317 ++++++++++++++++++ ...grating-from-circleci-to-github-actions.md | 4 +- ...ting-from-gitlab-cicd-to-github-actions.md | 4 +- ...rating-from-travis-ci-to-github-actions.md | 10 +- .../enabling-debug-logging.md | 4 +- .../publishing-java-packages-with-gradle.md | 14 +- .../publishing-java-packages-with-maven.md | 14 +- .../publishing-nodejs-packages.md | 8 +- .../security-guides/encrypted-secrets.md | 34 +- .../about-github-hosted-runners.md | 2 +- .../using-workflows/reusing-workflows.md | 5 +- ...rets-and-runners-with-your-organization.md | 18 +- .../using-workflows/triggering-a-workflow.md | 2 +- .../workflow-syntax-for-github-actions.md | 8 +- ...naging-encrypted-secrets-for-dependabot.md | 10 +- ...-and-organization-for-github-codespaces.md | 6 +- ...g-encrypted-secrets-for-your-codespaces.md | 2 +- .../actions-configuration-variables.yml | 6 + .../actions-contexts-about-description.md | 1 + .../actions-secrets-and-variables-naming.md | 5 + data/reusables/actions/actions-secrets-tab.md | 1 + ...ons-secrets-variables-repository-access.md | 1 + .../actions/actions-variables-tab.md | 1 + .../actions-vars-context-example-usage.md | 36 ++ .../configuration-variables-beta-note.md | 5 + ...ment-secrets-and-variables-organization.md | 1 + ...rmissions-statement-secrets-environment.md | 2 +- ...-statement-secrets-variables-repository.md | 1 + data/reusables/actions/sidebar-secret.md | 5 - .../actions/sidebar-secrets-and-variables.md | 5 + .../using-context-or-environment-variables.md | 10 +- data/reusables/actions/variable-fields.md | 2 + data/reusables/codespaces/secrets-naming.md | 2 +- data/reusables/codespaces/sidebar-secret.md | 2 +- data/reusables/dependabot/sidebar-secret.md | 2 +- .../secrets-permissions-statement.md} | 2 +- .../repositories/actions-env-var-note.md | 2 +- ...ermissions-statement-secrets-repository.md | 0 49 files changed, 561 insertions(+), 352 deletions(-) create mode 100644 assets/images/help/organizations/actions-organization-secrets-tab.png create mode 100644 assets/images/help/organizations/actions-organization-variables-tab.png create mode 100644 assets/images/help/repository/actions-secrets-tab.png create mode 100644 assets/images/help/repository/actions-variables-tab.png delete mode 100644 content/actions/learn-github-actions/environment-variables.md create mode 100644 content/actions/learn-github-actions/variables.md create mode 100644 data/features/actions-configuration-variables.yml create mode 100644 data/reusables/actions/actions-contexts-about-description.md create mode 100644 data/reusables/actions/actions-secrets-and-variables-naming.md create mode 100644 data/reusables/actions/actions-secrets-tab.md create mode 100644 data/reusables/actions/actions-secrets-variables-repository-access.md create mode 100644 data/reusables/actions/actions-variables-tab.md create mode 100644 data/reusables/actions/actions-vars-context-example-usage.md create mode 100644 data/reusables/actions/configuration-variables-beta-note.md create mode 100644 data/reusables/actions/permissions-statement-secrets-and-variables-organization.md create mode 100644 data/reusables/actions/permissions-statement-secrets-variables-repository.md delete mode 100644 data/reusables/actions/sidebar-secret.md create mode 100644 data/reusables/actions/sidebar-secrets-and-variables.md create mode 100644 data/reusables/actions/variable-fields.md rename data/reusables/{actions/permissions-statement-secrets-organization.md => organizations/secrets-permissions-statement.md} (84%) rename data/reusables/{actions => repositories}/permissions-statement-secrets-repository.md (100%) diff --git a/assets/images/help/organizations/actions-organization-secrets-tab.png b/assets/images/help/organizations/actions-organization-secrets-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4b2a3b002d08745740b610927f2a3e3fa23d12 GIT binary patch literal 54507 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 OsI0B|5MI<0;&wGN{LiUa&M3WbwM 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 smdKI;Vst0NfZVG5`Po literal 0 HcmV?d00001 diff --git a/assets/images/help/organizations/actions-organization-variables-tab.png b/assets/images/help/organizations/actions-organization-variables-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2ab58f29c478cc8a6dffe87b14a4e8c8b4f074 GIT binary patch literal 49541 zcmb@tcT`hbw+CuHh#W;w;YbIiDMdj*Ab<#nbOGs2MY<3vp+f{kMXJ)Ih9c5IdQU8L zgh)%Igirzj0t7+{ft0uX?!D(6{oX%sjK>%|+3dYa)?Bmx=3LQt4Yg05bD7Lqp)M57^o5vD2YLVs9Xc26{&xoQq13 z6MPr*ibGQ91xMJ^sMy`3qn{!Ls`C>tHypW^w&i8nBwy2SovC=1FFm1mW)yC4=6szy zTT|RI1>unk6{GnFKFzEzeWl6mH)9;m3yB`?;ciHe)n1@PX^q=FXJQXsdY12=`sxyU zQr%3eyf!7ms|)i{*<)ws$yOkBb?w8A2H9K~ma(G{Wn^T-MPQOGXCCIi4mO}w5R0Xr8E98qSPm$8C$QgQ0FJ}EBeC4I;2~NCaCaEExPS}T zoVPCyF#+G~z@?dcYUtZ}PEKCFu3*27QMc>BP$;*1 zmVTB7`bv&qPpJowzz?0I0zIGn>~aVcs07@4I{7^i2=sjH<*O8^BJ`gYO2GZk$I?Oq z|7qgqp(12ya92PB?BgULFLhPws*vhQ0RaJ!&m(6g6V2QI+a35%Mab39?}?JMbU;9W zRDi4$*vCcsnxdkj^i>&Y85v2Sg`{tgm*0axNiW}v|1-${jic%0>*(Y5#Lo@vCGd0H z2M@szKNTUNpA-H4_dmbWDbVeonY?`ecUiy!rGLJWz9w~5`tPxUuArY!mF~I)Iz6`1 zbn^tr1I(c+BP#>?Py7FR^UsX`>S_5;Pen!ffA{>?o8Nny`8xS%fIWdJ{Z#+ing8wl z@0b7E5hVR{<^Q6@|B(4VPXRiso&-t%y=ST?(?9}W4;^aH*3neI7dWxn{t|l0#vGpx z?fcmDfl1+8QN+5Z^B=9B?x$foPkkSlVfv635%D14K>(8_7gwNNp@|BkulU|Hf&|AI z6t?M=+#~fRrwxmly3MVs;Je~tdt$Gf70T$+YScD`WaqkQ(@hHb)`*Zn715i*s;S7s zje5cY~kpp=zX~ z;XA=DN6JeV&zGNMDmOttb=d9|7xAS)n{5sGPE)+b*Q$~IS0}K(mGdM-)p8LR5v%-Z6)*oZgw-6=n#&#Kf`HkC~6wb661cz!4^p|B|!#s1JaC|c7fy+#jJoC*; zqT*kPE4F?_QsU2}PAK(_qpWtYj}4<+%R`Z+K5Yy4F2F_loqVk*Qchz5{gCOJ1bkC` zx!s@-ZzI&D)(Tx+zG$Vm;SdRHe4oUz-fa8X_XYkJ%8`}TW|$;}EH*c7O=kD=M-Ebm z9FHHxfNX9$%UX-|b>$;DQquKrXZIJk@8^silurz=SX#%INmdLN%I*fCr>FI;iulAc z8<69Ok#VZrcTBmtK_0eT zFl;$#1(#(`5&AwRg0=hs2j;7LmFO z^(W|+@kPTWRLF`lOs|Y!GFa_L&oYIU7JF^PP@)`hulzYkkJDYQft`4-G>1?(=@I|h zIy!xU>9zA8x?=lj6w8z%rd?KtskGjPF@7d z*6Dpe-O$)5Ued6J^QX5WySmS=W0~uXmIyob%)kz?uLr;Nr|Ccpp++JxglS|bU($OO z5%CaP6OgmGE5yL`@LC9kD!LDHZTcu18@`kBPZ|0j*jjYyGOIPFOzg7+=gMSHGBs zh6Yz(-z0ejc~=cj0)bGM*HFJBM_C_7om7xQEZQbXdpNWAa#mC?lY-!>AucerdL z@VtCb*)8?5IX2iMg4|$0YpKgxF;-&mt?v73OUIZMb3Z+aR*99=wB!>O55elu9Z{5^ zjLgh}^l_{44=&EG&d%0h76&C4GBR>LxS>T5E~^Id1`A}O~om3hC_IU?uPe?>Q|s^azWFb@w?+sS${bi|yDvt5uB zY=q~xO_vVO^@F66Tg}{V<+Ui2$W zw$dV!EPa+V>NuD%u|QE8I0{QB^F9$bve$9LpxD#L$0QCdE9WIEG&nvtXuefnFL%Mg zK49?kyk+9np6|IZE7Nt|m=|Q$e`|d*tJ+=pHe0JPhh{d)b9`q|+LZu(&yD&kK88nH z+z5e&9q%l=l5{*TU?+0TguBLRLE#T_0OD#*#a&@jRZ`OZ`t|Get2ge@XtYr@TD!fy z-F-fcb!U5n<9&_*am;%svyl%X_1B+$6nlv35AM4D-O~A$tO?%>@Jfrpot3Tj-R2xV zB*&_E^=dE)OXkF47$80xE$n)6mrLLyO-*V?6FVL$(pftAB~+aKLrVR5?PR^{0djOD zPNmjz7l^HbGD+z-PUolIG=^}P6>f)RIt7vMIhoaeOH=Pnub;Q-Hp?D)m$wRjflf+(9fbq#bsqNN=nMb?d{nU6BEUSg((x(Hcr^7iTqv3 z(W!EHpLwzxzf@l-pJUi@JBS3dAouw9P_)P zx{F$s#UkMd=+oONH(>7qFY}$=@@0{M6Usbfra|iW812jP+e$>KPZ>I8 z+t&zAM-Zl+-#6>K8XpHd;;@xytAl`?s<;z|Cnj2&?!m7!GOX^(msD7Vf!QL) zFJUv2E$`tozBN1Bgidg?+&NGpS39GxHGj}ScOshMA4I@G8v!us{4B`@_bkQRpHjI3 z_@JVs7B-wFJB0T)-ewKYeQz#(&Gddy#|O@P3p|>T1^1_5p|V;rbRFOKywK{$)WAn`$w(7Qg zhQ~`J2WjYyad2r@+R>eg;?2cmR}j6oqru+>x$=rIr!#A<9Z&za2Sc4$WV-w{45zN8 zcF<>dc)^*^JqmmT;(gBZ^kP@)-T3kx{mbfn81?{&y$wiKRxfYUo9nN?zS;B)G2}kG zsHy*bp0tS-ioJe#mOWw9*b zYoxfSsXiy+40-J_Ly-WnH$PCHrvMe}?X8abDRx>x>%Ge9%b4qBEnlY zYp?z7%VRIE_^xi)@XX8^h(Bci7(|0XbOP4&MEClj>EQBeU|ZTM1a~`;xccak&QY6Q zUc!z2UmPlr9RA$WF$A*3yr1#qVHtE5V>Z&)j%-|&`>g11Wf6HL+c+{*StmMB|JeAj z$#Z8Hmt+C{B6>vl%F@!tdE64Cy&qVbD>!WmH-C2iy0WZZzxxy>a;mA^Mv6u8x4B^a z8!#p@I|s#^C4csia*0T2`bgOYB=$r(_x4{P9cP0tpPp-W9F9z(3lq`GQ zmC}MD2B_DTpM(&-;b)z)eG`jnbrXv^gt%g~QUq*@?%c>fHt}bicphr9>{yUTrb3_6 zJ`}kX1e%;k79c)QR~31Ky2#^Z7YCK#O3L*THw;VdHIX9pY5d0V8F(h@O!$uZ*`D@% zy0r4h-H_0Wl{eNdXj@`+mU(dA)rnOxR~;kd<>fydvtg}oXlThVFJO2?AS2uAD^h}k zL);$w#eUFA)UFdq&=THB#|aq~InBM8isbo~2jvD>+Y%?Fee+8-m(9n2K;*uP-*B5maRTP1Wk#tR@PqzKLIQiNY+ zw@M{EH@UpAFDU?T+QpyCv8QC+(2(dd?i3~}c_j8(i>H`+*O$lE%yrd6XLh!C@9OEr zTwzt*M{w+cat7ROgLJ<9u)HI3|I6&hShWz{R{}y|-qc!lC=oO- z`6JDN$-_)}=i^JtZCj^tCp%`J)6-7JC=*>RCuG@hj*g=v1;>M8PWWs?D>k$e%i_8N z?#0O_C?qH+sHrgpu>^J1zW}}bmCeFFvAWJ$!tXbqykhj%J@?zEwmKbEiqMHyKBpKK z*{WkukJVMR3JR2pxmide^?86Q#ZFCKn(vDQo#TQWQ%pc`;Fxs_Ns(EFO-@$7k_S+2 z`5;{9?9AoP7f^UYE0@E#u|}w9ab`+Vo%v&CgTK__4Tdof;%ih51gjI7>idIDw^%kg z(@<_=*A47w^X@Fmo}b#$-O2;asIHQ3lbcVwb~UC64-i0huk?o^AIX zxT$%Y;?}lS&{@0@DzOnz&7xR@iG&gw0}mjrIAOb;OId>uTu}dFsL)qAqyxj63;^ zfOKTozMpf%i|!9@A)>UY(1t{XNeZrK{$#SL5a25UL!}I!{-3{EA^|w!gGiBA>?4x%G-i8u-;I0 z#$qN2m&$G{#nN0Zh?XLZn2z{Q$T|vwOEdWGt%{09Se6**4%j>U_nrB@38YZT9vktc zhQya^buNzujhcpY#*Imj!pe@Em1pN0>RjxI=-eH6d|Rt1lMOIDY*RkROS4EK54 z;Ooq@b|u7vdI}n%ru?l~)9YLY04_XF&8uE+%T(HDq--@;z0{CJcH-Y1s;KC4Qqh!k zZ{y_T^kfOr&v}_$rxTJo#yIr5#bl-4oRxU`=56@Txc%Yz&r_0@2}kbMhU#g5?{`WO zu*lbw!0DWI3VZe?CdNN`$2cLX%{m-^^8}5NLE$;E9<(Jf^zb!CtH<*(nx8i3M~dgDZD<+OI6YxgmFVUe+WDk zq**1HP#Xn$plyZh8UCaF+vi)q@C03ThN(2)I#q8O;p*7O^twt59{p~>xx?(!H{ z@-%(2fFJqz=vrAv0@pnLwJmC7;?|%Pfty>Ycrw=Cidb!j$~fcm8xCO}3H=?sT zohP)aKlrDHU#)>Z$S?Ou+lgJPv3C{J{)JqC!*^6mJfZAkug&?B*5?!UPQ-KJlmS_@ zGD_aD{Du?6=X%LnCo*}mG{gFXnc>QSfoJS&D6<@0Hk;AA+nBl-n!F>P76t0!Aid|n z0b+!o2fU77+}R8qQ(vzRGN5eu`7KBQ&hx2O{Wk^FU{*h{hQ7_fSQNTWz=dC*&a~|sJ4T(m^&(Voh75yE58hu}V4@hXd9m*gX@*A;~{s|M; zw+*7q_xpHj$&|NUueE}t^p?x36GffYHYWD}h`RWo`rV6L1-c){-H_G*4+QKa=_vVHW51QNguJ5SG{3`7stM!B@1_AzwHmF5F`h3a9 zJQS9`ER=z%lr5I`7V%YEiH&`GDocj3o1A zM^yi@@S@jw^JTN-T~^ci@fbf+)_z|7+leF$yitK|bkYKQRN0sE7Rp=3;`9_ac1K;I`#> zQlTD3Q#jlsB<&TLqj_B>X+*ZJCbhB45IH!MLTJ=#bD(c?MCAk@$0sW>mUomN+Np(X znpS&d?t5XOcUbuvzt=01aa7!BtSR2Ca_gIL%ii)SE(?ecWo+k^QrPV4hKVv?m(c+F zlS7S!M&eLOE$324I?Kv|-9+7pT}5?N=r!AOqXXHyZU%3rY5X# zd9m88XHHIJ69B%b7eFQu|D?Ud?n%1Mlf!4R-z^ZkMmYy6ki{$>{BAgwlU~8qnAu9A zF4&>ULg?eSrc3uPi>YI70|UNvqRtOl8sAl@PP8y1X9oSwI`hAU)_t2r&dyqi(BOHg z0ZEBH`{tI0+oDK2lSpd3WqFmj;I}VIJXWcsw%x3#ePQ8I3KhdNAoPLhMV&G!#iJ1i zV%g7uAD;LTyP}lx1MV{~zrz|oykjGQlD_-ME#0Jqmy3@#&0}5Vao(G2ywL~yYX^QS zQ%+o`<4iw-6XRhZZ3W^K8sHXm^3|9h9Hhh(^2{r!DO(5wkg;}K29(kWh0({z;ermg zn7@J#;)!``^bxf*9~h5v-mxv0B_w@Ldb!}Dt}A1b-}uYEvRK9QOVDs?QMmmvxtOK> z0JUV>Nrw>pp|E}zgw3F@QWcS!L*$I0ZoYBcPGcaUY5VluGDh+7=9MaFUM1rNm@YwE zhB5fJ0Tr${4mN%m;_W@;ZN*530Vv9wJHvRyp2ju?b`Ty+e3o#pm9D$DLkz!FdU!@==bYA!^3)N&>H<2#T-Uke{facEkG*9_G*isHzXE`OGZvvc2_j+ z(vJQTRR<*Si?!@2a@5U^mJ4iio)VwD5Pv!fMP z*T!RZ88qz#t?#?LJ9>%~nj~xpG3ElgZiq3896Vp)$!h}dSKXag+wt92!5#$lwV+g? zYp~O=au3WB7iN%r}MK! zT_UzMmDdVzrtLiUw?YDn8K)bv>kt1W?Z67;w2r2fH3I3Y()Eu4hPlZl49Xr4Z|I{( zSzeeBvHYxx5no>x>qLO#5tJ#@{)Z0V$nn)mx<{#9 zH#hQ?aIiv-nvp>JNN6k^&Dy_~XC)aB^Gy_CfgZ`#f((p`ErI^ca zcG`;bg?7LxuDNC@Nwj{Ff`Yu31h$!B$wKl?>&(uom`KQ&7=ve5Vp^`GLg-ltAG>1^ zaXO&smr$6Od~`SE`~wX$bis$y!J`jXR^OboyiB+NlQTZA0hOmZn{ zt}uQ6qeXdb-1UxaMrPQvmJ~R&Jtrt&pTVG(F$`g5`JfctA%(ET$<8mHs!&=0Be!GS zWr-<#se6f)K~~FS>`g)iq-GN`t)FksGw3c_f3;d!Cqj#OZ0zmXI0HF)5hMaahhfGX z!tq^Vl_D#nBqg;#=2IbEr!hfs-OFeM)y8B^deRt0Ie^g`5$vk1jSN6>90#-qEz0sc zW9bU?)@Gosl#2x!L1{%4@$bKZ-E&gY!%|eR+Io8Z(ljb$H$e@(h2&!u>1#0z=>lR; z8M@&_?LBLdbdCSr#xLF>lfM~GM(5t)Qft~lxko)!TB2c}bJ|X>Vq5JA(YW@Q-Iemi zZ=Gc;dlwZ0$q!`hnnDM@VhulB>dEl$^Qb;cD*gg*~K`24dBiz+HBgdk6~k+f-yzGuBKYDyCkDO{q^qr_pceAp2Je(7hUv9C)sHA_d z+-1xLsGSk)S09?9?#4^)uLjUO6uUnU(@6}v2N3Qzn+^KPi zfHJPs7-m%ganHW-ezU`#)_yf?&q`5E$fHM14@y&TIG;D*bVF|9!WejQD@HeQOYTE8 zuN`L4+P`Fri6P3>sKUb@?Kzf%eWOI-sS;+aU>RGLAgG-%YAtOATAf(iANHbF9n1HFaL_6%@Fy3$_8>-W5&((^E=S-^cVQ~T30I@n>3!8 zAoSLpl4Vx!#1wm|VP47=T{*KHB>GXU752d5t!{K#*2wMYxk+YkPpr<`s~DdtD-HNN z))kJrXDxDa78nMGHeXfG7?*uo(JZY*?_EpQw3hC6Y4jvp6Lpae*SQKM>nSO7*M>_5 z{fQL9I;#qr79#+z-vZ(~NgP4u+E)%AZ!04LV2?R);LYEDHUgx!amyX?ExMGw(8kFT zJ@zN;f<&dI>n7I&4*SVo&+6F9iYnudUX99QK~+{7(WUf4->J!-`-t30TjNP9O*TgV<_?V9m z)pG`Ptjn_NPD^mcbamcp`KuQ%NL*V!pSJS>fSbel8xOAkjP>;jRjzcR)iKtWDlnF= z_iTDN>!UziNG3@C{}*6d7J%_$4$bF!aXX(V?juR~6VRv0e*>E7bb)u+PN*{|)>RhVRZ>cK&jTllQ=gVhh=eX$< z)phq!C+$<4*|}ckhQrp?!q*=F$a)Lz3M@T66@+W+y20<%u0)S%Dkm1vq35Ymu$#dP z$D8A8Do1jf^UKRN6S{7!r4MQhUi+iNNyXy7K%NTH(Xpjq#L03WmI)S)TErcR7V8;q zZzo$+Kx}_7s1%)e&{TdiDZir)Ik_hkF7}ko2CzQ= z&ZtU<1z1(ZgNJiA-#-6d%#M@&{|!tgasVhB`m1!ke(pI37Lxf%KolPUxP?v6SwKJl zL^dlk`ZsiHfvL~I{DFFlS&Q2sG|c9qS&&UgX4U(Y`G!HaiW_TICZt4d0RCF5;gfMg zW^8egF7MIBn}Aik#d=DgElx#VJ8W$e*B|`Kc{EU3N@{|G^bW+T?3T1EQN}p@@mF#o z`1c~dSRJ}3OncO}FxhcAvf1Vy>Ugd*B{e=bt^cxmrDmFCPm)L<08(*su89!}0ApTH zHLOl7U^s{(YSp%Fsf*5rPTlI5$cbC3juJR-fGvahOiGe@o$QRJEt55Vk^i4yC^c6L zcUd(@@3O6fU(0O@0Bi=OLHy0^eTQ=fzW-SIYiD~!j9{SKX4X%<{4))O2o6_FgQx-7 zKFmVRpx*gF>byv?jr&U(tM(Tlm*x9Ue-)OWP=DyL8|cDR2G3Ko_4j3GVn!%ErR^2p zsl%5gi)pq$R2%A2)$pqpB*dDJZ|PK|DY7)Iy)o8zFqCzRoPzFyu~dD39H>R)Omzzu z)Hn5g5UiwPl;>i4{amna*wL?}(-^%38>J;wySCr*3Is3@OCyu-+M_yDvdI7dJ-U{~ zs$#+5Oze6n4j8wpBBsnzysZ)MXnFs z?Q>$%JB2gsY|WAVH6YnGY(MfBfEVFLxBt!`k)IyH{+jNjYQC@>k%1%Zd`cBvvy!P^ zdtFnhxxWoiyXU6$8I#GL@i*y6vIe_6}B|N|P^GN)PRT7Ve z=Uy&#YEGud$bSgU-LuAJz8Y_nzmcS4dU-9bW^lRcN0eemP|venF470*ZRn}Z%#6%S zeM(h={HKBn$_XIcWbz^iw+syaG4$B)>Ea~*kA3oAg7bEjYY&-6mGxupOK$kK@NwX* z90gs}`5Ft#rKNsBrwbTlC4|+nW*`S-6ymH6HXgL?k|0i^-TWD+4(ti8wd-`SxQ z^phcLH8}ua%_52Wjg#!cbHx_C|1PNF|7`p$RJ1QxiV$7H7vshfbm@x}p;o9TBqX?` zzG4jP#7jfCP*yiT1p$vjcDP8(7cKQ+Ds}iPi?qn2D8kYLy zXVMvfpK<m%HsI1%K{1r@7~MSG7}HOI$KSvm|2-skapO8eKlgM>r z!|8aNO`l2IIWaIeIQ)*?JuECtx2Yb;4FSa!pU{zQ8eIXlaa*gav9Sj)fOG^>!(9|C z=#sXhdsz5a)dl1^e=GFqKm*wDiHgVaddkanmYU--E!EZP{d#&2ukrE&r4DqU)M54G zvlbw48->(6qokztC{)8e%VjLE*5z0NG*S|$10X>Ql%8=n(q8(1J1)ZY!O`hQ$kP3! z$kME5#g(?FHg>pt-sXBqG!19P*fM_%1gUdp>Lyl6j7&}O80hPNpP3PW1VCDTS}>0Y zAXR+J4oGx|isl%8Z{s2^6rKmtQ(vz11i3vs3-Hb_wJCB)*5uahg@-C>(sm{ts597C zSNt^wKMEKTe?)>RkBy5|NJx%QsUQQ@%=fdi4}ynj9Z9=?(hy|IV?kEcpj#U5p`xO& z;YeVb1*Z!P&2JpI3zN5U`T?#rgZ#=P(5kJYDYL4i+IlQvMB`GB}JUV(kE;e5G()!}!e-wdL;#O09e0+&_PJUG9acdj9 zlue^c4P#r0CP=N@B9DDU7SjLQ*Ep)hsn(tE-`_YJE?OZYwO8MdwCSl$9(bhXC!CZO z1JW6CO-7+mS)(pLi&3s#-2k%h-x**vmFt* z%QR72`LACad=}<%HCuS(P!<}WIzZ^AeAKk&RL@C;d~J&l^-aQ{fbykl_*{!nv`eTlv2T)EmF=N^NTLr`x^^jQwJq%TEP3PpWp|KDvGt5zc zU~BYOWc8-rjwriLyn)~*=Nj7J@I}ksptx%+KJni$Q={+6D*;J79yR1jqVB3(eR2Ev zXf?-yZA_SbpPt=ftCZu4o0osKulz}x3?&%=Ff<3+5C>ZmDlX^ncU}MIxqFXExQAT_tR(Y zd#xJ0@wMvtwYoffVC!i36GU(sGtS}Tk= z0J6o~GvIHAyhGp2;1q4DYQX)7_4x9|{rHElJbGKHCP*T_6Qi{E@fPETy zD0p74ncb~AF!pE3H&9V#Zei{gd0KMKnP;hMHZSxut&npA%~&$&a6Hn!29YP_C)fMTU z-Y@@fc-ms4A=7e4Qp`QZ-i}U;f?A_=r zUvBm>jJU^&wQ0A)>nd+JxP1HovJtiil5g|$^y&-L(t6%KdP794q${c0thK~tHEZ7L z0<Ebyb>^*_#y{b_>X$4aoYy$D=_~Rn(@7C!%;6$2 zECaX~{Z>r?5F~`N%o1g1W?PE3v^~aGrQlM{DQk0&H$lq|5kyqsko?h4ZYn!%ksZvx zBeU0JC%xB6)dYz+UYdX3^=kgerN*;D9peWP6?1RFQylX$>;8k@{WYPe_FOh z%N$=)RE&xJo9iqgi!|1yQQLnIgjH#{zfl8^o}%`+d`Xq%JK~SS*w`ERovuk8;bFx? zS?qy2A$os(hF2tjClMI#*3Y$Nbz92m9}`;pg_D;83=TD|=uSXfyBfZZ+HQ0fsCS7h z#KxR>!l&SEfV`tgi@n$(n{&uZL|f$_k-=8IK&14yU)hD0 zysx&=X)x~NV`$TG70vdemOab{IC3PsB%|zZiU=5C!RSxQ}NH!WzI#fvvwX??e8y4yF&Tx{(TLrUGXT`fDF|n{%xA@K`mBWrA zk8I}?{we<_&)1d(hiMl$s+22m+`j1C5_iTs`mCu)v1Ih^Pwz+&e--}Je=VfY(vRnc$0I*|+ZqQ^*s~%4>V{Vz zpgD#^D}8upu82OAOsYTL(!O9>T(%`adV~qGwm~g~yy$ z@z&9)IlT!MA|6b{{$^4v9y6lYgx&g9*1q!3YN5)Mm;C$|M+%16E-`U8ZlPz!ODum$`-HbbEIk zcbnyXUn~5((X@I(zjeIXv>mKrW+IarWFCnf8WX0G2P2f&I;H!npyZ<^^TwvWW1)k~ zG$hmMldzG5_UMDEQHJ58uqz0Cbu)9HhBX7#zf+L($zJ@@khSf*ou*S#gt_Rx^)Jr6 zUf-R}{H%ltQ&I>CuNKdtb0Fgx=RZ~VLK2WfqtRKWpn#NdqJRs+LKo;uw&RCv=GyRblZj0i-T4( zZzx`Af}&^MEi}KdMO!J7gTOZxk=0oX?=iuA^z2qLuR6S~jr4`O|J6ECL7~xn0DosO z^wgG%%i?qo4RME&#>-HkQU5+v2Ih4bRvtJ1yzf;jqChMq_#gMzG`dRcvcX$560D(< zYo|&Vs$Ktp+?4uyl%Lw(hp%%DnWeENBg(%-`T=fn7Gu9blmAfw_8CO?Rlon8W2mJ2 z$jVJcqAbh$(bDz2H*Bmh26}wVK(b8l%7Jre6g7<%fMUoF zo(#nIJ;XBp?*lf_D|>It#{Kb-@+eGYeXYdJ7H&I^j?fE@S4#r4@^??<<@UFeb*6cL z5P9}yh;rfCHi?K%BJ}6!#YzQvt=h1y(kI~pSW5+zhR>+ZQE9^X|BSn=pTyS z<0;G{Jerk%Zz=4eF#VnO%*bz##_B}1v7RVh1b5~Kr#}n!Uvzf)$L9_=AQAZZ&%ZHt zu?^-e%e9#bL@%N;1uQU9Z0G#=!5<536#^xaMG{j_6no9z3OxcyyaZx>^Nq?T{a;8I z*ia!y>0%^hs#)*4imYdqa8*%#{Z0*9yTEvb!2e#)LalIK)Nlk7!s_-&;!;H0pSdL^ zDV5l^Ldg={rfg8y3olIb6^=kp6>Oez0I|f844i%|TcS5MJbZoaW?H4#?RoKFYLgb~ zip#05JI#z4Hq1SU^oxsiEiJbzDzg3dzXiG9fV}p?!1bqdbLKvCG%hK>1)5=q);=Ye>ahgG4Z+&Jr-i|_v^a7#qU{MVfl`uaV zO7cM#!Y|!=Vgm5s3X4}~$*OOelNM3t%aaZ9Qc59)-dy)!3XOL@sUbGgqB%HlzARc0 zpGmK&CP^BUv~6YP!XzmvnHIdTG+yi0Lf(h~CBzjWhn_Jdbdu<$FouaVjS&2|Z%J*; zgcdKqyJF${EdGY4X3QGz~9nYD?9%eMGeoZxXK?VIQSm~=nJPgUs;u<5}r z0y#O22pY?3DBJ9Eg!lz>x`6g#h$gGUYy22F^hh7?UJb*p5M`FRzk z+^VL?;J&Fg$jj5CW0M|ptU-GP^Mb4wYuYpcL5aZ7H6}bAb|KrJU&6%l+RbYiiUX;$ zQ)%$a>rjrVZ+N-w4-A-U_9$BX511?&xx*9AxM*!>2f3V{2@6Ou0;Q_E|GtZO;#raHpE7+LD$IjW`fBLHn zXE1{9qH6RhP+7L9iS_k9b`&!;yx*4tt%aKYbIggcyET5xi*&uU;wc0ZC0=k6jhkRA z^*rnsj8n494821n=Wslj*Q_<)u@BjQH5hLf(9EK6Zj4q#Z9BiM$;P;=9=@XRnctS# z7}YnN0;ucf*sFd~Ce6IoucX^k$PTX&4edIU>6gNOKr4k9)E}NFyDgSxA6w|qDc?O` zccd-P>Z3iH8P5!~cLAgGcOfrDpLJuxlP${Kv0scI?n{n1AXsgdoVX+FJNPPdM8uyF{GIk&ZBjn2~1?Vl???hzn=-J+jkt zIiq9mkWa_W^m`6Y2Yc8C&_R$_{oTqr}6&Yph_dj(cr zU`3GC!yjs8E9dVQ>eN#P+h5A0-``Vd4+~;FY?CMp_41llRF#vP|46Y9d{|_ra#VYC z>p{HQ@@XaBz6koaM}5n_oUV@^>4U`L6|#~y@%t`jYHhFaSaM2u+%NmhDz0wKFHy(E zQQiruD1z_@6lG^jp45xV+YwJVq;$>CEFP(Saa!qFT)fAI*Txp*y;0yEWIbyboTye? zFBTRa(Bf&aH}8RT)g5yShjBNT>~tGaE7}+)R6lu1qq(7onDZ0`(agHrmV8%wk!csg zB*{d}9xMrv%kyJC$GJmhy8>N~T3)R_^H9Ol^eRvEjW5xi0fLPCnAZ5FxUM4I9@&XqAGCKKWMn(Z9$`-5DT&BFlh7+1O zJrq9zpnHDMe@66fj*136$FAsr0tw+TOIB}{EJ(I&2bfy ziYN?C6J@JMIij$^#LDl+(xk*+n;y!4dz(*fx>!`emP-Hp;N=6=tPzX^+mZ>0yk~TI z(_?Ryp2LabcYjc|hnKP?)p@wMXvdI_T3;^;7zUCj-d1VV{Vb$sJHe}}sy_Ng;djF+ zUFouTUV8l6>=W7x`{Da-C#KGF%~gE1XH@_r-r^a})4~6DY8mQ4vby^YQYUgV)grV> z)BO7y-_%Swy27;ErQku)gtDn*ysH~e+vV=5NRYJO)N+Y^JW6$#32Y z%Y>UnreG$t5|IPSsQIDlyKD%gzm?hyJ5D0fYBgp?`t{R9FcEV==7sxPRi#BI`ia*%Dxq`ln%OI4uuMKKvS4xW&9dE8wD5Os-J+uLFza#;Yom*Rg zULNn_S$i~c4y*HhW5qNWfv?L-xMc1o**rU{{1IfxT_T2g7b>yJ;uzq1@j`*<8$njA zW{)$P;zFoR{Nw@jAmqfy7k6Z@E z`X2hR(zmTV<+{HdQupqGRH?SS+-;XUn<#ZUeAUYXA6JN1oklGyuGkZ9RmswYdd$*Q zfx`KN)-OkgE3*o_%;U~BcA}5dj^{8ma_U^bM8K59i&>nuow?$0*s}CT9Ctv+`E*Il zTdqFHc)=pallE_f=FtVg!_i5l~R+ zZbl>(0Tt<%lJ1TX5CK6#3F#70Qo0$sVd(A}U|{H&{>^=!-*e8npZoj&da>4Cd+lMb z^?6^{_Byih3VO4++i*B7F81ZB@-yb+%yWbjtY@2(A~xoYvoo-!)_XKmC6=XFj9*I`prJO$1V&`KU02r z>6>cWR@C2(-MrNxC1+#U7fWvR_Pyj2jP|2%dJb;E$enLTbP4nu-wRdFQco?F@#=iJ zn#azvboIqNw=r1g#+ z7v_PHa0yjIX~9Q`TIP+!vbr}@O$Q`7>bpcso$6IfZl;StI3rdFp|H4Uy2#b+Sl|(u zj!3$NoH{1HSotNnhOn%$rZ*a6cjs)}StQbA6@lKex}n${OjF#*|CvuJu=n!tENmXU z2-cB^X;3^?!OkSee+dQP zW!hIU2c@{)K%aM{j%Awf<$lXyeqEMO&oTTCS8B2qjrCD` zVgQR**F>5Z_j z7*1Mzo0U!dgEKC@VkhWqygSs`UCyy=2nyX;nc+ivmSy{x;CxgGl?D^1X0lwvG4>$*YBmdf z*|K}gt&=8TKuI!SvLUo;tM`1Q#a{#I7gLF#-IeP^t%a-n9I9aw-?}WQFM+ptoL2co zwiyS>?HOIZ`wTvx_bfytO>020X|Ti1-@??IW`F&{u9TzyQ--*tgp3dfFn8kZlM-UD z3_zo?_i1otbQtFSP7KMDo*Le>ZR6>>>Ia8I+K$>*WR+CMJk-*(HFY+p`!rIb z-|+rl;FdU}S4}-x%&prLllff<4N0Y~o?d7=3n{XZ&|ONyIQzW5jRvlm`w3x;VAcvB z9ZwdPX4T(AF)DF&{AX{Ps57^5=cz7HWuU-^Gdq5~`Wz#WLv_#1L&HQHvO3z$%k;;q zzPKV@2lUpwdye5`i^R{;(`Gp%>^8KL`uFFoyUCt|4dB|@aSZ4c8D=&t=c z{GToTs2R$s8C}P*EYFe?hp}xbsZMO`hI7yE0ev)3UXByMa{;Z>9 z-M3N4Ac@kybOE4RF2O5Yo)?SJO8B0{%&}Q*=UU-DDQ%F3(=1}g_R+j=Znz}xsbA#b zH%5hCLRv9UjjbWGbccakfg-dP7Q7U5d~REQA9E`UF9jk)8eZXuU+UWULJSi*?-ez1 z)TXk!eA3L=czQtMp&~Q&Mq%Sc;mCy-NBSO%Gv;LgP2WD8fLBT~eeGe!?Wfnq33ndx za>M-b!^4i_CX}s7bsymu7yUP%A7f7+hE!zx6Sq-|J81A;3Xm^NEBLBV^r3TbDiEeE;Anl>XwaWxx`2P~844tD%8lLv)q)YZh6W(7W>+l0p_K&h4q37W>{&Sp;AMQ+`9cQqq&-4s@M0~ouTcCbMbyF9cqoR!>LE+UbLMq+`1~mfO zAsK_}&RbP8B@bs5|D;$S&!4*IiEr(9&6C&gUJQ`dvY%!uNfbV?J~re@V*FsI#?)3O z8@O8k67*xN!^g*Sk$@Y=#%=kVtBIJxTJfWM3A}x2HQoA=Bg^@3rji7B7j9&N>N0mv z1r2wAm3i(}Tj`+v)REqv>CE{MOj)63xbE5U?_pm+mT?!Cm`y^2iCZ(tw-lB_JdHI) zLm*z|HecVN%PX=In=}J|BY)H=rQNjIWtfse5kF(sbEmPl0mBU7%z!vZyKYZlFT_G# z)5qgUMLF;GL-v(3eCV#1K6{+A@QbvXFr!!n==h&PjoM`x`ry+Uv~T{W9!~cg(&`WJ zJj1o?ViQ$jvpSdEym3go7pDcfAXCKM13f>^91ph458m+U4>o+|EJ>J~T_y|at;lGb zw5pNQPN$1H0^Q##cEA7*0?yvgSn#tLC%nus=AGuGjht(08*7ShZ>CIKN+2q~K(0=~ ze~^8dgzb;gl>WQK@k_^~ttC2If#4b+dpo;hi2h*0#QRt+v*U20&nY#t$wt?whR(^z zqRvLH2e#H}HpLXamG&y))kvEB zg!yi~dM4bzYkcH8Ik|rpwoxeuI%JMQ-4r9F>{y2U@1#ro*80_Q_%h4-N?5o`!>(TX z5+PkU``qb9b>u3a4^FQ+4L++a%l{W(nvoQZ9*f3r6ilrBbDf>ZhII?`t3LN%dyPvwN^-9*W+kb@kra1j-yztWv`7ORbm@*Qys%pb9 zlP*D6!6rTFkN`DePk-t$u!8$*F)cc>9ThJD!EN^=!HKsTc|C-KfsI9oD~I=KL!iOK zB1ot%7juObPq(`8QpW_X+sRFYkkb+KYU!IAJQbOh;i3S1?-MR9z*8FNz(;Kwf5U;z zrj-h{Ez_i@W@bT%z=z6*u)MWHDC?zCY7r`h%L}OrS(r}y!zaC^5(K761Q5#v}5s*0M)J{{1sE3x0fe$i-#pz zlf|@h3861?D%xDI7>MuDZq`~nIi3DcH`rKmX(Ud0-O{ z{mvzW>nVaxJL}uX?Z$KkJ@4YytUp3|v?#78+$`JZ&+^OK*@dDp{>IZQ%a@>4@c7ff zA;06cL&pqb4a?K>^K+qm0*&se+_l^U4BBLF@;gt>xKW&mSO#Z*noBBqK>&4L00VyJ zRaJc)uofC={zP?Q12s*UV-S{Zx9|HpDlEUWsf0O8ZIL5brDPn&$OB$jB>WA{;I%Yh%INi?{q`>so;( zn#QwvJTl$JEePXOQ@uDkGnL56r0Ez8%C4I{Qm^KO)=m3xTc;pmFuB_|@I6`5C--q~<4mG1*~(n$pUGaQt)9~48Km`ow4Bs0 zL!u1U7I_A4F0g{;mu@#@M20Y4Rm8EPz)QlhS$cvK^Sjg+=6o27g3=zR^xBUICvCgB zNKg&$eILkw^zlc@xmek9J0^9_eX+n{zHY@yvu^Z-e~T!;_!eo1%lqzKHQG%h0I^b) z(Q{M7K1cZ?Jr3&0VQPDb-kxw{0Q>j22n0_^xK7r1e0x-*rYf;8lOedk-Z88eZQ2wEKXa6M(g~zQ^~xXB?z>~muRC>#fqk%2 zD>N${?vi5i8TNmL<{KPoyi6+}Wukp2GOy8_`0qvI2W9X)eU}}CJ@oG>wV`|WEGthw zJ{8^T)QtI}huTzC= zs{c*Iuec#-bKqwZcM6h_lx1*fYbwBg3~_Vf4@u?4?R6;{rf^wAcSY7y!Q&7 z%134IIXotqw7d=yAJ|Bd@R7;Zbstwm@Ti4kr@-~ET=xVw{08CWpp1acBM?IRusV)6 zZ3rw=jBow6YAhGPTg13Kzo}rLw%h1yF}T}3>R2e-Y@IR_EzLgIIz!W``^aUX?Sx)7 zb(eZ=7-RT-xWguj@J2jHEsoNj3UbQ%X+gGk&1S#MF(fE5%;<`#G==#?Z~$VjlewE`$YpuIH3QS+5Nuj#N-k=^N6{$3c&ubpNnIg-rC= z(s?_+5#M-gV_2iaG53Dj8RMJFW>1D?y7(b@*fo0J6)LVV$;sc+0H*Zn&8kJ3^e&}c zGH-q@wAphg582&m)?039DJ}v?gfY+b!-hUxCp)Is{P+vKPI9bZPg8b0V>LVPG%u6W z^KH;ombpK(_kzej@>vU79~=yWq!YL@KRnSEU#YdPU(GM=ei~!0kmw0;Vk4=$s!^O{ zd!KE?5Lao;${PsiYRAIHu_6LvK>$>y5YT~vJAqeYR9r%Sosn9#4`L^RiI$C~KSRg* zQ;@jcEC~Wn;Z+FDtULYgf0#wo92pki(s#Km=_YmBWE7IlMVHE2_W|CZ_50Kzu359y5&&TtMd0^ut=5+;`1Vhw0+@63c3z-L0y4V~XVu@0B%1=^8gBanMGazh@avA{!BT+EQNPGjj^x zx@}+yh4TB2xDHejst^A2ZP&M#@jEn(EKJ;~rRzR7RgBqjEQa+}D(x@jnS+ykai!E% zR^{;j+BCBgyaMIk4MD(4r57y=8Fi22(xlJzLkXz{_ekcth~Ms0R$WkHSsRZ`gl-$m zPkkx>>fEbQq_&51d|{G_A)W-zW9hv=Y4f#HS2mz<#JC>Z$?u5=9?70%2JPZ(sIZwC z0Ics7|2TdK`M?L2e~52c-Te}P$b#*H5A-XVF2S#FA{X$uzu5Qpsk&!X<@@(uJ8kC} z1Q|u{5fZBd*6#O_Zyr6J(+&u9-)OiR(laor$txphD`1|hWNUx+O;zwJiPvIzl+umh zq$Np}(tPtCHL)mkue(%-DL7yEk^X@ioEeV zq?YBoTtTtNpKV{IM>To2su*QRQrG_^TTrO{><)~`gl)OQ~ynv$q!lUza=#}x9SG1;r%2( zvt6Osc=M&Vf;?{fhWHwL`{b`ZukvHwYO@eRjAY%LS@#gy{jUo8|G=SUZ+7!fbbc58 z-MYaZbZSY*Vkf=b-7Exjj51*x`F@4kOflJ89o;01 zS2hU##?EiLhHDxBO#hFS_E`Pf85EZ9Ly~rm)Bl!G{^I{v3Nf1_l!PGJyIf3t`2v5_ z@pMz3fp^xC0X_DHZAFdH4)qHq+h2@dh(35`T_c1lI-Nm$hw4ugmuU{cZ2*L>vuN-l z_a44dnBwn~n+Af==FspA7{*4T{ao)B-%j=%eWVk;v&-i};q;gq6xNWVZnD>iSodrr zq`0O}e0{_HH1(pPUjp??ccI0?zWd;0ilM!&sYmt6cBV_yN zr$m8MPsa8Svgh}PruR{ZWmfkFjv|a;R%P#IGi<)M(MhrgHd)iSNOjZ>hF>wa5#*^8 zmdVZh4MtATW_<8^$UE2RHr-XUXz$Z>)+4^p<@5=Z|9w~63nxb?A0>=NI4Rk34;V&^ zSwWQEEcfnj5QGNHrwygENqlwpzn`WR7$ppL|6H`5^mMRS+go;H5%z?^ZvioNQ9x}g zy$Hfq$R9z7qkKEp@jXEV3|tX?{QDXwc(r){3$Xj2L>|$9D=`1%;F@^=dSHEahvwSW z(-Il;*S{J5HuHaJ&LH?JCEvcN&UWoD6!-w3w`i-=^?x=3Tm{>Cw3yz~X}EQ8D{9X4 zAuY>4`w{}h@xP^KEBlrlD4H@?awnYk#^1aV1PB9z?E}0sfH>(-{gma;I&Ge;(TSw_ zM|Y-h%rhiGFs}NS3E}@2d6WHZmjC)mvHuQyoPJAybm(uG*0q1MyJY&iRr?>^L7)V0 zIMu3AvH{Nhnoh&_vgbOHJWl^?21NdwG}=bxPf-|{%w_it6a>I{D;u2-rw$V-VD(j{ zj(Y@t>cn6T=?OzuqWyGb2Me4|38Amum?eszSu^;Z!1msC{ITU6_CWwU=# z<sF(bS zbuYDV{bN|@I6^M}@31-{iTr;qP;>xr)sEdO<&5)J!kT&&T>n3-k&w><{2g@u$8G;B zL;wGRl>Z+;1CK$kUrrlt^*5b9*#KPo$6#uP0PhlTiHz?P?OZBs0y)zj4W4L5XKKOR zlFpxFaJcJ?%#3Ayus{jwoQs%|O6>g9k~-m(s3{0ft1VqtUV!%wU6}!?DioAou3-;p zL4`rG0h8}A>4_gbJ!Rimbv{By9yr?BI_Bx|wA!Gu@Vu*XKkCpQSB5Fiopd^(E6%wO z|BCx?(Y7a z1U#tSo(%rp+w*dqW`Pu2_Z5l1GH%6ZWU%ZZc5~1G;G3t39jAEOW1{!UoJ0tR?|lEYl7-p{Zn-7qt5f$6Pbfih=& zHMO4md)Q?7(##mXsT;rAsrk+nSlWPgc0T->zqK{f0|Pri$}*9L-iUXecw+cUev%M$ zb70`hWZfV7WnpYNIy=T`xs@A&T*9DoI<=3Jb#=CaV04|2`eFP=1>Xyy%|}=OAa-=3 z5W2jB7MGEExlu&1y%=XlvvT>KPUvNU(|Eu_y6?pojQON`ka}GZS+ObKD|C%Eo9OT`fM^ zbl$tTNNvXJv76(0z3ZOh8px83z{&SchaqcG7b{{-fp|jVA`ayXU589(LRyCS2NX=0 zDa+nETLj$R9_ei)CF@7 ztniEBf1t#1<6Fi47b{tH@nHO#f|O;Zu+2J57Ma$la|m|leyZGScXi@?^1JF0GRE~0 zbI_wpD5@|&ztlR5Fr|N!raA>_K!*lG#e}6dGQzM|c;~~$m0ZwU>qEt3>U0 zZVzu#vHR42+m5vl3{(&m5fjw19C$ie(|WzPPZi!U>Jm9&DgaJXKRSo&PK}M_f7v}M zDfyj`Tp4M?nL+}zb$1BHCXTYoMrHNU%Y*aaA2M1dW!o^|s7;N?_FGnAfo#>}3Dn5Q zQfzbs?mbOm|9T6;KCtKzb!`KFZ1Rqvc@aq#5?|*3w6Z*xKQ6LdIq=l86#O9fXR@}o ztDPm$65Z92fyLK@Ff2rwewMD}Ne|NXJdcqfYg1M56Si&igC$P5O1P+?EYtROCgfa` z$q6gn=ocY(duj^7ieo;7NP9vVyk?0mR;dxJBG6 znjX}p&uc7@A0A_!uLweID)l*b+506;Z{8U5XTUpU+-xxxl&EkK_=pqaEFp-j?rohv zQ;%MGm*1r(!1re)DryijSGwT+PRTRlIdv-(oL_CCnzcfR`JHQ`G0oVez`Dw!nCaDu zjbUnw=9@{n5n_TXrq;6$})j1xK>D1N)4bV8OTi9EMG4c`P+PPXGMy0Yluc`BOhC(v;S6HzJH z+naw-cAswh)YXyK;}2q=I#$QE;d&W#wvM}c`%JbEY;xN98u=tYuwL48rjKSA>`Y6? zaY9$UwW;7Q%`N+a?!)?fi>NesR5F=N>(?5Jpu>j}If3Omv8*6>nSd-GA9r_-1P;aI zY%t~;)yb(yLCTyYj^#+Ysc8wtWxNu>$!AJxn|sMP*0mPTL}R&?Um%v0v3j_`GkC)y z4*V7t^;L*&hr~Azme4V$t*_My1M~#(dx?eMS;ui!_rIkBY(%z=7RY2UReK5L}oqQTSGhH%=b6l3le_=I(hA zrmFMWyIk(@00;6r`E+?4@ZyOLX9&n`7i@KZbjs-jb&al(v78}eswRn!14f;JtyU%? z5?7rzg+T`+ZL$H#6Bt>4=%8-n4_uqp42t+g5_6+}0H$79N-b}@^W>$dobO=b%aefU zvR_;FJ^el<#jW5za6M>x3I=Kx7xYcrA`NO%M@OG$Wu`<8;n@#<=i}=IZs9p{4K%8Y zq1|Gc$t{^E%<}-LKxfXk)~|I}b~bGV56s2;J#6mwT!2H)wtiVinIZiHA4Ko4e+Bxi z;-AjXz^cnHIs%Dznk4Y@VA<-=Xmofaife*l`d;-*G*M86eqqeWPKk0-M@aIq`4(X3 z2FhE_FoDm7vzn^Z5DSo6$Kiq%a2E$ratoxy@UY5^hgc@eb*wvI(v$a|lBI?L?5N0r zXc`V0xd5ZBON7So(ejkZFW6*zzOFB*!5{f{-7~p=k;(ka5T9cJgZRf z{eg?dlzW9kFT?m&5x>Y0rd`+`o+ZOI!P*~8nJGQUFkW}jZeM}ih_=#CdpX9KEQnZJ zi_iOQun3}H$rb(fHT1M8(-L)b_334@ZPTXBJ_HlL4qnD#XpW+q+kE%M3$5npPAqF@ zy(3=d{5msfLdezaG7yBQ-P+VVuTh7KExoo55x-0yKAJGmkv~ARD8C%xp~91rG11eN zG{?JLbN0743{QoCvj98+;JL?p6K83s-3*+nleT|F(@7a_EDGH$BwiWc6=h1xO3#&6 zxvg(+=>PCh+yrLl{N58XRj#ntp&jwgIDzLb{65sj3z3nA&6yTmU9iYt^Mva_3%Q5a zZ-n2Xj*OpFrhzD}NZ5v)S3iqUry25Bb+#e! zh3YM!a$1vPdwK~y_{UpVbw1IySr>^1+N9xp=?|=aelSxvvs}lqJmfiWy9R_b2?}+b zWA2hqd73lMbr*1=G+ug+t;u-f*~qAhpLLKNk_WOrXFm?ZLvP1@VfMYT$nfsH zY$O^Gu`Pvs?RTj`W=>+Wsy({A(x?Eh{`plO!+I8KAM@eqJ4Ob`GwX zVCbsEHQA-p+{jh9P%fFow6$$3;pIP7_X96-ba50O>q>rzzk#na zIA8Jgh{j6B-Jn#ug^7W$nq`4Dh%(8e;>TPw!CWeYD~l$78(mk1W50BqEf8$xY6$iG zGjL}|eXvumfNWH1yQZ)C&dLx_#j1`LPdvc z+(Gulu>m{WY!?UzNo!g>u)0%j%E$Akl9=(?8Q;%3^bp>Kk!7^id{~~$AoJD9<$`p% zbp~mil|kk^DOAUJhV;}gxUWdo}D#C}(AOK2$4_5f6-cla2BQhMh_c)V} zq7Cl%O-W+K?AbbQ_4qaA&sPPn%q|p8+meT&ufV0HIq4nFY_U9ebA$wb^+$bJReZFa zge9-+vx{|c3mTe$){iPjHW|LD%WsQ9Mt~A<7tUvL@39LX(W^OjTo!i-W)=5-Q+jQ^ zh1s}UVggWx>axhvAt!6IOIFtY>2KV9@rCU^&qNBp^`d04 z)tg#eSYR8r*gxA;U#Og;!u8?oi>bjku*TUwfEq zV|6rniS_xn9tnpLioUnxWT(M-I^}R-u`)QH(K`STwC!ny>-;hBw85Edu4FZNk^ z%M8i~7{7HJo1MASHG)5d@yp=pGR@)6YT}y$fs|aF9>zn&@N11IjMeuoQ^U0Fv#2F*w%d?= z$^qV<&a1(`TyMBW%ih}I4!_G&V_>s8z(WwPevSpa?ACq<)cL#*SUpbxQ`V()oxR$OEE@(48@6D9q;0?5#V0vi5)c6uyokJ7NQu zI7Ob2N=eGOvI;6vb2_g?(vNCpwYbcYKCl!Rolm7@ z?KYv1q~BGyYh^Nf7rfEfxfRoaIbMr+>6?X_l@R*8dc` z((0_l&S-X9k!_!){gqkF&vT_t5|XIlVS&>7lyO3*fh4cY9thdP0Kt?*%R-=LcWGs| zum>RmvVspgM*!~G?GJieS|@ynoSWNB(K|D5M&SO4{d%I(rb6f%w5mOM4gII?8>Llo z`bXS0K~XDfEG1SbQD9v4kYs~f*}OX}`i^2`rc9t6C6ZSA_T6~0=wot&cC5qjJ()AukQ8#p*CKj-9&^?&>O&TN zBTTZqq}f{|cOcbo=IZXtXZN2V9FwJ^gHe&YT?H<>@yDHC^1n7xiA|GNm$hI-14bA6 z+27XK-E;}Sr7`(ATm(KoYV3ItOIJPXyjM8eCPXPZ3_aXkW;+PU{309FBQ+NqU8TDt z+{@k7YyMqo-=cWqK0Rx9CXKv*KO}6V=oxp{1^QQmoby$miR^0Lm%a2#@+a_C_KUNI zR+Ue+g|Jr%mRxX77rhTbE1s91ETA!@Z|;u%Hug3;syuD|LDo|*+H)g@yzE47frmNG z_?{2dwa51Y1Bo(U^}E>Bv^*&H^Ft%WWn~S5^nDw;tDEnMt?)dCA^^rWH0c> zP7_GIsOX$;_pdG9y92b-J_w88yJzGN8ltO|j3`ASoE~d7_UTp5U_yzT%f#Tnzg%&$ z1Aov7m85rZ-3kL*1lr!SEqRonzt7NmCq?T^CAYi263@{lbvorh`5_oq$Rmh&sB*4~At#Xy|J9-O zzC*w|L!Ayo7wYf;_yL!C=f1Jw)6=V6VQ&*6Ji5*W@4DP_?80H=Mv08_WoNX>EArzr zc8H#HC&vIRf^$H?xaFA9YZg{#Cw&I=yNUbJ3tsN!ZI9<^ z$uPvQ&5AeU70S*OD~~cjeF6;~PvDs*s~J^NWQwP^1_r*JmHRxc&@i2%65rYdFlPwc zP%$}eH-oSAF3YbhEun%L?#?TG@q#VM^*DOd*s-Y_u@_iTq6~pySzl|*0Gg~Q9o;re zJWJ@%kG6^MlCpxKX2ES^6on7#88L%-`PSB@!*`AVMbX%IEjM~5+x9A#V$XwV_GIA1T8PkCAgEFS2s=vJnppjG9NW(CQJ|4p zqP{IS&Gp>(j=`6mZr0V+(TJj>3|VW_17x|cOy{f)-$&XvMIX6JqnpL>DWi^cU8|@4U zIhMA57vv2&Gh;sEk;eNM@UP{06aHV7RRAT6Pe`{k6qAMh$V2qJOy(JC-}~&feD6oR z5+hQey}kdScyKPkbMgf9PHGF0^ z07!nk+HS!)%AKK`AwIB764I$mwBHiQLFL@RE&ejxTGtuC#3Mo9GsJdBllKS^`#kLS zE=!xw(NVmbKE!IT$m5GjYQj37PIUQr4#{UrqU58s#Of!SSZpYB1$oHg=?a^0MiECag*}= z{NZO>mFSt@4hcG54Hz>5+@jB^ERgQtpn#fY@-vfOcZ6spfENrGm;)!=N8>5elA`)d z2ADe+lma&Ov1!jlpFl{n5*QR5Igz1nJJCG!D-*k^)g{G(j=gj!6?J^a`h zKoJHlw_|UI4T4LJ3g+aIuAb^GhWcxs+X?cW_-s5im^?UUabB=l=?P7GM3#6;uY9io z)r5VSFIN}-q`RcyMezi~vnr?8eXQ583Yl$VW?R7NZUo3=;a>L@Gu3X$TDMyiqUxEy z;Sd8GS3stOl}yC3OSTbj^%6Lm401lq^LQk#_yt*!ZLSOqW!k*cFLWxH%Sg|)W1f-s zgJEJ{VAZ{1u9!__lFoj9YGKghngOGz4M*XO%1Gj~!*WTcoS*0~P2J%dAdZW_u%ft zuu9pq3VdxeDGbm`)R|$mKmR!opIlzOd=2(;#dDl#xp^%jh!4q>sI;B_l|j}N1hxuD zuX=&%J=&45F}WH84uKaH@kdtlp?Vf+@|}(M4;9)N1hUoB?%$Lh_9pM10m7isTxl+R z`bYrMeum92gdOn-WJI z)@>(~BAO<9Y)l7^$oc%nmwx;`p!R-zjb+krP zRel`~r04c&AFm(jxU=OPKxtkc5{GjE|3n&MN;4djeMuGQ>3`&Pn>7kFeK(fr^uWL6yr55H1!<^LG?(f1nz@F8Wz zM{9(<$KAU>UXQGlH_yCzcIZknuaLSvnF}Wpmk0@)xezlG`6+_B%9#;~XWVvbyb3J@JlUcJnmDs^ z3-TgpoF7`j0Od>xgZE~(J$F4$-lf`Clw=QgB|vj>;&}olv)jxoz&>#`IEC#@)li0? zAPi*(<8JC}ulULs!64*`=-Z~y%k<}(pJfsX4p-_Vhj*3+D$|rXfTJvYiTTwfGGxGk z7H~z~_fOZFp%>4p&Y^ts{ddm3$R(tucI-G^3&lusr?{lw%#^3ZbcP0Q-2MF%Nx3Vz zQs2J3UC3z{YEU+!XCRo+^CB>MQoytnO+3H zNr;r>dmb8~?9ZnDkVf=H;7s|ceDuux4n_Sm$(=;Vg2Jcof+26q&A)K`Qf;alV7&mF z#Z6nfM9ggVSJ`NAKDZO%sa$>M6tb0yR)m3qw3wUbpEWwYpB0}x*|Rf{PnX&8#r6L z@0|vbMqx(hy%T_Fxg74&aTu&=+PvyLBJKO031=H-9d>oPx*E63-xE^A}4Mv4iw5)>KJ= zt!-d)$Xl$6z*|6|4etoZkewTf{ z%h5o>FVS#VpqWsq3u{|kH)e2vyHiD=XL=>$^ftcjrrctKl22Y^3bp>isp9>-|Ds4pWSFb+H6_%t$k1AL`qLQ2L zDT7Qo13^{xd0XT=v1&|OyL|?|FjEKi%_Lm`JerDyT|i2)Wdi>Z-?R^LK%cGDfbfG? zN-whY`)(P@%ZSQB4-Z|3?LH@Z$N1dJF;g-SC}c`m>5MAPt21c~n=u+xc3h}0(=UuG z6u!@A#k}jq<0|tLe>?FM1O+RHNo<; znHxRc=vaOr&yrPAp1B*Y0T2o6kad`d^YML#PNalM66K+;WK>Y4S#~8Hi?+#P{xK6$ zowAm(W-rOQ+ZaY=<5v`Z%SJ2qaWj|}zMA=yeXMa}?)nSu*L7*uLTK1_XS^!3dUX#~BbfCh!)a|eqjKJn(Cb{T8;k)08(<5W+1 zqh8am^61@36YkIhifui{%{J zgb}-2f$$Bn6#kMKS%DP3?nU`CKFHWK)pXnfYFYNX3By%Df&xx{_bgF7t*Gu`>Q%>G zV#i#IAR}DPP%!KdLk5wZ+i@aS`i;~zP7_*i7^S(Q=l-z3XEA4TKC8gMiA2^1S{$#} zs+Nk2;QFL48m&KqKb_U8Df@`oPJtOOOflzYf$Sf(fj}Xmn?t;1Bru$DujxFd<2e-!4fZ2$Xi5{Dt zx){aL!;hCAgzWVse5n`k`Hz-th~mlpou2s~2*gJk^J{ByzjrT7C(T-E5@&j$f7w*B z5u!DCn6kE!r_bDjJFtJevi7OL9hNB_`&wu#>+nNJqF{4zTBB9&6FBGd5u3btEhE~H zs(6Zx7rkH!a6@lc1O8jT$@qq};M>k@lVxI?(-rC$% z-%fzY%3{+q5!~F1dIRZ%@3L?!3*u6>@K@S6g?B6(pJ?uv!fH=vJVcp2Y2|wm_8iyZ z_0uZJWp7sY4a~B9Q;@^5NmE)VDOCJCCEmEO8sms&$!9Y`G8L|Fq+?OC$C!|uuC3tZ zg9h|@>7PNV@k)6x8NX@M>GA+D+Iz;o&^fG}Q$c9q9#Ra9<$_$BNT50Y5r&|B-qwNR+|gZkpDe%D+aC|YRp zok;E;=;e<=8`aP6SsJeY9s}RzG5(RJAJ{E5Q_^~)VQMlUCF6FpO{_;se%|o23Ju%= zx-Px;&c#b&wt{!I`r6aDg-UWYj=ooKO$JcOP}8cn(~bo|MiT>@@R4g#dv1=*o&dDS z2VB;u|GghV5Bgj--i4(zh`4c1Zq;T4Mb*eBnVM~pPZyLtg{72+rm|t5>o!lX01+E6 z+8)Iw*?6p$p482O^?~@o3mBLI@)%4kaabtdnjI7e>X(b4Z9k+s&4PV?^;@;j!cnGB zkLtM{i;9{yZQHZ#U<9luucia%iL?9f>CAS<)-d-r0lm< znPw$~bBO1lukWw!%-+?qa%4@}8As_y;61 zJf_?wl&c!hIdiOxfwNLs4^h31*%N`0GoQX3t8c{8@zefLc6ie9i;hjR_d+{mXI}QZ z9oZwQfjdWQJU7($63&%QjSud#vZk#@aQX?lwCtsusLUA8ksOb`Iq2(H&NYWQDU8cv(VE|TlpEFSwE4}S_>f?a=SaBANYJ5uBL-a7`~!0K8mm8$L9S#?g~ zeN-Xul*|02lkP(dkyT}50bg+%XjAXs2t0lMLdL zx@K$u_3i9dCVXmCg)$dK4;WW$$B(?uXWA1?a8IC0k>M@|a)@qnD(5k1gxWilNP#<>{JeBnI zLdmLh1D_Z0mYx{x6#*|Bj$`q0uhGTqaq{x|DLB4VbU zbJ;Yz>13bBZ9>2%= zJf}D#mv}uQn8nLg1`+O)#l}K;kJcBNO9!Pu!^-04fmHurXXhQ&RI@dFkt!{sD7^?G zAW8s1I*}s90#XF&AYdrco74zMF9B)NI|x#wD=ieIcaRPN={0l+Dd)?*@AJItd+zm* zZ+%&_@=wm0GkecW&Yr!0v*(R!s>r3`_Vk|Ck>@3ATO(J4HI;O4A zpjWNr)5nNuujPk13ORQ3iwbt)IoR1G*iL^w{XJF-m$Gkob!5{@=GAR+Gpjl?)!_Os zN2QcDSobq|sR!Evsv4-_m@7L1D~#zAhHmPwO@|u&2uOo9mFQ{Qpl+H74YTSffV!SB zEoJ9nl2^lf-7i7tg7pzl&jaPQxL$6P7e8_=$&6Z(3BVJZ7$D~?Exz~ee;m*{a<`oD z%Hf_B#eFylji=d$$xXb_*=AE#fu`iJS<&3drNJ3OKlz83!YU_06x*as5&fncF4k+2 zCm`+>1AJ|5?HDscT)sYP%uA68FP|(N0F9^>tXK93@_$y7^uYRp3T?OAA5#DD`vwSG zq&;!c*d1Ht%_vkxn^SH1Y(m@Sr(-pM-FpLoFh__e(}YzfKF(^qN(E<|teM?|Qii_Y z+kyd1r%k^XRYaGJ)b3on1@|#dljWwnd}-6TuKZikIi=^BPJnP3PO%T zUn4cOo!Hczpl?weRQafI)$pZ?;V+Fbk^a1|K8a1U7yB*sP!u_Cf$( zslsVqR#xQCb?c&2vndfo=ga!AoJcjhu{6|&(dhxL@lkQ2Fh#t2MZkb|j6yCMemF8# z?_135{uGyNkK9DTlpBe=&6qD@j{>)JwZ&%JD6u>bEZCzoS{%PoKjh{&zc2GSTXOu> zciu}^2NJzSyKFiA>+uXtn{qAE@-2z&5U|Oo>HafI}ZT?vRJSf!$XjaY=z*cHr`@UM2Cod`poZ?&oZ%n4z3nUZUsm8 zfD=Aj#?pL@b@|y#S>?&a58ScKuRxAVl7%0`MKxtZ_ObHM@2z=V>j-?k+=n<%?W!(( zq1Uf5Aw)x`K@EOSzDU@m2U=A;L{GM71U@idi9aPdKaitcG)I6)67&T^-A+eJ*LTLn z2|2(l4Z4HjD%yv6!?Q zH15i)cz@Y2#E%Vv?^7*(HZ(-;Q`Z?k9KDCr`(@%31M<5w*DKO(E@L8eNVkogpI`6k znmbHhzhafN(DjWIcsstI5v}8g{&>WSWy5*`OWcJplkEim)Bv9kyc=5$IbS}wLfa(Z z_vFssx++d)8Z@`{n(lA3_vuNV@Ji42XqN9Gi}z_7Db? zr?D+nuymBO33=D>UboX7k^JU2G0Uwkv|Y3?c5`s{I|rK$S|rSYatz_oza^GY6Lav$ zQ(r}@+)spZgG2v;|ND+!GedS_uSIAXCn<9Cva)Hl`s*E-p$}v8hqeS^pX1Zr*X_6m zrI4M@mFGs}(c9#B3)c8!(;d=uVh4Q&Ah>G2y=}!c^y~ z?bUZl_#xUmu)K5C897^nML#NzQ(VXSRZ4#)u`3+pU$WL*X0QZ%y@~9_2-VQh>;ZdT zyd%DKUTve-msxIf;_O-i(uje6bsrO40ib4Ji-b1>&h9)w#4Rr{D;M(aIc~iG;KMKA zP4W-shK3=u%gYkcKlkHWe6$vo(}lqHt{vI=S&L>X(Fl?sZ_bK(lDa&)^J!h9( zw)gT2=39Hc5Pnz=_3a+;+?1T`VpakW*4i$=0$~wX!?WG|y7qlvLubbb9lDYQR`FlM z9<3Iw4Osf7-)bv{Lwh>wp%!x3jp6&O&>_eM*@P$^XdC%6@08XT-S;1M0umfF`<7`QaiE z+H^kwsCJjR@ur$-U2?F{!oS>G1h?(Ao<#0MGTjxjwhBo)=-EyMK{gdUc++nO_d?Q7 z7Q6C6XK(d897ho&uD6qqUO_Kq-j-<>oP%|5>}F&HR?0(jTx*5U$&VR?FBCZfIyyR< zqE*tYxAx3Dq#btZ<~J`$Oz40(zK^HMonkXwle^4D1#L zd>#lshY;R_^O}MjPWSZi^sVWpR4z?d|ElCcFdPcWqkipYuQ*}4PYO^kFJB?^mpaZ8 zfhBZhD`GC6?Zx8${Wy*;aIg2uTOwifVgi_~s3ksD>)yXA|IY#o*^hKV3WnjOB?fX{ zOhx4qQzR@>wftAX>;C}v&YB1kK==#JKqDHqK!uyi`vfWevj8YUKI{hLY|5(R>!CO7 zBFZV76920$HfMbmd3} zOMwpxg^%ZTX#kGrcz0jlXE5Gl&-@sT9Rz$H;p}(*tz>T@<3eR0Kprt*_i@u`ui9e= zG&~b%-efw#<1p#x_ZhyS#(sZTvw)LBPqZ zxcl~?u`YgBoIvBhd^r#dBL!;ESsKuB^fhe3FZAykJOp{3f zSwFj47Ft|YP}`;=KvjgTm_mrHAht^*vm|)30vN-XeiYQMcR&t=BS$@gHyac2AVmv5 zi=a&a7y1j>zCifYml8bD+*!sBD4pkJ$uQxCs3REGN}uOo zaOxG;T62p2$E*~HF21b7k(nLcS^+lQeDVCgJuDFmovz!L0?V=bt!vvzG1!gw@62&L z020qQUac+3WSw^5g3iYtJSdUKh&%ebtIOp5XLf_;6sahEq_?hj-`Ik%0VmtyzF{yt zb{a>b`F*|__b)w!E7-sqzvVC76Fdy?tE`-EGST8tCF+=j_RC{6776njs6KD1;3;-8 z1p?94n&#Apx3LW&%DR4TG{O0Nl~;$X=yp5#WGNf7gtt! z*-#^MSnDC;%RIf0mh`nGIzPk0Mvy{GB@V1!`?W@M818cj{!3LavjM773A;Hx%n4jy zMe<6NX)VUVJ2_FJWN0Keu+1!}Y-xB6KQOD^1n=g=#1BG9Nanu5h=7HDBh@Y_7W>!8 z_r*+Aa}r5yXDz_0O99TVOF^Y~&kw@W-j*&3l@x!`d-@c`MNn0B$(};c-8)u*0`Bp{ ziT#5ha*$30^#|8ue<|&p8R?2c#|EE@;uici?OxwxMM-mBWa0#2^TV%6@$8tnoC=zP zS_&(>|_m!NK z)6TWY+B3TsFwE&o;~dHSjq2Vl12N~Lhe+)C#;e4SRZ_BS(Rkyg@q9AJsN3bh#Y~9p zxAFc@1y(n<43O?cBz~`qUov^4_Qq@O7GWlg2+*^Jdd#nrfLq=bsSwoOu3jiPCj1Ea zdJ!;bY31M&di8tUi%H{2jQPg%+;#99a`+*A?#>z_4CYNAf}Y`Jj8 zyIZ;hxLn5(xU~EH``wBX-8_ryaVN0T9nuO0k*h*UK4W8<(7P|Vxh+a+ntG!u_3eEx zR+@BGQDvXYmxfAgZGS~FP|*Tmr*F)hVkh~Gb&I{dFMhQx1+dJw;aj%0_IMiZt)rjM zrwNmxUvZ61j88P~Tqy->iBAh3oR-KxSfv zO!RYnlD{~bA`S@2jTq1iNvOSN!J8k$tfAH>o~Zd{S#n^hj-L?W4I(J=g;>3b?#T~v z0fCzJ)f+PSk8b=UFAJn(WOP`zXE}8MdpQkv12`4WF>q)tgsoYp=sjlwW zMpRcnJuAH})qr}4qa0~p92Q!J_+wwad^s5>9MoK<4ZeBv8X9yQjhnPH+#6M>T^cJX zk1M@26hP}RI=6#gc6|GKbU)t&@O(;G!q$UCli#F#z#&{crQ!fj&odpU9%$qdsfB25 z&1XW?leHoMDBOE~#BA~0DS!bJUf%bquJ@&eBS+b)d@eTlUI%uF0s0Pi!cJCFn)~GW zLeuKT79pheu1@2`7_qk(q~o}gmFT6BDK}PA-}F1l(eiD2R|wkk?6~;WNB%{XNRWXo zYUd69%Wd`)QI{*?X8KyT>w1buUpz&&FNSGM^!hoDq$MPrTssgI9>&XJ#J~|MyuR(r z-I3T^Xnm~`_N%gHAbHqsO}(L^A@;_OtKL~{H=4NXm7k);;gXsK2MeNS8>Bd$srG#k z(v2)GX8JXi>s4Id5@3B4j^R4ZDPDCUL3~+f?t>Vyuq3JIvKc>oSkIG*_@XN}mZ~$X zPu4Qtq6VW(!B@7807Qqog?Ir zmHYlcUotofbZUw%4&T=+egK)o1vY0yqm&qZyW%^QVh>MUS z`Aur+rcQGN+Dn@z{$t3b=iUO(vQ?bp?9@!5pr@PEYI#XX2yNZnha{bw**|d=uejlY zi`>E3&Tc*=`4duFbDt%%VCTaR)HNy7UU)y`NdQMC%&&vz*T{56t;g6{wP3K{8xKO} z_w9AboFrNX>a>zn@0TW;0}=Gp_P&FiJjQS7N1E^B*OG@yRnN&Hj=IxHWDrk8M9qa1 z!`rdEypD(KpT|}byi>Uo4xmFdqrZH1rBooijtiRgs0~$RLrmfiG*}S)z+bH}iUzYp z#|-v^b-P}5b3gm~F+}pUX|LM%z~69s_xcL{oo#xS7`0>1%F6Jri00q!K}(NazsnYE zt3fQ-Hje7*Jj6T!B9!FXMa=fM+B|YbZP89%jm)pVLm)-B$Dl8EOk%6XCl-3n7G@TN zw?~E|cv-o=e(bd${dpM|v03$AB9*1OB7 z*KA^JpJYYd-lyu$DXDa$O5)?M=Qcjn&CK!TlEvMMX0aQeovdIV@ovxf;7(#+!DwNT zxkkh)F(AZi8D*v+_c5okzP>9<)(0Pmh!mZC9glagVX)}LPELoZRSK7#tw%_yAm2B;J{vxiH`YI=sj`aI_E{HkJn`J4tmSZ|6dqCQ|rdClcjC zICGr*gL`8eVtBJ1E@E=puWv-Y#TLQ|+0WCg446hJ&K;vproaBqyInLCE`qw@*Ew8DZHSP3V%YSQ# zCMPGhrv8@4Z4tf>IuagHaBg@ue;X~Twj8o!^KJY`=P!G2ni&Z$N!!V*Axo{pU!O>6 zuA}Uj*;v_yp<1#i3}Kza)#8y~5Vl?+0yci@uvBa64`f0(xLQhuTz#ura ze57g}+od%j`;ABBjUswy>={SjR8POrb3ZrbS^X#R|ux{_yB*o zCct}@3Tn#XnuX3U<8x={MsshZGJw5g(y}0pNF#1i(h;kNMyho011p>JqT>wf_o@P& z6hahzaT+o3jjyKTnyPkFAGOSGwDMHrK^(Fkh!45MzI?ppcVg)Un(CXY)5L&+0xR~R zj!-z89QAcR;2mim%Ql=3jw^_{W;K3YYe9nf=z>O|*hz3D7sBZJQ*>xP<3(H0NVI`{ z)57$^nidfww^WJWkIuII@Ia6FYgAUqH&0uq{GUeLYSMnCz3BMXUxe;6x9&%e)3fn5 zJP`}KKW;y-3$7o~-mo|9Cj^t=-oYZ7czg)b2MS@RwXg+PqNQ|{#)8=w28=AfXkpuVz+pWz zdS<3Vel(+=i(Pe2NP4_44{NrJ!eBw{j^ZwK*y!(%lBS1Hgza`%WYaI&D~ytQ4c>F> zp*5Y^OfmPy(!i>M=8kS}BJmToE&d*?2B96_r?9lAwPU2TSACG7_Yl_pvyD4bZP+&H z(@cVwZYJe%r`jkM8YPb(e>i>_kQ=chOS#y^+(er8CB2XCeyvVt`dp^>>zz~V6|Y+Z zD4wO|YBGcCK0EAe?8REYXW6UqLRdu$aUrM<70Z5-3ijT|KDPAtyVa1fXR(PT8rtMD+#dfgbrC>1v0-|)g2~2snN zz5Ki2jfcdn&(I)p9j)m9)rFp<3D6b9Z{a%@2NQw|1iE|M-z~CMW1$&{#q*m6SH{GFkF=y;=pax;#gdaDQ>e z%U=xVUw@d#B-kqrIel7fUpH8OZC`p<<3Q<{%9N2Ut-qu~NeM)L{6)|4ILGwk8xR6F zD8>K##qDG@x*v9Y_s?l_>|9&mbnzQ1Vd0RW?0i+~XL9RRh3YM2C)NbGLafS5tMhzEgAph}Vlp zP&mr^kw<*{87fST)w5Q(*`Y5I(%GqO9hNOEe%j*&Y#wP~y;PHgVjQXAhhOxJ6xDkP zdqL8VCm&fnqVMXeABk4HPD5}QXP=}k(vQ^jvH5D0@|GuqO^+Ig8RDD-gC$19F&8*# zm7p9fVFAT${{s2IX`6`H0Hr1lUv1I{DIIs9(Gfl&Q4!&+nU(L^9zG1ZjN;m@#`XT{ zmL0agXqrBgz?u7=Q}Zvr3QbKV8??55I}yW{U?lVIv$oAib0gPzn6Ei}U+I$ly*J}; z-r}A<+Y(=H^3Na~6T>le>NouUdDr6-k-aNF$Fd+3S5t_-#WDrJmh(mrZBLFjT?_5^ zxu_}gUoT%MV}imy4|*J&@{$9$uK##LF0rnRc}ds~E_rCh7_XR5(a3(IV&QAhd#mdQ z0QxsQ3R2FJSLh)P0ovEXNg z$O`Oz!*)`YS#H7mCU~0tTU>97E>Dc_1P#jce0`?aNql-O#4aJZZ}TmSu!Sg{izCx9 zV?}CIAZ7KWG3_#I7K=BVsbG`K=9*Kvjs8}KU);`DOLS-yMSgbIn?=|t~@Mi$p0 zd?+SPGhXsn>GrPyhFIqyG{;V;6`i>OwgN@q*lr_-O!(3w`bZ}vBgTA9r8@=K<_TL0 ziDS!>N1+%*0gPt=K#u>fwN9WQuE=b*1dF;r2JoSJtf6eSOHQ$~I&WD0LrdukC252h z@Px&u(eadcw|xVS*26#Nx<86$h_X={cY2i@ z*9RZW(wF-xs+IvXa=pI3@|Ud&w0`0C!r$g*W#U+*ru zQl{1zT>+5`t$Lp@*k=U)f-<&m0BA1ilGtTyugZ3y6A4#WWGJ)zzat9}xGZh06 zUy%&V@PVV?xGDS{f7rpZ8@dL~)Ra3A5i0C95m%a`whaJKj(-aR%YRP@OV@6W`HyES-kkSx!_Fl0~P*l5|c7@suZk#s%GnwxE5fhA632Xsz}kmv7=;pY!K;-Ef! z)^Gh2mztVa+_te#{n$ulr>0F`4{9|gHelEyZ=#!-416!WY;$lso{Y>bx8=uK2l1fW=j;<|KK?+7qqoVxIKdyL@D0#^WvEUx7uI zgxhAgqP^!T(cTRz8N%IhxiQ}Z@MUiU+hS@1GOGr%j|t&22kkbcKR zFO{JzuP$lW6PbnZAybuZ+#9p7H4b4~_O`B=QZ)HJivzZODQ{vDNtyX|NlsBeT0M3=%r-Ix>q7_}KlFnj!9pNNOeb{8pj*7sS>C$Jy6I4ws686H3VFu!-sz5|8Mtzug1NwtK?V^(V0zw}>T2;c431KlZp4ZQE-F>BYXY|o~ z8keybyKQ;ArQcko%3n%=XnV}CH}Br9FgcQ^B@Ji0+S5$&t!`48Q9(sM&(_-dHP*9G zc|`n2_OnZnQZ+rJzO(541DTWax5>{83Yt~Ss9o&BvZt>JuxfNbxjJH{lAjclgV=+~ zyzUOb2YMgFl2s4djr<<7k~NEcjID|c>kGg2R%zEs!!8!Zg`2x;Qy8FEscCe8FRx!n z4}rVwU_iBsp%cXF%=PR%$+khSd%&aWYwk^<@3 z*ZDp%T8N6I{hqP&@pIwdmXc*0q#M5-Dx#8H;O2fJg1eO)WzE+a>9yD(F57n;?zd{- zQ6Mo>Tfe>wcfLI^kI3qV33Z$6C~>Wnr`5U~lCNHRXvJ=E!a~_%Y~VJikXA+8MKE#5 zGlFRM20qZW#2p+6DL9Cz)f_!tb_|%@Xl9_B(Mm7mSgL(>3`sX!WaXad*(fTVU0?=B zYj0Ni2}=4E=Y5HUL46)R!gESdq=XJZ$}57!Rsz(0x@56_kBrgc+| zqvX#)DU-*E7_KSiLniD871iHIDwzS~Or8t*r4Ni_t{NAP2`cib1F~*p7{8a7g0ymW z*>*1}p81Q$RG&L#o8v}~!9vh1*?89;L}mCD2QsEaUK@|XDYPMef77BXe+9W-&245; zKh~$@V>{@BaOPC$evV8qod>Kx5T^J|H-x=g45$41`?2h?Nzy4{NZ!e%85xPxxEA&y zdi4B--Y6D$j??%n*5ta(Uc>^8PWcAfo-QL-5@E7Wbb z?FO~uGvawe-6u*edK!?s!}3aqLRf>3b|PEV0G5xH*9^QCu(5hRpq2@tW{;V z17RpvS1wL+R8NC6U=I@+B51ZSYtMUYcd4V4wS=ykOH_Om4hZ9ug9fo0_o!{EB_|%d zL%?R&tVJ_fK*Ydcg2TgL9qUp^(VUO|bq`sysrO`G*&9&r*&(O2be{<(XBAQC%*K(w zwzwm(3yE7x<;uIxU#N=kJG!_JudfHBSZdO(UPP@0Sx8QUeDl-f5>scqGOp3G%e(cJ zL$oTt^Us|4mltHDj9?y!N^Maad6f9#ujORZ&!0`$v(YFWCvY!h62%-`&^akJR0;}w znc?JM%UGNg%6*}?0Fh`tuK&8r9Q)sB7%-ZhXRs#cJv+lZ}y%W%%~R zKmAcqsCziOMd*m1aFH zNkw*suDJk{{RnSXv7b+oq~cD~BrdM(?$sI3JH!U$At{+V19X=--3rXRM{|!D+|kx| z$i2T--HaxU3pjMJNy*}Jx}j+`s5;Cf+R))6nSA@hz)9{loWe^gX&}TsH3PvB2hcF2 zp-r5&S~V#zI_6%TrY>*^b>9adp~C4;R2l|@@Uc9H(x;{>rvh^{i`dZRYZ)5{EE{A_ zta%Cd-fm62z3BOH{;bO;gP)xIT6$h$Vr_XS1#{2Cw8K2)f7-6%{+fc-a@}yO_M`|? zbDi9PN6thj(uMJamDQ!V>c!=3Urcsb`82bXk+sRH&$4-G+xuT^hVIZYw&iJ1^Zrs^ z;?yNh(jJeV$Hz<-GSH~Ytfh4+^&{oJ-N-7@IZfPWS77L@${CB_4>TD zv7MI4C~wK+M#mwC1Ip4m%2rv4FLQ>m&YqMvJH<6xapMdHd>>xE{@n40x3R4Q4adMs z6L#gW>zU2$@G1=dwl74aG}X|+*qi;dYhq{CMn0et5hKo#H^KyFoqE?C$9^fz?@-Wuh)} zI+-x`jUFb=tp=NJRl;o)DLMBl6O_TBM6)^9y46^2{%CZdI;r5WS~!=u9N{D@;fNzu!_8k@QS zYqgz)51|{v_H-4i9}zx{J{Kce#ZIgvBCLsg4CahWBmPeKTh(uZ`bb8l6dW8t`j?CN zHW+BGwZ%7t%ne`ZQDt080`@l^3M4P2ym{rk>^#|hO#r@&-KqKHxy3S%4WP-hmS~r* zEYisrDaZEoUY7{MM$%ZcA90|P-MZyzb6OUD!$0}K?AW~+y1G)^DC!3-hwJ>YFE{Qz zu9+KT*e=SbF6@))mAX1mFSe51mvs8$XtH-=$n?5(XYvp})%$Rx$(f=JP2pvk;ls$? z8T8!=Mr{C4F@V4GLHhQ;duiM(n7R_K3~L4YtBzljz}n))89j?PlYj|{+2u)+)P_V| zrKHKCYRbdEc--aFs=Ew*9iVK?x+VaZ8==Az+b<}`pY<7?*!i!rO!fqlC^35 zF5TbuPOA3_?35<@I@@$_06gZmpt~fwoD_Bo8gQq=$Eo+p?nkbxHmp|ui$z@c9V}H_ zSMZz1=T9$)*l{F0*;jp)P+0Zt;NKi6NL)EiCDcwjD}UBpL*t!kHRP8jSy`!>ykcT z`ki?TOs@?4w!XLL&xMzbA0hG=w8WjXaAZXcsqV={JiU#g$Uk* z$@%V+H0%LMM-YnkYkA007*6ow`d<_aGSoDmgXSX;iFSC`(6Lx!PJxFncI3fRt6d9i z`t?%~c2V5Nyyt;{;`xgmx|d+JBFQll_}9@PpFP)esoZp3tCwP|evj#yt%N!BCh?!q z9n&FU{GISSE(jK+vNIrhA+TN=M7Q*}N1Xu+aQaWUc301~WlXT(y99xU;Wk8pSqvP- zwTj{)Cl+yo!`Kng-Ga$()eV9Lh9KmWPgL?ElFH|f=4hhtQt6e_B82|QzIDD7e~YPJ zLsU0*@vriwT{#ppMyvUb$5d350nQkB3qK#?D*i7iecJ%k62pzxlf3hs-Fn090&jp6 z6Sx0Fll~1W!5;W)o+rK=*s{?-4VFo{FR{A&=*oZNNiB<6kFmL9Ta&m>u3%YKS>RRG z!v8+(Z%*Q0ZbnGZ`C~N9MDiQOTlIP}}_&) z=i<2MHTF8e|DwtWUHAV5mbH^-lIv?;j4}K_pk+!x#s3pp_N%yT`9C4Ge*;59m;E)> z4P`@%T46UxG_x=JT@Cj8dyVmr8vt-8xc6*Kp?3`Swq$zY@*nj==rK2`cd;~nwwbt1 zH6pYO=#L`>Che~|0f%LOmQ`haHySFRN&k0G{iFM^)uEcXGJ=J(gU_HNXV%4WsC1eY~A#`(uF>{>Lc{Y#&5cAwH|0FyCfASL?X)doRFR7+d^&^N+|M;biYzqc?uB9OyG6uS23g zU-Jf=tNk1pBfGZ3?1ZOvmCq?B|D(K!tBA0UjUtIlhx3GpVVh0IpC_izx&F|tAqR3# z1IKfYM(phELQ;x9O}Z>1Y_7u2MLr7&nsUbC=MH2nQvJVxN<#Mmj-6mi#5L4aPlF`C zTN-bu)V-u%{87(PI>biJ#R(_hO658_%PVucUOoo&XPG^)xmbvF0jF%Ytmql?M;r;M z`qMu?9Q6Yn;X|}T+#lb6&gmRRD(VW-S)jl4M+H@fm?n^<1{<~BK=<$?hAv+HvBsz+ zhE>$1b)2Z`DG>=;?zn}1ApigX literal 0 HcmV?d00001 diff --git a/assets/images/help/repository/actions-secrets-tab.png b/assets/images/help/repository/actions-secrets-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..4521b9711fde850528eec5a3be5e5c88804bf34f GIT binary patch literal 52597 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 LicF2v`{4frz;a=6 literal 0 HcmV?d00001 diff --git a/assets/images/help/repository/actions-variables-tab.png b/assets/images/help/repository/actions-variables-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..70c9771ad2fe91f05e5436a7c66c5397219bbdef GIT binary patch literal 48257 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 sA~=>q!GHR%rnUdidW7fA*&E+W-In literal 0 HcmV?d00001 diff --git a/content/actions/creating-actions/dockerfile-support-for-github-actions.md b/content/actions/creating-actions/dockerfile-support-for-github-actions.md index 911d9d9075..43923af295 100644 --- a/content/actions/creating-actions/dockerfile-support-for-github-actions.md +++ b/content/actions/creating-actions/dockerfile-support-for-github-actions.md @@ -25,7 +25,7 @@ Some Docker instructions interact with GitHub Actions, and an action's metadata ### USER -Docker actions must be run by the default Docker user (root). Do not use the `USER` instruction in your `Dockerfile`, because you won't be able to access the `GITHUB_WORKSPACE`. For more information, see "[Using environment variables](/actions/configuring-and-managing-workflows/using-environment-variables)" and [USER reference](https://docs.docker.com/engine/reference/builder/#user) in the Docker documentation. +Docker actions must be run by the default Docker user (root). Do not use the `USER` instruction in your `Dockerfile`, because you won't be able to access the `GITHUB_WORKSPACE`. For more information, see "[Variables](/actions/learn-github-actions/variables#default-environment-variables)" and [USER reference](https://docs.docker.com/engine/reference/builder/#user) in the Docker documentation. ### FROM @@ -39,7 +39,7 @@ These are some best practices when setting the `FROM` argument: ### WORKDIR -{% data variables.product.product_name %} sets the working directory path in the `GITHUB_WORKSPACE` environment variable. It's recommended to not use the `WORKDIR` instruction in your `Dockerfile`. Before the action executes, {% data variables.product.product_name %} will mount the `GITHUB_WORKSPACE` directory on top of anything that was at that location in the Docker image and set `GITHUB_WORKSPACE` as the working directory. For more information, see "[Using environment variables](/actions/configuring-and-managing-workflows/using-environment-variables)" and the [WORKDIR reference](https://docs.docker.com/engine/reference/builder/#workdir) in the Docker documentation. +{% data variables.product.product_name %} sets the working directory path in the `GITHUB_WORKSPACE` environment variable. It's recommended to not use the `WORKDIR` instruction in your `Dockerfile`. Before the action executes, {% data variables.product.product_name %} will mount the `GITHUB_WORKSPACE` directory on top of anything that was at that location in the Docker image and set `GITHUB_WORKSPACE` as the working directory. For more information, see "[Variables](/actions/learn-github-actions/variables#default-environment-variables)" and the [WORKDIR reference](https://docs.docker.com/engine/reference/builder/#workdir) in the Docker documentation. ### ENTRYPOINT diff --git a/content/actions/hosting-your-own-runners/running-scripts-before-or-after-a-job.md b/content/actions/hosting-your-own-runners/running-scripts-before-or-after-a-job.md index ec7997a3c2..c851924148 100644 --- a/content/actions/hosting-your-own-runners/running-scripts-before-or-after-a-job.md +++ b/content/actions/hosting-your-own-runners/running-scripts-before-or-after-a-job.md @@ -29,7 +29,7 @@ The following scripting languages are supported: Your custom scripts can use the following features: -- **Environment variables**: Scripts have access to the default environment variables. The full webhook event payload can be found in `GITHUB_EVENT_PATH`. For more information, see "[Environment variables](/actions/learn-github-actions/environment-variables#default-environment-variables)." +- **Variables**: Scripts have access to the default variables. The full webhook event payload can be found in `GITHUB_EVENT_PATH`. For more information, see "[Variables](/actions/learn-github-actions/variables#default-environment-variables)." - **Workflow commands**: Scripts can use workflow commands. For more information, see ["Workflow commands for {% data variables.product.prodname_actions %}"](/actions/using-workflows/workflow-commands-for-github-actions){% ifversion actions-save-state-set-output-envs %}{% else %}, with the exception of `save-state` and `set-output`, which are not supported by these scripts{% endif %}. Scripts can also use environment files. For more information, see [Environment files](/actions/using-workflows/workflow-commands-for-github-actions#environment-files). {% note %} diff --git a/content/actions/index.md b/content/actions/index.md index d21e123c04..c2de1f027c 100644 --- a/content/actions/index.md +++ b/content/actions/index.md @@ -24,7 +24,7 @@ featuredLinks: - /actions/learn-github-actions/events-that-trigger-workflows - /actions/learn-github-actions/contexts - /actions/learn-github-actions/expressions - - /actions/learn-github-actions/environment-variables + - /actions/learn-github-actions/variables - /actions/security-guides/encrypted-secrets changelog: label: actions diff --git a/content/actions/learn-github-actions/contexts.md b/content/actions/learn-github-actions/contexts.md index 9217298a2a..74a76748e3 100644 --- a/content/actions/learn-github-actions/contexts.md +++ b/content/actions/learn-github-actions/contexts.md @@ -21,7 +21,7 @@ miniTocMaxHeadingLevel: 3 ## About contexts -Contexts are a way to access information about workflow runs, runner environments, jobs, and steps. Each context is an object that contains properties, which can be strings or other objects. +{% data reusables.actions.actions-contexts-about-description %} Each context is an object that contains properties, which can be strings or other objects. {% data reusables.actions.context-contents %} For example, the `matrix` context is only populated for jobs in a [matrix](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix). @@ -36,7 +36,9 @@ You can access contexts using the expression syntax. For more information, see " | Context name | Type | Description | |---------------|------|-------------| | `github` | `object` | Information about the workflow run. For more information, see [`github` context](#github-context). | -| `env` | `object` | Contains environment variables set in a workflow, job, or step. For more information, see [`env` context](#env-context). | +| `env` | `object` | Contains variables set in a workflow, job, or step. For more information, see [`env` context](#env-context). | +{%- ifversion actions-configuration-variables %} +| `vars` | `object` | Contains variables set at the repository, organization, or environment levels. For more information, see [`vars` context](#vars-context). |{% endif %} | `job` | `object` | Information about the currently running job. For more information, see [`job` context](#job-context). | {%- ifversion fpt or ghes > 3.3 or ghae > 3.3 or ghec %} | `jobs` | `object` | For reusable workflows only, contains outputs of jobs from the reusable workflow. For more information, see [`jobs` context](#jobs-context). |{% endif %} @@ -75,40 +77,40 @@ The following table indicates where each context and special function can be use | Workflow key | Context | Special functions | | ---- | ------- | ----------------- | {%- ifversion actions-run-name %} -| run-name | github, inputs | | +| run-name | github, inputs{% ifversion actions-configuration-variables %}, vars{% endif %} | | {%- endif %} -| concurrency | github, inputs | | -| env | github, secrets, inputs | | -| jobs.<job_id>.concurrency | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.container | github, needs, strategy, matrix, env, secrets, inputs | | -| jobs.<job_id>.container.credentials | github, needs, strategy, matrix, env, secrets, inputs | | -| jobs.<job_id>.container.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets, inputs | | -| jobs.<job_id>.continue-on-error | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.defaults.run | github, needs, strategy, matrix, env, inputs | | -| jobs.<job_id>.env | github, needs, strategy, matrix, secrets, inputs | | -| jobs.<job_id>.environment | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.environment.url | github, needs, strategy, matrix, job, runner, env, steps, inputs | | -| jobs.<job_id>.if | github, needs, inputs | always, cancelled, success, failure | -| jobs.<job_id>.name | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.outputs.<output_id> | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | | -| jobs.<job_id>.runs-on | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.secrets.<secrets_id> | github, needs,{% ifversion actions-reusable-workflow-matrix %} strategy, matrix,{% endif %} secrets{% ifversion actions-unified-inputs %}, inputs{% endif %} | | -| jobs.<job_id>.services | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.services.<service_id>.credentials | github, needs, strategy, matrix, env, secrets, inputs | | -| jobs.<job_id>.services.<service_id>.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets, inputs | | -| jobs.<job_id>.steps.continue-on-error | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.steps.env | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.steps.if | github, needs, strategy, matrix, job, runner, env, steps, inputs | always, cancelled, success, failure, hashFiles | -| jobs.<job_id>.steps.name | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.steps.run | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.steps.timeout-minutes | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.steps.with | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.steps.working-directory | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | -| jobs.<job_id>.strategy | github, needs, inputs | | -| jobs.<job_id>.timeout-minutes | github, needs, strategy, matrix, inputs | | -| jobs.<job_id>.with.<with_id> | github, needs{% ifversion actions-reusable-workflow-matrix %}, strategy, matrix{% endif %}{% ifversion actions-unified-inputs %}, inputs{% endif %} | | -| on.workflow_call.inputs.<inputs_id>.default | github{% ifversion actions-unified-inputs %}, inputs{% endif %} | | -| on.workflow_call.outputs.<output_id>.value | github, jobs, inputs | | +| concurrency | github, inputs{% ifversion actions-configuration-variables %}, vars{% endif %} | | +| env | github, secrets, inputs{% ifversion actions-configuration-variables %}, vars{% endif %} | | +| jobs.<job_id>.concurrency | github, needs, strategy, matrix, inputs{% ifversion actions-configuration-variables %}, vars{% endif %} | | +| jobs.<job_id>.container | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, inputs | | +| jobs.<job_id>.container.credentials | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, inputs | | +| jobs.<job_id>.container.env.<env_id> | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, inputs | | +| jobs.<job_id>.continue-on-error | github, needs, strategy, {% ifversion actions-configuration-variables %}vars, {% endif %}matrix, inputs | | +| jobs.<job_id>.defaults.run | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.env | github, needs, strategy, matrix, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, inputs | | +| jobs.<job_id>.environment | github, needs, strategy, matrix, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.environment.url | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}steps, inputs | | +| jobs.<job_id>.if | github, needs, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | always, cancelled, success, failure | +| jobs.<job_id>.name | github, needs, strategy, matrix, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.outputs.<output_id> | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | | +| jobs.<job_id>.runs-on | github, needs, strategy, matrix, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.secrets.<secrets_id> | github, needs,{% ifversion actions-reusable-workflow-matrix %} strategy, matrix,{% endif %} secrets{% ifversion actions-unified-inputs %}, inputs{% endif %}{% ifversion actions-configuration-variables %}, vars{% endif %} | | +| jobs.<job_id>.services | github, needs, strategy, matrix, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.services.<service_id>.credentials | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, inputs | | +| jobs.<job_id>.services.<service_id>.env.<env_id> | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, inputs | | +| jobs.<job_id>.steps.continue-on-error | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.steps.env | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.steps.if | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}steps, inputs | always, cancelled, success, failure, hashFiles | +| jobs.<job_id>.steps.name | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.steps.run | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.steps.timeout-minutes | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.steps.with | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.steps.working-directory | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps, inputs | hashFiles | +| jobs.<job_id>.strategy | github, needs, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.timeout-minutes | github, needs, strategy, matrix, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | +| jobs.<job_id>.with.<with_id> | github, needs{% ifversion actions-reusable-workflow-matrix %}, strategy, matrix{% endif %}{% ifversion actions-unified-inputs %}, inputs{% endif %}{% ifversion actions-configuration-variables %}, vars{% endif %} | | +| on.workflow_call.inputs.<inputs_id>.default | github{% ifversion actions-unified-inputs %}, inputs{% endif %}{% ifversion actions-configuration-variables %}, vars{% endif %} | | +| on.workflow_call.outputs.<output_id>.value | github, jobs, {% ifversion actions-configuration-variables %}vars, {% endif %}inputs | | {% else %} | Path | Context | Special functions | | ---- | ------- | ----------------- | @@ -116,28 +118,28 @@ The following table indicates where each context and special function can be use | env | github, secrets | | | jobs.<job_id>.concurrency | github, needs, strategy, matrix | | | jobs.<job_id>.container | github, needs, strategy, matrix | | -| jobs.<job_id>.container.credentials | github, needs, strategy, matrix, env, secrets | | -| jobs.<job_id>.container.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets | | +| jobs.<job_id>.container.credentials | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets | | +| jobs.<job_id>.container.env.<env_id> | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets | | | jobs.<job_id>.continue-on-error | github, needs, strategy, matrix | | -| jobs.<job_id>.defaults.run | github, needs, strategy, matrix, env | | +| jobs.<job_id>.defaults.run | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %} | | | jobs.<job_id>.env | github, needs, strategy, matrix, secrets | | | jobs.<job_id>.environment | github, needs, strategy, matrix | | -| jobs.<job_id>.environment.url | github, needs, strategy, matrix, job, runner, env, steps | | +| jobs.<job_id>.environment.url | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}steps | | | jobs.<job_id>.if | github, needs | always, cancelled, success, failure | | jobs.<job_id>.name | github, needs, strategy, matrix | | -| jobs.<job_id>.outputs.<output_id> | github, needs, strategy, matrix, job, runner, env, secrets, steps | | +| jobs.<job_id>.outputs.<output_id> | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | | | jobs.<job_id>.runs-on | github, needs, strategy, matrix | | | jobs.<job_id>.services | github, needs, strategy, matrix | | -| jobs.<job_id>.services.<service_id>.credentials | github, needs, strategy, matrix, env, secrets | | -| jobs.<job_id>.services.<service_id>.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets | | -| jobs.<job_id>.steps.continue-on-error | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | -| jobs.<job_id>.steps.env | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | -| jobs.<job_id>.steps.if | github, needs, strategy, matrix, job, runner, env, steps | always, cancelled, success, failure, hashFiles | -| jobs.<job_id>.steps.name | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | -| jobs.<job_id>.steps.run | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | -| jobs.<job_id>.steps.timeout-minutes | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | -| jobs.<job_id>.steps.with | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | -| jobs.<job_id>.steps.working-directory | github, needs, strategy, matrix, job, runner, env, secrets, steps | hashFiles | +| jobs.<job_id>.services.<service_id>.credentials | github, needs, strategy, matrix, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets | | +| jobs.<job_id>.services.<service_id>.env.<env_id> | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets | | +| jobs.<job_id>.steps.continue-on-error | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | +| jobs.<job_id>.steps.env | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | +| jobs.<job_id>.steps.if | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}steps | always, cancelled, success, failure, hashFiles | +| jobs.<job_id>.steps.name | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | +| jobs.<job_id>.steps.run | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | +| jobs.<job_id>.steps.timeout-minutes | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | +| jobs.<job_id>.steps.with | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | +| jobs.<job_id>.steps.working-directory | github, needs, strategy, matrix, job, runner, env, {% ifversion actions-configuration-variables %}vars, {% endif %}secrets, steps | hashFiles | | jobs.<job_id>.strategy | github, needs | | | jobs.<job_id>.timeout-minutes | github, needs, strategy, matrix | | {% endif %} @@ -295,11 +297,11 @@ jobs: ## `env` context -The `env` context contains environment variables that have been set in a workflow, job, or step. For more information about setting environment variables in your workflow, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#env)." +The `env` context contains variables that have been set in a workflow, job, or step. For more information about setting variables in your workflow, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#env)." -The `env` context syntax allows you to use the value of an environment variable in your workflow file. You can use the `env` context in the value of any key in a step except for the `id` and `uses` keys. For more information on the step syntax, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idsteps)." +The `env` context syntax allows you to use the value of a variable in your workflow file. You can use the `env` context in the value of any key in a step except for the `id` and `uses` keys. For more information on the step syntax, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idsteps)." -If you want to use the value of an environment variable inside a runner, use the runner operating system's normal method for reading environment variables. +If you want to use the value of a variable inside a runner, use the runner operating system's normal method for reading environment variables. | Property name | Type | Description | |---------------|------|-------------| @@ -308,7 +310,7 @@ If you want to use the value of an environment variable inside a runner, use the ### Example contents of the `env` context -The contents of the `env` context is a mapping of environment variable names to their values. The context's contents can change depending on where it is used in the workflow run. +The contents of the `env` context is a mapping of variable names to their values. The context's contents can change depending on where it is used in the workflow run. ```json { @@ -348,6 +350,32 @@ jobs: ``` {% endraw %} +{% ifversion actions-configuration-variables %} + +## `vars` context + +{% data reusables.actions.configuration-variables-beta-note %} + +The `vars` context contains custom configuration variables set at the organization, repository, and environment levels. For more information about defining configuration variables for use in multiple workflows, see "[Variables](/actions/learn-github-actions/variables#defining-variables-for-multiple-workflows)". + +### Example contents of the `vars` context + +The contents of the `vars` context is a mapping of configuration variable names to their values. + +```json +{ + "mascot": "Mona" +} +``` + +### Example usage of the `vars` context + +This example workflow shows how configuration variables set at the repository, environment, or organization levels are automatically available using the `vars` context. + +{% data reusables.actions.actions-vars-context-example-usage %} + +{% endif %} + ## `job` context The `job` context contains information about the currently running job. diff --git a/content/actions/learn-github-actions/environment-variables.md b/content/actions/learn-github-actions/environment-variables.md deleted file mode 100644 index c28d08e7ee..0000000000 --- a/content/actions/learn-github-actions/environment-variables.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Environment variables -intro: '{% data variables.product.prodname_dotcom %} sets default environment variables for each {% data variables.product.prodname_actions %} workflow run. You can also set custom environment variables in your workflow file.' -redirect_from: - - /github/automating-your-workflow-with-github-actions/using-environment-variables - - /actions/automating-your-workflow-with-github-actions/using-environment-variables - - /actions/configuring-and-managing-workflows/using-environment-variables - - /actions/reference/environment-variables -versions: - fpt: '*' - ghes: '*' - ghae: '*' - ghec: '*' ---- - -{% data reusables.actions.enterprise-beta %} -{% data reusables.actions.enterprise-github-hosted-runners %} - -## About environment variables - -You can use environment variables to store information that you want to reference in your workflow. You reference environment variables within a workflow step or an action, and the variables are interpolated on the runner machine that runs your workflow. Commands that run in actions or workflow steps can create, read, and modify environment variables. - -You can set your own custom environment variables, you can use the default environment variables that {% data variables.product.prodname_dotcom %} sets automatically, and you can also use any other environment variables that are set in the working environment on the runner. Environment variables are case-sensitive. - -To set a custom environment variable, you must define it in the workflow file. The scope of a custom environment variable is limited to the element in which it is defined. You can define environment variables that are scoped for: - -* The entire workflow, by using [`env`](/actions/using-workflows/workflow-syntax-for-github-actions#env) at the top level of the workflow file. -* The contents of a job within a workflow, by using [`jobs..env`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenv). -* A specific step within a job, by using [`jobs..steps[*].env`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsenv). - -{% raw %} -```yaml -name: Greeting on variable day - -on: - workflow_dispatch - -env: - DAY_OF_WEEK: Monday - -jobs: - greeting_job: - runs-on: ubuntu-latest - env: - Greeting: Hello - steps: - - name: "Say Hello Mona it's Monday" - run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" - env: - First_Name: Mona -``` -{% endraw %} - -The example above shows three custom environment variables being used in an `echo` command: `$DAY_OF_WEEK`, `$Greeting`, and `$First_Name`. The values for these environment variables are set, and scoped, at the workflow, job, and step level respectively. - -Because environment variable interpolation is done after a workflow job is sent to a runner machine, you must use the appropriate syntax for the shell that's used on the runner. In this example, the workflow specifies `ubuntu-latest`. By default, Linux runners use the bash shell, so you must use the syntax `$NAME`. If the workflow specified a Windows runner, you would use the syntax for PowerShell, `$env:NAME`. For more information about shells, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsshell)." - -{% note %} - -**Note**: You can list the entire set of environment variables that are available to a workflow step by using `run: env` in a step and then examining the output for the step. - -{% endnote %} - -## Using contexts to access environment variable values - -In addition to environment variables, {% data variables.product.prodname_actions %} also allows you to set and read values using contexts. Environment variables and contexts are intended for use at different points in the workflow. - -Environment variables are always interpolated on the virtual machine runner. However, parts of a workflow are processed by {% data variables.product.prodname_actions %} and are not sent to the runner. You cannot use environment variables in these parts of a workflow file. Instead, you can use contexts. For example, an `if` conditional, which determines whether a job or step is sent to the runner, is always processed by {% data variables.product.prodname_actions %}. You can use a context in an `if` conditional statement to access the value of an environment variable. - -{% raw %} -```yaml -env: - DAY_OF_WEEK: Monday - -jobs: - greeting_job: - runs-on: ubuntu-latest - env: - Greeting: Hello - steps: - - name: "Say Hello Mona it's Monday" - if: ${{ env.DAY_OF_WEEK == 'Monday' }} - run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" - env: - First_Name: Mona -``` -{% endraw %} - -In this modification of the first example, we've introduced an `if` conditional. The workflow step is now only run if `DAYS_OF_WEEK` is set to "Monday". We access this value from the `if` conditional statement by using the [`env` context](/actions/learn-github-actions/contexts#env-context). - -{% note %} - -**Note**: Contexts are usually denoted using the dollar sign and curly braces, as {% raw %}`${{ context.property }}`{% endraw %}. In an `if` conditional, the {% raw %}`${{` and `}}`{% endraw %} are optional, but if you use them they must enclose the entire comparison statement, as shown above. - -{% endnote %} - -You will commonly use either the `env` or `github` context to access environment variable values in parts of the workflow that are processed before jobs are sent to runners. - - -| Context | Use case | Example | -| --- | --- | --- | -| `env` | Reference custom environment variables defined in the workflow. | {% raw %}`${{ env.MY_VARIABLE }}`{% endraw %} | -| `github` | Reference information about the workflow run and the event that triggered the run. | {% raw %}`${{ github.repository }}`{% endraw %} | - - - -There are many other contexts that you can use for a variety of purposes in your workflows. For more information, see "[Contexts](/actions/learn-github-actions/contexts)." For details of where you can use specific contexts within a workflow, see "[Context availability](/actions/learn-github-actions/contexts#context-availability)." - -### Other types of variables - -In most places in a workflow, the only types of variables that you can use are either environment variables, such as `$MY_VARIABLE`, or the equivalent context property, such as {% raw %}`${{ env.MY_VARIABLE }}`{% endraw %}. Exceptions are: - -* Inputs for the `workflow_call` and `workflow_dispatch` events, which allow you to pass values to a workflow. For more information, see [`on.workflow_call.inputs`](/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_callinputs) and [`on.workflow_dispatch.inputs`](/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_dispatchinputs). -* Job outputs, which allow you to pass values between jobs in a workflow. For more information, see [`jobs..outputs`](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idoutputs). -* The variables in a format expression, which allow you to replace parts of a string. For more information, see [`format`](/actions/learn-github-actions/expressions#format). - -## Naming conventions for environment variables - -When you set a custom environment variable, you cannot use any of the default environment variable names. For a complete list of these, see "[Default environment variables](#default-environment-variables)" below. If you attempt to override the value of one of these default environment variables, the assignment is ignored. - -Any new environment variables you set that point to a location on the filesystem should have a `_PATH` suffix. The `GITHUB_ENV` and `GITHUB_WORKSPACE` default environment variables are exceptions to this convention. - -## Default environment variables - -The default environment variables that {% data variables.product.prodname_dotcom %} sets are available to every step in a workflow. - -We strongly recommend that actions use environment variables to access the filesystem rather than using hardcoded file paths. {% data variables.product.prodname_dotcom %} sets environment variables for actions to use in all runner environments. - -| Environment variable | Description | -| ---------------------|------------ | -| `CI` | Always set to `true`. | -| `GITHUB_ACTION` | The name of the action currently running, or the [`id`](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsid) of a step. For example, for an action, `__repo-owner_name-of-action-repo`.

{% data variables.product.prodname_dotcom %} removes special characters, and uses the name `__run` when the current step runs a script without an `id`. If you use the same script or action more than once in the same job, the name will include a suffix that consists of the sequence number preceded by an underscore. For example, the first script you run will have the name `__run`, and the second script will be named `__run_2`. Similarly, the second invocation of `actions/checkout` will be `actionscheckout2`. | -| `GITHUB_ACTION_PATH` | The path where an action is located. This property is only supported in composite actions. You can use this path to access files located in the same repository as the action. For example, `/home/runner/work/_actions/repo-owner/name-of-action-repo/v1`. | -| `GITHUB_ACTION_REPOSITORY` | For a step executing an action, this is the owner and repository name of the action. For example, `actions/checkout`. | -| `GITHUB_ACTIONS` | Always set to `true` when {% data variables.product.prodname_actions %} is running the workflow. You can use this variable to differentiate when tests are being run locally or by {% data variables.product.prodname_actions %}. -| `GITHUB_ACTOR` | The name of the person or app that initiated the workflow. For example, `octocat`. | -| `GITHUB_API_URL` | Returns the API URL. For example: `{% data variables.product.api_url_code %}`. -| `GITHUB_BASE_REF` | The name of the base ref or target branch of the pull request in a workflow run. This is only set when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. For example, `main`. | -| `GITHUB_ENV` | The path on the runner to the file that sets environment variables from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/runner/work/_temp/_runner_file_commands/set_env_87406d6e-4979-4d42-98e1-3dab1f48b13a`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable)." | -| `GITHUB_EVENT_NAME` | The name of the event that triggered the workflow. For example, `workflow_dispatch`. | -| `GITHUB_EVENT_PATH` | The path to the file on the runner that contains the full event webhook payload. For example, `/github/workflow/event.json`. | -| `GITHUB_GRAPHQL_URL` | Returns the GraphQL API URL. For example: `{% data variables.product.graphql_url_code %}`. -| `GITHUB_HEAD_REF` | The head ref or source branch of the pull request in a workflow run. This property is only set when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. For example, `feature-branch-1`. | -| `GITHUB_JOB` | The [job_id](/actions/reference/workflow-syntax-for-github-actions#jobsjob_id) of the current job. For example, `greeting_job`. | -| `GITHUB_PATH` | The path on the runner to the file that sets system `PATH` variables from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/runner/work/_temp/_runner_file_commands/add_path_899b9445-ad4a-400c-aa89-249f18632cf5`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path)." | -| `GITHUB_REF` | {% data reusables.actions.ref-description %} | -{%- ifversion fpt or ghec or ghes > 3.3 or ghae > 3.3 %} -| `GITHUB_REF_NAME` | {% data reusables.actions.ref_name-description %} | -| `GITHUB_REF_PROTECTED` | {% data reusables.actions.ref_protected-description %} | -| `GITHUB_REF_TYPE` | {% data reusables.actions.ref_type-description %} | -{%- endif %} -| `GITHUB_REPOSITORY` | The owner and repository name. For example, `octocat/Hello-World`. | -| `GITHUB_REPOSITORY_OWNER` | The repository owner's name. For example, `octocat`. | -| `GITHUB_RETENTION_DAYS` | The number of days that workflow run logs and artifacts are kept. For example, `90`. | -| `GITHUB_RUN_ATTEMPT` | A unique number for each attempt of a particular workflow run in a repository. This number begins at 1 for the workflow run's first attempt, and increments with each re-run. For example, `3`. | -| `GITHUB_RUN_ID` | {% data reusables.actions.run_id_description %} For example, `1658821493`. | -| `GITHUB_RUN_NUMBER` | {% data reusables.actions.run_number_description %} For example, `3`. | -| `GITHUB_SERVER_URL`| The URL of the {% data variables.product.product_name %} server. For example: `https://{% data variables.product.product_url %}`. -| `GITHUB_SHA` | {% data reusables.actions.github_sha_description %} | -{%- ifversion actions-job-summaries %} -| `GITHUB_STEP_SUMMARY` | The path on the runner to the file that contains job summaries from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/rob/runner/_layout/_work/_temp/_runner_file_commands/step_summary_1cb22d7f-5663-41a8-9ffc-13472605c76c`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary)." | -{%- endif %} -| `GITHUB_WORKFLOW` | The name of the workflow. For example, `My test workflow`. If the workflow file doesn't specify a `name`, the value of this variable is the full path of the workflow file in the repository. | -| `GITHUB_WORKSPACE` | The default working directory on the runner for steps, and the default location of your repository when using the [`checkout`](https://github.com/actions/checkout) action. For example, `/home/runner/work/my-repo-name/my-repo-name`. | -{%- ifversion actions-runner-arch-envvars %} -| `RUNNER_ARCH` | {% data reusables.actions.runner-arch-description %} | -{%- endif %} -| `RUNNER_DEBUG` | {% data reusables.actions.runner-debug-description %} | -| `RUNNER_NAME` | {% data reusables.actions.runner-name-description %} For example, `Hosted Agent` | -| `RUNNER_OS` | {% data reusables.actions.runner-os-description %} For example, `Windows` | -| `RUNNER_TEMP` | {% data reusables.actions.runner-temp-directory-description %} For example, `D:\a\_temp` | -{%- ifversion not ghae %} -| `RUNNER_TOOL_CACHE` | {% data reusables.actions.runner-tool-cache-description %} For example, `C:\hostedtoolcache\windows` | -{%- endif %} - -{% note %} - -**Note:** - -* If you need to use a workflow run's URL from within a job, you can combine these environment variables: `$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID` -* Most of the default environment variables have a corresponding, and similarly named, context property. For example, the value of the `GITHUB_REF` environment variable can be read during workflow processing using the {% raw %}`${{ github.ref }}`{% endraw %} context property. - -{% endnote %} - -## Detecting the operating system - -You can write a single workflow file that can be used for different operating systems by using the `RUNNER_OS` default environment variable and the corresponding context property {% raw %}`${{ runner.os }}`{% endraw %}. For example, the following workflow could be run successfully if you changed the operating system from `macos-latest` to `windows-latest` without having to alter the syntax of the environment variables, which differs depending on the shell being used by the runner. - -{% raw %} -```yaml -jobs: - if-Windows-else: - runs-on: macos-latest - steps: - - name: condition 1 - if: runner.os == 'Windows' - run: echo "The operating system on the runner is $env:RUNNER_OS." - - name: condition 2 - if: runner.os != 'Windows' - run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS." -``` -{% endraw %} - -In this example, the two `if` statements check the `os` property of the `runner` context to determine the operating system of the runner. `if` conditionals are processed by {% data variables.product.prodname_actions %}, and only steps where the check resolves as `true` are sent to the runner. Here one of the checks will always be `true` and the other `false`, so only one of these steps is sent to the runner. Once the job is sent to the runner, the step is executed and the environment variable in the `echo` command is interpolated using the appropriate syntax (`$env:NAME` for PowerShell on Windows, and `$NAME` for bash and sh on Linux and MacOS). In this example, the statement `runs-on: macos-latest` means that the second step will be run. - -## Passing values between steps and jobs in a workflow - - If you generate a value in one step of a job, you can use the value in subsequent steps of the same job by assigning the value to an existing or new environment variable and then writing this to the `GITHUB_ENV` environment file. The environment file can be used directly by an action, or from a shell command in the workflow file by using the `run` keyword. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/reference/workflow-commands-for-github-actions/#setting-an-environment-variable)." - - If you want to pass a value from a step in one job in a workflow to a step in another job in the workflow, you can define the value as a job output. You can then reference this job output from a step in another job. For more information, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idoutputs)." - diff --git a/content/actions/learn-github-actions/essential-features-of-github-actions.md b/content/actions/learn-github-actions/essential-features-of-github-actions.md index 9a32c9439c..925a328854 100644 --- a/content/actions/learn-github-actions/essential-features-of-github-actions.md +++ b/content/actions/learn-github-actions/essential-features-of-github-actions.md @@ -34,7 +34,7 @@ jobs: POSTGRES_PORT: 5432 ``` -For more information, see "[Using environment variables](/actions/configuring-and-managing-workflows/using-environment-variables)." +For more information, see "[Variables](/actions/learn-github-actions/variables#default-environment-variables)." ## Adding scripts to your workflow diff --git a/content/actions/learn-github-actions/index.md b/content/actions/learn-github-actions/index.md index aa4459d1f2..09c0ffd0ae 100644 --- a/content/actions/learn-github-actions/index.md +++ b/content/actions/learn-github-actions/index.md @@ -24,7 +24,7 @@ children: - /essential-features-of-github-actions - /expressions - /contexts - - /environment-variables + - /variables - /usage-limits-billing-and-administration --- diff --git a/content/actions/learn-github-actions/variables.md b/content/actions/learn-github-actions/variables.md new file mode 100644 index 0000000000..0f26a402df --- /dev/null +++ b/content/actions/learn-github-actions/variables.md @@ -0,0 +1,317 @@ +--- +title: Variables +intro: '{% data variables.product.prodname_dotcom %} sets default variables for each {% data variables.product.prodname_actions %} workflow run. {% ifversion actions-configuration-variables %}You can also set custom variables for use in a single workflow or multiple workflows. {% else %}You can also set custom variables in your workflow file.{% endif %}' +redirect_from: + - /github/automating-your-workflow-with-github-actions/using-environment-variables + - /actions/automating-your-workflow-with-github-actions/using-environment-variables + - /actions/configuring-and-managing-workflows/using-environment-variables + - /actions/reference/environment-variables + - /actions/learn-github-actions/environment-variables +versions: + fpt: '*' + ghes: '*' + ghae: '*' + ghec: '*' +miniTocMaxHeadingLevel: 3 +--- + +{% data reusables.actions.enterprise-beta %} +{% data reusables.actions.enterprise-github-hosted-runners %} + +## About variables + +{% ifversion actions-configuration-variables %} + +Variables provide a way to store and reuse non-sensitive configuration information. You can store any configuration data such as compiler flags, usernames, or server names as variables. Variables are interpolated on the runner machine that runs your workflow. Commands that run in actions or workflow steps can create, read, and modify variables. + +You can set your own custom variables or use the default environment variables that {% data variables.product.prodname_dotcom %} sets automatically. For more information, see "[Default environment variables](#default-environment-variables)". + +You can set a custom variable in two ways. + +- To define an environment variable for use in a single workflow, you can use the `env` key in the workflow file. For more information, see "[Defining environment variables for a single workflow](#defining-environment-variables-for-a-single-workflow)". +- To define a configuration variable across multiple workflows, you can define it at the organization, repository, or environment level. For more information, see "[Defining configuration variables for multiple workflows](#defining-configuration-variables-for-a-multiple-workflows)". + +{% warning %} + +**Warning:** By default, variables render unmasked in your build outputs. If you need greater security for sensitive information, such as passwords, use encrypted secrets instead. For more information, see "[Encrypted secrets](/actions/security-guides/encrypted-secrets)". + +{% endwarning %} + +{% else %} + +You can use variables to store information that you want to reference in your workflow. You reference variables within a workflow step or an action, and the variables are interpolated on the runner machine that runs your workflow. Commands that run in actions or workflow steps can create, read, and modify variables. + +You can set your own custom variables, you can use the default variables that {% data variables.product.prodname_dotcom %} sets automatically, and you can also use any other variables that are set in the working environment on the runner. Variables are case-sensitive. + +{% endif %} + +## Defining environment variables{% ifversion actions-configuration-variables %} for a single workflow{% endif %} + +To set a custom environment variable{% ifversion actions-configuration-variables %} for a single workflow{% endif %}, you can define it using the `env` key in the workflow file. The scope of a custom variable set by this method is limited to the element in which it is defined. You can define variables that are scoped for: + +* The entire workflow, by using [`env`](/actions/using-workflows/workflow-syntax-for-github-actions#env) at the top level of the workflow file. +* The contents of a job within a workflow, by using [`jobs..env`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenv). +* A specific step within a job, by using [`jobs..steps[*].env`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsenv). + +{% raw %} +```yaml +name: Greeting on variable day + +on: + workflow_dispatch + +env: + DAY_OF_WEEK: Monday + +jobs: + greeting_job: + runs-on: ubuntu-latest + env: + Greeting: Hello + steps: + - name: "Say Hello Mona it's Monday" + run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" + env: + First_Name: Mona +``` +{% endraw %} + +You can access `env` variable values using runner environment variables or using contexts. The above example above shows three custom variables being used as environment variables in an `echo` command: `$DAY_OF_WEEK`, `$Greeting`, and `$First_Name`. The values for these variables are set, and scoped, at the workflow, job, and step level respectively. For more information on accessing variable values using contexts, see "[Using contexts to access variable values](#using-contexts-to-access-variable-values)." + +Because runner environment variable interpolation is done after a workflow job is sent to a runner machine, you must use the appropriate syntax for the shell that's used on the runner. In this example, the workflow specifies `ubuntu-latest`. By default, Linux runners use the bash shell, so you must use the syntax `$NAME`. If the workflow specified a Windows runner, you would use the syntax for PowerShell, `$env:NAME`. For more information about shells, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsshell)." + +{% note %} + +**Note**: You can list the entire set of environment variables that are available to a workflow step by using `run: env` in a step and then examining the output for the step. + +{% endnote %} + +{% ifversion actions-configuration-variables %} + +## Defining configuration variables for multiple workflows + +{% data reusables.actions.configuration-variables-beta-note %} + +You can create configuration variables for use across multiple workflows, and can define them at either the [organization](#creating-configuration-variables-for-an-organization), [repository](#creating-configuration-variables-for-a-repository), or [environment](#creating-configuration-variables-for-an-environment) level. + +For example, you can use configuration variables to set default values for parameters passed to build tools at an organization level, but then allow repository owners to override these parameters on a case-by-case basis. + +When you define configuration variables, they are automatically available in the `vars` context. For more information, see "[Using the `vars `context to access configuration variable values](#using-the-vars-context-to-access-configuration-variable-values)". + +### Configuration variable precedence + +If a variable with the same name exists at multiple levels, the variable at the lowest level takes precedence. For example, if an organization-level variable has the same name as a repository-level variable, then the repository-level variable takes precedence. Similarly, if an organization, repository, and environment all have a variable with the same name, the environment-level variable takes precedence. + +If a repository contains reusable workflows, its configuration variables are automatically made available to the caller workflows with the `vars` context. However, if the same variable name is used in the caller and the called workflow repositories, the variable from the caller workflow repository is be used. + +### Naming conventions for configuration variables + +When you set a custom variable, you cannot use any of the default environment variable names. For a complete list of default environment variables, see "[Default environment variables](#default-environment-variables)" below. If you attempt to override the value of one of these default variables, the assignment is ignored. + +Any new variables you set that point to a location on the filesystem should have a `_PATH` suffix. The `GITHUB_ENV` and `GITHUB_WORKSPACE` default variables are exceptions to this convention. + +The following rules apply to configuration variable names: + +{% data reusables.actions.actions-secrets-and-variables-naming %} + +### Creating configuration variables for a repository + +{% data reusables.actions.permissions-statement-secrets-variables-repository %} + +{% data reusables.repositories.navigate-to-repo %} +{% data reusables.repositories.sidebar-settings %} +{% data reusables.actions.sidebar-secrets-and-variables %} +{% data reusables.actions.actions-variables-tab %} + ![Repository variables tab](/assets/images/help/repository/actions-variables-tab.png) +1. Click **New repository variable**. +{% data reusables.actions.variable-fields %} +1. Click **Add variable**. + +### Creating configuration variables for an environment + +{% data reusables.actions.permissions-statement-secrets-environment %} + +{% data reusables.repositories.navigate-to-repo %} +{% data reusables.repositories.sidebar-settings %} +{% data reusables.actions.sidebar-environment %} +1. Click on the environment that you want to add a variable to. +1. Under **Environment variables**, click **Add variable**. +{% data reusables.actions.variable-fields %} +1. Click **Add variable**. + +### Creating configuration variables for an organization + +{% data reusables.actions.actions-secrets-variables-repository-access %} + +{% data reusables.actions.permissions-statement-secrets-and-variables-organization %} + +{% data reusables.organizations.navigate-to-org %} +{% data reusables.organizations.org_settings %} +{% data reusables.actions.sidebar-secrets-and-variables %} +{% data reusables.actions.actions-variables-tab %} + ![Organization variables tab](/assets/images/help/organizations/actions-organization-variables-tab.png) +1. Click **New organization variable**. +{% data reusables.actions.variable-fields %} +1. From the **Repository access** dropdown list, choose an access policy. +1. Click **Add variable**. + +### Limits for configuration variables + +You can store up to 1,000 organization variables, 100 repository variables, and 100 environment variables. + +A workflow created in a repository can access the following number of variables: + +* All 100 repository variables. +* If the repository is assigned access to more than 100 organization variables, the workflow can only use the first 100 organization variables (sorted alphabetically by variable name). +* All 100 environment variables. + +Variables are limited to 64 KB in size. + +{% endif %} + +## Using contexts to access variable values + +{% data reusables.actions.actions-contexts-about-description %} For more information, see "[Contexts](/actions/learn-github-actions/contexts)". There are many other contexts that you can use for a variety of purposes in your workflows. For details of where you can use specific contexts within a workflow, see "[Context availability](/actions/learn-github-actions/contexts#context-availability)." + +You can access environment variable values using the `env` context{% ifversion actions-configuration-variables %} and configuration variable values using the `vars` context{% endif %}. + +### Using the `env` context to access environment variable values + +In addition to runner environment variables, {% data variables.product.prodname_actions %} allows you to set and read `env` key values using contexts. Environment variables and contexts are intended for use at different points in the workflow. + +Runner environment variables are always interpolated on the runner machine. However, parts of a workflow are processed by {% data variables.product.prodname_actions %} and are not sent to the runner. You cannot use environment variables in these parts of a workflow file. Instead, you can use contexts. For example, an `if` conditional, which determines whether a job or step is sent to the runner, is always processed by {% data variables.product.prodname_actions %}. You can use a context in an `if` conditional statement to access the value of an variable. + +{% raw %} +```yaml +env: + DAY_OF_WEEK: Monday + +jobs: + greeting_job: + runs-on: ubuntu-latest + env: + Greeting: Hello + steps: + - name: "Say Hello Mona it's Monday" + if: ${{ env.DAY_OF_WEEK == 'Monday' }} + run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" + env: + First_Name: Mona +``` +{% endraw %} + +In this modification of the earlier example, we've introduced an `if` conditional. The workflow step is now only run if `DAYS_OF_WEEK` is set to "Monday". We access this value from the `if` conditional statement by using the [`env` context](/actions/learn-github-actions/contexts#env-context). + +{% note %} + +**Note**: Contexts are usually denoted using the dollar sign and curly braces, as {% raw %}`${{ context.property }}`{% endraw %}. In an `if` conditional, the {% raw %}`${{` and `}}`{% endraw %} are optional, but if you use them they must enclose the entire comparison statement, as shown above. + +{% endnote %} + +You will commonly use either the `env` or `github` context to access variable values in parts of the workflow that are processed before jobs are sent to runners. + + +| Context | Use case | Example | +| --- | --- | --- | +| `env` | Reference custom variables defined in the workflow. | {% raw %}`${{ env.MY_VARIABLE }}`{% endraw %} | +| `github` | Reference information about the workflow run and the event that triggered the run. | {% raw %}`${{ github.repository }}`{% endraw %} | + +{% ifversion actions-configuration-variables %} + +### Using the `vars` context to access configuration variable values + +Configuration variables can be accessed across the workflow using `vars` context. For more information, see "[Contexts](/actions/learn-github-actions/contexts#vars-context)". + +{% data reusables.actions.actions-vars-context-example-usage %} + +{% endif %} + +## Default environment variables + +The default environment variables that {% data variables.product.prodname_dotcom %} sets are available to every step in a workflow. + +We strongly recommend that actions use variables to access the filesystem rather than using hardcoded file paths. {% data variables.product.prodname_dotcom %} sets variables for actions to use in all runner environments. + +| Variable | Description | +| ---------|------------ | +| `CI` | Always set to `true`. | +| `GITHUB_ACTION` | The name of the action currently running, or the [`id`](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsid) of a step. For example, for an action, `__repo-owner_name-of-action-repo`.

{% data variables.product.prodname_dotcom %} removes special characters, and uses the name `__run` when the current step runs a script without an `id`. If you use the same script or action more than once in the same job, the name will include a suffix that consists of the sequence number preceded by an underscore. For example, the first script you run will have the name `__run`, and the second script will be named `__run_2`. Similarly, the second invocation of `actions/checkout` will be `actionscheckout2`. | +| `GITHUB_ACTION_PATH` | The path where an action is located. This property is only supported in composite actions. You can use this path to access files located in the same repository as the action. For example, `/home/runner/work/_actions/repo-owner/name-of-action-repo/v1`. | +| `GITHUB_ACTION_REPOSITORY` | For a step executing an action, this is the owner and repository name of the action. For example, `actions/checkout`. | +| `GITHUB_ACTIONS` | Always set to `true` when {% data variables.product.prodname_actions %} is running the workflow. You can use this variable to differentiate when tests are being run locally or by {% data variables.product.prodname_actions %}. +| `GITHUB_ACTOR` | The name of the person or app that initiated the workflow. For example, `octocat`. | +| `GITHUB_API_URL` | Returns the API URL. For example: `{% data variables.product.api_url_code %}`. +| `GITHUB_BASE_REF` | The name of the base ref or target branch of the pull request in a workflow run. This is only set when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. For example, `main`. | +| `GITHUB_ENV` | The path on the runner to the file that sets variables from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/runner/work/_temp/_runner_file_commands/set_env_87406d6e-4979-4d42-98e1-3dab1f48b13a`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable)." | +| `GITHUB_EVENT_NAME` | The name of the event that triggered the workflow. For example, `workflow_dispatch`. | +| `GITHUB_EVENT_PATH` | The path to the file on the runner that contains the full event webhook payload. For example, `/github/workflow/event.json`. | +| `GITHUB_GRAPHQL_URL` | Returns the GraphQL API URL. For example: `{% data variables.product.graphql_url_code %}`. +| `GITHUB_HEAD_REF` | The head ref or source branch of the pull request in a workflow run. This property is only set when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. For example, `feature-branch-1`. | +| `GITHUB_JOB` | The [job_id](/actions/reference/workflow-syntax-for-github-actions#jobsjob_id) of the current job. For example, `greeting_job`. | +| `GITHUB_PATH` | The path on the runner to the file that sets system `PATH` variables from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/runner/work/_temp/_runner_file_commands/add_path_899b9445-ad4a-400c-aa89-249f18632cf5`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path)." | +| `GITHUB_REF` | {% data reusables.actions.ref-description %} | +{%- ifversion fpt or ghec or ghes > 3.3 or ghae > 3.3 %} +| `GITHUB_REF_NAME` | {% data reusables.actions.ref_name-description %} | +| `GITHUB_REF_PROTECTED` | {% data reusables.actions.ref_protected-description %} | +| `GITHUB_REF_TYPE` | {% data reusables.actions.ref_type-description %} | +{%- endif %} +| `GITHUB_REPOSITORY` | The owner and repository name. For example, `octocat/Hello-World`. | +| `GITHUB_REPOSITORY_OWNER` | The repository owner's name. For example, `octocat`. | +| `GITHUB_RETENTION_DAYS` | The number of days that workflow run logs and artifacts are kept. For example, `90`. | +| `GITHUB_RUN_ATTEMPT` | A unique number for each attempt of a particular workflow run in a repository. This number begins at 1 for the workflow run's first attempt, and increments with each re-run. For example, `3`. | +| `GITHUB_RUN_ID` | {% data reusables.actions.run_id_description %} For example, `1658821493`. | +| `GITHUB_RUN_NUMBER` | {% data reusables.actions.run_number_description %} For example, `3`. | +| `GITHUB_SERVER_URL`| The URL of the {% data variables.product.product_name %} server. For example: `https://{% data variables.product.product_url %}`. +| `GITHUB_SHA` | {% data reusables.actions.github_sha_description %} | +{%- ifversion actions-job-summaries %} +| `GITHUB_STEP_SUMMARY` | The path on the runner to the file that contains job summaries from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/rob/runner/_layout/_work/_temp/_runner_file_commands/step_summary_1cb22d7f-5663-41a8-9ffc-13472605c76c`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary)." | +{%- endif %} +| `GITHUB_WORKFLOW` | The name of the workflow. For example, `My test workflow`. If the workflow file doesn't specify a `name`, the value of this variable is the full path of the workflow file in the repository. | +| `GITHUB_WORKSPACE` | The default working directory on the runner for steps, and the default location of your repository when using the [`checkout`](https://github.com/actions/checkout) action. For example, `/home/runner/work/my-repo-name/my-repo-name`. | +{%- ifversion actions-runner-arch-envvars %} +| `RUNNER_ARCH` | {% data reusables.actions.runner-arch-description %} | +{%- endif %} +| `RUNNER_DEBUG` | {% data reusables.actions.runner-debug-description %} | +| `RUNNER_NAME` | {% data reusables.actions.runner-name-description %} For example, `Hosted Agent` | +| `RUNNER_OS` | {% data reusables.actions.runner-os-description %} For example, `Windows` | +| `RUNNER_TEMP` | {% data reusables.actions.runner-temp-directory-description %} For example, `D:\a\_temp` | +{%- ifversion not ghae %} +| `RUNNER_TOOL_CACHE` | {% data reusables.actions.runner-tool-cache-description %} For example, `C:\hostedtoolcache\windows` | +{%- endif %} + +{% note %} + +**Note:** + +* If you need to use a workflow run's URL from within a job, you can combine these variables: `$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID` +* Most of the default variables have a corresponding, and similarly named, context property. For example, the value of the `GITHUB_REF` variable can be read during workflow processing using the {% raw %}`${{ github.ref }}`{% endraw %} context property. + +{% endnote %} + +## Detecting the operating system + +You can write a single workflow file that can be used for different operating systems by using the `RUNNER_OS` default environment variable and the corresponding context property {% raw %}`${{ runner.os }}`{% endraw %}. For example, the following workflow could be run successfully if you changed the operating system from `macos-latest` to `windows-latest` without having to alter the syntax of the environment variables, which differs depending on the shell being used by the runner. + +{% raw %} +```yaml +jobs: + if-Windows-else: + runs-on: macos-latest + steps: + - name: condition 1 + if: runner.os == 'Windows' + run: echo "The operating system on the runner is $env:RUNNER_OS." + - name: condition 2 + if: runner.os != 'Windows' + run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS." +``` +{% endraw %} + +In this example, the two `if` statements check the `os` property of the `runner` context to determine the operating system of the runner. `if` conditionals are processed by {% data variables.product.prodname_actions %}, and only steps where the check resolves as `true` are sent to the runner. Here one of the checks will always be `true` and the other `false`, so only one of these steps is sent to the runner. Once the job is sent to the runner, the step is executed and the environment variable in the `echo` command is interpolated using the appropriate syntax (`$env:NAME` for PowerShell on Windows, and `$NAME` for bash and sh on Linux and MacOS). In this example, the statement `runs-on: macos-latest` means that the second step will be run. + +## Passing values between steps and jobs in a workflow + + If you generate a value in one step of a job, you can use the value in subsequent steps of the same job by assigning the value to an existing or new environment variable and then writing this to the `GITHUB_ENV` environment file. The environment file can be used directly by an action, or from a shell command in the workflow file by using the `run` keyword. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/reference/workflow-commands-for-github-actions/#setting-an-environment-variable)." + + If you want to pass a value from a step in one job in a workflow to a step in another job in the workflow, you can define the value as a job output. You can then reference this job output from a step in another job. For more information, see "[Workflow syntax for {% data variables.product.prodname_actions %}](/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idoutputs)." + diff --git a/content/actions/migrating-to-github-actions/migrating-from-circleci-to-github-actions.md b/content/actions/migrating-to-github-actions/migrating-from-circleci-to-github-actions.md index 7150d90ae6..82cbffe645 100644 --- a/content/actions/migrating-to-github-actions/migrating-from-circleci-to-github-actions.md +++ b/content/actions/migrating-to-github-actions/migrating-from-circleci-to-github-actions.md @@ -73,9 +73,9 @@ For more information about the tools and packages available on {% data variables ## Using variables and secrets -CircleCI and {% data variables.product.prodname_actions %} support setting environment variables in the configuration file and creating secrets using the CircleCI or {% data variables.product.product_name %} UI. +CircleCI and {% data variables.product.prodname_actions %} support setting variables in the configuration file and creating secrets using the CircleCI or {% data variables.product.product_name %} UI. -For more information, see "[Using environment variables](/actions/configuring-and-managing-workflows/using-environment-variables)" and "[Creating and using encrypted secrets](/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets)." +For more information, see "[Variables](/actions/learn-github-actions/variables#default-environment-variables)" and "[Creating and using encrypted secrets](/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets)." ## Caching diff --git a/content/actions/migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions.md b/content/actions/migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions.md index abf254d319..1aa2968fe8 100644 --- a/content/actions/migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions.md +++ b/content/actions/migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions.md @@ -301,9 +301,9 @@ For more information, see "[Events that trigger workflows](/actions/reference/ev ## Variables and secrets -GitLab CI/CD and {% data variables.product.prodname_actions %} support setting environment variables in the pipeline or workflow configuration file, and creating secrets using the GitLab or {% data variables.product.product_name %} UI. +GitLab CI/CD and {% data variables.product.prodname_actions %} support setting variables in the pipeline or workflow configuration file, and creating secrets using the GitLab or {% data variables.product.product_name %} UI. -For more information, see "[Environment variables](/actions/reference/environment-variables)" and "[Encrypted secrets](/actions/reference/encrypted-secrets)." +For more information, see "[Variables](/actions/learn-github-actions/variables)" and "[Encrypted secrets](/actions/reference/encrypted-secrets)." ## Caching diff --git a/content/actions/migrating-to-github-actions/migrating-from-travis-ci-to-github-actions.md b/content/actions/migrating-to-github-actions/migrating-from-travis-ci-to-github-actions.md index 572be0774f..779bc79689 100644 --- a/content/actions/migrating-to-github-actions/migrating-from-travis-ci-to-github-actions.md +++ b/content/actions/migrating-to-github-actions/migrating-from-travis-ci-to-github-actions.md @@ -43,13 +43,13 @@ To give you control over when CI tasks are executed, a {% data variables.product Travis CI and {% data variables.product.prodname_actions %} both use YAML to create jobs and workflows, and these files are stored in the code's repository. For more information on how {% data variables.product.prodname_actions %} uses YAML, see ["Creating a workflow file](/actions/learn-github-actions/introduction-to-github-actions#create-an-example-workflow)." -### Custom environment variables +### Custom variables -Travis CI lets you set environment variables and share them between stages. Similarly, {% data variables.product.prodname_actions %} lets you define environment variables for a step, job, or workflow. For more information, see ["Environment variables](/actions/reference/environment-variables)." +Travis CI lets you set variables and share them between stages. Similarly, {% data variables.product.prodname_actions %} lets you define variables for a workflows. For more information, see "[Variables](/actions/learn-github-actions/variables)." -### Default environment variables +### Default variables -Travis CI and {% data variables.product.prodname_actions %} both include default environment variables that you can use in your YAML files. For {% data variables.product.prodname_actions %}, you can see these listed in "[Default environment variables](/actions/reference/environment-variables#default-environment-variables)." +Travis CI and {% data variables.product.prodname_actions %} both include default environment variables that you can use in your YAML files. For {% data variables.product.prodname_actions %}, you can see these listed in "[Default environment variables](/actions/learn-github-actions/variables#default-environment-variables)." ### Parallel job processing @@ -178,7 +178,7 @@ git: ### Using environment variables in a matrix -Travis CI and {% data variables.product.prodname_actions %} can both add custom environment variables to a test matrix, which allows you to refer to the variable in a later step. +Travis CI and {% data variables.product.prodname_actions %} can both add custom variables to a test matrix, which allows you to refer to the variable in a later step. In {% data variables.product.prodname_actions %}, you can use the `include` key to add custom environment variables to a matrix. {% data reusables.actions.matrix-variable-example %} diff --git a/content/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging.md b/content/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging.md index b2d9fb000c..66a76c21dc 100644 --- a/content/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging.md +++ b/content/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging.md @@ -16,9 +16,9 @@ versions: These extra logs are enabled by setting secrets in the repository containing the workflow, so the same permissions requirements will apply: -- {% data reusables.actions.permissions-statement-secrets-repository %} +- {% data reusables.actions.permissions-statement-secrets-variables-repository %} - {% data reusables.actions.permissions-statement-secrets-environment %} -- {% data reusables.actions.permissions-statement-secrets-organization %} +- {% data reusables.actions.permissions-statement-secrets-and-variables-organization %} - {% data reusables.actions.permissions-statement-secrets-api %} For more information on setting secrets, see "[Creating and using encrypted secrets](/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)." diff --git a/content/actions/publishing-packages/publishing-java-packages-with-gradle.md b/content/actions/publishing-packages/publishing-java-packages-with-gradle.md index 3da7a6713d..aff1089c99 100644 --- a/content/actions/publishing-packages/publishing-java-packages-with-gradle.md +++ b/content/actions/publishing-packages/publishing-java-packages-with-gradle.md @@ -34,7 +34,7 @@ For more information about creating a CI workflow for your Java project with Gra You may also find it helpful to have a basic understanding of the following: - "[Working with the npm registry](/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)" -- "[Environment variables](/actions/reference/environment-variables)" +- "[Variables](/actions/learn-github-actions/variables)" - "[Encrypted secrets](/actions/reference/encrypted-secrets)" - "[Authentication in a workflow](/actions/reference/authentication-in-a-workflow)" @@ -160,10 +160,10 @@ on: types: [created] jobs: publish: - runs-on: ubuntu-latest - permissions: + runs-on: ubuntu-latest + permissions: contents: read - packages: write + packages: write steps: - uses: {% data reusables.actions.action-checkout %} - uses: {% data reusables.actions.action-setup-java %} @@ -241,10 +241,10 @@ on: types: [created] jobs: publish: - runs-on: ubuntu-latest - permissions: + runs-on: ubuntu-latest + permissions: contents: read - packages: write + packages: write steps: - uses: {% data reusables.actions.action-checkout %} - name: Set up Java diff --git a/content/actions/publishing-packages/publishing-java-packages-with-maven.md b/content/actions/publishing-packages/publishing-java-packages-with-maven.md index 3c81a5295b..f03b779908 100644 --- a/content/actions/publishing-packages/publishing-java-packages-with-maven.md +++ b/content/actions/publishing-packages/publishing-java-packages-with-maven.md @@ -34,7 +34,7 @@ For more information about creating a CI workflow for your Java project with Mav You may also find it helpful to have a basic understanding of the following: - "[Working with the npm registry](/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)" -- "[Environment variables](/actions/reference/environment-variables)" +- "[Variables](/actions/learn-github-actions/variables)" - "[Encrypted secrets](/actions/reference/encrypted-secrets)" - "[Authentication in a workflow](/actions/reference/authentication-in-a-workflow)" @@ -142,10 +142,10 @@ on: types: [created] jobs: publish: - runs-on: ubuntu-latest - permissions: + runs-on: ubuntu-latest + permissions: contents: read - packages: write + packages: write steps: - uses: {% data reusables.actions.action-checkout %} - uses: {% data reusables.actions.action-setup-java %} @@ -179,10 +179,10 @@ on: types: [created] jobs: publish: - runs-on: ubuntu-latest - permissions: + runs-on: ubuntu-latest + permissions: contents: read - packages: write + packages: write steps: - uses: {% data reusables.actions.action-checkout %} - name: Set up Java for publishing to Maven Central Repository diff --git a/content/actions/publishing-packages/publishing-nodejs-packages.md b/content/actions/publishing-packages/publishing-nodejs-packages.md index 34ccc87811..61332f6d51 100644 --- a/content/actions/publishing-packages/publishing-nodejs-packages.md +++ b/content/actions/publishing-packages/publishing-nodejs-packages.md @@ -35,7 +35,7 @@ For more information about creating a CI workflow for your Node.js project, see You may also find it helpful to have a basic understanding of the following: - "[Working with the npm registry](/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)" -- "[Environment variables](/actions/reference/environment-variables)" +- "[Variables](/actions/learn-github-actions/variables)" - "[Encrypted secrets](/actions/reference/encrypted-secrets)" - "[Authentication in a workflow](/actions/reference/authentication-in-a-workflow)" @@ -128,10 +128,10 @@ on: types: [created] jobs: build: - runs-on: ubuntu-latest - permissions: + runs-on: ubuntu-latest + permissions: contents: read - packages: write + packages: write steps: - uses: {% data reusables.actions.action-checkout %} # Setup .npmrc file to publish to GitHub Packages diff --git a/content/actions/security-guides/encrypted-secrets.md b/content/actions/security-guides/encrypted-secrets.md index fe5355ee55..e26ce1dd22 100644 --- a/content/actions/security-guides/encrypted-secrets.md +++ b/content/actions/security-guides/encrypted-secrets.md @@ -8,7 +8,7 @@ redirect_from: - /actions/configuring-and-managing-workflows/using-variables-and-secrets-in-a-workflow - /actions/reference/encrypted-secrets - /actions/managing-workflows/storing-secrets - + miniTocMaxHeadingLevel: 3 versions: fpt: '*' @@ -22,7 +22,7 @@ versions: ## About encrypted secrets -Secrets are encrypted environment variables that you create in an organization, repository, or repository environment. The secrets that you create are available to use in {% data variables.product.prodname_actions %} workflows. {% data variables.product.prodname_dotcom %} uses a [libsodium sealed box](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes) to help ensure that secrets are encrypted before they reach {% data variables.product.prodname_dotcom %} and remain encrypted until you use them in a workflow. +Secrets are encrypted variables that you create in an organization, repository, or repository environment. The secrets that you create are available to use in {% data variables.product.prodname_actions %} workflows. {% data variables.product.prodname_dotcom %} uses a [libsodium sealed box](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes) to help ensure that secrets are encrypted before they reach {% data variables.product.prodname_dotcom %} and remain encrypted until you use them in a workflow. {% data reusables.actions.secrets-org-level-overview %} @@ -40,7 +40,9 @@ For secrets stored at the environment level, you can enable required reviewers t ### Naming your secrets -{% data reusables.codespaces.secrets-naming %} +The following rules apply to secret names: + +{% data reusables.actions.actions-secrets-and-variables-naming %} For example, a secret created at the environment level must have a unique name in that environment, a secret created at the repository level must have a unique name in that repository, and a secret created at the organization level must have a unique name at that level. @@ -72,13 +74,16 @@ When generating credentials, we recommend that you grant the minimum permissions ## Creating encrypted secrets for a repository -{% data reusables.actions.permissions-statement-secrets-repository %} +{% data reusables.actions.permissions-statement-secrets-variables-repository %} {% webui %} {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-settings %} -{% data reusables.actions.sidebar-secret %} +{% data reusables.actions.sidebar-secrets-and-variables %} +{%- ifversion actions-configuration-variables %} +{% data reusables.actions.actions-secrets-tab %} + ![Repository secrets tab](/assets/images/help/repository/actions-secrets-tab.png){% endif %} 1. Click **New repository secret**. 1. Type a name for your secret in the **Name** input box. 1. Enter the value for your secret. @@ -143,15 +148,18 @@ gh secret list --env ENV_NAME ## Creating encrypted secrets for an organization -When creating a secret in an organization, you can use a policy to limit which repositories can access that secret. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories. +{% data reusables.actions.actions-secrets-variables-repository-access %} -{% data reusables.actions.permissions-statement-secrets-organization %} +{% data reusables.actions.permissions-statement-secrets-and-variables-organization %} {% webui %} {% data reusables.organizations.navigate-to-org %} {% data reusables.organizations.org_settings %} -{% data reusables.actions.sidebar-secret %} +{% data reusables.actions.sidebar-secrets-and-variables %} +{%- ifversion actions-configuration-variables %} +{% data reusables.actions.actions-secrets-tab %} + ![Organization secrets tab](/assets/images/help/organizations/actions-organization-secrets-tab.png){% endif %} 1. Click **New organization secret**. 1. Type a name for your secret in the **Name** input box. 1. Enter the **Value** for your secret. @@ -204,9 +212,9 @@ You can check which access policies are being applied to a secret in your organi {% data reusables.organizations.navigate-to-org %} {% data reusables.organizations.org_settings %} -{% data reusables.actions.sidebar-secret %} +{% data reusables.actions.sidebar-secrets-and-variables %} 1. The list of secrets includes any configured permissions and policies. For example: -![Secrets list](/assets/images/help/settings/actions-org-secrets-list.png) + ![Secrets list](/assets/images/help/settings/actions-org-secrets-list.png) 1. For more details on the configured permissions for each secret, click **Update**. ## Using encrypted secrets in a workflow @@ -356,9 +364,9 @@ To use secrets that are larger than 64 KB, you can use a workaround to store enc ```yaml name: Workflows with large secrets - + on: push - + jobs: my-job: name: My Job @@ -399,7 +407,7 @@ You can use Base64 encoding to store small binary blobs as secrets. You can then ✓ Set secret CERTIFICATE_BASE64 for octocat/octorepo ``` -1. To access the Base64 string from your runner, pipe the secret to `base64 --decode`. For example: +1. To access the Base64 string from your runner, pipe the secret to `base64 --decode`. For example: ```yaml name: Retrieve Base64 secret diff --git a/content/actions/using-github-hosted-runners/about-github-hosted-runners.md b/content/actions/using-github-hosted-runners/about-github-hosted-runners.md index 0bca8f8758..b4e2d146f2 100644 --- a/content/actions/using-github-hosted-runners/about-github-hosted-runners.md +++ b/content/actions/using-github-hosted-runners/about-github-hosted-runners.md @@ -194,7 +194,7 @@ The list of {% data variables.product.prodname_actions %} IP addresses returned | `workspace` | `GITHUB_WORKSPACE` | Actions and shell commands execute in this directory. An action can modify the contents of this directory, which subsequent actions can access. | | `workflow/event.json` | `GITHUB_EVENT_PATH` | The `POST` payload of the webhook event that triggered the workflow. {% data variables.product.prodname_dotcom %} rewrites this each time an action executes to isolate file content between actions. -For a list of the environment variables {% data variables.product.prodname_dotcom %} creates for each workflow, see "[Using environment variables](/github/automating-your-workflow-with-github-actions/using-environment-variables)." +For a list of the environment variables {% data variables.product.prodname_dotcom %} creates for each workflow, see "[Variables](/actions/learn-github-actions/variables#default-environment-variables)." ### Docker container filesystem diff --git a/content/actions/using-workflows/reusing-workflows.md b/content/actions/using-workflows/reusing-workflows.md index 573a3309e4..9f5c57613f 100644 --- a/content/actions/using-workflows/reusing-workflows.md +++ b/content/actions/using-workflows/reusing-workflows.md @@ -87,8 +87,9 @@ Called workflows that are owned by the same user or organization{% ifversion ghe * You can call a maximum of 20 reusable workflows from a single workflow file. {% endif %} {% ifversion private-actions %}{% else %}* Reusable workflows stored within a private repository can only be used by workflows within the same repository.{% endif %} -* Any environment variables set in an `env` context defined at the workflow level in the caller workflow are not propagated to the called workflow. For more information about the `env` context, see "[Context and expression syntax for GitHub Actions](/actions/reference/context-and-expression-syntax-for-github-actions#env-context)."{% ifversion actions-reusable-workflow-matrix %}{% else %} -* The `strategy` property is not supported in any job that calls a reusable workflow.{% endif %} +{% ifversion actions-reusable-workflow-matrix %}{% else %}* The `strategy` property is not supported in any job that calls a reusable workflow.{% endif %} +* Any environment variables set in an `env` context defined at the workflow level in the caller workflow are not propagated to the called workflow. For more information, see "[Variables](/actions/learn-github-actions/variables)" and "[Contexts](/actions/learn-github-actions/contexts#env-context)." +* To reuse variables in multiple workflows, set them at the organization, repository, or environment levels and reference them using the `vars` context. For more information see "[Variables](/actions/learn-github-actions/variables)" and "[Contexts](/actions/learn-github-actions/contexts#vars-context)." ## Creating a reusable workflow diff --git a/content/actions/using-workflows/sharing-workflows-secrets-and-runners-with-your-organization.md b/content/actions/using-workflows/sharing-workflows-secrets-and-runners-with-your-organization.md index 6d56152317..9cd003f57b 100644 --- a/content/actions/using-workflows/sharing-workflows-secrets-and-runners-with-your-organization.md +++ b/content/actions/using-workflows/sharing-workflows-secrets-and-runners-with-your-organization.md @@ -1,7 +1,7 @@ --- title: 'Sharing workflows, secrets, and runners with your organization' shortTitle: Share workflows with your organization -intro: 'Learn how you can use organization features to collaborate with your team, by sharing starter workflows, secrets, and self-hosted runners.' +intro: 'Learn how you can use organization features to collaborate with your team, by sharing starter workflows, secrets,{% ifversion actions-configuration-variables %} variables,{% endif %} and self-hosted runners.' redirect_from: - /actions/learn-github-actions/sharing-workflows-with-your-organization - /actions/learn-github-actions/sharing-workflows-secrets-and-runners-with-your-organization @@ -44,22 +44,28 @@ Your organization can share workflows by reusing the workflows exactly or by cre {% data reusables.actions.workflow-organization-templates %} For more information, see "[Creating starter workflows for your organization](/actions/using-workflows/creating-starter-workflows-for-your-organization)." -## Sharing secrets within an organization +## Sharing secrets{% ifversion actions-configuration-variables %} and variables{% endif %} within an organization -You can centrally manage your secrets within an organization, and then make them available to selected repositories. This also means that you can update a secret in one location, and have the change apply to all repository workflows that use the secret. +You can centrally manage your secrets {% ifversion actions-configuration-variables %} and variables{% endif %} within an organization, and then make them available to selected repositories. This also means that you can update a secret {% ifversion actions-configuration-variables %} or variable{% endif %} in one location, and have the change apply to all repository workflows that use the it. -When creating a secret in an organization, you can use a policy to limit which repositories can access that secret. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories. +When creating a secret {% ifversion actions-configuration-variables %} or variable{% endif %} in an organization, you can use a policy to limit which repositories can access it. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories. -{% data reusables.actions.permissions-statement-secrets-organization %} +{% data reusables.actions.permissions-statement-secrets-and-variables-organization %} {% data reusables.organizations.navigate-to-org %} {% data reusables.organizations.org_settings %} -{% data reusables.actions.sidebar-secret %} +{% data reusables.actions.sidebar-secrets-and-variables %} +{%- ifversion actions-configuration-variables %} +1. Click the **Secrets** or **Variables** tab, and create the secret or variable with your desired values and options. + + For more information, see "[Creating encrypted secrets for an organization](/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-an-organization)" or "[Creating configuration variables for an organization](/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization)." +{%- else %} 1. Click **New secret**. 1. Type a name for your secret in the **Name** input box. 1. Enter the **Value** for your secret. 1. From the **Repository access** dropdown list, choose an access policy. 1. Click **Add secret**. +{%- endif %} ## Share self-hosted runners within an organization diff --git a/content/actions/using-workflows/triggering-a-workflow.md b/content/actions/using-workflows/triggering-a-workflow.md index 837875fe9e..54f5c2129d 100644 --- a/content/actions/using-workflows/triggering-a-workflow.md +++ b/content/actions/using-workflows/triggering-a-workflow.md @@ -30,7 +30,7 @@ The following steps occur to trigger a workflow run: 1. {% data variables.product.product_name %} searches the `.github/workflows` directory in your repository for workflow files that are present in the associated commit SHA or Git ref of the event. 1. A workflow run is triggered for any workflows that have `on:` values that match the triggering event. Some events also require the workflow file to be present on the default branch of the repository in order to run. - Each workflow run will use the version of the workflow that is present in the associated commit SHA or Git ref of the event. When a workflow runs, {% data variables.product.product_name %} sets the `GITHUB_SHA` (commit SHA) and `GITHUB_REF` (Git ref) environment variables in the runner environment. For more information, see "[Using environment variables](/actions/automating-your-workflow-with-github-actions/using-environment-variables)." + Each workflow run will use the version of the workflow that is present in the associated commit SHA or Git ref of the event. When a workflow runs, {% data variables.product.product_name %} sets the `GITHUB_SHA` (commit SHA) and `GITHUB_REF` (Git ref) environment variables in the runner environment. For more information, see "[Variables](/actions/learn-github-actions/variables)." ### Triggering a workflow from a workflow diff --git a/content/actions/using-workflows/workflow-syntax-for-github-actions.md b/content/actions/using-workflows/workflow-syntax-for-github-actions.md index 82a08431fe..c869319b01 100644 --- a/content/actions/using-workflows/workflow-syntax-for-github-actions.md +++ b/content/actions/using-workflows/workflow-syntax-for-github-actions.md @@ -209,7 +209,7 @@ A boolean specifying whether the secret must be supplied. ## `env` -A `map` of environment variables that are available to the steps of all jobs in the workflow. You can also set environment variables that are only available to the steps of a single job or to a single step. For more information, see [`jobs..env`](#jobsjob_idenv) and [`jobs..steps[*].env`](#jobsjob_idstepsenv). +A `map` of variables that are available to the steps of all jobs in the workflow. You can also set variables that are only available to the steps of a single job or to a single step. For more information, see [`jobs..env`](#jobsjob_idenv) and [`jobs..steps[*].env`](#jobsjob_idstepsenv). Variables in the `env` map cannot be defined in terms of other variables in the map. @@ -276,7 +276,7 @@ env: ## `jobs..env` -A `map` of environment variables that are available to all steps in the job. You can also set environment variables for the entire workflow or an individual step. For more information, see [`env`](#env) and [`jobs..steps[*].env`](#jobsjob_idstepsenv). +A `map` of variables that are available to all steps in the job. You can set variables for the entire workflow or an individual step. For more information, see [`env`](#env) and [`jobs..steps[*].env`](#jobsjob_idstepsenv). {% data reusables.repositories.actions-env-var-note %} @@ -724,11 +724,11 @@ The `entrypoint` keyword is meant to be used with Docker container actions, but ### `jobs..steps[*].env` -Sets environment variables for steps to use in the runner environment. You can also set environment variables for the entire workflow or a job. For more information, see [`env`](#env) and [`jobs..env`](#jobsjob_idenv). +Sets variables for steps to use in the runner environment. You can also set variables for the entire workflow or a job. For more information, see [`env`](#env) and [`jobs..env`](#jobsjob_idenv). {% data reusables.repositories.actions-env-var-note %} -Public actions may specify expected environment variables in the README file. If you are setting a secret in an environment variable, you must set secrets using the `secrets` context. For more information, see "[Using environment variables](/actions/automating-your-workflow-with-github-actions/using-environment-variables)" and "[Contexts](/actions/learn-github-actions/contexts)." +Public actions may specify expected variables in the README file. If you are setting a secret or sensitive value, such as a password or token, you must set secrets using the `secrets` context. For more information, see "[Contexts](/actions/learn-github-actions/contexts)." #### Example diff --git a/content/code-security/dependabot/working-with-dependabot/managing-encrypted-secrets-for-dependabot.md b/content/code-security/dependabot/working-with-dependabot/managing-encrypted-secrets-for-dependabot.md index d3c87a52e1..7ea0a7b48c 100644 --- a/content/code-security/dependabot/working-with-dependabot/managing-encrypted-secrets-for-dependabot.md +++ b/content/code-security/dependabot/working-with-dependabot/managing-encrypted-secrets-for-dependabot.md @@ -26,7 +26,7 @@ shortTitle: Manage encrypted secrets {% data variables.product.prodname_dependabot %} secrets are encrypted credentials that you create at either the organization level or the repository level. When you add a secret at the organization level, you can specify which repositories can access the secret. You can use secrets to allow {% data variables.product.prodname_dependabot %} to update dependencies located in private package registries. When you add a secret it's encrypted before it reaches {% data variables.product.prodname_dotcom %} and it remains encrypted until it's used by {% data variables.product.prodname_dependabot %} to access a private package registry. -After you add a {% data variables.product.prodname_dependabot %} secret, you can reference it in the _dependabot.yml_ configuration file like this: {% raw %}`${{secrets.NAME}}`{% endraw %}, where "NAME" is the name you chose for the secret. For example: +After you add a {% data variables.product.prodname_dependabot %} secret, you can reference it in the _dependabot.yml_ configuration file like this: {% raw %}`${{secrets.NAME}}`{% endraw %}, where "NAME" is the name you chose for the secret. For example: {% raw %} ```yaml @@ -45,7 +45,7 @@ The name of a {% data variables.product.prodname_dependabot %} secret: ## Adding a repository secret for {% data variables.product.prodname_dependabot %} -{% data reusables.actions.permissions-statement-secrets-repository %} +{% data reusables.repositories.permissions-statement-secrets-repository %} {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-settings %} @@ -63,7 +63,7 @@ The name of a {% data variables.product.prodname_dependabot %} secret: When creating a secret in an organization, you can use a policy to limit which repositories can access that secret. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories. -{% data reusables.actions.permissions-statement-secrets-organization %} +{% data reusables.organizations.secrets-permissions-statement %} {% data reusables.organizations.navigate-to-org %} {% data reusables.organizations.org_settings %} @@ -75,7 +75,7 @@ When creating a secret in an organization, you can use a policy to limit which r 1. If you chose **Selected repositories**: * Click {% octicon "gear" aria-label="The Gear icon" %}. - * Choose the repositories that can access this secret. + * Choose the repositories that can access this secret. ![Select repositories for this secret](/assets/images/help/dependabot/secret-repository-access.png) * Click **Update selection**. @@ -84,7 +84,7 @@ When creating a secret in an organization, you can use a policy to limit which r The name of the secret is listed on the Dependabot secrets page. You can click **Update** to change the secret value or its access policy. You can click **Remove** to delete the secret. ![Update or remove an organization secret](/assets/images/help/dependabot/update-remove-org-secret.png) - + ## Adding {% data variables.product.prodname_dependabot %} to your registries IP allow list If your private registry is configured with an IP allow list, you can find the IP addresses {% data variables.product.prodname_dependabot %} uses to access the registry in the meta API endpoint, under the `dependabot` key. For more information, see "[Meta](/rest/reference/meta)." diff --git a/content/codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-github-codespaces.md b/content/codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-github-codespaces.md index 43595bbc4d..288914c3ad 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-github-codespaces.md +++ b/content/codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-github-codespaces.md @@ -14,13 +14,13 @@ redirect_from: - /codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-codespaces --- - + ## About secrets Secrets are encrypted environment variables that you create in an organization or repository. The secrets that you create are available to use in {% data variables.product.prodname_github_codespaces %}. GitHub uses a [libsodium sealed box](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes) to encrypt secrets before they reach GitHub and only decrypts them when you use them in a codespace. -Organization-level secrets let you share secrets between multiple repositories, which reduces the need to create duplicate secrets. You can use access policies to control which repositories can use organization secrets. +Organization-level secrets let you share secrets between multiple repositories, which reduces the need to create duplicate secrets. You can use access policies to control which repositories can use organization secrets. {% data reusables.codespaces.secrets-on-start %} @@ -53,7 +53,7 @@ To create secrets for an organization repository, you must have administrator ac When creating a secret in an organization, you can use a policy to limit which repositories can access that secret. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories. -{% data reusables.actions.permissions-statement-secrets-organization %} +{% data reusables.organizations.secrets-permissions-statement %} {% data reusables.organizations.navigate-to-org %} {% data reusables.organizations.org_settings %} diff --git a/content/codespaces/managing-your-codespaces/managing-encrypted-secrets-for-your-codespaces.md b/content/codespaces/managing-your-codespaces/managing-encrypted-secrets-for-your-codespaces.md index 4fa52ded72..b1b319be27 100644 --- a/content/codespaces/managing-your-codespaces/managing-encrypted-secrets-for-your-codespaces.md +++ b/content/codespaces/managing-your-codespaces/managing-encrypted-secrets-for-your-codespaces.md @@ -16,7 +16,7 @@ topics: shortTitle: Encrypted secrets --- - + ## About encrypted secrets for {% data variables.product.prodname_github_codespaces %} diff --git a/data/features/actions-configuration-variables.yml b/data/features/actions-configuration-variables.yml new file mode 100644 index 0000000000..c9c936a2d3 --- /dev/null +++ b/data/features/actions-configuration-variables.yml @@ -0,0 +1,6 @@ +# Reference: #8528 +# General versioning for Actions configuration variables +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.8' diff --git a/data/reusables/actions/actions-contexts-about-description.md b/data/reusables/actions/actions-contexts-about-description.md new file mode 100644 index 0000000000..d362e6dfb9 --- /dev/null +++ b/data/reusables/actions/actions-contexts-about-description.md @@ -0,0 +1 @@ +Contexts are a way to access information about workflow runs, variables, runner environments, jobs, and steps. diff --git a/data/reusables/actions/actions-secrets-and-variables-naming.md b/data/reusables/actions/actions-secrets-and-variables-naming.md new file mode 100644 index 0000000000..c656ff1de2 --- /dev/null +++ b/data/reusables/actions/actions-secrets-and-variables-naming.md @@ -0,0 +1,5 @@ +* Names can only contain alphanumeric characters (`[a-z]`, `[A-Z]`, `[0-9]`) or underscores (`_`). Spaces are not allowed. +* Names must not start with the `GITHUB_` prefix. +* Names must not start with a number. +* Names are not case-sensitive. +* Names must be unique at the level they are created at. diff --git a/data/reusables/actions/actions-secrets-tab.md b/data/reusables/actions/actions-secrets-tab.md new file mode 100644 index 0000000000..a6326a93fe --- /dev/null +++ b/data/reusables/actions/actions-secrets-tab.md @@ -0,0 +1 @@ +1. Click the **Secrets** tab. diff --git a/data/reusables/actions/actions-secrets-variables-repository-access.md b/data/reusables/actions/actions-secrets-variables-repository-access.md new file mode 100644 index 0000000000..11bca4fb64 --- /dev/null +++ b/data/reusables/actions/actions-secrets-variables-repository-access.md @@ -0,0 +1 @@ +When creating a secret or variable in an organization, you can use a policy to limit access by repository. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories. diff --git a/data/reusables/actions/actions-variables-tab.md b/data/reusables/actions/actions-variables-tab.md new file mode 100644 index 0000000000..b8637a5a0b --- /dev/null +++ b/data/reusables/actions/actions-variables-tab.md @@ -0,0 +1 @@ +1. Click the **Variables** tab. \ No newline at end of file diff --git a/data/reusables/actions/actions-vars-context-example-usage.md b/data/reusables/actions/actions-vars-context-example-usage.md new file mode 100644 index 0000000000..0a0946a916 --- /dev/null +++ b/data/reusables/actions/actions-vars-context-example-usage.md @@ -0,0 +1,36 @@ +If a configuration variable has not been set, the return value of an context referencing the variable will be an empty string. + +The following examples shows using configuration variables with the `vars` context across a workflow. Each of the following configuration variables have been defined at the repository, organization, or environment levels. + + +{% raw %} +```yaml +on: + workflow_dispatch: +env: + # Setting an environment variable with the value of a configuration variable + env_var: ${{ vars.ENV_CONTEXT_VAR }} + +jobs: + display-variables: + name: ${{ vars.JOB_NAME }} + # You can use configuration variables with the `vars` context for dynamic jobs + if: ${{ vars.USE_VARIABLES == 'true' }} + runs-on: ${{ vars.RUNNER }} + environment: ${{ vars.ENVIRONMENT_STAGE }} + steps: + - name: Use variables + run: | + echo "repository variable : ${{ vars.REPOSITORY_VAR }}" + echo "organization variable : ${{ vars.ORGANIZATION_VAR }}" + echo "overridden variable : ${{ vars.OVERRIDE_VAR }}" + echo "variable from shell environment : $env_var" + + - name: ${{ vars.HELLO_WORLD_STEP }} + if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }} + uses: actions/hello-world-javascript-action@main + with: + who-to-greet: ${{ vars.GREET_NAME }} + +``` +{% endraw %} diff --git a/data/reusables/actions/configuration-variables-beta-note.md b/data/reusables/actions/configuration-variables-beta-note.md new file mode 100644 index 0000000000..5fd0fa2d2b --- /dev/null +++ b/data/reusables/actions/configuration-variables-beta-note.md @@ -0,0 +1,5 @@ +{% note %} + +**Note:** Configuration variables for {% data variables.product.prodname_actions %} are in beta and subject to change. + +{% endnote %} \ No newline at end of file diff --git a/data/reusables/actions/permissions-statement-secrets-and-variables-organization.md b/data/reusables/actions/permissions-statement-secrets-and-variables-organization.md new file mode 100644 index 0000000000..d206816ab0 --- /dev/null +++ b/data/reusables/actions/permissions-statement-secrets-and-variables-organization.md @@ -0,0 +1 @@ +To create secrets {% ifversion actions-configuration-variables %}or variables {% endif %}at the organization level, you must have `admin` access. diff --git a/data/reusables/actions/permissions-statement-secrets-environment.md b/data/reusables/actions/permissions-statement-secrets-environment.md index ddabde1537..83c86c8ad1 100644 --- a/data/reusables/actions/permissions-statement-secrets-environment.md +++ b/data/reusables/actions/permissions-statement-secrets-environment.md @@ -1 +1 @@ -To create secrets for an environment in a personal account repository, you must be the repository owner. To create secrets for an environment in an organization repository, you must have `admin` access. +To create secrets {% ifversion actions-configuration-variables %}or variables {% endif %}for an environment in a personal account repository, you must be the repository owner. To create secrets {% ifversion actions-configuration-variables %}or variables {% endif %}for an environment in an organization repository, you must have `admin` access. diff --git a/data/reusables/actions/permissions-statement-secrets-variables-repository.md b/data/reusables/actions/permissions-statement-secrets-variables-repository.md new file mode 100644 index 0000000000..6b8f3a6fb4 --- /dev/null +++ b/data/reusables/actions/permissions-statement-secrets-variables-repository.md @@ -0,0 +1 @@ +To create secrets {% ifversion actions-configuration-variables %}or variables {% endif %}for a personal account repository, you must be the repository owner. To create secrets {% ifversion actions-configuration-variables %}or variables {% endif %}for an organization repository, you must have `admin` access. diff --git a/data/reusables/actions/sidebar-secret.md b/data/reusables/actions/sidebar-secret.md deleted file mode 100644 index 91d60259f5..0000000000 --- a/data/reusables/actions/sidebar-secret.md +++ /dev/null @@ -1,5 +0,0 @@ -{% ifversion fpt or ghec or ghes > 3.4 or ghae > 3.4 -%} -1. In the "Security" section of the sidebar, select **{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets**, then click **Actions**. -{%- else %} -1. In the left sidebar, click **Secrets**. -{%- endif %} diff --git a/data/reusables/actions/sidebar-secrets-and-variables.md b/data/reusables/actions/sidebar-secrets-and-variables.md new file mode 100644 index 0000000000..dc0ff2dad4 --- /dev/null +++ b/data/reusables/actions/sidebar-secrets-and-variables.md @@ -0,0 +1,5 @@ +{% ifversion fpt or ghec or ghes > 3.4 or ghae > 3.4 -%} +1. In the "Security" section of the sidebar, select {% ifversion actions-configuration-variables %}**{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets and variables**, {% else %}**{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets**, {% endif %}then click **Actions**. +{%- else %} +1. In the left sidebar, click **Secrets**. +{%- endif %} diff --git a/data/reusables/actions/using-context-or-environment-variables.md b/data/reusables/actions/using-context-or-environment-variables.md index c1b33b0407..727d371b01 100644 --- a/data/reusables/actions/using-context-or-environment-variables.md +++ b/data/reusables/actions/using-context-or-environment-variables.md @@ -1,9 +1,9 @@ -{% data variables.product.prodname_actions %} includes a collection of variables called _contexts_ and a similar collection of variables called _default environment variables_. These variables are intended for use at different points in the workflow: +{% data variables.product.prodname_actions %} includes a collection of variables called _contexts_ and a similar collection of variables called _default variables_. These variables are intended for use at different points in the workflow: -- **Default environment variables:** These variables exist only on the runner that is executing your job. For more information, see "[Default environment variables](/actions/reference/environment-variables#default-environment-variables)." -- **Contexts:** You can use most contexts at any point in your workflow, including when _default environment variables_ would be unavailable. For example, you can use contexts with expressions to perform initial processing before the job is routed to a runner for execution; this allows you to use a context with the conditional `if` keyword to determine whether a step should run. Once the job is running, you can also retrieve context variables from the runner that is executing the job, such as `runner.os`. For details of where you can use various contexts within a workflow, see "[Context availability](/actions/reference/context-and-expression-syntax-for-github-actions#context-availability)." +- **Default environment variables:** These environment variables exist only on the runner that is executing your job. For more information, see "[Default environment variables](/actions/learn-github-actions/variables#default-environment-variables)." +- **Contexts:** You can use most contexts at any point in your workflow, including when _default variables_ would be unavailable. For example, you can use contexts with expressions to perform initial processing before the job is routed to a runner for execution; this allows you to use a context with the conditional `if` keyword to determine whether a step should run. Once the job is running, you can also retrieve context variables from the runner that is executing the job, such as `runner.os`. For details of where you can use various contexts within a workflow, see "[Context availability](/actions/reference/context-and-expression-syntax-for-github-actions#context-availability)." -The following example demonstrates how these different types of environment variables can be used together in a job: +The following example demonstrates how these different types of variables can be used together in a job: {% raw %} ```yaml @@ -18,4 +18,4 @@ jobs: ``` {% endraw %} -In this example, the `if` statement checks the [`github.ref`](/actions/reference/context-and-expression-syntax-for-github-actions#github-context) context to determine the current branch name; if the name is `refs/heads/main`, then the subsequent steps are executed. The `if` check is processed by {% data variables.product.prodname_actions %}, and the job is only sent to the runner if the result is `true`. Once the job is sent to the runner, the step is executed and refers to the [`$GITHUB_REF`](/actions/reference/environment-variables#default-environment-variables) environment variable from the runner. +In this example, the `if` statement checks the [`github.ref`](/actions/reference/context-and-expression-syntax-for-github-actions#github-context) context to determine the current branch name; if the name is `refs/heads/main`, then the subsequent steps are executed. The `if` check is processed by {% data variables.product.prodname_actions %}, and the job is only sent to the runner if the result is `true`. Once the job is sent to the runner, the step is executed and refers to the [`$GITHUB_REF`](/actions/learn-github-actions/variables#default-environment-variables) variable from the runner. diff --git a/data/reusables/actions/variable-fields.md b/data/reusables/actions/variable-fields.md new file mode 100644 index 0000000000..f05f93f60a --- /dev/null +++ b/data/reusables/actions/variable-fields.md @@ -0,0 +1,2 @@ +1. In the **Name** field, enter a name for your variable. +1. In the **Value** field, enter the value for your variable. \ No newline at end of file diff --git a/data/reusables/codespaces/secrets-naming.md b/data/reusables/codespaces/secrets-naming.md index fbce299699..eddb8aa7f5 100644 --- a/data/reusables/codespaces/secrets-naming.md +++ b/data/reusables/codespaces/secrets-naming.md @@ -4,4 +4,4 @@ The following rules apply to secret names: * Secret names must not start with the `GITHUB_` prefix. * Secret names must not start with a number. * Secret names are not case-sensitive. -* Secret names must be unique at the level they are created at. +* Secret names must be unique at the level they are created at. \ No newline at end of file diff --git a/data/reusables/codespaces/sidebar-secret.md b/data/reusables/codespaces/sidebar-secret.md index 62d94a9ba9..324125faba 100644 --- a/data/reusables/codespaces/sidebar-secret.md +++ b/data/reusables/codespaces/sidebar-secret.md @@ -1 +1 @@ -1. In the "Security" section of the sidebar, select **{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets**, then click **{% data variables.product.prodname_codespaces %}**. +1. In the "Security" section of the sidebar, select {% ifversion actions-configuration-variables %}**{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets and variables**, {% else %}**{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets**, {% endif %}then click **{% data variables.product.prodname_codespaces %}**. diff --git a/data/reusables/dependabot/sidebar-secret.md b/data/reusables/dependabot/sidebar-secret.md index 8882ba3273..ee9478046c 100644 --- a/data/reusables/dependabot/sidebar-secret.md +++ b/data/reusables/dependabot/sidebar-secret.md @@ -1,5 +1,5 @@ {% ifversion fpt or ghec or ghes > 3.4 or ghae > 3.4 %} -1. In the "Security" section of the sidebar, select **{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets**, then click **{% data variables.product.prodname_dependabot %}**. +1. In the "Security" section of the sidebar, select {% ifversion actions-configuration-variables %}**{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets and variables**, {% else %}**{% octicon "key-asterisk" aria-label="The key-asterisk icon" %} Secrets**, {% endif %}then click **{% data variables.product.prodname_dependabot %}**. {% else %} 1. In the sidebar, click **{% data variables.product.prodname_dependabot %}**. ![{% data variables.product.prodname_dependabot %} secrets sidebar option](/assets/images/enterprise/3.3/dependabot/dependabot-secrets.png) diff --git a/data/reusables/actions/permissions-statement-secrets-organization.md b/data/reusables/organizations/secrets-permissions-statement.md similarity index 84% rename from data/reusables/actions/permissions-statement-secrets-organization.md rename to data/reusables/organizations/secrets-permissions-statement.md index 235a52b289..4a46cfb75b 100644 --- a/data/reusables/actions/permissions-statement-secrets-organization.md +++ b/data/reusables/organizations/secrets-permissions-statement.md @@ -1 +1 @@ -To create secrets at the organization level, you must have `admin` access. +To create secrets at the organization level, you must have `admin` access. \ No newline at end of file diff --git a/data/reusables/repositories/actions-env-var-note.md b/data/reusables/repositories/actions-env-var-note.md index 26908e34dd..2e92ab7a41 100644 --- a/data/reusables/repositories/actions-env-var-note.md +++ b/data/reusables/repositories/actions-env-var-note.md @@ -1 +1 @@ -When more than one environment variable is defined with the same name, {% data variables.product.prodname_dotcom %} uses the most specific environment variable. For example, an environment variable defined in a step will override job and workflow variables with the same name, while the step executes. A variable defined for a job will override a workflow variable with the same name, while the job executes. +When more than one environment variable is defined with the same name, {% data variables.product.prodname_dotcom %} uses the most specific variable. For example, an environment variable defined in a step will override job and workflow environment variables with the same name, while the step executes. An environment variable defined for a job will override a workflow variable with the same name, while the job executes. diff --git a/data/reusables/actions/permissions-statement-secrets-repository.md b/data/reusables/repositories/permissions-statement-secrets-repository.md similarity index 100% rename from data/reusables/actions/permissions-statement-secrets-repository.md rename to data/reusables/repositories/permissions-statement-secrets-repository.md From 287269d36f98c906e3117ef8e8625692163b70be Mon Sep 17 00:00:00 2001 From: Grey Baker Date: Tue, 10 Jan 2023 03:55:28 -0500 Subject: [PATCH 18/41] Add eBay credentials to list scanned for in private repos (#33677) Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- .../secret-scanning/partner-secret-list-private-repo.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/reusables/secret-scanning/partner-secret-list-private-repo.md b/data/reusables/secret-scanning/partner-secret-list-private-repo.md index 308029bc04..1785002aa2 100644 --- a/data/reusables/secret-scanning/partner-secret-list-private-repo.md +++ b/data/reusables/secret-scanning/partner-secret-list-private-repo.md @@ -67,6 +67,9 @@ Dynatrace | Dynatrace Access Token | dynatrace_access_token Dynatrace | Dynatrace Internal Token | dynatrace_internal_token EasyPost | EasyPost Production API Key | easypost_production_api_key EasyPost | EasyPost Test API Key | easypost_test_api_key +{%- ifversion fpt or ghec or ghes > 3.8 or ghae > 3.8 %} +eBay | eBay Production Client ID (App ID) with eBay Production Client Secret (Cert ID) | ebay_production_client_id
ebay_production_client_secret +eBay | eBay Sandbox Client ID (App ID) with eBay Sandbox Client Secret (Cert ID) | ebay_sandbox_client_id
ebay_sandbox_client_secret{% endif %} Fastly | Fastly API Token | fastly_api_token {%- ifversion fpt or ghec or ghes > 3.7 or ghae > 3.7 %} Figma | Figma {% data variables.product.pat_generic_title_case %} |figma_pat{% endif %} From 0647a19c7472f102b79233910e977e1346cf5839 Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Tue, 10 Jan 2023 10:15:17 +0000 Subject: [PATCH 19/41] [2023-01-04]: RubyGems Package Registry migration to v2 (#33347) Co-authored-by: Vanessa Co-authored-by: Siara <108543037+SiaraMist@users.noreply.github.com> --- .../about-permissions-for-github-packages.md | 3 +- ...nstalling-a-package-with-github-actions.md | 2 + .../working-with-the-container-registry.md | 15 ++++++-- .../working-with-the-npm-registry.md | 8 ++-- .../working-with-the-nuget-registry.md | 18 ++++++--- .../working-with-the-rubygems-registry.md | 38 +++++++++++++++---- data/features/packages-nuget-v2.yml | 2 +- data/features/packages-rubygems-v2.yml | 5 +++ .../authenticate_with_pat_for_v2_registry.md | 10 +---- .../publishing-user-scoped-packages.md | 2 +- .../package_registry/v2-actions-codespaces.md | 1 + 11 files changed, 74 insertions(+), 30 deletions(-) create mode 100644 data/features/packages-rubygems-v2.yml create mode 100644 data/reusables/package_registry/v2-actions-codespaces.md diff --git a/content/packages/learn-github-packages/about-permissions-for-github-packages.md b/content/packages/learn-github-packages/about-permissions-for-github-packages.md index 2f7d1ff02a..c448c0caf1 100644 --- a/content/packages/learn-github-packages/about-permissions-for-github-packages.md +++ b/content/packages/learn-github-packages/about-permissions-for-github-packages.md @@ -22,6 +22,7 @@ The following {% data variables.product.prodname_registry %} registries support - {% data variables.product.prodname_container_registry %} {% ifversion packages-npm-v2 %}- npm registry{% endif %} {% ifversion packages-nuget-v2 %}- NuGet registry{% endif %} +{% ifversion packages-rubygems-v2 %}- RubyGems registry{% endif %} {% endif %} @@ -34,10 +35,10 @@ The following {% data variables.product.prodname_registry %} registries **only** {% ifversion not fpt or ghec %}- Docker registry (`docker.pkg.github.com`){% endif %} {% ifversion packages-npm-v2 %}{% else %}- npm registry{% endif %} -- RubyGems registry - Apache Maven registry - Gradle registry {% ifversion packages-nuget-v2 %}{% else %}- NuGet registry{% endif %} +{% ifversion packages-rubygems-v2 %}{% else %}- RubyGems registry{% endif %} For {% ifversion ghes %}the {% data variables.product.prodname_container_registry %}{% else %}other registries{% endif %}, you can choose to allow packages to be scoped to a user or an organization, or linked to a repository. {% ifversion docker-ghcr-enterprise-migration %}For information about migration to the {% data variables.product.prodname_container_registry %}, see "[Migrating to the {% data variables.product.prodname_container_registry %} from the Docker registry](/packages/working-with-a-github-packages-registry/migrating-to-the-container-registry-from-the-docker-registry)."{% endif %} diff --git a/content/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions.md b/content/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions.md index f0aa8e04e7..7c5d2ef1f4 100644 --- a/content/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions.md +++ b/content/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions.md @@ -26,6 +26,8 @@ You can extend the CI and CD capabilities of your repository by publishing or in {% ifversion packages-registries-v2 %} ### Authenticating to package registries with granular permissions +Some {% data variables.product.prodname_registry %} registries support granular permissions. This means you can choose to allow packages to be owned by a user or an organization, or linked to a repository. For the list of registries that support granular permissions, see "[About permissions for {% data variables.product.prodname_registry %}](/packages/learn-github-packages/about-permissions-for-github-packages#granular-permissions-for-userorganization-scoped-packages)." + {% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} ### Authenticating to package registries with repository-scoped permissions diff --git a/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md b/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md index b5072fae2c..6c3e4b5dad 100644 --- a/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md +++ b/content/packages/working-with-a-github-packages-registry/working-with-the-container-registry.md @@ -42,10 +42,19 @@ When installing or publishing a Docker image, the {% data variables.product.prod ## Authenticating to the {% data variables.product.prodname_container_registry %} -{% ifversion fpt or ghec or ghes > 3.4 %} -To authenticate to the {% data variables.product.prodname_container_registry %} (`ghcr.io`) within a {% data variables.product.prodname_actions %} workflow, use the `GITHUB_TOKEN` for the best security and experience. {% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} +{% data reusables.package_registry.authenticate-packages %} + +{% ifversion packages-registries-v2 %} + +### Authenticating in a {% data variables.product.prodname_actions %} workflow + +This registry supports granular permissions. {% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} + +{% data reusables.package_registry.v2-actions-codespaces %} {% endif %} +### Authenticating with a {% data variables.product.pat_v1 %} + {% ifversion ghes %}Ensure that you replace `HOSTNAME` with {% data variables.location.product_location_enterprise %} hostname or IP address in the examples below.{% endif %} {% data reusables.package_registry.authenticate-to-container-registry-steps %} @@ -62,7 +71,7 @@ This example pushes the `2.5` version of the image. $ docker push {% data reusables.package_registry.container-registry-hostname %}/OWNER/IMAGE_NAME:2.5 ``` -When you first publish a package, the default visibility is private. To change the visibility or set access permissions, see "[Configuring a package's access control and visibility](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)." +{% data reusables.package_registry.publishing-user-scoped-packages %} You can link a published package to a repository using the user interface or command line. For more information, see "[Connecting a repository to a package](/packages/learn-github-packages/connecting-a-repository-to-a-package)." ## Pulling container images diff --git a/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md b/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md index 09d4236c63..bffb04768f 100644 --- a/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md +++ b/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md @@ -37,9 +37,11 @@ If you reach this limit, consider deleting package versions or contact Support f {% data reusables.package_registry.authenticate-packages %} {% ifversion packages-npm-v2 %} -{% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} +### Authenticating in a {% data variables.product.prodname_actions %} workflow -You can also choose to give access permissions to packages independently for {% data variables.product.prodname_codespaces %} and {% data variables.product.prodname_actions %}. For more information, see "[Ensuring Codespaces access to your package](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-codespaces-access-to-your-package) and [Ensuring workflow access to your package](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package)." +This registry supports granular permissions. {% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} + +{% data reusables.package_registry.v2-actions-codespaces %} {% endif %} ### Authenticating with a {% data variables.product.pat_generic %} @@ -104,7 +106,7 @@ $ npm login --scope=@OWNER --registry=https://HOSTNAME/_registry/npm/ {% ifversion packages-npm-v2 %} The {% data variables.product.prodname_registry %} registry stores npm packages within your organization or personal account, and allows you to associate a package with a repository. You can choose whether to inherit permissions from a repository, or set granular permissions independently of a repository. -{% data reusables.package_registry.publishing-user-scoped-packages %} +{% data reusables.package_registry.publishing-user-scoped-packages %} For more information on linking a published package with a repository, see "[Connecting a repository to a package](/packages/learn-github-packages/connecting-a-repository-to-a-package)." {% endif %} By default, {% data variables.product.prodname_registry %} publishes a package in the {% data variables.product.prodname_dotcom %} repository you specify in the name field of the *package.json* file. For example, you would publish a package named `@my-org/test` to the `my-org/test` {% data variables.product.prodname_dotcom %} repository. If you're running [npm v8.5.3](https://github.com/npm/cli/releases/tag/v8.5.3) or later, you can add a summary for the package listing page by including a *README.md* file in your package directory. For more information, see "[Working with package.json](https://docs.npmjs.com/getting-started/using-a-package.json)" and "[How to create Node.js Modules](https://docs.npmjs.com/getting-started/creating-node-modules)" in the npm documentation. diff --git a/content/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry.md b/content/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry.md index b071df613d..e5c968fe5e 100644 --- a/content/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry.md +++ b/content/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry.md @@ -26,22 +26,28 @@ shortTitle: NuGet registry {% data reusables.package_registry.authenticate-packages %} -{% ifversion packages-nuget-v2 %} -You can choose to give access permissions to packages independently for {% data variables.product.prodname_github_codespaces %} and {% data variables.product.prodname_actions %}. For more information, see "[Ensuring Codespaces access to your package](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-codespaces-access-to-your-package)" and "[Ensuring workflow access to your package](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package)." -{% endif %} +### Authenticating in a {% data variables.product.prodname_actions %} workflow -### Authenticating with `GITHUB_TOKEN` in {% data variables.product.prodname_actions %} +{% ifversion packages-nuget-v2 %} +This registry supports granular permissions. {% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} {% endif %} Use the following command to authenticate to {% data variables.product.prodname_registry %} in a {% data variables.product.prodname_actions %} workflow using the `GITHUB_TOKEN` instead of hardcoding a {% data variables.product.pat_generic %} in a nuget.config file in the repository: ```shell dotnet nuget add source --username USERNAME --password {%raw%}${{ secrets.GITHUB_TOKEN }}{% endraw %} --store-password-in-clear-text --name github "https://{% ifversion fpt or ghec %}nuget.pkg.github.com{% else %}nuget.HOSTNAME{% endif %}/OWNER/index.json" ``` +{% ifversion packages-nuget-v2 %}{% else %}{% data reusables.package_registry.authenticate-packages-github-token %}{% endif %} -{% data reusables.package_registry.authenticate-packages-github-token %} +{% ifversion packages-nuget-v2 %} + +{% data reusables.package_registry.v2-actions-codespaces %} + +{% endif %} ### Authenticating with a {% data variables.product.pat_generic %} +{% data reusables.package_registry.authenticate-packages %} + {% data reusables.package_registry.required-scopes %} To authenticate to {% data variables.product.prodname_registry %} with the `dotnet` command-line interface (CLI), create a *nuget.config* file in your project directory specifying {% data variables.product.prodname_registry %} as a source under `packageSources` for the `dotnet` CLI client. @@ -99,7 +105,7 @@ You can publish a package to {% data variables.product.prodname_registry %} by a The NuGet registry stores packages within your organization or personal account, and allows you to associate packages with a repository. You can choose whether to inherit permissions from a repository, or set granular permissions independently of a repository. -{% data reusables.package_registry.publishing-user-scoped-packages %} +{% data reusables.package_registry.publishing-user-scoped-packages %} For more information on linking a published package with a repository, see "[Connecting a repository to a package](/packages/learn-github-packages/connecting-a-repository-to-a-package)." If you specify a `RepositoryURL` in your `nuget.config` file, the published package will automatically be connected to the specified repository. For more information, see "[Publishing a package using a `nuget.config` file](/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry#publishing-a-package-using-a-nugetconfig-file)." For information on linking an already-published package to a repository, see "[Connecting a repository to a package](/packages/learn-github-packages/connecting-a-repository-to-a-package)." diff --git a/content/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry.md b/content/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry.md index 6799c2f4ea..0bd282f3db 100644 --- a/content/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry.md +++ b/content/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry.md @@ -40,7 +40,15 @@ shortTitle: RubyGems registry {% data reusables.package_registry.authenticate-packages %} -{% data reusables.package_registry.authenticate-packages-github-token %} +{% ifversion packages-rubygems-v2 %} + +### Authenticating in a {% data variables.product.prodname_actions %} workflow + +This registry supports granular permissions. {% data reusables.package_registry.authenticate_with_pat_for_v2_registry %} + +{% data reusables.package_registry.v2-actions-codespaces %} + +{% endif %} ### Authenticating with a {% data variables.product.pat_generic %} @@ -79,16 +87,14 @@ $ bundle config https://{% ifversion fpt or ghec %}rubygems.pkg.github.com{% els ## Publishing a package -{% data reusables.package_registry.default-name %} For example, when you publish `` to the `octo-org` organization, {% data variables.product.prodname_registry %} publishes the gem to the `octo-org/` repository. For more information on creating your gem, see "[Make your own gem](http://guides.rubygems.org/make-your-own-gem/)" in the RubyGems documentation. - -{% data reusables.package_registry.viewing-packages %} +{% ifversion packages-rubygems-v2 %}{% data reusables.package_registry.publishing-user-scoped-packages %}{% else %}By default, GitHub publishes the package to an existing repository with the same name as the package. For example, when you publish `` to the `octo-org` organization, GitHub Packages publishes the gem to the `octo-org/` repository.{% endif %} For more information on creating your gem, see "[Make your own gem](http://guides.rubygems.org/make-your-own-gem/)" in the RubyGems documentation. {% data reusables.package_registry.authenticate-step %} -2. Build the package from the *gemspec* to create the *.gem* package. +1. Build the package from the *gemspec* to create the *.gem* package. ``` gem build .gemspec ``` -3. Publish a package to {% data variables.product.prodname_registry %}, replacing `OWNER` with the name of the user or organization account that owns the repository containing your project and `` with the name of your gem package.{% ifversion ghes %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry. If your instance has subdomain isolation enabled, use `rubygems.HOSTNAME`. If your instance has subdomain isolation disabled, use `HOSTNAME/_registry/rubygems`. In either case, replace *HOSTNAME* with the host name of your {% data variables.product.prodname_ghe_server %} instance.{% elsif ghae %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry, `rubygems.HOSTNAME`. Replace *HOSTNAME* with the hostname of {% data variables.location.product_location %}.{% endif %} +1. Publish a package to {% data variables.product.prodname_registry %}, replacing `OWNER` with the name of {% ifversion packages-rubygems-v2 %}your user or organization account{% else %}the user or organization account that owns the repository containing your project{% endif %} and `` with the name of your gem package.{% ifversion ghes %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry. If your instance has subdomain isolation enabled, use `rubygems.HOSTNAME`. If your instance has subdomain isolation disabled, use `HOSTNAME/_registry/rubygems`. In either case, replace *HOSTNAME* with the host name of your {% data variables.product.prodname_ghe_server %} instance.{% elsif ghae %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry, `rubygems.HOSTNAME`. Replace *HOSTNAME* with the hostname of {% data variables.location.product_location %}.{% endif %} ``` $ gem push --key github \ @@ -96,6 +102,22 @@ $ bundle config https://{% ifversion fpt or ghec %}rubygems.pkg.github.com{% els -0.0.1.gem ``` +{% ifversion packages-rubygems-v2 %} + +## Connecting a package to a repository + +The RubyGems registry stores packages within your organization or personal account, and allows you to associate packages with a repository. You can choose whether to inherit permissions from a repository, or set granular permissions independently of a repository. + +You can ensure gems will be linked to a repository as soon as they are published by including the URL of the {% data variables.product.prodname_dotcom %} repository in the `github_repo` field in `gem.metadata`. You can link multiple gems to the same repository. {% ifversion ghes %} In the following example, replace *HOSTNAME* with the host name of {% data variables.location.product_location %}.{% endif %} + +```ruby +gem.metadata = { "github_repo" => "ssh://{% ifversion fpt or ghec %}github.com{% else %}HOSTNAME{% endif %}/OWNER/REPOSITORY" } +``` + +For information on linking a published package with a repository, see "[Connecting a repository to a package](/packages/learn-github-packages/connecting-a-repository-to-a-package)." + +{% else %} + ## Publishing multiple packages to the same repository To publish multiple gems to the same repository, you can include the URL to the {% data variables.product.prodname_dotcom %} repository in the `github_repo` field in `gem.metadata`. If you include this field, {% data variables.product.prodname_dotcom %} matches the repository based on this value, instead of using the gem name.{% ifversion ghes or ghae %} Replace *HOSTNAME* with the host name of {% data variables.location.product_location %}.{% endif %} @@ -104,12 +126,14 @@ To publish multiple gems to the same repository, you can include the URL to the gem.metadata = { "github_repo" => "ssh://{% ifversion fpt or ghec %}github.com{% else %}HOSTNAME{% endif %}/OWNER/REPOSITORY" } ``` +{% endif %} + ## Installing a package You can use gems from {% data variables.product.prodname_registry %} much like you use gems from *rubygems.org*. You need to authenticate to {% data variables.product.prodname_registry %} by adding your {% data variables.product.prodname_dotcom %} user or organization as a source in the *~/.gemrc* file or by using Bundler and editing your *Gemfile*. {% data reusables.package_registry.authenticate-step %} -1. For Bundler, add your {% data variables.product.prodname_dotcom %} user or organization as a source in your *Gemfile* to fetch gems from this new source. For example, you can add a new `source` block to your *Gemfile* that uses {% data variables.product.prodname_registry %} only for the packages you specify, replacing *GEM NAME* with the package you want to install from {% data variables.product.prodname_registry %} and *OWNER* with the user or organization that owns the repository containing the gem you want to install.{% ifversion ghes %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry. If your instance has subdomain isolation enabled, use `rubygems.HOSTNAME`. If your instance has subdomain isolation disabled, use `HOSTNAME/_registry/rubygems`. In either case, replace *HOSTNAME* with the host name of your {% data variables.product.prodname_ghe_server %} instance.{% elsif ghae %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry, `rubygems.HOSTNAME`. Replace *HOSTNAME* with the hostname of {% data variables.location.product_location %}.{% endif %} +1. For Bundler, add your {% data variables.product.prodname_dotcom %} user or organization as a source in your *Gemfile* to fetch gems from this new source. For example, you can add a new `source` block to your *Gemfile* that uses {% data variables.product.prodname_registry %} only for the packages you specify, replacing *GEM NAME* with the package you want to install from {% data variables.product.prodname_registry %} and *OWNER* with the user or organization that owns {% ifversion packages-rubygems-v2 %}{%else%}the repository containing {% endif %}the gem you want to install.{% ifversion ghes %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry. If your instance has subdomain isolation enabled, use `rubygems.HOSTNAME`. If your instance has subdomain isolation disabled, use `HOSTNAME/_registry/rubygems`. In either case, replace *HOSTNAME* with the host name of your {% data variables.product.prodname_ghe_server %} instance.{% elsif ghae %} Replace `REGISTRY-URL` with the URL for your instance's Rubygems registry, `rubygems.HOSTNAME`. Replace *HOSTNAME* with the hostname of {% data variables.location.product_location %}.{% endif %} ```ruby source "https://rubygems.org" diff --git a/data/features/packages-nuget-v2.yml b/data/features/packages-nuget-v2.yml index caadf1d537..484d77382c 100644 --- a/data/features/packages-nuget-v2.yml +++ b/data/features/packages-nuget-v2.yml @@ -1,5 +1,5 @@ # Issue 7874 -# npm NuGet Registry Improvements (v2) Public Beta +# npm NuGet Registry Improvements (v2) versions: fpt: '*' ghec: '*' diff --git a/data/features/packages-rubygems-v2.yml b/data/features/packages-rubygems-v2.yml new file mode 100644 index 0000000000..c15c46fa09 --- /dev/null +++ b/data/features/packages-rubygems-v2.yml @@ -0,0 +1,5 @@ +# Issue 7872 +# RubyGems Registry Improvements (v2) +versions: + fpt: '*' + ghec: '*' diff --git a/data/reusables/package_registry/authenticate_with_pat_for_v2_registry.md b/data/reusables/package_registry/authenticate_with_pat_for_v2_registry.md index 74c99daf27..69608de8d6 100644 --- a/data/reusables/package_registry/authenticate_with_pat_for_v2_registry.md +++ b/data/reusables/package_registry/authenticate_with_pat_for_v2_registry.md @@ -1,9 +1,3 @@ -Some {% data variables.product.prodname_registry %} registries support granular permissions. This means you can choose to allow packages to be owned by a user or an organization, or linked to a repository. For the list of registries that support granular permissions, see "[About permissions for {% data variables.product.prodname_registry %}](/packages/learn-github-packages/about-permissions-for-github-packages#granular-permissions-for-userorganization-scoped-packages)." +For registries that support granular permissions, if your workflow is using a {% data variables.product.pat_generic %} to authenticate to a registry, we highly recommend you update your workflow to use the `GITHUB_TOKEN`. For guidance on updating your workflows that authenticate to a registry with a {% data variables.product.pat_generic %}, see "[Upgrading a workflow that accesses a registry using a {% data variables.product.pat_generic %}](/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token)." -For registries that support granular permissions, if your workflow is using a {% data variables.product.pat_generic %} to authenticate to a registry, then we highly recommend you update your workflow to use the `GITHUB_TOKEN`. - -For guidance on updating your workflows that authenticate to a registry with a {% data variables.product.pat_generic %}, see "[Upgrading a workflow that accesses a registry using a {% data variables.product.pat_generic %}](/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token)." - -For more information about the `GITHUB_TOKEN`, see "[Authentication in a workflow](/actions/reference/authentication-in-a-workflow#using-the-github_token-in-a-workflow)." - -For more information about the best practices when using a registry in actions, see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)." +For more information about the `GITHUB_TOKEN`, see "[Authentication in a workflow](/actions/reference/authentication-in-a-workflow#using-the-github_token-in-a-workflow)." For more information about the best practices when using a registry in actions, see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)." \ No newline at end of file diff --git a/data/reusables/package_registry/publishing-user-scoped-packages.md b/data/reusables/package_registry/publishing-user-scoped-packages.md index 0f756f289e..6a0b1e12f8 100644 --- a/data/reusables/package_registry/publishing-user-scoped-packages.md +++ b/data/reusables/package_registry/publishing-user-scoped-packages.md @@ -1 +1 @@ -When you first publish a package, the default visibility is private. When a package is linked to repository, the package visibility is dependent on the repository's visibility. To change the visibility or set access permissions, see "[Configuring a package's access control and visibility](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)." \ No newline at end of file +When you first publish a package, the default visibility is private. When a package is linked to a repository, the package visibility is dependent on the repository's visibility. To change the visibility or set access permissions, see "[Configuring a package's access control and visibility](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)." \ No newline at end of file diff --git a/data/reusables/package_registry/v2-actions-codespaces.md b/data/reusables/package_registry/v2-actions-codespaces.md new file mode 100644 index 0000000000..3f1ddc592c --- /dev/null +++ b/data/reusables/package_registry/v2-actions-codespaces.md @@ -0,0 +1 @@ +You can also choose to give access permissions to packages independently for {% data variables.product.prodname_github_codespaces %} and {% data variables.product.prodname_actions %}. For more information, see "[Ensuring Codespaces access to your package](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-codespaces-access-to-your-package)" and "[Ensuring workflow access to your package](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package)." \ No newline at end of file From d7fc9208c243430dded4c4919d48ae59af109f5c Mon Sep 17 00:00:00 2001 From: Jon Jozwiak Date: Tue, 10 Jan 2023 06:34:35 -0600 Subject: [PATCH 20/41] Remove Codespaces personal free tier from enterprise docs (#33851) --- .../about-billing-for-github-codespaces.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md b/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md index d1ee841dbc..9f805e2a80 100644 --- a/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md +++ b/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md @@ -33,6 +33,8 @@ Otherwise use of {% data variables.product.prodname_github_codespaces %} applies For information about how to configure an organization to be billed for codespace usage, see "[Enabling {% data variables.product.prodname_github_codespaces %} for your organization](/codespaces/managing-codespaces-for-your-organization/enabling-github-codespaces-for-your-organization)." The Free, Team, and Enterprise plans for organization and enterprise accounts do not include any free use of {% data variables.product.prodname_github_codespaces %}. +{% ifversion fpt %} + ### Monthly included storage and core hours for personal accounts The following storage and core hours of usage are included, free of charge, for personal accounts: @@ -64,6 +66,8 @@ If you are blocked from resuming a codespace and you want to continue to work on If you have used all of either your included storage usage or your included compute usage, and you have set up a payment method and a spending limit, any further use of codespaces owned by your personal account will incur charges for whichever type of usage has no remaining included quota. You will not be charged for the other type of usage until you have also used all of its included quota. +{% endif %} + ### Pricing for paid usage A {% data variables.product.prodname_github_codespaces %} instance (a "codespace") incurs charges for compute time, while it is active, and for the amount of disk space the codespace occupies, while it exists. The compute cost is proportional to the number of processor cores in the machine type you choose for your codespace, as shown in the table below. For example, the compute cost of using a codespace for an hour on a 16-core machine is eight times greater than a 2-core machine. From 392897578993cd0e81a8ad3c5d6e04d4a80b4129 Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Tue, 10 Jan 2023 14:44:18 +0000 Subject: [PATCH 21/41] [Improvement] Clarify Settings Sync in GitHub Codespaces (#33733) Co-authored-by: github-actions Co-authored-by: John Keech --- .../codespaces-manage-settings-sync.png | Bin 10582 -> 35146 bytes .../codespaces/settings-sync-turn-off.png | Bin 0 -> 32820 bytes .../help/codespaces/turn-off-sync-dialog.png | Bin 0 -> 38070 bytes .../security-in-github-codespaces.md | 4 +++ ...zing-github-codespaces-for-your-account.md | 32 +++++++++++++++--- .../codespaces/getting-started/quickstart.md | 4 ++- content/codespaces/troubleshooting/index.md | 2 +- ...hooting-personalization-for-codespaces.md} | 16 +++++++-- .../codespaces/about-settings-sync.md | 3 ++ .../codespaces/disabling-settings-sync.md | 15 ++++++++ 10 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 assets/images/help/codespaces/settings-sync-turn-off.png create mode 100644 assets/images/help/codespaces/turn-off-sync-dialog.png rename content/codespaces/troubleshooting/{troubleshooting-dotfiles-for-codespaces.md => troubleshooting-personalization-for-codespaces.md} (63%) create mode 100644 data/reusables/codespaces/about-settings-sync.md create mode 100644 data/reusables/codespaces/disabling-settings-sync.md diff --git a/assets/images/help/codespaces/codespaces-manage-settings-sync.png b/assets/images/help/codespaces/codespaces-manage-settings-sync.png index 9ee92de0bf0d9ea0f297f27937604efaebfa910d..8c7fe7fc20fe8d4ac6154b85b774751c7eda23e9 100644 GIT binary patch literal 35146 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
rE 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 diff --git a/assets/images/help/codespaces/settings-sync-turn-off.png b/assets/images/help/codespaces/settings-sync-turn-off.png new file mode 100644 index 0000000000000000000000000000000000000000..03658a9dee17e0327da0f70d5579437b58ee78f6 GIT binary patch literal 32820 zcmd3tXH*mIx9AZCHAqn*h)59&2t-7hf)qhS=`EBXAkqmmrV zT^gDrI2xKm*N)KxcXAa4nrUcg1?}~XJd8Bdr7c~Yu3A{RJhHy(+-yZeZ{EBqa_zdv_3IFz2E^Uh*~7vI z;_QCmpo`yq+_84IbhCH$uy=9hJ?PWok&CB?EFT|G&ikixYajc6dUtmJGkjnoL=H+s zM6X^G`FC{>dz=5E`a#J*)ejm=Yuo!+I~w1ycd~YN2SkwN6T2qA>oV{Jng@kH0s7wKK5lZou*iH~IR}(43IBS5nfxucXAQ?dD=* z?`Ta!b1x#+@Tieq6FAA_b&P`Dp(CH3jvYC4<7$2oD`x{Z2 z&T$&`>`~Ux$@ zq>z-aaE^0cizoi0BEKx1)wNUFG_>M3MgmTXNlTwo;FR7U9U}z?cIFb*@Owl1<{D2L zI>@xaca%Q1w~(i92OOiRh!i@-PNVR4#YT_ej_wK0&Qo*+6plVp;pXQ(@#yfgCr?XXjf3Q5 zl~}%noyldv-P8X3GTey$yYkM?=Nrflo1c?L%ECA~rPfD+o9^cdgmcCF58v0M)l1#K z9MxekZHcNk{&}B8k5^KJ_2OMc45&aUQ1ijNT3g4*U?I0g72$~3DHo>4!sch@MFtu` zVqb0-fcCp9c2cR25{iz@-=mY$j$z~B%VX|u{?WJ+?p||s71{dqJXhde$#QDx^5&tC zl~T(NYVFe-$aWQ-kRVKeu;$4hcZGHy>jgUJzm-A`UaG#PDGJsS4rb8JjkbLTN}KrM z`@MeXW2c?3+@>1~lMydXXUGwP$2AVC!?#sjlte0CZyY(q#PUS_^HB=O#_rB*jLNa- z$0=uaj-TY2WR6~qUthU>ezKaWXeC{?F=idye0MT9i-jC=ErucQQlU=mxLw4z<5oxZ zpS6d)U|4NKY7qCAsOKp%bx+kxLSLOw{)A@qJ#{$Z&=;0REM4>i4G33}Tj#iUAG&|# zC~4@tRkeLO>6G;G=wk!NO`i_GIkNgi-kRf3SxR6`8hA#&pSJkvhujkRMaI6=>$y+n z4*QSLeYN;rb*)gy$~dwj1Dd-3X}6eT$5o0o&`RaHD)(*51(W?-x_t(Ho<_>BIi9%- z9TJF=G0b>U@u78GOG#HbqmYlmCuE~T6h zJ_=W$8$3b?O?=3FgXZjK9aqptI`$fCSFRBxI*YU72;!UU83mT7Pqj~;O$$GB0sM^X z`}1ooJQrDxt2}yTb&;{@&eLZ{-iNfRG{?l=qbsD#0VYhN@yg__?ue1Q+Nh8v6Oyy z+$LJ|8W@bsc*ybYOae0Y(GMdDgK&wu?Etp9TE7CV8z-~IJw~{5zp>mpMEX+WKG#?*69)8^RTT!oukJiOgp3e;K zcy9_{K3x>i6QTBu^O=7He?;P!hA)AqB0i}UUhsXBcJG|-p`53p!{ePR8jBE*`i*dzJy*E)CRm${G)i9_=2{-Evix2SS&OXuYy)WYnkW`E6eDV-z(SM ze&-d>lxdk$*Wc72|!sZ2VbT;Q>>n}$~UzG)x1&r#BR+bHT%FlJJ z)2_R%8B9w|j}A1fJFQ!;WzD+u%BPcLbm5-{?kzTUzdCw%OjLooz%3H z`1KQ#tQ@&gx10vypDZVB-#X!l(Mh`29n@@i-lu0Ju@5snYFYew}KcTLu ze(|!2y0kjII#&I(I{E#gM5W7JQOkGM@34|^(K#_G$>?jz7H06khET_v{Ki5fc$dx3 zn(pT7O>U{yPky)ynF%`Zu zqZ7C?nfhS3q(w#w$+%Surv+l*>&kZ&(9Z@gQ0+&l3mE5SB|e5j+kV!qO?!pm2d z2QCpO?=?KwFqS!XZV57GD(8_bp4=v9T6MYV9La&C5@-{6t9l`@@Pc z!M?>lv#?gbdVdp*Fz<~N@stbNV%N^+^DW1tU2!%X+4kArwEpRR8gu&MaY%$iL{5Z61kY>Q*9Mn8 zUvSDgPnAS9Z8e2Xer45Febh{OyZ19>V&M6brl$tvex+!QgJRdy)zjn8c z?XD45gy|A)}&>zbs&_^y_gcEZOql{fin(q7hEg7eIGux}0hQd( z#lOaz&eaY`B5V7*}`A=YqVW`V%p-+1-tLmvDiBr zzj0*V9#fPzTxe+PG9;I;Rk&2Yhuf86ddg*Yv+;(JcjI^MJ`3V_x8J8g7{Xl1K*`Y3 z&C*uSPEW1KaCQ6wlZw|liJLHA_3gpJiMJCBFPW1BL- zxH`PyeZCmEojy@^^sA%H5uGJ)R0^p~JKkz6wA}taFH@yc)%-$uQz23whpS_evhm+03@(npBu{xRA#J5n0RapGR+Q9NSP` zLX$*-9xkVBF(=4Vyh=T}{Ld`s@9K=Cmq(XIo69u?tz`Ju=*{-5*naJBNRpA4C!X$g zr`B(>kBTUZ9Q9M%>)kAxja^481yOhV#-wudw(*kxjLl^CP>qzPxD=t zM%t#;m6M2WqQvT6s6~99YRsGQo%u$37tldf8k0{B(eI<%3D{#-%nZ0|KA?AvhUT%~ z{X4hyeTeg;;pO_)aZ5kkf%BQVAzFvJ$={e#sngh^st#~V0# z=hW}A80?Q#aW&n{-b*2IX770av{*l4vi=mtcob%D-Cruz>9WJwK|#3z<&3`+gWy%y3!(|ckb5j8?=yr+MWE5mcjphAAEo2kGJ!$D_|!7n#*Ij zV}B;{pDTrwe@*2-5Bxt0`u7t3XU7Wv-KhVO{_i#VXVm|a^Y^&_2iblXve^AcXT1Mx znSbQ@U7O~g0sYl1CH@EulAO$pb1qB#YqcIZm+c0m^sV@kkHQ9S6+jR_11Ctly?+it z>NPdv*Vivut0i*VtZg{|+eKQ-21_%qqT z?TY`*%5TB`-mQNLub^dl^Iz-qKZ^e!4ga_0{V&b_uKd?*|9z_dwM_qmK>w=BHjvek zAv;ycbmkiGP=Tdwq0=yBk_fLJnA0pw^1zfmQ4^`es8o{tmnub!3$5-Kx|7?jR;M5t z6Qjc&{=fPUF}UtHxa?uE)1|_5$vohv^2(2R^UKKyim}_~^2VD!v>`uf*E!jFdu*8K zm9=Cz7O>jJu=lBK7KMJp$SHYosd_)q@A+D(XX{HYnYh3`PM3-Zk!1H_rzh=+7o3{- zlLK_UoOz@@1dQJ_9{@-dY%u1e>iBR=E#kP)LE=5OMYy$iO%;+xE-FBW`d# zbHk1-&}j~d*|F9JJi%FwM+~vG_FMstU6U(z9`(DOtPSFp-(Bk&vCOc%X;FKpDwvEh zEtm8*Zz3lLCEeOtzA(C2sg-oAbRLl;?I}1^>|&l%i;+s)_%&!+>~)dq9k-!0>O{1> zCc%Z2gn3YU-Itu`-CbYBth%*6N5TyR&KESOb;!Dm?X)%wSyGlr$-{1gM55pAVzU=# zB~ZdX`uTXs4`M9GFlpJ@$N@X z^VN^Vy*dlg7gS!hB18%hK^?N`-QXS=0Ug`kLs^|tShSRK9x?L6(AMm%`YT-bTbo|n z9pDUP8+B2M=7vDOOB9NnmGw@zotL*NPkGNK?9l$6D0h_cth&#y_tOy=^=@=vJ}xF` z4qNQTgRY-?&LNhD)w*um{&Ctd>&a1OgA-TGOI&pp)zjnR;;fdx4ZHIcc`uE1uWG!% zp5aj*D#(*Nw9paHT-FI8@s)z9(VbejyX`|2I9nCUv)B2vwV zNUj34o2}vp`ZL&|_;Yz_scE6ATtWrfI;+*x~vEn4H=;OAz zIcJ4kO3G?an7XF8Ne;iastKhlB~N3E#|(M`%XTR;&BPOECao02LD)hjf4Xt}m4-D67yX{n|*}=j`lj?4s_Ot}ldfI%DR1S#5qGwQM_*G?Whe z@4UXG=Ejq^{Mj(N-j4pYEXln?Luhm{+<$I$^C4u38YgTF`&o*6$4u5m*1UCLSREGp z5=F;57S0oB)DuXFHH?;%&dqd^2qqDrjVJw|=UUm1ht~3!?~ZztAc(tk*Nl@@$lA$r z@dmf@P_Iy?9uGGbN9{9Sk~E8lc0m`S0{bQ4{ci~-)qzT>PGL-3AChDW#+S!GmcART zDD>Mf=~57yt8iHxK}@`mQjOLV;2bswr9BFX+lM?u*znj5?Oj>n`n4Na>|$>Q?)VJx zc~e)|B=Fx~aBdh4QBX&^m))Szn=JPsFTh3uBf7yU-*b8an8+&rqK8EXW&12A~RAQ}_!kN@;THhH z)BKnDwUUHKHzwb_VOWBb&hmfQ|3tyVqCE{-(sI4*J7jI!M_Rw#PBxA812yRLc0Tp^DUHM z5}B)G9i(o=#+bkP)ONOYb47>1)R4gkx&qX_-l?$do z$c+PKTojpMEQX7uhZW3nLPK!HPA{&E29gjP@p!B~MXvEtK(PDlHcfi9KOY1#17I!qcw z6|@z4AuyVk(m@*N?>ETSD0HLr9?e)_&6Zf%T_(LSf_@}I7Xr=u`lkbB_HVA(+F2)V zyhti<1L4-H>bxvv_II}#$j$bW?@3DqDEWhtDTpxRgnL0~$yyK-(&X&3h2kDXoGfPW z9Kso*SwyUs7V8An(Wg744nnyRCRPUi$zWnXH#m&ep$Iq3$q230R$FafA$GGS3G^N- zhTgCkMmmL8jb6iqt<C^-2-n=t!+LpU5RzO0K+7X08aq=LHF`~hyj z5VW{BSRl6g*np9(%Iv~6_LTy<%e~k*Bn~Ezu3T#1;o(6%5B2bG9W1b<*8N(JW4OYc zG8Kp~3LHUq8D_M7)5IaUXj}Xt%t>Fg>IVwYyZG>WTYko<_O2C+J7&mdcqB6QbFOK5 zGwp5027~PcMwrXpdZ{ zkQeBV%-k(X9oe$)zH&}lXOc>)N&mzSizlOri$}G@Svv{8MMvL5e`IKALx5y+%@a=f-e>@XJ7FGt5xpwJ>{%L@LnaH0IQ z=^0SAbw>yPYOh1~?TNnJDnkZn$c$K+q5g@($J<0B@js2rQwhvMIXkYan1SMy)}vz5 zU|*#TnaJuwa|3JrlPCckS!enE`VG3+g+pzvVH+mtAqKy7?T?k9TpzKylz~jg zTG4(27mMP`2RnU{P_UozaH@-xelUleZDq}KL63QaunEN>D={x{FzCW*3lg^d}x?b*{l7W^bE|j569ZevUMN=$D){CR=9oZi8Tdrz`yF!I|tbDUZ5zH)) zb{^~8I60Qr*<8$}nYi`9`I0UmS?G2Du}c39FQV^)iACRQW2*$fwvm%n3Gh!y&Wjsx zD{&qz8;PrHXF8A)krK;Rf~qeWQ)tfl2C$pt%kmV z(PHbP*bNzRwYR6ZIPC0M@Ohsi+xQCOu&|>s8%y#j^MWqQ1bch?D^5iZYeGjFwzMt! zP*Apw?NSQ|863E>CrgXWz3msufyQ-_PvouGilZIYXZvP$2sR%F1qayMJmaFvrAt-YJ@1vy z1}uiZg^Ml}a{+c*q4GKr4}a5@u44G$eS397qKtQDO(-}MSUqF94?zoqu}37>g-_7w zM@;73%0_>)53(!3`dWEe%NUosS&v)dT}V}h0|qqK+iD>%YGapuY-Hn6skMMT@>=3l z>-3pTcLhV4-iKQ!FDz=BOzdnkK4CxypbTo_p&1#aPJux)BfWcu+L`Vq+n!(1$j$LcbI4@e0g@VD|K@`cD^?54v*aCgy~zs z*Q{}@L*~+79q3-jM%TtU42RckluLIyOpdTYMWMsyFOI-KOcEpvF|hAe$+8%Ao80=| z#H+fx*1Cj*a{A?DPTvlR!+Tx1)(GO#cfxtt@AZ8LLtw1fV>&4*g1MN5-q$67RaQ8_ z#Qx#KA)G~BSRr}iPl(M#^j0zUN5j0ZL&<&QOv-T=)J0FFlO~3mh zlHQA$T;^udub$)3k1;j@Q=Z03p+cL>%S_L_dlr^vD|>ZG>@4Ga2gv45U6bW_WNq&y zwYWRQ1=`AabJ1{!zSAc{DaPGo$1C?V#O&IzIT*)!8IuuW?WXYI z6Y@pvrif$&TP!oqETEv0PS3)3Os?-HN)m5Y168$gvl*uUMlF`Cx^E$=o@#|`#< zHxggvpL=X@$m9E$h}H&y5?%i{6g4sSE+V_bgg)oHu=4Hvv||jz^A6#Oj{|1{bUkC* zqX+X>Vy1W{CMstlqd*9oj-*6-J5)9*L%KbCR--`&64lq8rK|8CdMzWAh2b{@!YJF}28qtH@*r;LqOeguFW3Ci;b<6o`E%*7 z4Z+)~D3yUeO8l5A{GmSGD<^5$SG-3cV86(w?Yoit;;)wp;H0H?DJ(!t2p7YdgXC`_ zwmjVC2Ma#oJx#7#er@HJFoLbV)l8I*JtrS{3)|h@%J)))eDy$|(EP;@{-PB$e{rOL z0hZsy=eWRFLf? zRM~+wDK_ime;eAMCBG}aVKif;`R-bQVbIU3Wz*jeI85pGeWr6aVjlR-SXWAR&Ni>+ z5I10ezIZEVvp~dG?v*niJn{&v9dJz_5PWtwC!*gh3>WhY8Rn{w0k~pvwL@OSWRNm9 zP;H;LJ7^glpX5JQL46-x)G$w~mM>n&#^cvRon_8SIOrQMXY(rdsYn~hcrU8Af4r&Z zCCsn!p%-55v%SG1FwBk;A1QgPR|wb?la(7|Lc`JgnjfcQLktX)wfd?C(nuH3;Dxro z=iqATq=|J1RINpgExPo3WK~nmlW^7Ot_P`$V7qlN$lB3-o`^?3;(m*I-OKF|t;1mK zGNJ`2W8sCviKGLnP;W`kTqWxyi)%Qrh|JjSJlCnc&ws<$PKLwS^Gb`t5JCCPZ%!1t`;IT_i_Cvvd9{LwikrW^W9yS`sm*#+7xSO2Hn^u zEbBDzxs;S5X}VuQg&Yj^eDpm!%NG2RDh{Gp>vEW|ap9*m>Hwfrr+4&}b@2*nNe=0B?!>?;bY4~FaKL^7LT+ZHYGZ8s_4Zsn&Lu<0 zU3ybF#V9q>$P;<6cE@lZEY_xvszo&ykNF906fn#0+yl<^^GN^$y&RK2z!<_wzc5Cu z*#X9AO#(0mF7)z}sQ<R7^P-EM? z{rMt2vEub)XkD#m0!(WGF-NV9lSPkpRW$pH7{3}eDm51%C{JL%)DX>+xB1cGNAJ>IBM!q!f2X<`%QcxE4iW;I@6c}O zlZ!6YvY2KNsn9OdxNTdq`#}OO7nkR<^OL`W_kyfl6;)%CWclZi!228#&T z#)l_x(?Vl=$gug=)^y1S0u=hn39TSVIb+(?4PF9y%u~Ech~hO4wg=V-?nEWT)`PQ7 zhcI4UA*1EqS!~*YGNT6K@0w8+x<4#rV;_R;X3hu(H~W#onR#-3NT=E}qkf9ztZ_T> zQ1kl*T-(u^y`3KA)zcd#uU4C$pAqHT7@U=ZN`6Htu2v0L96Og}%e6ZiUrY*=@h+G3 z2cpr{%y&HHCJ|a^cPkIHYOooPT|^$Hlh5rJ0GW9H2Y~3}Lk0PF6m_FqO*Vx_&PsdO zoqaI0J2&8R&*d~!a;AW?R3+H#JVy#r(1?PWJV3*gqFlR{{ezOt20EBmqI8jGQNoAPYzBL^L09Ub75au)V)lOhF(Ic=lYjcoDn zW*p)vBkohJ*kibzU{C1mm5X{AuksX)s{;{3?f@-@SdTvqdpReD=DV*%L|kf*5+U3% z`QBcf!6mSB6Q7J|Oxu-(_s^ps`M_hdRW%H^^zefi^ayw%w z^5y$#Er=f>v3)6@wrSH<+-qlTw~!{csGWaTb8{kVfyZ~UYfUCwh-r&Nx2(J>vch%ht7&m5~0;pQoFz7N!p9;p1VVyWaQv z%y-Tog#7?KtBJZ8i3g!%RoFld=q9vlffHV!H&mozzcW?oz2SX${|Rhb6fuAIzW&MX zu|n}ok8*IbSGgi>Tg~y}^}3Zhg%;XpMmJJj)j}d*g$5WS9X;hl80itj2vr8F*o+4CnqN)@uDT`xvwZB z>otLU&k`8`=mR)3@*$iHrTm)r$CCi5uFKqX)UAu~lK;dNf!bW#&L3^6x8v-cyoO2*F=v4M!a za&XXC?D{wykZdXzEGe#Pb=Y064~KiW4IE#}6^AKp3u1CXxB%A}iG;?Eo}W&yj2Dcm zP6?dA&4c{POrff6j;Ep9#%2leiu`nL1@FxWrh{J7!;Ezf0z9hLbhiyW!Sp`hdHW!% zwi7*$m+80*KBJS)&+qL>KmKmDD115bO+nmk9=j{S&tRsr4 z0#>kjo&vbB@rpJKDPHq~E4s-Q$RyS}Z_4X0PAM?$Ck zwiH^978r{iJ+O#?)s4`9kxDoR>9k~cKt~g}7?l^=N;>Mmogm10Q*vA?<1{2KmwxvcEKZhLdB1lv- z*J*!QVxTiG*szTC0r~EnxIU~IVrQ5*fa29Nnlh2C12^Y`x@tlDzKW72YWwiw98g!1 z;ce4?f0Ty@dsq<;4nLP_+aIZ;iR8UZ9g@n>efe%F6CV|ykk_^^FGAD0G?d? zbTF;IHX4KU81!PhI@njpUcQoGx~rj7hcGcu*Qd+uIK$M#WP8}2UK{hGgUE~gXrG?Xa}^xQ>)Q9G@|xKV-U(m|V`_;^h;j=@ZO_V(xT#Y^+eU=>K4)(; zG~X3?prJc0HWf(=VSHaaj8L|$4%}5sO`%lc@4`4qp>zz*Q?d~As*0Iyfw_Pci;RUV z%u>~^luXz8I(bWpD#>(>ny|ajN$}Pg#k4LP3Yl zsM?e*1*R-NJU|_kn5AX?z$Z)W*^5k4a9qG8EH)7{mUt z_mrLevL_zta-*^00y`dHzYsJ)le$(6ebIn3xVz1q?W;4~-K|UfD(GIg$)SKYz&0mx zeFC^~wG80tEEWI&)`&cSgh{kuE>vw-wdw7n&;RsY z2veqo@HozGd?CQSke3h6##$tx2~=VFHc*F=#|<%sC_ef4Ci;8H)fKyyUB4^zwJTtHtZ`8$Yva%aYv@cSl3%mQc5oinH&TiX2-*i;jpbILQ z9RJ7(IYxviA? zoLD;_8Js56%O-2EO<54~ccRlKRI{dC5x7F^{^XFoylRC!3s4nl`n_}7%V{-h4s#%r z{93Rq`Vj!1*x^f{yz5!UHh}4Dvc&-%x2hW`GAn1*1SKL!7Eg~OY_?+ z)7JNr)x46i30P^#B-^q%gOmo_0W^lFTkRGOyi!CqJgFo*;>x zg%iT9^Q;W$`%c?M2*#l*op0pJ&lR}<5vuQj@+APzZE2TIW(|f8cM#)0WPzPc7W|zS zvd1lVZed^UETY?PV7}l63~5mA!eF}>=Wbq?J~q~~3%W^F`m_9pacBA!ufr`+bR*pv zYVOHOkedY#m)oM6(A+v|-;-qho6Y>&KbEpFsF}`=$yb|iZbhDfDt!_BT$o#!H6Wr( z_o;?D@l`gC@PLZO8`Iqvp6`OTKMF~tWGO~EtR@x$W}KvZ4Q2yK(XJ2@`*7ec5d8P3 zWOO^Mg#jl%DC5%qihiyk^fod_ElxPXx#&@SbNAfV1nlipEtSv}lUu<7KmHc*nesjM zY-IO;PBgd=-}Ov=f?0Yh_+n+OoLScc-?$uzRP(AHQ@KFezuUo&5D^|>P~t@1FSv$o z+#nX)Z4p#RX@eZ3U7@@RLD?XQbLI;JluE?UdP;v+ez&G!_AQ^~hxINfN(74VF7cO@ zt$=RojmvOVVz^~mXa+rpcg*{y5_=Tn?r{m1Hf&#mQBDGf`bPKc`aQr46-lT<;(-9^ z)eJBJ(=Zfl3z;tBPN&PKSA$oJyW6~^AO(%|Ek2De%Gn9k)=HKWEo?uUODF3OWv*V3 zw3GjY{wc9F=8>CSuT$5?c0C6rAY?Uj43z9K53Sc**jZEsRP@qg6f0nEOx0Ty8c~p5R=z+;nm3o4(DXN zgzcS1<67T|7UhT)NPn;i$%$1}`U1^h!YH4ECQNMX0&*f(FjbspY@{JY{uC6)C!#XzAttO&I zS(1-AcSGBLe{XljWd(>OzR^j)TM&IhZYHcQtNg_acaiRdB6eA!;=Tei#CMYapYt>$3dzN{3gY zzd6oMXNwcamw~;!1Uxx7>7*S%Lt3n(GNa}9ZVXi+{0jj?dNR>_?7rOo&T1jj39$7N zD8y)4iqA|bxh)}?dc*&@Ab17FWMTpc5~l>U-~6U?`zb2g1LFk%4(A&G%y}ct58^ok zfj{-vzi%J~8G!_sw-}S+tG+-=Ni$^vNE+}1@+qmkm9&uE{@IOz>5-c9XmOd;KA0ZPxLo zNzczb_CEV^dVgT+!+?2EUFpENHxGP&Ks~En7D+ER9iafARQw)EB!Fms4w-UF@DHKYQ)uYOU7_gDyv^XO^glS z5e_7g&?oO$92^D~J5Ll~unI$B#{A~6BMlDYQvZdoaYMmR8S;<}>_6HgfuQDnA-fgs z-#J1vs7GGqU{|>ZMZ@tBlQ^?d%|pl_Zpf@*&ms0vu+1%%m*?)Yf02waV`%*= zMaW_}W^Wfr5$da85&pjgYjo28mtc*>8rXLkF?Bt`TeeB>PX)AhmBzk4>r4u~TK!?$ zw4Kw7gjv1cP=2q`nq2j=XtY0;{O08VpjHLVwDxlk&HFa2R&6heFl-#;=XF2CrXPkN zozM2VL=X6KZ!;i)xrPSF(Lq5@b>G^r(z2wJR+p)sml~G6&GI}~CY#pIO)?*F?{Bq_ z+av})niM@4mOTuCjO~P~1f`pItO~R?GbHyCGy3a|=ro>((wNJF)6u0mpBG2VTTrHVirE-53kCC7ulDL4x3P$LnM#|D z*+6VAk4J7m#vRMf$iGot>Y}`2hQFXCS2(CLt`fGR0;4%^CQktYJEFlMPlIF5(EuVI zDBlTK$uphwt}mxfnYfv+ZvLFeNXbg4h3F{1wjLF4iOwN~C7`6#uXpvVXr>9Z04H;Ida z;RSiX_ByA#(a;fNUR}j^ zY&pt?k!!%#K>2kTZX0wG8uSI_-(H-+{foZs)|zem_hW{jCJzD6TL=0ocP-1Iz_`dJ zwo)oFDA2@QG<%}}h*IMGlu2w{VnHMzG+;>7BzqfJKWA34Y|tW!Fnp7q2+$qIE=*t^ z_M0Pmi|xJosFOk)n#ppBdwbauu#k#9**S@hqrf#DuZ(^7Y;`7K;WUxma4#_yDJ z$sBd8o(|~y`JgJmcc|h9lsF_QoxJYvP*X|4?ta~}%mm%#@tE1T-60D&&APD;Sn@BE z1;)ggrkZAiP64~RRPTDN)G~-n8k7tYU{>~-sy@|3^TOQM{TL3I@?l7jIc8SDNxh0# zBhuZg%j!HA{v$jj4&r7x{v0GAZqP^zQDI9Sr~vRd??CTkvBPO(MT3-# z4Iq~z@^X0);DUGk0&_4BkmvMY!CXO%lHv9|aC%7%Ko%8460W1DJpwT3*AiDrWY^rc zHVM>;DWSRm<(%5`e5g@FbGRcA?~e$Ss@=`qK<{FzsUIX7Xn)*8=rDlK(WQ)18 zSguu&!tL2tVr>rIy|h^8GyfaCgRv4su1cvSn=mMwBm1C$SISgqbDBD&9C$LJ@8u7n zkXj(QhtH!NrTSs$GKx}E(a(oG0-AgzR_R!tztCCC8P=yQcc&2)ikTHYu`E2;v)A~6 zBQx?eOA2bvn%uUpQFRruWkyS!6#;$3VbaFdqPt(yil9!A1u0V!UDUv5++VxJyNFtym3vfLsDS< z2MK!Oc9k48{cAHlJ%R;;4{a+mDJ~_WA%~BqIl%*Y!cw1+*g;i~mKp?qvaW0zK>ose zn>r=q0N#r$2Jjv&1_A-px(}IX*v>`eT{;USm_J=5n>leBZLf>SL9Y)cO_#v(wcfn-Z0PaoLFtDXRS!qJkHtTmP6sq$|c=u2_0xzl&LKvE7a)l0GX z5ykU8aeWK?mP%7=IP)cJ(VLD=3f0Vz_aH}zR8Nbo5Tb$2#WNq%|7qQklP?Z8K_)C5 zYH96WkUU1JJ&im{+3nfueas}(fFYvecr%R2Z<3Esq2nFP2kDNLeGgbMJSwcX)TJm> zu5sRE3_fVP2n_k?OS#XzrD@~aeOK@5xTIuQ>})yq(RZBwGrZBSKnPBU@T_2*2)jiM zS%&R27)5E9bk4N{XFa=4+0p1AN(^+cv)7!9w}t4;`+)}zfLyt8<+EKTZx4v!QDK(kVCR}mO@K0ZVQnv*nLf5 zV6V@dZ`%87(4HSHB&g=t{+2ZRdi=S)jTgTHpuC;4t^hi0QSE=utMw$zsb;0|LUd-a z{rIEe83)7l)*G|AA#u4ByW%;JXMvLl5Q=>-hEoK+UM#iMFXP$$uC?kKIWL5KCT);5 z(B_Ykzv@!)^KShv2pbUfA$k8aS`Z}_tgUU+fxdYs(bEimub86uD!(&aq74Y)s1qvU z>OANAl}(rsCW*9C@K`;e6xqA0MZym`{sD(=w~{d*x`<2?Z(7=sg8_xPHcSy=e-@OhAUN|Y%qof==EZjBy?juhGABV^<+oi*i)A8*bHUrS$1Hb8 zILkkznm?}xm*J1V&IXu5IwSESp86?2(CWB%QEgp?UUhsS1~*8V{VgNKIGh#J5R-l8 z3t6v!Wu;MMAS0_U5!gdtsL17^Zt`;^r=<5kS!t5ts!>1&;t3wkK!V?4?A@^1@H{L< zi9v7bfF+tMwKSBWpEF*q@!{aR^=yB zVT8n^B4PEGv0lo8xJP0WJN~!)#P^28pC_dJw>^F1HPD zM5#n+K}zcAa+zN^+Gv=i#NzFio++qp*Mfb$V(&m(r&Xh2*S3R29()wKRtUZf{XU83 zM`E3gci2F9`66&XV%yAEa_80@${YN4)2k5^hrdgEjAzSf*kGvr2Jj(AE0Q2rL>$D$ zbd;r;wgP?^s13Gah-b*#F>p!wp;U-j{t|w_0PT|dU%}#imnrI`(ygEhAlJOhsh!{S zN>6xWL6lfFqke;CfM+7}ym*w*E%x<ahezK?=^=PMBUz`EE}c# zFgaCsd({E4-e*2e@T-tF{QY$pEmm`!odlbnS(z&fjm=f}+TUgV6wBlbajP=bh?0hU zT`FJN!~IZx(y^?Zvh*>vxG-pkjP9kZS+B{peb9<(PsRB*CFlQkvT#c5NXLJioocZt!eocUtlA z76MxGL#VY7czc|ITI3+RiXmGad6I*GL!D8bco1nVas8dcqma^f1?Q9N1r?SrzAVW* zYIx16D^!#l^bzBOamfP>8v{s^i_0#8R=~XSn~)!l#TgEdy4r36GeebWt)0W4KpH}u zUR_WDaS1{DPMo`u->FCh&v2bocqZtHGUd?7J4uM4A`1Z;Y4^+%Kj6sRV%CH)%Hi)k zg}l^fCM9`ImNMj|P@0v0V`=tDB0`SJvb3||WL+$i%qoB`%puyopt}ybziOsOjzZe6 z)5DYn8c!S!f?qlDB=6dhA`%r)oYjuUihr&iWSM2mZvXz^42WALg6lvh3c-%BL1EJ} z@r|3mQs`{D`GoTP?m!~^Df3tSop!O+LC>cQod)w$=c$O#5 z&T5BY;`z7i3U&{J3~0`u#qcoD;~NcP)f_pIe3Y`i5^%=)$y{XmE)_2a9t4`s&rR3Mzo*^zLrlPMb8n5$uo1%WKK? z>lLBJwVs3*O{_iL)gKA#5DoEEGw+JZ9Qn;3zyI2JL_qRlvdQv?+eGM)3(eo$@jP<@|m;CCZOr6?Pkf{JX%{lhn(p7vyPQnHD2-Iky8 zV}qyLPNF>P%H3xpA*WP$nV|d!wu}ZP&|Ulu;g$>mnshcfI%I=U{R=t1RdHu1AUr3$ z#()O;B9;?hxQIZGqsffy>zzwPoAxbz_ShsiiSSwzHnmoBzmr z`}&0e#i3`)Irn~2hrL!4Ks}?aJW9yf#2lKbL(GeVzMj8FLBD52#%qQIUP|dk1Y)g< zJt|U+q#%*l&{gM|{Eqyj({}bm?oVr<_PU1OEmrqf(NdpojC-ffY=g_KwyEE>Uu5c3 zXF>Ycp0dOqZ5w_MaPMRBiW3c|2x-48)-T~NB&K{Fyc8Jv2fRdP%(bdBj$_f>088Tz zqAf48V(E6IhE3oMSZbU!Tg3{|JT7nqfMQIbbj+(O>xM&h`a>98e8Peb$U0T;-`D!` zlN6mzh@79O~Kwq@Xs!*lHdKm00`&cvCf~~neGi&-B5;wAu=|!gZKWW9Zb_B zga@>#-ump@@a~MDWNr8`oE($$e=t1$-_?V-X*aCzow|g6aUrqpvncC7pr^WvHXEqR z^s#8LreIpN;2`lKw1d_akiN$-^>#ZQU_Gy2h-s*mjJ}dE+(lZ)@(=DNDViHqNvx{@ zk%qOOIYYvzL7;J%P{QQ~uFcKG+tVj=%!zlydYH7<)C&`y1v>bbqRK!~|Jv%|pSoV{ zB}k=m4r5cTJjXN<&k^J&=YbuzeO;2iFPZ+q<+az9l^V?Rd$faO66wQpUU~iWU|I1( zFwlET59X#chP(Q)3mlrFvQ4oDTT1dEvi~PR;noh>JN*9^6vE?;4L(We>FQy2sv+#3 zUw~8lrnK18UCr(sCo)x${Jx(}Wny4Kh+UZ>F^lE=OrPqo#y&TvD2M>`*ZcH!BG-_8 zl}&wbTYsLB-=?7q8#Jnn$O+NHHhjM>VJf$iy-q9)>^`jaR`WLic<I3C5rug7WA|&Kun%{U^`(T zVymfTj5)uq3*k^liNklqNLAD1-fk$#j74jJfC?Vtv;>)WpLbO>y$_ zoU&JU<+K|GNc-<0)QOAbp;+1JJhoZ(IFEzhkO&KZ=CUMzoD*~YherUesqA@vOg1iFk zk?~f}AK3eM1OKXWvTDXA8wQM_a|q{W<`7-u0*u2$x`HoT2uHf-5Q})3g$1=hPe39W zI#~klT4V0Zz6m9AQJNNTEYm7=JwGrcWP8nsrtEKAx%RqEKD)us9&2~^&DCNyzg<`~Tfw!Rx%W$BqNEl* z4F(e+5O&yJNPFP;Z&N9<7j?e`ml^!@!>wvQ0gM&E$zfLIMB6Hf3PZEL5B2?3Y@Ae? zA>9JhtI%(#R2BO#Pv1TnX0sPcLq}+}iJL2ClDr z;)6T5H!ulL*i(n*2OQz%Z~>A};zP4CLxHI@fFK!(<0jdu9311Z&JoOg?&O=I zl*jaUFKm*yhuDkZr0WDH-` zYi`n0I2ku+O}phLnmmee?^{vOQ#zk0*a#$0 zKHL?rYxOBtQZin5ZtJo`rGBOe_OsZ%HCM?*#}Hntc~J~@3-B#U51KR9R4a@U8$SHF zBqYWE(D%CKa;l3+P`O8O>aYCCeHcNzA7fi!H|knVjWl9fBRfW?m*Q+~EY2jh@hMik ze<%TOEMMp_m@LHD@F7XI=Xh8RAPsb0#kpdZywIHG- zrNc9#=tf>P$1&{LP&oJA#cF@TNNkN7{7|x%jpxN2&BVJ&^fs*lr$87)d9>c>N-b^a z_R_syWxb(QOV}EmbLV>_?63zb#v$-u^`x&Q4qVW!51u2fmNNDz{|}ta_QD-v|kCL8q@5$f*d6yZg6p z<}cp5^MLW3awXla?)SJiJN782-rpR8ti-f-K0M_Yb9opV-#tXz0KlP3|52}Ymlu{p zH8I!!CjkDo@!tSAve)JB><1^H_p?h+66rYPRBDS;M0-%Ts)*Io6@CDl8$Z`8GxF{# z;2Y{?t||fjNiXYSw}mD4s$IkqeCT_=OIU1He?#$KY>JvJr6AyL8cQ@t1J*G>eA+KY z?QbS{?T&?5^Xs^&i;G!35Z!7`HipE*%4-{i;53WGcuY0F+4LOPN_gq@+Ot-cu85;1 zyu<5HsCLIu)6sU!efif$t|bc_aRU+%kwez+~R)oEf|K8or4B|e|LFd2VXbZFm4XlnEFYd5k*~9wT5R0+crDtS0 z+_|nNv~adg^~a&O);CA7rnC=Y#0cE123zK|_$FBk@<46XAxcS#KFI<+wf*6w0Jzio zc9z!;C^XPLz6;{3NHf$0QGshD3zm0Lu+R%=*=pp#fngjKuoL~v0_cT&Rix&ZhMYZl zQ2c2MutAzz9?1ey2-Ek3Y{Ca*UWTy_+`iJit;!J(D41LMMY>gjzBdc`fLVEO&KFbd z5n=|EWg%R7ErAI%?9FjOXkUQj>iq2Or~9Gd_aUSZ`< zS_W|}u6$^-?}me=1VM0&(f1z;a9S1pNVzP845*I8LWG{&!YSgE{PFFh_%^plmhiqg zH|(|dYi|X9IK|>V+h0ho^j34UuVO(_bu~qf9jtFQ_2$>CB(16W@TXv41Z(3?D;ELn z&KO5zy;=rn!N;QQWTzFcCiyN-_pgZUIsU*n-{?X&#Td#_3hIKWF+(q`H=o`~>eAm| zR+GGIr@5%X(CeSbZ2oK5Gv#S%SOG`+u?;TZg|&05Af_!aM4%B&c(>mu`&7vS3m@F( z{#Ya6pmS>RrA@_$SN(L!n;aoXTvU!EWnTC9xnsHDhQaJZ4!FcT1+xEe1IsP+fh|=E zLe+6-acV@y=`ZF+NOtNjG^^WYBySlhr9CfnadprHl{qqQ>23nm2DW|Zk7W^WyA&aT zkaOqHCzWM{xWMem%^l1bGZztoJ~xcc;Bm?#u>|B9k;7K;Fc7 zp>43=ekI3D=GP>^mH`oKU3&TfZ)SYbiyAm-Yd&nL&Nz7ZY;KXua4S_)JIGWmNCy9x z$x{crX!2oP|JNc>MU=5)icnAp{1hgP>f5ucnJ^jA4pA>avhC%*1&qa*>$~5!Y;z~P z0FP{UmSo3}LA!v+)7*p3>?)M34WZuhf^j=%y!N2LPTxvufxHi-(ZV$o`EHSR5!RMb z@3adO2|>~ss_ck2h!xrv!cp2w-Nj5+$aW*PE@dBeb z57Q*@jj-epu^Eot*Y#+<7<5BwPdC=z@64w3&xCK@%Y8QdlZuQRu$L~+&9n~- zkQQiIkD$fwX)nrF8e6-`v3x99xe^l18wV&A;EojeMcg)LL$m>}a!4|%P+b5lP`IjHXEW+@4GdlgF-h3+7oZ`m_%ZY)>u5(+IcBxBw}FD+T*gf=9I zX2$Mytuloe4y}u{=QqFBbV3Bh<&J;cTpv2?drZ#E%ahJS0Y==o^HsF)R^&m1EyH*@4+0my^|azi%ZJVY*J=xVGC>4H zF4^L=-{hTb?f;8Fr^r~W=S-{m^Wqg3Kg&Yo^pl+; zCN2Zb>PqjE75JxW8uieSi{hy4gl4|H-b0tQ#)q~c`R8j~s_=+zuc1SK9>=$WZ}+?0 z;nXi2_TMR;BQx(E@3u8^hNX+*xSa$t>2ZJ>rB7>$A6${Gbbug7cILj?Ng~O+-F5d4 z?Mlo1M=bsnh{gR3$WddMgZYT!1AhVvCXYdmg)RrE{LpaY&4YLXf(B4SYc7CQ$BHD` zFk?1AZIP@qOd8?Lb6$?YCdl=JSymZAs^qP3oJ>gC?8nYWHXNs)&FjF9>1@n-qA zq{|zV$7LRnZN`l2hmm~+Pb#ezUsXnPgYze4(UPBEx8OQrwyRI746s=W1?M3i{c-(T zeu=rio!T-sDSyAz-8hmT`t#Yz4i?lEwwQW@9AMWUzSL{MPN|wq5hSgB4u;&-?CS8$ z^R!(Ei{;MOdGsXZ&Mqo$X)byRsQ~=~o^#{SzX>T91$Mzah@a9t)t*|$DE#4+1bpF< zD7(~Z>Ot+P@VBymwCf)*P2=t9oyI5rDA(QF=9m_0M=1rTKUeup>pw*HhJ$%{CiFrs zByA}idMx3xBU~#jCmSf&LEMCm(dM^wd6=1YHsQIfePT<_d=>Q#V~{F%|(YdWUDY0(%SgOh(EDbil1{5SM<4uq7^O;?x^OMK@fqC* z7K=v5!Vngzw;A$D?EOXGF*I=XfbbaV>s_GhxLda=fXCoZuW`A^!RRl4ny2-?+g-#WV7MWu0WU3~AX_arKY$i>pSqDt zjkh=#{o81)h5e7%Up*;4U5^MwaRH&0ir8Kj0^;G)gl<`y_jOJQ@8CDPk)o>TGQ#XW zqZBR&U3ziwoXo*qXS4_KBTNQ=luJn7i`cc&C?Vl@Bbr<<| zN?B%SsF_`wmz1Yfj$45xGQU16Di`dJ%r<{uR-9kxefLDb667%{nqgvxFY#;@-rILO zLVw79V%fdWIRZK8QmrALLdbC*cEK)-z_}IUZ7(fQ6FDvTpHe%2MYKM1T~Kl50SkTM z&kz)Esx1~j>7Iv*N_^1DA(wM&W|Bi$=~Z+F(&dgz>`cWlDdddn(h^4iSg z8dWL5-^_=aB=*rA*W!j-49e6$j(H8t?YYh~$ra)dIlWNfgpeeTss@UZlEC|JT4voI zs~&>jAY{M0F9Z=%uA&|5Wq#D?>q0E{3OM*q%l%p?>?yD*{1)>D;BpogUIov zXo*@U@<8q?LU43jxNNiWe^Wdh%)L89l$uM_O?`WT=dYuhtBJq8+4L&>gv(~rF>4qs z=+kLbZ;9uH9O}JYKK?F(3$TcTI*b9yHo>pxXCdpp5k7)ISgsg~nO=aRwgWCC=nL(} z6mpsC1d=TBUu`FT{dh~ZeD%bso1vdRJ#2A-S!?@$T>1(!og~z{teKy1Q4MN@!-=M^+3ko6uQnF{KMw`e}{i)NA4ztPIgR16K&2N zUGW?anoT+b{sH(rVBShNEUh~^uRZlqeu7zhy>1aOfXgyo;C-7x4MZW0ia+RB0?geRvjA+PPf$3UC^ zqc~d6?FG#1#ytSwgCv)27|D9~=wA1??1nyhw1VoQK-K%3nrrbk{w7NwZew!i(mCS# zp{ucTzV2+YXuYH<)I)zrBT#AOS6ryNa|o+;d{iu{=zIlZTAquzH$5#cq$0nA^v^G! zLoI)Z>(m}6@|GCUyfq?Ef1ynD0k{o+c?>lVkPErHIyyL!=DoF4^1pZd9QNF z-WPdmJtfRvSl*azv|#I+$vt|OGaRcc(aT%2<(-`4tu<9~t?EX7hA=!c!MJ~2|6vUb-@PFYqirWTW8Gk86TSXl z3LEMkVWk$nN7E|aPpf#HFA17Y6I&EM(JyXdu*hJ|glG<4!p1X!831^0P5B5fgNEd- zUU2Ed9Nl}X&xfxp9ny?hoA>0{%|Al(A`4P}MU-VK(#crl?4^m49)?=diVB;ijOH2L zv)Zl2oi^{RTf+p-5Avo93Vz(Erp8rq*&yUKu}6!`ta^L6i56GcH&vOUd-BwkwvpF@ zo8fl*gPK$B$}cXr5g9dAB@uE0sjre&&-R6kuLaCM`oR@!X{AQL82@I6|@#SU&S?G?K>xbO6b3d&iq=BLXIds zf14J!Jd?#8?a_!TTApG5i2jv(QWz1kHZZJ}thtom=bB(VwrW2S!V+0Eo8zgJy6fEg z_1!b9sEk`3pY#ZfoWGEVMNypP5}q-S#X||=5uWUli28BQG|+Tz!NLJpMA^FcBrBwu zyRs06KDp8`B~Hi^GY-n)q{m*YB++2s^FESnZIB!)gssY(HR9pq9*C_h{EVm%Ci8lI z+9!DNivGF_D|n7Yss)*8VwV$Y3gi`_OTwM-GLY-Ghff#%(tji=ey7fDrB6_% ze;)l|ShrzhU)Ad&;t$z!PhLLOXi(kZYTeXi$#jW$a!KhVO=Y$Ai1Y7xcWWr>nT_p0 zh4)OGMC%36B%mSWoYwu?CZF^3Ti|!eVj~&&*6hX83{_$!tz^OT+2!*kc`i*i0M5I5 zJ}@$ns8_raZ*}s+$Y))7{52lPiRoih(xUGcQjZUpavDni1lwwznQec9b4lpts!Ya9 z3RNS?A?V>kgHC8?dE2^P!DTppwxbkBFYOmrD>jqNyjAeNC!zGdf#sD9kdHhXV$4DF z#&~+-w}*q^u8taQSWfqFtjt!|pf(^NDFy7hf z-iAA0$jONt(?C4G*HZt@MH*SisQ~G?!#r{HjWcdR%z?|^v{k%|#_LnlOzuj|FgLw} zNyZOZmJSx*l*%hWE7so`a&>n;LgU@IvOnhYdKa?b5WG!W>X6Zshg_%mfpc?jJVT^|Tnh|N5jK#5I6t zF=jjTy`q;DrY$fiO(}Kls4?+k4yvCt|4xj5=~snZHG>NUy&nv}9xLY0P%z-HC>8+D z^OmvBBE8V{@d0wEmEqL4Ib0uFwMlU-a7EQZWC?)j*5`m)*L_h-7BwWmtAWqw3Yq=;Da zGZbB?C*SmSx0Id^FX|3j%}+qS-q@|dkJ%nhYfLSAbkfD8u2cJ__$(?6KQe|(n3srx zR<9@ZcFcM}%$M4N>a`61ol{dbKa+h9f-L%Wov5{;aR!Z<# z;?*C8`@<;c8j#SMC65|4TiPl$$pk0i@_mMemc|Vls8~*loK(lpyl*s9-z34; z&u8MCY=$iUPLbYO$cV2HZuwm>fZuDx=y@`0mEs)P9s*_ppiBSlD1HAKd|Xq-JwUok zWY~nGp5<**C2Kd8)-r5zANs`T40O{uKnbPL`}7j;v8v0-?(NzJBXDX^OR3ECSS?ms z<2N@cM;L6bz|v<2!fN2pvaBbC(W8P+^^mpbeJhgByW0VX;;6 z)Xa>={bkm?{25}z$3CL~g{Q!krSPoaH^20E6LzwUPyg;@{CeE4&ZpJ@+|mwfi7sAVNaWfel$+JK2(jl^M$CY#$yC5H*fF>i z_;9SwO?aShRaQp}EFI&G0I3()299h{gsrtVKKX); zVEl7CPQB}NNq51IoV-#Qiphih1Bh;&{G9WvMc?osxbkM-L#>@8H>EdA)(Y}=xyA-| zP3YgGAZecn4!uN%GR=9i5h=X$Vz88u0HhArx}W;xp$0t?A8(him?4v4@gu{f%4JJ8 zSZp&m2cCqI&$kxyxeg1j1S{AKBBZW8&(~Lh6#s?%3t1sSF%eCMD2=?h9B`Y(&Y)zz zX#+7YF3G7GwB8~{?aig$SKCQ52ejn9zfyUg47a2VT$2jd>C2eXZfn$&_IsJlhfZEA z6uxRod2w*>g%5mNq$MvOiYC2jaG6upfX;goXnk8p7HZ}Zb3f`>C4Y_5 zj&?`x$nFeEBO<%*G4)M4Pfj*I;x}p{#B(5bn3pT~^*n#Rm{K5GwhJK=8$(uo#T zq3sOj;a!k~siIv2?{|sGk7R`CEKgJ}?m@;Fd!{a?3kim!A1_;a-Yb*I*C|fC6ZE5< z9(;FQH>r&}w~c&;-W!r~ytCf+v8#!#q*YO%lN1JlCmTic>*_Sgyn5v%<_)zT4}Tns zT+->B!jp5H=%bSEA>=ff(;An@QdU}M51)yanr|Ig#t$0TJIQ8WLyZ~cD%|*uiH(y> zrEvU&kV=reBue8zn@xS1jzK)UXhoZM?^-;sc0uKt^kb-w>+$U{fm6b%6Bw3Yu$bkM zV3oE!d6}5&ytO2ND!@hG>(>l2QEw>;MYrzGs$jl_zxV7P;(pHjRivMzw_f^fN`?EM zN(iue)>UAeqU=6wwO5Mxov?>`&#|-p$s@|y3+XU<-D~qll)4S+cleFs-flO1-1%2s zd2^1->*J;mLgajGgiTHu;MZ+n`nMe0ED4nP&iMq5nu(J9(6!lW5aHXIsDyy2hZG$YIh|rMcEhhA<+8|QKlT?_PkHuv zg1(Ev32)a=0tAD~BB|A5addB+BaiS-^w?iY4$gCR8_5f)-FuFUxOILgEe{EK6=kT< zb${mkU6W@NWFLE=AnJnqU0pB|qJGL|>!>2zsun(uzpXvrTDoR6ahKmv{@#mIPu*mN zNo9AszxoXOh6(UvMKguxl|qEpMn{|kX%CVvM>?K;?HkJL>XIM1J)@ciInj+guw#WwkT zH*`~Ik7@CXBDF)76hh>8HJ*_^+X9QN?!JA~We;`~9l{1C^-b^46FI_ogv-NVW?SB>MsT{ydao5=)DOKT0WySkPbgOB^`Eg|lB!l{G;qSN%v z9P4wD?q{wdo>Mwpe++MFbT&E75%Ol}0}spU&|s(4y=hl8`*JFOWgtK7s=4@(7Bg0| zfo;Z+l`jPMYllPTis3!eHfyx}UK=FqBzDkzUKuubFuHF$>@h-}pU}Fa)6{vNYaFB0 z3(;S2GIYM_a`Yr}p9wZ$X;4vC=8e_>>o^T|loYIkCUUmsn8ll(`Zq6rq%nK*?OpFO;rKrr}qzgmPWc6qzT(a1?WnUe5xliZuzm< z1DBCV)DHMw=-_es{LrI6ZHA@#xrLm9p}kyvux-}fu4gAG0%Fgy2-kgfke8f?r{@B6 zn)>H=CKrzG>ztG!welugBqO`E{5Y)Gv#@Z%_cxCP1#{<40rmf~#qm`)><-(N-L{9; z=h;2TmwE*2y%*0+q`0JmdAV7mJ|gV-!`Iu5xnT2cU!N_R&-gJC#pX^-nxtl|$&fXd znL*VO7wi&cTy%tP}9NbwOn!T`uy{Nf>SSj7x(@3_jZ&w90I>r{v{H*ThhDhr`dwa*u5;1 zi?%7urA~T3@%x7=46!ePd{*0Y3!@LmKg?a;?HuPJHhm+dNe}M?JndvpX1o7 z`_)fn!tQ#f`%XBgE{aF6;)aZHZk_C7`$J~gti7F^ds zZO#gKkh&L%->ewH61tBjX!b3I2WJa9+0N0;_WmZ9Zy>2U0tcIiwuBq-{pdc+DytM` zv!;2sd1bs+|Er1E6BmkBnKy(!cbrR%zJ+#`>}29d{DPZOA@n1pxA9IZ#!fbBalSc! z>j@^I^1puuZ|nwq>Ux_lc5Y#b2cAM8lyHor z?k7IZuqmp{jkkDt$?_KCP>}MD^X4(sbIS4~i;&0A7pT;X^QsQIH&WrE`~~K91Iy1H z3)lIOP4p9_OD_*%z^lZxQ5OVu{CTO|W5i8VgG2WbQf9#{cu4rb8^zbpHEZZf6-FKw zPi(H)vPnk(w0QlfvCusO-BYCN>da_4P0&yrL{?(A)9=zSfx zzxNCN>y+5+XX?1jmf5$IgZ}y`Umu_2yfco?+i;o^o3zVLPmY={r-VH@vx>jEmi*_s zpM8%x6nhgPLsC;$w>-4zz}yRs(IjrJLMsHd{kD--VwJ-Bl|7JoQzr8_(#(0|OW?p~ zudG&Z-~_p}wA4as{gm|&YR4~Jd9(gwD&V^f9z$dP^BOzwl0N+yOB-JxZc4zeEtpE9{-t~*QI=3GFKNsNi AUjP6A literal 0 HcmV?d00001 diff --git a/assets/images/help/codespaces/turn-off-sync-dialog.png b/assets/images/help/codespaces/turn-off-sync-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd72a632cea4b6e7e6e598cd6f4eaeb9120e984 GIT binary patch literal 38070 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%0ACP>l||O_~mN-PS$PO`5OPQ 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 Date: Tue, 10 Jan 2023 16:23:58 +0100 Subject: [PATCH 22/41] Fix information about workflows for pull request from forks to private repositories (#33800) Co-authored-by: Guilherme Teixeira <4645845+gateixeira@users.noreply.github.com> --- .../developer-site/pull_request_forked_repos_link.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/data/reusables/developer-site/pull_request_forked_repos_link.md b/data/reusables/developer-site/pull_request_forked_repos_link.md index f590172b53..62bca220bb 100644 --- a/data/reusables/developer-site/pull_request_forked_repos_link.md +++ b/data/reusables/developer-site/pull_request_forked_repos_link.md @@ -12,11 +12,7 @@ For pull requests from a forked repository to the base repository, {% data varia When a first-time contributor submits a pull request to a public repository, a maintainer with write access may need to approve running workflows on the pull request. For more information, see "[Approving workflow runs from public forks](/actions/managing-workflow-runs/approving-workflow-runs-from-public-forks)." {% endif %} -{% note %} - -**Note:** Workflows do not run on private base repositories when you open a pull request from a forked repository. - -{% endnote %} +For pull requests from a forked repository to a private repository, workflows only run when they are enabled, see "[Enabling workflows for forks of private repositories](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-forks-of-private-repositories)." {% note %} From a272ceb73cc0f0f27ae106fe5677195d7032e8cc Mon Sep 17 00:00:00 2001 From: Sais <92322374+saisdavid@users.noreply.github.com> Date: Tue, 10 Jan 2023 10:26:33 -0600 Subject: [PATCH 23/41] update_and _clarify_ Copilot_Privacy_code_snippet_language_ (#33742) Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- .../github-copilot-for-business-privacy-statement.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/site-policy/privacy-policies/github-copilot-for-business-privacy-statement.md b/content/site-policy/privacy-policies/github-copilot-for-business-privacy-statement.md index 6f72d5e2ae..c51111da02 100644 --- a/content/site-policy/privacy-policies/github-copilot-for-business-privacy-statement.md +++ b/content/site-policy/privacy-policies/github-copilot-for-business-privacy-statement.md @@ -18,7 +18,7 @@ Copilot for Business relies on file content and additional data to work. It coll When you use Copilot for Business it will collect usage information about events generated when interacting with the IDE or editor. These events include user edit actions like completions accepted and dismissed, and error and general usage data to identify metrics like latency and features engagement. This information may include personal data, such as pseudonymous identifiers. ## Code Snippets Data -Copilot for Business does not retain any Code Snippets Data (source code that you are editing, related files and other files open in the same IDE or editor, URLs of repositories and files paths). +GitHub Copilot transmits snippets of your code from your IDE to GitHub to provide Suggestions to you. Code snippets data is only transmitted in real-time to return Suggestions, and is discarded once a Suggestion is returned. Copilot for Business does not retain any Code Snippets Data. ## How is data in Copilot for Business used and shared? User Engagement Data is used by GitHub, Microsoft, and OpenAI to provide the service and to enable improvements. @@ -32,6 +32,5 @@ Such uses may include: ## How can users of Copilot for Business control use of their data? User engagement data (which includes pseudonymous identifiers and general usage data), is required for the use of GitHub Copilot and will continue to be collected, processed, and shared with Microsoft and OpenAI when you use GitHub Copilot. -### Copilot for Business does not collect any Code Snippets Data. For more information on how GitHub processes and uses personal data, please see the [GitHub Privacy Statement](/site-policy/privacy-policies/github-privacy-statement). From 3a8497cd3d0be130e2ed7d8d0905fe1a9e4c049b Mon Sep 17 00:00:00 2001 From: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Date: Tue, 10 Jan 2023 16:31:28 +0000 Subject: [PATCH 24/41] Unify language around API terminology for Users (#33661) --- content/rest/users/blocking.md | 5 +++-- content/rest/users/emails.md | 6 ++---- content/rest/users/followers.md | 4 ++-- content/rest/users/gpg-keys.md | 6 +++--- content/rest/users/index.md | 2 +- content/rest/users/keys.md | 4 ++-- content/rest/users/ssh-signing-keys.md | 4 ++-- content/rest/users/users.md | 8 ++------ data/reusables/user-settings/user-api.md | 2 +- 9 files changed, 18 insertions(+), 23 deletions(-) diff --git a/content/rest/users/blocking.md b/content/rest/users/blocking.md index 62cae74330..e72841a089 100644 --- a/content/rest/users/blocking.md +++ b/content/rest/users/blocking.md @@ -1,6 +1,6 @@ --- title: Blocking users -intro: '' +intro: Use the REST API to manage blocked users. versions: fpt: '*' ghec: '*' @@ -9,6 +9,7 @@ topics: miniTocMaxHeadingLevel: 3 allowTitleToDifferFromFilename: true --- -## About the Blocking users API + +## About blocking users {% data reusables.user-settings.user-api %} diff --git a/content/rest/users/emails.md b/content/rest/users/emails.md index e669b2b33f..4ffa41a10a 100644 --- a/content/rest/users/emails.md +++ b/content/rest/users/emails.md @@ -1,6 +1,6 @@ --- title: Emails -intro: '' +intro: Use the REST API to manage email addresses of authenticated users. versions: fpt: '*' ghes: '*' @@ -10,8 +10,6 @@ topics: miniTocMaxHeadingLevel: 3 --- -## About the Emails API - -Management of email addresses via the API requires that you authenticate through basic auth, or through OAuth with a correct scope for the endpoint. +## About email administration {% data reusables.user-settings.user-api %} diff --git a/content/rest/users/followers.md b/content/rest/users/followers.md index 798a9113e4..cf303c8dc7 100644 --- a/content/rest/users/followers.md +++ b/content/rest/users/followers.md @@ -1,6 +1,6 @@ --- title: Followers -intro: '' +intro: Use the REST API to get information about followers of authenticated users. versions: fpt: '*' ghes: '*' @@ -11,6 +11,6 @@ topics: miniTocMaxHeadingLevel: 3 --- -## About the Followers API +## About follower administration {% data reusables.user-settings.user-api %} diff --git a/content/rest/users/gpg-keys.md b/content/rest/users/gpg-keys.md index f57573e9d0..4dd45e14a0 100644 --- a/content/rest/users/gpg-keys.md +++ b/content/rest/users/gpg-keys.md @@ -1,6 +1,6 @@ --- title: GPG Keys -intro: '' +intro: Use the REST API to manage GPG keys of authenticated users. versions: fpt: '*' ghes: '*' @@ -11,8 +11,8 @@ topics: miniTocMaxHeadingLevel: 3 --- -## About the User GPG keys API +## About user GPG key administration -The data returned in the `public_key` response field is not a GPG formatted key. When a user uploads a GPG key, it is parsed and the cryptographic public key is extracted and stored. This cryptographic key is what is returned by the APIs on this page. This key is not suitable to be used directly by programs like GPG. +The data returned in the `public_key` response field is not a GPG formatted key. When a user uploads a GPG key, it is parsed and the cryptographic public key is extracted and stored. This cryptographic key is what the endpoints in this category will return. This key is not suitable for direct use in programs such as GPG. {% data reusables.user-settings.user-api %} diff --git a/content/rest/users/index.md b/content/rest/users/index.md index 9fee33defb..d6fb3878a8 100644 --- a/content/rest/users/index.md +++ b/content/rest/users/index.md @@ -1,6 +1,6 @@ --- title: Users -intro: The Users API allows to get public and private information about the authenticated user. +intro: Use the REST API to get public and private information about authenticated users. redirect_from: - /v3/users - /rest/reference/users diff --git a/content/rest/users/keys.md b/content/rest/users/keys.md index 45b91e5947..58a377aca9 100644 --- a/content/rest/users/keys.md +++ b/content/rest/users/keys.md @@ -1,6 +1,6 @@ --- title: Git SSH Keys -intro: '' +intro: Use the REST API to manage Git SSH keys of authenticated users. versions: fpt: '*' ghes: '*' @@ -12,6 +12,6 @@ miniTocMaxHeadingLevel: 3 allowTitleToDifferFromFilename: true --- -## About the User Git SSH keys API +## About Git SSH key administration {% data reusables.user-settings.user-api %} diff --git a/content/rest/users/ssh-signing-keys.md b/content/rest/users/ssh-signing-keys.md index f72e3a4447..b3abec7312 100644 --- a/content/rest/users/ssh-signing-keys.md +++ b/content/rest/users/ssh-signing-keys.md @@ -1,6 +1,6 @@ --- title: SSH signing keys -intro: '' +intro: Use the REST API to manage SSH signing keys of authenticated users. versions: fpt: '*' ghes: '>=3.7' @@ -11,6 +11,6 @@ miniTocMaxHeadingLevel: 3 allowTitleToDifferFromFilename: true --- -## About the User SSH signing keys API +## About SSH signing key administration {% data reusables.user-settings.user-api %} diff --git a/content/rest/users/users.md b/content/rest/users/users.md index badba35912..2b0eb5b095 100644 --- a/content/rest/users/users.md +++ b/content/rest/users/users.md @@ -1,6 +1,6 @@ --- title: Users -intro: The Users API allows to get public and private information about the authenticated user. +intro: Use the REST API to get public and private information about authenticated users. versions: fpt: '*' ghes: '*' @@ -9,8 +9,4 @@ versions: topics: - API miniTocMaxHeadingLevel: 3 ---- - -## About the Users API - -{% data reusables.user-settings.user-api %} +--- \ No newline at end of file diff --git a/data/reusables/user-settings/user-api.md b/data/reusables/user-settings/user-api.md index 06882c6c19..252737fbc1 100644 --- a/data/reusables/user-settings/user-api.md +++ b/data/reusables/user-settings/user-api.md @@ -1 +1 @@ -Many of the resources on this API provide a shortcut for getting information about the currently authenticated user. If a request URL does not include a `{username}` parameter then the response will be for the logged in user (and you must pass [authentication information](/rest/overview/resources-in-the-rest-api#authentication) with your request).{% ifversion fpt or ghes or ghec %} Additional private information, such as whether a user has two-factor authentication enabled, is included when authenticated through basic auth or OAuth with the `user` scope.{% endif %} +If a request URL does not include a `{username}` parameter then the response will be for the signed-in user (and you must pass [authentication information](/rest/overview/resources-in-the-rest-api#authentication) with your request).{% ifversion fpt or ghes or ghec %} Additional private information, such as whether a user has two-factor authentication enabled, is included when authenticated through Basic Authentication or OAuth with the `user` scope.{% endif %} \ No newline at end of file From 3c0f62380173178d3457a7e5bf343de1ed4bd201 Mon Sep 17 00:00:00 2001 From: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Date: Tue, 10 Jan 2023 16:31:34 +0000 Subject: [PATCH 25/41] Unify language around API terminology for SCIM (#33666) Co-authored-by: Sarita Iyer <66540150+saritai@users.noreply.github.com> --- content/rest/scim.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/rest/scim.md b/content/rest/scim.md index cc680f5db1..6469227495 100644 --- a/content/rest/scim.md +++ b/content/rest/scim.md @@ -1,6 +1,6 @@ --- title: SCIM -intro: You can control and manage your GitHub organization members access using SCIM API. +intro: Use the REST API to control and manage your GitHub organization members access with SCIM. versions: ghec: '*' topics: @@ -10,23 +10,23 @@ redirect_from: - /rest/reference/scim --- -## About the SCIM API +## About SCIM ### SCIM Provisioning for Organizations -The SCIM API is used by SCIM-enabled Identity Providers (IdPs) to automate provisioning of {% data variables.product.product_name %} organization membership. The {% ifversion fpt or ghec %}{% data variables.product.prodname_dotcom %}{% else %}{% data variables.product.product_name %}{% endif %} API is based on version 2.0 of the [SCIM standard](http://www.simplecloud.info/). The {% data variables.product.product_name %} SCIM endpoint that an IdP should use is: `{% data variables.product.api_url_code %}/scim/v2/organizations/{org}/`. +These endpoints are used by SCIM-enabled Identity Providers (IdPs) to automate provisioning of {% data variables.product.product_name %} organization membership and are based on version 2.0 of the [SCIM standard](http://www.simplecloud.info/). IdPs should use the base URL `{% data variables.product.api_url_code %}/scim/v2/organizations/{org}/` for {% data variables.product.product_name %} SCIM endpoints. {% note %} **Notes:** - - The SCIM API is available only for individual organizations that use [{% data variables.product.prodname_ghe_cloud %}](/billing/managing-billing-for-your-github-account/about-billing-for-github-accounts) with [SAML SSO](/rest/overview/other-authentication-methods#authenticating-for-saml-sso) enabled. For more information about SCIM, see "[About SCIM for organizations](/enterprise-cloud@latest/organizations/managing-saml-single-sign-on-for-your-organization/about-scim-for-organizations)." - - The SCIM API cannot be used with an enterprise account or with an {% data variables.enterprise.prodname_emu_org %}. + - These endpoints are only available for individual organizations that use [{% data variables.product.prodname_ghe_cloud %}](/billing/managing-billing-for-your-github-account/about-billing-for-github-accounts) with [SAML SSO](/rest/overview/other-authentication-methods#authenticating-for-saml-sso) enabled. For more information about SCIM, see "[About SCIM for organizations](/enterprise-cloud@latest/organizations/managing-saml-single-sign-on-for-your-organization/about-scim-for-organizations)." + - These endpoints cannot be used with an enterprise account or with an {% data variables.enterprise.prodname_emu_org %}. {% endnote %} -### Authenticating calls to the SCIM API +### Authentication -You must authenticate as an owner of a {% data variables.product.product_name %} organization to use its SCIM API. The API expects an [OAuth 2.0 Bearer](/developers/apps/authenticating-with-github-apps) token to be included in the `Authorization` header. If you use a {% data variables.product.pat_v1 %} for authentication, it must have the `admin:org` scope and you must also [authorize it for use with your SAML SSO organization](/github/authenticating-to-github/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on). +You must authenticate as an owner of a {% data variables.product.product_name %} organization to use these endpoints. The REST API expects an [OAuth 2.0 Bearer](/developers/apps/authenticating-with-github-apps) token to be included in the `Authorization` header. If you use a {% data variables.product.pat_v1 %} for authentication, it must have the `admin:org` scope and you must also [authorize it for use with your SAML SSO organization](/github/authenticating-to-github/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on). ### Mapping of SAML and SCIM data @@ -46,7 +46,7 @@ Name | Type | Description {% note %} -**Note:** Endpoint URLs for the SCIM API are case sensitive. For example, the first letter in the `Users` endpoint must be capitalized: +**Note:** These endpoints are case sensitive. For example, the first letter in the `Users` endpoint must be capitalized: ```shell GET /scim/v2/organizations/{org}/Users/{scim_user_id} From 083dc549ea110f342bd33566166a0bd8f2703ba7 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 17:55:17 +0100 Subject: [PATCH 26/41] @github/failbot@0.8.2 (#33853) --- package-lock.json | 11 +++++++---- package.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 87553fcae0..2cf362c8ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "license": "(MIT AND CC-BY-4.0)", "dependencies": { "@elastic/elasticsearch": "7.11.0", - "@github/failbot": "0.8.0", + "@github/failbot": "0.8.2", "@primer/behaviors": "^1.3.1", "@primer/css": "^20.2.4", "@primer/octicons": "17.10.1", @@ -2127,8 +2127,9 @@ } }, "node_modules/@github/failbot": { - "version": "0.8.0", - "license": "MIT", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@github/failbot/-/failbot-0.8.2.tgz", + "integrity": "sha512-F3aU2OV5gZROzl1oF8G2GqYVG7OFekFZlzb4xAvq6mm47/rlYQsmj1vVRuxwO/9fhOb6669ys/gSasJRtrwmKQ==", "engines": { "node": ">= 14.x", "npm": ">= 7.x" @@ -21882,7 +21883,9 @@ } }, "@github/failbot": { - "version": "0.8.0" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@github/failbot/-/failbot-0.8.2.tgz", + "integrity": "sha512-F3aU2OV5gZROzl1oF8G2GqYVG7OFekFZlzb4xAvq6mm47/rlYQsmj1vVRuxwO/9fhOb6669ys/gSasJRtrwmKQ==" }, "@graphql-inspector/core": { "version": "3.1.2", diff --git a/package.json b/package.json index 87e535dbdc..6324c6f0f9 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ ], "dependencies": { "@elastic/elasticsearch": "7.11.0", - "@github/failbot": "0.8.0", + "@github/failbot": "0.8.2", "@primer/behaviors": "^1.3.1", "@primer/css": "^20.2.4", "@primer/octicons": "17.10.1", From 99b477478ade52d664320cbcbd2a221a82bb92f3 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 17:56:17 +0100 Subject: [PATCH 27/41] correct some featuredLinks (I) (#33806) --- content/account-and-profile/index.md | 15 +++++++-------- content/admin/index.md | 20 ++++++++++---------- content/education/index.md | 3 +-- content/get-started/index.md | 16 ++++++++-------- content/index.md | 5 ++--- tests/content/featured-links.js | 2 +- 6 files changed, 29 insertions(+), 32 deletions(-) diff --git a/content/account-and-profile/index.md b/content/account-and-profile/index.md index e7236a711a..073873a0b0 100644 --- a/content/account-and-profile/index.md +++ b/content/account-and-profile/index.md @@ -6,21 +6,21 @@ introLinks: quickstart: /get-started/onboarding/getting-started-with-your-github-account featuredLinks: guides: - - /account-and-profile/setting-up-and-managing-your-github-user-account/managing-user-account-settings/changing-your-github-username - - '{% ifversion ghae %}/account-and-profile/setting-up-and-managing-your-github-user-account/managing-user-account-settings/about-your-personal-dashboard{% endif %}' + - /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-personal-account-settings/changing-your-github-username + - '{% ifversion ghae %}/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-personal-account-settings/about-your-personal-dashboard{% endif %}' - /account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme - '{% ifversion ghae %}/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile{% endif %}' - /account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/about-notifications popular: - - /account-and-profile/setting-up-and-managing-your-github-user-account/managing-user-account-settings/managing-your-theme-settings - - /account-and-profile/setting-up-and-managing-your-github-user-account/managing-email-preferences/setting-your-commit-email-address - - /account-and-profile/setting-up-and-managing-your-github-user-account/managing-access-to-your-personal-repositories/inviting-collaborators-to-a-personal-repository + - /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-personal-account-settings/managing-your-theme-settings + - /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address + - /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/inviting-collaborators-to-a-personal-repository - /account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications guideCards: - /account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/why-are-my-contributions-not-showing-up-on-my-profile - /account-and-profile/managing-subscriptions-and-notifications-on-github/viewing-and-triaging-notifications/managing-notifications-from-your-inbox - - /account-and-profile/setting-up-and-managing-your-github-user-account/managing-email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address - - '{% ifversion ghes or ghae %}/account-and-profile/setting-up-and-managing-your-github-user-account/managing-user-account-settings/managing-the-default-branch-name-for-your-repositories{% endif %}' + - /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address + - '{% ifversion ghes or ghae %}/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-personal-account-settings/managing-the-default-branch-name-for-your-repositories{% endif %}' changelog: label: 'profiles, github-themes, notifications' versions: @@ -41,4 +41,3 @@ children: - /setting-up-and-managing-your-github-profile - /managing-subscriptions-and-notifications-on-github --- - diff --git a/content/admin/index.md b/content/admin/index.md index 5a846b0799..09e5445a53 100644 --- a/content/admin/index.md +++ b/content/admin/index.md @@ -70,12 +70,12 @@ changelog: label: enterprise featuredLinks: guides: - - '{% ifversion ghae %}/admin/user-management/auditing-users-across-your-enterprise{% endif %}' + - '{% ifversion ghae %}/admin/user-management/managing-users-in-your-enterprise/auditing-users-across-your-enterprise{% endif %}' - /admin/identity-and-access-management/managing-iam-for-your-enterprise/about-authentication-for-your-enterprise - /admin/policies/enforcing-policies-for-your-enterprise/about-enterprise-policies - '{% ifversion ghae %}/admin/configuration/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list{% endif %}' - - '{% ifversion ghes %}/admin/configuration/configuring-backups-on-your-appliance{% endif %}' - - '{% ifversion ghes %}/admin/enterprise-management/creating-a-high-availability-replica{% endif %}' + - '{% ifversion ghes %}/admin/configuration/configuring-your-enterprise/configuring-backups-on-your-appliance{% endif %}' + - '{% ifversion ghes %}/admin/enterprise-management/configuring-high-availability/creating-a-high-availability-replica{% endif %}' - '{% ifversion ghes %}/admin/overview/about-upgrades-to-new-releases{% endif %}' - '{% ifversion ghec %}/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise{% endif %}' - '{% ifversion ghec %}/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise{% endif %}' @@ -83,16 +83,16 @@ featuredLinks: - '{% ifversion ghes %}/admin/github-actions/getting-started-with-github-actions-for-github-enterprise-server{% endif %}' - '{% ifversion ghes %}/admin/packages/getting-started-with-github-packages-for-your-enterprise{% endif %}' - '{% ifversion ghes %}/admin/configuration/configuring-advanced-security-features{% endif %}' - - '{% ifversion ghae %}/admin/configuration/initializing-github-ae{% endif %}' - - '{% ifversion ghae %}/admin/user-management/customizing-user-messages-for-your-enterprise{% endif %}' - - '{% ifversion ghae %}/admin/github-actions/getting-started-with-github-actions-for-github-ae{% endif %}' - - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-github-actions-policies-for-your-enterprise{% endif %}' - - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-advanced-security-in-your-enterprise{% endif %}' + - '{% ifversion ghae %}/admin/configuration/configuring-your-enterprise/initializing-github-ae{% endif %}' + - '{% ifversion ghae %}/admin/user-management/managing-users-in-your-enterprise/customizing-user-messages-for-your-enterprise{% endif %}' + - '{% ifversion ghae %}/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-github-actions-for-github-ae{% endif %}' + - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise{% endif %}' + - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise{% endif %}' - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise{% endif %}' popular: - /admin/overview/about-github-enterprise-server - '{% ifversion ghae %}/admin/release-notes{% endif %}' - - '{% ifversion ghes %}/github/getting-started-with-github/setting-up-a-trial-of-github-enterprise-server{% endif %}' + - '{% ifversion ghes %}/get-started/signing-up-for-github/setting-up-a-trial-of-github-enterprise-server{% endif %}' - '{% ifversion ghes %}/admin/installation{% endif %}' - '{% ifversion ghae %}/admin/identity-and-access-management/configuring-authentication-and-provisioning-for-your-enterprise-using-azure-ad{% endif %}' - '{% ifversion ghae %}/billing/managing-billing-for-your-github-account/about-billing-for-your-enterprise{% endif %}' @@ -104,7 +104,7 @@ featuredLinks: - '{% ifversion ghec %}/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/about-the-audit-log-for-your-enterprise{% endif %}' - '{% ifversion ghec %}/admin/monitoring-activity-in-your-enterprise/exploring-user-activity/managing-global-webhooks{% endif %}' - /billing/managing-your-license-for-github-enterprise/using-visual-studio-subscription-with-github-enterprise/setting-up-visual-studio-subscription-with-github-enterprise - - /admin/enterprise-support/about-github-enterprise-support + - /support/learning-about-github-support/about-github-support layout: product-landing versions: ghec: '*' diff --git a/content/education/index.md b/content/education/index.md index 9cbd028acd..5770c7f680 100644 --- a/content/education/index.md +++ b/content/education/index.md @@ -10,7 +10,7 @@ featuredLinks: - /education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher - /education/explore-the-benefits-of-teaching-and-learning-with-github-education/use-github-at-your-educational-institution guideCards: - - /github/getting-started-with-github/signing-up-for-a-new-github-account + - /get-started/signing-up-for-github/signing-up-for-a-new-github-account - /github/getting-started-with-github/git-and-github-learning-resources - /education/manage-coursework-with-github-classroom/basics-of-setting-up-github-classroom popular: @@ -31,4 +31,3 @@ children: - /manage-coursework-with-github-classroom - /guides --- - diff --git a/content/get-started/index.md b/content/get-started/index.md index 9b3f1cb3a5..1eb87f9120 100644 --- a/content/get-started/index.md +++ b/content/get-started/index.md @@ -26,7 +26,7 @@ introLinks: quickstart: /get-started/quickstart featuredLinks: guides: - - /github/getting-started-with-github/githubs-products + - /get-started/learning-about-github/githubs-products - /get-started/onboarding/getting-started-with-your-github-account - /get-started/onboarding/getting-started-with-github-team - /get-started/onboarding/getting-started-with-github-enterprise-cloud @@ -34,16 +34,16 @@ featuredLinks: - /get-started/onboarding/getting-started-with-github-ae - /get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/quickstart-for-writing-on-github popular: - - /github/getting-started-with-github/signing-up-for-a-new-github-account + - /get-started/signing-up-for-github/signing-up-for-a-new-github-account - /get-started/quickstart/hello-world - - /github/getting-started-with-github/set-up-git + - /get-started/quickstart/set-up-git - /get-started/learning-about-github/about-versions-of-github-docs - - /github/getting-started-with-github/github-glossary - - /github/getting-started-with-github/keyboard-shortcuts + - /get-started/quickstart/github-glossary + - /get-started/using-github/keyboard-shortcuts guideCards: - - /github/getting-started-with-github/types-of-github-accounts - - /github/getting-started-with-github/finding-ways-to-contribute-to-open-source-on-github - - /github/getting-started-with-github/troubleshooting-connectivity-problems + - /get-started/learning-about-github/types-of-github-accounts + - /get-started/exploring-projects-on-github/finding-ways-to-contribute-to-open-source-on-github + - /get-started/using-github/troubleshooting-connectivity-problems topics: - Pull requests - Issues diff --git a/content/index.md b/content/index.md index 255e595884..259600b4e7 100644 --- a/content/index.md +++ b/content/index.md @@ -3,9 +3,9 @@ title: '{% data variables.product.product_name %}{% ifversion fpt or ghec%}.com{ featuredLinks: gettingStarted: - /get-started/quickstart/set-up-git - - /github/authenticating-to-github/connecting-to-github-with-ssh + - /authentication/connecting-to-github-with-ssh - /repositories/creating-and-managing-repositories - - /github/writing-on-github/basic-writing-and-formatting-syntax + - /get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax popular: - /pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests - /authentication @@ -150,4 +150,3 @@ externalProducts: href: 'https://docs.npmjs.com/' external: true --- - diff --git a/tests/content/featured-links.js b/tests/content/featured-links.js index 99991569e5..cbe2135a87 100644 --- a/tests/content/featured-links.js +++ b/tests/content/featured-links.js @@ -34,7 +34,7 @@ describe('featuredLinks', () => { const $featuredLinks = $('[data-testid=article-list] a') expect($featuredLinks.length > 0).toBeTruthy() expect($featuredLinks.eq(0).attr('href')).toBe( - `/en/enterprise-server@${enterpriseServerReleases.latest}/github/getting-started-with-github/githubs-products` + `/en/enterprise-server@${enterpriseServerReleases.latest}/get-started/learning-about-github/githubs-products` ) expect($featuredLinks.eq(0).children('h3').text().startsWith('GitHub’s products')).toBe(true) expect( From f7d21feb8e3850512155f95fe039070c5539283e Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 18:05:48 +0100 Subject: [PATCH 28/41] custom tests matrix by repository (#33859) --- .github/workflows/test.yml | 42 +++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb8adab9ea..da61de08d3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,8 +27,36 @@ env: ENABLE_SEARCH_RESULTS_PAGE: true jobs: - test: + figureOutMatrix: if: github.repository == 'github/docs-internal' || github.repository == 'github/docs' + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.result }} + steps: + - uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 + id: set-matrix + with: + script: | + // We only want to run the 'translations' suite when we know + // we're on the private docs-internal repo because only that + // one has ability to clone the remote (private) translations + // repos. + const all = [ + 'content', + 'graphql', + 'meta', + 'rendering', + 'routing', + 'unit', + 'linting', + ]; + if (context.payload.repository.full_name === 'github/docs-internal') { + all.push('translations'); + } + return all; + + test: + needs: figureOutMatrix # Run on ubuntu-20.04-xl if the private repo or ubuntu-latest if the public repo # See pull # 17442 in the private repo for context runs-on: ${{ fromJSON('["ubuntu-latest", "ubuntu-20.04-xl"]')[github.repository == 'github/docs-internal'] }} @@ -36,17 +64,7 @@ jobs: strategy: fail-fast: false matrix: - test-group: - [ - content, - graphql, - meta, - rendering, - routing, - unit, - linting, - translations, - ] + test-group: ${{ fromJSON(needs.figureOutMatrix.outputs.matrix) }} steps: - name: Install a local Elasticsearch for testing # For the sake of saving time, only run this step if the test-group From fdad45abd2d5d3882c33a33e46852a3ec0191b09 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 18:08:05 +0100 Subject: [PATCH 29/41] no longer need to delete old translations dir (#33820) From 4ffe7cf9caf5e8a9bc788dd838ceb8481e6a61bb Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 18:26:45 +0100 Subject: [PATCH 30/41] Notice product landing pages too (#33833) --- .../content-changes-table-comment.js | 50 ++++++++++++------- .../content-changes-table-comment.yml | 1 + content/codespaces/index.md | 1 - script/content-changes-table-comment.js | 38 ++++++++++++++ 4 files changed, 71 insertions(+), 19 deletions(-) create mode 100755 script/content-changes-table-comment.js diff --git a/.github/actions-scripts/content-changes-table-comment.js b/.github/actions-scripts/content-changes-table-comment.js index 9e4e77960f..b27a8f171b 100755 --- a/.github/actions-scripts/content-changes-table-comment.js +++ b/.github/actions-scripts/content-changes-table-comment.js @@ -28,50 +28,58 @@ const MAX_COMMENT_SIZE = 125000 const PROD_URL = 'https://docs.github.com' -run() +// When this file is invoked directly from action as opposed to being imported +if (import.meta.url.endsWith(process.argv[1])) { + const owner = context.repo.owner + const repo = context.payload.repository.name + const baseSHA = context.payload.pull_request.base.sha + const headSHA = context.payload.pull_request.head.sha -async function run() { const isHealthy = await waitUntilUrlIsHealthy(new URL('/healthz', APP_URL).toString()) if (!isHealthy) { - return core.setFailed(`Timeout waiting for preview environment: ${APP_URL}`) + core.setFailed(`Timeout waiting for preview environment: ${APP_URL}`) + } else { + const markdownTable = await main(core, owner, repo, baseSHA, headSHA) + core.setOutput('changesTable', markdownTable) } +} +async function main(owner, repo, baseSHA, headSHA) { const octokit = github.getOctokit(GITHUB_TOKEN) // get the list of file changes from the PR const response = await octokit.rest.repos.compareCommitsWithBasehead({ - owner: context.repo.owner, - repo: context.payload.repository.name, - basehead: `${context.payload.pull_request.base.sha}...${context.payload.pull_request.head.sha}`, + owner, + repo, + basehead: `${baseSHA}...${headSHA}`, }) const { files } = response.data - let markdownTable = - '| **Source** | **Preview** | **Production** | **What Changed** |\n|:----------- |:----------- |:----------- |:----------- |\n' + const markdownTableHead = [ + '| **Source** | **Preview** | **Production** | **What Changed** |', + '|:----------- |:----------- |:----------- |:----------- |', + ] + let markdownTable = '' const pathPrefix = 'content/' - const articleFiles = files.filter( - ({ filename }) => filename.startsWith(pathPrefix) && !filename.endsWith('/index.md') - ) + const articleFiles = files.filter(({ filename }) => filename.startsWith(pathPrefix)) const lines = await Promise.all( articleFiles.map(async (file) => { const sourceUrl = file.blob_url const fileName = file.filename.slice(pathPrefix.length) - const fileUrl = fileName.slice(0, fileName.lastIndexOf('.')) + const fileUrl = fileName.replace('/index.md', '').replace(/\.md$/, '') // get the file contents and decode them // this script is called from the main branch, so we need the API call to get the contents from the branch, instead const fileContents = await getContents( - context.repo.owner, - context.payload.repository.name, + owner, + repo, // Can't get its content if it no longer exists. // Meaning, you'd get a 404 on the `getContents()` utility function. // So, to be able to get necessary meta data about what it *was*, // if it was removed, fall back to the 'base'. - file.status === 'removed' - ? context.payload.pull_request.base.sha - : context.payload.pull_request.head.sha, + file.status === 'removed' ? baseSHA : headSHA, file.filename ) @@ -164,7 +172,13 @@ async function run() { return previous }, markdownTable.length) + if (cappedLines.length) { + cappedLines.unshift(...markdownTableHead) + } + markdownTable += cappedLines.join('\n') - core.setOutput('changesTable', markdownTable) + return markdownTable } + +export default main diff --git a/.github/workflows/content-changes-table-comment.yml b/.github/workflows/content-changes-table-comment.yml index e3a3f0cec0..8c21198c17 100644 --- a/.github/workflows/content-changes-table-comment.yml +++ b/.github/workflows/content-changes-table-comment.yml @@ -83,6 +83,7 @@ jobs: body-includes: '' - name: Update comment + if: ${{ steps.changes.outputs.changesTable != '' }} uses: peter-evans/create-or-update-comment@c9fcb64660bc90ec1cc535646af190c992007c32 with: comment-id: ${{ steps.findComment.outputs.comment-id }} diff --git a/content/codespaces/index.md b/content/codespaces/index.md index d4db8281a8..b974f878df 100644 --- a/content/codespaces/index.md +++ b/content/codespaces/index.md @@ -54,4 +54,3 @@ children: - /the-githubdev-web-based-editor - /guides --- - diff --git a/script/content-changes-table-comment.js b/script/content-changes-table-comment.js new file mode 100755 index 0000000000..020541c7ea --- /dev/null +++ b/script/content-changes-table-comment.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +// [start-readme] +// +// For testing the GitHub Action that executes +// .github/actions-scripts/content-changes-table-comment.js but doing it +// locally. +// This is more convenient and faster than relying on seeing that the +// Action produces in a PR. Especially since +// .github/workflows/content-changes-table-comment.yml only runs +// on `pull_request_target`. +// +// To try it you need to generate a local `GITHUB_TOKEN` that has read-access +// "content" and "pull requests" on the repo. +// You also need to set an APP_URL which can be the domain of the +// preview environment or just the production domain. Example: +// +// +// export GITHUB_TOKEN=github_pat_11AAAG..... +// export APP_URL=https://docs.github.com +// ./script/content-changes-table-comment.js github docs-internal main 4a0b0f2 +// +// [end-readme] + +import { program } from 'commander' +import main from '../.github/actions-scripts/content-changes-table-comment.js' + +program + .description('Produce a nice table based on the branch diff') + .option('-v, --verbose', 'Verbose outputs') + .option('--debug', "Loud about everything it's doing") + .arguments('owner repo bash_sha head_sha', 'bla bla') + .parse(process.argv) + +const opts = program.opts() +const args = program.args + +console.log(await main(...args, { ...opts })) From 015367e4b626d66bf0a11efac3bc2865c3b8fd7e Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 20:33:00 +0100 Subject: [PATCH 31/41] unbreak .github/actions-scripts/content-changes-table-comment.js (#33872) --- .github/actions-scripts/content-changes-table-comment.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions-scripts/content-changes-table-comment.js b/.github/actions-scripts/content-changes-table-comment.js index b27a8f171b..318fd9e96e 100755 --- a/.github/actions-scripts/content-changes-table-comment.js +++ b/.github/actions-scripts/content-changes-table-comment.js @@ -39,7 +39,7 @@ if (import.meta.url.endsWith(process.argv[1])) { if (!isHealthy) { core.setFailed(`Timeout waiting for preview environment: ${APP_URL}`) } else { - const markdownTable = await main(core, owner, repo, baseSHA, headSHA) + const markdownTable = await main(owner, repo, baseSHA, headSHA) core.setOutput('changesTable', markdownTable) } } From 4f756f8a3f75e988cc0783d795a41a17b8a07252 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 10 Jan 2023 20:59:48 +0100 Subject: [PATCH 32/41] composite action for checking out remote translations (#33846) --- .github/actions/clone-translations/action.yml | 67 +++++++++++++++++++ .github/workflows/azure-prod-build-deploy.yml | 54 +-------------- .../workflows/sync-search-elasticsearch.yml | 20 +----- .github/workflows/test.yml | 62 +---------------- 4 files changed, 73 insertions(+), 130 deletions(-) create mode 100644 .github/actions/clone-translations/action.yml diff --git a/.github/actions/clone-translations/action.yml b/.github/actions/clone-translations/action.yml new file mode 100644 index 0000000000..a0bbab893e --- /dev/null +++ b/.github/actions/clone-translations/action.yml @@ -0,0 +1,67 @@ +name: Clone translations + +description: Clone all remote translations so they're available + +inputs: + token: + description: PAT + required: true + +runs: + using: 'composite' + steps: + - name: Clone Simplified Chinese + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.zh-cn + token: ${{ inputs.token }} + path: translations/zh-cn + + - name: Clone Japanese + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.ja-jp + token: ${{ inputs.token }} + path: translations/ja-jp + + - name: Clone Spanish + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.es-es + token: ${{ inputs.token }} + path: translations/es-es + + - name: Clone Portuguese + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.pt-br + token: ${{ inputs.token }} + path: translations/pt-br + + - name: Clone German + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.de-de + token: ${{ inputs.token }} + path: translations/de-de + + - name: Clone French + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.fr-fr + token: ${{ inputs.token }} + path: translations/fr-fr + + - name: Clone Russian + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.ru-ru + token: ${{ inputs.token }} + path: translations/ru-ru + + - name: Clone Korean + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + with: + repository: github/docs-internal.ko-kr + token: ${{ inputs.token }} + path: translations/ko-kr diff --git a/.github/workflows/azure-prod-build-deploy.yml b/.github/workflows/azure-prod-build-deploy.yml index de30d69477..4cc9b2f9fb 100644 --- a/.github/workflows/azure-prod-build-deploy.yml +++ b/.github/workflows/azure-prod-build-deploy.yml @@ -71,61 +71,9 @@ jobs: - name: Merge docs-early-access repo's folders run: .github/actions-scripts/merge-early-access.sh - - name: Clone Simplified Chinese - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: ./.github/actions/clone-translations with: - repository: github/docs-internal.zh-cn token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/zh-cn - - - name: Clone Japanese - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.ja-jp - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/ja-jp - - - name: Clone Spanish - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.es-es - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/es-es - - - name: Clone Portuguese - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.pt-br - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/pt-br - - - name: Clone German - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.de-de - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/de-de - - - name: Clone French - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.fr-fr - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/fr-fr - - - name: Clone Russian - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.ru-ru - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/ru-ru - - - name: Clone Korean - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.ko-kr - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/ko-kr - name: 'Build and push image' uses: docker/build-push-action@1cb9d22b932e4832bb29793b7777ec860fc1cde0 diff --git a/.github/workflows/sync-search-elasticsearch.yml b/.github/workflows/sync-search-elasticsearch.yml index 12eb39175a..f4645c2590 100644 --- a/.github/workflows/sync-search-elasticsearch.yml +++ b/.github/workflows/sync-search-elasticsearch.yml @@ -35,18 +35,6 @@ env: FREEZE: ${{ secrets.FREEZE }} ELASTICSEARCH_URL: ${{ secrets.ELASTICSEARCH_URL }} - # This might seem a bit strange, but it's clever. Since this action - # uses a matrix to deal with one language at a time, we can use this - # to pretend it's always the same directory. - TRANSLATIONS_ROOT_ES_ES: translation - TRANSLATIONS_ROOT_ZH_CN: translation - TRANSLATIONS_ROOT_JA_JP: translation - TRANSLATIONS_ROOT_PT_BR: translation - TRANSLATIONS_ROOT_FR_FR: translation - TRANSLATIONS_ROOT_RU_RU: translation - TRANSLATIONS_ROOT_KO_KR: translation - TRANSLATIONS_ROOT_DE_DE: translation - jobs: figureOutMatrix: runs-on: ubuntu-latest @@ -110,13 +98,11 @@ jobs: - name: Check out repo uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - - name: Checkout the non-English repo + - name: Clone all translations if: ${{ matrix.language != 'en' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: ./.github/actions/clone-translations with: - repository: github/docs-internal.${{ fromJSON('{"zh":"zh-cn","es":"es-es","ru":"ru-ru","ja":"ja-jp","pt":"pt-br","de":"de-de","fr":"fr-fr","ko":"ko-kr"}')[matrix.language] }} - token: ${{ secrets.DOCUBOT_READORG_REPO_WORKFLOW_SCOPES }} - path: translation + token: ${{ secrets.DOCUBOT_REPO_PAT }} - uses: ./.github/actions/node-npm-setup diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index da61de08d3..277265806d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -110,69 +110,11 @@ jobs: .github/actions-scripts/merge-early-access.sh rm -fr docs-early-access - - name: Clone Simplified Chinese + - name: Clone all translations if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: ./.github/actions/clone-translations with: - repository: github/docs-internal.zh-cn token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/zh-cn - - - name: Clone Japanese - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.ja-jp - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/ja-jp - - - name: Clone Spanish - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.es-es - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/es-es - - - name: Clone Portuguese - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.pt-br - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/pt-br - - - name: Clone German - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.de-de - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/de-de - - - name: Clone French - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.fr-fr - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/fr-fr - - - name: Clone Russian - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.ru-ru - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/ru-ru - - - name: Clone Korean - if: ${{ matrix.test-group == 'translations' }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - with: - repository: github/docs-internal.ko-kr - token: ${{ secrets.DOCUBOT_REPO_PAT }} - path: translations/ko-kr - name: Gather files changed env: From 69d1442237cf2d4b8052db97942b5c05a8f41088 Mon Sep 17 00:00:00 2001 From: Sarah Edwards Date: Tue, 10 Jan 2023 12:01:55 -0800 Subject: [PATCH 33/41] Octokit.js guide (#33675) Co-authored-by: Gregor Martynus <39992+gr2m@users.noreply.github.com> Co-authored-by: Nick Floyd <139819+nickfloyd@users.noreply.github.com> Co-authored-by: Keegan Campbell Co-authored-by: Jess Hosman <1183847+jhosman@users.noreply.github.com> --- .../getting-started-with-the-rest-api.md | 2 +- content/rest/guides/index.md | 1 + ...ipting-with-the-rest-api-and-javascript.md | 431 ++++++++++++++++++ .../using-pagination-in-the-rest-api.md | 2 +- content/rest/index.md | 2 +- content/rest/overview/libraries.md | 6 +- content/rest/quickstart.md | 2 +- 7 files changed, 439 insertions(+), 7 deletions(-) create mode 100644 content/rest/guides/scripting-with-the-rest-api-and-javascript.md diff --git a/content/rest/guides/getting-started-with-the-rest-api.md b/content/rest/guides/getting-started-with-the-rest-api.md index 8268a59c95..f6e6e77eb5 100644 --- a/content/rest/guides/getting-started-with-the-rest-api.md +++ b/content/rest/guides/getting-started-with-the-rest-api.md @@ -52,7 +52,7 @@ gh api /octocat --method GET {% endnote %} -To make a request using JavaScript, you can use Octokit.js. For more information, see [the Octokit.js README](https://github.com/octokit/octokit.js/#readme). +To make a request using JavaScript, you can use Octokit.js. For more information, see "[Scripting with the REST API and JavaScript](/rest/guides/scripting-with-the-rest-api-and-javascript)." First, create an instance of `Octokit`.{% ifversion ghes or ghae %} Set the base URL to `{% data variables.product.api_url_code %}`. Replace `[hostname]` with the name of {% data variables.location.product_location %}.{% endif %} diff --git a/content/rest/guides/index.md b/content/rest/guides/index.md index 7a6d009c52..bc40d26813 100644 --- a/content/rest/guides/index.md +++ b/content/rest/guides/index.md @@ -14,6 +14,7 @@ topics: children: - /getting-started-with-the-rest-api - /basics-of-authentication + - /scripting-with-the-rest-api-and-javascript - /discovering-resources-for-a-user - /delivering-deployments - /rendering-data-as-graphs diff --git a/content/rest/guides/scripting-with-the-rest-api-and-javascript.md b/content/rest/guides/scripting-with-the-rest-api-and-javascript.md new file mode 100644 index 0000000000..22c37182e8 --- /dev/null +++ b/content/rest/guides/scripting-with-the-rest-api-and-javascript.md @@ -0,0 +1,431 @@ +--- +title: Scripting with the REST API and JavaScript +shortTitle: Script with JavaScript +intro: 'Write a script using the Octokit.js SDK to interact with the REST API.' +versions: + fpt: '*' + ghes: '*' + ghae: '*' + ghec: '*' +topics: + - API + - JavaScript +type: tutorial +miniTocMaxHeadingLevel: 3 +--- + +## About Octokit.js + +If you want to write a script using JavaScript to interact with {% data variables.product.company_short %}'s REST API, {% data variables.product.company_short %} recommends that you use the Octokit.js SDK. Octokit.js is maintained by {% data variables.product.company_short %}. The SDK implements best practices and makes it easier for you to interact with the REST API via JavaScript. Octokit.js works with all modern browsers, Node.js, and Deno. For more information about Octokit.js, see [the Octokit.js README](https://github.com/octokit/octokit.js/#readme). + +## Prerequisites + +This guide assumes that you are familiar with JavaScript and the {% data variables.product.company_short %} REST API. For more information about the REST API, see "[Getting started with the REST API](/rest/guides/getting-started-with-the-rest-api)." + +You must install and import `octokit` in order to use the Octokit.js library. This guide uses import statements in accordance with ES6. For more information about different installation and import methods, see [the Octokit.js README's Usage section](https://github.com/octokit/octokit.js/#usage). + +## Instantiating and authenticating + +{% warning %} + +**Warning**: Treat your authentication credentials like a password. + +To keep your credentials secure, you can store your credentials as a secret and run your script through {% data variables.product.prodname_actions %}. For more information, see "[Encrypted secrets](/actions/security-guides/encrypted-secrets)." + +{% ifversion ghec or fpt %}You can also store your credentials as a {% data variables.product.prodname_codespaces %} secret and run your script in {% data variables.product.prodname_codespaces %}. For more information, see "[Managing encrypted secrets for your codespaces](/codespaces/managing-your-codespaces/managing-encrypted-secrets-for-your-codespaces)."{% endif %} + +If {% ifversion ghec or fpt %}these options are not possible{% else %}this is not possible{% endif %}, consider using another service such as [the 1Password CLI](https://developer.1password.com/docs/cli/secret-references/) to store your credentials securely. + +{% endwarning %} + +### Authenticating with a {% data variables.product.pat_generic %} + +If you want to use the {% data variables.product.company_short %} REST API for personal use, you can create a {% data variables.product.pat_generic %}. For more information about creating a {% data variables.product.pat_generic %}, see "[Creating a {% data variables.product.pat_generic %}](/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)." + +First, import `Octokit` from `octokit`. Then, pass your {% data variables.product.pat_generic %} when you create an instance of `Octokit`. In the following example, replace `YOUR-TOKEN` with a reference to your {% data variables.product.pat_generic %}.{% ifversion ghes or ghae %} Replace `[hostname]` with the name of {% data variables.location.product_location %}.{% endif %} + +```javascript{:copy} +import { Octokit } from "octokit"; + +const octokit = new Octokit({ {% ifversion ghes or ghae %} + baseUrl: "{% data variables.product.api_url_code %}",{% endif %} + auth: 'YOUR-TOKEN', +}); +``` + +### Authenticating with a {% data variables.product.prodname_github_app %} + +If you want to use the API on behalf of an organization or another user, {% data variables.product.company_short %} recommends that you use a {% data variables.product.prodname_github_app %}. If an endpoint is available to {% data variables.product.prodname_github_apps %}, the REST reference documentation for that endpoint will say "Works with {% data variables.product.prodname_github_apps %}." For more information, see "[Creating a GitHub App](/developers/apps/building-github-apps/creating-a-github-app)," "[Authenticating with GitHub Apps](/developers/apps/building-github-apps/authenticating-with-github-apps)," and "[Identifying and authorizing users for GitHub Apps](/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps)." + +Instead of importing `Octokit` from `octokit`, import `App`. In the following example, replace `APP_ID` with a reference to your app's ID. Replace `PRIVATE_KEY` with a reference to your app's private key. Replace `INSTALLATION_ID` with the ID of the installation of your app that you want to authenticate on behalf of. You can find your app's ID and generate a private key on the settings page for your app. For more information, see "[Authenticating with GitHub Apps](/developers/apps/building-github-apps/authenticating-with-github-apps)." You can get an installation ID with the `GET /users/{username}/installation`, `GET /repos/{owner}/{repo}/installation`, or `GET /orgs/{org}/installation` endpoints. For more information, see "[Apps](/rest/apps/apps)" in the REST reference documentation. + +```javascript{:copy} +import { App } from "octokit"; + +const app = new App({ + appId: APP_ID, + privateKey: PRIVATE_KEY, +}); + +const octokit = await app.getInstallationOctokit(INSTALLATION_ID); +``` + +### Authenticating in {% data variables.product.prodname_actions %} + +If you want to use the API in a {% data variables.product.prodname_actions %} workflow, {% data variables.product.company_short %} recommends that you authenticate with the built-in `GITHUB_TOKEN` instead of creating a token. You can grant permissions to the `GITHUB_TOKEN` with the `permissions` key. For more information about `GITHUB_TOKEN`, see "[Automatic token authentication](/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)." + +If your workflow needs to access resources outside of the workflow's repository, then you will not be able to use `GITHUB_TOKEN`. In that case, store your credentials as a secret and replace `GITHUB_TOKEN` in the examples below with the name of your secret. For more information about secrets, see "[Encrypted secrets](/actions/security-guides/encrypted-secrets)." + +If you use the `run` keyword to execute your JavaScript script in your {% data variables.product.prodname_actions %} workflows, you can store the value of `GITHUB_TOKEN` as an environment variable. Your script can access the environment variable as `process.env.VARIABLE_NAME`. + +For example, this workflow step stores `GITHUB_TOKEN` in an environment variable called `TOKEN`: + +```yaml +- name: Run script + env: + TOKEN: {% raw %}${{ secrets.GITHUB_TOKEN }}{% endraw %} + run: | + node .github/actions-scripts/use-the-api.mjs +``` + +The script that the workflow runs uses `process.env.TOKEN` to authenticate: + +```javascript{:copy} +import { Octokit } from "octokit"; + +const octokit = new Octokit({ {% ifversion ghes or ghae %} + baseUrl: "{% data variables.product.api_url_code %}",{% endif %} + auth: process.env.TOKEN, +}); +``` + +### Instantiating without authentication + +You can use the REST API without authentication, although you will have a lower rate limit and will not be able to use some endpoints. To create an instance of `Octokit` without authenticating, do not pass the `auth` argument.{% ifversion ghes or ghae %} Set the base URL to `{% data variables.product.api_url_code %}`. Replace `[hostname]` with the name of {% data variables.location.product_location %}.{% endif %} + +```javascript{:copy} +import { Octokit } from "octokit"; + +const octokit = new Octokit({ {% ifversion ghes or ghae %} + baseUrl: "{% data variables.product.api_url_code %}", +{% endif %}}); +``` + +## Making requests + +Octokit supports multiple ways of making requests. You can use the `request` method to make requests if you know the HTTP verb and path for the endpoint. You can use the `rest` method if you want to take advantage of autocompletion in your IDE and typing. For paginated endpoints, you can use the `paginate` method to request multiple pages of data. + +### Using the `request` method to make requests + +To use the `request` method to make requests, pass the HTTP method and path as the first argument. Pass any body, query, or path parameters in an object as the second argument. For example, to make a `GET` request to `/repos/{owner}/{repo}/issues` and pass the `owner`, `repo`, and `per_page` parameters: + +```javascript{:copy} +await octokit.request("GET /repos/{owner}/{repo}/issues", { + owner: "github", + repo: "docs", + per_page: 2 +}); +``` + +The `request` method automatically passes the `Accept: application/vnd.github+json` header. To pass additional headers or a different `Accept` header, add a `headers` property to the object that is passed as a second argument. The value of the `headers` property is an object with the header names as keys and header values as values. For example, to send a `content-type` header with a value of `text/plain`{% ifversion api-date-versioning %} and a `x-github-api-version` header with a value of `{{ allVersions[currentVersion].latestApiVersion }}`{% endif %}: + +```javascript{:copy} +await octokit.request("POST /markdown/raw", { + text: "Hello **world**", + headers: { + "content-type": "text/plain",{% ifversion api-date-versioning %} + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}",{% endif %} + }, +}); +``` + +### Using `rest` endpoint methods to make requests + +Every REST API endpoint has an associated `rest` endpoint method in Octokit. These methods generally autocomplete in your IDE for convenience. You can pass any parameters as an object to the method. + +```javascript{:copy} +await octokit.rest.issues.listForRepo({ + owner: "github", + repo: "docs", + per_page: 2 +}); +``` + +Additionally, if you are using a typed language such as TypeScript, you can import types to use with these methods. For more information, see [the TypeScript section in the plugin-rest-endpoint-methods.js README](https://github.com/octokit/plugin-rest-endpoint-methods.js/#typescript). + +### Making paginated requests + +If the endpoint is paginated and you want to fetch more than one page of results, you can use the `paginate` method. `paginate` will fetch the next page of results until it reaches the last page and then return all of the results as a single array. A few endpoints return paginated results as array in an object, as opposed to returning the paginated results as an array. `paginate` always returns an array of items even if the raw result was an object. + +For example, the following example gets all of the issues from the `github/docs` repository. Although it requests 100 issues at a time, the function won't return until the last page of data is reached. + +```javascript{:copy} +const issueData = await octokit.paginate("GET /repos/{owner}/{repo}/issues", { + owner: "github", + repo: "docs", + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} +}); +``` + +The `paginate` method accepts an optional map function, which you can use to collect only the data that you want from the response. This reduces memory usage by your script. The map function can take a second argument, `done`, which you can call to end the pagination before the last page is reached. This lets you fetch a subset of pages. For example, the following example continues to fetch results until an issue that includes "test" in the title is returned. For the pages of data that were returned, only the issue title and author are stored. + +```javascript{:copy} +const issueData = await octokit.paginate("GET /repos/{owner}/{repo}/issues", { + owner: "github", + repo: "docs", + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} +}, + (response, done) => response.data.map((issue) => { + if (issue.title.includes("test")) { + done() + } + return ({title: issue.title, author: issue.user.login}) + }) +); +``` + +Instead of fetching all of the results at once, you can use `octokit.paginate.iterator()` to iterate through a single page at a time. For example, the following example fetches one page of results at a time and processes each object from the page before fetching the next page. Once an issue that includes "test" in the title is reached, the script stops the iteration and returns the issue title and issue author of each object that was processed. The iterator is the most memory efficient method for fetching paginated data. + +```javascript{:copy} +const iterator = octokit.paginate.iterator("GET /repos/{owner}/{repo}/issues", { + owner: "github", + repo: "docs", + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} +}); + +let issueData = [] +let breakLoop = false +for await (const {data} of iterator) { + if (breakLoop) break + for (const issue of data) { + if (issue.title.includes("test")) { + breakLoop = true + break + } else { + issueData = [...issueData, {title: issue.title, author: issue.user.login}]; + } + } +} +``` + +You can use the `paginate` method with the `rest` endpoint methods as well. Pass the `rest` endpoint method as the first argument. Pass any parameters as the second argument. + +```javascript{:copy} +const iterator = octokit.paginate.iterator(octokit.rest.issues.listForRepo, { + owner: "github", + repo: "docs", + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} +}); +``` + +For more information about pagination, see "[Using pagination in the REST API](/rest/guides/using-pagination-in-the-rest-api)." + +## Catching errors + +### Catching all errors + +Sometimes, the {% data variables.product.company_short %} REST API will return an error. For example, you will get an error if your access token is expired or if you omitted a required parameter. Octokit.js automatically retries the request when it gets an error other than `400 Bad Request`, `401 Unauthorized`, `403 Forbidden`, `404 Not Found`, and `422 Unprocessable Entity`. If an API error occurs even after retries, Octokit.js throws an error that includes the HTTP status code of the response (`response.status`) and the response headers (`response.headers`). You should handle these errors in your code. For example, you can use a try/catch block to catch errors: + +```javascript{:copy} +let filesChanged = [] + +try { + const iterator = octokit.paginate.iterator("GET /repos/{owner}/{repo}/pulls/{pull_number}/files", { + owner: "github", + repo: "docs", + pull_number: 22809, + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} + }); + + for await (const {data} of iterator) { + filesChanged = [...filesChanged, ...data.map(fileData => fileData.filename)]; + } +} catch (error) { + if (error.response) { + console.error(`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`) + } + console.error(error) +} +``` + +### Handling intended error codes + +Sometimes, {% data variables.product.company_short %} uses a 4xx status code to indicate a non-error response. If the endpoint you are using does this, you can add additional handling for specific errors. For example, the `GET /user/starred/{owner}/{repo}` endpoint will return a `404` if the repository is not starred. The following example uses the `404` response to indicate that the repository was not starred; all other errors codes are treated as errors. + +```javascript{:copy} +try { + await octokit.request("GET /user/starred/{owner}/{repo}", { + owner: "github", + repo: "docs",{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} + }); + + console.log(`The repository is starred by me`); + +} catch (error) { + if (error.status === 404) { + console.log(`The repository is not starred by me`); + } else { + console.error(`An error occurred while checking if the repository is starred: ${error?.response?.data?.message}`); + } +} +``` + +### Handling rate limit errors + +If you receive a rate limit error, you may want to retry your request after waiting. When you are rate limited, {% data variables.product.company_short %} responds with a `403 Forbidden` error and the `x-ratelimit-remaining` response header value will be `"0"`. The response headers will include a `x-ratelimit-reset` header, which tells you the time at which the current rate limit window resets, in UTC epoch seconds. You can retry your request after the time specified by `x-ratelimit-reset`. + +```javascript{:copy} +async function requestRetry(route, parameters) { + try { + const response = await octokit.request(route, parameters); + return response + } catch (error) { + if (error.response && error.status === 403 && error.response.headers['x-ratelimit-remaining'] === '0') { + const resetTimeEpochSeconds = error.response.headers['x-ratelimit-reset']; + const currentTimeEpochSeconds = Math.floor(Date.now() / 1000); + const secondsToWait = resetTimeEpochSeconds - currentTimeEpochSeconds; + console.log(`You have exceeded your rate limit. Retrying in ${secondsToWait} seconds.`); + setTimeout(requestRetry, secondsToWait * 1000, route, parameters); + } else { + console.error(error); + } + } +} + +const response = await requestRetry("GET /repos/{owner}/{repo}/issues", { + owner: "github", + repo: "docs", + per_page: 2 + }) +``` + +## Using the response + +The `request` method returns a promise that resolves to an object if the request was successful. The object properties are `data` (the response body returned by the endpoint), `status` (the HTTP response code), `url` (the URL of the request), and `headers` (an object containing the response headers). Unless otherwise specified, the response body is in JSON format. Some endpoints do not return a response body; in those cases, the `data` property is omitted. + +```javascript{:copy} +const response = await octokit.request("GET /repos/{owner}/{repo}/issues/{issue_number}", { + owner: "github", + repo: "docs", + issue_number: 11901,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} +}); + +console.log(`The status of the response is: ${response.status}`) +console.log(`The request URL was: ${response.url}`) +console.log(`The x-ratelimit-remaining response header is: ${response.headers["x-ratelimit-remaining"]}`) +console.log(`The issue title is: ${response.data.title}`) +``` + +Similarly, the `paginate` method returns a promise. If the request was successful, the promise resolves to an array of data returned by the endpoint. Unlike the `request` method, the `paginate` method does not return the status code, URL, or headers. + +```javascript{:copy} +const data = await octokit.paginate("GET /repos/{owner}/{repo}/issues", { + owner: "github", + repo: "docs", + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} +}); + +console.log(`${data.length} issues were returned`) +console.log(`The title of the first issue is: ${data[0].title}`) +``` + +## Example script + +Here is a full example script that uses Octokit.js. The script imports `Octokit` and creates a new instance of `Octokit`. If you wanted to authenticate with a {% data variables.product.prodname_github_app %} instead of a {% data variables.product.pat_generic %}, you would import and instantiate `App` instead of `Octokit`. For more information, see "[Authenticating with a {% data variables.product.prodname_github_app %}](#authenticating-with-a-github-app)." + +The `getChangedFiles` function gets all of the files changed for a pull request. The `commentIfDataFilesChanged` function calls the `getChangedFiles` function. If any of the files that the pull request changed include `/data/` in the file path, then the function will comment on the pull request. + +```javascript{:copy} +import { Octokit } from "octokit"; + +const octokit = new Octokit({ {% ifversion ghes or ghae %} + baseUrl: "{% data variables.product.api_url_code %}",{% endif %} + auth: 'YOUR-TOKEN', +}); + +async function getChangedFiles({owner, repo, pullNumber}) { + let filesChanged = [] + + try { + const iterator = octokit.paginate.iterator("GET /repos/{owner}/{repo}/pulls/{pull_number}/files", { + owner: owner, + repo: repo, + pull_number: pullNumber, + per_page: 100,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} + }); + + for await (const {data} of iterator) { + filesChanged = [...filesChanged, ...data.map(fileData => fileData.filename)]; + } + } catch (error) { + if (error.response) { + console.error(`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`) + } + console.error(error) + } + + return filesChanged +} + +async function commentIfDataFilesChanged({owner, repo, pullNumber}) { + const changedFiles = await getChangedFiles({owner, repo, pullNumber}); + + const filePathRegex = new RegExp(/\/data\//, "i"); + if (!changedFiles.some(fileName => filePathRegex.test(fileName))) { + return; + } + + try { + const {data: comment} = await octokit.request("POST /repos/{owner}/{repo}/issues/{issue_number}/comments", { + owner: owner, + repo: repo, + issue_number: pullNumber, + body: `It looks like you changed a data file. These files are auto-generated. \n\nYou must revert any changes to data files before your pull request will be reviewed.`,{% ifversion api-date-versioning %} + headers: { + "x-github-api-version": "{{ allVersions[currentVersion].latestApiVersion }}", + },{% endif %} + }); + + return comment.html_url; + } catch (error) { + if (error.response) { + console.error(`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`) + } + console.error(error) + } +} + +await commentIfDataFilesChanged({owner: "github", repo: "docs", pullNumber: 191}); +``` + +## Next steps + +- To learn more about Octokit.js see [the Octokit.js documentation](https://github.com/octokit/octokit.js/#readme). +- For some real life examples, look at how {% data variables.product.company_short %} Docs uses Octokit.js by [searching the {% data variables.product.company_short %} Docs repository](https://github.com/search?q=repo%3Agithub%2Fdocs%20path%3A.github%20octokit&type=code). diff --git a/content/rest/guides/using-pagination-in-the-rest-api.md b/content/rest/guides/using-pagination-in-the-rest-api.md index e22feff99d..e7bc0e0713 100644 --- a/content/rest/guides/using-pagination-in-the-rest-api.md +++ b/content/rest/guides/using-pagination-in-the-rest-api.md @@ -83,7 +83,7 @@ The following examples use JavaScript and {% data variables.product.company_shor ### Example using the Octokit.js pagination method -To fetch paginated results with Octokit.js, you can use `octokit.paginate()`. `octokit.paginate()` will fetch the next page of results until it reaches the last page and then return all of the results as a single array. A few endpoints return paginated results as array in an object, as opposed to returning the paginated results as an array. `octokit.paginate()` always returns an array of items even if the raw result was an object. If the results are not paginated, `octokit.paginate()` will behave like `octokit.request()`. +To fetch paginated results with Octokit.js, you can use `octokit.paginate()`. `octokit.paginate()` will fetch the next page of results until it reaches the last page and then return all of the results as a single array. A few endpoints return paginated results as array in an object, as opposed to returning the paginated results as an array. `octokit.paginate()` always returns an array of items even if the raw result was an object. For example, this script gets all of the issues from the `octocat/Spoon-Knife` repository. Although it requests 100 issues at a time, the function won't return until the last page of data is reached. diff --git a/content/rest/index.md b/content/rest/index.md index 0636cbd07a..dd08c9a717 100644 --- a/content/rest/index.md +++ b/content/rest/index.md @@ -16,7 +16,7 @@ featuredLinks: - /rest/overview/api-versions - /rest/overview/other-authentication-methods - /rest/overview/troubleshooting - - /rest/overview/endpoints-available-for-github-apps + - /rest/guides/scripting-with-the-rest-api-and-javascript - /rest/overview/openapi-description guideCards: - /rest/guides/delivering-deployments diff --git a/content/rest/overview/libraries.md b/content/rest/overview/libraries.md index 12c76037de..63b6774a4c 100644 --- a/content/rest/overview/libraries.md +++ b/content/rest/overview/libraries.md @@ -19,9 +19,9 @@ topics: Use the official Octokit library, or choose between any of the available third party libraries. -- **Ruby** → [octokit.rb](https://github.com/octokit/octokit.rb) -- **.NET** → [octokit.net](https://github.com/octokit/octokit.net) -- **JavaScript** → [octokit.js](https://github.com/octokit/octokit.js) +- Ruby: [octokit.rb](https://github.com/octokit/octokit.rb) +- .NET: [octokit.net](https://github.com/octokit/octokit.net) +- JavaScript: [octokit.js](https://github.com/octokit/octokit.js). For more information, see "[Scripting with the REST API and JavaScript](/rest/guides/scripting-with-the-rest-api-and-javascript)." ## Third-party libraries diff --git a/content/rest/quickstart.md b/content/rest/quickstart.md index e6c5c509a4..d45a05c2ec 100644 --- a/content/rest/quickstart.md +++ b/content/rest/quickstart.md @@ -95,7 +95,7 @@ jobs: ## Getting started using JavaScript -You can use Octokit.js to interact with the {% data variables.product.prodname_dotcom %} REST API in your JavaScript scripts. For more information, see [the Octokit.js README](https://github.com/octokit/octokit.js/#readme). +You can use Octokit.js to interact with the {% data variables.product.prodname_dotcom %} REST API in your JavaScript scripts. For more information, see "[Scripting with the REST API and JavaScript](/rest/guides/scripting-with-the-rest-api-and-javascript)." ### Using Octokit.js From c41ab3e8ca8c0fa6f568e82b2ff1dae477e087cf Mon Sep 17 00:00:00 2001 From: Sam Browning <106113886+sabrowning1@users.noreply.github.com> Date: Tue, 10 Jan 2023 15:58:16 -0500 Subject: [PATCH 34/41] Un-revert "Add security overview content for filtering for teams with write access" (#33711) --- .../filtering-alerts-in-the-security-overview.md | 15 +++++++-------- .../security-overview-team-write-access.yml | 6 ++++++ 2 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 data/features/security-overview-team-write-access.yml diff --git a/content/code-security/security-overview/filtering-alerts-in-the-security-overview.md b/content/code-security/security-overview/filtering-alerts-in-the-security-overview.md index 48e8745d50..8ac7304c20 100644 --- a/content/code-security/security-overview/filtering-alerts-in-the-security-overview.md +++ b/content/code-security/security-overview/filtering-alerts-in-the-security-overview.md @@ -44,7 +44,7 @@ In the examples below, replace `:enabled` with `:not-enabled` to see repositorie | Qualifier | Description | | -------- | -------- | -| `code-scanning:enabled` | Display repositories that have set up {% data variables.product.prodname_code_scanning %}. | +| `code-scanning:enabled` | Display repositories that have set up {% data variables.product.prodname_code_scanning %}. | | `dependabot:enabled` | Display repositories that have enabled {% data variables.product.prodname_dependabot_alerts %}. | | `secret-scanning:enabled` | Display repositories that have enabled {% data variables.secret-scanning.alerts %}. {% ifversion security-overview-org-risk-coverage %} | | `any-feature:enabled` | Display repositories where at least one security feature is enabled. |{% else %} @@ -79,7 +79,7 @@ These qualifiers are available in the main summary views. {% ifversion ghec or ghes > 3.4 or ghae > 3.4 %} ## Filter by level of risk for repositories -The level of risk for a repository is determined by the number and severity of alerts from security features. If one or more security features are not enabled for a repository, the repository will have an unknown level of risk. If a repository has no risks that are detected by security features, the repository will have a clear level of risk. +The level of risk for a repository is determined by the number and severity of alerts from security features. If one or more security features are not enabled for a repository, the repository will have an unknown level of risk. If a repository has no risks that are detected by security features, the repository will have a clear level of risk. {% ifversion security-overview-org-risk-coverage %} These qualifiers are available in the enterprise-level view. @@ -100,9 +100,9 @@ These qualifiers are available in the enterprise-level view. | Qualifier | Description | | -------- | -------- | -| code-scanning:n | Display repositories that have *n* {% data variables.product.prodname_code_scanning %} alerts. This qualifier can use `=`, `>` and `<` comparison operators. | -| secret-scanning:n | Display repositories that have *n* {% data variables.secret-scanning.alerts %}. This qualifier can use `=`, `>` and `<` comparison operators. | -| dependabot:n | Display repositories that have *n* {% data variables.product.prodname_dependabot_alerts %}. This qualifier can use `=`, `>` and `<` comparison operators. | +| `code-scanning:NUMBER` | Display repositories that have NUMBER {% data variables.product.prodname_code_scanning %} alerts. This qualifier can use `=`, `>` and `<` comparison operators. | +| `secret-scanning:NUMBER` | Display repositories that have NUMBER {% data variables.secret-scanning.alerts %}. This qualifier can use `=`, `>` and `<` comparison operators. | +| `dependabot:NUMBER` | Display repositories that have NUMBER {% data variables.product.prodname_dependabot_alerts %}. This qualifier can use `=`, `>` and `<` comparison operators. | ## Filter by team @@ -111,7 +111,7 @@ These qualifiers are available in the main summary views. | Qualifier | Description | | -------- | -------- | -| team:TEAM-NAME | Displays repositories that *TEAM-NAME* has admin privileges for. | +| `team:TEAM-NAME` | Displays repositories that TEAM-NAME has {% ifversion security-overview-team-write-access -%} write access or {% endif -%} admin access to. | ## Filter by topic @@ -119,7 +119,7 @@ These qualifiers are available in the main summary views. | Qualifier | Description | | -------- | -------- | -| topic:TOPIC-NAME | Displays repositories that are classified with *TOPIC-NAME*. | +| `topic:TOPIC-NAME` | Displays repositories that are classified with TOPIC-NAME. | {% ifversion security-overview-alert-views %} @@ -159,4 +159,3 @@ You can filter the view to show {% data variables.product.prodname_dependabot_al | `secret-type:CUSTOM-PATTERN` | Displays alerts for secrets matching the specified custom pattern. | For more information, see "[{% data variables.product.prodname_secret_scanning_caps %} patterns](/code-security/secret-scanning/secret-scanning-patterns)." - diff --git a/data/features/security-overview-team-write-access.yml b/data/features/security-overview-team-write-access.yml new file mode 100644 index 0000000000..ea0c55115e --- /dev/null +++ b/data/features/security-overview-team-write-access.yml @@ -0,0 +1,6 @@ +# Reference: #8973 +# Documentation for tweaks to the results of the team filter on the "Security Risk" and "Security Coverage" views +versions: + ghec: '*' + ghes: '> 3.8' + ghae: '> 3.8' From b0cee6663f1cbac21d0214ee648c5fb9fcca3977 Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Tue, 10 Jan 2023 14:57:36 -0800 Subject: [PATCH 35/41] update GraphQL workflow post-translations removal (#33875) --- script/graphql/update-files.js | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/script/graphql/update-files.js b/script/graphql/update-files.js index d68f210100..6f95a3f906 100755 --- a/script/graphql/update-files.js +++ b/script/graphql/update-files.js @@ -10,7 +10,6 @@ import processPreviews from './utils/process-previews.js' import processUpcomingChanges from './utils/process-upcoming-changes.js' import processSchemas from './utils/process-schemas.js' import { prependDatedEntry, createChangelogEntry } from './build-changelog.js' -import loadData from '../../lib/site-data.js' const graphqlDataDir = path.join(process.cwd(), 'data/graphql') const graphqlStaticDir = path.join(process.cwd(), 'lib/graphql/static') @@ -25,22 +24,12 @@ if (!process.env.GITHUB_TOKEN) { const versionsToBuild = Object.keys(allVersions) -const currentLanguage = 'en' - main() async function main() { const previewsJson = {} const upcomingChangesJson = {} - const siteData = loadData() - - // create a bare minimum context for rendering the graphql-object.html layout - const context = { - currentLanguage, - site: siteData[currentLanguage].site, - } - for (const version of versionsToBuild) { // Get the relevant GraphQL name for the current version // For example, free-pro-team@latest corresponds to dotcom, @@ -73,10 +62,6 @@ async function main() { path.join(graphqlStaticDir, `schema-${graphqlVersion}.json`) ) - // Add some version specific data to the context - context.graphql = { schemaForCurrentVersion: schemaJsonPerVersion } - context.currentVersion = version - // 4. UPDATE CHANGELOG if (allVersions[version].nonEnterpriseDefault) { // The Changelog is only build for free-pro-team@latest From 2b25e8798de66b262077cd4db3c36133c3e44955 Mon Sep 17 00:00:00 2001 From: Octomerger Bot <63058869+Octomerger@users.noreply.github.com> Date: Tue, 10 Jan 2023 15:15:19 -0800 Subject: [PATCH 36/41] GraphQL schema update (#33877) Co-authored-by: rachmari --- .../graphql_upcoming_changes.public-ghae.yml | 16 + data/graphql/ghae/schema.docs-ghae.graphql | 171 +++ .../ghec/graphql_upcoming_changes.public.yml | 16 + data/graphql/ghec/schema.docs.graphql | 847 ++++++++++- .../graphql_upcoming_changes.public.yml | 16 + data/graphql/schema.docs.graphql | 847 ++++++++++- lib/graphql/static/changelog.json | 66 + lib/graphql/static/schema-dotcom.json | 1262 ++++++++++++++++- lib/graphql/static/schema-ghae.json | 246 ++++ lib/graphql/static/schema-ghec.json | 1262 ++++++++++++++++- lib/graphql/static/upcoming-changes.json | 60 + 11 files changed, 4733 insertions(+), 76 deletions(-) diff --git a/data/graphql/ghae/graphql_upcoming_changes.public-ghae.yml b/data/graphql/ghae/graphql_upcoming_changes.public-ghae.yml index 503226b6d7..f3f88d79da 100644 --- a/data/graphql/ghae/graphql_upcoming_changes.public-ghae.yml +++ b/data/graphql/ghae/graphql_upcoming_changes.public-ghae.yml @@ -86,6 +86,14 @@ upcoming_changes: date: '2022-11-21' criticality: breaking owner: s-anupam + - location: PackageType.RUBYGEMS + description: '`RUBYGEMS` will be removed.' + reason: + RUBYGEMS will be removed from this enum as this type will be migrated to + only be used by the Packages REST API. + date: '2022-12-28' + criticality: breaking + owner: ankitkaushal01 - location: Commit.changedFiles description: '`changedFiles` will be removed. Use `changedFilesIfAvailable` instead.' reason: '`changedFiles` will be removed.' @@ -243,6 +251,14 @@ upcoming_changes: date: '2023-01-01T00:00:00+00:00' criticality: breaking owner: mattruggio + - location: PackageType.MAVEN + description: '`MAVEN` will be removed.' + reason: + MAVEN will be removed from this enum as this type will be migrated to only + be used by the Packages REST API. + date: '2023-02-10' + criticality: breaking + owner: ankitkaushal01 - location: ProjectV2View.groupBy description: '`groupBy` will be removed. Check out the `ProjectV2View#group_by_fields` diff --git a/data/graphql/ghae/schema.docs-ghae.graphql b/data/graphql/ghae/schema.docs-ghae.graphql index 9f184948f0..ec5c99f856 100644 --- a/data/graphql/ghae/schema.docs-ghae.graphql +++ b/data/graphql/ghae/schema.docs-ghae.graphql @@ -707,6 +707,11 @@ type AddReactionPayload { """ reaction: Reaction + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + """ The reactable subject. """ @@ -6601,6 +6606,11 @@ input CreatePullRequestInput { """ headRefName: String! + """ + The Node ID of the head repository. + """ + headRepositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) + """ Indicates whether maintainers can modify the pull request. """ @@ -18529,6 +18539,16 @@ type Mutation { input: RevokeMigratorRoleInput! ): RevokeMigratorRolePayload + """ + Starts a GitHub Enterprise Importer organization migration. + """ + startOrganizationMigration( + """ + Parameters for StartOrganizationMigration + """ + input: StartOrganizationMigrationInput! + ): StartOrganizationMigrationPayload + """ Starts a GitHub Enterprise Importer (GEI) repository migration. """ @@ -23669,6 +23689,102 @@ enum OrganizationMembersCanCreateRepositoriesSettingValue { PRIVATE } +""" +A GitHub Enterprise Importer (GEI) organization migration. +""" +type OrganizationMigration implements Node { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: String + + """ + The reason the organization migration failed. + """ + failureReason: String + id: ID! + + """ + The remaining amount of repos to be migrated. + """ + remainingRepositoriesCount: Int + + """ + The name of the source organization to be migrated. + """ + sourceOrgName: String! + + """ + The URL of the source organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The migration state. + """ + state: OrganizationMigrationState! + + """ + The name of the target organization. + """ + targetOrgName: String! + + """ + The total amount of repositories to be migrated. + """ + totalRepositoriesCount: Int +} + +""" +The Octoshift Organization migration state. +""" +enum OrganizationMigrationState { + """ + The Octoshift migration has failed. + """ + FAILED + + """ + The Octoshift migration is in progress. + """ + IN_PROGRESS + + """ + The Octoshift migration has not started. + """ + NOT_STARTED + + """ + The Octoshift migration is performing post repository migrations. + """ + POST_REPO_MIGRATION + + """ + The Octoshift migration is performing pre repository migrations. + """ + PRE_REPO_MIGRATION + + """ + The Octoshift migration has been queued. + """ + QUEUED + + """ + The Octoshift org migration is performing repository migrations. + """ + REPO_MIGRATION + + """ + The Octoshift migration has succeeded. + """ + SUCCEEDED +} + """ Ordering options for organization connections. """ @@ -29972,6 +30088,11 @@ type RemoveReactionPayload { """ reaction: Reaction + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + """ The reactable subject. """ @@ -32984,6 +33105,11 @@ type Repository implements Node & ProjectOwner & RepositoryInfo & Starrable & Su """ hasProjectsEnabled: Boolean! + """ + Whether vulnerability alerts are enabled for the repository. + """ + hasVulnerabilityAlertsEnabled: Boolean! + """ Indicates if the repository has wiki feature enabled. """ @@ -36916,6 +37042,51 @@ type StarredRepositoryEdge { starredAt: DateTime! } +""" +Autogenerated input type of StartOrganizationMigration +""" +input StartOrganizationMigrationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The migration source access token. + """ + sourceAccessToken: String! + + """ + The URL of the organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The ID of the enterprise the target organization belongs to. + """ + targetEnterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The name of the target organization. + """ + targetOrgName: String! +} + +""" +Autogenerated return type of StartOrganizationMigration +""" +type StartOrganizationMigrationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new organization migration. + """ + orgMigration: OrganizationMigration +} + """ Autogenerated input type of StartRepositoryMigration """ diff --git a/data/graphql/ghec/graphql_upcoming_changes.public.yml b/data/graphql/ghec/graphql_upcoming_changes.public.yml index c9c009c4be..7cfaa0ff99 100644 --- a/data/graphql/ghec/graphql_upcoming_changes.public.yml +++ b/data/graphql/ghec/graphql_upcoming_changes.public.yml @@ -120,6 +120,14 @@ upcoming_changes: date: '2022-11-21' criticality: breaking owner: s-anupam + - location: PackageType.RUBYGEMS + description: '`RUBYGEMS` will be removed.' + reason: + RUBYGEMS will be removed from this enum as this type will be migrated to + only be used by the Packages REST API. + date: '2022-12-28' + criticality: breaking + owner: ankitkaushal01 - location: AddProjectDraftIssueInput.assigneeIds description: '`assigneeIds` will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, @@ -1734,6 +1742,14 @@ upcoming_changes: date: '2023-01-01T00:00:00+00:00' criticality: breaking owner: lukewar + - location: PackageType.MAVEN + description: '`MAVEN` will be removed.' + reason: + MAVEN will be removed from this enum as this type will be migrated to only + be used by the Packages REST API. + date: '2023-02-10' + criticality: breaking + owner: ankitkaushal01 - location: ProjectV2View.groupBy description: '`groupBy` will be removed. Check out the `ProjectV2View#group_by_fields` diff --git a/data/graphql/ghec/schema.docs.graphql b/data/graphql/ghec/schema.docs.graphql index 8764ba0a13..08050815b5 100644 --- a/data/graphql/ghec/schema.docs.graphql +++ b/data/graphql/ghec/schema.docs.graphql @@ -990,6 +990,11 @@ type AddReactionPayload { """ reaction: Reaction + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + """ The reactable subject. """ @@ -7155,6 +7160,11 @@ input CreatePullRequestInput { """ headRefName: String! + """ + The Node ID of the head repository. + """ + headRepositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) + """ Indicates whether maintainers can modify the pull request. """ @@ -21141,6 +21151,16 @@ type Mutation { input: PinIssueInput! ): PinIssuePayload + """ + Publish an existing sponsorship tier that is currently still a draft to a GitHub Sponsors profile. + """ + publishSponsorsTier( + """ + Parameters for PublishSponsorsTier + """ + input: PublishSponsorsTierInput! + ): PublishSponsorsTierPayload + """ Regenerates the identity provider recovery codes for an enterprise """ @@ -21321,6 +21341,16 @@ type Mutation { input: ResolveReviewThreadInput! ): ResolveReviewThreadPayload + """ + Retire a published payment tier from your GitHub Sponsors profile so it cannot be used to start new sponsorships. + """ + retireSponsorsTier( + """ + Parameters for RetireSponsorsTier + """ + input: RetireSponsorsTierInput! + ): RetireSponsorsTierPayload + """ Revoke the migrator role to a user for all organizations under an enterprise account. """ @@ -21381,6 +21411,16 @@ type Mutation { input: SetUserInteractionLimitInput! ): SetUserInteractionLimitPayload + """ + Starts a GitHub Enterprise Importer organization migration. + """ + startOrganizationMigration( + """ + Parameters for StartOrganizationMigration + """ + input: StartOrganizationMigrationInput! + ): StartOrganizationMigrationPayload + """ Starts a GitHub Enterprise Importer (GEI) repository migration. """ @@ -25700,7 +25740,7 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr ipAllowListForInstalledAppsEnabledSetting: IpAllowListForInstalledAppsEnabledSettingValue! """ - Check if the given account is sponsoring this user/organization. + Whether the given account is sponsoring this user/organization. """ isSponsoredBy( """ @@ -26508,16 +26548,26 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr sponsorsListing: SponsorsListing """ - The sponsorship from the viewer to this user/organization; that is, the - sponsorship where you're the sponsor. Only returns a sponsorship if it is active. + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. """ - sponsorshipForViewerAsSponsor: Sponsorship + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ - The sponsorship from this user/organization to the viewer; that is, the - sponsorship you're receiving. Only returns a sponsorship if it is active. + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. """ - sponsorshipForViewerAsSponsorable: Sponsorship + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ List of sponsorship updates sent from this sponsorable to sponsors. @@ -26553,6 +26603,12 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr This object's sponsorships as the maintainer. """ sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -26589,6 +26645,11 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr This object's sponsorships as the sponsor. """ sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -26703,6 +26764,28 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr """ teamsUrl: URI! + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + """ The organization's Twitter username. """ @@ -27274,6 +27357,102 @@ enum OrganizationMembersCanCreateRepositoriesSettingValue { PRIVATE } +""" +A GitHub Enterprise Importer (GEI) organization migration. +""" +type OrganizationMigration implements Node { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: String + + """ + The reason the organization migration failed. + """ + failureReason: String + id: ID! + + """ + The remaining amount of repos to be migrated. + """ + remainingRepositoriesCount: Int + + """ + The name of the source organization to be migrated. + """ + sourceOrgName: String! + + """ + The URL of the source organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The migration state. + """ + state: OrganizationMigrationState! + + """ + The name of the target organization. + """ + targetOrgName: String! + + """ + The total amount of repositories to be migrated. + """ + totalRepositoriesCount: Int +} + +""" +The Octoshift Organization migration state. +""" +enum OrganizationMigrationState { + """ + The Octoshift migration has failed. + """ + FAILED + + """ + The Octoshift migration is in progress. + """ + IN_PROGRESS + + """ + The Octoshift migration has not started. + """ + NOT_STARTED + + """ + The Octoshift migration is performing post repository migrations. + """ + POST_REPO_MIGRATION + + """ + The Octoshift migration is performing pre repository migrations. + """ + PRE_REPO_MIGRATION + + """ + The Octoshift migration has been queued. + """ + QUEUED + + """ + The Octoshift org migration is performing repository migrations. + """ + REPO_MIGRATION + + """ + The Octoshift migration has succeeded. + """ + SUCCEEDED +} + """ Used for argument of CreateProjectV2 mutation. """ @@ -27758,6 +27937,9 @@ enum PackageType { A maven package. """ MAVEN + @deprecated( + reason: "MAVEN will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2023-02-10 UTC." + ) """ An npm package. @@ -27784,6 +27966,9 @@ enum PackageType { A rubygems package. """ RUBYGEMS + @deprecated( + reason: "RUBYGEMS will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2022-12-28 UTC." + ) } """ @@ -29372,6 +29557,34 @@ type ProjectNext implements Closable & Node & Updatable { reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." ) + """ + List of fields and their constraints in the project + """ + fieldConstraints( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): ProjectNextFieldConfigurationConnection! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + """ List of fields in the project """ @@ -29722,6 +29935,51 @@ interface ProjectNextFieldCommon { ) } +""" +Configurations for project next fields. +""" +union ProjectNextFieldConfiguration = ProjectNextField | ProjectNextIterationField | ProjectNextSingleSelectField + +""" +The connection type for ProjectNextFieldConfiguration. +""" +type ProjectNextFieldConfigurationConnection { + """ + A list of edges. + """ + edges: [ProjectNextFieldConfigurationEdge] + + """ + A list of nodes. + """ + nodes: [ProjectNextFieldConfiguration] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectNextFieldConfigurationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectNextFieldConfiguration +} + """ The connection type for ProjectNextField. """ @@ -30067,6 +30325,14 @@ type ProjectNextItemFieldValue implements Node { reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." ) + """ + The project field that contains this value and it's constraint. + """ + projectFieldConstraint: ProjectNextFieldConfiguration! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + """ The project item that contains this value. """ @@ -30132,6 +30398,158 @@ type ProjectNextItemFieldValueEdge { node: ProjectNextItemFieldValue } +""" +An iteration field inside a project. +""" +type ProjectNextIterationField implements Node & ProjectNextFieldCommon { + """ + Iteration configuration settings + """ + configuration: ProjectNextIterationFieldConfiguration! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's type. + """ + dataType: ProjectNextFieldType! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + id: ID! + + """ + The project field's name. + """ + name: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The project that contains this field. + """ + project: ProjectNext! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's settings. + """ + settings: String + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + +""" +Iteration field configuration for a project. +""" +type ProjectNextIterationFieldConfiguration { + """ + The iteration's completed iterations + """ + completedIterations: [ProjectNextIterationFieldIteration!]! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's duration in days + """ + duration: Int! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's iterations + """ + iterations: [ProjectNextIterationFieldIteration!]! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's start day of the week + """ + startDay: Int! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + +""" +Iteration field iteration settings for a project. +""" +type ProjectNextIterationFieldIteration { + """ + The iteration's duration in days + """ + duration: Int! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's ID. + """ + id: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's start date + """ + startDate: Date! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's title. + """ + title: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's html title. + """ + titleHTML: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + """ Properties by which the return project can be ordered. """ @@ -30227,6 +30645,105 @@ interface ProjectNextOwner { ) } +""" +A single select field inside a project. +""" +type ProjectNextSingleSelectField implements Node & ProjectNextFieldCommon { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's type. + """ + dataType: ProjectNextFieldType! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + id: ID! + + """ + The project field's name. + """ + name: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Options for the single select field + """ + options: [ProjectNextSingleSelectFieldOption!]! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The project that contains this field. + """ + project: ProjectNext! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's settings. + """ + settings: String + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + +""" +Single select field option for a configuration for a project. +""" +type ProjectNextSingleSelectFieldOption { + """ + The option's ID. + """ + id: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The option's name. + """ + name: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The option's html name. + """ + nameHTML: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + """ Ways in which lists of projects can be ordered upon return. """ @@ -32738,6 +33255,36 @@ type PublicKeyEdge { node: PublicKey } +""" +Autogenerated input type of PublishSponsorsTier +""" +input PublishSponsorsTierInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the draft tier to publish. + """ + tierId: ID! @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of PublishSponsorsTier +""" +type PublishSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was published. + """ + sponsorsTier: SponsorsTier +} + """ A repository pull request. """ @@ -37789,6 +38336,11 @@ type RemoveReactionPayload { """ reaction: Reaction + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + """ The reactable subject. """ @@ -40851,6 +41403,11 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent """ hasProjectsEnabled: Boolean! + """ + Whether vulnerability alerts are enabled for the repository. + """ + hasVulnerabilityAlertsEnabled: Boolean! + """ Indicates if the repository has wiki feature enabled. """ @@ -43747,6 +44304,36 @@ type RestrictedContribution implements Contribution { user: User! } +""" +Autogenerated input type of RetireSponsorsTier +""" +input RetireSponsorsTierInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the published tier to retire. + """ + tierId: ID! @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of RetireSponsorsTier +""" +type RetireSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was retired. + """ + sponsorsTier: SponsorsTier +} + """ A user, team, or app who has the ability to dismiss a review on a protected branch. """ @@ -45214,7 +45801,7 @@ interface Sponsorable { hasSponsorsListing: Boolean! """ - Check if the given account is sponsoring this user/organization. + Whether the given account is sponsoring this user/organization. """ isSponsoredBy( """ @@ -45364,16 +45951,26 @@ interface Sponsorable { sponsorsListing: SponsorsListing """ - The sponsorship from the viewer to this user/organization; that is, the - sponsorship where you're the sponsor. Only returns a sponsorship if it is active. + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. """ - sponsorshipForViewerAsSponsor: Sponsorship + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ - The sponsorship from this user/organization to the viewer; that is, the - sponsorship you're receiving. Only returns a sponsorship if it is active. + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. """ - sponsorshipForViewerAsSponsorable: Sponsorship + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ List of sponsorship updates sent from this sponsorable to sponsors. @@ -45409,6 +46006,12 @@ interface Sponsorable { This object's sponsorships as the maintainer. """ sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -45445,6 +46048,11 @@ interface Sponsorable { This object's sponsorships as the sponsor. """ sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -45479,6 +46087,28 @@ interface Sponsorable { orderBy: SponsorshipOrder ): SponsorshipConnection! + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + """ Whether or not the viewer is able to sponsor this user/organization. """ @@ -47011,6 +47641,13 @@ type SponsorsListing implements Node { """ activeGoal: SponsorsGoal + """ + The Stripe Connect account currently in use for payouts for this Sponsors + listing, if any. Will only return a value when queried by the maintainer + themselves, or by an admin of the sponsorable organization. + """ + activeStripeConnectAccount: StripeConnectAccount + """ The name of the country or region with the maintainer's bank account or fiscal host. Will only return a value when queried by the maintainer themselves, or @@ -47420,13 +48057,19 @@ type Sponsorship implements Node { createdAt: DateTime! id: ID! + """ + Whether the sponsorship is active. False implies the sponsor is a past sponsor + of the maintainer, while true implies they are a current sponsor. + """ + isActive: Boolean! + """ Whether this sponsorship represents a one-time payment versus a recurring sponsorship. """ isOneTimePayment: Boolean! """ - Check if the sponsor has chosen to receive sponsorship update emails sent from + Whether the sponsor has chosen to receive sponsorship update emails sent from the sponsorable. Only returns a non-null value when the viewer has permission to know this. """ isSponsorOptedIntoEmail: Boolean @@ -47529,6 +48172,11 @@ type SponsorshipEdge { An update sent to sponsors of a user or organization on GitHub Sponsors. """ type SponsorshipNewsletter implements Node { + """ + The author of the newsletter. + """ + author: User + """ The contents of the newsletter, the message the sponsorable wanted to give. """ @@ -47906,6 +48554,51 @@ type StarredRepositoryEdge { starredAt: DateTime! } +""" +Autogenerated input type of StartOrganizationMigration +""" +input StartOrganizationMigrationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The migration source access token. + """ + sourceAccessToken: String! + + """ + The URL of the organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The ID of the enterprise the target organization belongs to. + """ + targetEnterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The name of the target organization. + """ + targetOrgName: String! +} + +""" +Autogenerated return type of StartOrganizationMigration +""" +type StartOrganizationMigrationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new organization migration. + """ + orgMigration: OrganizationMigration +} + """ Autogenerated input type of StartRepositoryMigration """ @@ -48264,6 +48957,46 @@ enum StatusState { SUCCESS } +""" +A Stripe Connect account for receiving sponsorship funds from GitHub Sponsors. +""" +type StripeConnectAccount { + """ + The account number used to identify this Stripe Connect account. + """ + accountId: String! + + """ + The name of the country or region of an external account, such as a bank + account, tied to the Stripe Connect account. Will only return a value when + queried by the maintainer of the associated GitHub Sponsors profile + themselves, or by an admin of the sponsorable organization. + """ + billingCountryOrRegion: String + + """ + The name of the country or region of the Stripe Connect account. Will only + return a value when queried by the maintainer of the associated GitHub + Sponsors profile themselves, or by an admin of the sponsorable organization. + """ + countryOrRegion: String + + """ + Whether this Stripe Connect account is currently in use for the associated GitHub Sponsors profile. + """ + isActive: Boolean! + + """ + The GitHub Sponsors profile associated with this Stripe Connect account. + """ + sponsorsListing: SponsorsListing! + + """ + The URL to access this Stripe Connect account on Stripe's website. + """ + stripeDashboardUrl: URI! +} + """ Autogenerated input type of SubmitPullRequestReview """ @@ -53415,6 +54148,20 @@ input UpdateProjectNextItemFieldInput { """ clientMutationId: String + """ + The id of the field to be updated. Only supports custom fields and status for now. + + **Upcoming Change on 2023-01-01 UTC** + **Description:** `fieldConstraintId` will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, + to find a suitable replacement. + **Reason:** The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. + """ + fieldConstraintId: ID + @possibleTypes( + concreteTypes: ["ProjectNextField", "ProjectNextIterationField", "ProjectNextSingleSelectField"] + abstractType: "ProjectNextFieldConfiguration" + ) + """ The id of the field to be updated. @@ -53425,6 +54172,19 @@ input UpdateProjectNextItemFieldInput { """ fieldId: ID @possibleTypes(concreteTypes: ["ProjectNextField"]) + """ + The id of the field to be updated. Only supports custom fields and status for now. + + **Upcoming Change on 2022-10-01 UTC** + **Description:** `fieldWithSettingId` will be removed. Use `fieldConstraintId` instead + **Reason:** Renamed to fieldConstraintId to improve naming consistency. + """ + fieldWithSettingId: ID + @possibleTypes( + concreteTypes: ["ProjectNextField", "ProjectNextIterationField", "ProjectNextSingleSelectField"] + abstractType: "ProjectNextFieldConfiguration" + ) + """ The id of the item to be updated. This field is required. @@ -54709,7 +55469,7 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn isSiteAdmin: Boolean! """ - Check if the given account is sponsoring this user/organization. + Whether the given account is sponsoring this user/organization. """ isSponsoredBy( """ @@ -55607,16 +56367,26 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn sponsorsListing: SponsorsListing """ - The sponsorship from the viewer to this user/organization; that is, the - sponsorship where you're the sponsor. Only returns a sponsorship if it is active. + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. """ - sponsorshipForViewerAsSponsor: Sponsorship + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ - The sponsorship from this user/organization to the viewer; that is, the - sponsorship you're receiving. Only returns a sponsorship if it is active. + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. """ - sponsorshipForViewerAsSponsorable: Sponsorship + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ List of sponsorship updates sent from this sponsorable to sponsors. @@ -55652,6 +56422,12 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn This object's sponsorships as the maintainer. """ sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -55688,6 +56464,11 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn This object's sponsorships as the sponsor. """ sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -55797,6 +56578,28 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn since: DateTime ): RepositoryConnection! + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + """ The user's Twitter username. """ diff --git a/data/graphql/graphql_upcoming_changes.public.yml b/data/graphql/graphql_upcoming_changes.public.yml index c9c009c4be..7cfaa0ff99 100644 --- a/data/graphql/graphql_upcoming_changes.public.yml +++ b/data/graphql/graphql_upcoming_changes.public.yml @@ -120,6 +120,14 @@ upcoming_changes: date: '2022-11-21' criticality: breaking owner: s-anupam + - location: PackageType.RUBYGEMS + description: '`RUBYGEMS` will be removed.' + reason: + RUBYGEMS will be removed from this enum as this type will be migrated to + only be used by the Packages REST API. + date: '2022-12-28' + criticality: breaking + owner: ankitkaushal01 - location: AddProjectDraftIssueInput.assigneeIds description: '`assigneeIds` will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, @@ -1734,6 +1742,14 @@ upcoming_changes: date: '2023-01-01T00:00:00+00:00' criticality: breaking owner: lukewar + - location: PackageType.MAVEN + description: '`MAVEN` will be removed.' + reason: + MAVEN will be removed from this enum as this type will be migrated to only + be used by the Packages REST API. + date: '2023-02-10' + criticality: breaking + owner: ankitkaushal01 - location: ProjectV2View.groupBy description: '`groupBy` will be removed. Check out the `ProjectV2View#group_by_fields` diff --git a/data/graphql/schema.docs.graphql b/data/graphql/schema.docs.graphql index 8764ba0a13..08050815b5 100644 --- a/data/graphql/schema.docs.graphql +++ b/data/graphql/schema.docs.graphql @@ -990,6 +990,11 @@ type AddReactionPayload { """ reaction: Reaction + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + """ The reactable subject. """ @@ -7155,6 +7160,11 @@ input CreatePullRequestInput { """ headRefName: String! + """ + The Node ID of the head repository. + """ + headRepositoryId: ID @possibleTypes(concreteTypes: ["Repository"]) + """ Indicates whether maintainers can modify the pull request. """ @@ -21141,6 +21151,16 @@ type Mutation { input: PinIssueInput! ): PinIssuePayload + """ + Publish an existing sponsorship tier that is currently still a draft to a GitHub Sponsors profile. + """ + publishSponsorsTier( + """ + Parameters for PublishSponsorsTier + """ + input: PublishSponsorsTierInput! + ): PublishSponsorsTierPayload + """ Regenerates the identity provider recovery codes for an enterprise """ @@ -21321,6 +21341,16 @@ type Mutation { input: ResolveReviewThreadInput! ): ResolveReviewThreadPayload + """ + Retire a published payment tier from your GitHub Sponsors profile so it cannot be used to start new sponsorships. + """ + retireSponsorsTier( + """ + Parameters for RetireSponsorsTier + """ + input: RetireSponsorsTierInput! + ): RetireSponsorsTierPayload + """ Revoke the migrator role to a user for all organizations under an enterprise account. """ @@ -21381,6 +21411,16 @@ type Mutation { input: SetUserInteractionLimitInput! ): SetUserInteractionLimitPayload + """ + Starts a GitHub Enterprise Importer organization migration. + """ + startOrganizationMigration( + """ + Parameters for StartOrganizationMigration + """ + input: StartOrganizationMigrationInput! + ): StartOrganizationMigrationPayload + """ Starts a GitHub Enterprise Importer (GEI) repository migration. """ @@ -25700,7 +25740,7 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr ipAllowListForInstalledAppsEnabledSetting: IpAllowListForInstalledAppsEnabledSettingValue! """ - Check if the given account is sponsoring this user/organization. + Whether the given account is sponsoring this user/organization. """ isSponsoredBy( """ @@ -26508,16 +26548,26 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr sponsorsListing: SponsorsListing """ - The sponsorship from the viewer to this user/organization; that is, the - sponsorship where you're the sponsor. Only returns a sponsorship if it is active. + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. """ - sponsorshipForViewerAsSponsor: Sponsorship + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ - The sponsorship from this user/organization to the viewer; that is, the - sponsorship you're receiving. Only returns a sponsorship if it is active. + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. """ - sponsorshipForViewerAsSponsorable: Sponsorship + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ List of sponsorship updates sent from this sponsorable to sponsors. @@ -26553,6 +26603,12 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr This object's sponsorships as the maintainer. """ sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -26589,6 +26645,11 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr This object's sponsorships as the sponsor. """ sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -26703,6 +26764,28 @@ type Organization implements Actor & MemberStatusable & Node & PackageOwner & Pr """ teamsUrl: URI! + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + """ The organization's Twitter username. """ @@ -27274,6 +27357,102 @@ enum OrganizationMembersCanCreateRepositoriesSettingValue { PRIVATE } +""" +A GitHub Enterprise Importer (GEI) organization migration. +""" +type OrganizationMigration implements Node { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + + """ + Identifies the primary key from the database. + """ + databaseId: String + + """ + The reason the organization migration failed. + """ + failureReason: String + id: ID! + + """ + The remaining amount of repos to be migrated. + """ + remainingRepositoriesCount: Int + + """ + The name of the source organization to be migrated. + """ + sourceOrgName: String! + + """ + The URL of the source organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The migration state. + """ + state: OrganizationMigrationState! + + """ + The name of the target organization. + """ + targetOrgName: String! + + """ + The total amount of repositories to be migrated. + """ + totalRepositoriesCount: Int +} + +""" +The Octoshift Organization migration state. +""" +enum OrganizationMigrationState { + """ + The Octoshift migration has failed. + """ + FAILED + + """ + The Octoshift migration is in progress. + """ + IN_PROGRESS + + """ + The Octoshift migration has not started. + """ + NOT_STARTED + + """ + The Octoshift migration is performing post repository migrations. + """ + POST_REPO_MIGRATION + + """ + The Octoshift migration is performing pre repository migrations. + """ + PRE_REPO_MIGRATION + + """ + The Octoshift migration has been queued. + """ + QUEUED + + """ + The Octoshift org migration is performing repository migrations. + """ + REPO_MIGRATION + + """ + The Octoshift migration has succeeded. + """ + SUCCEEDED +} + """ Used for argument of CreateProjectV2 mutation. """ @@ -27758,6 +27937,9 @@ enum PackageType { A maven package. """ MAVEN + @deprecated( + reason: "MAVEN will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2023-02-10 UTC." + ) """ An npm package. @@ -27784,6 +27966,9 @@ enum PackageType { A rubygems package. """ RUBYGEMS + @deprecated( + reason: "RUBYGEMS will be removed from this enum as this type will be migrated to only be used by the Packages REST API. Removal on 2022-12-28 UTC." + ) } """ @@ -29372,6 +29557,34 @@ type ProjectNext implements Closable & Node & Updatable { reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." ) + """ + List of fields and their constraints in the project + """ + fieldConstraints( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): ProjectNextFieldConfigurationConnection! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + """ List of fields in the project """ @@ -29722,6 +29935,51 @@ interface ProjectNextFieldCommon { ) } +""" +Configurations for project next fields. +""" +union ProjectNextFieldConfiguration = ProjectNextField | ProjectNextIterationField | ProjectNextSingleSelectField + +""" +The connection type for ProjectNextFieldConfiguration. +""" +type ProjectNextFieldConfigurationConnection { + """ + A list of edges. + """ + edges: [ProjectNextFieldConfigurationEdge] + + """ + A list of nodes. + """ + nodes: [ProjectNextFieldConfiguration] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + +""" +An edge in a connection. +""" +type ProjectNextFieldConfigurationEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: ProjectNextFieldConfiguration +} + """ The connection type for ProjectNextField. """ @@ -30067,6 +30325,14 @@ type ProjectNextItemFieldValue implements Node { reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." ) + """ + The project field that contains this value and it's constraint. + """ + projectFieldConstraint: ProjectNextFieldConfiguration! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + """ The project item that contains this value. """ @@ -30132,6 +30398,158 @@ type ProjectNextItemFieldValueEdge { node: ProjectNextItemFieldValue } +""" +An iteration field inside a project. +""" +type ProjectNextIterationField implements Node & ProjectNextFieldCommon { + """ + Iteration configuration settings + """ + configuration: ProjectNextIterationFieldConfiguration! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's type. + """ + dataType: ProjectNextFieldType! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + id: ID! + + """ + The project field's name. + """ + name: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The project that contains this field. + """ + project: ProjectNext! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's settings. + """ + settings: String + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + +""" +Iteration field configuration for a project. +""" +type ProjectNextIterationFieldConfiguration { + """ + The iteration's completed iterations + """ + completedIterations: [ProjectNextIterationFieldIteration!]! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's duration in days + """ + duration: Int! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's iterations + """ + iterations: [ProjectNextIterationFieldIteration!]! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's start day of the week + """ + startDay: Int! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + +""" +Iteration field iteration settings for a project. +""" +type ProjectNextIterationFieldIteration { + """ + The iteration's duration in days + """ + duration: Int! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's ID. + """ + id: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's start date + """ + startDate: Date! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's title. + """ + title: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The iteration's html title. + """ + titleHTML: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + """ Properties by which the return project can be ordered. """ @@ -30227,6 +30645,105 @@ interface ProjectNextOwner { ) } +""" +A single select field inside a project. +""" +type ProjectNextSingleSelectField implements Node & ProjectNextFieldCommon { + """ + Identifies the date and time when the object was created. + """ + createdAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's type. + """ + dataType: ProjectNextFieldType! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the primary key from the database. + """ + databaseId: Int + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + id: ID! + + """ + The project field's name. + """ + name: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Options for the single select field + """ + options: [ProjectNextSingleSelectFieldOption!]! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The project that contains this field. + """ + project: ProjectNext! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The field's settings. + """ + settings: String + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + Identifies the date and time when the object was last updated. + """ + updatedAt: DateTime! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + +""" +Single select field option for a configuration for a project. +""" +type ProjectNextSingleSelectFieldOption { + """ + The option's ID. + """ + id: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The option's name. + """ + name: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) + + """ + The option's html name. + """ + nameHTML: String! + @deprecated( + reason: "The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC." + ) +} + """ Ways in which lists of projects can be ordered upon return. """ @@ -32738,6 +33255,36 @@ type PublicKeyEdge { node: PublicKey } +""" +Autogenerated input type of PublishSponsorsTier +""" +input PublishSponsorsTierInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the draft tier to publish. + """ + tierId: ID! @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of PublishSponsorsTier +""" +type PublishSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was published. + """ + sponsorsTier: SponsorsTier +} + """ A repository pull request. """ @@ -37789,6 +38336,11 @@ type RemoveReactionPayload { """ reaction: Reaction + """ + The reaction groups for the subject. + """ + reactionGroups: [ReactionGroup!] + """ The reactable subject. """ @@ -40851,6 +41403,11 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent """ hasProjectsEnabled: Boolean! + """ + Whether vulnerability alerts are enabled for the repository. + """ + hasVulnerabilityAlertsEnabled: Boolean! + """ Indicates if the repository has wiki feature enabled. """ @@ -43747,6 +44304,36 @@ type RestrictedContribution implements Contribution { user: User! } +""" +Autogenerated input type of RetireSponsorsTier +""" +input RetireSponsorsTierInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the published tier to retire. + """ + tierId: ID! @possibleTypes(concreteTypes: ["SponsorsTier"]) +} + +""" +Autogenerated return type of RetireSponsorsTier +""" +type RetireSponsorsTierPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The tier that was retired. + """ + sponsorsTier: SponsorsTier +} + """ A user, team, or app who has the ability to dismiss a review on a protected branch. """ @@ -45214,7 +45801,7 @@ interface Sponsorable { hasSponsorsListing: Boolean! """ - Check if the given account is sponsoring this user/organization. + Whether the given account is sponsoring this user/organization. """ isSponsoredBy( """ @@ -45364,16 +45951,26 @@ interface Sponsorable { sponsorsListing: SponsorsListing """ - The sponsorship from the viewer to this user/organization; that is, the - sponsorship where you're the sponsor. Only returns a sponsorship if it is active. + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. """ - sponsorshipForViewerAsSponsor: Sponsorship + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ - The sponsorship from this user/organization to the viewer; that is, the - sponsorship you're receiving. Only returns a sponsorship if it is active. + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. """ - sponsorshipForViewerAsSponsorable: Sponsorship + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ List of sponsorship updates sent from this sponsorable to sponsors. @@ -45409,6 +46006,12 @@ interface Sponsorable { This object's sponsorships as the maintainer. """ sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -45445,6 +46048,11 @@ interface Sponsorable { This object's sponsorships as the sponsor. """ sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -45479,6 +46087,28 @@ interface Sponsorable { orderBy: SponsorshipOrder ): SponsorshipConnection! + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + """ Whether or not the viewer is able to sponsor this user/organization. """ @@ -47011,6 +47641,13 @@ type SponsorsListing implements Node { """ activeGoal: SponsorsGoal + """ + The Stripe Connect account currently in use for payouts for this Sponsors + listing, if any. Will only return a value when queried by the maintainer + themselves, or by an admin of the sponsorable organization. + """ + activeStripeConnectAccount: StripeConnectAccount + """ The name of the country or region with the maintainer's bank account or fiscal host. Will only return a value when queried by the maintainer themselves, or @@ -47420,13 +48057,19 @@ type Sponsorship implements Node { createdAt: DateTime! id: ID! + """ + Whether the sponsorship is active. False implies the sponsor is a past sponsor + of the maintainer, while true implies they are a current sponsor. + """ + isActive: Boolean! + """ Whether this sponsorship represents a one-time payment versus a recurring sponsorship. """ isOneTimePayment: Boolean! """ - Check if the sponsor has chosen to receive sponsorship update emails sent from + Whether the sponsor has chosen to receive sponsorship update emails sent from the sponsorable. Only returns a non-null value when the viewer has permission to know this. """ isSponsorOptedIntoEmail: Boolean @@ -47529,6 +48172,11 @@ type SponsorshipEdge { An update sent to sponsors of a user or organization on GitHub Sponsors. """ type SponsorshipNewsletter implements Node { + """ + The author of the newsletter. + """ + author: User + """ The contents of the newsletter, the message the sponsorable wanted to give. """ @@ -47906,6 +48554,51 @@ type StarredRepositoryEdge { starredAt: DateTime! } +""" +Autogenerated input type of StartOrganizationMigration +""" +input StartOrganizationMigrationInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The migration source access token. + """ + sourceAccessToken: String! + + """ + The URL of the organization to migrate. + """ + sourceOrgUrl: URI! + + """ + The ID of the enterprise the target organization belongs to. + """ + targetEnterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"]) + + """ + The name of the target organization. + """ + targetOrgName: String! +} + +""" +Autogenerated return type of StartOrganizationMigration +""" +type StartOrganizationMigrationPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new organization migration. + """ + orgMigration: OrganizationMigration +} + """ Autogenerated input type of StartRepositoryMigration """ @@ -48264,6 +48957,46 @@ enum StatusState { SUCCESS } +""" +A Stripe Connect account for receiving sponsorship funds from GitHub Sponsors. +""" +type StripeConnectAccount { + """ + The account number used to identify this Stripe Connect account. + """ + accountId: String! + + """ + The name of the country or region of an external account, such as a bank + account, tied to the Stripe Connect account. Will only return a value when + queried by the maintainer of the associated GitHub Sponsors profile + themselves, or by an admin of the sponsorable organization. + """ + billingCountryOrRegion: String + + """ + The name of the country or region of the Stripe Connect account. Will only + return a value when queried by the maintainer of the associated GitHub + Sponsors profile themselves, or by an admin of the sponsorable organization. + """ + countryOrRegion: String + + """ + Whether this Stripe Connect account is currently in use for the associated GitHub Sponsors profile. + """ + isActive: Boolean! + + """ + The GitHub Sponsors profile associated with this Stripe Connect account. + """ + sponsorsListing: SponsorsListing! + + """ + The URL to access this Stripe Connect account on Stripe's website. + """ + stripeDashboardUrl: URI! +} + """ Autogenerated input type of SubmitPullRequestReview """ @@ -53415,6 +54148,20 @@ input UpdateProjectNextItemFieldInput { """ clientMutationId: String + """ + The id of the field to be updated. Only supports custom fields and status for now. + + **Upcoming Change on 2023-01-01 UTC** + **Description:** `fieldConstraintId` will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, + to find a suitable replacement. + **Reason:** The `ProjectNext` API is deprecated in favour of the more capable `ProjectV2` API. + """ + fieldConstraintId: ID + @possibleTypes( + concreteTypes: ["ProjectNextField", "ProjectNextIterationField", "ProjectNextSingleSelectField"] + abstractType: "ProjectNextFieldConfiguration" + ) + """ The id of the field to be updated. @@ -53425,6 +54172,19 @@ input UpdateProjectNextItemFieldInput { """ fieldId: ID @possibleTypes(concreteTypes: ["ProjectNextField"]) + """ + The id of the field to be updated. Only supports custom fields and status for now. + + **Upcoming Change on 2022-10-01 UTC** + **Description:** `fieldWithSettingId` will be removed. Use `fieldConstraintId` instead + **Reason:** Renamed to fieldConstraintId to improve naming consistency. + """ + fieldWithSettingId: ID + @possibleTypes( + concreteTypes: ["ProjectNextField", "ProjectNextIterationField", "ProjectNextSingleSelectField"] + abstractType: "ProjectNextFieldConfiguration" + ) + """ The id of the item to be updated. This field is required. @@ -54709,7 +55469,7 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn isSiteAdmin: Boolean! """ - Check if the given account is sponsoring this user/organization. + Whether the given account is sponsoring this user/organization. """ isSponsoredBy( """ @@ -55607,16 +56367,26 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn sponsorsListing: SponsorsListing """ - The sponsorship from the viewer to this user/organization; that is, the - sponsorship where you're the sponsor. Only returns a sponsorship if it is active. + The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor. """ - sponsorshipForViewerAsSponsor: Sponsorship + sponsorshipForViewerAsSponsor( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the viewer's sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ - The sponsorship from this user/organization to the viewer; that is, the - sponsorship you're receiving. Only returns a sponsorship if it is active. + The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving. """ - sponsorshipForViewerAsSponsorable: Sponsorship + sponsorshipForViewerAsSponsorable( + """ + Whether to return the sponsorship only if it's still active. Pass false to + get the sponsorship back even if it has been cancelled. + """ + activeOnly: Boolean = true + ): Sponsorship """ List of sponsorship updates sent from this sponsorable to sponsors. @@ -55652,6 +56422,12 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn This object's sponsorships as the maintainer. """ sponsorshipsAsMaintainer( + """ + Whether to include only sponsorships that are active right now, versus all + sponsorships this maintainer has ever received. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -55688,6 +56464,11 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn This object's sponsorships as the sponsor. """ sponsorshipsAsSponsor( + """ + Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made. + """ + activeOnly: Boolean = true + """ Returns the elements in the list that come after the specified cursor. """ @@ -55797,6 +56578,28 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectNextOwn since: DateTime ): RepositoryConnection! + """ + The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has + spent on GitHub to fund sponsorships. Only returns a value when viewed by the + user themselves or by a user who can manage sponsorships for the requested organization. + """ + totalSponsorshipAmountAsSponsorInCents( + """ + Filter payments to those that occurred on or after this time. + """ + since: DateTime + + """ + Filter payments to those made to the users or organizations with the specified usernames. + """ + sponsorableLogins: [String!] = [] + + """ + Filter payments to those that occurred before this time. + """ + until: DateTime + ): Int + """ The user's Twitter username. """ diff --git a/lib/graphql/static/changelog.json b/lib/graphql/static/changelog.json index 4baa8d637d..46a27a238d 100644 --- a/lib/graphql/static/changelog.json +++ b/lib/graphql/static/changelog.json @@ -1,4 +1,70 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Type OrganizationMigration was added

", + "

Type OrganizationMigrationState was added

", + "

Type ProjectNextFieldConfiguration was added

", + "

Type ProjectNextFieldConfigurationConnection was added

", + "

Type ProjectNextFieldConfigurationEdge was added

", + "

Type ProjectNextIterationField was added

", + "

Type ProjectNextIterationFieldConfiguration was added

", + "

Type ProjectNextIterationFieldIteration was added

", + "

Type ProjectNextSingleSelectField was added

", + "

Type ProjectNextSingleSelectFieldOption was added

", + "

Type PublishSponsorsTierInput was added

", + "

Type PublishSponsorsTierPayload was added

", + "

Type RetireSponsorsTierInput was added

", + "

Type RetireSponsorsTierPayload was added

", + "

Type StartOrganizationMigrationInput was added

", + "

Type StartOrganizationMigrationPayload was added

", + "

Type StripeConnectAccount was added

", + "

Field reactionGroups was added to object type AddReactionPayload

", + "

Input field headRepositoryId was added to input object type CreatePullRequestInput

", + "

Field publishSponsorsTier was added to object type Mutation

", + "

Field retireSponsorsTier was added to object type Mutation

", + "

Field startOrganizationMigration was added to object type Mutation

", + "

Field totalSponsorshipAmountAsSponsorInCents was added to object type Organization

", + "

Argument activeOnly: Boolean added to field Organization.sponsorshipForViewerAsSponsor

", + "

Argument activeOnly: Boolean added to field Organization.sponsorshipForViewerAsSponsorable

", + "

Argument activeOnly: Boolean added to field Organization.sponsorshipsAsMaintainer

", + "

Argument activeOnly: Boolean added to field Organization.sponsorshipsAsSponsor

", + "

Field fieldConstraints was added to object type ProjectNext

", + "

Field projectFieldConstraint was added to object type ProjectNextItemFieldValue

", + "

Field reactionGroups was added to object type RemoveReactionPayload

", + "

Field hasVulnerabilityAlertsEnabled was added to object type Repository

", + "

Field totalSponsorshipAmountAsSponsorInCents was added to interface Sponsorable

", + "

Argument activeOnly: Boolean added to field Sponsorable.sponsorshipForViewerAsSponsor

", + "

Argument activeOnly: Boolean added to field Sponsorable.sponsorshipForViewerAsSponsorable

", + "

Argument activeOnly: Boolean added to field Sponsorable.sponsorshipsAsMaintainer

", + "

Argument activeOnly: Boolean added to field Sponsorable.sponsorshipsAsSponsor

", + "

Field activeStripeConnectAccount was added to object type SponsorsListing

", + "

Field isActive was added to object type Sponsorship

", + "

Field author was added to object type SponsorshipNewsletter

", + "

Input field fieldConstraintId was added to input object type UpdateProjectNextItemFieldInput

", + "

Input field fieldWithSettingId was added to input object type UpdateProjectNextItemFieldInput

", + "

Field totalSponsorshipAmountAsSponsorInCents was added to object type User

", + "

Argument activeOnly: Boolean added to field User.sponsorshipForViewerAsSponsor

", + "

Argument activeOnly: Boolean added to field User.sponsorshipForViewerAsSponsorable

", + "

Argument activeOnly: Boolean added to field User.sponsorshipsAsMaintainer

", + "

Argument activeOnly: Boolean added to field User.sponsorshipsAsSponsor

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [ + { + "title": "The following changes will be made to the schema:", + "changes": [ + "

On member PackageType.RUBYGEMS:RUBYGEMS will be removed. Effective 2022-12-28.

", + "

On member PackageType.MAVEN:MAVEN will be removed. Effective 2023-02-10.

" + ] + } + ], + "date": "2023-01-10" + }, { "schemaChanges": [ { diff --git a/lib/graphql/static/schema-dotcom.json b/lib/graphql/static/schema-dotcom.json index baa21dba11..c032e5f4e9 100644 --- a/lib/graphql/static/schema-dotcom.json +++ b/lib/graphql/static/schema-dotcom.json @@ -1600,6 +1600,14 @@ "href": "/graphql/reference/objects#reaction", "description": "

The reaction object.

" }, + { + "name": "reactionGroups", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup", + "description": "

The reaction groups for the subject.

" + }, { "name": "subject", "type": "Reactable", @@ -4788,6 +4796,40 @@ } ] }, + { + "name": "publishSponsorsTier", + "kind": "mutations", + "id": "publishsponsorstier", + "href": "/graphql/reference/mutations#publishsponsorstier", + "description": "

Publish an existing sponsorship tier that is currently still a draft to a GitHub Sponsors profile.

", + "inputFields": [ + { + "name": "input", + "type": "PublishSponsorsTierInput!", + "id": "publishsponsorstierinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#publishsponsorstierinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "sponsorsTier", + "type": "SponsorsTier", + "id": "sponsorstier", + "kind": "objects", + "href": "/graphql/reference/objects#sponsorstier", + "description": "

The tier that was published.

" + } + ] + }, { "name": "regenerateEnterpriseIdentityProviderRecoveryCodes", "kind": "mutations", @@ -5200,6 +5242,14 @@ "href": "/graphql/reference/objects#reaction", "description": "

The reaction object.

" }, + { + "name": "reactionGroups", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup", + "description": "

The reaction groups for the subject.

" + }, { "name": "subject", "type": "Reactable", @@ -5464,6 +5514,40 @@ } ] }, + { + "name": "retireSponsorsTier", + "kind": "mutations", + "id": "retiresponsorstier", + "href": "/graphql/reference/mutations#retiresponsorstier", + "description": "

Retire a published payment tier from your GitHub Sponsors profile so it cannot be used to start new sponsorships.

", + "inputFields": [ + { + "name": "input", + "type": "RetireSponsorsTierInput!", + "id": "retiresponsorstierinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#retiresponsorstierinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "sponsorsTier", + "type": "SponsorsTier", + "id": "sponsorstier", + "kind": "objects", + "href": "/graphql/reference/objects#sponsorstier", + "description": "

The tier that was retired.

" + } + ] + }, { "name": "revokeEnterpriseOrganizationsMigratorRole", "kind": "mutations", @@ -5668,6 +5752,40 @@ } ] }, + { + "name": "startOrganizationMigration", + "kind": "mutations", + "id": "startorganizationmigration", + "href": "/graphql/reference/mutations#startorganizationmigration", + "description": "

Starts a GitHub Enterprise Importer organization migration.

", + "inputFields": [ + { + "name": "input", + "type": "StartOrganizationMigrationInput!", + "id": "startorganizationmigrationinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#startorganizationmigrationinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "orgMigration", + "type": "OrganizationMigration", + "id": "organizationmigration", + "kind": "objects", + "href": "/graphql/reference/objects#organizationmigration", + "description": "

The new organization migration.

" + } + ] + }, { "name": "startRepositoryMigration", "kind": "mutations", @@ -36228,7 +36346,7 @@ }, { "name": "isSponsoredBy", - "description": "

Check if the given account is sponsoring this user/organization.

", + "description": "

Whether the given account is sponsoring this user/organization.

", "type": "Boolean!", "id": "boolean", "kind": "scalars", @@ -37779,19 +37897,45 @@ }, { "name": "sponsorshipForViewerAsSponsor", - "description": "

The sponsorship from the viewer to this user/organization; that is, the\nsponsorship where you're the sponsor. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the viewer's sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipForViewerAsSponsorable", - "description": "

The sponsorship from this user/organization to the viewer; that is, the\nsponsorship you're receiving. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipNewsletters", @@ -37861,6 +38005,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all\nsponsorships this maintainer has ever received.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -37932,6 +38087,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -38151,6 +38317,46 @@ "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, + { + "name": "totalSponsorshipAmountAsSponsorInCents", + "description": "

The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has\nspent on GitHub to fund sponsorships. Only returns a value when viewed by the\nuser themselves or by a user who can manage sponsorships for the requested organization.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "arguments": [ + { + "name": "since", + "description": "

Filter payments to those that occurred on or after this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + }, + { + "name": "sponsorableLogins", + "description": "

Filter payments to those made to the users or organizations with the specified usernames.

", + "type": { + "name": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "until", + "description": "

Filter payments to those that occurred before this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + } + ] + }, { "name": "twitterUsername", "description": "

The organization's Twitter username.

", @@ -38835,6 +39041,94 @@ } ] }, + { + "name": "OrganizationMigration", + "kind": "objects", + "id": "organizationmigration", + "href": "/graphql/reference/objects#organizationmigration", + "description": "

A GitHub Enterprise Importer (GEI) organization migration.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + } + ], + "fields": [ + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "failureReason", + "description": "

The reason the organization migration failed.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "remainingRepositoriesCount", + "description": "

The remaining amount of repos to be migrated.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + }, + { + "name": "sourceOrgName", + "description": "

The name of the source organization to be migrated.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceOrgUrl", + "description": "

The URL of the source organization to migrate.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "state", + "description": "

The migration state.

", + "type": "OrganizationMigrationState!", + "id": "organizationmigrationstate", + "kind": "enums", + "href": "/graphql/reference/enums#organizationmigrationstate" + }, + { + "name": "targetOrgName", + "description": "

The name of the target organization.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "totalRepositoriesCount", + "description": "

The total amount of repositories to be migrated.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, { "name": "OrganizationTeamsHovercardContext", "kind": "objects", @@ -41423,6 +41717,58 @@ "isDeprecated": true, "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" }, + { + "name": "fieldConstraints", + "description": "

List of fields and their constraints in the project.

", + "type": "ProjectNextFieldConfigurationConnection!", + "id": "projectnextfieldconfigurationconnection", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextfieldconfigurationconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + } + ], + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, { "name": "fields", "description": "

List of fields in the project.

", @@ -41878,6 +42224,72 @@ } ] }, + { + "name": "ProjectNextFieldConfigurationConnection", + "kind": "objects", + "id": "projectnextfieldconfigurationconnection", + "href": "/graphql/reference/objects#projectnextfieldconfigurationconnection", + "description": "

The connection type for ProjectNextFieldConfiguration.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[ProjectNextFieldConfigurationEdge]", + "id": "projectnextfieldconfigurationedge", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextfieldconfigurationedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[ProjectNextFieldConfiguration]", + "id": "projectnextfieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectnextfieldconfiguration" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "ProjectNextFieldConfigurationEdge", + "kind": "objects", + "id": "projectnextfieldconfigurationedge", + "href": "/graphql/reference/objects#projectnextfieldconfigurationedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "ProjectNextFieldConfiguration", + "id": "projectnextfieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectnextfieldconfiguration" + } + ] + }, { "name": "ProjectNextFieldConnection", "kind": "objects", @@ -42222,6 +42634,16 @@ "isDeprecated": true, "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" }, + { + "name": "projectFieldConstraint", + "description": "

The project field that contains this value and it's constraint.

", + "type": "ProjectNextFieldConfiguration!", + "id": "projectnextfieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectnextfieldconfiguration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, { "name": "projectItem", "description": "

The project item that contains this value.

", @@ -42320,6 +42742,355 @@ } ] }, + { + "name": "ProjectNextIterationField", + "kind": "objects", + "id": "projectnextiterationfield", + "href": "/graphql/reference/objects#projectnextiterationfield", + "description": "

An iteration field inside a project.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + }, + { + "name": "ProjectNextFieldCommon", + "id": "projectnextfieldcommon", + "href": "/graphql/reference/interfaces#projectnextfieldcommon" + } + ], + "fields": [ + { + "name": "configuration", + "description": "

Iteration configuration settings.

", + "type": "ProjectNextIterationFieldConfiguration!", + "id": "projectnextiterationfieldconfiguration", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextiterationfieldconfiguration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "dataType", + "description": "

The field's type.

", + "type": "ProjectNextFieldType!", + "id": "projectnextfieldtype", + "kind": "enums", + "href": "/graphql/reference/enums#projectnextfieldtype", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "name", + "description": "

The project field's name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "project", + "description": "

The project that contains this field.

", + "type": "ProjectNext!", + "id": "projectnext", + "kind": "objects", + "href": "/graphql/reference/objects#projectnext", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "settings", + "description": "

The field's settings.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "updatedAt", + "description": "

Identifies the date and time when the object was last updated.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextIterationFieldConfiguration", + "kind": "objects", + "id": "projectnextiterationfieldconfiguration", + "href": "/graphql/reference/objects#projectnextiterationfieldconfiguration", + "description": "

Iteration field configuration for a project.

", + "fields": [ + { + "name": "completedIterations", + "description": "

The iteration's completed iterations.

", + "type": "[ProjectNextIterationFieldIteration!]!", + "id": "projectnextiterationfielditeration", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextiterationfielditeration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "duration", + "description": "

The iteration's duration in days.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "iterations", + "description": "

The iteration's iterations.

", + "type": "[ProjectNextIterationFieldIteration!]!", + "id": "projectnextiterationfielditeration", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextiterationfielditeration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "startDay", + "description": "

The iteration's start day of the week.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextIterationFieldIteration", + "kind": "objects", + "id": "projectnextiterationfielditeration", + "href": "/graphql/reference/objects#projectnextiterationfielditeration", + "description": "

Iteration field iteration settings for a project.

", + "fields": [ + { + "name": "duration", + "description": "

The iteration's duration in days.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "id", + "description": "

The iteration's ID.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "startDate", + "description": "

The iteration's start date.

", + "type": "Date!", + "id": "date", + "kind": "scalars", + "href": "/graphql/reference/scalars#date", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "title", + "description": "

The iteration's title.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "titleHTML", + "description": "

The iteration's html title.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextSingleSelectField", + "kind": "objects", + "id": "projectnextsingleselectfield", + "href": "/graphql/reference/objects#projectnextsingleselectfield", + "description": "

A single select field inside a project.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + }, + { + "name": "ProjectNextFieldCommon", + "id": "projectnextfieldcommon", + "href": "/graphql/reference/interfaces#projectnextfieldcommon" + } + ], + "fields": [ + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "dataType", + "description": "

The field's type.

", + "type": "ProjectNextFieldType!", + "id": "projectnextfieldtype", + "kind": "enums", + "href": "/graphql/reference/enums#projectnextfieldtype", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "name", + "description": "

The project field's name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "options", + "description": "

Options for the single select field.

", + "type": "[ProjectNextSingleSelectFieldOption!]!", + "id": "projectnextsingleselectfieldoption", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextsingleselectfieldoption", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "project", + "description": "

The project that contains this field.

", + "type": "ProjectNext!", + "id": "projectnext", + "kind": "objects", + "href": "/graphql/reference/objects#projectnext", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "settings", + "description": "

The field's settings.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "updatedAt", + "description": "

Identifies the date and time when the object was last updated.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextSingleSelectFieldOption", + "kind": "objects", + "id": "projectnextsingleselectfieldoption", + "href": "/graphql/reference/objects#projectnextsingleselectfieldoption", + "description": "

Single select field option for a configuration for a project.

", + "fields": [ + { + "name": "id", + "description": "

The option's ID.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "name", + "description": "

The option's name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "nameHTML", + "description": "

The option's html name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, { "name": "ProjectProgress", "kind": "objects", @@ -56802,6 +57573,14 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "hasVulnerabilityAlertsEnabled", + "description": "

Whether vulnerability alerts are enabled for the repository.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, { "name": "hasWikiEnabled", "description": "

Indicates if the repository has wiki feature enabled.

", @@ -62016,6 +62795,14 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorsgoal" }, + { + "name": "activeStripeConnectAccount", + "description": "

The Stripe Connect account currently in use for payouts for this Sponsors\nlisting, if any. Will only return a value when queried by the maintainer\nthemselves, or by an admin of the sponsorable organization.

", + "type": "StripeConnectAccount", + "id": "stripeconnectaccount", + "kind": "objects", + "href": "/graphql/reference/objects#stripeconnectaccount" + }, { "name": "billingCountryOrRegion", "description": "

The name of the country or region with the maintainer's bank account or fiscal\nhost. Will only return a value when queried by the maintainer themselves, or\nby an admin of the sponsorable organization.

", @@ -62602,6 +63389,14 @@ "kind": "scalars", "href": "/graphql/reference/scalars#datetime" }, + { + "name": "isActive", + "description": "

Whether the sponsorship is active. False implies the sponsor is a past sponsor\nof the maintainer, while true implies they are a current sponsor.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, { "name": "isOneTimePayment", "description": "

Whether this sponsorship represents a one-time payment versus a recurring sponsorship.

", @@ -62612,7 +63407,7 @@ }, { "name": "isSponsorOptedIntoEmail", - "description": "

Check if the sponsor has chosen to receive sponsorship update emails sent from\nthe sponsorable. Only returns a non-null value when the viewer has permission to know this.

", + "description": "

Whether the sponsor has chosen to receive sponsorship update emails sent from\nthe sponsorable. Only returns a non-null value when the viewer has permission to know this.

", "type": "Boolean", "id": "boolean", "kind": "scalars", @@ -62776,6 +63571,14 @@ } ], "fields": [ + { + "name": "author", + "description": "

The author of the newsletter.

", + "type": "User", + "id": "user", + "kind": "objects", + "href": "/graphql/reference/objects#user" + }, { "name": "body", "description": "

The contents of the newsletter, the message the sponsorable wanted to give.

", @@ -63555,6 +64358,63 @@ } ] }, + { + "name": "StripeConnectAccount", + "kind": "objects", + "id": "stripeconnectaccount", + "href": "/graphql/reference/objects#stripeconnectaccount", + "description": "

A Stripe Connect account for receiving sponsorship funds from GitHub Sponsors.

", + "fields": [ + { + "name": "accountId", + "description": "

The account number used to identify this Stripe Connect account.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "billingCountryOrRegion", + "description": "

The name of the country or region of an external account, such as a bank\naccount, tied to the Stripe Connect account. Will only return a value when\nqueried by the maintainer of the associated GitHub Sponsors profile\nthemselves, or by an admin of the sponsorable organization.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "countryOrRegion", + "description": "

The name of the country or region of the Stripe Connect account. Will only\nreturn a value when queried by the maintainer of the associated GitHub\nSponsors profile themselves, or by an admin of the sponsorable organization.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "isActive", + "description": "

Whether this Stripe Connect account is currently in use for the associated GitHub Sponsors profile.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "sponsorsListing", + "description": "

The GitHub Sponsors profile associated with this Stripe Connect account.

", + "type": "SponsorsListing!", + "id": "sponsorslisting", + "kind": "objects", + "href": "/graphql/reference/objects#sponsorslisting" + }, + { + "name": "stripeDashboardUrl", + "description": "

The URL to access this Stripe Connect account on Stripe's website.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + } + ] + }, { "name": "Submodule", "kind": "objects", @@ -68723,7 +69583,7 @@ }, { "name": "isSponsoredBy", - "description": "

Check if the given account is sponsoring this user/organization.

", + "description": "

Whether the given account is sponsoring this user/organization.

", "type": "Boolean!", "id": "boolean", "kind": "scalars", @@ -70468,19 +71328,45 @@ }, { "name": "sponsorshipForViewerAsSponsor", - "description": "

The sponsorship from the viewer to this user/organization; that is, the\nsponsorship where you're the sponsor. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the viewer's sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipForViewerAsSponsorable", - "description": "

The sponsorship from this user/organization to the viewer; that is, the\nsponsorship you're receiving. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipNewsletters", @@ -70550,6 +71436,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all\nsponsorships this maintainer has ever received.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -70621,6 +71518,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -70831,6 +71739,46 @@ } ] }, + { + "name": "totalSponsorshipAmountAsSponsorInCents", + "description": "

The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has\nspent on GitHub to fund sponsorships. Only returns a value when viewed by the\nuser themselves or by a user who can manage sponsorships for the requested organization.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "arguments": [ + { + "name": "since", + "description": "

Filter payments to those that occurred on or after this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + }, + { + "name": "sponsorableLogins", + "description": "

Filter payments to those made to the users or organizations with the specified usernames.

", + "type": { + "name": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "until", + "description": "

Filter payments to those that occurred before this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + } + ] + }, { "name": "twitterUsername", "description": "

The user's Twitter username.

", @@ -74816,7 +75764,7 @@ }, { "name": "isSponsoredBy", - "description": "

Check if the given account is sponsoring this user/organization.

", + "description": "

Whether the given account is sponsoring this user/organization.

", "type": "Boolean!", "id": "boolean", "kind": "scalars", @@ -75102,19 +76050,45 @@ }, { "name": "sponsorshipForViewerAsSponsor", - "description": "

The sponsorship from the viewer to this user/organization; that is, the\nsponsorship where you're the sponsor. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the viewer's sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipForViewerAsSponsorable", - "description": "

The sponsorship from this user/organization to the viewer; that is, the\nsponsorship you're receiving. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipNewsletters", @@ -75184,6 +76158,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all\nsponsorships this maintainer has ever received.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -75255,6 +76240,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -75317,6 +76313,46 @@ } ] }, + { + "name": "totalSponsorshipAmountAsSponsorInCents", + "description": "

The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has\nspent on GitHub to fund sponsorships. Only returns a value when viewed by the\nuser themselves or by a user who can manage sponsorships for the requested organization.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "arguments": [ + { + "name": "since", + "description": "

Filter payments to those that occurred on or after this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + }, + { + "name": "sponsorableLogins", + "description": "

Filter payments to those made to the users or organizations with the specified usernames.

", + "type": { + "name": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "until", + "description": "

Filter payments to those that occurred before this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + } + ] + }, { "name": "viewerCanSponsor", "description": "

Whether or not the viewer is able to sponsor this user/organization.

", @@ -77804,6 +78840,47 @@ } ] }, + { + "name": "OrganizationMigrationState", + "kind": "enums", + "id": "organizationmigrationstate", + "href": "/graphql/reference/enums#organizationmigrationstate", + "description": "

The Octoshift Organization migration state.

", + "values": [ + { + "name": "FAILED", + "description": "

The Octoshift migration has failed.

" + }, + { + "name": "IN_PROGRESS", + "description": "

The Octoshift migration is in progress.

" + }, + { + "name": "NOT_STARTED", + "description": "

The Octoshift migration has not started.

" + }, + { + "name": "POST_REPO_MIGRATION", + "description": "

The Octoshift migration is performing post repository migrations.

" + }, + { + "name": "PRE_REPO_MIGRATION", + "description": "

The Octoshift migration is performing pre repository migrations.

" + }, + { + "name": "QUEUED", + "description": "

The Octoshift migration has been queued.

" + }, + { + "name": "REPO_MIGRATION", + "description": "

The Octoshift org migration is performing repository migrations.

" + }, + { + "name": "SUCCEEDED", + "description": "

The Octoshift migration has succeeded.

" + } + ] + }, { "name": "OrganizationOrderField", "kind": "enums", @@ -82338,6 +83415,30 @@ } ] }, + { + "name": "ProjectNextFieldConfiguration", + "kind": "unions", + "id": "projectnextfieldconfiguration", + "href": "/graphql/reference/unions#projectnextfieldconfiguration", + "description": "

Configurations for project next fields.

", + "possibleTypes": [ + { + "name": "ProjectNextField", + "id": "projectnextfield", + "href": "/graphql/reference/objects#projectnextfield" + }, + { + "name": "ProjectNextIterationField", + "id": "projectnextiterationfield", + "href": "/graphql/reference/objects#projectnextiterationfield" + }, + { + "name": "ProjectNextSingleSelectField", + "id": "projectnextsingleselectfield", + "href": "/graphql/reference/objects#projectnextsingleselectfield" + } + ] + }, { "name": "ProjectNextItemContent", "kind": "unions", @@ -86503,6 +87604,15 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "headRepositoryId", + "description": "

The Node ID of the head repository.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "maintainerCanModify", "description": "

Indicates whether maintainers can modify the pull request.

", @@ -89596,6 +90706,32 @@ } ] }, + { + "name": "PublishSponsorsTierInput", + "kind": "inputObjects", + "id": "publishsponsorstierinput", + "href": "/graphql/reference/input-objects#publishsponsorstierinput", + "description": "

Autogenerated input type of PublishSponsorsTier.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "tierId", + "description": "

The ID of the draft tier to publish.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "PullRequestOrder", "kind": "inputObjects", @@ -90432,6 +91568,32 @@ } ] }, + { + "name": "RetireSponsorsTierInput", + "kind": "inputObjects", + "id": "retiresponsorstierinput", + "href": "/graphql/reference/input-objects#retiresponsorstierinput", + "description": "

Autogenerated input type of RetireSponsorsTier.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "tierId", + "description": "

The ID of the published tier to retire.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "RevokeEnterpriseOrganizationsMigratorRoleInput", "kind": "inputObjects", @@ -90975,6 +92137,56 @@ } ] }, + { + "name": "StartOrganizationMigrationInput", + "kind": "inputObjects", + "id": "startorganizationmigrationinput", + "href": "/graphql/reference/input-objects#startorganizationmigrationinput", + "description": "

Autogenerated input type of StartOrganizationMigration.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceAccessToken", + "description": "

The migration source access token.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceOrgUrl", + "description": "

The URL of the organization to migrate.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "targetEnterpriseId", + "description": "

The ID of the enterprise the target organization belongs to.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "targetOrgName", + "description": "

The name of the target organization.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "StartRepositoryMigrationInput", "kind": "inputObjects", @@ -93585,6 +94797,15 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "fieldConstraintId", + "description": "

The id of the field to be updated. Only supports custom fields and status for now.

\n

Upcoming Change on 2023-01-01 UTC\nDescription: fieldConstraintId will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/,\nto find a suitable replacement.\nReason: The ProjectNext API is deprecated in favour of the more capable ProjectV2 API.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "fieldId", "description": "

The id of the field to be updated.

\n

Upcoming Change on 2023-01-01 UTC\nDescription: fieldId will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/,\nto find a suitable replacement.\nReason: The ProjectNext API is deprecated in favour of the more capable ProjectV2 API.

", @@ -93594,6 +94815,15 @@ "href": "/graphql/reference/scalars#id", "isDeprecated": false }, + { + "name": "fieldWithSettingId", + "description": "

The id of the field to be updated. Only supports custom fields and status for now.

\n

Upcoming Change on 2022-10-01 UTC\nDescription: fieldWithSettingId will be removed. Use fieldConstraintId instead\nReason: Renamed to fieldConstraintId to improve naming consistency.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "itemId", "description": "

The id of the item to be updated. This field is required.

\n

Upcoming Change on 2023-01-01 UTC\nDescription: itemId will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/,\nto find a suitable replacement.\nReason: The ProjectNext API is deprecated in favour of the more capable ProjectV2 API.

", diff --git a/lib/graphql/static/schema-ghae.json b/lib/graphql/static/schema-ghae.json index f885dc27ba..3a09c5819a 100644 --- a/lib/graphql/static/schema-ghae.json +++ b/lib/graphql/static/schema-ghae.json @@ -1101,6 +1101,14 @@ "href": "/graphql/reference/objects#reaction", "description": "

The reaction object.

" }, + { + "name": "reactionGroups", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup", + "description": "

The reaction groups for the subject.

" + }, { "name": "subject", "type": "Reactable", @@ -3877,6 +3885,14 @@ "href": "/graphql/reference/objects#reaction", "description": "

The reaction object.

" }, + { + "name": "reactionGroups", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup", + "description": "

The reaction groups for the subject.

" + }, { "name": "subject", "type": "Reactable", @@ -4209,6 +4225,40 @@ } ] }, + { + "name": "startOrganizationMigration", + "kind": "mutations", + "id": "startorganizationmigration", + "href": "/graphql/reference/mutations#startorganizationmigration", + "description": "

Starts a GitHub Enterprise Importer organization migration.

", + "inputFields": [ + { + "name": "input", + "type": "StartOrganizationMigrationInput!", + "id": "startorganizationmigrationinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#startorganizationmigrationinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "orgMigration", + "type": "OrganizationMigration", + "id": "organizationmigration", + "kind": "objects", + "href": "/graphql/reference/objects#organizationmigration", + "description": "

The new organization migration.

" + } + ] + }, { "name": "startRepositoryMigration", "kind": "mutations", @@ -33438,6 +33488,94 @@ } ] }, + { + "name": "OrganizationMigration", + "kind": "objects", + "id": "organizationmigration", + "href": "/graphql/reference/objects#organizationmigration", + "description": "

A GitHub Enterprise Importer (GEI) organization migration.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + } + ], + "fields": [ + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "failureReason", + "description": "

The reason the organization migration failed.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "remainingRepositoriesCount", + "description": "

The remaining amount of repos to be migrated.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + }, + { + "name": "sourceOrgName", + "description": "

The name of the source organization to be migrated.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceOrgUrl", + "description": "

The URL of the source organization to migrate.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "state", + "description": "

The migration state.

", + "type": "OrganizationMigrationState!", + "id": "organizationmigrationstate", + "kind": "enums", + "href": "/graphql/reference/enums#organizationmigrationstate" + }, + { + "name": "targetOrgName", + "description": "

The name of the target organization.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "totalRepositoriesCount", + "description": "

The total amount of repositories to be migrated.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, { "name": "OrganizationTeamsHovercardContext", "kind": "objects", @@ -46295,6 +46433,14 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "hasVulnerabilityAlertsEnabled", + "description": "

Whether vulnerability alerts are enabled for the repository.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, { "name": "hasWikiEnabled", "description": "

Indicates if the repository has wiki feature enabled.

", @@ -63166,6 +63312,47 @@ } ] }, + { + "name": "OrganizationMigrationState", + "kind": "enums", + "id": "organizationmigrationstate", + "href": "/graphql/reference/enums#organizationmigrationstate", + "description": "

The Octoshift Organization migration state.

", + "values": [ + { + "name": "FAILED", + "description": "

The Octoshift migration has failed.

" + }, + { + "name": "IN_PROGRESS", + "description": "

The Octoshift migration is in progress.

" + }, + { + "name": "NOT_STARTED", + "description": "

The Octoshift migration has not started.

" + }, + { + "name": "POST_REPO_MIGRATION", + "description": "

The Octoshift migration is performing post repository migrations.

" + }, + { + "name": "PRE_REPO_MIGRATION", + "description": "

The Octoshift migration is performing pre repository migrations.

" + }, + { + "name": "QUEUED", + "description": "

The Octoshift migration has been queued.

" + }, + { + "name": "REPO_MIGRATION", + "description": "

The Octoshift org migration is performing repository migrations.

" + }, + { + "name": "SUCCEEDED", + "description": "

The Octoshift migration has succeeded.

" + } + ] + }, { "name": "OrganizationOrderField", "kind": "enums", @@ -69301,6 +69488,15 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "headRepositoryId", + "description": "

The Node ID of the head repository.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "maintainerCanModify", "description": "

Indicates whether maintainers can modify the pull request.

", @@ -72337,6 +72533,56 @@ } ] }, + { + "name": "StartOrganizationMigrationInput", + "kind": "inputObjects", + "id": "startorganizationmigrationinput", + "href": "/graphql/reference/input-objects#startorganizationmigrationinput", + "description": "

Autogenerated input type of StartOrganizationMigration.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceAccessToken", + "description": "

The migration source access token.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceOrgUrl", + "description": "

The URL of the organization to migrate.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "targetEnterpriseId", + "description": "

The ID of the enterprise the target organization belongs to.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "targetOrgName", + "description": "

The name of the target organization.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "StartRepositoryMigrationInput", "kind": "inputObjects", diff --git a/lib/graphql/static/schema-ghec.json b/lib/graphql/static/schema-ghec.json index baa21dba11..c032e5f4e9 100644 --- a/lib/graphql/static/schema-ghec.json +++ b/lib/graphql/static/schema-ghec.json @@ -1600,6 +1600,14 @@ "href": "/graphql/reference/objects#reaction", "description": "

The reaction object.

" }, + { + "name": "reactionGroups", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup", + "description": "

The reaction groups for the subject.

" + }, { "name": "subject", "type": "Reactable", @@ -4788,6 +4796,40 @@ } ] }, + { + "name": "publishSponsorsTier", + "kind": "mutations", + "id": "publishsponsorstier", + "href": "/graphql/reference/mutations#publishsponsorstier", + "description": "

Publish an existing sponsorship tier that is currently still a draft to a GitHub Sponsors profile.

", + "inputFields": [ + { + "name": "input", + "type": "PublishSponsorsTierInput!", + "id": "publishsponsorstierinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#publishsponsorstierinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "sponsorsTier", + "type": "SponsorsTier", + "id": "sponsorstier", + "kind": "objects", + "href": "/graphql/reference/objects#sponsorstier", + "description": "

The tier that was published.

" + } + ] + }, { "name": "regenerateEnterpriseIdentityProviderRecoveryCodes", "kind": "mutations", @@ -5200,6 +5242,14 @@ "href": "/graphql/reference/objects#reaction", "description": "

The reaction object.

" }, + { + "name": "reactionGroups", + "type": "[ReactionGroup!]", + "id": "reactiongroup", + "kind": "objects", + "href": "/graphql/reference/objects#reactiongroup", + "description": "

The reaction groups for the subject.

" + }, { "name": "subject", "type": "Reactable", @@ -5464,6 +5514,40 @@ } ] }, + { + "name": "retireSponsorsTier", + "kind": "mutations", + "id": "retiresponsorstier", + "href": "/graphql/reference/mutations#retiresponsorstier", + "description": "

Retire a published payment tier from your GitHub Sponsors profile so it cannot be used to start new sponsorships.

", + "inputFields": [ + { + "name": "input", + "type": "RetireSponsorsTierInput!", + "id": "retiresponsorstierinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#retiresponsorstierinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "sponsorsTier", + "type": "SponsorsTier", + "id": "sponsorstier", + "kind": "objects", + "href": "/graphql/reference/objects#sponsorstier", + "description": "

The tier that was retired.

" + } + ] + }, { "name": "revokeEnterpriseOrganizationsMigratorRole", "kind": "mutations", @@ -5668,6 +5752,40 @@ } ] }, + { + "name": "startOrganizationMigration", + "kind": "mutations", + "id": "startorganizationmigration", + "href": "/graphql/reference/mutations#startorganizationmigration", + "description": "

Starts a GitHub Enterprise Importer organization migration.

", + "inputFields": [ + { + "name": "input", + "type": "StartOrganizationMigrationInput!", + "id": "startorganizationmigrationinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#startorganizationmigrationinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "orgMigration", + "type": "OrganizationMigration", + "id": "organizationmigration", + "kind": "objects", + "href": "/graphql/reference/objects#organizationmigration", + "description": "

The new organization migration.

" + } + ] + }, { "name": "startRepositoryMigration", "kind": "mutations", @@ -36228,7 +36346,7 @@ }, { "name": "isSponsoredBy", - "description": "

Check if the given account is sponsoring this user/organization.

", + "description": "

Whether the given account is sponsoring this user/organization.

", "type": "Boolean!", "id": "boolean", "kind": "scalars", @@ -37779,19 +37897,45 @@ }, { "name": "sponsorshipForViewerAsSponsor", - "description": "

The sponsorship from the viewer to this user/organization; that is, the\nsponsorship where you're the sponsor. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the viewer's sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipForViewerAsSponsorable", - "description": "

The sponsorship from this user/organization to the viewer; that is, the\nsponsorship you're receiving. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipNewsletters", @@ -37861,6 +38005,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all\nsponsorships this maintainer has ever received.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -37932,6 +38087,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -38151,6 +38317,46 @@ "kind": "scalars", "href": "/graphql/reference/scalars#uri" }, + { + "name": "totalSponsorshipAmountAsSponsorInCents", + "description": "

The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has\nspent on GitHub to fund sponsorships. Only returns a value when viewed by the\nuser themselves or by a user who can manage sponsorships for the requested organization.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "arguments": [ + { + "name": "since", + "description": "

Filter payments to those that occurred on or after this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + }, + { + "name": "sponsorableLogins", + "description": "

Filter payments to those made to the users or organizations with the specified usernames.

", + "type": { + "name": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "until", + "description": "

Filter payments to those that occurred before this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + } + ] + }, { "name": "twitterUsername", "description": "

The organization's Twitter username.

", @@ -38835,6 +39041,94 @@ } ] }, + { + "name": "OrganizationMigration", + "kind": "objects", + "id": "organizationmigration", + "href": "/graphql/reference/objects#organizationmigration", + "description": "

A GitHub Enterprise Importer (GEI) organization migration.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + } + ], + "fields": [ + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "failureReason", + "description": "

The reason the organization migration failed.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "remainingRepositoriesCount", + "description": "

The remaining amount of repos to be migrated.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + }, + { + "name": "sourceOrgName", + "description": "

The name of the source organization to be migrated.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceOrgUrl", + "description": "

The URL of the source organization to migrate.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "state", + "description": "

The migration state.

", + "type": "OrganizationMigrationState!", + "id": "organizationmigrationstate", + "kind": "enums", + "href": "/graphql/reference/enums#organizationmigrationstate" + }, + { + "name": "targetOrgName", + "description": "

The name of the target organization.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "totalRepositoriesCount", + "description": "

The total amount of repositories to be migrated.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, { "name": "OrganizationTeamsHovercardContext", "kind": "objects", @@ -41423,6 +41717,58 @@ "isDeprecated": true, "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" }, + { + "name": "fieldConstraints", + "description": "

List of fields and their constraints in the project.

", + "type": "ProjectNextFieldConfigurationConnection!", + "id": "projectnextfieldconfigurationconnection", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextfieldconfigurationconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + } + ], + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, { "name": "fields", "description": "

List of fields in the project.

", @@ -41878,6 +42224,72 @@ } ] }, + { + "name": "ProjectNextFieldConfigurationConnection", + "kind": "objects", + "id": "projectnextfieldconfigurationconnection", + "href": "/graphql/reference/objects#projectnextfieldconfigurationconnection", + "description": "

The connection type for ProjectNextFieldConfiguration.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[ProjectNextFieldConfigurationEdge]", + "id": "projectnextfieldconfigurationedge", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextfieldconfigurationedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[ProjectNextFieldConfiguration]", + "id": "projectnextfieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectnextfieldconfiguration" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "ProjectNextFieldConfigurationEdge", + "kind": "objects", + "id": "projectnextfieldconfigurationedge", + "href": "/graphql/reference/objects#projectnextfieldconfigurationedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "ProjectNextFieldConfiguration", + "id": "projectnextfieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectnextfieldconfiguration" + } + ] + }, { "name": "ProjectNextFieldConnection", "kind": "objects", @@ -42222,6 +42634,16 @@ "isDeprecated": true, "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" }, + { + "name": "projectFieldConstraint", + "description": "

The project field that contains this value and it's constraint.

", + "type": "ProjectNextFieldConfiguration!", + "id": "projectnextfieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectnextfieldconfiguration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, { "name": "projectItem", "description": "

The project item that contains this value.

", @@ -42320,6 +42742,355 @@ } ] }, + { + "name": "ProjectNextIterationField", + "kind": "objects", + "id": "projectnextiterationfield", + "href": "/graphql/reference/objects#projectnextiterationfield", + "description": "

An iteration field inside a project.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + }, + { + "name": "ProjectNextFieldCommon", + "id": "projectnextfieldcommon", + "href": "/graphql/reference/interfaces#projectnextfieldcommon" + } + ], + "fields": [ + { + "name": "configuration", + "description": "

Iteration configuration settings.

", + "type": "ProjectNextIterationFieldConfiguration!", + "id": "projectnextiterationfieldconfiguration", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextiterationfieldconfiguration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "dataType", + "description": "

The field's type.

", + "type": "ProjectNextFieldType!", + "id": "projectnextfieldtype", + "kind": "enums", + "href": "/graphql/reference/enums#projectnextfieldtype", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "name", + "description": "

The project field's name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "project", + "description": "

The project that contains this field.

", + "type": "ProjectNext!", + "id": "projectnext", + "kind": "objects", + "href": "/graphql/reference/objects#projectnext", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "settings", + "description": "

The field's settings.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "updatedAt", + "description": "

Identifies the date and time when the object was last updated.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextIterationFieldConfiguration", + "kind": "objects", + "id": "projectnextiterationfieldconfiguration", + "href": "/graphql/reference/objects#projectnextiterationfieldconfiguration", + "description": "

Iteration field configuration for a project.

", + "fields": [ + { + "name": "completedIterations", + "description": "

The iteration's completed iterations.

", + "type": "[ProjectNextIterationFieldIteration!]!", + "id": "projectnextiterationfielditeration", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextiterationfielditeration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "duration", + "description": "

The iteration's duration in days.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "iterations", + "description": "

The iteration's iterations.

", + "type": "[ProjectNextIterationFieldIteration!]!", + "id": "projectnextiterationfielditeration", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextiterationfielditeration", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "startDay", + "description": "

The iteration's start day of the week.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextIterationFieldIteration", + "kind": "objects", + "id": "projectnextiterationfielditeration", + "href": "/graphql/reference/objects#projectnextiterationfielditeration", + "description": "

Iteration field iteration settings for a project.

", + "fields": [ + { + "name": "duration", + "description": "

The iteration's duration in days.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "id", + "description": "

The iteration's ID.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "startDate", + "description": "

The iteration's start date.

", + "type": "Date!", + "id": "date", + "kind": "scalars", + "href": "/graphql/reference/scalars#date", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "title", + "description": "

The iteration's title.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "titleHTML", + "description": "

The iteration's html title.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextSingleSelectField", + "kind": "objects", + "id": "projectnextsingleselectfield", + "href": "/graphql/reference/objects#projectnextsingleselectfield", + "description": "

A single select field inside a project.

", + "implements": [ + { + "name": "Node", + "id": "node", + "href": "/graphql/reference/interfaces#node" + }, + { + "name": "ProjectNextFieldCommon", + "id": "projectnextfieldcommon", + "href": "/graphql/reference/interfaces#projectnextfieldcommon" + } + ], + "fields": [ + { + "name": "createdAt", + "description": "

Identifies the date and time when the object was created.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "dataType", + "description": "

The field's type.

", + "type": "ProjectNextFieldType!", + "id": "projectnextfieldtype", + "kind": "enums", + "href": "/graphql/reference/enums#projectnextfieldtype", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "databaseId", + "description": "

Identifies the primary key from the database.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "name", + "description": "

The project field's name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "options", + "description": "

Options for the single select field.

", + "type": "[ProjectNextSingleSelectFieldOption!]!", + "id": "projectnextsingleselectfieldoption", + "kind": "objects", + "href": "/graphql/reference/objects#projectnextsingleselectfieldoption", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "project", + "description": "

The project that contains this field.

", + "type": "ProjectNext!", + "id": "projectnext", + "kind": "objects", + "href": "/graphql/reference/objects#projectnext", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "settings", + "description": "

The field's settings.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "updatedAt", + "description": "

Identifies the date and time when the object was last updated.

", + "type": "DateTime!", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, + { + "name": "ProjectNextSingleSelectFieldOption", + "kind": "objects", + "id": "projectnextsingleselectfieldoption", + "href": "/graphql/reference/objects#projectnextsingleselectfieldoption", + "description": "

Single select field option for a configuration for a project.

", + "fields": [ + { + "name": "id", + "description": "

The option's ID.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "name", + "description": "

The option's name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + }, + { + "name": "nameHTML", + "description": "

The option's html name.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "isDeprecated": true, + "deprecationReason": "

The ProjectNext API is deprecated in favour of the more capable ProjectV2 API. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/, to find a suitable replacement. Removal on 2023-01-01 UTC.

" + } + ] + }, { "name": "ProjectProgress", "kind": "objects", @@ -56802,6 +57573,14 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "hasVulnerabilityAlertsEnabled", + "description": "

Whether vulnerability alerts are enabled for the repository.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, { "name": "hasWikiEnabled", "description": "

Indicates if the repository has wiki feature enabled.

", @@ -62016,6 +62795,14 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorsgoal" }, + { + "name": "activeStripeConnectAccount", + "description": "

The Stripe Connect account currently in use for payouts for this Sponsors\nlisting, if any. Will only return a value when queried by the maintainer\nthemselves, or by an admin of the sponsorable organization.

", + "type": "StripeConnectAccount", + "id": "stripeconnectaccount", + "kind": "objects", + "href": "/graphql/reference/objects#stripeconnectaccount" + }, { "name": "billingCountryOrRegion", "description": "

The name of the country or region with the maintainer's bank account or fiscal\nhost. Will only return a value when queried by the maintainer themselves, or\nby an admin of the sponsorable organization.

", @@ -62602,6 +63389,14 @@ "kind": "scalars", "href": "/graphql/reference/scalars#datetime" }, + { + "name": "isActive", + "description": "

Whether the sponsorship is active. False implies the sponsor is a past sponsor\nof the maintainer, while true implies they are a current sponsor.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, { "name": "isOneTimePayment", "description": "

Whether this sponsorship represents a one-time payment versus a recurring sponsorship.

", @@ -62612,7 +63407,7 @@ }, { "name": "isSponsorOptedIntoEmail", - "description": "

Check if the sponsor has chosen to receive sponsorship update emails sent from\nthe sponsorable. Only returns a non-null value when the viewer has permission to know this.

", + "description": "

Whether the sponsor has chosen to receive sponsorship update emails sent from\nthe sponsorable. Only returns a non-null value when the viewer has permission to know this.

", "type": "Boolean", "id": "boolean", "kind": "scalars", @@ -62776,6 +63571,14 @@ } ], "fields": [ + { + "name": "author", + "description": "

The author of the newsletter.

", + "type": "User", + "id": "user", + "kind": "objects", + "href": "/graphql/reference/objects#user" + }, { "name": "body", "description": "

The contents of the newsletter, the message the sponsorable wanted to give.

", @@ -63555,6 +64358,63 @@ } ] }, + { + "name": "StripeConnectAccount", + "kind": "objects", + "id": "stripeconnectaccount", + "href": "/graphql/reference/objects#stripeconnectaccount", + "description": "

A Stripe Connect account for receiving sponsorship funds from GitHub Sponsors.

", + "fields": [ + { + "name": "accountId", + "description": "

The account number used to identify this Stripe Connect account.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "billingCountryOrRegion", + "description": "

The name of the country or region of an external account, such as a bank\naccount, tied to the Stripe Connect account. Will only return a value when\nqueried by the maintainer of the associated GitHub Sponsors profile\nthemselves, or by an admin of the sponsorable organization.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "countryOrRegion", + "description": "

The name of the country or region of the Stripe Connect account. Will only\nreturn a value when queried by the maintainer of the associated GitHub\nSponsors profile themselves, or by an admin of the sponsorable organization.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "isActive", + "description": "

Whether this Stripe Connect account is currently in use for the associated GitHub Sponsors profile.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "sponsorsListing", + "description": "

The GitHub Sponsors profile associated with this Stripe Connect account.

", + "type": "SponsorsListing!", + "id": "sponsorslisting", + "kind": "objects", + "href": "/graphql/reference/objects#sponsorslisting" + }, + { + "name": "stripeDashboardUrl", + "description": "

The URL to access this Stripe Connect account on Stripe's website.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + } + ] + }, { "name": "Submodule", "kind": "objects", @@ -68723,7 +69583,7 @@ }, { "name": "isSponsoredBy", - "description": "

Check if the given account is sponsoring this user/organization.

", + "description": "

Whether the given account is sponsoring this user/organization.

", "type": "Boolean!", "id": "boolean", "kind": "scalars", @@ -70468,19 +71328,45 @@ }, { "name": "sponsorshipForViewerAsSponsor", - "description": "

The sponsorship from the viewer to this user/organization; that is, the\nsponsorship where you're the sponsor. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the viewer's sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipForViewerAsSponsorable", - "description": "

The sponsorship from this user/organization to the viewer; that is, the\nsponsorship you're receiving. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipNewsletters", @@ -70550,6 +71436,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all\nsponsorships this maintainer has ever received.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -70621,6 +71518,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -70831,6 +71739,46 @@ } ] }, + { + "name": "totalSponsorshipAmountAsSponsorInCents", + "description": "

The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has\nspent on GitHub to fund sponsorships. Only returns a value when viewed by the\nuser themselves or by a user who can manage sponsorships for the requested organization.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "arguments": [ + { + "name": "since", + "description": "

Filter payments to those that occurred on or after this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + }, + { + "name": "sponsorableLogins", + "description": "

Filter payments to those made to the users or organizations with the specified usernames.

", + "type": { + "name": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "until", + "description": "

Filter payments to those that occurred before this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + } + ] + }, { "name": "twitterUsername", "description": "

The user's Twitter username.

", @@ -74816,7 +75764,7 @@ }, { "name": "isSponsoredBy", - "description": "

Check if the given account is sponsoring this user/organization.

", + "description": "

Whether the given account is sponsoring this user/organization.

", "type": "Boolean!", "id": "boolean", "kind": "scalars", @@ -75102,19 +76050,45 @@ }, { "name": "sponsorshipForViewerAsSponsor", - "description": "

The sponsorship from the viewer to this user/organization; that is, the\nsponsorship where you're the sponsor. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from the viewer to this user/organization; that is, the sponsorship where you're the sponsor.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the viewer's sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipForViewerAsSponsorable", - "description": "

The sponsorship from this user/organization to the viewer; that is, the\nsponsorship you're receiving. Only returns a sponsorship if it is active.

", + "description": "

The sponsorship from this user/organization to the viewer; that is, the sponsorship you're receiving.

", "type": "Sponsorship", "id": "sponsorship", "kind": "objects", - "href": "/graphql/reference/objects#sponsorship" + "href": "/graphql/reference/objects#sponsorship", + "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to return the sponsorship only if it's still active. Pass false to\nget the sponsorship back even if it has been cancelled.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + } + ] }, { "name": "sponsorshipNewsletters", @@ -75184,6 +76158,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all\nsponsorships this maintainer has ever received.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -75255,6 +76240,17 @@ "kind": "objects", "href": "/graphql/reference/objects#sponsorshipconnection", "arguments": [ + { + "name": "activeOnly", + "defaultValue": true, + "description": "

Whether to include only sponsorships that are active right now, versus all sponsorships this sponsor has ever made.

", + "type": { + "name": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + }, { "name": "after", "description": "

Returns the elements in the list that come after the specified cursor.

", @@ -75317,6 +76313,46 @@ } ] }, + { + "name": "totalSponsorshipAmountAsSponsorInCents", + "description": "

The amount in United States cents (e.g., 500 = $5.00 USD) that this entity has\nspent on GitHub to fund sponsorships. Only returns a value when viewed by the\nuser themselves or by a user who can manage sponsorships for the requested organization.

", + "type": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int", + "arguments": [ + { + "name": "since", + "description": "

Filter payments to those that occurred on or after this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + }, + { + "name": "sponsorableLogins", + "description": "

Filter payments to those made to the users or organizations with the specified usernames.

", + "type": { + "name": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "until", + "description": "

Filter payments to those that occurred before this time.

", + "type": { + "name": "DateTime", + "id": "datetime", + "kind": "scalars", + "href": "/graphql/reference/scalars#datetime" + } + } + ] + }, { "name": "viewerCanSponsor", "description": "

Whether or not the viewer is able to sponsor this user/organization.

", @@ -77804,6 +78840,47 @@ } ] }, + { + "name": "OrganizationMigrationState", + "kind": "enums", + "id": "organizationmigrationstate", + "href": "/graphql/reference/enums#organizationmigrationstate", + "description": "

The Octoshift Organization migration state.

", + "values": [ + { + "name": "FAILED", + "description": "

The Octoshift migration has failed.

" + }, + { + "name": "IN_PROGRESS", + "description": "

The Octoshift migration is in progress.

" + }, + { + "name": "NOT_STARTED", + "description": "

The Octoshift migration has not started.

" + }, + { + "name": "POST_REPO_MIGRATION", + "description": "

The Octoshift migration is performing post repository migrations.

" + }, + { + "name": "PRE_REPO_MIGRATION", + "description": "

The Octoshift migration is performing pre repository migrations.

" + }, + { + "name": "QUEUED", + "description": "

The Octoshift migration has been queued.

" + }, + { + "name": "REPO_MIGRATION", + "description": "

The Octoshift org migration is performing repository migrations.

" + }, + { + "name": "SUCCEEDED", + "description": "

The Octoshift migration has succeeded.

" + } + ] + }, { "name": "OrganizationOrderField", "kind": "enums", @@ -82338,6 +83415,30 @@ } ] }, + { + "name": "ProjectNextFieldConfiguration", + "kind": "unions", + "id": "projectnextfieldconfiguration", + "href": "/graphql/reference/unions#projectnextfieldconfiguration", + "description": "

Configurations for project next fields.

", + "possibleTypes": [ + { + "name": "ProjectNextField", + "id": "projectnextfield", + "href": "/graphql/reference/objects#projectnextfield" + }, + { + "name": "ProjectNextIterationField", + "id": "projectnextiterationfield", + "href": "/graphql/reference/objects#projectnextiterationfield" + }, + { + "name": "ProjectNextSingleSelectField", + "id": "projectnextsingleselectfield", + "href": "/graphql/reference/objects#projectnextsingleselectfield" + } + ] + }, { "name": "ProjectNextItemContent", "kind": "unions", @@ -86503,6 +87604,15 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "headRepositoryId", + "description": "

The Node ID of the head repository.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "maintainerCanModify", "description": "

Indicates whether maintainers can modify the pull request.

", @@ -89596,6 +90706,32 @@ } ] }, + { + "name": "PublishSponsorsTierInput", + "kind": "inputObjects", + "id": "publishsponsorstierinput", + "href": "/graphql/reference/input-objects#publishsponsorstierinput", + "description": "

Autogenerated input type of PublishSponsorsTier.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "tierId", + "description": "

The ID of the draft tier to publish.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "PullRequestOrder", "kind": "inputObjects", @@ -90432,6 +91568,32 @@ } ] }, + { + "name": "RetireSponsorsTierInput", + "kind": "inputObjects", + "id": "retiresponsorstierinput", + "href": "/graphql/reference/input-objects#retiresponsorstierinput", + "description": "

Autogenerated input type of RetireSponsorsTier.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "tierId", + "description": "

The ID of the published tier to retire.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "RevokeEnterpriseOrganizationsMigratorRoleInput", "kind": "inputObjects", @@ -90975,6 +92137,56 @@ } ] }, + { + "name": "StartOrganizationMigrationInput", + "kind": "inputObjects", + "id": "startorganizationmigrationinput", + "href": "/graphql/reference/input-objects#startorganizationmigrationinput", + "description": "

Autogenerated input type of StartOrganizationMigration.

", + "inputFields": [ + { + "name": "clientMutationId", + "description": "

A unique identifier for the client performing the mutation.

", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceAccessToken", + "description": "

The migration source access token.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "sourceOrgUrl", + "description": "

The URL of the organization to migrate.

", + "type": "URI!", + "id": "uri", + "kind": "scalars", + "href": "/graphql/reference/scalars#uri" + }, + { + "name": "targetEnterpriseId", + "description": "

The ID of the enterprise the target organization belongs to.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "targetOrgName", + "description": "

The name of the target organization.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "StartRepositoryMigrationInput", "kind": "inputObjects", @@ -93585,6 +94797,15 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "fieldConstraintId", + "description": "

The id of the field to be updated. Only supports custom fields and status for now.

\n

Upcoming Change on 2023-01-01 UTC\nDescription: fieldConstraintId will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/,\nto find a suitable replacement.\nReason: The ProjectNext API is deprecated in favour of the more capable ProjectV2 API.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "fieldId", "description": "

The id of the field to be updated.

\n

Upcoming Change on 2023-01-01 UTC\nDescription: fieldId will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/,\nto find a suitable replacement.\nReason: The ProjectNext API is deprecated in favour of the more capable ProjectV2 API.

", @@ -93594,6 +94815,15 @@ "href": "/graphql/reference/scalars#id", "isDeprecated": false }, + { + "name": "fieldWithSettingId", + "description": "

The id of the field to be updated. Only supports custom fields and status for now.

\n

Upcoming Change on 2022-10-01 UTC\nDescription: fieldWithSettingId will be removed. Use fieldConstraintId instead\nReason: Renamed to fieldConstraintId to improve naming consistency.

", + "type": "ID", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "itemId", "description": "

The id of the item to be updated. This field is required.

\n

Upcoming Change on 2023-01-01 UTC\nDescription: itemId will be removed. Follow the ProjectV2 guide at https://github.blog/changelog/2022-06-23-the-new-github-issues-june-23rd-update/,\nto find a suitable replacement.\nReason: The ProjectNext API is deprecated in favour of the more capable ProjectV2 API.

", diff --git a/lib/graphql/static/upcoming-changes.json b/lib/graphql/static/upcoming-changes.json index da4bb9c3fe..d820c95d1f 100644 --- a/lib/graphql/static/upcoming-changes.json +++ b/lib/graphql/static/upcoming-changes.json @@ -42,6 +42,16 @@ "owner": "alcere" } ], + "2023-02-10": [ + { + "location": "PackageType.MAVEN", + "description": "

MAVEN will be removed.

", + "reason": "

MAVEN will be removed from this enum as this type will be migrated to only be used by the Packages REST API.

", + "date": "2023-02-10", + "criticality": "breaking", + "owner": "ankitkaushal01" + } + ], "2023-01-01": [ { "location": "User.recentProjectsNext", @@ -1324,6 +1334,16 @@ "owner": "lukewar" } ], + "2022-12-28": [ + { + "location": "PackageType.RUBYGEMS", + "description": "

RUBYGEMS will be removed.

", + "reason": "

RUBYGEMS will be removed from this enum as this type will be migrated to only be used by the Packages REST API.

", + "date": "2022-12-28", + "criticality": "breaking", + "owner": "ankitkaushal01" + } + ], "2022-11-21": [ { "location": "PackageType.NUGET", @@ -1524,6 +1544,16 @@ "owner": "alcere" } ], + "2023-02-10": [ + { + "location": "PackageType.MAVEN", + "description": "

MAVEN will be removed.

", + "reason": "

MAVEN will be removed from this enum as this type will be migrated to only be used by the Packages REST API.

", + "date": "2023-02-10", + "criticality": "breaking", + "owner": "ankitkaushal01" + } + ], "2023-01-01": [ { "location": "User.recentProjectsNext", @@ -2806,6 +2836,16 @@ "owner": "lukewar" } ], + "2022-12-28": [ + { + "location": "PackageType.RUBYGEMS", + "description": "

RUBYGEMS will be removed.

", + "reason": "

RUBYGEMS will be removed from this enum as this type will be migrated to only be used by the Packages REST API.

", + "date": "2022-12-28", + "criticality": "breaking", + "owner": "ankitkaushal01" + } + ], "2022-11-21": [ { "location": "PackageType.NUGET", @@ -3802,6 +3842,16 @@ "owner": "alcere" } ], + "2023-02-10": [ + { + "location": "PackageType.MAVEN", + "description": "

MAVEN will be removed.

", + "reason": "

MAVEN will be removed from this enum as this type will be migrated to only be used by the Packages REST API.

", + "date": "2023-02-10", + "criticality": "breaking", + "owner": "ankitkaushal01" + } + ], "2023-01-01": [ { "location": "ProjectV2View.visibleFields", @@ -3932,6 +3982,16 @@ "owner": "adamshwert" } ], + "2022-12-28": [ + { + "location": "PackageType.RUBYGEMS", + "description": "

RUBYGEMS will be removed.

", + "reason": "

RUBYGEMS will be removed from this enum as this type will be migrated to only be used by the Packages REST API.

", + "date": "2022-12-28", + "criticality": "breaking", + "owner": "ankitkaushal01" + } + ], "2022-11-21": [ { "location": "PackageType.NUGET", From 83bdd63b1d133783004b22c9330c2b6179c98818 Mon Sep 17 00:00:00 2001 From: Joe Clark <31087804+jc-clark@users.noreply.github.com> Date: Tue, 10 Jan 2023 17:01:25 -0800 Subject: [PATCH 37/41] Add documentation for new OIDC claims, default variables, and contexts (#33719) Co-authored-by: Lucas Costi --- ...-security-hardening-with-openid-connect.md | 91 ++++++++++--------- .../actions/learn-github-actions/contexts.md | 22 ++++- .../actions/learn-github-actions/variables.md | 13 +++ data/features/actions-oidc-custom-claims.yml | 7 ++ .../reusables/actions/actor_id-description.md | 1 + .../actions/job-workflow-sha-description.md | 1 + .../actions/repository_id-description.md | 1 + .../repository_owner_id-description.md | 1 + .../actions/workflow-ref-description.md | 1 + .../actions/workflow-sha-description.md | 1 + 10 files changed, 94 insertions(+), 45 deletions(-) create mode 100644 data/features/actions-oidc-custom-claims.yml create mode 100644 data/reusables/actions/actor_id-description.md create mode 100644 data/reusables/actions/job-workflow-sha-description.md create mode 100644 data/reusables/actions/repository_id-description.md create mode 100644 data/reusables/actions/repository_owner_id-description.md create mode 100644 data/reusables/actions/workflow-ref-description.md create mode 100644 data/reusables/actions/workflow-sha-description.md diff --git a/content/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect.md b/content/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect.md index 0d240ae768..ba3fb40737 100644 --- a/content/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect.md +++ b/content/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect.md @@ -17,9 +17,9 @@ topics: ## Overview of OpenID Connect -{% data variables.product.prodname_actions %} workflows are often designed to access a cloud provider (such as AWS, Azure, GCP, or HashiCorp Vault) in order to deploy software or use the cloud's services. Before the workflow can access these resources, it will supply credentials, such as a password or token, to the cloud provider. These credentials are usually stored as a secret in {% data variables.product.prodname_dotcom %}, and the workflow presents this secret to the cloud provider every time it runs. +{% data variables.product.prodname_actions %} workflows are often designed to access a cloud provider (such as AWS, Azure, GCP, or HashiCorp Vault) in order to deploy software or use the cloud's services. Before the workflow can access these resources, it will supply credentials, such as a password or token, to the cloud provider. These credentials are usually stored as a secret in {% data variables.product.prodname_dotcom %}, and the workflow presents this secret to the cloud provider every time it runs. -However, using hardcoded secrets requires you to create credentials in the cloud provider and then duplicate them in {% data variables.product.prodname_dotcom %} as a secret. +However, using hardcoded secrets requires you to create credentials in the cloud provider and then duplicate them in {% data variables.product.prodname_dotcom %} as a secret. With OpenID Connect (OIDC), you can take a different approach by configuring your workflow to request a short-lived access token directly from the cloud provider. Your cloud provider also needs to support OIDC on their end, and you must configure a trust relationship that controls which workflows are able to request the access tokens. Providers that currently support OIDC include Amazon Web Services, Azure, Google Cloud Platform, and HashiCorp Vault, among others. @@ -27,7 +27,7 @@ With OpenID Connect (OIDC), you can take a different approach by configuring you By updating your workflows to use OIDC tokens, you can adopt the following good security practices: -- **No cloud secrets**: You won't need to duplicate your cloud credentials as long-lived {% data variables.product.prodname_dotcom %} secrets. Instead, you can configure the OIDC trust on your cloud provider, and then update your workflows to request a short-lived access token from the cloud provider through OIDC. +- **No cloud secrets**: You won't need to duplicate your cloud credentials as long-lived {% data variables.product.prodname_dotcom %} secrets. Instead, you can configure the OIDC trust on your cloud provider, and then update your workflows to request a short-lived access token from the cloud provider through OIDC. - **Authentication and authorization management**: You have more granular control over how workflows can use credentials, using your cloud provider's authentication (authN) and authorization (authZ) tools to control access to cloud resources. - **Rotating credentials**: With OIDC, your cloud provider issues a short-lived access token that is only valid for a single job, and then automatically expires. @@ -48,7 +48,7 @@ When you configure your cloud to trust {% data variables.product.prodname_dotcom - Before granting an access token, your cloud provider checks that the [`subject`](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) and other claims used to set conditions in its trust settings match those in the request's JSON Web Token (JWT). As a result, you must take care to correctly define the _subject_ and other conditions in your cloud provider. - The OIDC trust configuration steps and the syntax to set conditions for cloud roles (using _Subject_ and other claims) will vary depending on which cloud provider you're using. For some examples, see "[Example subject claims](#example-subject-claims)." - + ### Understanding the OIDC token Each job requests an OIDC token from {% data variables.product.prodname_dotcom %}'s OIDC provider, which responds with an automatically generated JSON web token (JWT) that is unique for each workflow job where it is generated. When the job runs, the OIDC token is presented to the cloud provider. To validate the token, the cloud provider checks if the OIDC token's subject and other claims are a match for the conditions that were preconfigured on the cloud role's OIDC trust definition. @@ -92,51 +92,58 @@ The following example OIDC token uses a subject (`sub`) that references a job en } ``` -To see all the claims supported by {% data variables.product.prodname_dotcom %}'s OIDC provider, review the `claims_supported` entries at +To see all the claims supported by {% data variables.product.prodname_dotcom %}'s OIDC provider, review the `claims_supported` entries at {% ifversion ghes %}`https://HOSTNAME/_services/token/.well-known/openid-configuration`{% else %}https://token.actions.githubusercontent.com/.well-known/openid-configuration{% endif %}. The token includes the standard audience, issuer, and subject claims: | Claim | Description | | ----------- | ---------------------- | -| `aud`| _(Audience)_ By default, this is the URL of the repository owner, such as the organization that owns the repository. This is the only claim that can be customized. You can set a custom audience with a toolkit command: [`core.getIDToken(audience)`](https://www.npmjs.com/package/@actions/core/v/1.6.0) | -| `iss`| _(Issuer)_ The issuer of the OIDC token: {% ifversion ghes %}`https://HOSTNAME/_services/token`{% else %}`https://token.actions.githubusercontent.com`{% endif %} | +| `aud`| _(Audience)_ By default, this is the URL of the repository owner, such as the organization that owns the repository. This is the only claim that can be customized. You can set a custom audience with a toolkit command: [`core.getIDToken(audience)`](https://www.npmjs.com/package/@actions/core/v/1.6.0) | +| `iss`| _(Issuer)_ The issuer of the OIDC token: {% ifversion ghes %}`https://HOSTNAME/_services/token`{% else %}`https://token.actions.githubusercontent.com`{% endif %} | | `sub`| _(Subject)_ Defines the subject claim that is to be validated by the cloud provider. This setting is essential for making sure that access tokens are only allocated in a predictable way.| The OIDC token also includes additional standard claims: | Claim | Description | | ----------- | ---------------------- | -| `alg`| _(Algorithm)_ The algorithm used by the OIDC provider. | -| `exp`| _(Expires at)_ Identifies the expiry time of the JWT. | -| `iat`| _(Issued at)_ The time when the JWT was issued. | -| `jti`| _(JWT token identifier)_ Unique identifier for the OIDC token. | -| `kid`| _(Key identifier)_ Unique key for the OIDC token. | -| `nbf`| _(Not before)_ JWT is not valid for use before this time. | -| `typ`| _(Type)_ Describes the type of token. This is a JSON Web Token (JWT). | +| `alg`| _(Algorithm)_ The algorithm used by the OIDC provider. | +| `exp`| _(Expires at)_ Identifies the expiry time of the JWT. | +| `iat`| _(Issued at)_ The time when the JWT was issued. | +| `jti`| _(JWT token identifier)_ Unique identifier for the OIDC token. | +| `kid`| _(Key identifier)_ Unique key for the OIDC token. | +| `nbf`| _(Not before)_ JWT is not valid for use before this time. | +| `typ`| _(Type)_ Describes the type of token. This is a JSON Web Token (JWT). | The token also includes custom claims provided by {% data variables.product.prodname_dotcom %}: | Claim | Description | | ----------- | ---------------------- | -| `actor`| The personal account that initiated the workflow run. | +| `actor`| The personal account that initiated the workflow run. | | `actor_id`| The ID of personal account that initiated the workflow run. | -| `base_ref`| The target branch of the pull request in a workflow run. | -| `environment`| The name of the environment used by the job. | -| `event_name`| The name of the event that triggered the workflow run. | -| `head_ref`| The source branch of the pull request in a workflow run. | -| `job_workflow_ref`| This is the ref path to the reusable workflow used by this job. For more information, see "["Using OpenID Connect with reusable workflows"](/actions/deployment/security-hardening-your-deployments/using-openid-connect-with-reusable-workflows)." | -| `ref`| _(Reference)_ The git ref that triggered the workflow run. | -| `ref_type`| The type of `ref`, for example: "branch". | -| `repository_visibility` | The visibility of the repository where the workflow is running. Accepts the following values: `internal`, `private`, or `public`. | -| `repository`| The repository from where the workflow is running. | +| `base_ref`| The target branch of the pull request in a workflow run. | +| `environment`| The name of the environment used by the job. | +| `event_name`| The name of the event that triggered the workflow run. | +| `head_ref`| The source branch of the pull request in a workflow run. | +| `job_workflow_ref`| For jobs using a reusable workflow, the ref path to the reusable workflow. For more information, see "[Using OpenID Connect with reusable workflows](/actions/deployment/security-hardening-your-deployments/using-openid-connect-with-reusable-workflows)." | +{%- ifversion actions-oidc-custom-claims %} +| `job_workflow_sha`| {% data reusables.actions.job-workflow-sha-description %} | +{%- endif %} +| `ref`| _(Reference)_ The git ref that triggered the workflow run. | +| `ref_type`| The type of `ref`, for example: "branch". | +| `repository_visibility` | The visibility of the repository where the workflow is running. Accepts the following values: `internal`, `private`, or `public`. | +| `repository`| The repository from where the workflow is running. | | `repository_id`| The ID of the repository from where the workflow is running. | -| `repository_owner`| The name of the organization in which the `repository` is stored. | +| `repository_owner`| The name of the organization in which the `repository` is stored. | | `repository_owner_id`| The ID of the organization in which the `repository` is stored. | -| `run_id`| The ID of the workflow run that triggered the workflow. | -| `run_number`| The number of times this workflow has been run. | -| `run_attempt`| The number of times this workflow run has been retried. | -| `workflow`| The name of the workflow. | +| `run_id`| The ID of the workflow run that triggered the workflow. | +| `run_number`| The number of times this workflow has been run. | +| `run_attempt`| The number of times this workflow run has been retried. | +| `workflow`| The name of the workflow. | +{%- ifversion actions-oidc-custom-claims %} +| `workflow_ref`| {% data reusables.actions.workflow-ref-description %} | +| `workflow_sha`| {% data reusables.actions.workflow-sha-description %} | +{%- endif %} ### Defining trust conditions on cloud roles using OIDC claims @@ -168,7 +175,7 @@ You can configure a subject that filters for a specific [environment](/actions/d | | | | ------ | ----------- | -| Syntax: | `repo::environment:` | +| Syntax: | `repo::environment:` | | Example:| `repo:octo-org/octo-repo:environment:Production` | #### Filtering for `pull_request` events @@ -179,7 +186,7 @@ You can configure a subject that filters for the [`pull_request`](/actions/learn | | | | ------ | ----------- | -| Syntax: | `repo::pull_request` | +| Syntax: | `repo::pull_request` | | Example:| `repo:octo-org/octo-repo:pull_request` | #### Filtering for a specific branch @@ -190,7 +197,7 @@ You can configure a subject that filters for a specific branch name. In this exa | | | | ------ | ----------- | -| Syntax: | `repo::ref:refs/heads/branchName` | +| Syntax: | `repo::ref:refs/heads/branchName` | | Example:| `repo:octo-org/octo-repo:ref:refs/heads/demo-branch` | #### Filtering for a specific tag @@ -201,7 +208,7 @@ You can create a subject that filters for specific tag. In this example, the wor | | | | ------ | ----------- | -| Syntax: | `repo::ref:refs/tags/` | +| Syntax: | `repo::ref:refs/tags/` | | Example:| `repo:octo-org/octo-repo:ref:refs/tags/demo-tag` | ### Configuring the subject in your cloud provider @@ -210,7 +217,7 @@ To configure the subject in your cloud provider's trust relationship, you must a | | | | ------ | ----------- | -| Amazon Web Services | `"{% ifversion ghes %}HOSTNAME/_services/token{% else %}token.actions.githubusercontent.com{% endif %}:sub": "repo:octo-org/octo-repo:ref:refs/heads/demo-branch"` | +| Amazon Web Services | `"{% ifversion ghes %}HOSTNAME/_services/token{% else %}token.actions.githubusercontent.com{% endif %}:sub": "repo:octo-org/octo-repo:ref:refs/heads/demo-branch"` | | Azure| `repo:octo-org/octo-repo:ref:refs/heads/demo-branch` | | Google Cloud Platform| `(assertion.sub=='repo:octo-org/octo-repo:ref:refs/heads/demo-branch')` | | HashiCorp Vault| `bound_subject="repo:octo-org/octo-repo:ref:refs/heads/demo-branch" ` | @@ -225,7 +232,7 @@ You could also use a `curl` command to request the JWT, using the following envi | | | | ------ | ----------- | -| `ACTIONS_ID_TOKEN_REQUEST_URL` | The URL for {% data variables.product.prodname_dotcom %}'s OIDC provider. | +| `ACTIONS_ID_TOKEN_REQUEST_URL` | The URL for {% data variables.product.prodname_dotcom %}'s OIDC provider. | | `ACTIONS_ID_TOKEN_REQUEST_TOKEN` | Bearer token for the request to the OIDC provider. | @@ -256,7 +263,7 @@ To customize these claim formats, organization and repository admins can use the By default, the JWT is issued by {% data variables.product.prodname_dotcom %}'s OIDC provider at `https://token.actions.githubusercontent.com`. This path is presented to your cloud provider using the `iss` value in the JWT. -Enterprise admins can security harden their OIDC configuration by configuring their enterprise to receive tokens from a unique URL at `https://token.actions.githubusercontent.com/`. Replace `` with the slug value of your enterprise. +Enterprise admins can security harden their OIDC configuration by configuring their enterprise to receive tokens from a unique URL at `https://token.actions.githubusercontent.com/`. Replace `` with the slug value of your enterprise. This configuration means that your enterprise will receive the OIDC token from a unique URL, and you can then configure your cloud provider to only accept tokens from that URL. This helps ensure that only the enterprise's repositories can access your cloud resources using OIDC. @@ -291,7 +298,7 @@ To help improve security, compliance, and standardization, you can customize the Customizing the claims results in a new format for the entire `sub` claim, which replaces the default predefined `sub` format in the token described in "[Example subject claims](/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#example-subject-claims)." -The following example templates demonstrate various ways to customize the subject claim. To configure these settings on {% data variables.product.prodname_dotcom %}, admins use the REST API to specify a list of claims that must be included in the subject (`sub`) claim. +The following example templates demonstrate various ways to customize the subject claim. To configure these settings on {% data variables.product.prodname_dotcom %}, admins use the REST API to specify a list of claims that must be included in the subject (`sub`) claim. {% data reusables.actions.use-request-body-api %} @@ -314,7 +321,7 @@ In your cloud provider's OIDC configuration, configure the `sub` condition to re #### Example: Allowing access to all repositories with a specific owner -This example template enables the `sub` claim to have a new format with only the value of `repository_owner`. +This example template enables the `sub` claim to have a new format with only the value of `repository_owner`. {% data reusables.actions.use-request-body-api %} @@ -365,12 +372,12 @@ This example also demonstrates how to use `"context"` to define your conditions. In your cloud provider's OIDC configuration, configure the `sub` condition to require that claims must include specific values for `repo`, `context`, and `job_workflow_ref`. -This customization template requires that the `sub` uses the following format: `repo::environment::job_workflow_ref:`. +This customization template requires that the `sub` uses the following format: `repo::environment::job_workflow_ref:`. For example: `"sub": "repo:octo-org/octo-repo:environment:prod:job_workflow_ref:octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main"` #### Example: Granting access to a specific repository -This example template lets you grant cloud access to all the workflows in a specific repository, across all branches/tags and environments. To help improve security, combine this template with the custom issuer URL described in "[Customizing the token URL for an enterprise](/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-token-url-for-an-enterprise)." +This example template lets you grant cloud access to all the workflows in a specific repository, across all branches/tags and environments. To help improve security, combine this template with the custom issuer URL described in "[Customizing the token URL for an enterprise](/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-token-url-for-an-enterprise)." {% data reusables.actions.use-request-body-api %} @@ -386,7 +393,7 @@ In your cloud provider's OIDC configuration, configure the `sub` condition to re #### Example: Using system-generated GUIDs -This example template enables predictable OIDC claims with system-generated GUIDs that do not change between renames of entities (such as renaming a repository). +This example template enables predictable OIDC claims with system-generated GUIDs that do not change between renames of entities (such as renaming a repository). {% data reusables.actions.use-request-body-api %} @@ -431,7 +438,7 @@ In your cloud provider's OIDC configuration, configure the `sub` condition to re #### Using the default subject claims -For repositories that can receive a subject claim policy from their organization, the repository owner can later choose to opt-out and instead use the default `sub` claim format. This means that the repository will not use the organization's customized template. +For repositories that can receive a subject claim policy from their organization, the repository owner can later choose to opt-out and instead use the default `sub` claim format. This means that the repository will not use the organization's customized template. To configure the repository to use the default `sub` claim format, a repository admin must use the REST API endpoint at "[Set the customization template for an OIDC subject claim for a repository](/rest/actions/oidc#set-the-customization-template-for-an-oidc-subject-claim-for-a-repository)" with the following request body: diff --git a/content/actions/learn-github-actions/contexts.md b/content/actions/learn-github-actions/contexts.md index 74a76748e3..f895191438 100644 --- a/content/actions/learn-github-actions/contexts.md +++ b/content/actions/learn-github-actions/contexts.md @@ -191,6 +191,9 @@ The `github` context contains information about the workflow run and the event t | `github.action_repository` | `string` | For a step executing an action, this is the owner and repository name of the action. For example, `actions/checkout`. | | `github.action_status` | `string` | For a composite action, the current result of the composite action. | | `github.actor` | `string` | {% ifversion actions-stable-actor-ids %}The username of the user that triggered the initial workflow run. If the workflow run is a re-run, this value may differ from `github.triggering_actor`. Any workflow re-runs will use the privileges of `github.actor`, even if the actor initiating the re-run (`github.triggering_actor`) has different privileges.{% else %}The username of the user that initiated the workflow run.{% endif %} | +{%- ifversion actions-oidc-custom-claims %} +| `github.actor_id` | `string` | {% data reusables.actions.actor_id-description %} | +{%- endif %} | `github.api_url` | `string` | The URL of the {% data variables.product.prodname_dotcom %} REST API. | | `github.base_ref` | `string` | The `base_ref` or target branch of the pull request in a workflow run. This property is only available when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. | | `github.env` | `string` | Path on the runner to the file that sets environment variables from workflow commands. This file is unique to the current step and is a different file for each step in a job. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/learn-github-actions/workflow-commands-for-github-actions#setting-an-environment-variable)." | @@ -200,6 +203,9 @@ The `github` context contains information about the workflow run and the event t | `github.graphql_url` | `string` | The URL of the {% data variables.product.prodname_dotcom %} GraphQL API. | | `github.head_ref` | `string` | The `head_ref` or source branch of the pull request in a workflow run. This property is only available when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. | | `github.job` | `string` | The [`job_id`](/actions/reference/workflow-syntax-for-github-actions#jobsjob_id) of the current job.
Note: This context property is set by the Actions runner, and is only available within the execution `steps` of a job. Otherwise, the value of this property will be `null`. | +{%- ifversion actions-oidc-custom-claims %} +| `github.job_workflow_sha` | `string` | {% data reusables.actions.job-workflow-sha-description %} | +{%- endif %} | `github.ref` | `string` | {% data reusables.actions.ref-description %} | {%- ifversion fpt or ghec or ghes > 3.3 or ghae > 3.3 %} | `github.ref_name` | `string` | {% data reusables.actions.ref_name-description %} | @@ -207,9 +213,15 @@ The `github` context contains information about the workflow run and the event t | `github.ref_type` | `string` | {% data reusables.actions.ref_type-description %} | {%- endif %} | `github.path` | `string` | Path on the runner to the file that sets system `PATH` variables from workflow commands. This file is unique to the current step and is a different file for each step in a job. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/learn-github-actions/workflow-commands-for-github-actions#adding-a-system-path)." | -| `github.repository` | `string` | The owner and repository name. For example, `Codertocat/Hello-World`. | -| `github.repository_owner` | `string` | The repository owner's name. For example, `Codertocat`. | -| `github.repositoryUrl` | `string` | The Git URL to the repository. For example, `git://github.com/codertocat/hello-world.git`. | +| `github.repository` | `string` | The owner and repository name. For example, `octocat/Hello-World`. | +{%- ifversion actions-oidc-custom-claims %} +| `github.repository_id` | `string` | {% data reusables.actions.repository_id-description %} | +{%- endif %} +| `github.repository_owner` | `string` | The repository owner's username. For example, `octocat`. | +{%- ifversion actions-oidc-custom-claims %} +| `github.repository_owner_id` | `string` | {% data reusables.actions.repository_owner_id-description %} | +{%- endif %} +| `github.repositoryUrl` | `string` | The Git URL to the repository. For example, `git://github.com/octocat/hello-world.git`. | | `github.retention_days` | `string` | The number of days that workflow run logs and artifacts are kept. | | `github.run_id` | `string` | {% data reusables.actions.run_id_description %} | | `github.run_number` | `string` | {% data reusables.actions.run_number_description %} | @@ -224,6 +236,10 @@ The `github` context contains information about the workflow run and the event t | `github.token` | `string` | A token to authenticate on behalf of the GitHub App installed on your repository. This is functionally equivalent to the `GITHUB_TOKEN` secret. For more information, see "[Automatic token authentication](/actions/security-guides/automatic-token-authentication)."
Note: This context property is set by the Actions runner, and is only available within the execution `steps` of a job. Otherwise, the value of this property will be `null`. |{% ifversion actions-stable-actor-ids %} | `github.triggering_actor` | `string` | The username of the user that initiated the workflow run. If the workflow run is a re-run, this value may differ from `github.actor`. Any workflow re-runs will use the privileges of `github.actor`, even if the actor initiating the re-run (`github.triggering_actor`) has different privileges. |{% endif %} | `github.workflow` | `string` | The name of the workflow. If the workflow file doesn't specify a `name`, the value of this property is the full path of the workflow file in the repository. | +{%- ifversion actions-oidc-custom-claims %} +| `github.workflow_ref` | `string` | {% data reusables.actions.workflow-ref-description %} | +| `github.workflow_sha` | `string` | {% data reusables.actions.workflow-sha-description %} | +{%- endif %} | `github.workspace` | `string` | The default working directory on the runner for steps, and the default location of your repository when using the [`checkout`](https://github.com/actions/checkout) action. | ### Example contents of the `github` context diff --git a/content/actions/learn-github-actions/variables.md b/content/actions/learn-github-actions/variables.md index 0f26a402df..c7779a2d02 100644 --- a/content/actions/learn-github-actions/variables.md +++ b/content/actions/learn-github-actions/variables.md @@ -240,6 +240,9 @@ We strongly recommend that actions use variables to access the filesystem rather | `GITHUB_ACTION_REPOSITORY` | For a step executing an action, this is the owner and repository name of the action. For example, `actions/checkout`. | | `GITHUB_ACTIONS` | Always set to `true` when {% data variables.product.prodname_actions %} is running the workflow. You can use this variable to differentiate when tests are being run locally or by {% data variables.product.prodname_actions %}. | `GITHUB_ACTOR` | The name of the person or app that initiated the workflow. For example, `octocat`. | +{%- ifversion actions-oidc-custom-claims %} +| `GITHUB_ACTOR_ID` | {% data reusables.actions.actor_id-description %} | +{%- endif %} | `GITHUB_API_URL` | Returns the API URL. For example: `{% data variables.product.api_url_code %}`. | `GITHUB_BASE_REF` | The name of the base ref or target branch of the pull request in a workflow run. This is only set when the event that triggers a workflow run is either `pull_request` or `pull_request_target`. For example, `main`. | | `GITHUB_ENV` | The path on the runner to the file that sets variables from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/runner/work/_temp/_runner_file_commands/set_env_87406d6e-4979-4d42-98e1-3dab1f48b13a`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable)." | @@ -256,7 +259,13 @@ We strongly recommend that actions use variables to access the filesystem rather | `GITHUB_REF_TYPE` | {% data reusables.actions.ref_type-description %} | {%- endif %} | `GITHUB_REPOSITORY` | The owner and repository name. For example, `octocat/Hello-World`. | +{%- ifversion actions-oidc-custom-claims %} +| `GITHUB_REPOSITORY_ID` | {% data reusables.actions.repository_id-description %} | +{%- endif %} | `GITHUB_REPOSITORY_OWNER` | The repository owner's name. For example, `octocat`. | +{%- ifversion actions-oidc-custom-claims %} +| `GITHUB_REPOSITORY_OWNER_ID` | {% data reusables.actions.repository_owner_id-description %} | +{%- endif %} | `GITHUB_RETENTION_DAYS` | The number of days that workflow run logs and artifacts are kept. For example, `90`. | | `GITHUB_RUN_ATTEMPT` | A unique number for each attempt of a particular workflow run in a repository. This number begins at 1 for the workflow run's first attempt, and increments with each re-run. For example, `3`. | | `GITHUB_RUN_ID` | {% data reusables.actions.run_id_description %} For example, `1658821493`. | @@ -267,6 +276,10 @@ We strongly recommend that actions use variables to access the filesystem rather | `GITHUB_STEP_SUMMARY` | The path on the runner to the file that contains job summaries from workflow commands. This file is unique to the current step and changes for each step in a job. For example, `/home/rob/runner/_layout/_work/_temp/_runner_file_commands/step_summary_1cb22d7f-5663-41a8-9ffc-13472605c76c`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary)." | {%- endif %} | `GITHUB_WORKFLOW` | The name of the workflow. For example, `My test workflow`. If the workflow file doesn't specify a `name`, the value of this variable is the full path of the workflow file in the repository. | +{%- ifversion actions-oidc-custom-claims %} +| `GITHUB_WORKFLOW_REF` | {% data reusables.actions.workflow-ref-description %} | +| `GITHUB_WORKFLOW_SHA` | {% data reusables.actions.workflow-sha-description %} | +{%- endif %} | `GITHUB_WORKSPACE` | The default working directory on the runner for steps, and the default location of your repository when using the [`checkout`](https://github.com/actions/checkout) action. For example, `/home/runner/work/my-repo-name/my-repo-name`. | {%- ifversion actions-runner-arch-envvars %} | `RUNNER_ARCH` | {% data reusables.actions.runner-arch-description %} | diff --git a/data/features/actions-oidc-custom-claims.yml b/data/features/actions-oidc-custom-claims.yml new file mode 100644 index 0000000000..c919e2c515 --- /dev/null +++ b/data/features/actions-oidc-custom-claims.yml @@ -0,0 +1,7 @@ +# Reference: #8927 +# General versioning for new OIDC custom claims +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.9' + ghae: '>=3.9' diff --git a/data/reusables/actions/actor_id-description.md b/data/reusables/actions/actor_id-description.md new file mode 100644 index 0000000000..ec55c69b2f --- /dev/null +++ b/data/reusables/actions/actor_id-description.md @@ -0,0 +1 @@ +The account ID of the person or app that triggered the initial workflow run. For example, `1234567`. Note that this is different from the actor username. \ No newline at end of file diff --git a/data/reusables/actions/job-workflow-sha-description.md b/data/reusables/actions/job-workflow-sha-description.md new file mode 100644 index 0000000000..8d8e6eb1d7 --- /dev/null +++ b/data/reusables/actions/job-workflow-sha-description.md @@ -0,0 +1 @@ +For jobs using a reusable workflow, the commit SHA for the reusable workflow file. \ No newline at end of file diff --git a/data/reusables/actions/repository_id-description.md b/data/reusables/actions/repository_id-description.md new file mode 100644 index 0000000000..800702167c --- /dev/null +++ b/data/reusables/actions/repository_id-description.md @@ -0,0 +1 @@ +The ID of the repository. For example, `123456789`. Note that this is different from the repository name. \ No newline at end of file diff --git a/data/reusables/actions/repository_owner_id-description.md b/data/reusables/actions/repository_owner_id-description.md new file mode 100644 index 0000000000..f39273d939 --- /dev/null +++ b/data/reusables/actions/repository_owner_id-description.md @@ -0,0 +1 @@ +The repository owner's account ID. For example, `1234567`. Note that this is different from the owner's name. \ No newline at end of file diff --git a/data/reusables/actions/workflow-ref-description.md b/data/reusables/actions/workflow-ref-description.md new file mode 100644 index 0000000000..5de40ac398 --- /dev/null +++ b/data/reusables/actions/workflow-ref-description.md @@ -0,0 +1 @@ +The ref path to the workflow. For example, `octocat/hello-world/.github/workflows/my-workflow.yml@refs/heads/my_branch`. \ No newline at end of file diff --git a/data/reusables/actions/workflow-sha-description.md b/data/reusables/actions/workflow-sha-description.md new file mode 100644 index 0000000000..572a97d2c2 --- /dev/null +++ b/data/reusables/actions/workflow-sha-description.md @@ -0,0 +1 @@ +The commit SHA for the workflow file. \ No newline at end of file From bfded447fc018dfd7bbc5906d49fefe7717d1742 Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Wed, 11 Jan 2023 09:52:19 +0000 Subject: [PATCH 38/41] [Improvement] Clarify what happens to packages when you transfer a repository (#33790) Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- .../about-permissions-for-github-packages.md | 9 +++++++++ .../transferring-a-repository.md | 1 + 2 files changed, 10 insertions(+) diff --git a/content/packages/learn-github-packages/about-permissions-for-github-packages.md b/content/packages/learn-github-packages/about-permissions-for-github-packages.md index c448c0caf1..8ffb5dbf97 100644 --- a/content/packages/learn-github-packages/about-permissions-for-github-packages.md +++ b/content/packages/learn-github-packages/about-permissions-for-github-packages.md @@ -78,6 +78,15 @@ For more information, see:{% ifversion fpt or ghec %} - "[Creating a {% data variables.product.pat_generic %}](/github/authenticating-to-github/creating-a-personal-access-token/)" - "[Available scopes](/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)" +## About repository transfers + +You can transfer a repository to another user or organization account. For more information, see "[Transferring a repository](/repositories/creating-and-managing-repositories/transferring-a-repository)." + +When you transfer a repository, {% ifversion packages-registries-v2 %}{% data variables.product.prodname_dotcom %} may transfer the packages associated with the repository, depending on the registry the packages belong to. + +- For registries that support granular permissions, packages are scoped to a user or organization account, and the account associated with the package does not change when you transfer a repository. If you have linked a package to a repository, the link is removed when you transfer the repository to another user, and any codespaces or {% data variables.product.prodname_actions %} workflows associated with the repository will lose access to the package. For the list of these registries, see "[Granular permissions for user/organization-scoped packages](/packages/learn-github-packages/about-permissions-for-github-packages#granular-permissions-for-userorganization-scoped-packages)." +- For registries that only support repository-scoped permissions, packages are published directly to repositories, and {% endif %}{% data variables.product.prodname_dotcom %} transfers the packages associated with a repository as part of the repository transfer. All billable usage associated with the packages will subsequently be billed to the new owner. If the previous repository owner is removed as a collaborator on the repository, they may no longer be able to access the packages associated with the repository.{% ifversion packages-registries-v2 %} For the list of these registries, see "[Permissions for repository-scoped packages](/packages/learn-github-packages/about-permissions-for-github-packages#permissions-for-repository-scoped-packages)."{% endif %} + ## Maintaining access to packages in {% data variables.product.prodname_actions %} workflows To ensure your workflows will maintain access to your packages, ensure that you're using the right access token in your workflow and that you've enabled {% data variables.product.prodname_actions %} access to your package. diff --git a/content/repositories/creating-and-managing-repositories/transferring-a-repository.md b/content/repositories/creating-and-managing-repositories/transferring-a-repository.md index 85a6ef7f2b..a0687ee1d1 100644 --- a/content/repositories/creating-and-managing-repositories/transferring-a-repository.md +++ b/content/repositories/creating-and-managing-repositories/transferring-a-repository.md @@ -62,6 +62,7 @@ When you transfer a repository, its issues, pull requests, wiki, stars, and watc - When you transfer a repository from an organization to a personal account, the repository's read-only collaborators will not be transferred. This is because collaborators can't have read-only access to repositories owned by a personal account. For more information about repository permission levels, see "[Permission levels for a personal account repository](/github/setting-up-and-managing-your-github-user-account/permission-levels-for-a-user-account-repository)" and "[Repository roles for an organization](/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization)."{% ifversion fpt or ghec %} - Sponsors who have access to the repository through a sponsorship tier may be affected. For more information, see "[Adding a repository to a sponsorship tier](/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers#adding-a-repository-to-a-sponsorship-tier)".{% endif %} +- Packages associated with the repository {% ifversion packages-registries-v2 %}may be transferred, or may lose their link to the repository, depending on the registry they belong to{% else %}are transferred as part of the transfer process{% endif %}. For more information, see "[About permissions for {% data variables.product.prodname_registry %}](/packages/learn-github-packages/about-permissions-for-github-packages#about-repository-transfers)." For more information, see "[Managing remote repositories](/github/getting-started-with-github/managing-remote-repositories)." From cab5b1f9661eb92345ea52c6f406fb3e2ed979ba Mon Sep 17 00:00:00 2001 From: Divya Date: Wed, 11 Jan 2023 16:48:58 +0530 Subject: [PATCH 39/41] Create GitHub_Octernships_terms_of_service.md (#33658) Co-authored-by: Steve Guntrip <12534592+stevecat@users.noreply.github.com> --- .../github-octernships-terms-of-service.md | 70 +++++++++++++++++++ content/site-policy/privacy-policies/index.md | 1 + 2 files changed, 71 insertions(+) create mode 100644 content/site-policy/privacy-policies/github-octernships-terms-of-service.md diff --git a/content/site-policy/privacy-policies/github-octernships-terms-of-service.md b/content/site-policy/privacy-policies/github-octernships-terms-of-service.md new file mode 100644 index 0000000000..2e9ec1d63f --- /dev/null +++ b/content/site-policy/privacy-policies/github-octernships-terms-of-service.md @@ -0,0 +1,70 @@ +--- +title: GitHub Octernships Terms of Service +versions: + fpt: '*' +topics: + - Policy + - Legal +--- + + +## Terms and conditions + +GITHUB HAS INVITED YOU TO PARTICIPATE IN THE GITHUB OCTERNSHIPS PROGRAM (“THE PROGRAM”). BY ACCEPTING GITHUB’S INVITATION TO PARTICIPATE IN THE PROGRAM, YOU AGREE TO BE BOUND BY THE FOLLOWING GITHUB OCTERNSHIPS PROGRAM TERMS AND CONDITIONS (“TERMS AND CONDITIONS”): + +When you click "I agree", “I accept”, or similar buttons, you accept all the terms and conditions of this Agreement. + + +## 1. Compensation or benefits +The Program is offered to verified students on GitHub Global Campus in countries where the program is available. As a participant, you will not be considered an employee or intern of GitHub. You will be entitled to 1 (minimum) to 6 (maximum) months internship along with stipend of 500 USD/month by the partner organization (“Partner Organization”). GitHub and the Partner Organization are collectively referred to as the “Octernships Partners.” You will not be entitled to any compensation or benefits paid or made available by the Octernships Partner to their respective employees, including, without limitation, any vacation or illness payments, or to participate in any plans, arrangements or distributions made by the Octernship Partners pertaining to any bonus, stock option, profit sharing, insurance or similar benefits. + +## 2. Ownership and likeness +### 2.1 Ownership +You hereby grant the Octernships Partners a non-exclusive, irrevocable, perpetual, royalty-free, worldwide license to make, have made, use, offer to sell, sell, import, copy, modify, create derivative works based upon, distribute, sublicense, display, perform and transmit any work product you create in connection with the Program or during your internship, including, without limitation, concepts, works, inventions, information, drawings, designs, programs, or software. +2.2 Likeness +GitHub and Octernships Partners reserve all rights, including the right to edit, publish, use, adapt, modify or dispose of any work product/description, likenesses, and photographs for advertising and promotional purposes in all media (including, but not limited to, the internet) without additional compensation, except where prohibited by law. + +## 3. Confidentiality and non-disclosure +Without limiting any separate agreement between yourself and either GitHub or the Partner Organization concerning GitHub's and Partner Organization’s confidential information, including, without limitation, any GitHub or Partner Organization Nondisclosure Agreement you might enter into, you agree that you will not publish, disclose, or otherwise divulge or use (other than as expressly permitted under the terms and conditions of the Program) any Confidential Information of GitHub or Partner Organization without their prior written consent in each instance. "Confidential Information" means all information and material that is transmitted by GitHub or Partner Organization to you (or otherwise developed or obtained by you) in connection with your participation in the Program that you should reasonably have understood due to legends or other markings, the circumstances of disclosure or the nature of the information itself, to be proprietary and confidential to GitHub or Partner Organization, including, without limitation, any information or material relating to products, services, vendor lists, customer lists, prospect lists, pricing and sales information, and business strategies and plans. You will exercise at least the same amount of diligence in preserving the secrecy of the Confidential Information as you use in preserving the secrecy of your own most valuable confidential information, but in no event less than reasonable care. Confidential Information does not include information or material that you can document (a) is publicly available through no action or fault of yours; (b) was already in your possession or known to you prior to being disclosed or provided to you by GitHub or Partner Organization, provided that the source of such information or material was not obligated in any way to maintain its confidentiality; (c) was or is obtained by you from a third party, provided that such third party was not obligated in any way to maintain its confidentiality; or (d) is independently developed by you without reference to any Confidential Information. + +## 4. Student data sharing +In accordance with the terms and conditions of this Agreement and the GitHub Privacy Statement, students authorize and agree that all other participating parties may access and use their data provided to participate in the Octernship Program. + +## 5. Term and termination +### 5.1 Term +These Terms and Conditions will commence on the date upon which you complete registration in the Program (the “Effective Date”) and will continue until the earlier of the following: +(1) you cease to be affiliated with a school as a student +(2) either GitHub or Partner Organization provides you with written notification that you are no longer enrolled in the Program, or +(3) you provide us with written notification that you are withdrawing from the Program. + +### 5.2 Survival +These Terms and Conditions that, by their sense and context, are intended to survive the completion or termination of the Program shall so survive the completion or termination of the Program and these Terms and Conditions including, without limitation, Sections 2, 3, 4, and 5. + +## 6. Disclaimer of liability +IN NO EVENT WILL THE OCTERNSHIPS PARTNERS BE LIABLE TO YOU OR TO ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR INCIDENTAL DAMAGES IN CONNECTION WITH THIS AGREEMENT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL THE OCTERNSHIPS PARTNERS BE LIABLE TO ANY THIRD PARTY FOR YOUR ACTIONS WHETHER OR NOT SUCH ACTIONS ARE IN CONNECTION WITH THIS AGREEMENT. + +## 7. Miscellaneous +### 7.1 Nature of the Relationship +The Octernships Partners and you are each independent entities with respect to the subject matter of these Terms and Conditions. Nothing contained in these Terms and Conditions or in the Program will be deemed or construed in any manner whatsoever to create a partnership, joint venture, employment, agency, fiduciary, or other similar relationship between the Octernships Partners and you, and neither the Octernships Partners or you can bind the other contractually. You hereby agree that you neither have nor will give the appearance or impression of possessing the legal authority to bind or commit GitHub or Partner Organization in any way except as provided in these Terms and Conditions. + +### 7.2 Assignment +Neither party may assign any of its rights or obligations hereunder, whether by operation of law or otherwise, without the prior written consent of the other party (not to be unreasonably withheld). Notwithstanding the foregoing, either GitHub or Partner Organization may assign these Terms and Conditions in their entirety, with or without your consent, in connection with a merger, acquisition, corporate reorganization, or sale of all or substantially all of its assets. Subject to the foregoing, these Terms and Conditions shall bind and inure to the benefit of the parties, their respective successors and permitted assigns. + +### 7.3 Notices +To provide us with notice of withdrawal, please send such notice by raising a support ticket https://github.com/contact .To provide Partner Organization with notice of withdrawal, please send such notice to your regular point-of-contact at Partner Organization. GitHub and Partner Organization may use the email address you have submitted in your acceptance to participate in the Program to provide you with electronic notice at that address. It’s your sole responsibility to notify GitHub and Partner Organization of any changes to your email address. Notices shall be deemed effective upon receipt one (1) business day after it was sent by email. + +### 7.4 Amendments +GitHub may modify or amend these Terms and Conditions at any time. + +### 7.5 Governing Law; Venue +These Terms and Conditions shall be governed and construed as to all matters, including validity, construction, and performance, by and under California law and any dispute related to the GitHub Products or the subject matter of these terms must be brought in a tribunal of competent jurisdiction located in or near San Francisco, California. + +### 7.6 Severability +If any part of these Terms and Conditions are determined by a court of competent jurisdiction to be invalid or unenforceable, then the invalid or unenforceable provision will be deemed superseded by a valid, enforceable provision that most closely matches the intent of the original provision and the remainder of these Terms and Conditions shall continue in full force and effect. If no enforceable provision can be substituted for any such invalid or unenforceable provision, then that provision shall be deemed severable from these Terms and Conditions and shall not affect the validity and enforceability of any remaining provisions in these Terms and Conditions. + +### 7.7 Waiver +Performance of any obligations required by a party hereunder may be waived only by a written waiver signed by an authorized representative of the other party, which waiver will be effective only with respect to the specific obligation described therein. Any waiver or failure to enforce any provision of these Terms and Conditions on one occasion will not be deemed a waiver of any other provision or of such provision on any other occasion. + +### 7.8 Entire Agreement +These Terms and Conditions represent the entire understanding and agreement between the parties with respect to the subject matter hereof and will supersede all prior agreements and communications of the parties, oral or written. + diff --git a/content/site-policy/privacy-policies/index.md b/content/site-policy/privacy-policies/index.md index 0028eed4b4..3019bb281f 100644 --- a/content/site-policy/privacy-policies/index.md +++ b/content/site-policy/privacy-policies/index.md @@ -11,6 +11,7 @@ children: - /github-codespaces-privacy-statement - /github-candidate-privacy-policy - /github-copilot-for-business-privacy-statement + - /github-octernships-terms-of-service redirect_from: - /github/site-policy/github-data-protection-addendum - /github/site-policy-deprecated/github-data-protection-addendum From 34de15eaebb005dd4ea57566cfab2debff24a2d3 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Wed, 11 Jan 2023 13:26:09 +0100 Subject: [PATCH 40/41] correct some featuredLinks (II) (#33808) --- content/actions/index.md | 17 ++++++++--------- content/education/index.md | 4 ++-- content/sponsors/index.md | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/content/actions/index.md b/content/actions/index.md index c2de1f027c..9aa38c5fce 100644 --- a/content/actions/index.md +++ b/content/actions/index.md @@ -9,19 +9,19 @@ featuredLinks: guides: - /actions/learn-github-actions - /actions/examples - - /actions/guides/about-continuous-integration - - /actions/deployment/deploying-with-github-actions - - /actions/guides/about-packaging-with-github-actions + - /actions/automating-builds-and-tests/about-continuous-integration + - /actions/deployment/about-deployments/deploying-with-github-actions + - /actions/publishing-packages/about-packaging-with-github-actions - /actions/monitoring-and-troubleshooting-workflows/about-monitoring-and-troubleshooting guideCards: - - /actions/learn-github-actions/using-starter-workflows - - /actions/guides/publishing-nodejs-packages - - /actions/guides/building-and-testing-powershell + - /actions/using-workflows/using-starter-workflows + - /actions/publishing-packages/publishing-nodejs-packages + - /actions/automating-builds-and-tests/building-and-testing-powershell popular: - - /actions/learn-github-actions/workflow-syntax-for-github-actions + - /actions/using-workflows/workflow-syntax-for-github-actions - /actions/learn-github-actions - /actions/examples - - /actions/learn-github-actions/events-that-trigger-workflows + - /actions/using-workflows/events-that-trigger-workflows - /actions/learn-github-actions/contexts - /actions/learn-github-actions/expressions - /actions/learn-github-actions/variables @@ -63,4 +63,3 @@ children: - /creating-actions - /guides --- - diff --git a/content/education/index.md b/content/education/index.md index 5770c7f680..adcae067a5 100644 --- a/content/education/index.md +++ b/content/education/index.md @@ -11,8 +11,8 @@ featuredLinks: - /education/explore-the-benefits-of-teaching-and-learning-with-github-education/use-github-at-your-educational-institution guideCards: - /get-started/signing-up-for-github/signing-up-for-a-new-github-account - - /github/getting-started-with-github/git-and-github-learning-resources - - /education/manage-coursework-with-github-classroom/basics-of-setting-up-github-classroom + - /get-started/quickstart/git-and-github-learning-resources + - /education/manage-coursework-with-github-classroom/get-started-with-github-classroom/basics-of-setting-up-github-classroom popular: - /education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-students - /education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers diff --git a/content/sponsors/index.md b/content/sponsors/index.md index 0f05a4508d..6954595c03 100644 --- a/content/sponsors/index.md +++ b/content/sponsors/index.md @@ -16,7 +16,7 @@ featuredLinks: - /sponsors/sponsoring-open-source-contributors/attributing-sponsorships-to-your-organization - /sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors guideCards: - - /sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-user-account + - /sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account - /sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-organization - /sponsors/integrating-with-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account popular: From 7f92cadc51f80afb9cd889e8179ef6fe4064070b Mon Sep 17 00:00:00 2001 From: Colin Seymour Date: Wed, 11 Jan 2023 12:57:26 +0000 Subject: [PATCH 41/41] Remove mention of PATs and SSH keys being considered when determining dormancy (#33864) --- data/reusables/enterprise-accounts/dormant-user-activity.md | 1 - 1 file changed, 1 deletion(-) diff --git a/data/reusables/enterprise-accounts/dormant-user-activity.md b/data/reusables/enterprise-accounts/dormant-user-activity.md index b61eb9ff02..63d63abe2e 100644 --- a/data/reusables/enterprise-accounts/dormant-user-activity.md +++ b/data/reusables/enterprise-accounts/dormant-user-activity.md @@ -20,7 +20,6 @@ A user is considered active if the user has performed any of the following activ - Watching a repository - Starring a repository - Deleting a repository -- Accessing resources by using a {% data variables.product.pat_generic %} or SSH key - Joining an organization {% ifversion ghes %}

For more information, see \"Required Workflows.\"