From da1f8da3d40100353c70829b6aa60e09abf7b1c8 Mon Sep 17 00:00:00 2001 From: xrkffgg Date: Wed, 30 Dec 2020 15:17:26 +0800 Subject: [PATCH] perf: optimize duplicate (#24) * perf: optimize mark duplicate * add * add * add * add * add --- README.en-US.md | 12 ++++++++---- README.md | 10 +++++++--- action.yml | 2 ++ dist/index.js | 41 +++++++++++++++++++++++++++++++++++------ docs/base.en-US.md | 16 +++++++++++++--- docs/base.md | 16 +++++++++++++--- package.json | 2 +- public/duplicate.png | Bin 0 -> 54931 bytes src/base.js | 25 ++++++++++++++++++++----- src/util.js | 16 +++++++++++++++- 10 files changed, 114 insertions(+), 26 deletions(-) create mode 100644 public/duplicate.png diff --git a/README.en-US.md b/README.en-US.md index 421fb16..ddd549c 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -297,14 +297,14 @@ jobs: #### `mark-duplicate` -Quickly mark duplicate issue. +Quickly mark duplicate questions, only for issue new comments. ```yml name: Issue Mark Duplicate on: issue_comment: - types: [created, edited] + types: [created] jobs: mark-duplicate: @@ -321,12 +321,16 @@ jobs: | -- | -- | -- | -- | -- | | actions | Action type | string | ✔ | v1.5 | | token | [Token explain](#token) | string | ✔ | v1.5 | -| duplicate-command | Operation command, default is `/d` | string | ✖ | v1.5 | +| duplicate-command | Simple commands can be set, such as: `/d` | string | ✖ | v1.6 | | duplicate-labels | Add additional labels to this issue | string | ✖ | v1.5 | | labels | Replace the labels of the issue | string | ✖ | v1.5 | | contents | Add [reaction](#reactions-types) for this comment | string | ✖ | v1.5 | +| close-issue | Whether to close the issue at the same time | string | ✖ | v1.6 | -⏫ [返回列表](#列-表) +- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of` +- `close-issue`: Both `true` or `'true'` can take effect + +⏫ [Back to list](#List) #### `open-issue` diff --git a/README.md b/README.md index 19d2f62..5b23ec6 100644 --- a/README.md +++ b/README.md @@ -297,14 +297,14 @@ jobs: #### `mark-duplicate` -快捷标记重复问题。 +快捷标记重复问题,仅作用于 issue 新增评论。 ```yml name: Issue Mark Duplicate on: issue_comment: - types: [created, edited] + types: [created] jobs: mark-duplicate: @@ -321,10 +321,14 @@ jobs: | -- | -- | -- | -- | -- | | actions | 操作类型 | string | ✔ | v1.5 | | token | [token 说明](#token) | string | ✔ | v1.5 | -| duplicate-command | 操作命令,默认为 `/d` | string | ✖ | v1.5 | +| duplicate-command | 可设置简洁命令,如:`/d` | string | ✖ | v1.6 | | duplicate-labels | 为该 issue 额外增加 labels | string | ✖ | v1.5 | | labels | 替换该 issue 的 labels | string | ✖ | v1.5 | | contents | 为该评论的增加 [reaction](#reactions-types) | string | ✖ | v1.5 | +| close-issue | 是否同时关闭该 issue | string | ✖ | v1.6 | + +- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of` +- `close-issue`:`true` 或 `'true'` 均可生效 ⏫ [返回列表](#列-表) diff --git a/action.yml b/action.yml index caa3064..beabd1e 100644 --- a/action.yml +++ b/action.yml @@ -56,6 +56,8 @@ inputs: description: 'For mark-duplicate' duplicate-labels: description: 'For mark-duplicate add labels' + close-issue: + description: 'For mark-duplicate' outputs: issue-number: description: 'Create Issue Number' diff --git a/dist/index.js b/dist/index.js index 3634a65..dea8933 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6278,7 +6278,7 @@ const ALLREACTIONS = [ "eyes", ]; -const { dealInput } = __webpack_require__(6254); +const { dealInput, testDuplicate } = __webpack_require__(6254); const token = core.getInput('token'); const octokit = new Octokit({ auth: `token ${token}` }); @@ -6407,22 +6407,37 @@ async function doMarkDuplicate (owner, repo, labels) { core.info(`This actions only support on 'issue_comment'!`); return false; } - const duplicateCommand = core.getInput("duplicate-command") || '/d'; + if (context.payload.action != 'created') { + core.info(`This actions only support on 'issue_comment' created!`); + return false; + } + + const duplicateCommand = core.getInput("duplicate-command"); const duplicateLabels = core.getInput("duplicate-labels"); + const closeIssue = core.getInput("close-issue"); const commentId = context.payload.comment.id; const commentBody = context.payload.comment.body; const issueNumber = context.payload.issue.number; - if (commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) { - const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of'); - await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true); + const ifCommandInput = !!duplicateCommand; + + if ((ifCommandInput && commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) || testDuplicate(commentBody)) { + if (ifCommandInput) { + const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of'); + await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true); + } else if (contents) { + await doCreateCommentContent(owner, repo, commentId, dealInput(contents)); + } if (duplicateLabels) { await doAddLabels(owner, repo, issueNumber, duplicateLabels); } if (labels) { await doSetLabels(owner, repo, issueNumber, labels); } + if (closeIssue == 'true') { + await doCloseIssue(owner, repo, issueNumber); + } } else { core.info(`This comment body should start whith 'duplicate-command'`); } @@ -6905,13 +6920,27 @@ function dealInput (para) { return arr; }; -function matchKeyword(content, keywords) { +function matchKeyword (content, keywords) { return keywords.find(item => content.toLowerCase().includes(item)); }; +function testDuplicate(body) { + if (!body || !body.startsWith('Duplicate of')) { + return false + } + + let arr = body.split(' '); + if (arr[0] == 'Duplicate' && arr[1] == 'of') { + return true; + } else { + return false; + } +}; + module.exports = { dealInput, matchKeyword, + testDuplicate, }; diff --git a/docs/base.en-US.md b/docs/base.en-US.md index 4a8b096..06a7962 100644 --- a/docs/base.en-US.md +++ b/docs/base.en-US.md @@ -231,14 +231,14 @@ jobs: ## `mark-duplicate` -Quickly mark duplicate issue. +Quickly mark duplicate questions, only for issue new comments. ```yml name: Issue Mark Duplicate on: issue_comment: - types: [created, edited] + types: [created] jobs: mark-duplicate: @@ -255,10 +255,20 @@ jobs: | -- | -- | -- | -- | -- | | actions | Action type | string | ✔ | v1.5 | | token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1.5 | -| duplicate-command | Operation command, default is `/d` | string | ✖ | v1.5 | +| duplicate-command | Simple commands can be set, such as: `/d` | string | ✖ | v1.6 | | duplicate-labels | Add additional labels to this issue | string | ✖ | v1.5 | | labels | Replace the labels of the issue | string | ✖ | v1.5 | | contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ | v1.5 | +| close-issue | Whether to close the issue at the same time | string | ✖ | v1.6 | + +- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of` +- `close-issue`: Both `true` or `'true'` can take effect + + +Note: Duplicate created with the concise command does not display the content of the red box in the figure below. But in fact this has no effect. + + +![](../public/duplicate.png) ## `open-issue` diff --git a/docs/base.md b/docs/base.md index af49fe4..32b1faf 100644 --- a/docs/base.md +++ b/docs/base.md @@ -231,14 +231,14 @@ jobs: ## `mark-duplicate` -快捷标记重复问题。 +快捷标记重复问题,仅作用于 issue 新增评论。 ```yml name: Issue Mark Duplicate on: issue_comment: - types: [created, edited] + types: [created] jobs: mark-duplicate: @@ -255,10 +255,20 @@ jobs: | -- | -- | -- | -- | -- | | actions | 操作类型 | string | ✔ | v1.5 | | token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1.5 | -| duplicate-command | 操作命令,默认为 `/d` | string | ✖ | v1.5 | +| duplicate-command | 可设置简洁命令,如:`/d` | string | ✖ | v1.6 | | duplicate-labels | 为该 issue 额外增加 labels | string | ✖ | v1.5 | | labels | 替换该 issue 的 labels | string | ✖ | v1.5 | | contents | 为该评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.5 | +| close-issue | 是否同时关闭该 issue | string | ✖ | v1.6 | + +- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of` +- `close-issue`:`true` 或 `'true'` 均可生效 + + +注意:使用简洁命令创建的 Duplicate 不显示下图红框内容。但其实这个没有任何影响的。 + + +![](../public/duplicate.png) ## `open-issue` diff --git a/package.json b/package.json index ceb0d4f..9409545 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "issue-helper", - "version": "1.5.0", + "version": "1.6.0", "private": true, "description": "Some operations on issue.", "main": "src/main.js", diff --git a/public/duplicate.png b/public/duplicate.png new file mode 100644 index 0000000000000000000000000000000000000000..df34d578acc368ac9c6b49d78d15a69dd31908cb GIT binary patch literal 54931 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≻>+SB5Gv^=iTl}4UeXt`R7aC!cS?Ye* zw*N3yiogL962eeiAUZyY>Wpv=#2CKZ{T7?s@o%-t184u#dm{S-1N&~NLPNGmWiR0u zNV#1fT~A$Ap<#T4P%AxGSbmfOf5%?gGLj0IMxGBFNob^1*)d;)RrH8mA!7Wj4VTkV zgws88eg%Gi`9x(!VCK5libYrko;D>x%_7y!n@K`A{F6nubyaUB9-C<^D7nQX9jR;`9+757myM}W!9 zS*q+KjDBkLrGv%8FeLBX_m}}z-XLMHoSShG_1&*&9O`vRqEDGl3crsCT9RMrbU*bt z)Q3XSKc*rvm{ECp<>i#o+%4|pQ;+vt5DblN8h`MKlU;**| z2K)e|%Gwz*^>qW;kRa&p8KquZ?;}yK^Y`$F@-IurwlOG{s?z*3{FM3m6H~xrm{Pov z5yqH@NgNlO*8iCt1FR6sOoPZSZyP zv{P2v)CWHs=$v&r?s;4#kM-esyUX+HxjD#BXw1#%H-6qt=OvPVTD2bo`kb=<2C%4$t~9MT#Cir8--g_aW8CY;`44Z-%XNcS6?R(duh}cQAX1% zp=&16k0~kG&MJK+XzaEAI+tgZ)r*ROx}FC^PNoFYYBLsrTCjHkCk5CDNLI@?ocDF6 zK?oyf=;uxu_pu=!Exu~VVMz+Ry*lH>`>npti3a&2)a|R{Qe7b2Wcv@NBZSQeE+IvG zg5saL_A2?5Q}s%$BP760%tqbnn(BO){TuG+pS^TFP+uW9Z1Aurg1UNrJ{RE+QG9q> z61p2^q75$Dp!~G1vDEuh3g(6g*`NPzMGr^XRVU%6A%iZZ1bDd8nHgFOJ_5hJf{@cb zgfqi`ED_$H-iTO8pp=23WVg;_eYlSqDSmHo{xXBzD^bVXmF!|u7%Z&)yswCSVuP;`}?iOe=RbRDW>%4Jh$)1QYDa(#nbu&Ak zxyL!iZ;@q;k-l%&0{2jKu-sso`%cz%FjE?JDrPR8j1V9zqF{4`O+Kk% z-4zCv0ddnTClWF2nib!_*S_h(rqr|LV7 z2y({GU4W653CYLf4GNRP%UR4oex0qjIOEYEWCVXr_u1}yMJ+|ruCGhy%ou2vaQK|J4xj$kb0ZA=FvXSG+j?=)R1Q*WBE_BBy4KO5fc)@Y%=tWU3K$e-VcA6`6qIu*Xkhb*NN?9e_|z;+Y?B%`IIDl{nUJ> z&l?P+Yc^Zz^d{$|$Q^ea}+;i`RCq$Pog2l7y z&YgP3*W2>XcLnLE>bL(-T%fWAeWRfWLeP#StNTNp-J~4=r>zBl0_1-2El)fhV`app zmWLj>>;?y>F(ay*;*kIf&ObTF8Wp@M(Ia4=R^cUnwa}f8!dov?$aAK@(eysqB+7b4 z5!zXu)JR<7j(2YX=s0~uVB4+|go2mzm=mZkOu#jv-CgE0C#oWiLn)Lyy=UMslrd4Y>;n8sLt>?J7!MM$$JVHSHSfuJ%SV={%Gp6OPMkBaT zK^-=mv0TotRJ&EdTc`D%M^3(o&PbijNB`jHSmq^uTgDhtSA4nd)XuC*conCl&YlC= z6NCorf}Adc&1AXn>hLJQ4*}hmVff~7@4xcq(R`v!Y+>wBaCbb+`vD|RJ6p6nf0$c@ z1I`1jEdNgu=PwB^{c*8Qc`h|H2MT*lO*K>$#AAA&iJ~ zTsQ75xfB2pBT4ew;CQ;EV$<}SGkbrs7L}+n)+o>hcaf0?BLjXrFOOa;EKKH2mIPU| zM;pPo8@qPD&I>>-1Q4O z>?m?5=Kyci*0T9hXldh{Eezz4MpBW){xE~n9l+%a!CK?|7;2~Ev9gC$`=5(BnvQh`Or{nW7L z=ufYiO1^*cSsU@Py6U%B(Dlizmf_ZqO4UkD-aME1y!s19L`iA_Ha4TNOBGCnO=e0O zVO60L^=2Nl&Us*F!YHW2Bvjjb^tb)9F^)7GynkspRf);hV%>bACl;J#y>AXscf$^a z97$t3CTc_twG0gT>nf*fcTjtjCo+F5H_J>ayj`hfQ)nKvJ#D1?ji>qEV;S?)s!Rh{23Lda zXg(V*uKRoNbsN9UKc)%|O=<4ui<#!BCURuQ0|Nu`Uj#EhhDup)^4AK#aP7*>J~^FC z5Nr05&SECU>qiThekd(2N$9qqXa4!(H%r;eYCBm0f?&$Q>ixp^pwP6@>aZK*PxXV- zUX3S4BN|1{a-$%OF}x`$6y*=$mVaF8yO5znnpWY(NP!IfC@9IS8kCohAj!1k@Z$Wk z7a_B2YqeDkk3%ZjUo-_?pByyW-P2D#J62vF3kn5x^Em7ej@MvIDNBPKWh|iBrg#tI zmsBNA*u+qI?t~V7X1ss6QJm|LAuE0?Ky($gsl!s?)UWx17!Z{<;@I%hY77soKXkP+ zk?QG^0nX?TO5)+XAB{w@eP5HtbJG_@JuS!lo2#&Fjg^mUchzlgLGQ%o{gs^Cdoa7w z+{D$2*9kwD8`aGo*r9K&Sv|=2a1H&_xE9(lUc0V0xzr*yWmGZCtUSUUof)_Hy_G2bB$^RX9Ict zdAO?Ln!VO+c&FjG(1_WX#|hsa3z=#)-bJyYc5uS=>Max0HpATiGZm44QlfcKR6iB8 z16xY$4tD2q@tHxN_lGNQdDK zImx!Jla!Q6V|#$xVlLa>!7gffcePU6qcxV^(B|EEr7@NUULdiJ+lyR1HE@HCGZ{-) z-k;w|VHfRjbQs|~Z_4J{MJan+@vt&mF>W)b8YdzUkY&4;W$O=`n_yY>IvM5KFKFG| zjgkUhqO^ssI@;jJ$@3DkC40IMPs_DuBgESd#YJ_Iq-X!SWWUx#7YrK913M^Xo_TSe3rsR96>;R9^iN7g?WB*6z1WMi#`h``@a z8WnY=c8)}9RNHNeXw)0#Q#8o*z64Z(lECDF3mq}X=+mF`hO>O1DH%9E_?)89eL}TV z>9j(5KPger4s`@D@S;s|o2?e8kZ2gzPke-IjBXgZN|<-V{1~H`rGLbBAJh;k=k5S> z;ko2=$>8jAlJ|Z>}9sBMxUyW<22WuKg0yH2(#d!IaKE)T0u`C(GPA+Qenz2HP{w zvwV3x=0XzJJ<}HGE~B?%9yFn|rZeYdb;s)5FsQ?cjxybVv*McU-p1mV%0Gn}7KrwE5!NnhgUd@nXBib;>_nTmEMm@&Fiy})dj+$#T>NTvX9Rg7`i~@ zr3fTj^&$J(0h_Z`MAoA_*yAereog0Dw?nSkN8aXa9+NZwX4P2UqdnlYvI2LoyLdeP zj=nD-1O`z#mdkGK^)7p%anRTfRl!GrH#()!?l#5l$);D13ocZz+o2_>Dof`^p{JP(n&emeDcHI$z7hi*KiIaS$#x(!yjfpL z1w`oCWh!=&p;2=fkF~g8!F_Tv?|@`neV5GfR&;o(eSn{;lV(wddx@5r^wGduxYoImAD@GIs5)(&FA*U5^|k`kUbzO=K(Jm}-m1k89B5 zOo8Ls>B@0lMMsILjaLk?d^b^c$GJPfYuchr$}U%`X00{M@2fZs$Og$|d`e&r^Ps!B3+_#X6#+j;;@8%0Qmrob^3TXfZ;sXCLII&o}y*Bk(Y9-49v=k2&0CW?%LB4#kdv|8n>6 z@#9R)WZmLy$5!v(7*a!&?)DC<=BDb4V|xogdEqdg^UNsCsG&E_xL&Y zBjhgnmv@?gTF+lb(JIgMAUvYiT3 zfVR5ZZri@uD_+0OR63d-cE6B18lTVgP-zOShgRX3h^Fp5YVI*HpqEvINW2W)%Qz&l z^e^Ww>k8cC;@essF;@+uIoeEVVS2dPR9HD2x&(~Hvs87|ThT>dQ>_!UT&;Mbq)RQ& zHF1r{FY30o*{^vz*ckS#zwuFC%UkDJ4z|sL#5VZ1RoNWoR3^=DL%$Dyo@|3_S4k#!sS7gO{I^puLtKt8 zhPHU;O*FtMxf3}w$F(U(rdR8P+bQ?)=L8fnpxJZpC=Jl8wMx+Yj9t`rs&$`g_2)l^ z^cE55r4FvEX0%w5^2WUlabBlB-~7eZ?Y_x;rT?sXrC%5SjVFH>c#NZ@bKOiejj#5f z*}qJI=QIgS7Oul{-Cg20=a@``{&V)wri zWB=C36C*|?EG>M~NuHpQoSGheV z^@Y4r8lbBMmG{aa)%Xn1>`jVyBwO#HPj+0Gbd92e>C} zBS`ikA%S+{>pLV=)H$FMQlNMNOEU01Te^>g!tm&599_j7I36nrp2IZUTjyhbe!gbn zDf2ZIr}b5mX@KmMz~#a=Iz0{m02pv~qwziNC$VkFx__Q2wx7c*l&M&2qhMrIm8teY z#)5WJf1~pL)izDlQo8wThjSfsQC~vGeSDs)n_W;_lf*X)TY~>KVc$-8^|;B-g<9@lNY!=U$AJ>24vM$>hrG&4 zz}_gBuAk7WHa;<77-e23*H4-j+1 z4~>+FX!>wwdOEq9_KTX^&D(~~MV9bTxX4FQf!Y}5O-gENIwnMSiDY0qhMk+Xf&%I6 z>?{Zb%3;qdsj!X7^vR$!&2-7ocK@XZn9C~@Xi}IHAz$F(1h_j!fm*vYHFVXPPT!~B ztUjOcHl6x=@_5Lmji`Txh|I2zz3mu_Z6O&-G=Dv%1K!HT%%&u;J`Lqx9vllVip$EL!-mv-i~aCs58B3C5hbf-V*(x z4=3BeE6)8o_7r1ixLgvJnOrUzsmg0U>usR)I0iJ?m!uOe!+@uY?dZ#%FEu*>z$g$B zQ>)OFqEbF~_g0uniHbhGugOKCmTgivBcC4Z^*PgFlVat3vh6$FBOCgj?*b$eT^0LqPPcz+d9S z5|!XnNbBQTF!~w(&O+`heUhGYikPHi@r3kdoFCmbExa#N>m8`|byE^Ezy~Uu@~y7C zgz|&mNe8i;?3%|bRA^Lakb*13QL8j8@R`ySJ0wq=Z;3iG*WuQD*gCTm{ff;%t$8Q&+I^3$C5%_=zP{xV`2^@809+D(KD-E0&nEgU0z^bF?p$UgI3bd6jIM4q@S|*mi$dmQUCD z2NT&d-=QWr)126f76Nk z7oDe)>T?9hZ7ejsN8}pAp`%?&LB4T6|AA!%N zJB;rz0(aIX*(cP~&%8Tav7-R5%C&0OCMF^AF<$~-KMW5aleX;vEfL!6-F&GIbsR~f zo_7Y1l7vXhK&8t8A^%EESh=2M~e-M{(`QS{PM9bR_*u8ihR7HMbX((Jw?T98Xb z#bERVn}2?FU!=U;^H~S6d;?nifXm&Y99NmRsHF)B__qi#DV*X)hnYnr`@%Hx^!(K-8gIm3K_fjDdvB_%^Rw0=DYw@_=($$dgV-$6FoUpu@SU0J<9<8dgE z9M7mW`(@}d3axBFNwv$2I!#I`AnMv3r#|q^c3;) z58d)1O_XkO`DaB6IbNr;9m6Kc3c84@+S94kVlTxH${2B3@g;|y8&^3zHHI;hk zV+pg({t-clpJw@K5JvjF`+S25&u-X3=s&a~y+Ccwe$W*_IGmr)v1OG$_8m}YAn|bQ zmP$WAPXlhEM|@=WAWK8C4{3ZYLhZz0%G~}vX<}swhdJeeVBl5W`6Z^56#PIZKfV;< z)a0RRXN+r~A?!&anO;XtE}_pWq}$yihrR5)7~W+C^1Y*H`_JI3cOM;szLV+0<3j%X zLjeU+0=@*oM9EJ|xiL8A5$F!sx)eHTbK0rxJMJI9lPUUqB1WOf*0>|z* zq)N^sF-^<7#sP8#WO4(oTF(!8VKh;Qlzv7azUDl0xm9mL%-)3XJpkDhr_Bny$1^D1 z7iX=%uWvAtYkf;ugT!aYztvwA+m13(OK z_3@$CK2@#Q(>*VWw)85yTT>fZMUGpVd0xo)COTAUN07z59+2vO~b6f7_vffb4(z#X~w$83JJ>3LA~Nf|PL zHauT$nBsn?pWbb=McaIt&$rk&^6I4L-^=U&7F!PK_uaatW|8k8Ch5Jz3iZvX6!q8? zn%Bn%0z7uJEH;X1O8Vb2((>^vg0Ckbgp{`D!ie*EUqy=p9Ah!Xn{f=@1tm(E*IlK= zjt|-JyTqfOE(m4hSJx0~pG0)4N#Kli*I?gZ{6G9nIW;Vc_ zk%yDc)NxLPC5=`pkaqwH&WW=&TFhFc@Oz-z=6eO-RKIrme>2&Tomtd%zdfTYQ7wNf zM7R@-nQ$sZ&i92o?}(1@JaZfWNORfY%La#3oj6q9a&|OCUaSH+@J=PX?EB8Oo`>J174BhIzQV2dj)v;T| zLm*}2wD5b8cwL7sL)|U*=k9`Jm_*Z!vTm+Ks? z_kQ8M{e96{DoH#_&iw-0p%lVCJuN7s?2YL6XZX}9A`|)!zcIFf1lJm&4wDi;Baolp zo`cEyorXa-)Ut^+a0P>OK%||Gvrzk8b8Fnwki2D&gR}p!9zSAy7x#GueP(rkY}Sj> zIJzmRv)GA^jXd>24Owb!x+46F=v#`hNF@i>_tBA5i+|Ea?VKf+1bu`XLondFA&K%nDMhvH%`E2@*%12 zX?Dg^XYaUPr9y#hik}10wsGOvYE@=M0#af81ycaiyRH=kNo5M(5XGehh$$h=MaUTr zrzPcv*KfD04?H;yMu&ZxN;e7x;8x&oamki>p+An-Pp~{gW&H&zS3Bp!d2GB@{&zG>xqAsTUUn z@X4;pR0%{5s3qG!mN3raR3K2xCT}P+B>6?uSuHC1r&owsrFUM)$?eW#^`A^`eF?RMHx*$L z9wWRwirJi7u@U>gtHxy1=%>;+z|*fVwU{so8JE?^$-M3akg0Jm$yziYYyOEQ?@DD`3OC#12rZYktl+o(Lg62HuMe*r zEHr}Nc=WNM;X+%zVW+*mmSX(lUeI;sPH=$PVD&ERXloF#!knve# zU@@D?=ig)BwyC8xEyA9-P14wh07-omvdmvEaS;X*2 z8vi_Aum*%bV|Wr{k_aJ?#d^<564{4Da53HZZhPSyXp&i{{qYx$c|@C^u7>%iV>Hu2 z$L>5DQd#Z{!!bUM8Y;a+hH=M!H7qRb!Rr(U?PZ@=hw8j7?Vkt69G${f+uAzssa|$T z4O+~Q`xELs1C_YaeVOf-1r@Nz)t~N@)+fth+npoDGYN*c1S4XJS{&_nKRHv_NpC&P zPhQMB;^Rmu6x&#g{eklfsu%-<6?V%Did=qiGX)g|tVg01oV2-oYRowOYA}+rdv^ZDJf{e2nay{w zmH?xO14UObn+W6ApG!5zKnLNJLq8+u&oOe&6mGzdD(cV4j;-X-(ptTMR^OEn$oY$8 z88BQxpokr6=I+lP17N9A^ zpZ4{3LzXH$E?MaZ&&0+5(W*5L1bM*n*@DI}%73_W|7f`A!<$!P36p93r}4aftG_JX z3BOtY*?G?Xe+Y((BLOKP%EAF4$ zB9VZH@XkuDTA2`DRBg%yyUt#(`u$gr8=28UCxRW}1oJ)m6S={@N9u<0Tbv)w<5#qp z%(Sd;=R`*={(QhAVu%JtG^Q~q0|CX`Ix(h6crv@}yokFv{J5NZ$gVvcrWz$ETfxEqoH}HfmPCyXKa{#M3z{U= zzjQyiuwdEV*LA(MhbeR7 zhog^GMvVp2>_?A1&+`NzQ)~D3A$a9T|3n>vOyg;Dz1EgGVA<{Uv-$I;d)euXBl3LJ z@BaJasXH@cv$Vv*+tj&p%ljARwsIOq*2ua1P0hl@?Djs%2YeEZsDkOsYj06chB))O zmDHid81}cUs{DE0*^2VBfjhI)%fd-_E=t*}q6*`(WzKUv19c;<O1_y(a78UI!@2gvg4T7k9+6ebTu9{bUck3*QN_g${8Z2 zYg=zxj=EDMwr6gG?}tN>=dX_}`Mm1C_RN~zJ){+=bTnV%SF{(rH6n-WM$`I5?tJ{c z#@@pen*i&Vowg3-S0|(A7ta^V(Hb%XO%o^Fr?!Z?alzwa#>{%*=Z>UY7Rz534V0{H zueufFUWr8ptv}8dHNhs<1aqUufsfONbq}e!G8fw$U*6u7xAjW%DUeq#*H~h2HRfV~ zy)}5_V}uMn=XDul*D7|rAugGt=mrY1Z}b;H%+8E@v4Z!G`17_v7hHaA(K~1wDUf1Z zUKrZTwtJW)^0>`6gZ8}aOaxrLKjR7^FLBaua>W?k4E)@d>rfkVFtdolunDB%9%$%` z0zNMTjStS_^{PB8$~he;bg!Iw6)J8GzTrQcUn(>TuEJe!tHY3#gYIs^PzJ3-|o2PWhkMrv(ksFIkUC!y=*%C)%3O$7nHp ztfZC0X~za_6YaHz%&Zyv#}6=k%jya^L>fQ9t^WAaF8=}^%a8g2c9uCEIC3Zr zTBiSL^7RPNBSQx!#07O)BF_P4mIwh{lBRWfOVn+qI{4UbZ9Gc`#`u4F#+`kCwF<;o z9=OgEi~6`Z;jy2_@g?YP5QI~A>h0UPqxzK3M+kCHxgUS_%J!`0|x>bQJOE zbXCJtGDjdEf9My+z)`_CkZN%DoLo}$uM?rmLDJCO0-Tyd{@?+ofVfkrY{XC<7VM9m z_Qim6vV<;WsR3eggyGDD_ z=kV%D$eHaO&GFp9Spk$W&woxlvhPFW8|;s=3lL{Rd?WWS{sdCch=q<@mf7-?$)kT( zE0(opgm6)Kc%YG|;0cRF0MJX6x2C}j&j)GRNbhT8Q?JX6JV=0Wh)9`0B?g{~A_NONFfZpL z#kVSzhhlI`l4|>ZnAvx-N*z*tx|31%5&3$UORh;ow zwAk6*VgMnB?3YEz=Oh1PMSy_AAOwwu%BKV#7)4k?tcYJreiC$x z#_t|GJ)~i!VB-|78wV|SQVphe@vfWFVBKPb9*6k${^2Y9YZK@%6P?CjM%XL>;_w%; z6(fAaRdp$azLgqy(J>sN_8X-D7(-H6py;c^ZYn$>vyr-DJqqXGj>aNWQ9&CWrHSCN z+WUI4)&Yzp-ty%%7uRpl9}rY)tB>eQtHo%C6aDT+F@1kBLw_}U_xwIN1_6eSqS8G@ zc?UYL^`nIJuphjfy;r2KGFv&Hmh@sw2uh4JY!eq~=e*Y?X(->;IBbM576L9zTMTkg ztPegkgXa(LC2I~|%#^f_(fKpOJBpY-RoZPsN-P4nOB`yJ5)+xNuxw1^M8KzV6z+A! zP>rWHXe1b?kP+gpn5ifcLwU(IFdTVX|*C&}<-Q?T} zg2#Jps6VC9Ez*3$42ycPr7KzCM#n|dDG$D612h7$jC!T)n*lwElnbKpm#HAwt5q!Ug5kRw#>ng8u+DtLVRC{V|Dj zBXp04A)zRH?9OI0*pMlFDNSy5L;r1|yBo+Fx*%D*#5_4c_#e4AWXR?s_lmJAl3}SC zL2a%IbWRk5)cZY@lqP{28vUpijGvvQLB@2$yA>n$rV0gPsU6ucfp`|5lIeFBr7+>n z)bQYPd3wVs>zypkV*Dn*igOYNV8rqai()QkHBkr~*SG4^Q24Y}jaLRMrQ~Og&nwMC z!V~0|%2M!iNJy;L5TYI~BF6Bf3F1zpStJ-Qh$hkawjx_mYoqkAl7B;m`T=o|!04yV@C~il zYN|(S4mwD6h6drscdROhM+zxOgCQM%S!JGCfLtrg6Z))X*S*Lf0|nEK8O_T*b*#i9 zBmvtLy=iFPDYPOkR5A4fc!uKBAd04p{c%Ew7!ay#@=oe4y^}U-?R#wcr&G#%2H{(L zj)=Eyn612b&y2Lb5Jc*#9HxIj_?sIW-l@6wwPDxBC*QXM8Yu~2_2PjkoAot8iqxuh z0KpHMA3)rt5L>65_ynRhX8_AcI}nb(Q&nrVPYqZ~qpmt6(szohd`_qO3WD9t#rmKk z%|~yo8k<{InZ)=`1h?C}AAJd9={F&Q@pWu+9*o zEtEFyuST#>bFgz6ZcYcL; zhw2$WfBFJ8TSHqv`~u2Jxaz7A&G< zQSvH5igM_j(kSnjPDppDBVtsT&grC3aCnH*JUde`=kt@^jtf9*2+hj9C(v;N1IC0ql_Y;Hzz3}6r31MzkIdW~P zDj8nMzz9tof{d>U#~}T}e>p##C=hYzHuyH}+A$83MaUuAZl0FKpDcpe;9j8@k7;4T zO{KIEk!?6FgWCeQOPByO29y+@;-F**%vn+t0;sRbyYw{VQjm|nhWQm%>y&;#bUjpI zL;rYnJbNbx^EC=#SJ|F9M-@c@%tdJce-#reo<-G%s|nkSwSd+|dD?@J@?#Rbogf~N z@XhUafy3(e$VUpKM-&kRiK~kLwIAB)j{X*L6MyIA#{ZdLEo@37(;{sz*rckuKN9ma zZ@1}wbblP?JtRcwF&V->2Fzmxkv z&U<`|-pGZSmYx9T0DyQ+Ad00&nJ49W3&medWFxh-b;B=X=s`#pxJXCQWSAen#~8mQ zauB8(FIA~TGI0s5O>W@y2J2 zmryFE-(KsNvn|H#*2MA+O8IZ+4)Ep&OMI*jy`?a>5hP*~`c7!>V6dWz6BBSPvB0$e zzqzWDRDRBMeLdbPiEmjZXh-0v z%=4QO6swTFRE*MYr5QEh=e9@bhxl4~Zqs^i8 zv87k7h18mAaBF3|^X!uGA2;Jd{)UEFBKj(fDHjgi)1AlAB@=;ej~NgvAAz)?EokNE z;Qx-vs!s_{#7hsGD-gH*+lwU*-fmB(M8)j_=7_TV}1X8=9y%4k^=MQ z&ee!WE|CMM1_RnL*q^!`t$y~QJ=sUX0AwfRC+}KI?A%TF(ML0%h{CJFTanf;L02fg zd&Wg;SDHN>>2G@&v-7p?U-Z)311CHlWZ(WB$S0ivdjCPZNdW9(R7)+q+@zXf@>=Nt|rlYPxrVLZm$`0mhbvMc5th*UeUg# zZ>*@DcCNE&g#1C4l^Pfqs>N%(^|+FAWi;hKe_4|qPO<7LzW2AB-v-xx(A|WnoIILa z)yjH!P=lEy-OPHiQPmB^N>Ft-D&~d6kk^Z93l{IC#3aE%!o-UfHWGV2)>8>z;ENHd zE-#x>ooVU4_~y0i55sFU-DZKf5cnVc3-JrR+wrHUGJOvSmn{0@7%QBJhlfP|7#) zHM;98gT!v4IUe!AV+uf%9w*_Jr1B&Buc+W0!b$9+e|8kwG+EW`X zTk*}ktUah?+^*v)_-g6=TGuNwJdv6eWm=*j+_~a#X5K#M9>1@4GOgpu?AK)XT#~7m zlLXx~Nqzfe%A8*C>yloSuC1A8tt0ZZAVUR}pe7zieg)&0USWsqtCN!(dCzEn?1xYEX3(c$wY zKK3}IC_)4E+9J*3VG*a$%!(JN4ZXX<@I9%*k~2Zpw!#{#bWWXD3*!|yAYs+5LDlVg zwjgVy<8%*u%%e^r6t&{&hb(G?>XVOSs%YhR=3>SMpDc{!N$@Jo#2?cXeWMIFd|eOO z`O`?W3k#@N^EOYx=$_v}l2BBxm;c56?=3u2rQV(|Uzvfg7K_tIQP|iFRiT!?^WX?59{2hTp%E5pYvVPJ zbNDn`a>mQ5!7S$H*6L z9Z3xww-1z6ZTWQ;asyi|7UMi$AYK)Ibof~v{Cx=Yf>&-RBpYqHfJ2fhIa^kBYx5KOl!V5B zMA}uI&qFTIe@DxI1NoXZ?Zxa#$q_IBbPP~*4IhW@Z$Z}0$Jb@_G^{=*qtiFX&_AHN zQ->$c@)`1Ky%z<2EDz8fp<}K9eKZ8=MTJ+KoD-D61QA-|UR3IFK~Q<{;nRhGB#g)b zUO`aQ$cyds0{VX(-Tz88{tHZN1gvYM|E~k#zZ)oS;h(^2Zv|_SWR<8Lsh-mMY+e=KD>e8AH9w-ZifD}?yA zk&zXyL@;c3*(g1wvda6;wIl-3<@Xd}^@EGD|CtLmn8OZna8gt)2_lk(lZr%zm(-Sg zkyVTz$;CvZqTvg~-R$~j+6JvkaUv+clj#0N6AtAYsf=#`9-Q^5Obk`F^?X=Yn&rr@fT z@sG8&2}95W2KBA+h{MRpxGH{XL=!DGMRzW`8gHa@d9)-Ce+Sj&+8xRhU#UwL#>4es z;Iy9kiA)vT-J~Ur*n8s3mr=H0_K!&ye}q}`qTc+R#G{Rgd)ol3iZ5MEssw{3NXfEj z@GT-R&m7c&VC>eQcC)H)x=t8}nn}rh&xuIrNjYRpK9%!pzwnd_8TNxJGV5<>+iOV) z?F?yK7&GrKw$(p(n6N8?hwh}PGG4{=nRgt4U3^!0s-2w9SVlAE!CbXsLGWsdN@~eB z0ak>Q4}-)M-N0;J&{rED57}Rda>}BXCFDy|O_p;`J7x8R|9GJ;CdK@H$Q{O5R3G-m z5k>S98QC4b|3=>~j7AuAlRywFb0&;^MyRvi*Pop!)*-6+1sX!yW1>qoGR{%f`C4sx z2Iz?b^vC~i?CZbY%uTX)c}eealMr1_TNd=F8rygp4_BhLU`pFgf1y{3J$pRE>H|oN z8OV@RuyVDv7^)aYTu|!J{;|?aXXwgL)JItUMxe~RN{^MpL-9aK^RfTyH8n(6j?V3{ z)&yN+Qv|yTZn_FdyRM7VPyOT2Ye0d0#_SoN`VPGe)r#o!to+(dJK!ISV}wv1(REiJ z<^bwge4OY^Vj~k&)ZwuIb^6m9(HLPH)b-=XP5oK$m;Zl>=D$zIRR$Ppvhw~Z`df<2 zJS(PQQs4DiJiPLcP092BxEW49=(TI&Kk1DM>Yz>6pB&f3Wh_$@lXf+1k`~9iNtg-o2R?@y0qdIYn(# zt4DQMKY^)wnI%3s4G=|8D5s|f>OBpPqbo&*gfuEjhD#@?+U>s6{om!}09)*UPZ=Oh z1A~A&Z+!1nQK=?_n23l~tK+*C^RKHgN9jugx!d2hJ6H)!t6-0EM8d;!25i5)TS+qnnj7cMhga581Ie!}Sotvlyq40*KPp|03dYksKAcWAuq^V5s6A>1a)N{I)N5ju zg@?Y)cEfnu6i@^ieCri=HLZsTfmLFyJHTFFO2YmjxHcZJMDY9RiVDNYOR#5M0lj>$4w8e53Zz*Fg>PSeBAwa(pg#A!9#jJ=JX`S*12VxERV|*nzDR(9 z|Jl{Wc<)~-a)p51FqW|k!aDUdRh}NO8_4)vA&+~97i3rc#16e2x0gT>+^KQFY-#1^>}_(Gb~%%V=>9drpf(6e_fU^uq5Sj9Vl;WY0B=bkGs2l|QTN@C9~H@o zyL~7P!le1xY`a)#l4cU?8vb zjpjEy=UdNm&NP^r{D^5eaKRwB@2;mpl(V!fS$#)fDKXz!%mAyxKu_;#Z~J+cT0T-}A>7)rSZJ+;Z|GSgjpu*Opjt-?&rNY1h1Np2FDX1qM;c19vJ0eL2Ao9exK zYF-i;b8Z&xyABpA!K{rSg%3sXKsvWj39l-F{BOwlZ+rPNE5*^P@b~Ka_kpxJ`gXzX z#%>`GPrW1poi6GLDs%^z!YG$3BCH1;5eq18anpMZZ`zg3G}9&&gOpySC`h+h`zWKv zCI3z*UxyJ6l(g5=IA;Ecq&@lWsICI3?>T3IQpT#PPBpEJ06=1JaH#s4iSu27 zoxunD32eKNnr4LDQQdFKX2O!`-MI1HnCNL-8-!F4!Hb`57c<9KH$ymPyUt8JZy_m$ z2~yD35J`Rx)nq2a=#N(X)RtN{r`T5SrC4j7uk@;QvKKH8*|HMyb941x?@c1dQaL47 z*yZD(ZM1SlcSKZVYSflXB3j8QG~+qMD|p*iYFeD9%jP(T%VzM0Ke><#3M39D@iprh zMeB(fSDL;SDGff-F_R?)Pb~_`@*hIG8R-Ty9crKyF8i~rOMuvQ>`nXK0D;rmCC!K@ zj^4=-#pv5+Z_MsJmQwueB(GF5gW=v4cCS`Uql37Bork^Ryh~o=GP3eyi>Du}|;Eh#}%~dgLh&}5hTWzbe@as$J z*JHtAZh)zadioM)@~{gPDLb$Iy65=^&)cX*JsnJrnea5eVzRxY%d$8-B5%q}t^+?k&1DgL+;1SA91 z0=ymSt~mgOwchqiHISbwlfZo7sA)4~DHC4eH^67UOkXIfiqg z%D$2zR)_q#Qkj`WR=-^G2t(rrRf?Wt#h78!(3dL5V&c<~5u_y$SLcu6$mR#e*C!#T z-Nw$V47%digK-13uOxoyv{>fg9lWa{QmjcGHOiRIdaX*JPgdKLdSUqp!v~SOy*zrr zb9V&-P2c;wiw8xB}?N;TDF zlfb@0m;ITc)-QfQ+ja{Rah-}Fvs$3MoZ)C*mE+CJ z>CK|?;=kjaF6w(7bKI|X&(BAzEKXpm{n2)@upy!#`}o%LHuX^C4(+q%W4Gq( zyL8jTtE3u>>F+d9VBXa%&xesw`r_&@S6l>X1ye4qdSlB^J*WijGp`>YpBOQ|mQ_io z;f&Ohc9`{HkcHK88`fN#mWE3cdqS67n_fdMqT$q0z|ikyOZVX*b8&awJ4~G+_63Qk zAtave(WiJR3s+uTpLAwXD6OwxbYvo#N$_cDe%O1U7Wr|k(_xyN=QxrrpDcQ{X*W0G zB9uY|DrZRSJ~sWgC5>KF-;rm+;s#JjO-qEBS;!M7nK+Sh%ngY%$W4*hlN)q>F1 z7H#Jy%lK$X^OUdmVX&bJ1+vn8Hx1tT*e!t8dBXX0m1RjA^&Kx!{?g!h&Z|zJ(#<9) zSt5|-X2P5jjnW|V`y{J9u}{%h|I$YoVpO2wqnzKL4O-jjbPt{KMUn&!z*V^#c^NA zs41UC^+}=bd8|4qNM0-uH#O_@*Mgx2VXDTc5pfGd@Lsv&{t>?UKF~RbeA^Q1uK_RG z;-7NH^27j|iR5NEIlcS$Z&|bnKfZ7y8aY}Pv^{moFK^{qI*kRe?JiH#=a=_9)jT?i zR-XL4C<|qbn;ZlWho?*=VcBKUj%p;qn4AyF9UEs##O`%IY`Et`{IS4iTQR~P$QS2} z?rQ|(2L;iEh@9{Gt?BpUxX^Ais}b+SPG-vZR*r7D$jJOM%@wa}$oFnHY8j(z7arCR zVs>XI->T>$PrrNZIq!tIO;3K^ePEL}vHP^3U%FD>x^loe0{P|v};18t=-3MGw zLK79`x+z;18mfy!t&B-^;Q%p>E5srt`181 z3o^r+Zg*Ce8p zpi&7+`JBPLbySfg=kcDKJ*So<&7lvgtCQQGVC=jL^1C~lkG4<^l#?-7ZLs~r znNHVCY7l|V5Q=Y)^!vtk_wlTQU%4l~V07)izMs3WprE;*xc?>*nZssD`Nw1y#dsQL zk_X^N3~n8PlLy+@{egI@(G03G>L`Nd27qoyPh1#hg>Jx~3J!v?mQTWdU#pL13fQhF zM{)*l+)YL!ZTMy{KEAIo6?oi?m~meejD=}Tpv*UWh!U=ZM!(F^r-7*?2!i;Bx`&?Y z$&XpXj9DZZF-WA2R=?aDZKl_fD!5q;j(2WF^XY|w;lNJ@%=bIk!hy|jr)O)`d6ZP1 zeZM^q>iD;X!}r=Akc7M9Sz=aRD+HO~_w}cuK90KHlD+uB6K$#SrH0;fz}Qiux==;} z(qF(FC^T{RHI?!4-w)SHu(J5hsXiXBSJ^9#^*d?afm8H;n$M*d$%{RQBM$yHQE02L zN_=#f_-32nEV+N1NISb*9cBId*H$M30ai_Tq)veVrdN=6bS}Qwo6ic8B)T zB9c9rduwZkp`KD$66hM^083Y2LreBMI5pW&21sAkiS{ex1_IGL4`Ko(JQ- z>Q^qV$#IqKbVT}*Wgeax)Fmgtf!lFw+0Dsx?>PPTBo0l<67wX_U=4TYEzekB9N;Wd zTIR9?rx-3XC`C%)GV`yOYqZbHi&EF09Atb4e{bW0>&y+3=U1yJb4G#Z_FXzO-~sM+ z@`h{3{e#Rl{)?R9){VfQwDo?y%^_b(UQYN=TthB5wxC3%ytE8!A?)+YlV< z53hxZiCZ6cAMusH?dTC&UoO_IBiAcJJIV18nm4cW1?MS+nQ_i3Q7HirvD8i~;^8nf zusBsz#z`GVa_F=$htfE*Be|2r$r6p^&LQ%@*%9IFG-S?+L5_vSY%~D?#v%Ck3USYE zdU$VxRWpLhgn8l1L9`yV=< zP8hh>eahCjPKZ-koReLSTk_U;@7tPBkZW-?;D|<`6tzqPPm&&(|yU zefX3h1G;&;Cv20kD)yZeCVmgKXS&f!)yK z$~dTfh*HP>fiIw^20XN*7|%0HGm6T0oBU0Y-@w4@RH6BD$J> z)0_lr>NC^|m!<`hwm*)@of%W(nF)Pu_q+rz{yos$13+>5&2KzDQ?E{4eosT18$M{P zoQoyDKpgjy%O;I}TALMdTWA7w8!z10l+`&DwTCq|v*u%ogV|mhZfiNU{E&gx ztNZpwIY_0x*%$1>7Gb}aipJ>}2sk|K%r)3{ZuNZRw3j$}Pl2GB>Gzg9i0%opu~?9e zsLHdOwZ#hG=e}kFoDF>DV0 z^{9O`rM}Pla%>YZRax8~T`^eyy(LF@e~eI!$ZGZnYL?#=sZM=lLA#}+Om6wm7}&1Y zwE@|rxPl*OAd|*KAqM$?fcYfYmz2FqF+Rjgk&de4fLQ-lyH=IEb!RlLP9EHqyK~^P zOenJNyNG@E*bsi6`>t2q)`+!jJ)AK@in}eQV*Cw{)y%UHIePT@Gmx7DxVl2m-_Y-L zoOO54x67N!9eM#Trx-Y!3|4Ewa7>oj69SM#7@f#C1aF%tcGKv| zE(e^8U#KQ1ktylL&N`I#Ht}|_)^oL;@dRxU_N1{qw~`jkc=t>N*+1?v=>aqi+~Qnd zi~;mz?^vSZsA6|Body9$I=>7V<7UrO=@Fj?22xq!*ZGys1j>|k*rQTZvfUE}1qeop zXWx3*PJInc!HFZm!~IU9sZnNCne8};G=yvN(Je*=YuDNhYc8lmz<9_BrbT>}9iLkq z(yK4_N(L>7&kc{?=EA`7ycksuxu>Q_+K{h|xcZr2O50my8wm89id4D*bjs#%oR z^@LRDnO#!wWgB?4>FYk6XgLdp8g{{jhwb%1eIUKhVDP4ZOwGGJKt33ro7b@2KOfLy zdr^6QDmdj|21sQmcXJt1bP99$GR~wlG9)|^d&x64ZxTwataq{9!;IL(!kt{UbM7u2 zn=b0Rxjj5|J8tsphf@UI>y7{B(Zx)NU#oRQ$qLtZI|I)+p$hSCdqVOi%(Ez6sP1A6 z-?B&7kbWAHW&$s&izxA!B#L>QF8p85sE{G2N53`It#JP5I{_u&pzN@Ie5;0+m`OQh zn~RgaQIEG#vCE#Zj~|_R4@Z4yjVffOLn4q}dh71*g?8vxJ@?|Y6+#SUO?f^hQ)td` zf+ph|K>}5KYoTlmV~N&|(dv6FQW6R2>SFsHX>#vwp>r-@+heYcq@uyvhmnmRa*P3F zpY1Or-#@H+c+5s!>g^5;%&dG>i@O;77}y#*$pz0?o8qGnP^QMAYe5^6Yqi5%KU}@e z@1w-~`}R8HzE2$87W`{bdIydclkUSMU?_o_lpRq^Eht{rZb4O>9bT0ZU=`>n6N}#S zSMnpiN^~QxmNJ|$TzgIX#|=U6b1JSij|AjS_hO%jkN0d8*{+vwf)GL}IE{ed*L%>S zmW{?p7>O_70~+CGK7;&cc-Q`O;Qe%5ce*_hV3621k%Bfx@Q!;<-F#FZf}Egh*CKKU z6X&tFyuTac*g0aRsYhGY&WuTC72-7Ry2!(N{|cW+7LLbgG7uTp?`&=q2R>Bje0)5P zMn>&j|I1=BC@QK(_Xe*%-_rxri0+Jn0z@xszQ!KfQHl&Sn}2_GM^8b7$bZyh{dbCx zbdvuPeWK8k4h<^X4gUQ>m4zfey@-T}G0(u)AX?zaLCU77E3fW0X+PVowA)_bsVPA= z)*r8(ompP_+*pHL~Do`%>xF~jQ$v9jW1RWth; zLA51_pKlw32b~f!qI>2R;dC_K`MM2n*Kt*`pwNhx^!juHT^erH&~?Xz=TGGQAECVP zLUFs1I?HHbfsZw}6S`GHsIg6gSHV(kgMo7!k3+RilSGXpqmxmwL8wcb9dKj?&JVql zum$c=4s68pacscV-st4}9e8jQM5sUGzJ#tKKAazrU)BDA+V;nSMoH+-U(fB*^J?d} zV+|%;vh;z>-1^&@=E*99o9BZF;#}e(8%SW@F57S0xRKi*50L`G#xE-~c4;w;j>Xq1@ySf^T(fg!`GikZD#%4%r(aD24dY0r!lpeK54aV7 zu^4^@g{Qn5jeDzp3LEZ)fTCFFQV8scwuknX%`@nTNEJXPjrx}`yL7PkTS+7cb%jScW%Q+&EK7#p~gmva(Jf~AXoUU>hV40{d-4KQNw(M^_ z;PT;(l}ojpKDC)!KDLRbHsS7K3OUd_x4jgtqoGd9MkP_83eCmc&wI$^g?cU(xe^Y% z#DoKf4ZoQWHFxdULDQ3vOTVLK&E5FxNjS3BZW+%Fg43<;_8_3*tDJ>ER1^R0(u;+O zvR%`jZ1Y{I-0tI`!DmdTmekt)mWSe7m72$1d#trKLEK5_MIt`qNf$oIcAjlI=UM+C z!FgnIs|d`7muEg9@Mi03Gml~|;$!lbFVMR{AziRnhJXauEsP(s+dD(R)R^V7=ZQ1y zTfT@!O#O6T8^(XvrOb1)8E`edZ#c@-spPN5KOFZsTG_6EdeGU3+#eBmT-l~&@N^FU z_v$%d^t@`YY+Uf)tcxQGm|fR3s8KD_WOg;l+cP}2G_fCr%+2>|PJ?)Da$ox_irGD! zZFd$))r6fjdk0x3egn|~F|VNwk7SXOKf)gvP)%7E5D63sI>ZYn7{wa}WQ=81%SU@z z?`Kc)V{b7M9n$YRmi0cvHvR7PXcdXXJPmBRxFJ-%>b$2k*Lh)RS$oK2q~;wy(b;s`u@CPT@`nU^_o~a*}4=rj3x>E$@NT>ng25) zSL3vGXmiyrfX;wmQCt?|P!f1w?en~h!@4`sx*NR;-^!eo&bsOU0=hNuKK*zoqU7$o z>HmJ>e6cF~CK&c$Qs}KuuusX@XWxUFZjN@e8nVc&45T+aT=4r0IX&iYX4N>OeZE|=LZyu}D&wcy^b@gpG2CmQY`-I@V8By0cOJVw**M6# ztMWegm%D1bXz^+MyC0$}O=uSz?&s~9vP^8Hj|5e;h#=<}5K*)FoA!pivfLd4-d*B& zHWKZ)D9vFrhN?cJPg%K6sG+N)(yqdy;c1C;E^_Jq-Qje_$OYf4M*I%4>XMdJ#Dqt4n?6EZa*{canayq3YuWEqq43EDo&V}W*Imv3}3wt zX18)qb)h!GE5{F4=d@gcak41v10u5=)~45;!^~5B|EGld*OpXSM~7@jqleM|>2QaM z%rB@J9w-=iAUo_7S26XC?D4T3v}8gbFi>8)1s5wUF;GIygRG&)UyP3N_a6!z!DJ9L*f zj-3e&5lFnevh&4PZs$QU!;3=CfK0wRu$5jKSAa2gqFmCJq*i&tW^tYl1!M)K{hAZc zrSH-rY|&0l_&DVmU8v*YxPb z^Ed=-E(e4~yD|hG?c^!(Q*FHRE4r;)!k<{`GAaZRp-`hNb#}JhjIgmjPZ#YT$W^9X z#}HC#8oD;SfO4FZb|qGyZW}j7U!(`0+$z#Xn}ldayFT1G-g>xtrmQV4bwZ*&Op>>; z!IU_ZVnjOZPLrs7@$lazE#rAH^K&ow$!OQ}Xs%2c4?H--KK&3YMyh=O3W%8`C3?|2 zsihK3R3%yi;xxuYIi8Rp2DD@kM27Hg&Bl)W;0p)k_K%WI-x++JVrANo#DCj*wgMHu zF9-XPGj-l+sAqy&+#IiyV5NyBC64N)>}eiMyzj>@x|a1Jcn4|)%WyhD1ri3lvZ|?} z`RPv>S-$qEZ4b5$&#)y17B{jFFI5~@BTGKRgLOlHZ3MU9RVR zuPyBPvn`ht&vbA3-q;2`l9;brjywmQdmfUu*=}|QBPKJ_C$|E%HCZkSm843llI!uI zQEiVwiyV#rD*q`<+CG*V{;YbGcVn@Vjx;VG-%;v> zAYbF%{KSK5xOY@)it5N%Qkm&u=A|mVj}nFAnz<|oX(_upk0r%S*(&j_o~s#f(+Dd~Js|EfupN!D9= za4;uC;_V#1c5@=TY?4B02_pU431CPuEsmLKzn-V#dFlt(=+0{4wHB*o@#d9e0Da`t zw%V=cIh*=!cY6_xcZCn~r>3tKCgV!h+8Z6n54)DlFC9GyvQ8+iGPLwa4+43t_8dr~ zT5W#j!G_U=C0-e~metwJDn3Gl(Cy1~hq-Yb$UOg0R(;0oyuZR6*48Ii&~c5ONpwk# z^5u6npNKbTJt1G#)>8gHeM)$=*OO+uKm9Q;hkCKimgd2F+vDLrVRCnDR>^f(8oy*< zpzf&79wKz{XLa8V3{EkQ1IeHYohU18`@E6MRB_l_d8j-vAbgCPRJJ{RI`43QkcO3h zZA!U>3cUooTxlEzUJXV)>H9rB!1J8mu(eBA!}{6K;N%=}`>c`l8yDosQq8|>vhsOs z#sQ;AOKbpNK3XEz^b1(+>-)7+ysNAj+A;jY3dF{ahgKn@e6E(?pkA(qOiWQeGYph6 z*nF->q`gMQ4WE&8&!#E2pa#v7Moyo8{lx)D;fGN9(FlBpO_;IVjl5WCh!2 zlJzR+noOaRk>FD1tihLIi5zA-<1oQebc|MyE}IO@7F>+;!6(njkHMB9gBQ~$<2nCD zuv=Khn4A~QJtiR52y$$sAOU1whhM8k<)fcF@t^N!dnex<&0~3oEpmU679?O77A?BY zfF!)7#c&3)2cx`8GE$7p=3m4RD>UPi>A6`sH{X;hejoOUU=9MJ)!wUsX=W&e8pg;b zWb#qTdX=6Zr<0nX!4@G58_~{*0<#js8sllN9A;MXvnRz&OsYjxr zG1)V2RhFXR8-jO^e>pp6nj@B(i*~j%>u|( z3|vV-zqW6WXR)5Rn4C=}J$v0KLs2lBS>wV^J)aNvL6EsoC849a?{DxQG%2!tmoYTY zq==uMvh5V>0vkRO&HvQ)^ARO9_`1dS`3Z+dkyqonLws6&vbfZzb?pCpx9u^e3`t+H z!9fR?S)EKScI|OU1sl61R8F_U!%m=OTW~E&?QURq1UMc`_tVLQk@tj?=T>at#Acwi!|3ft#K|-u z!)X7MQgSQarvWOh%l|4QHSi_~2kacKG64?g9s`zbtJ=4!9FW-K+dGu|Po^uNt~QQR zfD2tYAJx*tty6a_K*y{wuJn(1k)E{r3v7YJtV5XnRCCFZ{cJxZ5i)7lcZe!ipqCd#5AjeyrV;Eng0S;`N$6Pwld2KR_ZpV{qj4H2`x`|5xK zZCHjT6EK+V@(G!b{}fXNUmR*h{$T3f`PA`YHxP*_*%wV{0c4G55N<8>5~08}SJrv7 zCDxmf#z=m9>W5W~p=z7>)YW!*S5Dg^_~g}dRV+G{=k4CSvyi?!4s`{FC-z%Ycb;(^ z9Kx!K4rNKxp4g_Z_`2@5uWa5NZ&gr{&XFAU*WK|8fHq!S;C&DWy}22$WiWjgq?;)p ztgQdy`y5>Q;$kz(i-q{|$EA16|F}GZ!>&5xqg=RoHZa`hl^O0j;E9v4qIu`WO$6<|>?qPxHMLGg zKqcN>!_o?{dlaDGv)lXc!?H=UUp6%D45}na2!cK<3#1GL3qEcW#2Uo>cF68t8?$+U zW1_of&4Itmx`mp3=Ly}d44J=yH4ReS*9lIe^NfXV!wS3`E1kAk;D`7nmsq>+>h0-)AA)F5t>}t~W?)MKoi^t6cV|rgQ2%o0ffy{yR0_6N zO7w zH(Z#>f3slWjwtvI$@Y0oN?89!w_IgUQXJu)_-(Si53jD}CF^MyxbbpQ{&;0Z(z)Z8 z&Q2tmweB8o(Xr{dotm;cBnHom)Me9o_H+Xot^6Nsf(hoCh@yJOKF9qTmZJ&%XG)o# zlQDd#vW|xb(8kdso;2(P1*JxVMJq*pXzpRk zn6S=Gap2q??hcpO9o?^$Z*XMyaPCnwXI%-u@;K$X{d=V$%IZqR*7mIKlH)En{emmw zXSOhn{X(T|M#x%N2*O;vMWlbksvXG9#lE!pXJkC+%fLrD80=}6wuO*Jw3S^g>4wi1 zN1^`u=g%Uk$k><1bNUp2`PYl_x6*v&mZH(oV}Xyd)Xj$G2uG)&vJ@X!R>>VsoD7IP z&&ls^8SIIk(f5m6R}9!Y**;e#2{*nEuV3+AH+xAPLR2od17|xABHQ+Zw1Oo_sZ{ne zeG4<3FV$-x{=G(&`AG>4@l7iDqt$=n5~QVayZWiZyX{Fj5!>$iT{U_3iYdUU-u6(P zJpm0=!YQf3$)NcmVD_FGxlBu#$oNf-wOw-N9sbv+vlT4QmeDi#o8Y;TZ|S#-Vwirj zKt`tpiHF>+GqT2J3ATBQMP9AQ{)|iXeh7|%QLOkk*D9tvNmSlrRUTBjGC9riL}N7m z?K=$CD%q*86+CYn=A+Qc12yRJE(PR%xV0xXTNp)zSny@R+|WZERp9RP;Yvv+z_4Ct z-RI0vD)HGl$tor$2ABFN%O`+vsSGKEvszkg5V`$%*na=6xA!XG2?{}Hu zF+uM;=TM#EPeY!Lw_u!M3C#^?HI5y7LCZa`nvzfi!%vbM9!<*ot2+Pjvm6;i21C%@ z+D9lM$>r}9dYt#V2fPvYz?j(K8UZu13-~q&%%%kxhgUi2G&jUW!`r>926-QII4$40 zzbhKdkUb&xb$3%Wz!rmHc@7<2)4HG<%M7wl_C6;Bm>W1W`yi-_$b8xFqkyb`w5)&# zbo)81tK436d!HxERkkU@5j$c&(#*7&IpbXpIY?PZOLE)2KH%H&&Ul&mK6z&mZcOrp z8b9Co94-(aMMkxqBNtXUWgvLW%Bas`qW8i+523WzeUQG?<9R)4p6EhWm$mn9smSna zf;?-2D_RhMlR1D6_L2#n65IJPUAY5xfqnS!&qRn`&9bl<1{{K0eU#R+R+C-pq7#E` zldZ_{x5$v(Tr;+|a>O!ZXOfHkHv&M4o@*Ze!xS^mm0{R0IpGJ#$B&va=XRN9f(Ba8 zPjx#W;!cOlGw-D9&D`q=r-5Wtp2yF{VGYTY#TA?*((Z#>4))vMm;tw!G}${;W8yp( zo3AwlSve4)$1!b~LY?blB@h!AO0&|sKMS7Vx53wAQY~dckUG|>w=T2@^WW{gfBeY) z&_8mwac4Hbtil;#uoE-k9ZDmcxrTgu*`1`zd<|Cbf#FuWSv$8OY%q7Qtuiy7{u!(Y zyW3#LoXML)(m5_N$jnjq`tTmw5SV>zczjeUaY7DPb~QVhe}!Prq<)bTM&&U+@8f&A zy=IgvsDI)#U5oBrD*b6~8xV;pP#Sy5a7W~h8Z@HH1X=JJB;rFtNq)Y+*77`za^F1= zgX5O-DeC3j$|AK(ta02@=I~TT#SuHz;c(AaJ&ro5K{6-3>bQ8mc6$AYGt}_{NvH;n z$FAD9i9DXpeEa_EIv;b_&ebo@R8&>G_DHT~acInpJ|DqbFIiZ}^+1M3Mkk?grb@vX zko(kP)r4-cp|K}8;b)U1N#Gr2oKW4y@`*Yq72Bw}r zRJo^vV_#r6w{$h``7h)8HKACR`Q2ITxk%cwD5{`EtoQ2ca8dSX9COCiK)U^iWl`2I zi4~eNo4S3x?V_lUh3}AAj-8mYSsUlf-#62CAT*b(-+lK;7(v9xS)B9bO?*Ky#G>jVH{CS9*wL1d&^Rg!rGYWtL-lz@n-?3o%> zqm7xQe*U96!pCbIfP-_f{;FFvGAm#u)dAY77Z7~jN zDm_nCElyVqtFH@5El~cV5PO!Xs+ZBAaQ)<~V+LmHX>UBq?o{dvY*Lj-VRAX(4zrk& zo&XEC!p1G6l(k8;+ zcH^GTOVUyj&zQnWSq5Xg5h$u1zpRG+H#w>cTgnJKm`b7gY#ZXdE4MH-5PL&qV&7l) z@Udo=iVd70@CVZib%9aK9rU^jgC|g=rqQ`Brh%g-TQplZWG==xWXycQ3B1HV^f+=! zy%*J7a`>6#)~b{o7TS;qM7dCtJn!@hiAm?!bOwC4tWrr%&^u)Vqy=vti@@MTmoBgsQ4@2BirwMA(7|-M-X)>>#R@3S_9dz0U8*ol-C@Y)efce`P}g$AI($ z9PzH&S;y-Y63^p37TEs-s)M%75R>F{KX=(>u?cE&jAZ9|PqTSkG}>QA#$`MGzFGwr zN}eO!0kQRmqUfhKmvfw6ZZ{Xblf!zXE_j>*J(n5FY>IQwCEm9=OWyT_G1{CRf%(se z&z5@c1ea)Z*wmy%j|rbb{4fnG(zkdGbTpi`;=tLwDEsZeN(`p{NXK6&v)`^HI3|xW z=m$AyNQwAdiW#-lJ(>>hovcq@*~x28_5NNf5kUrKzHAo9;nnVMX{B&m2C=RLUmEKk zO5faoKMcx_PIX8{b6i^xqT%mn^HOoO?dx5{eC(Cp{0fe8@v~u(uk?8pmMEO}qR4I? zx=QQeO>Lp>@C6=s=;X%bznh@cOHcMhK#IveXcrqAJoA6|4sBaTTttoTweB-hhHb>& z5+lC2s&)2?qJkX2W!>sG@ReD9nCLpboZfh!`$)^m0F$kgqH>L^T=96u?S8*3R3e(l zTnrj>u4{aJJ0A20YBBAbj^8(5j3s0|z7@xG#%pF18c4vUW|^u$HHho|4ATFta;=K8=Z4jF~2;5)vI>7)W8GGMv zvc0BJ1}ST*dVSN*NTta69$OwMiTP<@yW+uTI8cpT?URgwWk}rs!3)LRvO>HtrZzT? zn@fxTJg4|N8_LcB`vho{LWda08?|_I!x1U?&fB_bwJD}}P83XwXF{Y#8r`|bjJKA#=cT z9je16fZ;%}ifRJwY{Dt~gtQRSb2t)BsEAU_I!yO8C z{wf;XORlPXYh_owma6;H_q8?^CS8qF7XQwm(9mZe18I@X05nqFGDb?mLX^a zd_&=cp{|Vc*dFwziTOTd?8>b9& zDr9lFDg2n&hufzvy;^t~f2-y%{z2{g0HZdu){u7_Xo$I1}c8U z`$ZRBM${EHu>pwHyFe{EJj-fD=dgzN_k0DN)3+!L-|z~Wl4>cwC*?=@kEt)?PPNgg z%Mi&wuGM}f$=>uiJ9o13RPIGKl2l%kJ5F}d8$0?Q7=ez-Doe837#eK*!5r@TI>zkf zW+%q!Oh#(>1k7`V3y^5&@5n!#Es`Od8}NvRmY1&0jEU!JlbMo*{O(m11Hbeea~aZS zIu@oF=I-G)ei8b-W1&z?8-2Kl^Y(VCFK4eO^QE!@kA@g?714sanm;I5+(Wt-hK!8t zNB9tvu(VAW%87^#E+S&w1Ja-6@novNk3WfOjXlZ{(*hh>$@?fBL;Iph#vhLE7JYs6 z7Jco72pga1OPHV48X_RPCu1gt z@f-fC(ZzwMvrmF?YCZkq9S_n^a6bH!)X%?NX|QGEj0I;B*3Oe-Uw8Spryvw%Gz{oId)DZVCmla=Vhh-hC#HeUUh z4#b4R-G{#V?XI&4npa)DBv6P}P~`_Yx*lXt>-z z-0H@)n7#fKk?Gf*ebK6>+~u9loi+h0YMSKo+Fd3kzw^Ng5Qww z)#|U^Ytu=E{Tyjf!)DOC!vUO*-+ngP-fr*U&-$M>gCMh4G@7dBZ>i(B9f=+0IA%M2 zQv}&%$pQ~%xhSQ)9AAvsPEeWP7A)q-yZP&}|6f;E!p;WPg-eT+*gH*)5;}w0wbN2c zP)kZ|iI%o%i;__ZW7-5kQMA=o7+cU*Ohv7&s-@IAYKf(`#4=J*ONEFn5j*|z_4{VM zKj7Z;yytz-d!Oe%_nhMA6?YFze5n{zteW0c$_-iAHHPsl0f3k-s{@mA?c-$oWXg2^ zU8G_+v&{Bf>GAh5tM^Lg1Rw>(BT_lhXN3=E{?e>YI48dL>e<-l%zU6kSMk;2oZtw* z2GE1$Uur4l$8{u|{5rO$XIg`01i#mEwNi?A{bNjMtOz?@aN3KMR^2LMFS0bYQ8zVuGGkCb0lvWqE_i7IdZfVsnSu zX2)YC2eo(t$(xJs68oC8KO%^^Y8gH4{}i&{`bxh`EoQy_(=q>Bl^=||=QO!wc2p72 zV>dK%EIH%G%rA(I2cC852k2dTclr!~SDKOwVRV0|4^sMO>E_CF-K55B7dActN(a*$ zTNLP;p-w_kI+P!(jt}`b&vDvRs7*JZ<*pTXL&GLf2z6cWv#8y?T+a^xnZs~C3V%Wp z!+qGCUZuGub@aM!d_bO_`rY7DvDyd$3X9>kA;`Fw zFLw-U8g6XB=xiB>0&*vbcdtZo5-=M&40I+;Y z>b~hdlhH(dzX+XA=Or4ujkeu16$3=BoJ(ZpM!yy+j#xb>zj4=!vk9cjQp}Rq`EL!y z|2#oT(CUzs26nK08$VVbKC(2~n3_Q(Vi2>>g)TjU3aa_!MUIKkEGjx-j69Pw1hjGBldJxY*&pvs#_lNz#99 za$e)XH#)x`t6@wOMDp}`*XFK zm%nrEj$_E+!MfHvSbm4n=t2eyp)~p}Le5T9VD}mvpZ^`n7cmU(o(UIKAR|mZ8SvmJ zN${yK5(Lb%Rwr&#D+#G<4k>5-QI$!bRUy_xSuXA>O)8AnxFjTX80D^j-Syrt(1z9} zJ8ah(m0-%QK^P&ajb{fEULI>x-Oj{?Wn4JElNjwSd7?ql z{@Y05_bdff@Y@OMo3enni5Yd@dyH zd|yygXB8mW}zYG~BM)>f80W z9dX2A@+3_n+oq3AaT5bbd*$SdeS*#t(0^k7Rff%_%Khc3Mwnt0PFB$3g@@8;L*$dE zX&!U-H^tBSFlRNC*b)2Iwj&0Jjl2(Oj4(BYh|eYdt8NC)%-;i9W6$nnevg*<=zM?G z&`%J={wYgLQZc`+1D9R6XEe~JD?6KHsu7)Ijij?!4>?y}RXjNpmBMovBrY>6cejmR zq@(CIR~_AJ37#ks2s(K)P?8Jx2k#N|q4^y!j|pZ{KsB=&EVC0EK{c|it`y-x;DMji4I&2&1)?V1(%&Kxt9ITjZIM0e$?6^h6e%y?|zIVlhd( zs_Qi6LkbRJIuoK#)6J9Q2c>J<1(O!9h``xB}z7P zi^NDX)TqkuCKjv|T4k!Am+vgq741Co93xY&+0rGQ@rzYm__(3OQvE@~B9?2Pz~REJ zLE*Uy^?Nv0x*EKWPlEE^`R=lvTjnOB1*{G|B z|4~T=l=YwhC8LV)zD12#+8#H&li*-Kzdqsoj^}c1cR*79i(dbc@-4pCSnHlNeyw>z zg7Gf>XcT9*)k0r*ooU(y0m)AJFhv@6h>se@BhYQ=DA3SN1#m^Y;T@UewiXzWE z&p0DbV&)WRdMUf6AvwS=o-}-OnJ4DV2o}sT`qBe^hB-6?S1*JG=Xt-KZwLqy0aUTy?(#bS_bE$UNN$~H^|21ecff$>1O`#1h ud))X9dlhcm5;TrGgyFgTTNqgupS}pxY{BMR+u{%KmyMN!<*N%`cmD%Uiu>FE literal 0 HcmV?d00001 diff --git a/src/base.js b/src/base.js index 094bada..d57701d 100644 --- a/src/base.js +++ b/src/base.js @@ -16,7 +16,7 @@ const ALLREACTIONS = [ "eyes", ]; -const { dealInput } = require('./util.js'); +const { dealInput, testDuplicate } = require('./util.js'); const token = core.getInput('token'); const octokit = new Octokit({ auth: `token ${token}` }); @@ -145,22 +145,37 @@ async function doMarkDuplicate (owner, repo, labels) { core.info(`This actions only support on 'issue_comment'!`); return false; } - const duplicateCommand = core.getInput("duplicate-command") || '/d'; + if (context.payload.action != 'created') { + core.info(`This actions only support on 'issue_comment' created!`); + return false; + } + + const duplicateCommand = core.getInput("duplicate-command"); const duplicateLabels = core.getInput("duplicate-labels"); + const closeIssue = core.getInput("close-issue"); const commentId = context.payload.comment.id; const commentBody = context.payload.comment.body; const issueNumber = context.payload.issue.number; - if (commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) { - const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of'); - await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true); + const ifCommandInput = !!duplicateCommand; + + if ((ifCommandInput && commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) || testDuplicate(commentBody)) { + if (ifCommandInput) { + const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of'); + await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true); + } else if (contents) { + await doCreateCommentContent(owner, repo, commentId, dealInput(contents)); + } if (duplicateLabels) { await doAddLabels(owner, repo, issueNumber, duplicateLabels); } if (labels) { await doSetLabels(owner, repo, issueNumber, labels); } + if (closeIssue == 'true') { + await doCloseIssue(owner, repo, issueNumber); + } } else { core.info(`This comment body should start whith 'duplicate-command'`); } diff --git a/src/util.js b/src/util.js index 8600c56..e90c4f3 100644 --- a/src/util.js +++ b/src/util.js @@ -11,11 +11,25 @@ function dealInput (para) { return arr; }; -function matchKeyword(content, keywords) { +function matchKeyword (content, keywords) { return keywords.find(item => content.toLowerCase().includes(item)); }; +function testDuplicate(body) { + if (!body || !body.startsWith('Duplicate of')) { + return false + } + + let arr = body.split(' '); + if (arr[0] == 'Duplicate' && arr[1] == 'of') { + return true; + } else { + return false; + } +}; + module.exports = { dealInput, matchKeyword, + testDuplicate, };