From 785bdd2fb4b04554888ee8181afed0c372e24268 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:27:00 +0000 Subject: [PATCH 1/3] Refactor generate-wiki-docs.py: replace hardcoded values with dynamic config reads - MODULES: dynamically discovered via filesystem (subdirs with src/main/java) - JAVA_VERSIONS: parsed from .github/workflows/maven-build.yml matrix.java - PROJECT_VERSION: parsed from root pom.xml revision property - ARTIFACT_ID: parsed from root pom.xml artifactId (replaces hardcoded "microsphere-java") - PROJECT_TITLE: parsed from README.md title (replaces hardcoded "Microsphere Java") Co-authored-by: mercyblitz <533114+mercyblitz@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsphere-projects/microsphere-java/sessions/67ece2a6-fae8-47b1-b76a-903ba01b4dbb --- .../generate-wiki-docs.cpython-312.pyc | Bin 0 -> 39999 bytes .github/scripts/generate-wiki-docs.py | 109 +++++++++++++----- 2 files changed, 77 insertions(+), 32 deletions(-) create mode 100644 .github/scripts/__pycache__/generate-wiki-docs.cpython-312.pyc diff --git a/.github/scripts/__pycache__/generate-wiki-docs.cpython-312.pyc b/.github/scripts/__pycache__/generate-wiki-docs.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd754bdc9c7e8e7319c629a0bce866c460c1e5ca GIT binary patch literal 39999 zcmdVD3vg8Fl_q%erF<)u54~Th7gDB>gb+_51Of>VAl^_e5D1~0fP@~@%@itSrHsm3 zy_VW|k)qlwRok9Y_4KS&>*_64tRo7~c%o_V>~!r+JLV>tIFlSUf}N>}X-90ts=yny zW;`?do%_m^NFi`}J7O>B&wKy(u_q=(H8s;Z+k>6M?t79{Msu91>TUq^k%=t{#0N2JE;byTW zxOUbI*P&*7nLe{z?s+G^Z7JU_d}pP6XXD$R@|}ZkN6L3DzSRSpT^95_Bw62q~aLtsNNV!8UDfz3ES-fUSo6;jCYsSe^;*_o#$F9V2uNlX&PA$vU zOzBi|FJCi`Yn|LH)=ZhbPRhzPQ|2i3s#-Hnt`cX%nsM@!IMr*$$yegktQn_ZotAjm zLd*p(TLib3Erz>M%^YOdlJ^+4RDqT{!Oso9GR3c+El2DIwgT=Zwi0e5TLpJBy8&(! zTMc&$TLX8iZyW2mQNu7?9_pzX7*4{Y{09H6Kb1b@R;ieA^|;#O?fuU{5vH#GK5oQ+ z^SY1oxexc=>UF=-f1}^sKGHWj+QSlzBzhju)j|%qiO zMLqQZ~8c)bfJGXnmAuCJ5I^3Abiw+9f|QlgL1GxaA@?3*ejgx=7_(aa;i7|h9KjZ zN0l%i=U4y$+uq+7NND_AUqU<7+drJp(h&AZD~SL`dbqR>Ji7(oIp!KOp$aJB0cnL` zm;tP=tDg`fL!kWI&RqNf!%V0H62?ZljMb^&C$HHlK_MojmS@a_W}Worl!Vf2NF&$5 zue!7U_0zADB3+F&0gGG@x#lT#_>+)oz$S+$f6+>*cU8=tIV}@Xon}0$;I{UDf8Pk; z$~`o~jsjF=@aV@p3S93E04^|jF(-v7ElyN_y~mKq@Q-i+=7f60pU@BX`vXXs&;o$3 zW3Wdsh zZ+yyVbmddJ$Jx1aZ_K_i*FD?4uyIKj$=)_)dTh4d-9Ekj?(XT`^92vhm7h31&HXs{ z)8dbdf5v@2_Sx9yq0d714@Xa2jBLO3(9;vQIPV^tJ~qGgp`~nDk6f1xjKw*5>={aD zR!kiNZDHz63R5RQ5rk(z0e{&CK(9-_%WolpRAn_kl_nRa9!*E#38{!k`$Qqqwqja^ z)aj;UsWXuh8&h@`dQ|fB} zwNWgDK>PJUy#%2Nqa4v6v<>y%@(tHr8SNir>&J%%6DsbxZZvSUZpX)}guyqA6{Uap z+Oc4Tm}PUf-`hP5htRC>aiQkIrS6LtYdzf;e?t@hxoTrjU0v=mafDJh8X%6wCZQd{ zd`xHw=O@&h5A)jB%k^DP=&o@iqc;;e|4l4M_(9EYdNQ~yN@JBPD$LJ>>S{tyXaZ9< zp+kj`T6N1$P)f7b?dDvR$k{_>^iU0Z5wa0~{y&E^$$aU`nL9XpaPH{r(S@SL z@q4xW!EZ%eZ%%eSHd?2K=1(tfj~bhn8I`VZ>8-fKIk#bU!}~Q;`mZ(c`O=bkw{yCa z&uO`LEn+z^+3`qkiErBax%o5my|({3Gq$Ncys7>E>By$eU)v5ZHqNN#^t1Z+jdQkH z+k)<4)`kbR!@S{e+-#lf{MwBCgkpaG)WBpNQTb_K_L+TOgXWjo4f}R!f7zhhw?m(P zQWkuJNvTYWl@n6UYCh4*yQWu~kUH$MbaHO%PRNW^6S8!T38{bCgp?=PX-x1m6K9_| zaXiLglQ3OqZd7x=Tm3})R1QGTdgEwU$rX@O2FWeO0^RZ|e? zV}|p<@e@i-foz8e*%VtYnWJsyc8cqV1HiV~?~YB6-3?8L=8rCVBDO7)hX|&x&ubR0 zMUC|$OqZ<*(_5FuB9=XX=_>Ek*1Nl=cg?)@z1EnyG;A)7n9F$W<|Q?puk|wAKKIiM z|J1%urTL{wx6iZ&tX}{BA*{0c+nRvDmq81ebX=5A49dc$O<9Tvb**|>V@NB{5?VO8 z()5c*a*9xwIs;JDLgmHKTQ;J$4PNmhWM0Rp6$+hX} zXE~Zmd-3PL1LqH)PFaq*jM)r6w|+^zbnstn{@a~@voo62HQD)CUORT)+ZnNRtUJ$) zFU+$V%`a zhIf$&T21_&X0(ivS?xP+SWQZe8xPkt_ppR=sj)$q&-h~6ubhzfKXRGHn&TgC!EnbK?c1|84On+m( zX)!lyY+Povx|*evaaT6B4#t|P_P8^5u6efk{T961oOf?e-<}UVv{lA)3+LPB_szUL z_wCtlM{=vfS=C<~k@PD{|CJg^zt-Sw*~C~fzc$Nn&;7Zm#i!N#7|q}0y2#zCg8NHG zx6h~#{>7!5JLvfaLG1{lmS3@(02NUP(w{m4t{>656YLdnjs6 z_ZXZ#%`F!$y>rpqD&z})Fg&o+^W*J8_gH;P>qa*gXDSmu{lpg`zR>F6V8JDju{V4B zZh)18h&7a!$XLI3SJ2wf?d|r~0Izwvy$!+qy?$bgP^|jeJye74;ZQdhs`La4_V$hj zu8(l(!gBZeeQ6W9_X0EZ4pEx!(^Mq#MNu_-cJJ*T3w59O1h?-M7%@a`*T6xEw|WOh zk(qZl{ycjwly_HO1Q|j_rCK0MLVTIxuY=edZQ zd-hO>w?=^)1Y-6C`uk9dFq$hM#y>vXcbyv;3g7VQeg3c<%Te62iPm~`P_s}>Juuj zu&^F`u5x?S0

MLd88QZa04X)J|!;(eDaNZX*a>>UX~pA}jp6hQ07L^x=;(POmW<;3Y_7G@%Nqup?JXJ94YQmQ%(j z$%evC+or{0HGz>y%cDru-t+wzC&_b~4N$DwL$cRxg zNuz{PCrlyJ%ksu}xiDVl2@_bgmXHR-#x@#T@P=N}pA*)Qbs(J}Fhd?Q4xE%>XUH-@ z+qqRw5?a7{*`a0DfE0_I*Gp@XiF(@tMRE}Xv;|!CBpJ(ST|Ziv70UX<$9BRVvZupb zDRaecb@+@}}-$R;1^o_VxgER*c6i`~DeSuMkN0QPOf4xMlCd?2n2`p;xL%?q% z$_CtWfr`OC%ZCqvI`M=3CyJH)&s8R2H3{maCHA>$?+S#jMRzyh?->cVkAQtiNc|$D z1F5o>kg`zz_o_J+fW)q4#+kp;jHy0W9s5`%EIJ>n6YBa+3DuyV2yBU?_uSY*y!5wk za;-r(>gM;!t5tmq_NTpr{?>XW#xIf1Pb<#fGyl&d^T2)NUSqVZX{jw%wk_;F^1EkL z)$e5Is)89Jf%F^N;r}rk!*wA;?ie}8;iNW%I|YyRoA9qFS+WT=r|&mLJ-hC;#XPOy zn$y4IP9xmo;41MWbehOtwVduew!fq2OxwYpQyr`J$O&uP*)xZZpOQn%DCrhB3DfBg zIZZ+j3XAO>926)8j$}It+y3M29X%c2YU?_2v;+Aj3={`+372rL2x>cehJrPNzG06m zVIk%#Q4;}BDhZvi!4U|LgjJw6e5^oc_!Gvfql1HDEVBTKJpx;o>!89dB2Y?R2gu6| z_!Pf={)7r3O5dFCsy|^OsFrdy2u$RgK9<9bXShysh@Y0w5=opekt;>D$n_yVKP_qk zzipKxZpy4HV2>L_QA|eNtE)&(4kKt?NB&%k!^S2p{ zvoz+Y3OlM6`Xi1_lSdwH+&*}n z#)xzCu(c*?_1;%c9{AE~yL)c>+|1zx^}>OOwKisL z3|ku`)+Piwieiq+u%mL}&4{C6@<_a*{@1pK`CgHm{R1O!YnVI)XE}p$xF!$Bvx=W$ zzvu=fsO&NgakDdKE(x1U=KWD~#UqP7Zg9j5`C&u;eC0z!=`wbiZfq-&z%%QaKOAvX z#~gKGN1ae0GR|^FTF+ahvPzJJavXH-7KiFPtRE5S$TpC zz!GzB4!bu;+*=-IZAIzEZOd6qUPauV6L;hxU8o>np0ZK~fr zEnu=X3H;WN9EUC1|7A<=VY_w(>LT)$NZ@DxBV2*7R*kCy@DQK0+ZQ#65kj_jCYS)B zN8x#exJhD}%3SrZEAutT!LN|7LR6;{GqM_1iyBKMqQ)c=(t`hb~c+6Vp90`B!pb`e3JW9 z3EtO*qdYeMHQH6MvZi1h&}zEsk%?|>{tJT}_KyrhSQ${Z@rTZI9c>7Jg-$9lvhtBg z!v(dMyBjYD4J|jp+GyC*8dRH1K`mH0twCeU6|kbnlOtAP(9&|HRbup9X$@w0z1@vo zFMRuD-~QI1mOO)*ExsYy6K}zs7A&G8!`Ea#=_}}Hp_Nkh72c8ddXwyfw_rv^MTNV& zk^HwP{##mudiVBDla?dVyV;t^$XTTzlIj#DMH zM6jfCM+zZtrg4!e&Yr*s=nqj9j3dk%!=HZ~d;y{WY;l_%3$`U!V1{g8XpfjZlkJbq zg`xy)LBHsVnCrTIr3;z(8aMfqQQe(s5y+m!$$ z-m-w~Hl*|f@2FWUm+GrJ_Fy{lyCjG&XbX_k|xrAS(`6-=#&qj=OVxs4C%&9=wT<@FlUFz@DKnxoP5;gu|sUW$hMXlI&P`gfC^S#s-t=QIv3mFJ)~O zVjAUiLKy9ighvQd)>cM_50$5P}k@Ab^3KQtS5(UQM0xh92bCAL!``=BxmKdfETKqBeda{wJBZD`!f3 z#~9De$BzXhKYq;d5|F`BLt(tIn11u(#ijIHAP46aAeI%I1K~#wtg5C+<#Bg8{T8pt zvjo#!kd^K<a;U?_;r#)g(scF zA*rY>=QUw~B19Ug18b0DKneiFHvw760L}VUkJ4+VfFes6aIcDlPiz8Ba*u)w?hTnH z^pJU|z+Kk+sU@Zfb4m`%(w@u-n@&Z$mea773G;B{Iw`CxQe+}U-a094DJj%!*1C1F zC*wmNWTBQoiu2O(pRi&Zs=uY;4u{OF<;HeEd&fG^P?78f`E8vPPB~ukHwi!T$g)ln zN=;;fzi$=lLAAHCu3HR8Z<>LsWNP^h?UkY379fo#;eljM@&&Yf2YHgr$Rmd)e`RP1 z*=|645pa+j(ySK~>NhWgJA2BAdXpu|Z)`T30Xd5_-(Q-OBjn)lH&7?1P5!dVfhpAa zE!6nsBaEYs1lfTGIfsxU>6>r{8f9M=k}Nhi2w0bA#)KzVMR!!_tFSI8FFD#uBV z2GKkP3Wk`-4rO!pQ1;8~DPW?Ul>SRM>+(_{JU5gJNpJ4UbA4GK3ni{M2lG=(%!j

zL!hFp5`7fd;#%Y;Ynapb6Agiy(gs;x8HJ9bftuOfv-oz&L2 zs;*=>4V|4B*N!n_Oi5~51gU9RaMy_xsi`~V7+_MJ1}FZMO=;?(xcXJc+`b`N_@+e_2v-^s&5vDMs z@)b08Um<-u^3~EykW{Z;p;SSC3i4p#cq2#Tphq1vi+gyX%|T0Q4+I@AYISi(kgA^t z$04{0wNO;`1bsVES5MTaOV!m2k7zk7;zANpElE)m1}O34 zpe4?>X|Syn#38yI3Z98@hs?TRSj~}A~E>ds?CkQzcImnOnDtlJ4 zIm8{@IF&7I)!(7F5IODS2pg1@3>J=*;JDl5Op^019NNwf3P63W zhE>o&_Y1;f?mAV;NV8Pn8YN7^-c~#aWD>IwM#f6@>QM$NGbMK%B~2IxSTWm#{)#U! z=EJchoAd(a5|rUEB8mi?W_H3No>l4*)OizGBA+Tb^%7ah_a0H9Lg7}4@@(qcL{<`( z#a0TvoiLC$vgQ)1ezDhuCJJX{{RFkEgwd-%Md7q9DV*-1=5t>lWi=>9e}PuuBWSfc z*JG=Fre=QsVs+HI87D!ErAxi>oZPvqvsd50K6MbMn~bHuwJ`R=SXNm$t8Ae2t&S+<8MpU&dGMc%a__#tcpqX6H|K zLH^2XU5J@e5H0Y=3Yx+NO-lzO1uc>6-IK?_)v)KyS!b>DY$U6KM8}R5qGMup@0i}f zyRP#C+(WZJURuptiXcKJp|RsD3u7swq9_+A)$5Jl9e;P6x0mr1O;P=pxXV3ld~7t| z&7aQaot6BCZBgU)xT{q0oN3|98l%R|aaX~V5mkgHb^dIA+^~(`ap;*w?Z}us{1y1` zIVj=@I>TNTwwEoGMeLQ6hf$;li|FBQ`WdSZ~pKD^9BgWpXlv;_LeYeDzqV|n2vMu<(nhfO_RqS zyNc#7MO+)7G6r4F6baGqwoJEtuN9u=+9x^1^VdHd{9y2h!;6=20xg!aFPyV4lG8qQ z@XHeShgUzi%2zet+jn0dDLE7?ITkKC7AZL~b^MXDd|@QEVQ+ZD-uupn8#?0dnxABT zl)3m;#N9Y!eUz2GY)4_g&0$<+3&jyle3#3mPKMO_N6-=Xztgjp5wJ zrRsYd?|(b`tqXkjVB}jv;e$i`=HW>02*&%-mUeVbEVnM4TesL7&E51xxd;U~w%R${ z$(NkuPxnP!>}1!YZTn}sVy^12t9nrtad~5|O<~ujsB7~Vj>)bsbMr}f&zBwHyDmm@ zFCmY3Q3fd#+;kO&dm|$mY8!_*tzT8{)lsL%y}T}JP>gn zLho&9`TW>t$L=>pwjBJm`|RRdUo`%k?f={MU+rA5|0MUL+<%hKyU+55Vz>mU8y62Q zU5aG4PaeaUz2tq{WM@3Pbh7ikWAVJo$>EP*kfDcKB|M>wbQ?uEHezNdF?F0LpvZbd3PXxmJ8XtPt{Zw3Ru}yAk{=Nm z!UI2p{mlzRxWhH2y;ruY|ToN{M?G_f^ z9$LKhvK&WCbr%RL?h?h!6jaF+Mr^_?Mil9d4DlmjlspGmf$N!EN=3ftUs3Vo{5dV0 z{{}D8ar`G{$IKqyS;3njb^X#_7PEW9cJJbrh<(#j#;GfXPEu~s+&i=HEHu9VZ73S$ zmwZ_GLE*y5AC^pI#&ZhiZp_|TD0_c+%8d2HlFJu#gv}jsi|b2!;rm5X8S$L5sSF5? z3O%vHhHzm+q_A-+1Ck@Cls(R?S{RJvHBEKK%e;%b!(}_C4n!>_@rsR$Z-gth(uX@< zQoU#b-kCaZ=lBzY?QZ6D=FF{!hLYuK)NI*{!~HW&P}6TwWTnzXLh~4gh*}!-XD7hl z6wPC#7a64!naEQB+S#hKlNKV&bOtgYWKyOx_P^=Vro;e;f)1PMsKP5BRufV~n5F%( zGWn5T`j|LzF`!JnWG=6mIs>Vd3Hg%LOgc*h;OL~U6V#2;#ebnr>3hhKPOT(~P-TSq zDm}c$7(l^kAPw&v^)m$=axdTus!eOev;0`$W`2WuSYN9x%m87dRS#DkP>?8UnDAA=CA-#*k%B2uM$zgLfYTe+7_IE|@n07|t&zLJ(O#=Zl0*$+ zq{RfBdyTwv)5l+pIfnDsN*^GGiSQsz-U|Gg7W&!z6)9F?-1I3@$0dCXg+u&GJ(NBV zg-`qq@+evt#)^|M0&c0}7?7;MDIiGG*Q_L@L*JIB_U)Z~5NhdTr}S3J`4wiMQZ6m| zE7xTrBb4DU10*OM;A9-s4H%jT-E=vCOPff~W|LMy|Ib`xzuF)%1a__y$$O2kSYvi*5Fs5vQl-^6;*kNA0>XHm)0^4zQh`GOtg? zoon<}!wO1t(<`KCT(?HAHAB~^*X9-VYFhEN<;MzZ;8o_{8YOI9w;d^K${KmBJA2q| z7#&i}TlHXN+x`lD{dzr_7RSw~x!Y^he#al72X_7u@@QT+k6kG-(zX&!S{%w zPD>ZbJ1)7G=+o? zqrQK<)j0jQt&1_z!--t~HGA>3FhvS9zqGerWiP)*Kc>JHT4Y%T;`qd<{hw>3J)AxT zp!&!w;LMbgXH<7e0QtHKQbPK?fsMR?SLm$`?0m6gc?M0`aLQkG zCufa%bcJka@d_I7&c;`n$7|$w?6umJ9(s?jScgxn_&S-2an`6qO3$$^Y58x;F?TTH zPX(J&l*r{{Tq)L`$%M3cmOrU|QqNJB3mPUtv)6kD2PB%kUianas>?yE*V`o+&=q`w znO^S+QLZk2TfE-Wbf91S(zrwJU{p0XFZuR@dg8IwuemV^kG(uxWupD0a}H2mtwAS|zvAu-bHmMv)en}hiw(MN7a z$bA}SjYj?MP|zA`uB)qSmfWCTiaAP}r5L(@_oF{?%hf_rp)*3~OSZoKqD2M^b*F6p z`#{i1pIw65yzJ{2j^kChabOT(XZ<*V5OfLA$nq&eo?|P?q7Vr9qAt z%o38xw)l`TXl-do{j>=Y0D5G|v$gV_ptD~3fNd+;n-Zl~CZC}HO#e+9@Uwo=y5YX# zUGAF8!O=P;B8*U9_6X+Oaoo=jwH`94A!P|;y2I!*vawO`KJ62;xNy)H2+&|-EXg|c zYfPxTifdxpIzg!AV?FL`qcFT!A2iXZbi#T(7YOR16oOy(bJeb37QEX|bh=OZuEOLw zW_Qp*F;9p_=f%CIqV4g5(aXo!3 z8O5^9F& zm`#2nqy?KHPZ@QEDc-zms_kyqbk_sR)*tmPl>Macqq<1Rrlrl{lC2TT)~_^(^E<(4 z-*+}`R*3^5%{$R(zn^=841)# zv0k9o(ZEQZ+=dj>ostG4sjU%~z3|-o8W5=Q)O$U}f;JdzVf5bY58$X)&?m@UMft3t zEk;DYs3=CXkD&9FFt?pL(|Mo`dSIRH;s^u~1`8h}V?IvQ8w0BbVp~~V>|DpG(@q)saQcue23y_dWXlw^ME8i_GEE? zOW{2fWTHcaJ%hbhe1nOME4?f(XGrJ;gCIjJ2atp<5s0ySWP3K;uPNofB!9i+m&leR z!*ZOSUY3O(n3i&ZS)BfB2^VF-N;fhn#|bsCK9VrP5mm?hBrPLEmHLPpS`K*}ld#Br zjo7~+S+fob0FX6XGABDAB6dLOh>Tvu>|4Ti2${FR!iLuP-J|awo!LCoKQ}x(%x72e z_6<>Owe0VJRti$WcKm_3*7V)3ce`eeESO*!vXOVxMYZ*^XV-!!R=zo0zL|$r9E5F+ zYPZQ@#};gR9h)~N;T7&sQ!?lFLcH#cZMr>@)ga{LEE+a@$N(S zy1ppn&t8h19SENt;LqIPZwx|7#WAeYq*q^}xpFDE6Qlv>O0 z`J@vh`RB*%wPAa0RJ&33$&PAs<#(yA20L`@9zg3!s&|NbZ%epx3tzF7&)ya_Y?nh$ zL16#@Aa%3d6V-ZC^GX>Gcz8`^@MXh5vO=*Ggur82&FOEhb%9B?X{<&KwDeR%tW z+tA0fSIr!hGs%y-YUTIbD6*0olO1(c%kPeduF9{BNVaT8y_QQPIGiaUCAk+T0&lO5 zYHQL4?2BsmrwN$Ji)ssG|B|TIExq&hLs4y~{2^i&X?`qSe_3E<@S)iY2@y77|>i(Nns&F55)&-L06Q`!y zA3N(81JJyjYX8#anA!5Z@%g4dy-n7H+viWu1Q$9mBWAQPX%usmhaKfHhd1o-E;ixL z634cw{c(%^?$PO^^G)-&K78kccjku{w=8KFZ!MkT^LIS7>;%jkn_(8om?>axnv9s@ z?uxGj+HB9E*q%4Sd*1jhQDM&*wcErSik?EV$}MHf=hsCo^>P`GD71wODq;nj!v&k4 zF;=T*CL`|5N7EwCs!u8wug2>4hU@o6ylwaQMZ5=Oklwbq;nUiWYZr@`dik;)QP)m6 zK$yhR9M~Rp$un;uCsx)NhGMY`ipAn|Uok^4^&gk)ytg6Nd^FsAG*Z%)oMEZ6O2|F8 zIF?%*$*qm&6@O^?z_Rf6Qigc11mDnc|0G{^Fq(Hr4m|Cf_JjoX~Jj~ieXtEJX-6=z% z;QE=>04f14CWqOQ3+ETUNkR?4y3z-5}GF=Sqiad3HlsuJ_ ziffjds?CU|-D`EW}QLZ9fvks|wFzL=Z%6!ds2K@Rnk`{s*x`*k6c_Y>E=UH{TK?ujo`bc zJvA@a19gZ?EzW?PB7KXUp$v?k>lL6arLP0T&k`OeU1z_?e3B!}hEV4BsNHNX3jU?kPQcC!qzT-g#rqxaBfC z<(1|{`Z2FqF;^>JVeG3`q}cEZDXLebsCk7HE43Te>8CZId8Ky4AC^b$ikh#)Ya3q= zud#LM@N?2^F60UI!AeD*K%Ck`xTelsgTsWrw>?Rzf+#=;y1)S^zF~VRTS*iv*x&FC zf{P7irg+~XjKX~v98zMEmATXKqKM1C1}jQp<;sU@1(p=qsE7Y8ur>W|nPrlCsMg(k z1^3N}muCw6a)s4iFEIUOc6}<-KQEP^e@|;}UR)+w2xaN&cXg_{l+I4ePtwJ30v2iN@=_9MoL) zdRKHC%@D%n&kEqIWm@SpBUnI&LFaMAf`u(rUy6CC=Z2QS-k~dOZ)>np;fJN`Bq`QE zram$uqe*6|?ehbl9hemD*dSlc4d3{v7D3A&zW+Z+FMoDNe))@0qIH%(y!-k8b?+`N zU-@%*nnjquNVy9Q&52cB}m1-1Uni_jaQiohpe#Y^NRMQDFz!wPFXE z+>Wm1w>+uX9;?_LuGk%^*z=4j&=rRbrBmja^YZpMFn?rzH=n(lQvy~)PTBhxVMN+h z0$!Mr3_d$@=%%Fyj=F_fY@2P4d2bkZCzV&unC6>iZE;J^jDPxg%u*h++7)SH-+6zF?Va&-5PQ4 zxiqjdD=!W@*&(WR%S75$JkY4Q{u6KLlUE?V`Z?Ah+7>{8X~PskF8V> zy2XBHg{ICLG;>Pbk_TsTiJK1lx(s8X+KN&bJc@=Z2F$jV~0d*{i+8wGYI=m zV=6s;XY-o7o|HP?nT7Uz+WTf!(ADN(!wR~(=QK#yE4^HjrWUjVhI?=IUz2Xr&GLFL z5cz$vhFp)=D^k{$RJtpu{st5j_n*)Y-0$I}&`;cd!FRA+A)V;TM$|Kfx|9f~U!@RE zCqF;;*||x{0N{V63?O>Gz^MQU0xc*ml6p}9tRY_#xNmLRRx4`ie0Vat-MG0uu>S}X##QP=Hlt}L z?g!7iJ)Tz-%c~9N)#9YB!kZ3|5&!uci;l(4#a&T4C!d-|N}O(L%(?sChTg4-nLZZi1Lbdib2gmmy?G$6iZbm4;HXLk3n&Ch_oI zhI}YRvwZjh? zzwr}{NwZG55nH)(J|#mk{rQNd-akbGOg+03N(PR6h&FXcR8tv`S6nZ7?q?Sxj{Q^m z$I|t}6Vns(Z$xcXIK%$9yz(d2A5||_N6I&oRN;sUSDZ|>&s5E4;}|?K4_$}9(or^FX(;<;Bh?VXAxjRg%@*YaXoB((+M+e{*{=n8K?*RZnO3YSm5=^o z^(P9L2zU6U#wYrpYQ=hk7GTnGe^^6GN@HqWS<{a- zNH0+bLV5z4RgX+52ufMXiS1-0;p9H?AXYsCU2{AM<{!p2&Lr`AIfXE@o{*j75}y>x^9;6)$$lyNdi4YQkrJe#wZcC+Kg>-lTNDJ&pRm%+c*LVhjxbvs zvZCH4E5;woqWFXqnE{= zopO@oCG{>(skee#WN1vqQEbK9_=~N?*j5EGSQx_%!bn!9Vwv$=$quD?j9Gm#H6%Ay z*{WqD=HeJ^fxgM8@bAvj8vd6>e^1S^pj+9n2#mCqx}$Wg0C&B%qh3KnT^)GsH%9|O zb=?Sv4sex%`;QAgZqN_DzQ71KE^KdP@|;a>d;D&hDcp=(;YB6-)&|PM<5822rNA&w zXs^RgU@)_;PKr`T^hq%16x@_Dr1Jnl0|^HPP;ju={RXmHDWQ-XHo}okxGV{v44ZM9 z!R<~~y%}^)Fyp|;D8voHf;0qMZyz_}_q$P`M6Ct&f+0{u&l0028FMQ*-9#w}oNm%K zUW?O>6*~<@aTNrmcn9DV(x%_PZQM0MMOqj}PUP8IpsL%0C_=z$a{E)1 zk}!$J5fR5P-ol7@UN@>v;RwqaCM3HRLa-6KOLdGK7f+7k0%7 z!%*)H9}(YVb(Rs-c*UJE5he-U7)Mtm5;s=Z;d-)#J2m~dHBph`rm#1cu zqs#j(qt#_Bn;4y0j-K~83-%tX{*u%dYk2Ff711n?n7JryE{d2-CflDlb7RiRu(NXV zXxyGXS2$ZZdH74M@y^Am<9y)`-bB3b$66zdNzQlAALC7=t15k;pFhf*NNpD1?;QjW z*ip66{j=>6`>x5u@R~aCXH7G~_xIq=BEDkxFZ%vP^*`}IJ&V_D{&i93LgP~J=hr{Get$z`+o3-{$rp9< zhJ3gQbJ644Mt<}DaOc%%?KR%wUdVYM7Is|)3!ggucaOY#WX7~`=AqV0wWhtFw>9Q% z4}0680!N#`qOf7Zl$p=o5O-BQWipIK(D*9^7e7+iG<6g@w6W67;nK}~Nz+mjU$lLy z>#=ADQ&3kszf>H_+cVYq*q%Mpzu;UPi`ut?#cJJfuQ8rwr(vJBK;sn#N39#4SaRme zrjJh_{>q9%mNh8(w+`x$!!yB|!G&7hR3FtgU^raZ3pPibyI_gZXuWgg?zQP_cL%2j z=bIPCBbkj$P4{!7#!i%?EBWGN++e(`pVrSk<6`2{`+r4jil?TE8|a|l5?^}4Q|S*Ovs5C+IV^IAV!F{G~a8!w~;p;jA{=N zpmfc97vB1yp3nDyadddGh2MULHxY;WiP`eIr=2RM_^|5hA~YTL8Lb{;eO$9bYxtox6)oj%>u-m(8E84COhicEwx_fN<NB!~D%qEX}@(3^nS|BBweCPzWl!YUx3G~qH8 zn9F{6oj_(=x<@+p<-D{ZDq`^?R#O#hZK{#ypF?SE$~Ad<;) z+#Q=9yL)^3_B{9D*au^zXuZgNI`;9{r?)@8eUJO=v7e9q_3fYE{^IS(o^M4O-i(x< zkJv6uS};BBP8n0qpItbxcp#G1G--XBp;tMdx(uq!r#Ts_rl$@)9Qyn!hcOq;AB~ti zlln(l6$?irS&fs{M~=#cZb*nGZI3d^FSBvd{3xq@p(T>FY0^rC6wavUOtYqCwN6)! z`T|Gbyv8$|!LCNQi^k{{Q=(AA7+CFJ|;w+xoJl8zi%$L+JsXsS< zhHGb=c_!`JVSU_8Jnce78quEd0dR5j_*KSqD)4l2vRo>T!RYj^@UomjLZZ)d%zhdA#&AX{m zWk0>DDOBY>ZCCBpsEVE*$k?l*A9WVodb29$Y0*)Y%DQ|>&1fxC!3UcBxYjbc|GS6Y VJv4phd*>eFu#bk(76{z0{}%vrxWWJc literal 0 HcmV?d00001 diff --git a/.github/scripts/generate-wiki-docs.py b/.github/scripts/generate-wiki-docs.py index c8d9c56c2..bf0cfc2be 100755 --- a/.github/scripts/generate-wiki-docs.py +++ b/.github/scripts/generate-wiki-docs.py @@ -27,22 +27,67 @@ PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -MODULES = [ - "microsphere-java-annotations", - "microsphere-java-core", - "microsphere-jdk-tools", - "microsphere-lang-model", - "microsphere-annotation-processor", - "microsphere-java-test", -] - -JAVA_VERSIONS = ["8", "11", "17", "21", "25"] - -PROJECT_VERSION = "0.1.10-SNAPSHOT" - # Source directory path suffix SRC_MAIN_JAVA = os.path.join("src", "main", "java") + +def _discover_modules(project_root): + """Discover module directories that contain Java sources.""" + modules = [] + for entry in sorted(os.listdir(project_root)): + entry_path = os.path.join(project_root, entry) + if os.path.isdir(entry_path) and os.path.isdir(os.path.join(entry_path, SRC_MAIN_JAVA)): + modules.append(entry) + return modules + + +def _read_java_versions(project_root): + """Read Java versions from the CI workflow matrix configuration.""" + workflow_path = os.path.join(project_root, '.github', 'workflows', 'maven-build.yml') + with open(workflow_path, 'r', encoding='utf-8') as f: + content = f.read() + match = re.search(r'matrix:\s*\n\s*java:\s*\[([^\]]+)\]', content) + if match: + return [v.strip().strip("'\"") for v in match.group(1).split(',')] + return [] + + +def _read_pom_revision(project_root): + """Read the 'revision' property from the root pom.xml.""" + pom_path = os.path.join(project_root, 'pom.xml') + with open(pom_path, 'r', encoding='utf-8') as f: + content = f.read() + match = re.search(r'([^<]+)', content) + return match.group(1).strip() if match else "" + + +def _read_pom_artifact_id(project_root): + """Read the project artifactId from the root pom.xml (outside the block).""" + pom_path = os.path.join(project_root, 'pom.xml') + with open(pom_path, 'r', encoding='utf-8') as f: + content = f.read() + no_parent = re.sub(r'.*?', '', content, flags=re.DOTALL) + match = re.search(r'([^<]+)', no_parent) + return match.group(1).strip() if match else "" + + +def _read_readme_title(project_root): + """Read the top-level heading from README.md.""" + readme_path = os.path.join(project_root, 'README.md') + with open(readme_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if line.startswith('# '): + return line[2:].strip() + return "" + + +MODULES = _discover_modules(PROJECT_ROOT) +JAVA_VERSIONS = _read_java_versions(PROJECT_ROOT) +PROJECT_VERSION = _read_pom_revision(PROJECT_ROOT) +ARTIFACT_ID = _read_pom_artifact_id(PROJECT_ROOT) +PROJECT_TITLE = _read_readme_title(PROJECT_ROOT) + # Regex patterns CLASS_DECL_RE = re.compile( r'^(?:public\s+)?(?:abstract\s+)?(?:final\s+)?' @@ -417,7 +462,7 @@ def generate_wiki_page(component): # Source link lines.append(f"> **Source:** [`{component.source_path}`]" - f"(https://github.com/microsphere-projects/microsphere-java/blob/main/{component.source_path})") + f"(https://github.com/microsphere-projects/{ARTIFACT_ID}/blob/main/{component.source_path})") lines.append("") # ── Overview ── @@ -515,12 +560,12 @@ def generate_wiki_page(component): lines.append("") lines.append(" io.github.microsphere-projects") lines.append(f" {component.module}") - lines.append(f" ${{microsphere-java.version}}") + lines.append(f" ${{{ARTIFACT_ID}.version}}") lines.append("") lines.append("```") lines.append("") - lines.append("> **Tip:** Use the BOM (`microsphere-java-dependencies`) for consistent version management. " - "See the [Getting Started](https://github.com/microsphere-projects/microsphere-java#getting-started) guide.") + lines.append(f"> **Tip:** Use the BOM (`{ARTIFACT_ID}-dependencies`) for consistent version management. " + f"See the [Getting Started](https://github.com/microsphere-projects/{ARTIFACT_ID}#getting-started) guide.") lines.append("") # ── Import ── @@ -585,7 +630,7 @@ def generate_wiki_page(component): lines.append("---") lines.append("") lines.append(f"*This documentation was auto-generated from the source code of " - f"[microsphere-java](https://github.com/microsphere-projects/microsphere-java).*") + f"[{ARTIFACT_ID}](https://github.com/microsphere-projects/{ARTIFACT_ID}).*") lines.append("") return '\n'.join(lines) @@ -594,18 +639,18 @@ def generate_wiki_page(component): def generate_home_page(components_by_module): """Generate the Home (index) wiki page.""" lines = [] - lines.append("# Microsphere Java - API Documentation") + lines.append(f"# {PROJECT_TITLE} - API Documentation") lines.append("") - lines.append("Welcome to the **Microsphere Java** wiki! This documentation is auto-generated " - "from the project source code and provides detailed information about each Java component.") + lines.append(f"Welcome to the **{PROJECT_TITLE}** wiki! This documentation is auto-generated " + f"from the project source code and provides detailed information about each Java component.") lines.append("") lines.append("## Project Information") lines.append("") lines.append(f"- **Current Version:** `{PROJECT_VERSION}`") lines.append(f"- **Java Compatibility:** {', '.join('Java ' + v for v in JAVA_VERSIONS)}") lines.append("- **License:** Apache License 2.0") - lines.append(f"- **Repository:** [microsphere-projects/microsphere-java]" - f"(https://github.com/microsphere-projects/microsphere-java)") + lines.append(f"- **Repository:** [microsphere-projects/{ARTIFACT_ID}]" + f"(https://github.com/microsphere-projects/{ARTIFACT_ID})") lines.append("") # Table of Contents by module @@ -643,16 +688,16 @@ def generate_home_page(components_by_module): # Quick links lines.append("## Quick Links") lines.append("") - lines.append("- [Getting Started](https://github.com/microsphere-projects/microsphere-java#getting-started)") - lines.append("- [Building from Source](https://github.com/microsphere-projects/microsphere-java#building-from-source)") - lines.append("- [Contributing](https://github.com/microsphere-projects/microsphere-java#contributing)") + lines.append(f"- [Getting Started](https://github.com/microsphere-projects/{ARTIFACT_ID}#getting-started)") + lines.append(f"- [Building from Source](https://github.com/microsphere-projects/{ARTIFACT_ID}#building-from-source)") + lines.append(f"- [Contributing](https://github.com/microsphere-projects/{ARTIFACT_ID}#contributing)") lines.append("- [JavaDoc](https://javadoc.io/doc/io.github.microsphere-projects)") lines.append("") lines.append("---") lines.append("") - lines.append("*This wiki is auto-generated from the source code of " - "[microsphere-java](https://github.com/microsphere-projects/microsphere-java). " - "To update, trigger the `wiki-publish` workflow.*") + lines.append(f"*This wiki is auto-generated from the source code of " + f"[{ARTIFACT_ID}](https://github.com/microsphere-projects/{ARTIFACT_ID}). " + f"To update, trigger the `wiki-publish` workflow.*") lines.append("") return '\n'.join(lines) @@ -696,7 +741,7 @@ def discover_java_files(project_root, modules): def main(): - parser = argparse.ArgumentParser(description="Generate wiki documentation for microsphere-java") + parser = argparse.ArgumentParser(description=f"Generate wiki documentation for {ARTIFACT_ID}") parser.add_argument( "--output", "-o", default=os.path.join(PROJECT_ROOT, "wiki"), @@ -705,14 +750,14 @@ def main(): parser.add_argument( "--project-root", default=PROJECT_ROOT, - help="Root directory of the microsphere-java project", + help=f"Root directory of the {ARTIFACT_ID} project", ) args = parser.parse_args() project_root = args.project_root output_dir = args.output - print(f"Microsphere Java Wiki Documentation Generator") + print(f"{PROJECT_TITLE} Wiki Documentation Generator") print(f" Project root: {project_root}") print(f" Output dir: {output_dir}") print() From b97f7d2813b9950706ebd9796e8f4be67e19c02b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:27:31 +0000 Subject: [PATCH 2/3] Remove __pycache__ from tracking and add to .gitignore Co-authored-by: mercyblitz <533114+mercyblitz@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsphere-projects/microsphere-java/sessions/67ece2a6-fae8-47b1-b76a-903ba01b4dbb --- .../generate-wiki-docs.cpython-312.pyc | Bin 39999 -> 0 bytes .gitignore | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 .github/scripts/__pycache__/generate-wiki-docs.cpython-312.pyc diff --git a/.github/scripts/__pycache__/generate-wiki-docs.cpython-312.pyc b/.github/scripts/__pycache__/generate-wiki-docs.cpython-312.pyc deleted file mode 100644 index fd754bdc9c7e8e7319c629a0bce866c460c1e5ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39999 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 VJv4phd*>eFu#bk(76{z0{}%vrxWWJc diff --git a/.gitignore b/.gitignore index 89351eda5..6ac426294 100644 --- a/.gitignore +++ b/.gitignore @@ -71,4 +71,5 @@ build.txt # Wiki generated output wiki/ -wiki-output/ \ No newline at end of file +wiki-output/ +__pycache__/ From 9d46e84eb573d6dc2c6caa6875e3f75286d1359d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:29:13 +0000 Subject: [PATCH 3/3] Add warning messages when config values cannot be parsed Co-authored-by: mercyblitz <533114+mercyblitz@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsphere-projects/microsphere-java/sessions/67ece2a6-fae8-47b1-b76a-903ba01b4dbb --- .github/scripts/generate-wiki-docs.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/scripts/generate-wiki-docs.py b/.github/scripts/generate-wiki-docs.py index bf0cfc2be..b5e659635 100755 --- a/.github/scripts/generate-wiki-docs.py +++ b/.github/scripts/generate-wiki-docs.py @@ -49,6 +49,7 @@ def _read_java_versions(project_root): match = re.search(r'matrix:\s*\n\s*java:\s*\[([^\]]+)\]', content) if match: return [v.strip().strip("'\"") for v in match.group(1).split(',')] + print("WARNING: Could not parse Java versions from matrix in maven-build.yml", file=sys.stderr) return [] @@ -58,7 +59,10 @@ def _read_pom_revision(project_root): with open(pom_path, 'r', encoding='utf-8') as f: content = f.read() match = re.search(r'([^<]+)', content) - return match.group(1).strip() if match else "" + if match: + return match.group(1).strip() + print("WARNING: Could not find property in pom.xml", file=sys.stderr) + return "" def _read_pom_artifact_id(project_root): @@ -68,7 +72,10 @@ def _read_pom_artifact_id(project_root): content = f.read() no_parent = re.sub(r'.*?', '', content, flags=re.DOTALL) match = re.search(r'([^<]+)', no_parent) - return match.group(1).strip() if match else "" + if match: + return match.group(1).strip() + print("WARNING: Could not find in pom.xml", file=sys.stderr) + return "" def _read_readme_title(project_root): @@ -79,6 +86,7 @@ def _read_readme_title(project_root): line = line.strip() if line.startswith('# '): return line[2:].strip() + print("WARNING: Could not find a title heading in README.md", file=sys.stderr) return ""