From fe5f23d3ff2feb0b1de6f525e68b95d4af5eddc0 Mon Sep 17 00:00:00 2001 From: Build Server Date: Mon, 13 Jan 2025 19:22:26 +0000 Subject: [PATCH] Deployed 15169ebf to develop with MkDocs 1.6.1 and mike 2.1.3 --- develop/404.html | 23 + develop/api/index.html | 23 + .../issue-provider/tutorials/file-linking.png | Bin 0 -> 30987 bytes .../contributing/how-to-build/index.html | 23 + .../contributing/how-to-contribute/index.html | 23 + .../contributing/how-to-release/index.html | 23 + develop/documentation/extending/index.html | 23 + .../issue-provider/categories/index.html | 23 + .../issue-provider/helper/index.html | 115 +- .../issue-provider/overview/index.html | 23 + .../tutorials/file-linking/index.html | 5860 +++++++++++++++++ .../tutorials/logfile-format/index.html | 23 + .../tutorials/rule-url-resolving/index.html | 25 +- .../tutorials/settings/index.html | 23 + .../tutorials/simple/index.html | 23 + .../pull-request-system/categories/index.html | 23 + .../pull-request-system/overview/index.html | 23 + .../report-format/categories/index.html | 23 + .../report-format/overview/index.html | 23 + .../extending/testing/index.html | 23 + develop/documentation/features/index.html | 23 + .../how-cake-issues-works/index.html | 23 + .../issue-providers/docfx/examples/index.html | 23 + .../issue-providers/docfx/features/index.html | 23 + .../issue-providers/docfx/index.html | 23 + .../eslint/features/index.html | 23 + .../issue-providers/eslint/index.html | 23 + .../gitrepository/examples/index.html | 23 + .../gitrepository/features/index.html | 23 + .../issue-providers/gitrepository/index.html | 23 + .../BinaryFileNotTrackedByLfs/index.html | 23 + .../rules/FilePathTooLong/index.html | 23 + .../gitrepository/rules/index.html | 23 + .../documentation/issue-providers/index.html | 23 + .../inspectcode/examples/index.html | 23 + .../inspectcode/features/index.html | 23 + .../issue-providers/inspectcode/index.html | 23 + .../markdownlint/examples/index.html | 23 + .../markdownlint/features/index.html | 23 + .../issue-providers/markdownlint/index.html | 23 + .../msbuild/examples/index.html | 23 + .../examples/read-binary-log/index.html | 23 + .../use-custom-url-resolver/index.html | 23 + .../msbuild/features/index.html | 23 + .../issue-providers/msbuild/index.html | 23 + .../issue-providers/sarif/features/index.html | 23 + .../issue-providers/sarif/index.html | 23 + .../issue-providers/tap/features/index.html | 23 + .../issue-providers/tap/index.html | 23 + .../terraform/features/index.html | 23 + .../issue-providers/terraform/index.html | 23 + develop/documentation/overview/index.html | 23 + .../github-pullrequest-integration/index.html | 23 + .../appveyor/examples/index.html | 23 + .../examples/write-messages/index.html | 23 + .../appveyor/features/index.html | 23 + .../pull-request-systems/appveyor/index.html | 23 + .../examples/azure-pipelines/index.html | 23 + .../azure-devops/examples/index.html | 23 + .../examples/pullrequest-id/index.html | 23 + .../repository-information/index.html | 23 + .../azure-devops/features/index.html | 23 + .../azure-devops/index.html | 23 + .../azure-devops/setup/index.html | 23 + .../github-actions/examples/index.html | 23 + .../examples/write-annotations/index.html | 23 + .../github-actions/features/index.html | 23 + .../github-actions/index.html | 23 + .../pull-request-systems/index.html | 23 + .../recipe/configuration/index.html | 23 + develop/documentation/recipe/demos/index.html | 23 + develop/documentation/recipe/index.html | 23 + .../recipe/supported-tools/index.html | 23 + develop/documentation/recipe/tasks/index.html | 23 + .../console/examples/index.html | 23 + .../console/features/index.html | 23 + .../report-formats/console/index.html | 23 + .../examples/custom-template/index.html | 23 + .../examples/default-template/index.html | 23 + .../generic/examples/index.html | 23 + .../generic/features/index.html | 23 + .../report-formats/generic/index.html | 23 + .../templates/htmldatatable/index.html | 23 + .../templates/htmldiagnostic/index.html | 23 + .../templates/htmldxdatagrid/index.html | 23 + .../generic/templates/index.html | 23 + .../documentation/report-formats/index.html | 23 + .../report-formats/sarif/examples/index.html | 23 + .../report-formats/sarif/features/index.html | 23 + .../report-formats/sarif/index.html | 23 + .../resources/blog-posts/index.html | 23 + .../resources/presentations/index.html | 23 + .../documentation/supported-tools/index.html | 23 + .../breaking-builds/index.html | 23 + .../creating-issues/index.html | 23 + .../creating-reports/index.html | 23 + .../usage/creating-reports/index.html | 23 + develop/documentation/usage/index.html | 23 + .../reading-issues/file-linking/index.html | 23 + .../usage/reading-issues/index.html | 23 + .../reading-issues/reading-issues/index.html | 23 + .../reading-issues/run-information/index.html | 23 + develop/documentation/usage/recipe/index.html | 23 + .../index.html | 23 + .../using-cake-issues-recipe/index.html | 23 + .../custom-issue-filter/index.html | 23 + .../index.html | 23 + .../report-issues-to-pull-requests/index.html | 23 + develop/index.html | 23 + .../22/cake-issues-v090-released/index.html | 23 + .../19/cake-issues-v091-released/index.html | 23 + .../index.html | 23 + .../09/27/new-github-actions-addin/index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../28/cake-issues-v100-released/index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../index.html | 23 + .../10/cake-issues-v200-released/index.html | 23 + .../22/cake-issues-v300-released/index.html | 23 + .../index.html | 23 + .../23/cake-issues-v400-released/index.html | 23 + .../alignment-of-addin-lifecycles/index.html | 23 + .../21/cake-issues-v410-released/index.html | 23 + .../14/cake-issues-v420-released/index.html | 23 + .../index.html | 23 + .../16/cake-issues-v421-released/index.html | 23 + .../20/cake-issues-v430-released/index.html | 23 + .../25/cake-issues-v431-released/index.html | 23 + .../18/cake-issues-v440-released/index.html | 23 + .../23/cake-issues-v450-released/index.html | 23 + .../24/cake-issues-v451-released/index.html | 23 + .../24/cake-issues-v460-released/index.html | 23 + .../16/cake-issues-v470-released/index.html | 23 + .../17/cake-issues-v471-released/index.html | 23 + .../18/cake-issues-v472-released/index.html | 23 + .../19/cake-issues-v480-released/index.html | 23 + .../25/cake-issues-v490-released/index.html | 23 + .../30/cake-issues-v4100-released/index.html | 23 + .../20/cake-issues-v4101-released/index.html | 23 + .../06/cake-issues-v4110-released/index.html | 23 + .../05/cake-issues-v4120-released/index.html | 23 + .../02/cake-issues-v500-released/index.html | 23 + .../17/cake-issues-v501-released/index.html | 23 + .../news/2024/12/21/new-website/index.html | 23 + .../news/2025/01/01/2024-in-review/index.html | 23 + .../03/cake-issues-v510-released/index.html | 23 + .../index.html | 23 + .../05/cake-issues-v511-released/index.html | 23 + .../09/cake-issues-v520-released/index.html | 23 + .../10/cake-issues-v530-released/index.html | 23 + develop/news/archive/2020/index.html | 23 + develop/news/archive/2021/index.html | 23 + develop/news/archive/2022/index.html | 23 + develop/news/archive/2023/index.html | 23 + develop/news/archive/2024/index.html | 23 + develop/news/archive/2024/page/2/index.html | 23 + develop/news/archive/2024/page/3/index.html | 23 + develop/news/archive/2025/index.html | 23 + .../news/category/announcements/index.html | 23 + develop/news/category/new-addin/index.html | 23 + .../news/category/release-notes/index.html | 23 + .../category/release-notes/page/2/index.html | 23 + .../category/release-notes/page/3/index.html | 23 + .../category/release-notes/page/4/index.html | 23 + .../category/release-notes/page/5/index.html | 23 + develop/news/index.html | 23 + develop/news/page/2/index.html | 23 + develop/news/page/3/index.html | 23 + develop/news/page/4/index.html | 23 + develop/news/page/5/index.html | 23 + develop/search/search_index.json | 2 +- develop/sitemap.xml | 4 + develop/sitemap.xml.gz | Bin 1635 -> 1637 bytes 181 files changed, 9915 insertions(+), 93 deletions(-) create mode 100644 develop/assets/images/social/documentation/extending/issue-provider/tutorials/file-linking.png create mode 100644 develop/documentation/extending/issue-provider/tutorials/file-linking/index.html diff --git a/develop/404.html b/develop/404.html index 86f83ab14..c774939b5 100644 --- a/develop/404.html +++ b/develop/404.html @@ -4883,6 +4883,8 @@ + + @@ -5003,6 +5005,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/api/index.html b/develop/api/index.html index d30786fc0..84869eed3 100644 --- a/develop/api/index.html +++ b/develop/api/index.html @@ -4922,6 +4922,8 @@ + + @@ -5042,6 +5044,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/assets/images/social/documentation/extending/issue-provider/tutorials/file-linking.png b/develop/assets/images/social/documentation/extending/issue-provider/tutorials/file-linking.png new file mode 100644 index 0000000000000000000000000000000000000000..d4078009a418825b197f1bb2b3eb73258ccca05b GIT binary patch literal 30987 zcmeFZX*ks3|36BSvZPYUo+Oo!kPwQpGxlw4+4p@c!yrT{Yj)YP?_}R4TXtjLD=}jx zgUk>b&OO!l`#--2=Umsh&UtVi{9QfxuC|+tk5$6WOaV=afz>UTxj`@HugP@8~Gm@k1J4 ziiFkP@EXDYq0h~M;lUKY%|;27B+5VP*^+O^c`z{e`J!QMBl`D|%$A<~^54gYkz_P~ zpEBfvDE~e|xH?Y!c?v2xZ$|#-sbl;!SOw|li`_~6zfW7jC+_@x@?rkpulwJ7_s16g zKQ|Qr^u@nMrp_Fk|6P>MKyGb$JSx71t$SnGiLpuQpAC-QmPNi=m!`jV9OEU5^>@prSntQ2^;m_<``_U-YlFqv-)VGU@FF+#nMZu{ncgmb@M)* zYVm#HqPdA)`Co+H0O)i(^Z4uLgUj6^24>X+<_DIed}E(Y5-sr0E6yesfclkeTu| zI9yM42xK!b6+4WK0voi+^4sJv6rpM!%wxitwPYBHk zXP!b01bwiIoCI2=*dHIYWUg?q-IZm%dwXfHglh=nv>wh7VjfRhpUgfH7Vu2gl!MWB zdnddu*K_r?M)yXdbUQ*-b7Uy8ut_m>VaNr&V{zhO7rJdO%JgSNrL8V85Du2H?K~GL zsm=^!)RR zFHDQS!@wf+V-`;>exO~?U!f=-{4gwhRgj`YHK|s!8AD%kp;)!9eFK%w5_hl~Z&sa2 zpl4y89-8<-EaNeKTcV0^O*XCeI}~nNP=7I^zK~caJY!hHQ+DjAwEmUv)~qk?!NJBh zIl@JzvU|kEAYp>;wFO^*GZXR!1)|Bk(v*jAcT(E1|6cB*n>_FCJls}UDbP4cTlKv~ zy$l@`NfmYg`$(2~LkEgsxM#_PJj%_{sjXYvP{3|t;|$%hh>Ltb5gFTyDtuxUrL!Y- zPuS?%+RG=GOF-5nR})VZUi$Eu@X}WMicNY3B|@4cVp4ErOZ& zAM_qr7SxjGy&x;O6ml(0POs)iU$m1`Uf<+-uO3#XXfX_nea7|r%Vq>>=7Uc)F-xL_ zt9GZM$UbT!d7H^Ptm#?^DUG$wb@(vE1!N zL-uefPFaLZqS~efX|J0C+*FQdX9TsRQTQtSG}AM>H#I7lW-40M&1ZISdSz2K#!*vn zd0tF^vsb96^`Ry_?A9z?*(B_p0n5l**{5CS`XnB({w21Y?dx>={p;Q5PR?HKumiKuNb7z9@&cASgaMx(bvesr`QLRT`#IBq(9SyU`@yccOvApd>jTMSd2 z)cwv1jZ68%zU7Z!-Dot;&M43aJKcIDMY4F$D8)(Lg5frM;l{a%uG`8Ln*+|Jkrq&t zX%)M0VZ!Wf2@AEf+6s5KL%jOyt^QcyKs`fm7nSuP1fOXsq;Iq$Kh&soc*|YuIGxE^ zW5mHJz3jEg%erJIp{tJQrIfF_pBUz2g-yUa4-HnsQlE zMHdV(z@6m>(w0h>65Af^x(Xi2NJ6SEVt)A%5hTxwekcStEZ%xVEK+LEW|Dlx9m8gA zR{OqI#$CPyvDyRt3~JXQ06iY%IaN)UTEF93xV0}xPQ<)~8*Z|E*MfD7w%x&~=}^*2 zK9nfU__(%d16dgJ9g(jUn))dg@bK1*BjZ!WxinY&x}F8x)0V0w%B!L1*#db={P^mtV5$Ex zb=I(4hGst=VezVFZdt{uh;#BQ=_OOLC(2k8WXeCMPvxxQQ&C>IsW0^6@blgbb6#EU zj|XCISPM>$yD&HH)l~Md3i94gOym#XEY>NTK!PiVKjP$@e%yYXSBRTU)?64KyZ|+{ zz;-e+*OZsnLpTGR}|7|R} z7PE2Jq>yuDxiFM1ghJl@lrGON)IshMtV@liY}Fzvmq4gHV5`a~z5O}{jd~j_-U`|2 z6^oO?yKB>U)wi|%`b{piALWC2;fI7<`wc8d=jHi{=HU}o&I*X`Fd=WX-jS@U-J)FF z>w>apN1xrpmeYN<7WrsyXNRVM@zn)8y{pnKMBNILVGk5&hk(N-OYe1I#&GPanNLVN z_PH=e%)fa&Ds`e%x2Dc;^!As~i}SI}Je}H@O8=MAs zSCresRE3Y_TVH>4aJMF2z-NOES*VM+9w;MZxLygZ8KeVefajc5C z*Ye=d)vs5YEaY~s?LHQ&_Qb_KPPxynAP#qj8XhmiOnicBir?${pM#Q-Is4iyWraK1 z+lobOvI!ghKqp3Ls!(I5wLjYh_8#W&Bv|68FEUCS z`m0z#Od`gU+R%g9n2}tUH*wQN?29Pf`Y-2MwsOg&L|%l>)9OHGn-+x>KIQhgTrZ8B zv?T6{y>=M0XJERVw06Z9{iMTo#uQd(wNp5^U4{PEgq)lPwP<8`eXj6YHr#l}T_xH{ z_14_*S22(Wphn)Hzw6301N-E>wDQYu`=5O(&W}ymlG`YKw{w`#h|9a$cS89zw5oh~ zs^=6mglmYR#N%Kezt;AoIhxJTy0|#O%CjWx$APyKuSle`ar#94QUq$|+mvJ*U*20k z!y&IztXg)MaGsNd1X07bsih$%$$RH>K?-an>XI;t${I*cD;Wb)qO^h|pOmm1UGJD9w> zWv5(Up@w;pJ~SQ46bBMM&F?S07TO!F&Tp>VR$cV;A6SiwJoS{8PrP2G+K*A7wVrL= z=56r7xMH^K@xok>ua7xYsba&aQLS8l^ybWt@En7SZ`uZvu&0sLfXDs2=C(3Aho}$g zz3ro$48Rs2P5{o7Fy3O)p!naBTF%rhW}*_0fI8!G@cz z!6n|%Noz6-g4AbRL{@unQFFwuOx$22xafilrOSb!^jO$w@P zPp!AdWSj=d@1R(Fmd-@s&i{ejkk*m({oEb9ITMA4mJGke20%uIz~5d zWVFxA+5~}KO~x5z`VPl%Pnv3see>?emFtv#MttdUBPZIL@60}n%55AGwl#UnWQdRr zGYNzkRNpNt>S2;8<8zpwF>{y*A(Zi#ISfq75)TeP4@Gw;7Uq21n-)2o4ZW>Zk)btZ z&eI3dyo}}8sps)I*;e_(*iDD?*OsaU^LR}oF5`Wf7w_@qLZTcE#_vE;k{pu^^JfJ( z_$Iam@PGYGZH);3hQf3U>$vn({qGALwsb<3bLUl+H$j$CvFVX{x`1t6sG^Rx;`(|f z_N`%M^QuQ!sR}WBx06@VDU4-fe^ug4tIqhtXQJ1MzHo(A)rgxQ2^2rxKeb_R<@+xF zjG7@0`rJ3hiwV?`J7f)zVtr7kO~di4Et_D@57h zt5?rV+U)07@3+dZ9n1U;NX7#cX;1+kqz0+R`pEa9j54x3k_>y(tD9{IUi?@ZnqgZ- zTfygotA-tn(>1|hSVi}_SpHN-r~5laA|s9v?DS@xQO|?g=EL#CnmovzH?@UT!lern z5FU}t6he;_lt;>>BD}gKrKNRw>PG=HUOm=Ds=h)I)5-XLj(LdxF5KQvsX)r0!b$#j zKz4?F|DD6;pLsJHpNdS|-i}I7*?9Yt66gKD4vFvZZB#(Zow4`39`Xtj$mm4whZ^BD zc_G}P{CFCcgD>js!x-%NjB`Gml5StM=*CxDA|H_x~E_>xx*{~D&o>$jx!5vTX%7aaZ#hW-=B|-(kx-b4Z{(S{ZA2q)9Q>Cof zNke|eI}d-DpxD|XQO2Q4i|KJ2iYCS?pN`gk`QIyry?dP~HS*zRxIgcQS!9{k1vvY>&u)59*C?%(B7qUte3H;CO7|A z^M$s?kty(>(-koc{}6+yXAT%gW2s{_EOlr5cT^33pkQ$=ted`nROBD(<@yGyWrO|6 zm;+4X9*ViQOi=>Kp~rouB1Y8yFD@1&yCm9I0BUVd^S$2~^VTNOG7wGi9c$lk`q35? z|4=d8{M%+|5RVX^4W>NWDaB{67)Uysc8)W)6#Cb*}rH%-@86=*OEEznWg<5u{is;QA%HGSUvv1csJufMxKXCDC!h=ICa#AFvgy77{CN0DiuC9L!34F5y^P(V~3K_bX zR&nunih=&(??`DosB!<;QEm+n&ek}+Ynz6^H?m z?C6;+C9C}V)j zW276To!{eO|;qLfy?^to~5uiIKHO)24t z_t!92B;RpA|A&o6W7kAIl_1Im_!>`;7o5G$*4orNwKA`1SSdle7eBvr6$XExwKJqw zE+BmHRFlqB`{7)CZ={1dFXZnlf-Y#Siwf6Q?W?gjCze7e}>-P^E=J+zcPvLK<G#ZVX#y!zfYJQBPRi4)b`M9wtuKG zD+R!kNCh=WWe*OUa*w>NG)o*Lc=|x>#Z>1I4@U1wKb?)e^q))0nGhhG$;LLy9rF8t z*dOW)eLIoi(|gfx^Sm(WD9Sl5skh(#c36W7#hw{UP6(8cG35G(;j^CwNW$dwIhb{mQC(H9{~3xx|6t<5{AbQZ zFHHsFj{ce`Fu}TYP9jWBL3ZFJdyI7XwLi0TeaX2FG9XER_>*csXgP;;bA6t?S~U98 zr{6DJSfdR7ZC2KcS33E)%u7>@Jtx19T$2R0%Gi6#^SHF~hB}s-vgguY(AiLDT@*iX z>+zzyxx(c0x}=L<^j8j6YGMKe#R`?AyUW#m{_{TL>8LGi#&{?5SU>*@aGw^1gi51n zZ9ZR(2>-VN*2#6m9mxk0rCMx#Gc&YNUgocqTi=$$Sf9V>kPzk%{UCh-3` zQ2zg(pvii9#V6_PaDw-~c=KP{$5SUNH#PTrUo7Y6yVu8K?tF@|Qjp52hWa=viD}No zBBQwGV_A7T%6EB$j%hXp2PNoTo&T)v<_THN7t1kr3Y=QhhGG2(P0{x3;-G935|33a`b>pjUMqFJ@(Z?x}r*3G-&s)^h$+3}w&?OJ;x2`qP>xEL>-N-2O zI!g&nCnRUr&#TsEY@bxP#>IBrj>t0E-(B(|BvXkN;M?}cew$ng_goXZ*(EYDDQskr zo%Pzc*9{u6paX3=l`T8U2r3gOt0Gn0@Ocn>8b{Pc+b6heZS@i_~Km`7Q8E#W{4>heRG1dp}4$%`l!Np*+UYRU(}XvK1(^P(fSu<<5|r$SW? z!ay8D46JLVq=)4E`5B0Bd_kQ%7Bs8@r5f~o-P)!KHgD0c)!4#eKLC38_N0#SCGsi3tU((zsA`%l z)d$8G!OWdal|2p(4}Q)B@%srD=ZU;&8fBe67xUN@447^eh#U(BjK@s+6ma3dM+ldN z7kM1+lOh=pq0-W8`?GEAUpd|4TXNtKY^F12BG+ZKVL~E6dNn^Sj@gVV zy-QeFcxnA`Hfyq$wkhVL$Vp4mUIrzx0szF?&k&@_B}f-^gAxd~_;mm*vFW9xa4ucS zWwq-LfJQs2u0J2T)#?#6iqU@>G#OEqke`@tIyF1g*B=eCCBR-d9ql>D|Egwo6amQ* z$#o6;*JYm@l4b1p&ro`#sM)|%2H>iLu@9jnj5p$=RBL@ZMCUnD<-;yFt7Hpz9*B#= zE;gymx>q|e7%9oyUk(I44)mD;aFk9l$V@hUZuBMTER-H2`p3ASnxy!fb6W-BT4%vm^H&O?UsB)T3LZsM@T& zBEFJx3b8hsytIH?e1wif)JYNTRXj57M)wkX&Qy$^5UOmdyuJ69^6a|F`*9TweIwaN zrx4(V#edikl&>#W!#@H%G(dvJw2}ing!qPw$A z-?|H>4wO`|80zEI`8jbYhc9SA@eX=?n|XSE&*G8n z+?bBQQ$nv!qLlbT1-OCCR|Hpua*f^Om3Q-Cdp+?-jZ#G?E%<7J|GQ3S-~t>>qSjN` z?1)>TSqI@B^BTT@rmIivBJ9CFpQu0Ad;3J`3Am?&Qi(*v)aMh7-Oo`QDh^9(5ofr( z|8wY`R#Ca_WvZB=Ry$&Q5hq~F8sWcN((MpOwaJMejLuO$3DS8)Dk7hsz3EQ{&Y0{` z6<<*mY@0>{;VttB*hpVs{Iw^F(1XSP&?A(S7vqz!8Wev?{2I(75FfDF*JHY(MFz$W*bn;}L>M2TT>as{MBz&z2_AT{ z^M1%)u)T)2jK=h(Cdb96@^p7R#qv2-%j<-zlkyZN^X2qX!M5qJ#mHD&Q$;3k*m^IF zt(}tJWUnO5E!CLJq)dGvUSzrhqv#A9-q;*3lH_AEwX%2Z($?vSS&n~iCx3VW*(45i znVf;U=_x@Rl}qx|i$-mi-4gPxck6`n=EP^FX#p)1@r!oYsD9zUlvbAX zK5P)n+Z&3$T=cY?L}WtV;IThH1`y8Fwof{A-4lLbZtMC)Jg*=RVBX68j!cKqgj+;A zn9Th9h0wfjCbA&G7v3CHm>Ovo_*#f+g#o@zLEI$>V#>-e3R0(9*e+LMwt_zMxjIin z0p(1lRlUwc+{uY`Q+ zpU>>WisoU0vcbQvtH?o@vH&)(gar0DQn1~rl}5`&WxDP3`I+2xpvLxPKJLp+oW4$F`hdOzDL z;UyQp93LPgQkbdob4hF~)uQq5NS&^%+^g{!iR|eNxOi?pK%EUVuAQSs@w^Rgg4=GN z!bX;Ju#E~w^I08kyy6_%NQ0)CET)mDNGoI0+qOzzu@3(A!-qoKlPf0<<{ns^*P`@s z^k5Ya>du*ETavi_jvtlR(i;*tLjbCX)IT+mZU>K!VtT?77jSn>0(Ah$i-Yfd3&9aE zSRDY+bV6QZ&|o`%R9Y-%aHOA`SVxGrvzfq3cS#P7)$eqr`UPMF({|5b^qznqSA8jMYddRPJeRn4c5A&rjK82n@qu`tiME9KY`7jMfSaU7n6(ups)ZucQES5a zoQvXo@g5)H7o+qJNYz@Ds{e(jiobS$W!=#8TX83(AvyA2Ozdkgi_6I08L=M$_U@f= zq2I1LIF!%$o^-J{{Y*LgUI;_5nDH{rUM_5-GdWC3y{nlhQ zefXHx^NPg@i? zGdh7wSu8q<&}MxRT1K>Od|1t$i%^WAvRlu{3l>~*LG_?#~zsu zD?MG`Rj{ik+_$pfMHQrSN~1q0Cn zP=GXMd=2jW)q9XD)pj@E^0IHwaB_~a=^IRu&^6%K5FF{6PU}S*Y@+kSfa%I)9o`T4 znIxh}w4EKJ$eS9(td_TvK%+z*oC$WX*)843zy1FK!ojQ%z@(uUzW^C1IB}=19Ose`g3~b z?o~yg`oXV16>LQWq+q8>9B0u+IY(kON5;7cZm}gu#!?2-=5nulz(y6nY~G=0ff1uU zU}uKu6p33Wy{jv4RQk%4G{H#+OLje?;nOF8uK;^%Guzrryirp(OuUyvI@F{AZav1c z_|=-0^NsVFo_LL<5P}@Qo(yATIk&S{*}UT_m~hk69;N$rH9b>S0@k851$?c>{CSJW znEBTL?jo)ngs(fwV=zQgX=vL;d&g&LpNODtHd_23w1$o@@h~;Vmv~<|2zqT?*R)TU zKKI%xlx=-d($2|SuocI>qZ2D((_V!?~afz_Xqib@j5O9DOkp0>_GHACno&KIC-2gI6~JNF{vzIXq5 zZA}$7maq$n{rF zFXqqVtdhvfuOs|JO?QUh*or@M{=9Ae=d2B7gD4@X`Wr_`qXvnx-;C;3!FNRgg*RQ> zH0t|~wLH!|YC0qz|2Y;X${UlL$p=C2ir_E`Y(s&fsLNsL3**S(YOYjo>n8vbDiMXn zDFsjeaiOD^?ae;E?a^+auUuL(P3G2aoET-kC|LU;@x(a#fwz;wdOr7du=HjNn_Vlw z)N@&7EEUDelJdsk2JY8M&g^J7{_;jutt-T^WSxt&q3!@DgfMHa1#J0Sn<^7K8#lg8 z#iyOXMZ&{r%Swk1^PZO?jyHTBTeGr%js?!a0`BE}y#gh8UA6R{NY!muw9ULl6saHv zB`T1~<&}+@xBP+TjL(x_epqBWL%fzy1f+i(OJWZDw`US)*nT83$cpdGhP@Bf-|@;P z3;?VAInyx~IQycFQx;Tuq#Q>KkTJj+D}fc+`qvqk{XP3M_|naDv;nj0OT5Nti`+wYXS*N4z{c5)D9=}guMzzQF1 z^oN4P_gIdWwDu-;a3$X=mECNL&Inc8s#bhVH}tI0={_>blMq~ZWc20Qc3BneIwHg$ z?(F$=K>z8!GyR^c>=8a1gD=*J7uiz97mEY9 zqjxP-r$?J4`~8wE4~{jWK(R8&F=3w;FnQaF7w!{qZs*LQRB${!ea!i3I13m&@^eH zNxb<>1#JClCO^wyek1r`N7bA2sh8&Y_($|FfyBp}}_x6vkA zYN|&&DKm0Eu^+)TjM?N1Q4I5qc{5ULN{hF!vL`p-*zBpM56s3?@h1M zRCL$+2jV`?fyl+Pmm5vme^3J6@c{_{j;hH9U-caoA$O+vnVU-B!z)IMHP_3B#0H=I zK<9pTw0YeP3xbz9(gM2S(H?91l_(a$+c7%*E zZ(X^f7pDByK(AI&UbN-%zc7yBAkkl0!h&<*JR7PH z;0PB(t>$LvJv>lWNmh#Kum@-#iA4B%KwQ{uGj~rPn%wZ5G?bR>eC~7w3__ zL6{qR@{RJ3=o zs6d3N;W)dC>tufZ(u@tZjQLP~xnC}?URUmqitLepI^9T<2f|q*inyH{1E-|X>w)_; z7KKBi(N$vSA^Za}b`plyn3omCEV)uK93*S$Oy3b08gxVxG@LN>j%mnBN1zD&(N z;Oqe5T4MHm^+JMc(ZK8rD=Ar<-659?74uoXF7phN;LT*7ZYTA(YBFo9YlAifNx2~czSU-jn{USWTD8!4q)`~X^9cG;gwlL%D11lqJc7{h zXsWsj%n%f<4(t0?KunqyT!xPUr3rg7o9@iw3`^gD1eGJv(%1Pp4swGssww{Ns=}V5 z`}8!Rs@A98%6u>i(+BzVJ-(act1Fkk>kG4k(H^aHbp)dj+k}R1VrnggTPz2kbF=D< zjPl#lS&{PLhcI`DGN2LYqLN9f)f5EcU?DjOC&pLmloY?dyUrOY)$i;ml$i5F#x+7WHeh?b0BoLoUdtL{| z)f|i`ZEq917iTD{thkmi#O+2jci)xBWh?4*L6ZuSFQc7K7G3}hc1~kQ)>d@6-@Z@Z zkWiTi;g7IeN{KDS7>bAhe+X2&Xm8&6jP6>H;uy2U!H>^*6DY2CQ^@9&b*W&MsjE;lJfC~!B%Fc>qMO!ZyWk%Yq zDel81aw)=T<~cSSv&g7zp!0Etrcc1Q7Q?GVA=K!qvRh?E4t|%Xr^&^#|CZ{sI+qrwo0~F}yt>$l0YJvHWM>fzc zUkdqG(Ve~;i&*#G`<0G=n0|qxqCe#>EHrV+0NXWl#7^0*OLT=g^8!i~{fI5R4|H z;V!uG6}^CB2I|T)vuqD5jq8@DK11%KUpa;9q5U)c`10p0-4ZV-rJTb8k)~LyTpKA2 z>}0s8ORirc&E&jU_LDqTkZ`!A?}FrhS?~9({uyYKuYnAYq(;T+p+w*ruB(b^EUdt@ z)*EQf-rLmDqLDG>Ai{5+e(%Ofb8mGqjB<|_tnDch6BnUZ>Dif#$B7tnr9yfb+h0o zo+gU%NB)uB!7c@~dt`;oMtK6o18yk>Xz3HBga<2VsD4dw`NR`6Hhci!5A?%?=~~5& zH&vl$maHU@1(&;Pel6VFHxA$)YlwHnRnr;p^&(t7l<1w*?9@1vNx~>V+hW#6S~Ep* z*(4kJ$^xAfFdv6*aVNWxD6}lPFkck89187zM;54@*1u;YsukW7DMn6oRAy&9mVK7V znHg&krl00n!;7=kYR$Psg(USrfV|Dg(d;@Mt7=C)xcYW*h%!To3cy$<+Y~Ip_sg0b7rd9DvBcom>nBeyBLi1~hBU2N>m%#2FwupRJo$ugJ=NITAAx z6IZ95hpcp$1#+g&#OxZb z$s24yjzS`OKq(8Z;W$oHy`RVo?n6-hm9=y#ao=BSd{VLz?d_eD7WtA(qnMzd?*gO{ zzK)M<@U@l=K5Y$ri>;hR9Q?|*Fek4Nk}PxN%};DoYycgfhiFwf@U0wJ&4by9(EAhK zKeF8XMYS@otWU3o5HSqy9`R?PP#d7!&^j2$gw{QkSaWCBaK_A?4=@&+DR{Qp2(c{v zpU^NaYe^ro!2!at$fw^;mNAe|JGRFl6$Z$GXYX9D$?RfP_Gq$_mMJ^S=wbLT?KKbY zjfw|mSiQ~b`1;z<*1i6~`#>_!e?IUHsC$_0a_3bue8Vx`zMa&+_{I37zI-2d2YduH zel+sI(96BvLWDy*&h)8){t~`3&;uN@A)xJH_O2R|6x7ER9}{TT?yEaqR8?L^@Rpml zjvrw!b^aHirWQSO*O??uMF%da*?PA;*fi6AQFJWESvYWN-*U~n0jdvHzqZOJ`%30E zVRz(*)jD*ALcH4LD^D~(;57m3MCcs;cFI79Tvildh$~#beKSKu_ht|Jcs2OSKA#-n zU|*YN6Ou8IZW|@nE!uSeiy&K)4}ygnohYSmWgSn)zKzSp%2VNAe|}6!t#ABenI*1i zZ8cd_{#_9utR?cpJ->Ezo?Y8qj7L&2K6(8?xD?c4Yp=)=aP6!wa}QCOcaseBnbs?Q%8!?jQ2_O#K%v(icLVM3SMfo^&I_Q{QI?NUqUXp z)c^&Zaw#}vb?FPNm?A9WA=mp&$jyLXT#6tTw0i130g{`WeLD&8!;uZtIC5t|{CZ2= zz3OBDqJMU+K)H`q=`K5V zETuXCbBO&Kps2YQlnp*=>tFvZy-oSlK7MkAdN06w_X8d|dp@%4M}so%V2pebX8)jK zG#~WF?0`<1X77N3$BRGHQXb)X-hRkb9Z%JCIWCafCyf56Y@!msUv&kDhh7MAF&k(k zV+pBWQ}Ph}%EnehG57)iOg5YLW}q}Trb$PyL@yh3;#Z$*yYo$RpGnXc5dz2ne1(>* zcsa$XH_K_~21`1;bF@JE?x_YOYHZR@-#~5Ngn;jgJWr)gMaouxdP+wfy;cI6M{3;~ zjiGrx#j%waF;ZfOPzTdtx=QCBgmAT_p{pq#{4qVvi}#4j|C2-d6yS zm2m;=_s@!{-#+H*Jla-)py{~M6OmDk`QuS7Q3f;%!nx3b7eYOmfk~n+8%`T2GFqH*Xk8@6NA;q#A8Re#~2r zKf248JDy>$e&2Txv{$Uve0TVoQA3jVSI=wBEqv+IxY5C+X>AXTe>!r@K@PH4{T{@T zCa+LaAaWnX>?t=AGg($feAh7`0Ffjfn5CM!-g`Dp-lL_m)k5HK$eypnIEfb5 zizZ?IESt9md@m1y07sI>D(}wDUGn}ebWd5N0BAM$%}mueBd!}0G_}259Hn1gf!f*6 z?pu{-h;AsD`b(BWb#KhEDX{ckym36Fy*JRmBxZ*FC69?d@XK2`3cBUg(y%}%<(`iX zXnL3pa_mCR#RCb@78kh^e6aTGk=oZKJP&h?kBfN8vdDElsd|;SKTpGTC+9$+tSPXe z<^Y|DU9t3vXVtO8ypc*=5*;o0@UWnW=;$l6tbbwT0Br7Gf8s=P>7pHT>Mq!~ufGAs z@?l8P=gE9r3KPG=*y{ZBbr?VkHk4}+w?Qk#z%5RMd+st}hsUw#Aj7cx152}V97&-@ zNwF{@H4EPHNuU@1t$f$?N6V2EN%tmcbczkcXOZ=>125TBmq>c_A;ZE(#@_z)H$Y(j zuqj%+E1qQvfwjvn=k{ViW#+u+t<*@|WcxBsQQcXdxwk@N(PZJ|RXr{x*fLK21FSsxo;Y^PU@$jhr}IX_-j@^*uNxs>_}NhyhVrg9Z^cfl!0=by3K z?evJp@SATh)u_SWe=Yo)aGiuAi;X*DhB<}*fRe$`W4QKP^VUtJ#%!gYsP(NW}+yFnuHRPu8@~Apz zk*YfmNS-`zk8V`?lEEX8)D^$gs&@T#0o?|hFP`$P* zFiGsUoKN%gj6Gf+(|ow)ckagM1+QEQ(FW-~h7ULOjr%t;^*5wK8(_7EUccK}4;H&_ z^Ood!00r0Z=WKNIhC)*NmB~&?9I~*tE}s;$%1uYgG&lb`S{8EM=l<>*gF3*?Mu{|1 z>H|dz0#)`S=}35P;tTpkIz=apfdVkgfaqwt{vZ2inmj+M1lAE&;& zY`(M2$a|rj>PzJ1A8O5pXSo#-va_|DzmKF|7^}UXW%9uHPU5`99RJW99iu;}ra^#3CrV*5v$U9p5AZ2O6;8$zqy}U?5B{IUI!PsqV2rijMYK)_^P|mEiD^+owBkO z<6&Ja5ry=vze{qk@ty#f+@h-~tAb#q=f&i-GA9b?19TUG=Ue(((^ z=_mU<6BT`P?#jy^AM^jU?%qAI#D}v45^AwB3Gx9pmf5^u3 zg6v?$>df@?$1pfl^iEWxpZaBR$Bq{#+$274e16tr`TeGrKd2*T2Z;Cjz?H9+PFaq; zo^Fwq9$7wGL4wBP?|AlbNlRatVa2Q?DkT?9@S45tb4@^JxAlb|E`k# z+(=$Aoc)5Biu!}O4&yjdMX~x27X(La9|9~=CZJS9FOjfHz!^Kv?yypAYYbB%8xudl)8`7E}cG}1t!ia@Ir{r3i zYpR-GFLJOr*`d)-yKtU)|01-n!@&t9L#tPGtX%R;rhzL%4YNpxK@zjFuBR0| z=i}B$0u>EfX++Tigk8}lc%dn;z|HX?hLDW271xW9n@56v?lUiHxL~z^-zrR+zfzgc zhs~RMfpf8->1r}_`ugjo%LAajysrSYCWrsA@bU&qzrDB!m}l2L{HE3?&@RPExD^}x zlYAT@k+a1Ad~)?b1lWEMvP&Lu@r^+E$L48nClarLz$YZ1y)I#$Klo!Q@p8IWKImcT zPeO6>P40T{u)yKY`bqTsWje!+p3mb~HkkB{tNxm~2h8u>wO(EQUc!7RwW*eW@|DIS(_1;-B80IYlNg&@)MsSHVYL>0dO zx~+v2=h@R3rVK{pbTa!l$&!=~1AS!fRu~%2zmFn`v5-VNr`O`e5V10owB?j@6Th5a z3~e#gaW&HB$|O#F`Dztv{4d1N0i-P1=V0c_dYfOzQ~_Wk9b9@~;Gm`Mc2$6S+~8@d zf>3LC9%x|m?0!8K{4g_VK2Rp1NMNnO;~Nm2A_DDXMsNyNmzw?bh^X&K08`}v*uS~c~@UHLEwRjS{G zvMkVhy7&u~XI3a&%obq-LW{9>(d&dwx|CZFK&q~WdA43-lDLN7zGSJ_Mrs*ciY$7E zxx*I8IJYd|i2n8*=c2d_WuAs4`K>U|v3mr1g(aoI-IBbg&#@2u1p&N)LdHxNb=L!x zd*RMRdL-y=qIXmy30@W5fN%p8VW!iOcn6~>SP~$G#YwKF`89`^r`(|cGuor|^)iwf zDs8fso@MED7Gb7YThv~`D`P<&`p1qtX!K=X1{-`B0S*To?(g0XodyvMI#BP1XJ-zf z>1SSHot#ISJj|K*wu~7@PF^RVxDDoc|)<; zWJ&kZT~Cu^3!7_MTr)wReFMdAPeZ6q5n>BfVadn#cO1tfUI z-KfMy_(IHwx_Lc-OI&ng{5BI+Q{J{kiQ3s7CWiu9Yca)aJL7mvIrF#ailyyg&A$A9 znGTv62!+)5T+|xb(Zhfu0V$o+Uds9p=AK6~YY&V3k(^O_oo+QoYFGAMnI z?QJaMSd+W8_a{a81H!9&myb9lwMb`N)T}W3D);5nfGVkDBYNnSt-h~U(*ETnSbC3k zvhVc%EHmH2)t31AOyyq}g!7z_7Rpm%xb>3%V#akJl{PsVdc^o<77TycO zzi0QCZ>oiS|EeN~s~s{QiH=X5YyGY9HTd5t&*+>A)HMA-U&{+Y@>URk)r%D`f!vaENTvrtpA5+{5fM+k^;So6}zNT zREJ;lyLNzadtPee^yH2#2?q!G1F5}*653eIqniRZ^V0w7^)oS^Yq9#XaWmvU^i@>0 zs%(>$;V1#wNV##*7{m#I&)NB7pC$PKIqn5(2Rth1?};aD*58<~+zecXahNG0J6>id zjYOekKmC@cTLXQSL|j)4E}cm?ivssOZ|;vP@ua)xCa>WSIIv+f)&Vx^D|{(HRyyV4 zglIH9`Z@UC0l;y4pPd1fU%Z0yY5mlO+F6IsRFpKc{S>FzwW~3 zTSy1L@wxK@MwLMInZv6>;u;r@8VMEu#Ul>DExQQvR)mM5QG4>cL&qe5QPQ6!U_)eS z>KCv;&%bzIGS|WMRjpw>+%B>V1bM;{C(gv<|Asn4kf<}O!@tzoF8&X7RwFGVu)2Hf zt)>b3qgy){1_ELjp6gbK;4d#t%jdXs9k9 z5%byBfm+{y=v-76sJAdCJ;e>%c)1V~$!TT%n4*M>;Hgn_1d?cHgM?9=odx4jhyP%1 zP7@t6V-HAQo}mJ|;G1z8^2&3_L(_;liN3`PFwe#J`c!ooG~nUJFh3in;@uCAQ5y}I zhb?CvUAq?fcJjH;wEA5Q=Q|@=s(tu3qmT=F@xJ&UOSh(;)jX>CM-h@S8-Rbl_m`HN z9rC$dS5Q}gXG?OrHM#3z?+U~*tz)>UH|4J00|54I`rTb<|JImS|JLNcTnc18XdpaH zKT-+Fm>=_{7zBc88q`x*#cSgOQfu)#=je_EvdJ^xPQkZ{ytyN3ATzIX8r| ze3Lr2=xID|KO69Ww0Gw5P_BO;r%w5`;B=0tY&nt?sca#msAP*2%Dyv%Y$@9~sk9+` zXbfe^PWEjS4rLfSg)t!pgNZT381sDZI=|oZ{PVnC&;QT)ua{TM%yr*$-PiS5-j{h| zd(=^ruLSbKmuLTZ%jZKM@LYlI>4FdU`pnY#aNe@S`5&9%0J{|Cxdn(*`S$B#<-(>q z-C|T|Yuo!NB^ia+hB2)17n>Cocfb7+|Q!HObs`O(Bq7O{PfmcuL5fSwYBR$Hi_jk(!^LFFkieU zO)>+8dJarZ{Mr>6DI*dNDjo2K-R3kIP=>H|j*qir3Tvz1NbLga)1^Cg!(bdL8%Vq) zX02QE!MNzqI35csbzIR&n4raemk*q>n4;U$2-ZU$rG1!;LB>wVNgnB6R~ zVHq+kXL}=ci-DlBD(W5QAJ-54DRwg8f~F;RkKYGy0hEb+oiFv znxRr}Ld$|N7a1o)iZRhl9~9#^?23aazjuGIG}3r@)d==ePI0{Q3M^R^h0aVNn;}RH ztTdbBamcg{ri^J3s~U7IR@?Xh@#tSamt7Ec=1ALhXY%EvEI)r!n@#AGugj`_M>f?* zIQx*S)}Y$+;e|)Xcu&+Kt# z<@)xcpamD9IIUB#WH&@WLaD8=y)}v1K-iOKAKM6Ma7=TMA$$#nv=gJ^+L+w(+Mu1z z-n1=aoe+>YG9F?z*kqm){KHN5JpmPxCv*9DRPe<2rqT?QLK~v+yIi^vQu)PGM6@gW zV)gJ{!x#`viWnd3tOVgTI8=Uv91!0XsLZidCHh{i^usG9qzZIbws2jW@mC7V1-{bIkH?&re>Pm_0Ox#0x@Wns!Tb9JwdAem%hM z@_8ptjcg5Q!??9gaOVPJ?hf(^r_Ul+=#TI1Z$h&h^I$e5SUvmA>c_Ry1~=UB7YO5_ z(Gf}svw!vU0GUp$7m3Yq+(HV$Piz1{Fybr-&==qA3VSI02c~*<`KYQ?3M2pLIWJU^ zkHmm~fSTxhyCv1L27Px8KWHb5nD1tQI}*!#CztIH7s zX<7xjA%E9Pa8^>#%xM-% zjz~kYu&3|&54{4aLB#68_ zK%c&Tr26w;{~$;I;j0$^ycPa|$^Jvm{m%sP&$r_L!?)tSk4Nghz9*{*Gwa=d5$y8wl(JjSO53(AfmqvPYU~1X#O1p|U2%AC zi?c;9fA3D!CHQ?=@&-Ps9tOLoXEH4KR7675%rk0n{h;(koJWB5=6Y36ttp?G6j_NA zuw)vc{SQGf5?SX^eS5E|@5+`eu<R7%$;F5u60MEG= z$hZLS1G2G)hG*tXDxy%9K|=N*$V%Xe9vofQpx`<59AU1mH~4)ddhpczS}60S7^lC} z)y{Z|kObzKZ)aBA?N(txIVN9om%8cay|omgpQuQP-+%jUOa5<25mkZ`uN{Nh@YZ8n zSeuC+DMhon_|L1>+?YOy4Q6?}3!AGj1L(QWB`npX=@d3}A?p1{qgk(fBYR7FvQ_D3 zD3c$54mHri$#H8p`07XP9CuofDwX>`79b0jw@?^?TxLcarb>lLe9^kg68R}t$^8>t zYGDs=TNoXek}KaFlR*c2D%8N;EI7XUV9khZ7v113l1VMer=t?^eJrLvwx8v>77rwXWog~%NOd9=y6Z?y7EvCJ``1U@YWm4C_dJ@J(u;mxui=xmQ z$+AOh0UU@_E0swu(#t(QS>@Ug_u0!8-Y45bXJ$#j+`6U)b5ynQYjR-cf3w}p%W|Uh!W3MtX4Y=^aRLyJ5k=srJ}p)urkASW3RlqpX~$V z&Y7(bgV0XNOdKD4PeQ$5ULsPHj+@Lf-Zdl=mw+xDc4923z*ZUPSU|)`9|1 zx|QaBTW z{)O{|?1m}t`f|z$B+sBL)Ej6vyI0=#U=n&2qgWAQkpk^J1DxReVBA6iq}sR{6-bB| zZ1lGQ^FgBIK6c7)eUuh?*=80wDcpah7K->_!t^{#O@L-=Z>4OISguw@RZ8aMib}hd zd2o&4Dsup7g*M*U18Mo8{XX*ane7FIY8zQQ*OVG}trB0e^obN!P4HaTsZtx9^-e!* zz#3}kS|LS>OjX7)DciON)!6!;y;_qJzJLLNcgFeHZy@?{l1?8_lTfJ0I%8s8Y;WA& zc?Zzadu%3Ws&sVKPm8_TGpUcVF?)EK>Ik~MEw?OynH)Q~4nVFd^|bh_MN%^6h%hAP z?>x!@&C`#*N3@3LP$m!vNgExj3S?Y+(68?9m2Z^mgV*P;;kM{oWtF>k`}j3YhlZS# zIAR@3*=_zX3wD&{wV4Ky%hV0ZYZz-{4$Hk7;DnH_$?&$OQ&iI1x^@_I20N8mo7VHG zE}tt=sD7y=Rq2yhAm;dR^o~KZU&^7?R)YSOtLJ;0PE5^(pdd+gDPBL) z>%*yk6RbLJ;fTS1f>Wrr8@N#DO<&dtW!*?Xj8tR;zfi9MKaDoKb?t z?r$e!H|@L)t%ZiqoIqF_f~{P>{f4-gugk>At)f!N9_%Wi&#gYuG{5V+t4C?(z3Mlo zA1m7;cLp>KQz222H#SoUq676S046rritJx9UGVJHp%FU9v=+Eb-^E{gw5fWY(dLQhUw^00)ZEetT z-xNVnj|;pyuyVG(Ma`%P;*ojBCtX0`4|fXR`_|hH;|76%nbaiPc;;?*Q0$^j?GCIN z)?ZY+R%9Uk1RW?%KgUMslhn}_MYDh3H&iXkK$b7aP$uB)H3?+OX6H$6$_MR zpY^gJ_0m9Rk=5muG9#_({E?Sz4eW%4rQ8V2tdXeVgSm@QebnYwDg#?N{zSNadh@hQ zMl0pMz$;q+`s!2q~&3PO(khh+yBFw&2@1eZ!MCvC}PbYvi&#b&|Vud$m$Cp>2st)=TW~+Cnfg|Sv z1i9j+ilS(kfs#`an)_L)D%kbDvHkI&K8mOu=dFH;_RG+)2>ZNbw@L-@A*w zua=bg0t}Mqv@h;}fpQ+y(qsxcuq@3Rf>l+Qk5 zk~Xu z(qZ~#7{(Wa|05kIqrOok7NiCNNIIVmG zR78*?WzI;xf^27{J}=rxu(wUZpQ1ne!iQ3!za|umtRn!|4yI+!h_jH{f|RxZw@Zjy z)veH?&q^zZP$DPC0R^lvr*nJPg($Oql7h*?QA#Tk*J9&BR2kp6=INuZ#EP_ zyg&8j@6l+7$j?Qi=s=U!W-V&DQul_!6s>((u=hD)^sJu2kru2mXQbYwL3yQAfes&O zE4{;ed8MZc7Beg-S3?T#H?*0*Zqb4}E7dT6)$-9w^}OI(?y}%|^M`hhSrCGO!amo9 z0V1())A)<+54jO7o|lJCh2$$whYg&9z$@t#`56jX*{IK5a~86rDFdadJppseO@!6t zw$(*!rs1IN$*+N|IOc9O?||#A{sigPhNVoGr;feCtkwD)Vij`rRq5CFGF2Eu!SaLl z*iPj(%I1t*2IPo+@)Z?7sbt18$-SyZ;cW-Y4kz08Ck-CrI2hRe?r7+s+1f4orPy<< z4~NMyrrUThgj%&BZ~n88#{qN?1IpksM0!*3&=ttjO37WoTc4(*AdWXGUFW(y5?RK- z@NpwNseTt-p9X2q1LjG}2@t??SsAPAei*>)>SKbO=~PZ1@*t-4oum-mQc5PSWEdwWx@64w-jpGx?mX(QrwVBm^{_?sTqo^o4Qenb1 z@p&G7fp_zcp5t)kptFBQO7KBXc?jdL3T+rdtrnNNRSUQGRGz=nM`#OE3Yyb-XZ1-n z>)$$M(Gw{XcJ(xk@=ka1hs1O};rGz%1kO(ZS2VA15UW^%`Kfl5bEwt9#-8mze?-W?m0qzUoqZcfm zD=6|`{$6pdRD~aUce9F<>akz`{KGwJ^n1DzT6eXQ&fOR3RfH}r?16iL-UGFl@HV1@B zxaR<{p6)3m+7)^$tK!DQ!Qzt5{+I*i=H~m4Oy)kPoHli5q*&_Tc5}-!c`lB&ZoG2( z=9|XB+u!@FzJKdVh=WjUEE2U)Sdj6V$9fCAqGM)#W%c-La6)&6pkFn*A$) z{J_Qfc(AxN;9bE7Vc{*v4rykezcLKw@1EXQc~VDlfUqn>+k&c1ef}9k|mp9QmPUY;jLzZ{fvQ0P5fP3 z?~3$xn!ftxA@>>aqUL3Ck}aG#65w+CdhJBy)Vv-{G*Up;{#}|+qa?w3w_24rkjM+} zaQerpB)4p-%Nzdwu=EOi1t2V@NzjWp;>ikoI!r&jmpwAslNA*8aRPFWg{N*6w-`^Q ztnK0@;sc zc%gZ4P#FJk`*}U>`PGT6awA1ci_ry|j!~zgD~pdBEbuD0dO1R4M{-Yp)2Tsrv+LFR zds&TINmZw+r0F6nlEU+Dlf&$bz;A`Tw6WLuKNsK;vVW(aFux{huoJ-k$$Jgix~gGI z|I0mU`N$`Z!1C#O&+RaK^>VGMQ(;c2A0*R^weEK!4~Mx1j?lT1`^CSXsg}uvhZ@z> zEf$tC;7LsPoI}ArFhfBgVdkUq9{n65=Ek*}OBiQC|H03_#CN&-j`DmM0WFt!$KlU&eTI<<4HiG8S{4gxJ!B|@`E<6F8gBT95BVg=E8rol4eup+D z(Nln~(^ACxb*G9KjUnTqvv#JE^1(iksy#2TvXI}f2kS>`r?76flpJ00o9$=16t=41 zeBxGFas=UnQ7>)dJ4=>^oX>Ea)op(_dkBH!)}F{Rkd8r8GRvq01U?Mh!dvB;lo{g+}5My-j&RuRbiC9B9c;lL`68m!DtmH`4S# z)&(b9R9Pe=rVAjH>yX2kf2>;LaYZl6Ltnvs(`WKm+`^emM=?fAphKt4?bQ$Bn&Cf2 zfN{oof;}Lyw=xsLf>Z#;snwH;)GJH%isUvg`cBo$;Z}#cTXU}!^=g!NfH`NxpZWks2!!`VmhK+)oV>Cc(5ydW+`(eLAl(K z^q;I5m8jX#QA3emX`$nv;!BX*LPTMOfvB6v#D z7WgEIPQKfb0YPHY-@*uQ5qL2)e9Za^ONLHIQ>mwD)kkg0R0)}0p9iBkuOahGW+;31OO$tv|qva0Sp zEiYH65Rt+^r)qb>DLpb?05!qMVfM$nSsO$uS%QQ{&y504Hgg?cwt2VMWfB@jd-A@O zzDy1=@6U_i<(d!X@Q_|VAkRCf>)JtZ){4XDYG72WSrP)DT}S*{JaqiF&n5J}NHz4Q(w?n&)#RVfSl_NVymPc<|f+o7l1*LemTjy6_CVS^)8btX(m z1SF?XG%hn51EL#JxAh2td@3UJ}OhN{>KB-^>% z^aV*33iCVBFqg9Cg0Gb?EQ^)e7u>IV1?rX;q&3+p3L|#6Mv^e%Difngoy-nK$y!K= zR6kW7cbgKBPgibO8&S7*Jypug6?1PGtf(<4Y;Ak`&4*W+XW` zj9jJFYc%)BwX@_fZtL5eC@{jcDP2S_xPER7%^?HHa@IVOCm#waRwP8Ua`D}qJPM5j z14+h*pc;(b@EEW7S{Zw09w>?j>A!%`VAybrkiZ-HVtw?!-Y_}0WLJ%PrGCm7-$x^mT>dr<^&UIz6JF1-+#G4ZA^E{jb-9(HtZX(kAqA1l68S@EUo6&nXI z(852qy>c@HGAd}o`@lKVmhIO_ZO5-u7@oD~)=+r4J1muUG}|KzBS3bnq9ssVOZFj z`ztF^4~(@aj=V5ZiQ-)s8*f_sbEG8&jU9lL$QRURvXvy>xbcJp22j==o|4)s6iZ=^~&Gw+DzIOh)aPrLnBsh`n4&WCJh>xd#7a!gnIBKhl!^j-g zhT%Yu-q?fWRBR`+5E&4=$O&ZItAk(SNoZDJ)0l?fS{XSS0w6DpB4K|qJy}XvhL%%A z{s|=6+j{YPIn0&7IYDBh4^Eo4esx(=^Z(26k^NizC`$fYbOy!0Z1?4rX5soz4kjN` zm^a-CcFslO!t)#cE6NL(WO2gXd&7bc+^}`k%gpJF+A&?y+w}HXd(Q)!Y=kr83>5DA z@=hwp0C2b7`}TRD%?(cPyb6abO|5h+FX9Y%TrZ1KyLQ(^{=9JXFA06=mL{HX;FnS) zFH&8ntk7ow69(rZbTnjouD_Jhs#)x4UlTO(n2j$LU;lQZ0UlTg1I|El8-tuAH9kfl~@N+lv7kT+$@o{vB<$%MlR_!p0)FF#;`rRM1$f8O|HtFXcAGO+9CLV0B zJ+-L>(dT27vO2cfiM)BHbz$pK@+K2nT2Cx*qz9_q_S_y?*kW!yCbAWt@|NF%!WL5Y z4uIjPemb4uxsyWEp&s)r6MCnZAq;8boV@UL1vmgklH!2+MGrRhx^8dT@*7Q+zpFH0 zoW2E(oh7Gd+DE{idZ2wYVJP`A20C^4U!PC~uHH)?AoZ{cf?nLY>u)B|@T>cZ7K*%r zpbiOBT8yZx8gMr)Q)XlmB@s`0HuHrQ$^282@>*)GomBJ5yFunU_Q&MRSB0vBin{?! z6^@#otYO+HQX1qsy|nK7;0hLvvo`%)2_dn!Pl@7(&2D!mBOQtKZ6}c^)u@;zY_$pY z1N+X9YjY+NEpD4Im#WD(pQ_Y&*y>@D_8`e=-l%EX4pq5FYwx<+L!Atp<9xpd)Iqlg z8kc?(RiQ{x3QnV0t%LLwoFfw(Sb;iAgeCirYZJ8IUzNoumWO)~cX=mzF?D-EQRUNh zrN*bL#Gp}6R8+?*T{p)nySf5->UAm~ZD#qv`Uj3k>w2`5u-c%{9SLIV>!W6D5mcgm zd?!=k5a{fvQ3Gj3^?L>z)zI@WAuA`zgyDu# zd$g<`&pdNJFeKg1OfsFQaWpnkwNLVNP*VKldTVXJ8@S_A1`5+kGz3#+(vtxAdDvc4 z*Z(?+rCWrph&b+=09U-LuXUCIx!{6=(!ILQss0etL6scIf)i9+{Eu};domGH-luRX zqL%^?%p|z&3cy{LSQQ8r0pZ?ETo@8QO!hIAUK4>Ww8-X{?_E;^7}{n>xO2~>Pf)2c z8+$iWwGoP-DvOH&Ec;-ilmkK%bL|SgKry`>n0pR`b`CGC*l^P{vKKAvl?CR*=lAyf zm6<>WKo}2S;r(UzV=Eo)oy%o$%ntPdNx!yOZlu3iaX~JM44fAXH70rePCbH-iBMxb zL&=0?cpiUDg%eOzG1HGq&0oYK9Oau>R3 zXB2#0G-Lngyt!*}EfZER7Q0fRtbgDz;qislX0gr)pi zrVx7)t|pb~cZgJTH2q=OYd{J>&fx4Gq$O8H*m5=+%$OlB?dn4i_ijc;RO>Fp09-l{ zR20N8py#GSsdjNz;^OE!2gn@o58lZQM4eB-UP|f)D2kwcqg*Giq=enstpn ze;nXLtF<8FuCb8xM#$hrnhfI?4nE!sBZ&WSrx9o*3LvK|!{9!1o$J(w$%K+vKTk!57OF@Jc^=yzM?5miQB8 z|7C~y>qsXxQW`86mfxp`z`<`h&RtzlC~;)=!l`r!;`Q?s&wW7HK85fEyc_Uz(0pD$ ppsW921pYDS|1szPkLEmE^v{r*sAsxY@W^*a`@-e(g&H>Z{tLsivta-L literal 0 HcmV?d00001 diff --git a/develop/documentation/contributing/how-to-build/index.html b/develop/documentation/contributing/how-to-build/index.html index 87f1ac152..7577d7abf 100644 --- a/develop/documentation/contributing/how-to-build/index.html +++ b/develop/documentation/contributing/how-to-build/index.html @@ -4938,6 +4938,8 @@ + + @@ -5058,6 +5060,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/contributing/how-to-contribute/index.html b/develop/documentation/contributing/how-to-contribute/index.html index 6645fc1bc..99435b9fb 100644 --- a/develop/documentation/contributing/how-to-contribute/index.html +++ b/develop/documentation/contributing/how-to-contribute/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/contributing/how-to-release/index.html b/develop/documentation/contributing/how-to-release/index.html index bbe331ac7..7d2523706 100644 --- a/develop/documentation/contributing/how-to-release/index.html +++ b/develop/documentation/contributing/how-to-release/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/index.html b/develop/documentation/extending/index.html index 8f47b3670..53bbf3cbf 100644 --- a/develop/documentation/extending/index.html +++ b/develop/documentation/extending/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/issue-provider/categories/index.html b/develop/documentation/extending/issue-provider/categories/index.html index c5d6eeca9..933200319 100644 --- a/develop/documentation/extending/issue-provider/categories/index.html +++ b/develop/documentation/extending/issue-provider/categories/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/issue-provider/helper/index.html b/develop/documentation/extending/issue-provider/helper/index.html index b1039ed39..96c0f7539 100644 --- a/develop/documentation/extending/issue-provider/helper/index.html +++ b/develop/documentation/extending/issue-provider/helper/index.html @@ -15,7 +15,7 @@ - + @@ -103,11 +103,6 @@
    @@ -4944,6 +4939,8 @@ + + @@ -5064,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + @@ -5086,17 +5104,6 @@ - - @@ -5107,32 +5114,6 @@ - - - - @@ -5734,23 +5715,6 @@ - - -
    @@ -5793,37 +5757,6 @@

    Helper

    -

    File linking

    -

    Cake.Issues provides infrastructure to get links to files on source code hosts like GitHub or Azure Repos. -This infrastructure can be used inside issue providers to generate file links which can be used inside the issue messages:

    -
    protected override IEnumerable<IIssue> InternalReadIssues()
    -{
    -    var result = new List<IIssue>();
    -
    -    var filePath = "foo.cs";
    -    var line = 10;
    -
    -    var fileLink = 
    -        this.Settings.FileLinkSettings.GetFileLink(
    -            IssueBuilder
    -                .NewIssue("Issue for creating file link", this)
    -                .InFile(filePath, line)
    -                .Create()
    -        );
    -
    -    var htmlMessage =
    -        $"This is an issues in the file <a href=\"{fileLink}\">{filePath}</a>";
    -
    -    var issue =
    -        IssueBuilder
    -            .NewIssue("MyMessage", this)
    -            .WithMessageInHtmlFormat(htmlMessage)
    -            .InFile(filePath, line)
    -            .Create();
    -
    -    return result;
    -}
    -
    diff --git a/develop/documentation/extending/issue-provider/overview/index.html b/develop/documentation/extending/issue-provider/overview/index.html index c0e447b3d..70a2b84a4 100644 --- a/develop/documentation/extending/issue-provider/overview/index.html +++ b/develop/documentation/extending/issue-provider/overview/index.html @@ -4989,6 +4989,8 @@ + + @@ -5109,6 +5111,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/issue-provider/tutorials/file-linking/index.html b/develop/documentation/extending/issue-provider/tutorials/file-linking/index.html new file mode 100644 index 000000000..4181bab24 --- /dev/null +++ b/develop/documentation/extending/issue-provider/tutorials/file-linking/index.html @@ -0,0 +1,5860 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + File links in message - Cake Issues + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + + + + + +
    + + + + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + + + + +

    File Links In Messages

    + +

    Cake Issues provides infrastructure to get links to files on source code hosts like GitHub or Azure Repos.

    +

    This infrastructure can also be used inside an issue providers InternalReadIssues method to generate file links +which can be used inside the issue messages:

    +
    protected override IEnumerable<IIssue> InternalReadIssues()
    +{
    +    var result = new List<IIssue>();
    +
    +    var filePath = "foo.cs";
    +    var line = 10;
    +
    +    var fileLink = 
    +        this.Settings.FileLinkSettings.GetFileLink(
    +            IssueBuilder
    +                .NewIssue("Issue for creating file link", this)
    +                .InFile(filePath, line)
    +                .Create()
    +        );
    +
    +    var htmlMessage =
    +        $"This is an issues in the file <a href=\"{fileLink}\">{filePath}</a>";
    +
    +    var issue =
    +        IssueBuilder
    +            .NewIssue("MyMessage", this)
    +            .WithMessageInHtmlFormat(htmlMessage)
    +            .InFile(filePath, line)
    +            .Create();
    +
    +    return result;
    +}
    +
    + + + + + + + + + + + + + + + + + +
    +
    + + + + + +
    + + + +
    + + + +
    +
    +
    +
    + +
    + + + + + + + + + + \ No newline at end of file diff --git a/develop/documentation/extending/issue-provider/tutorials/logfile-format/index.html b/develop/documentation/extending/issue-provider/tutorials/logfile-format/index.html index 02bb7e2a7..cb0c128f3 100644 --- a/develop/documentation/extending/issue-provider/tutorials/logfile-format/index.html +++ b/develop/documentation/extending/issue-provider/tutorials/logfile-format/index.html @@ -4946,6 +4946,8 @@ + + @@ -5138,6 +5140,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/issue-provider/tutorials/rule-url-resolving/index.html b/develop/documentation/extending/issue-provider/tutorials/rule-url-resolving/index.html index 58b53b26a..b11557b33 100644 --- a/develop/documentation/extending/issue-provider/tutorials/rule-url-resolving/index.html +++ b/develop/documentation/extending/issue-provider/tutorials/rule-url-resolving/index.html @@ -18,7 +18,7 @@ - + @@ -4946,6 +4946,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/issue-provider/tutorials/settings/index.html b/develop/documentation/extending/issue-provider/tutorials/settings/index.html index eb3161063..99d43e9e4 100644 --- a/develop/documentation/extending/issue-provider/tutorials/settings/index.html +++ b/develop/documentation/extending/issue-provider/tutorials/settings/index.html @@ -4946,6 +4946,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/issue-provider/tutorials/simple/index.html b/develop/documentation/extending/issue-provider/tutorials/simple/index.html index aa64323b7..f80c94b15 100644 --- a/develop/documentation/extending/issue-provider/tutorials/simple/index.html +++ b/develop/documentation/extending/issue-provider/tutorials/simple/index.html @@ -4946,6 +4946,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/pull-request-system/categories/index.html b/develop/documentation/extending/pull-request-system/categories/index.html index 6d0beb999..c57deedaf 100644 --- a/develop/documentation/extending/pull-request-system/categories/index.html +++ b/develop/documentation/extending/pull-request-system/categories/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/pull-request-system/overview/index.html b/develop/documentation/extending/pull-request-system/overview/index.html index 4fad56ca5..3f72c5af0 100644 --- a/develop/documentation/extending/pull-request-system/overview/index.html +++ b/develop/documentation/extending/pull-request-system/overview/index.html @@ -4942,6 +4942,8 @@ + + @@ -5062,6 +5064,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/report-format/categories/index.html b/develop/documentation/extending/report-format/categories/index.html index 6b14c5890..f34b03841 100644 --- a/develop/documentation/extending/report-format/categories/index.html +++ b/develop/documentation/extending/report-format/categories/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/report-format/overview/index.html b/develop/documentation/extending/report-format/overview/index.html index 3c0f46faa..58565180d 100644 --- a/develop/documentation/extending/report-format/overview/index.html +++ b/develop/documentation/extending/report-format/overview/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/extending/testing/index.html b/develop/documentation/extending/testing/index.html index 903321dbd..0abe918e7 100644 --- a/develop/documentation/extending/testing/index.html +++ b/develop/documentation/extending/testing/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/features/index.html b/develop/documentation/features/index.html index 0db188588..d225f4bba 100644 --- a/develop/documentation/features/index.html +++ b/develop/documentation/features/index.html @@ -5021,6 +5021,8 @@ + + @@ -5141,6 +5143,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/how-cake-issues-works/index.html b/develop/documentation/how-cake-issues-works/index.html index 3867fe659..9127e752b 100644 --- a/develop/documentation/how-cake-issues-works/index.html +++ b/develop/documentation/how-cake-issues-works/index.html @@ -5003,6 +5003,8 @@ + + @@ -5123,6 +5125,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/docfx/examples/index.html b/develop/documentation/issue-providers/docfx/examples/index.html index 398c855ff..7f74e3d8f 100644 --- a/develop/documentation/issue-providers/docfx/examples/index.html +++ b/develop/documentation/issue-providers/docfx/examples/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/docfx/features/index.html b/develop/documentation/issue-providers/docfx/features/index.html index 9cfd438c9..823da434b 100644 --- a/develop/documentation/issue-providers/docfx/features/index.html +++ b/develop/documentation/issue-providers/docfx/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/docfx/index.html b/develop/documentation/issue-providers/docfx/index.html index 3b526b5d1..78058a113 100644 --- a/develop/documentation/issue-providers/docfx/index.html +++ b/develop/documentation/issue-providers/docfx/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/eslint/features/index.html b/develop/documentation/issue-providers/eslint/features/index.html index dbbe92b3d..912a8ec15 100644 --- a/develop/documentation/issue-providers/eslint/features/index.html +++ b/develop/documentation/issue-providers/eslint/features/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/eslint/index.html b/develop/documentation/issue-providers/eslint/index.html index 64a5532f5..46741a6a8 100644 --- a/develop/documentation/issue-providers/eslint/index.html +++ b/develop/documentation/issue-providers/eslint/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/gitrepository/examples/index.html b/develop/documentation/issue-providers/gitrepository/examples/index.html index 77375ca25..95c74d91d 100644 --- a/develop/documentation/issue-providers/gitrepository/examples/index.html +++ b/develop/documentation/issue-providers/gitrepository/examples/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/gitrepository/features/index.html b/develop/documentation/issue-providers/gitrepository/features/index.html index 10c6c5d96..e6495cb07 100644 --- a/develop/documentation/issue-providers/gitrepository/features/index.html +++ b/develop/documentation/issue-providers/gitrepository/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/gitrepository/index.html b/develop/documentation/issue-providers/gitrepository/index.html index e83d2b3b9..7404ccada 100644 --- a/develop/documentation/issue-providers/gitrepository/index.html +++ b/develop/documentation/issue-providers/gitrepository/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/index.html b/develop/documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/index.html index 03b0ac86a..9c12aeb7d 100644 --- a/develop/documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/index.html +++ b/develop/documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/gitrepository/rules/FilePathTooLong/index.html b/develop/documentation/issue-providers/gitrepository/rules/FilePathTooLong/index.html index c26986785..77f2cd391 100644 --- a/develop/documentation/issue-providers/gitrepository/rules/FilePathTooLong/index.html +++ b/develop/documentation/issue-providers/gitrepository/rules/FilePathTooLong/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/gitrepository/rules/index.html b/develop/documentation/issue-providers/gitrepository/rules/index.html index cf5de2ec0..2f6dd3628 100644 --- a/develop/documentation/issue-providers/gitrepository/rules/index.html +++ b/develop/documentation/issue-providers/gitrepository/rules/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/index.html b/develop/documentation/issue-providers/index.html index 1aa37c1a0..0ed89ee3f 100644 --- a/develop/documentation/issue-providers/index.html +++ b/develop/documentation/issue-providers/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/inspectcode/examples/index.html b/develop/documentation/issue-providers/inspectcode/examples/index.html index f08ecda6a..4da2f4def 100644 --- a/develop/documentation/issue-providers/inspectcode/examples/index.html +++ b/develop/documentation/issue-providers/inspectcode/examples/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/inspectcode/features/index.html b/develop/documentation/issue-providers/inspectcode/features/index.html index 7775af7ea..e4b49fcd2 100644 --- a/develop/documentation/issue-providers/inspectcode/features/index.html +++ b/develop/documentation/issue-providers/inspectcode/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/inspectcode/index.html b/develop/documentation/issue-providers/inspectcode/index.html index 60e58a91f..70b47dde8 100644 --- a/develop/documentation/issue-providers/inspectcode/index.html +++ b/develop/documentation/issue-providers/inspectcode/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/markdownlint/examples/index.html b/develop/documentation/issue-providers/markdownlint/examples/index.html index 6727fdcd6..d8b007694 100644 --- a/develop/documentation/issue-providers/markdownlint/examples/index.html +++ b/develop/documentation/issue-providers/markdownlint/examples/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/markdownlint/features/index.html b/develop/documentation/issue-providers/markdownlint/features/index.html index 13e062657..41c82a814 100644 --- a/develop/documentation/issue-providers/markdownlint/features/index.html +++ b/develop/documentation/issue-providers/markdownlint/features/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/markdownlint/index.html b/develop/documentation/issue-providers/markdownlint/index.html index 186b8b0ca..61a95054d 100644 --- a/develop/documentation/issue-providers/markdownlint/index.html +++ b/develop/documentation/issue-providers/markdownlint/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/msbuild/examples/index.html b/develop/documentation/issue-providers/msbuild/examples/index.html index 3ec96dff8..a5a9b43d8 100644 --- a/develop/documentation/issue-providers/msbuild/examples/index.html +++ b/develop/documentation/issue-providers/msbuild/examples/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/msbuild/examples/read-binary-log/index.html b/develop/documentation/issue-providers/msbuild/examples/read-binary-log/index.html index 99502b095..2b3be3418 100644 --- a/develop/documentation/issue-providers/msbuild/examples/read-binary-log/index.html +++ b/develop/documentation/issue-providers/msbuild/examples/read-binary-log/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/msbuild/examples/use-custom-url-resolver/index.html b/develop/documentation/issue-providers/msbuild/examples/use-custom-url-resolver/index.html index e5331de52..6aa8e10a3 100644 --- a/develop/documentation/issue-providers/msbuild/examples/use-custom-url-resolver/index.html +++ b/develop/documentation/issue-providers/msbuild/examples/use-custom-url-resolver/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/msbuild/features/index.html b/develop/documentation/issue-providers/msbuild/features/index.html index da07883ae..588f2795c 100644 --- a/develop/documentation/issue-providers/msbuild/features/index.html +++ b/develop/documentation/issue-providers/msbuild/features/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/msbuild/index.html b/develop/documentation/issue-providers/msbuild/index.html index a627e18b1..1dfa733de 100644 --- a/develop/documentation/issue-providers/msbuild/index.html +++ b/develop/documentation/issue-providers/msbuild/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/sarif/features/index.html b/develop/documentation/issue-providers/sarif/features/index.html index 2ebf45bfa..cc904f46d 100644 --- a/develop/documentation/issue-providers/sarif/features/index.html +++ b/develop/documentation/issue-providers/sarif/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/sarif/index.html b/develop/documentation/issue-providers/sarif/index.html index 82e64a196..e427c7794 100644 --- a/develop/documentation/issue-providers/sarif/index.html +++ b/develop/documentation/issue-providers/sarif/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/tap/features/index.html b/develop/documentation/issue-providers/tap/features/index.html index 22761a0bd..a945acbf3 100644 --- a/develop/documentation/issue-providers/tap/features/index.html +++ b/develop/documentation/issue-providers/tap/features/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/tap/index.html b/develop/documentation/issue-providers/tap/index.html index bb0f3c02b..acf045a9c 100644 --- a/develop/documentation/issue-providers/tap/index.html +++ b/develop/documentation/issue-providers/tap/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/terraform/features/index.html b/develop/documentation/issue-providers/terraform/features/index.html index bd1b94fd6..93e2da5e4 100644 --- a/develop/documentation/issue-providers/terraform/features/index.html +++ b/develop/documentation/issue-providers/terraform/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/issue-providers/terraform/index.html b/develop/documentation/issue-providers/terraform/index.html index c7e87e638..3a3bf26fc 100644 --- a/develop/documentation/issue-providers/terraform/index.html +++ b/develop/documentation/issue-providers/terraform/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/overview/index.html b/develop/documentation/overview/index.html index f9df83ff0..cde763bb0 100644 --- a/develop/documentation/overview/index.html +++ b/develop/documentation/overview/index.html @@ -5084,6 +5084,8 @@ + + @@ -5204,6 +5206,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/appveyor/examples/github-pullrequest-integration/index.html b/develop/documentation/pull-request-systems/appveyor/examples/github-pullrequest-integration/index.html index 646309e2d..b65c9d769 100644 --- a/develop/documentation/pull-request-systems/appveyor/examples/github-pullrequest-integration/index.html +++ b/develop/documentation/pull-request-systems/appveyor/examples/github-pullrequest-integration/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/appveyor/examples/index.html b/develop/documentation/pull-request-systems/appveyor/examples/index.html index 249c7ad3b..4cc84ac69 100644 --- a/develop/documentation/pull-request-systems/appveyor/examples/index.html +++ b/develop/documentation/pull-request-systems/appveyor/examples/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/appveyor/examples/write-messages/index.html b/develop/documentation/pull-request-systems/appveyor/examples/write-messages/index.html index 0a15ebcc7..13c5475d9 100644 --- a/develop/documentation/pull-request-systems/appveyor/examples/write-messages/index.html +++ b/develop/documentation/pull-request-systems/appveyor/examples/write-messages/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/appveyor/features/index.html b/develop/documentation/pull-request-systems/appveyor/features/index.html index 8adb1df58..7e66e2a20 100644 --- a/develop/documentation/pull-request-systems/appveyor/features/index.html +++ b/develop/documentation/pull-request-systems/appveyor/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/appveyor/index.html b/develop/documentation/pull-request-systems/appveyor/index.html index a86be030c..1ccbbcee1 100644 --- a/develop/documentation/pull-request-systems/appveyor/index.html +++ b/develop/documentation/pull-request-systems/appveyor/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/examples/azure-pipelines/index.html b/develop/documentation/pull-request-systems/azure-devops/examples/azure-pipelines/index.html index ec0b3057d..9b8c04d47 100644 --- a/develop/documentation/pull-request-systems/azure-devops/examples/azure-pipelines/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/examples/azure-pipelines/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/examples/index.html b/develop/documentation/pull-request-systems/azure-devops/examples/index.html index a3f4b47ad..c79a48d8e 100644 --- a/develop/documentation/pull-request-systems/azure-devops/examples/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/examples/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/examples/pullrequest-id/index.html b/develop/documentation/pull-request-systems/azure-devops/examples/pullrequest-id/index.html index 5e4e5be1f..b49e8a6fb 100644 --- a/develop/documentation/pull-request-systems/azure-devops/examples/pullrequest-id/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/examples/pullrequest-id/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/examples/repository-information/index.html b/develop/documentation/pull-request-systems/azure-devops/examples/repository-information/index.html index 50bbf19ee..c0988ac4a 100644 --- a/develop/documentation/pull-request-systems/azure-devops/examples/repository-information/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/examples/repository-information/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/features/index.html b/develop/documentation/pull-request-systems/azure-devops/features/index.html index 7065757a7..474f1fa77 100644 --- a/develop/documentation/pull-request-systems/azure-devops/features/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/features/index.html @@ -5009,6 +5009,8 @@ + + @@ -5129,6 +5131,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/index.html b/develop/documentation/pull-request-systems/azure-devops/index.html index 42d4c6960..c3ddcdaa9 100644 --- a/develop/documentation/pull-request-systems/azure-devops/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/azure-devops/setup/index.html b/develop/documentation/pull-request-systems/azure-devops/setup/index.html index 256476f3b..3e18d4857 100644 --- a/develop/documentation/pull-request-systems/azure-devops/setup/index.html +++ b/develop/documentation/pull-request-systems/azure-devops/setup/index.html @@ -5027,6 +5027,8 @@ + + @@ -5147,6 +5149,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/github-actions/examples/index.html b/develop/documentation/pull-request-systems/github-actions/examples/index.html index e6697f3d5..ce9ea8f6d 100644 --- a/develop/documentation/pull-request-systems/github-actions/examples/index.html +++ b/develop/documentation/pull-request-systems/github-actions/examples/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/github-actions/examples/write-annotations/index.html b/develop/documentation/pull-request-systems/github-actions/examples/write-annotations/index.html index e671fc588..52fa01577 100644 --- a/develop/documentation/pull-request-systems/github-actions/examples/write-annotations/index.html +++ b/develop/documentation/pull-request-systems/github-actions/examples/write-annotations/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/github-actions/features/index.html b/develop/documentation/pull-request-systems/github-actions/features/index.html index 13d0d3cf4..1cf37012d 100644 --- a/develop/documentation/pull-request-systems/github-actions/features/index.html +++ b/develop/documentation/pull-request-systems/github-actions/features/index.html @@ -5000,6 +5000,8 @@ + + @@ -5120,6 +5122,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/github-actions/index.html b/develop/documentation/pull-request-systems/github-actions/index.html index b76e8b5bb..8d1e85a9a 100644 --- a/develop/documentation/pull-request-systems/github-actions/index.html +++ b/develop/documentation/pull-request-systems/github-actions/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/pull-request-systems/index.html b/develop/documentation/pull-request-systems/index.html index ed0f5ea82..4c97fdd7c 100644 --- a/develop/documentation/pull-request-systems/index.html +++ b/develop/documentation/pull-request-systems/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/recipe/configuration/index.html b/develop/documentation/recipe/configuration/index.html index facfdc78f..46d4f2269 100644 --- a/develop/documentation/recipe/configuration/index.html +++ b/develop/documentation/recipe/configuration/index.html @@ -5041,6 +5041,8 @@ + + @@ -5161,6 +5163,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/recipe/demos/index.html b/develop/documentation/recipe/demos/index.html index bad37ad3b..b9b70c17f 100644 --- a/develop/documentation/recipe/demos/index.html +++ b/develop/documentation/recipe/demos/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/recipe/index.html b/develop/documentation/recipe/index.html index a2f47df80..1d2ff4986 100644 --- a/develop/documentation/recipe/index.html +++ b/develop/documentation/recipe/index.html @@ -4942,6 +4942,8 @@ + + @@ -5062,6 +5064,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/recipe/supported-tools/index.html b/develop/documentation/recipe/supported-tools/index.html index 3342f6e50..e81ae8498 100644 --- a/develop/documentation/recipe/supported-tools/index.html +++ b/develop/documentation/recipe/supported-tools/index.html @@ -5005,6 +5005,8 @@ + + @@ -5125,6 +5127,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/recipe/tasks/index.html b/develop/documentation/recipe/tasks/index.html index a25c8b9bd..969993c40 100644 --- a/develop/documentation/recipe/tasks/index.html +++ b/develop/documentation/recipe/tasks/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/console/examples/index.html b/develop/documentation/report-formats/console/examples/index.html index c442cd382..6d69c1fbe 100644 --- a/develop/documentation/report-formats/console/examples/index.html +++ b/develop/documentation/report-formats/console/examples/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/console/features/index.html b/develop/documentation/report-formats/console/features/index.html index 08c1d3dc4..ddd1aa332 100644 --- a/develop/documentation/report-formats/console/features/index.html +++ b/develop/documentation/report-formats/console/features/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/console/index.html b/develop/documentation/report-formats/console/index.html index e5bd5a96f..1da27d3c0 100644 --- a/develop/documentation/report-formats/console/index.html +++ b/develop/documentation/report-formats/console/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/examples/custom-template/index.html b/develop/documentation/report-formats/generic/examples/custom-template/index.html index b4ac7a9ab..f36543111 100644 --- a/develop/documentation/report-formats/generic/examples/custom-template/index.html +++ b/develop/documentation/report-formats/generic/examples/custom-template/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/examples/default-template/index.html b/develop/documentation/report-formats/generic/examples/default-template/index.html index d83902c31..479ab05e9 100644 --- a/develop/documentation/report-formats/generic/examples/default-template/index.html +++ b/develop/documentation/report-formats/generic/examples/default-template/index.html @@ -4949,6 +4949,8 @@ + + @@ -5069,6 +5071,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/examples/index.html b/develop/documentation/report-formats/generic/examples/index.html index 88103fdb7..dffd07c5b 100644 --- a/develop/documentation/report-formats/generic/examples/index.html +++ b/develop/documentation/report-formats/generic/examples/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/features/index.html b/develop/documentation/report-formats/generic/features/index.html index a3bb174b3..81b45c65e 100644 --- a/develop/documentation/report-formats/generic/features/index.html +++ b/develop/documentation/report-formats/generic/features/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/index.html b/develop/documentation/report-formats/generic/index.html index 8a2088695..7ad07f47b 100644 --- a/develop/documentation/report-formats/generic/index.html +++ b/develop/documentation/report-formats/generic/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/templates/htmldatatable/index.html b/develop/documentation/report-formats/generic/templates/htmldatatable/index.html index 7f22e8210..2599453d1 100644 --- a/develop/documentation/report-formats/generic/templates/htmldatatable/index.html +++ b/develop/documentation/report-formats/generic/templates/htmldatatable/index.html @@ -5036,6 +5036,8 @@ + + @@ -5156,6 +5158,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/templates/htmldiagnostic/index.html b/develop/documentation/report-formats/generic/templates/htmldiagnostic/index.html index b4fd891f6..458f8be2d 100644 --- a/develop/documentation/report-formats/generic/templates/htmldiagnostic/index.html +++ b/develop/documentation/report-formats/generic/templates/htmldiagnostic/index.html @@ -5036,6 +5036,8 @@ + + @@ -5156,6 +5158,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/templates/htmldxdatagrid/index.html b/develop/documentation/report-formats/generic/templates/htmldxdatagrid/index.html index 2159433f0..9ab3158e6 100644 --- a/develop/documentation/report-formats/generic/templates/htmldxdatagrid/index.html +++ b/develop/documentation/report-formats/generic/templates/htmldxdatagrid/index.html @@ -5096,6 +5096,8 @@ + + @@ -5216,6 +5218,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/generic/templates/index.html b/develop/documentation/report-formats/generic/templates/index.html index 04782badb..f386254a6 100644 --- a/develop/documentation/report-formats/generic/templates/index.html +++ b/develop/documentation/report-formats/generic/templates/index.html @@ -4941,6 +4941,8 @@ + + @@ -5061,6 +5063,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/index.html b/develop/documentation/report-formats/index.html index 9184eb47b..439b9bb7d 100644 --- a/develop/documentation/report-formats/index.html +++ b/develop/documentation/report-formats/index.html @@ -4937,6 +4937,8 @@ + + @@ -5057,6 +5059,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/sarif/examples/index.html b/develop/documentation/report-formats/sarif/examples/index.html index b39dab6bf..3f613dcf6 100644 --- a/develop/documentation/report-formats/sarif/examples/index.html +++ b/develop/documentation/report-formats/sarif/examples/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/sarif/features/index.html b/develop/documentation/report-formats/sarif/features/index.html index 8704381ac..d6a16153b 100644 --- a/develop/documentation/report-formats/sarif/features/index.html +++ b/develop/documentation/report-formats/sarif/features/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/report-formats/sarif/index.html b/develop/documentation/report-formats/sarif/index.html index cc31f6d79..765a4453b 100644 --- a/develop/documentation/report-formats/sarif/index.html +++ b/develop/documentation/report-formats/sarif/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/resources/blog-posts/index.html b/develop/documentation/resources/blog-posts/index.html index 7a78f9c9e..ce9c0997a 100644 --- a/develop/documentation/resources/blog-posts/index.html +++ b/develop/documentation/resources/blog-posts/index.html @@ -4938,6 +4938,8 @@ + + @@ -5058,6 +5060,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/resources/presentations/index.html b/develop/documentation/resources/presentations/index.html index 73147fca1..6c335bb51 100644 --- a/develop/documentation/resources/presentations/index.html +++ b/develop/documentation/resources/presentations/index.html @@ -4938,6 +4938,8 @@ + + @@ -5058,6 +5060,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/supported-tools/index.html b/develop/documentation/supported-tools/index.html index b6c4a8937..42e28d079 100644 --- a/develop/documentation/supported-tools/index.html +++ b/develop/documentation/supported-tools/index.html @@ -5228,6 +5228,8 @@ + + @@ -5348,6 +5350,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/breaking-builds/breaking-builds/index.html b/develop/documentation/usage/breaking-builds/breaking-builds/index.html index 53c2d8c92..6b0490dbb 100644 --- a/develop/documentation/usage/breaking-builds/breaking-builds/index.html +++ b/develop/documentation/usage/breaking-builds/breaking-builds/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/creating-issues/creating-issues/index.html b/develop/documentation/usage/creating-issues/creating-issues/index.html index 3f46106ff..4529c1386 100644 --- a/develop/documentation/usage/creating-issues/creating-issues/index.html +++ b/develop/documentation/usage/creating-issues/creating-issues/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/creating-reports/creating-reports/index.html b/develop/documentation/usage/creating-reports/creating-reports/index.html index a7278fbbb..31e18b514 100644 --- a/develop/documentation/usage/creating-reports/creating-reports/index.html +++ b/develop/documentation/usage/creating-reports/creating-reports/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/creating-reports/index.html b/develop/documentation/usage/creating-reports/index.html index 636a8203e..caa25cbce 100644 --- a/develop/documentation/usage/creating-reports/index.html +++ b/develop/documentation/usage/creating-reports/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/index.html b/develop/documentation/usage/index.html index 6e05b972a..c07e3bb28 100644 --- a/develop/documentation/usage/index.html +++ b/develop/documentation/usage/index.html @@ -4942,6 +4942,8 @@ + + @@ -5062,6 +5064,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reading-issues/file-linking/index.html b/develop/documentation/usage/reading-issues/file-linking/index.html index de3210adb..ef883f1a1 100644 --- a/develop/documentation/usage/reading-issues/file-linking/index.html +++ b/develop/documentation/usage/reading-issues/file-linking/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reading-issues/index.html b/develop/documentation/usage/reading-issues/index.html index 7dcbecef0..4ea1884d9 100644 --- a/develop/documentation/usage/reading-issues/index.html +++ b/develop/documentation/usage/reading-issues/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reading-issues/reading-issues/index.html b/develop/documentation/usage/reading-issues/reading-issues/index.html index f17780f43..e8115efd7 100644 --- a/develop/documentation/usage/reading-issues/reading-issues/index.html +++ b/develop/documentation/usage/reading-issues/reading-issues/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reading-issues/run-information/index.html b/develop/documentation/usage/reading-issues/run-information/index.html index b39e571e9..2b4c41043 100644 --- a/develop/documentation/usage/reading-issues/run-information/index.html +++ b/develop/documentation/usage/reading-issues/run-information/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/recipe/index.html b/develop/documentation/usage/recipe/index.html index 18db059eb..bffb7ce43 100644 --- a/develop/documentation/usage/recipe/index.html +++ b/develop/documentation/usage/recipe/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/recipe/using-cake-frosting-issues-recipe/index.html b/develop/documentation/usage/recipe/using-cake-frosting-issues-recipe/index.html index 050a9e45d..187401d8b 100644 --- a/develop/documentation/usage/recipe/using-cake-frosting-issues-recipe/index.html +++ b/develop/documentation/usage/recipe/using-cake-frosting-issues-recipe/index.html @@ -5025,6 +5025,8 @@ + + @@ -5145,6 +5147,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/recipe/using-cake-issues-recipe/index.html b/develop/documentation/usage/recipe/using-cake-issues-recipe/index.html index 14267a8a3..84e8c7478 100644 --- a/develop/documentation/usage/recipe/using-cake-issues-recipe/index.html +++ b/develop/documentation/usage/recipe/using-cake-issues-recipe/index.html @@ -5007,6 +5007,8 @@ + + @@ -5127,6 +5129,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reporting-issues-to-pull-requests/custom-issue-filter/index.html b/develop/documentation/usage/reporting-issues-to-pull-requests/custom-issue-filter/index.html index 53d25e54c..82556eb8b 100644 --- a/develop/documentation/usage/reporting-issues-to-pull-requests/custom-issue-filter/index.html +++ b/develop/documentation/usage/reporting-issues-to-pull-requests/custom-issue-filter/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reporting-issues-to-pull-requests/index.html b/develop/documentation/usage/reporting-issues-to-pull-requests/index.html index 74b9dff1e..f403c7626 100644 --- a/develop/documentation/usage/reporting-issues-to-pull-requests/index.html +++ b/develop/documentation/usage/reporting-issues-to-pull-requests/index.html @@ -4939,6 +4939,8 @@ + + @@ -5059,6 +5061,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/documentation/usage/reporting-issues-to-pull-requests/report-issues-to-pull-requests/index.html b/develop/documentation/usage/reporting-issues-to-pull-requests/report-issues-to-pull-requests/index.html index b8255fc45..f3660924c 100644 --- a/develop/documentation/usage/reporting-issues-to-pull-requests/report-issues-to-pull-requests/index.html +++ b/develop/documentation/usage/reporting-issues-to-pull-requests/report-issues-to-pull-requests/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/index.html b/develop/index.html index 51cdaad0d..83b5b75f4 100644 --- a/develop/index.html +++ b/develop/index.html @@ -4967,6 +4967,8 @@ + + @@ -5087,6 +5089,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/08/22/cake-issues-v090-released/index.html b/develop/news/2020/08/22/cake-issues-v090-released/index.html index 3ce57025e..47b485525 100644 --- a/develop/news/2020/08/22/cake-issues-v090-released/index.html +++ b/develop/news/2020/08/22/cake-issues-v090-released/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/09/19/cake-issues-v091-released/index.html b/develop/news/2020/09/19/cake-issues-v091-released/index.html index 24c4784d2..e9749b118 100644 --- a/develop/news/2020/09/19/cake-issues-v091-released/index.html +++ b/develop/news/2020/09/19/cake-issues-v091-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/index.html b/develop/news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/index.html index 1aeca1616..824436830 100644 --- a/develop/news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/index.html +++ b/develop/news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/09/27/new-github-actions-addin/index.html b/develop/news/2020/09/27/new-github-actions-addin/index.html index f544e5e3f..8376deaea 100644 --- a/develop/news/2020/09/27/new-github-actions-addin/index.html +++ b/develop/news/2020/09/27/new-github-actions-addin/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/10/09/cake-issues-pullrequests-v091-released/index.html b/develop/news/2020/10/09/cake-issues-pullrequests-v091-released/index.html index 4d95112d0..8073f646a 100644 --- a/develop/news/2020/10/09/cake-issues-pullrequests-v091-released/index.html +++ b/develop/news/2020/10/09/cake-issues-pullrequests-v091-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/10/20/cake-issues-msbuild-v091-released/index.html b/develop/news/2020/10/20/cake-issues-msbuild-v091-released/index.html index 7f6b94dd0..435dd7a7e 100644 --- a/develop/news/2020/10/20/cake-issues-msbuild-v091-released/index.html +++ b/develop/news/2020/10/20/cake-issues-msbuild-v091-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/index.html b/develop/news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/index.html index 0cd849ab9..b9dfbd6b1 100644 --- a/develop/news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/index.html +++ b/develop/news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/07/27/new-addin-for-terraform-support/index.html b/develop/news/2021/07/27/new-addin-for-terraform-support/index.html index 96f9b3c7e..1688360a6 100644 --- a/develop/news/2021/07/27/new-addin-for-terraform-support/index.html +++ b/develop/news/2021/07/27/new-addin-for-terraform-support/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/07/28/cake-issues-v100-released/index.html b/develop/news/2021/07/28/cake-issues-v100-released/index.html index 882cda41a..f60b41485 100644 --- a/develop/news/2021/07/28/cake-issues-v100-released/index.html +++ b/develop/news/2021/07/28/cake-issues-v100-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/07/30/cake-issues-eslint-v101-released/index.html b/develop/news/2021/07/30/cake-issues-eslint-v101-released/index.html index f1d8248b8..51a92ca41 100644 --- a/develop/news/2021/07/30/cake-issues-eslint-v101-released/index.html +++ b/develop/news/2021/07/30/cake-issues-eslint-v101-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/index.html b/develop/news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/index.html index 322fdd8c7..6c1445434 100644 --- a/develop/news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/index.html +++ b/develop/news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/08/11/cake-issues-recipes-v110-released/index.html b/develop/news/2021/08/11/cake-issues-recipes-v110-released/index.html index b1671b559..81726d1c5 100644 --- a/develop/news/2021/08/11/cake-issues-recipes-v110-released/index.html +++ b/develop/news/2021/08/11/cake-issues-recipes-v110-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/08/19/cake-issues-recipes-v120-released/index.html b/develop/news/2021/08/19/cake-issues-recipes-v120-released/index.html index 8d74f0303..c963efc0e 100644 --- a/develop/news/2021/08/19/cake-issues-recipes-v120-released/index.html +++ b/develop/news/2021/08/19/cake-issues-recipes-v120-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/08/29/new-addin-for-printing-issues-to-console/index.html b/develop/news/2021/08/29/new-addin-for-printing-issues-to-console/index.html index 4f0936fce..5593a95ba 100644 --- a/develop/news/2021/08/29/new-addin-for-printing-issues-to-console/index.html +++ b/develop/news/2021/08/29/new-addin-for-printing-issues-to-console/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/08/31/cake-issues-markdownlint-v110-released/index.html b/develop/news/2021/08/31/cake-issues-markdownlint-v110-released/index.html index 3c0097643..6af7e6f1f 100644 --- a/develop/news/2021/08/31/cake-issues-markdownlint-v110-released/index.html +++ b/develop/news/2021/08/31/cake-issues-markdownlint-v110-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/index.html b/develop/news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/index.html index 4a6a2f3e8..a0b2884f6 100644 --- a/develop/news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/index.html +++ b/develop/news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2022/12/10/cake-issues-v200-released/index.html b/develop/news/2022/12/10/cake-issues-v200-released/index.html index ef43c8a70..37b4ac914 100644 --- a/develop/news/2022/12/10/cake-issues-v200-released/index.html +++ b/develop/news/2022/12/10/cake-issues-v200-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2023/07/22/cake-issues-v300-released/index.html b/develop/news/2023/07/22/cake-issues-v300-released/index.html index ff68d8347..42c9f861f 100644 --- a/develop/news/2023/07/22/cake-issues-v300-released/index.html +++ b/develop/news/2023/07/22/cake-issues-v300-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2023/08/16/cake-issues-recipes-v310-released/index.html b/develop/news/2023/08/16/cake-issues-recipes-v310-released/index.html index 2466457e3..d3c7a962b 100644 --- a/develop/news/2023/08/16/cake-issues-recipes-v310-released/index.html +++ b/develop/news/2023/08/16/cake-issues-recipes-v310-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2023/12/23/cake-issues-v400-released/index.html b/develop/news/2023/12/23/cake-issues-v400-released/index.html index 2aeb920c9..6551040a7 100644 --- a/develop/news/2023/12/23/cake-issues-v400-released/index.html +++ b/develop/news/2023/12/23/cake-issues-v400-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/01/14/alignment-of-addin-lifecycles/index.html b/develop/news/2024/01/14/alignment-of-addin-lifecycles/index.html index 0370db06a..a91c9e58f 100644 --- a/develop/news/2024/01/14/alignment-of-addin-lifecycles/index.html +++ b/develop/news/2024/01/14/alignment-of-addin-lifecycles/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/02/21/cake-issues-v410-released/index.html b/develop/news/2024/02/21/cake-issues-v410-released/index.html index d7a111103..b548adfcd 100644 --- a/develop/news/2024/02/21/cake-issues-v410-released/index.html +++ b/develop/news/2024/02/21/cake-issues-v410-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/04/14/cake-issues-v420-released/index.html b/develop/news/2024/04/14/cake-issues-v420-released/index.html index 83a73f035..9bd1f39c5 100644 --- a/develop/news/2024/04/14/cake-issues-v420-released/index.html +++ b/develop/news/2024/04/14/cake-issues-v420-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/04/14/new-addin-for-reading-sarif-files/index.html b/develop/news/2024/04/14/new-addin-for-reading-sarif-files/index.html index 486d6b5ff..d5ee12dfe 100644 --- a/develop/news/2024/04/14/new-addin-for-reading-sarif-files/index.html +++ b/develop/news/2024/04/14/new-addin-for-reading-sarif-files/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/04/16/cake-issues-v421-released/index.html b/develop/news/2024/04/16/cake-issues-v421-released/index.html index 02910918b..4a9579f59 100644 --- a/develop/news/2024/04/16/cake-issues-v421-released/index.html +++ b/develop/news/2024/04/16/cake-issues-v421-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/04/20/cake-issues-v430-released/index.html b/develop/news/2024/04/20/cake-issues-v430-released/index.html index 0ddecd6f6..46d7bba7c 100644 --- a/develop/news/2024/04/20/cake-issues-v430-released/index.html +++ b/develop/news/2024/04/20/cake-issues-v430-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/04/25/cake-issues-v431-released/index.html b/develop/news/2024/04/25/cake-issues-v431-released/index.html index 97cfd1b4e..cab6caffe 100644 --- a/develop/news/2024/04/25/cake-issues-v431-released/index.html +++ b/develop/news/2024/04/25/cake-issues-v431-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/05/18/cake-issues-v440-released/index.html b/develop/news/2024/05/18/cake-issues-v440-released/index.html index 3ef1faf15..10c229c70 100644 --- a/develop/news/2024/05/18/cake-issues-v440-released/index.html +++ b/develop/news/2024/05/18/cake-issues-v440-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/05/23/cake-issues-v450-released/index.html b/develop/news/2024/05/23/cake-issues-v450-released/index.html index bc6831b84..0d9cb72d3 100644 --- a/develop/news/2024/05/23/cake-issues-v450-released/index.html +++ b/develop/news/2024/05/23/cake-issues-v450-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/05/24/cake-issues-v451-released/index.html b/develop/news/2024/05/24/cake-issues-v451-released/index.html index d3049c97e..7dd99d264 100644 --- a/develop/news/2024/05/24/cake-issues-v451-released/index.html +++ b/develop/news/2024/05/24/cake-issues-v451-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/06/24/cake-issues-v460-released/index.html b/develop/news/2024/06/24/cake-issues-v460-released/index.html index 36c3855aa..be010dc17 100644 --- a/develop/news/2024/06/24/cake-issues-v460-released/index.html +++ b/develop/news/2024/06/24/cake-issues-v460-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/07/16/cake-issues-v470-released/index.html b/develop/news/2024/07/16/cake-issues-v470-released/index.html index 9b2faeab8..884e2938a 100644 --- a/develop/news/2024/07/16/cake-issues-v470-released/index.html +++ b/develop/news/2024/07/16/cake-issues-v470-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/07/17/cake-issues-v471-released/index.html b/develop/news/2024/07/17/cake-issues-v471-released/index.html index 22f0e6c4f..40a2b1c1f 100644 --- a/develop/news/2024/07/17/cake-issues-v471-released/index.html +++ b/develop/news/2024/07/17/cake-issues-v471-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/07/18/cake-issues-v472-released/index.html b/develop/news/2024/07/18/cake-issues-v472-released/index.html index db2fc9161..2a5df1e18 100644 --- a/develop/news/2024/07/18/cake-issues-v472-released/index.html +++ b/develop/news/2024/07/18/cake-issues-v472-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/07/19/cake-issues-v480-released/index.html b/develop/news/2024/07/19/cake-issues-v480-released/index.html index 00b57e594..15c222578 100644 --- a/develop/news/2024/07/19/cake-issues-v480-released/index.html +++ b/develop/news/2024/07/19/cake-issues-v480-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/07/25/cake-issues-v490-released/index.html b/develop/news/2024/07/25/cake-issues-v490-released/index.html index ec2b1c0f3..9c34e5321 100644 --- a/develop/news/2024/07/25/cake-issues-v490-released/index.html +++ b/develop/news/2024/07/25/cake-issues-v490-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/07/30/cake-issues-v4100-released/index.html b/develop/news/2024/07/30/cake-issues-v4100-released/index.html index f629d4ab9..e265e49ae 100644 --- a/develop/news/2024/07/30/cake-issues-v4100-released/index.html +++ b/develop/news/2024/07/30/cake-issues-v4100-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/08/20/cake-issues-v4101-released/index.html b/develop/news/2024/08/20/cake-issues-v4101-released/index.html index ef87747b7..d0b9c79b4 100644 --- a/develop/news/2024/08/20/cake-issues-v4101-released/index.html +++ b/develop/news/2024/08/20/cake-issues-v4101-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/10/06/cake-issues-v4110-released/index.html b/develop/news/2024/10/06/cake-issues-v4110-released/index.html index 50dcb8ae5..aa03fff5a 100644 --- a/develop/news/2024/10/06/cake-issues-v4110-released/index.html +++ b/develop/news/2024/10/06/cake-issues-v4110-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/11/05/cake-issues-v4120-released/index.html b/develop/news/2024/11/05/cake-issues-v4120-released/index.html index 29a4183d3..d2b2a4992 100644 --- a/develop/news/2024/11/05/cake-issues-v4120-released/index.html +++ b/develop/news/2024/11/05/cake-issues-v4120-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/12/02/cake-issues-v500-released/index.html b/develop/news/2024/12/02/cake-issues-v500-released/index.html index 2602c7ab2..6c0591fe7 100644 --- a/develop/news/2024/12/02/cake-issues-v500-released/index.html +++ b/develop/news/2024/12/02/cake-issues-v500-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/12/17/cake-issues-v501-released/index.html b/develop/news/2024/12/17/cake-issues-v501-released/index.html index 6fe6f2af9..61ef44a74 100644 --- a/develop/news/2024/12/17/cake-issues-v501-released/index.html +++ b/develop/news/2024/12/17/cake-issues-v501-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2024/12/21/new-website/index.html b/develop/news/2024/12/21/new-website/index.html index fbb7a99b1..363a55ab0 100644 --- a/develop/news/2024/12/21/new-website/index.html +++ b/develop/news/2024/12/21/new-website/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2025/01/01/2024-in-review/index.html b/develop/news/2025/01/01/2024-in-review/index.html index 3abfb3e4e..d0c974135 100644 --- a/develop/news/2025/01/01/2024-in-review/index.html +++ b/develop/news/2025/01/01/2024-in-review/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2025/01/03/cake-issues-v510-released/index.html b/develop/news/2025/01/03/cake-issues-v510-released/index.html index 2c106884f..85f8b3b11 100644 --- a/develop/news/2025/01/03/cake-issues-v510-released/index.html +++ b/develop/news/2025/01/03/cake-issues-v510-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2025/01/03/new-addin-for-reading-test-anything-protocol-tap-files/index.html b/develop/news/2025/01/03/new-addin-for-reading-test-anything-protocol-tap-files/index.html index a4d5cf5b4..103f50059 100644 --- a/develop/news/2025/01/03/new-addin-for-reading-test-anything-protocol-tap-files/index.html +++ b/develop/news/2025/01/03/new-addin-for-reading-test-anything-protocol-tap-files/index.html @@ -4930,6 +4930,8 @@ + + @@ -5050,6 +5052,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2025/01/05/cake-issues-v511-released/index.html b/develop/news/2025/01/05/cake-issues-v511-released/index.html index edd79ce83..48634fd57 100644 --- a/develop/news/2025/01/05/cake-issues-v511-released/index.html +++ b/develop/news/2025/01/05/cake-issues-v511-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2025/01/09/cake-issues-v520-released/index.html b/develop/news/2025/01/09/cake-issues-v520-released/index.html index bc0df924e..3a521359c 100644 --- a/develop/news/2025/01/09/cake-issues-v520-released/index.html +++ b/develop/news/2025/01/09/cake-issues-v520-released/index.html @@ -4935,6 +4935,8 @@ + + @@ -5055,6 +5057,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/2025/01/10/cake-issues-v530-released/index.html b/develop/news/2025/01/10/cake-issues-v530-released/index.html index c70fc9926..016b6dc6c 100644 --- a/develop/news/2025/01/10/cake-issues-v530-released/index.html +++ b/develop/news/2025/01/10/cake-issues-v530-released/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2020/index.html b/develop/news/archive/2020/index.html index 37c92cd44..4bd1efa48 100644 --- a/develop/news/archive/2020/index.html +++ b/develop/news/archive/2020/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2021/index.html b/develop/news/archive/2021/index.html index e4eb7ad3d..950a5b39f 100644 --- a/develop/news/archive/2021/index.html +++ b/develop/news/archive/2021/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2022/index.html b/develop/news/archive/2022/index.html index 7dab73ce7..2eb8acebc 100644 --- a/develop/news/archive/2022/index.html +++ b/develop/news/archive/2022/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2023/index.html b/develop/news/archive/2023/index.html index 6af6be8ab..cdac0d67d 100644 --- a/develop/news/archive/2023/index.html +++ b/develop/news/archive/2023/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2024/index.html b/develop/news/archive/2024/index.html index 8df79a624..4345b72ed 100644 --- a/develop/news/archive/2024/index.html +++ b/develop/news/archive/2024/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2024/page/2/index.html b/develop/news/archive/2024/page/2/index.html index a579428a0..876aad4d6 100644 --- a/develop/news/archive/2024/page/2/index.html +++ b/develop/news/archive/2024/page/2/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2024/page/3/index.html b/develop/news/archive/2024/page/3/index.html index 61640a917..a638bfc20 100644 --- a/develop/news/archive/2024/page/3/index.html +++ b/develop/news/archive/2024/page/3/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/archive/2025/index.html b/develop/news/archive/2025/index.html index 2205bebd2..5c35242e9 100644 --- a/develop/news/archive/2025/index.html +++ b/develop/news/archive/2025/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/announcements/index.html b/develop/news/category/announcements/index.html index 34333c5a6..0dc0fcc0f 100644 --- a/develop/news/category/announcements/index.html +++ b/develop/news/category/announcements/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/new-addin/index.html b/develop/news/category/new-addin/index.html index 34423c1e5..ccf0e2e19 100644 --- a/develop/news/category/new-addin/index.html +++ b/develop/news/category/new-addin/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/release-notes/index.html b/develop/news/category/release-notes/index.html index 8af85d90f..53ae1dd3c 100644 --- a/develop/news/category/release-notes/index.html +++ b/develop/news/category/release-notes/index.html @@ -4947,6 +4947,8 @@ + + @@ -5067,6 +5069,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/release-notes/page/2/index.html b/develop/news/category/release-notes/page/2/index.html index 1e8682f97..a04a9cf31 100644 --- a/develop/news/category/release-notes/page/2/index.html +++ b/develop/news/category/release-notes/page/2/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/release-notes/page/3/index.html b/develop/news/category/release-notes/page/3/index.html index ca08ea958..c65cd11f4 100644 --- a/develop/news/category/release-notes/page/3/index.html +++ b/develop/news/category/release-notes/page/3/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/release-notes/page/4/index.html b/develop/news/category/release-notes/page/4/index.html index 8c819ff4c..05292a49b 100644 --- a/develop/news/category/release-notes/page/4/index.html +++ b/develop/news/category/release-notes/page/4/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/category/release-notes/page/5/index.html b/develop/news/category/release-notes/page/5/index.html index b6353d815..581a5fa50 100644 --- a/develop/news/category/release-notes/page/5/index.html +++ b/develop/news/category/release-notes/page/5/index.html @@ -4945,6 +4945,8 @@ + + @@ -5065,6 +5067,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/index.html b/develop/news/index.html index f1662e076..485bf82f6 100644 --- a/develop/news/index.html +++ b/develop/news/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/page/2/index.html b/develop/news/page/2/index.html index 339742505..c196ff39e 100644 --- a/develop/news/page/2/index.html +++ b/develop/news/page/2/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/page/3/index.html b/develop/news/page/3/index.html index 322750c94..fe9579674 100644 --- a/develop/news/page/3/index.html +++ b/develop/news/page/3/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/page/4/index.html b/develop/news/page/4/index.html index 2640621ac..d194c0b60 100644 --- a/develop/news/page/4/index.html +++ b/develop/news/page/4/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/news/page/5/index.html b/develop/news/page/5/index.html index f5a5bc5ea..db455b142 100644 --- a/develop/news/page/5/index.html +++ b/develop/news/page/5/index.html @@ -4933,6 +4933,8 @@ + + @@ -5053,6 +5055,27 @@ + + + + + + +
  • + + + + + File Links In Messages + + + + +
  • + + + + diff --git a/develop/search/search_index.json b/develop/search/search_index.json index d2226db35..fb5895999 100644 --- a/develop/search/search_index.json +++ b/develop/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"api/","title":"API","text":""},{"location":"api/#core-addins","title":"Core Addins","text":"
    • Cake.Issues
    • Cake.Issues.Reporting
    • Cake.Issues.PullRequests
    "},{"location":"api/#issue-provider","title":"Issue Provider","text":"
    • Cake.Issues.DocFx
    • Cake.Issues.EsLint
    • Cake.Issues.GitRepository
    • Cake.Issues.InspectCode
    • Cake.Issues.Markdownlint
    • Cake.Issues.MsBuild
    • Cake.Issues.Sarif
    • Cake.Issues.Tap
    • Cake.Issues.Terraform
    "},{"location":"api/#report-formats","title":"Report Formats","text":"
    • Cake.Issues.Reporting.Console
    • Cake.Issues.Reporting.Generic
    • Cake.Issues.Reporting.Sarif
    "},{"location":"api/#pull-request-systems","title":"Pull Request Systems","text":"
    • Cake.Issues.PullRequests.AppVeyor
    • Cake.Issues.PullRequests.AzureDevOps
    • Cake.Issues.PullRequests.GitHubActions
    "},{"location":"documentation/features/","title":"Features","text":""},{"location":"documentation/features/#ready-to-use-distributions","title":"Ready To Use Distributions","text":"
    • Cake Recipe Packages

      Cake Issues recipes provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

      It handles all the parsing, integration with build and pull request systems for you, using the individual Cake Issues addins.

      Recipes

    "},{"location":"documentation/features/#reading-creating-issues","title":"Reading & Creating Issues","text":"
    • Read issues provided by tools

      The ReadIssues aliases can be used for reading issues reported by a linter to tool using an issue provider.

      There are overloads for reading using a single or multiple issue provider.

      Reading issues

    • Create issues in your build

      The NewIssue aliases can be used for creating issues in the build script.

      Creating issues

    • Support for file links

      Support for creating links to file & location on source code hosting system (GitHub, Azure Repos, etc).

      Linking to file repositories

    • Issue serialization

      Support for serializing and deserializing created issues and issues read from tools.

      Aliases

    • Support for multiple message formats

      Support for reading issues in multiple formats (Plain text, Markdown, HTML) if supported by issue provider.

    • Support for run information

      Support for passing additional run information to identify specific runs.

    "},{"location":"documentation/features/#breaking-builds","title":"Breaking builds","text":"
    • Fail builds on reported issues

      The BreakBuildOnIssues aliases can be used for failing builds if specific issues were reported.

      There are overloads for failing if issues of certain minimum priority or issue providers are found, or by passing any custom function.

      Failing builds

    "},{"location":"documentation/features/#reporting","title":"Reporting","text":"
    • Create reports

      The CreateIssueReport aliases can be used for creating reports in a supported reporting format.

      There are overloads for reading issues from a single or multiple issue provider or for passing an existing list of issues.

      Creating reports

    "},{"location":"documentation/features/#build-pull-request-system-integration","title":"Build & Pull Request System Integration","text":"
    • Add comments to pull requests

      The ReportIssuesToPullRequest aliases can be used for writing issues as comments to pull requests.

      There are overloads for reading issues from a single or multiple issue provider or for passing an existing list of issues.

      Reporting issues to pull request systems

    • Report issues to build runs

      The ReportIssuesToPullRequest aliases can be used for reporting issues to build runs.

      There are overloads for reading issues from a single or multiple issue provider or for passing an existing list of issues.

      Reporting issues to build servers

    • Issue filters

      Support for passing custom issue filter routines.

      Using custom issue filter

    • Limit reported issues

      Advanced support to limit number of maximum issues per run, across multiple runs or per issue provider through settings.

      Settings

    • Automatic comment resolving

      If supported by the pull request system, comments for issues are automatic resolved if fixed in subsequent commits.

    "},{"location":"documentation/how-cake-issues-works/","title":"How Cake Issues Works","text":"

    The Cake Issues addins are built in a modular architecture, allowing to easily enhance it for supporting additional analyzers, linters, report formats and pull request systems.

    "},{"location":"documentation/how-cake-issues-works/#cakeissues-addin","title":"Cake.Issues addin","text":"

    The Cake.Issues addin provides aliases for creating issues or reading issues using one or more issue providers.

    Support for different code analyzers and linters is provided through issue provider addins which cover a wide range of linters and tools.

    The issues are read into IIssue objects which then can be passed to Cake.Issues.Reporting addin, Cake.Issues.PullRequests addin or further processed in the build script.

    The use of issue provider addins, which contain the parsing logic for individual tool output formats, and the use of IIssue as common data structure, allows to abstract the tooling output from other concerns like integration with build systems, pull request workflow or the creation of reports.

    "},{"location":"documentation/how-cake-issues-works/#cakeissuesreporting-addin","title":"Cake.Issues.Reporting addin","text":"

    The Cake.Issues.Reporting addin provides aliases for creating reports for issues which are read or have been created using the Cake.Issues addin.

    Support for different report formats is provided through report format addins.

    "},{"location":"documentation/how-cake-issues-works/#cakeissuespullrequests-addin","title":"Cake.Issues.PullRequests addin","text":"

    The Cake.Issues.PullRequests addin provides aliases for reporting issues which are read or have been created using the Cake.Issues addin as comments to pull requests or builds.

    Support for different pull request systems is provided through pull request system addins.

    "},{"location":"documentation/overview/","title":"Introduction","text":"

    The Cake.Issues addins for the Cake build automation system offer an extensive and flexible solution for reading linting issues.

    Cake.Issues redefines issue management within the Cake build system by offering a comprehensive, universal, and extensible solution. The unique capabilities of the addins empower development teams to enforce coding standards, generate insightful reports, seamlessly incorporate various linting tools, and streamlining the integration with pull requests. With its modular architecture and extensive set of aliases, Cake.Issues provides a future-proof infrastructure for issue management in Cake builds, fostering a more efficient and adaptable development process.

    "},{"location":"documentation/overview/#unique-problem-solving","title":"Unique Problem Solving","text":"

    Some examples how Cake.Issues can help development teams to improve code quality.

    "},{"location":"documentation/overview/#break-build-on-linting-issues","title":"Break build on linting issues","text":"

    Cake.Issues provides a seamless integration, allowing you to enforce coding standards by breaking builds when linting issues are detected.

    Breaking builds

    "},{"location":"documentation/overview/#pull-requests-integration","title":"Pull Requests integration","text":"

    Ensure linting issues are promptly addressed by having them reported as comments on pull requests. Cake.Issues bridges the gap between linting tools and version control systems, fostering efficient collaboration during code reviews.

    Integrate with pull request systems

    "},{"location":"documentation/overview/#reports","title":"Reports","text":"

    Craft detailed and visually appealing reports for linting issues directly within your Cake build. The addins facilitates easy identification and resolution of linting concerns, enhancing the overall code quality.

    Creating Reports

    "},{"location":"documentation/overview/#universal-compatibility","title":"Universal Compatibility","text":""},{"location":"documentation/overview/#diverse-linting-tool-support","title":"Diverse Linting Tool Support","text":"

    Regardless of the linting tools you use, Cake.Issues ensures that you're not left out. Cake.Issues supports a variety of analyzers and linters, allowing you to incorporate new tools effortlessly while maintaining integration with existing ones.

    Supported Tools

    "},{"location":"documentation/overview/#build-system-agnosticism","title":"Build System Agnosticism","text":"

    Embrace the freedom to choose the build system that best suit your needs. If your current build system lacks tasks for reporting issues in pull requests, Cake.Issues steps in to fill that void seamlessly. In the case of using multiple CI services, Cake.Issues guarantees a consistent feature set across all of them.

    Supported Build and pull request systems

    "},{"location":"documentation/overview/#unprecedented-extensibility","title":"Unprecedented Extensibility","text":""},{"location":"documentation/overview/#modular-architecture","title":"Modular Architecture","text":"

    The Cake.Issues addin breaks away from the norm by offering a modular architecture. Comprising over 15 distinct addins, it presents a cohesive solution through more than 75 aliases for Cake builds, providing unparalleled flexibility.

    Architecture

    "},{"location":"documentation/overview/#extensible-infrastructure","title":"Extensible Infrastructure","text":"

    Designed with extensibility in mind, Cake.Issues provides extension points for supporting additional analyzers, linters,report formats, and code review systems. This adaptability ensures that your build scripts can evolve with the ever-changing landscape of development tools.

    Documentation

    "},{"location":"documentation/supported-tools/","title":"Supported Tools","text":"

    This pages lists tools known to be working with Cake Issues (1)

    1. If you have used Cake Issues with other we would like to hear from you. You can add it to this list by creating a pull request here.
    "},{"location":"documentation/supported-tools/#net","title":".NET","text":"Tool Tool Version Format Issue Provider Supported Since dupFinder Cake.Issues.DupFinder 0.8.0 InspectCode xml Cake.Issues.InspectCode 0.1.0 InspectCode >= 2024.1 SARIF Cake.Issues.Sarif 4.2.0 MsBuild Binary Log 7 Cake.Issues.MsBuild 0.6.1 MsBuild Binary Log 8 Cake.Issues.MsBuild 0.8.0 MsBuild Binary Log 9 Cake.Issues.MsBuild 2.0.0 MsBuild Binary Log 16 Cake.Issues.MsBuild 3.0.0 MsBuild Binary Log 17 Cake.Issues.MsBuild 4.0.0 MsBuild Binary Log 18 Cake.Issues.MsBuild 4.1.0 MsBuild Binary Log 20 Cake.Issues.MsBuild 4.3.0 MsBuild Binary Log 21 Cake.Issues.MsBuild 4.7.0 MsBuild Binary Log 22 Cake.Issues.MsBuild 4.10.0 MsBuild Binary Log 23 Cake.Issues.MsBuild 4.11.0 MsBuild Binary Log 24 Cake.Issues.MsBuild 4.12.0 MsBuild XmlFileLogger Cake.Issues.MsBuild 0.1.0"},{"location":"documentation/supported-tools/#ansible","title":"Ansible","text":"Tool Tool Version Format Issue Provider Supported Since Ansible-lint SARIF Cake.Issues.Sarif 4.2.0 checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#amazon-cloud-formation-templates","title":"Amazon Cloud Formation Templates","text":"Tool Tool Version Format Issue Provider Supported Since cfn-lint SARIF Cake.Issues.Sarif 4.2.0 checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#azure-resource-manager-arm","title":"Azure Resource Manager (ARM)","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#bicep","title":"Bicep","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#clojure","title":"Clojure","text":"Tool Tool Version Format Issue Provider Supported Since clj-kondo sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#copypaste-detection","title":"Copy/Paste Detection","text":"Tool Tool Version Format Issue Provider Supported Since dupFinder Cake.Issues.DupFinder 0.8.0 jscpd jscpd-sarif-reporter Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#css-scss-sass","title":"CSS, SCSS, Sass","text":"Tool Tool Version Format Issue Provider Supported Since stylelint tap Cake.Issues.Tap 5.1.0"},{"location":"documentation/supported-tools/#dockerfile","title":"Dockerfile","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 Hadolint sarif Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#github-actions","title":"GitHub Actions","text":"Tool Tool Version Format Issue Provider Supported Since actionlint SARIF Cake.Issues.Sarif 4.2.0 checkov SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#go","title":"Go","text":"Tool Tool Version Format Issue Provider Supported Since golangci-lint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#groovy","title":"Groovy","text":"Tool Tool Version Format Issue Provider Supported Since npm-groovy-lint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#helm-charts","title":"Helm charts","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#java","title":"Java","text":"Tool Tool Version Format Issue Provider Supported Since checkstyle sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#javascript","title":"JavaScript","text":"Tool Tool Version Format Issue Provider Supported Since ESLint Current json Cake.Issues.EsLint 0.1.0"},{"location":"documentation/supported-tools/#json","title":"JSON","text":"Tool Tool Version Format Issue Provider Supported Since eslint-plugin-json Cake.Issues.EsLint 0.1.0 eslint-plugin-jsonc Cake.Issues.EsLint 0.1.0"},{"location":"documentation/supported-tools/#jsx-tsx","title":"JSX & TSX","text":"Tool Tool Version Format Issue Provider Supported Since eslint-plugin-jsx-a11y Cake.Issues.EsLint 0.1.0 eslint-plugin-react Cake.Issues.EsLint 0.1.0"},{"location":"documentation/supported-tools/#kotlin","title":"Kotlin","text":"Tool Tool Version Format Issue Provider Supported Since detekt sarif Cake.Issues.Sarif 4.2.0 ktlint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#kubernetes","title":"Kubernetes","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Kubeconform tap Cake.Issues.Tap 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#markdown","title":"Markdown","text":"Tool Tool Version Format Issue Provider Supported Since DocFx Cake.Issues.DocFx 0.1.0 markdownlint resultVersion=1 Cake.Issues.Markdownlint 0.1.0 markdownlint-cli < 0.9.0 Default Cake.Issues.Markdownlint 0.2.0 markdownlint-cli >= 0.9.0 Default Cake.Issues.Markdownlint 0.3.0 markdownlint-cli >= 0.19.0 Default Cake.Issues.Markdownlint 0.8.1 markdownlint-cli >= 0.22.0 Default Cake.Issues.Markdownlint 0.8.2 markdownlint-cli json Cake.Issues.Markdownlint 1.1.0"},{"location":"documentation/supported-tools/#natural-language","title":"Natural language","text":"Tool Tool Version Format Issue Provider Supported Since textlint tap Cake.Issues.Tap 5.1.0"},{"location":"documentation/supported-tools/#openapi","title":"OpenAPI","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Spectral sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#php","title":"PHP","text":"Tool Tool Version Format Issue Provider Supported Since Psalm results.sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#protobuf","title":"Protobuf","text":"Tool Tool Version Format Issue Provider Supported Since protolint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#python","title":"Python","text":"Tool Tool Version Format Issue Provider Supported Since Bandit sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#secrets","title":"Secrets","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 DevSkim sarif Cake.Issues.Sarif 4.2.0 gitleaks sarif Cake.Issues.Sarif 4.2.0 secretlint sarif Cake.Issues.Sarif 4.2.0 semgrep sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#terraform","title":"Terraform","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Terraform Validate Cake.Issues.Terraform 1.0.0 TFLint sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#typescript","title":"TypeScript","text":"Tool Tool Version Format Issue Provider Supported Since ESLint Current json Cake.Issues.EsLint 0.1.0"},{"location":"documentation/contributing/how-to-build/","title":"How to build addins","text":""},{"location":"documentation/contributing/how-to-build/#building-addins","title":"Building addins","text":"

    Ensure the following prerequisites are fulfilled:

    • Latest .NET version installed

    To build the addins and run unit tests Cake is used:

    Windows macOS Linux
    .\\build.ps1\n
    ./build.sh\n
    ./build.sh\n

    To run only part of the build a task can be passed using the --target=<TASK> syntax:

    Task Description DotNetCore-Build Builds all addins Create-NuGet-Packages Builds an creates NuGet packages for all addins. The NuGet packages are available in the BuildArtifacts\\Packages\\NuGet directory. Test Builds all addins and runs unit tests. Coverage report is available in the BuildArtifacts\\TestCoverage directory."},{"location":"documentation/contributing/how-to-build/#building-and-running-website-locally","title":"Building and running website locally","text":"

    Ensure the following prerequisites are fulfilled:

    • Latest .NET version installed
    • Python 3 installed

    To build and serve the website Cake is used:

    Windows macOS Linux
    .\\build.ps1 --target=website\n
    ./build.sh --target=website\n
    ./build.sh --target=website\n

    Website is available on http://127.0.0.1:8000/

    "},{"location":"documentation/contributing/how-to-contribute/","title":"How to contribute","text":"

    The repositories are using GitFlow with default configuration. Development is happening on develop branch.

    To contribute:

    • Fork this repository.
    • Create a feature branch from develop.
    • Implement your changes.
    • Push your feature branch.
    • Create a pull request.

    Tip

    For getting started see issues marked with Up-for-grabs.

    "},{"location":"documentation/contributing/how-to-release/","title":"How to release addins","text":"

    See Cake.Recipe documentation how to create a new release of this addin.

    "},{"location":"documentation/extending/","title":"Extending","text":"

    Cake Issues can easily be extended with additional Issue Provider, Report Formats and Pull Request System integrations.

    "},{"location":"documentation/extending/testing/","title":"Testing","text":"

    The Cake.Issues.Testing package provides different helper classes for writing test cases for issue provider, report format or pull request system addins.

    API Documentation on fuget.org

    "},{"location":"documentation/extending/issue-provider/categories/","title":"Alias categories","text":"

    Issue provider aliases should use the IssuesAliasConstants.MainCakeAliasCategory and IssuesAliasConstants.IssueProviderCakeAliasCategory constants for defining their category:

    [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueProviderAliases\n{\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssueProvider(\n        this ICakeContext context)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/helper/","title":"Helper","text":"

    The following helpers are provider by Cake.Issues for simplifying implementation of issue providers:

    Helper Description StringPathExtensions Extensions for string for handling paths. ByteArrayExtensions Extensions for converting between strings an byte arrays."},{"location":"documentation/extending/issue-provider/helper/#file-linking","title":"File linking","text":"

    Cake.Issues provides infrastructure to get links to files on source code hosts like GitHub or Azure Repos. This infrastructure can be used inside issue providers to generate file links which can be used inside the issue messages:

    protected override IEnumerable<IIssue> InternalReadIssues()\n{\n    var result = new List<IIssue>();\n\n    var filePath = \"foo.cs\";\n    var line = 10;\n\n    var fileLink = \n        this.Settings.FileLinkSettings.GetFileLink(\n            IssueBuilder\n                .NewIssue(\"Issue for creating file link\", this)\n                .InFile(filePath, line)\n                .Create()\n        );\n\n    var htmlMessage =\n        $\"This is an issues in the file <a href=\\\"{fileLink}\\\">{filePath}</a>\";\n\n    var issue =\n        IssueBuilder\n            .NewIssue(\"MyMessage\", this)\n            .WithMessageInHtmlFormat(htmlMessage)\n            .InFile(filePath, line)\n            .Create();\n\n    return result;\n}\n
    "},{"location":"documentation/extending/issue-provider/overview/","title":"Overview","text":"

    Issue providers need to implement the IIssueProvider interface.

    "},{"location":"documentation/extending/issue-provider/overview/#base-classes","title":"Base classes","text":"

    For simplifying implementation there exists base classes from which concrete implementation can be inherited.

    Base Class Use case Tutorial BaseIssueProvider Base class for a simple issue provider implementation. Simple provider BaseConfigurableIssueProvider Base class for a issue provider with issue provider specific settings. Provider settings BaseMultiFormatIssueProvider Base class for issue providers supporting multiple log formats. Multiple log file formats support"},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/","title":"Multiple log file formats","text":"

    A single issue provider might support reading issues from multiple different log file formats. For these cases the Cake.Issue addin provides the BaseMultiFormatIssueProvider, BaseMultiFormatIssueProviderSettings and BaseLogFileFormat classes for simplifying implementation in the issue provider addin.

    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#implementing-issue-provider","title":"Implementing issue provider","text":"

    A concrete class inheriting from BaseMultiFormatIssueProvider needs to be implemented defining the concrete types.

    /// <summary>\n/// My issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log context.</param>\n/// <param name=\"settings\">Settings for reading the log file.</param>\npublic class MyIssuesProvider(ICakeLog log, MyIssuesSettings settings)\n    : BaseMultiFormatIssueProvider<MyIssuesSettings, MyIssuesProvider>(\n        log,\n        settings)\n{\n    /// <inheritdoc />\n    public override string ProviderName => \"MyIssuesProvider\";\n}\n

    Also a concrete class inheriting from BaseMultiFormatIssueProviderSettings needs to be implemented defining the concrete types. Based on the capabilities of the log file formats the appropriate constructors for reading from the file system or memory can be made public:

    /// <summary>\n/// Settings for my issue provider.\n/// </summary>\npublic class MyIssuesSettings\n    : BaseMultiFormatIssueProviderSettings<MyIssuesProvider, MyIssuesSettings>\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for reading a log file on disk.\n    /// </summary>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    public MyIssuesSettings(FilePath logFilePath, MyLogFileFormat format)\n        : base(logFilePath, format)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for a log file content in memory.\n    /// </summary>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    public MyIssuesSettings(byte[] logFileContent, MyLogFileFormat format)\n        : base(logFileContent, format)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#implementing-log-file-format-infrastructure","title":"Implementing log file format infrastructure","text":"

    An abstract class inheriting from BaseLogFileFormat needs to be implemented defining the concrete types for the issue provider:

    /// <summary>\n/// Base class for all log file formats supported by my issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log instance.</param>\npublic abstract class MyLogFileFormat(ICakeLog log)\n    : BaseLogFileFormat<MyIssuesProvider, MyIssuesSettings>(log)\n{\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#implementing-log-file-format","title":"Implementing log file format","text":"

    The different log file formats of an issue provider need to be inherited from the abstract log file format class:

    /// <summary>\n/// Concrete log format.\n/// </summary>\n/// <param name=\"log\">The Cake log instance.</param>\ninternal class MyConcreteLogFileFormat(ICakeLog log) : MyLogFileFormat(log)\n{\n    /// <inheritdoc/>\n    public override IEnumerable<IIssue> ReadIssues(\n        MyIssuesProvider issueProvider,\n        IRepositorySettings repositorySettings,\n        MyIssuesSettings issueProviderSettings)\n    {\n        issueProvider.NotNull();\n        repositorySettings.NotNull();\n        issueProviderSettings.NotNull();\n\n        var result = new List<IIssue>();\n\n        // Implement log file format logic here.\n        result.Add(\n            IssueBuilder\n                .NewIssue(\"Some message\", issueProvider)\n                .WithPriority(IssuePriority.Warning)\n                .OfRule(\"My rule\")\n                .Create());\n\n        return result;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#aliases","title":"Aliases","text":"

    For each concrete log file format a Cake property alias should be provided. Additionally an alias for reading issues with a specific format should be provided. For convenience of the user and based on the capabilities of the issue provider additional aliases for reading from the file system or from memory can be added. Finally an additional property alias for returning the provider type name should be defined.

    Alias for log file formatAlias for reading issuesAdditional convenience aliasesAlias for property type name
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/rule-url-resolving/","title":"Rule URL resolving","text":"

    For cases where additional logic is required to determine the URL for a rule, the Cake.Issue addin provides the BaseRuleDescription and BaseRuleUrlResolver classes for simplifying implementation of providing URLs linking to site providing information about issues.

    "},{"location":"documentation/extending/issue-provider/tutorials/rule-url-resolving/#implementing-ruleurlresolver","title":"Implementing RuleUrlResolver","text":"

    In the issue provider a concrete class inheriting from BaseRuleDescription should be implemented containing all properties required to determine the URL to a rule.

    The following class adds two properties Category and RuleId to the description, to handle rules following a pattern like ABC123, where ABC is the Category, and 123 is the RuleId:

    /// <summary>\n/// Class describing rules for my issue provider.\n/// </summary>\npublic class MyRuleDescription : BaseRuleDescription\n{\n    /// <summary>\n    /// Gets or sets the category of the rule.\n    /// </summary>\n    public string Category { get; set; }\n\n    /// <summary>\n    /// Gets or sets the identifier of the rule.\n    /// </summary>\n    public int RuleId { get; set; }\n}\n

    A class inheriting from BaseRuleUrlResolver needs to be implemented containing an implementation of TryGetRuleDescription for parsing rule urls to the concrete BaseRuleDescription class. Additionally different resolvers need to be registered which return the actual URL based on the rule description.

    Parsing ruleResolver registration
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n

    To use the URL resolver the ResolveRuleUrl method can be called from the issue provider:

    var resolver = new MyRuleUrlResolver();\nvar url = resolver.ResolveRuleUrl(rule)\n
    "},{"location":"documentation/extending/issue-provider/tutorials/rule-url-resolving/#support-custom-url-resolvers","title":"Support custom URL resolvers","text":"

    The AddUrlResolver method can also be called from a Cake alias to allow users of the addin to register custom resolvers. For this the URL resolver class needs to be implemented as a singleton:

    SingletonParsing ruleResolver registration
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    private static readonly Lazy<MyRuleUrlResolver> InstanceValue =\n        new Lazy<MyRuleUrlResolver>(() => new MyRuleUrlResolver());\n\n    /// <summary>\n    /// Gets the instance of the rule resolver.\n    /// </summary>\n    public static MyRuleUrlResolver Instance => InstanceValue.Value;\n\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    private static readonly Lazy<MyRuleUrlResolver> InstanceValue =\n        new Lazy<MyRuleUrlResolver>(() => new MyRuleUrlResolver());\n\n    /// <summary>\n    /// Gets the instance of the rule resolver.\n    /// </summary>\n    public static MyRuleUrlResolver Instance => InstanceValue.Value;\n\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    private static readonly Lazy<MyRuleUrlResolver> InstanceValue =\n        new Lazy<MyRuleUrlResolver>(() => new MyRuleUrlResolver());\n\n    /// <summary>\n    /// Gets the instance of the rule resolver.\n    /// </summary>\n    public static MyRuleUrlResolver Instance => InstanceValue.Value;\n\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/settings/","title":"Provider settings","text":"

    Often issue providers require specific settings. For these cases the Cake.Issue addin provides the BaseConfigurableIssueProvider and IssueProviderSettings classes for simplifying implementation in the issue provider addin.

    "},{"location":"documentation/extending/issue-provider/tutorials/settings/#implementing-issue-provider","title":"Implementing issue provider","text":"

    A concrete class inheriting from BaseConfigurableIssueProvider needs to be implemented defining the concrete settings class to use:

    /// <summary>\n/// My issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log context.</param>\n/// <param name=\"settings\">Settings for reading the log file.</param>\npublic class MyIssuesProvider(ICakeLog log, MyIssuesSettings settings)\n    : BaseConfigurableIssueProvider<MyIssuesSettings>(log, settings)\n{\n    /// <inheritdoc />\n    public override string ProviderName => \"MyIssuesProvider\";\n\n    /// <inheritdoc />\n    protected override IEnumerable<IIssue> InternalReadIssues()\n    {\n        var result = new List<IIssue>();\n\n        // Implement issue provider logic here.\n        result.Add(\n            IssueBuilder\n                .NewIssue(\"Some message\", this)\n                .WithPriority(IssuePriority.Warning)\n                .OfRule(\"My rule\")\n                .Create());\n\n        return result;\n    }\n}\n

    Also a concrete class inheriting from IssueProviderSettings needs to be implemented. Based on the capabilities of the issue provider the appropriate constructors for reading from the file system or memory can be made public:

    /// <summary>\n/// Settings for my issue provider.\n/// </summary>\npublic class MyIssuesSettings : IssueProviderSettings\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for reading a log file on disk.\n    /// </summary>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    public MyIssuesSettings(FilePath logFilePath)\n        : base(logFilePath)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for a log file content in memory.\n    /// </summary>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    public MyIssuesSettings(byte[] logFileContent)\n        : base(logFileContent)\n    {\n    }\n\n    // Add additional settings for the issue provider here.\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/settings/#aliases","title":"Aliases","text":"

    An alias for reading issues with the provider should be provided. For convenience of the user and based on the capabilities of the issue provider, additional aliases for reading from the file system or from memory can be added. Finally an additional property alias for returning the provider type name should be defined:

    Alias for reading issuesAdditional convenience aliasesAlias for property type name
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings = new MyIssuesSettings(@\"c:\\build\\issues.log\");\n    ///     var issues = ReadIssues(MyIssues(settings));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromFilePath(@\"c:\\build\\issues.log\"));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromContent(logFileContent));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n\n        return context.MyIssues(\n            new MyIssuesSettings(logFileContent.ToByteArray()));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings = new MyIssuesSettings(@\"c:\\build\\issues.log\");\n    ///     var issues = ReadIssues(MyIssues(settings));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromFilePath(@\"c:\\build\\issues.log\"));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromContent(logFileContent));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n\n        return context.MyIssues(\n            new MyIssuesSettings(logFileContent.ToByteArray()));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings = new MyIssuesSettings(@\"c:\\build\\issues.log\");\n    ///     var issues = ReadIssues(MyIssues(settings));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromFilePath(@\"c:\\build\\issues.log\"));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromContent(logFileContent));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n\n        return context.MyIssues(\n            new MyIssuesSettings(logFileContent.ToByteArray()));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/simple/","title":"Simple issue provider","text":"

    This tutorial explains how to implement a simple issue provider using the BaseIssueProvider class from the Cake.Issue addin.

    "},{"location":"documentation/extending/issue-provider/tutorials/simple/#implementing-issue-provider","title":"Implementing issue provider","text":"

    A concrete class inheriting from BaseIssueProvider needs to be implemented:

    /// <summary>\n/// My issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log context.</param>\npublic class MyIssuesProvider(ICakeLog log) : BaseIssueProvider(log)\n{\n    /// <inheritdoc />\n    public override string ProviderName => \"MyIssuesProvider\";\n\n    /// <inheritdoc />\n    protected override IEnumerable<IIssue> InternalReadIssues()\n    {\n        var result = new List<IIssue>();\n\n        // Implement issue provider logic here.\n        result.Add(\n            IssueBuilder\n                .NewIssue(\"Some message\", this)\n                .WithPriority(IssuePriority.Warning)\n                .OfRule(\"My rule\")\n                .Create());\n\n        return result;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/simple/#aliases","title":"Aliases","text":"

    An alias for reading issues with the provider and a property alias for returning the provider type name should be defined:

    Alias for reading issuesAlias for property type name
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(MyIssues());\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyIssuesProvider(context.Log);\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(MyIssues());\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyIssuesProvider(context.Log);\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    "},{"location":"documentation/extending/pull-request-system/categories/","title":"Alias categories","text":"

    Pull request system aliases should use the IssuesAliasConstants.MainCakeAliasCategory and PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory constants for defining their category:

    [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyPullRequestSystemAliases\n{\n    [CakeMethodAlias]\n    [CakeAliasCategory(PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory)]\n    public static IPullRequestSystem MyPullRequestSystem(\n        this ICakeContext context)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/pull-request-system/overview/","title":"Overview","text":"

    Pull Request Systems need to implement the IPullRequestSystem interface.

    "},{"location":"documentation/extending/pull-request-system/overview/#baseclasses","title":"BaseClasses","text":"

    For simplifying implementation there exists base classes from which concrete implementation can be inherited. BasePullRequestSystem is the main base class with the required functionality for a pull request system implementation. Additionally there exists several classes which can be implemented to support additional optional capabilities in a pull request system implementation.

    Base Class Use case Tutorial BasePullRequestSystem Base class for all pull request system implementations. BaseCheckingCommitIdCapability Base class for capability to post issues only if pull request is for a specific commit. BaseDiscussionThreadsCapability Base class for capability to read, resolve and reopen discussion threads. BaseFilteringByModifiedFilesCapability Base class for capability to filter issues to only those affecting files modified in the pull request."},{"location":"documentation/extending/report-format/categories/","title":"Alias categories","text":"

    Report format aliases should use the IssuesAliasConstants.MainCakeAliasCategory and ReportingAliasConstants.ReportingFormatCakeAliasCategory constants for defining their category:

    [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyReportFormatAliases\n{\n    [CakeMethodAlias]\n    [CakeAliasCategory(ReportingAliasConstants.ReportingFormatCakeAliasCategory)]\n    public static IIssueReportFormat MyReportFormat(\n        this ICakeContext context)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/report-format/overview/","title":"Overview","text":"

    Report formats need to implement the IIssueReportFormat interface. For simplifying implementation there exists an abstract IssueReportFormat base class from which concrete implementation can be inherited.

    "},{"location":"documentation/issue-providers/","title":"Issue Providers","text":"

    Issue provider addins are responsible for providing the output of an analyzer or linter to the Cake Issues addin.

    • DocFx \u2013 Issue provider for reading DocFx warnings
    • ESLint \u2013 Issue provider for reading ESLint issues
    • Git Repository \u2013 Issue provider for analyzing Git repositories
    • Inspect Code \u2013 Issue provider for reading JetBrains Inspect Code / ReSharper issues
    • Markdownlint \u2013 Issue provider for reading issues from markdownlint
    • MsBuild \u2013 Issue provider for reading MsBuild errors and warnings
    • Sarif \u2013 Issue provider for reading SARIF reports
    • Test Anything Protocol (TAP) \u2013 Issue provider for reading TAP reports
    • Terraform \u2013 Issue provider for reading Terraform validation output

    Tip

    See How to implement issue providers for instruction on how to implement support for additional issue providers.

    "},{"location":"documentation/issue-providers/docfx/","title":"DocFx","text":"

    Support for reading warnings reported by DocFx is implemented in the Cake.Issues.DocFx addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/docfx/examples/","title":"Examples","text":"

    To call DocFx from a Cake script the Cake.DocFx addin can be used. To read issues from DocFx log files the DocFx issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.DocFx&version=1.0.0\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.DocFx&version=5.3.0\n

    Note

    In addition to the DocFx issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.DocFx\" Version=\"1.0.0\" />\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.DocFx\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will build the DocFx project and write a log file and a task to read issues from the log file and write the number of warnings to the console:

    Cake .NET ToolCake Frosting build.cake
    var logPath = @\"c:\\build\\docfx.log\";\nvar repoRootFolder = MakeAbsolute(Directory(\"./\"));\nvar docRootPath = @\"docs\";\n\nTask(\"Build-Documentation\").Does(() =>\n{\n    // Run DocFx.\n    DocFxBuild(new DocFxBuildSettings()\n    {\n        LogPath = logPath\n    });\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Build-Documentation\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                DocFxIssuesFromFilePath(logPath, docRootPath),\n                repoRootPath);    \n\n        Information(\"{0} issues are found.\", issues.Count());\n    });\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Core.IO;\nusing Cake.Core;\nusing Cake.DocFx;\nusing Cake.DocFx.Build;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\docfx.log\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n    public string DocRootPath { get; } = \"docs\";\n}\n\n[TaskName(\"Build-Documentation\")]\npublic sealed class BuildDocumentationTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Run DocFx.\n        context.DocFxBuild(new DocFxBuildSettings()\n        {\n            LogPath = context.LogPath\n        });\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(BuildDocumentationTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.DocFxIssuesFromFilePath(\n                    context.LogPath,\n                    context.DocRootPath),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/docfx/features/","title":"Features","text":"

    The Cake.Issues.DocFx addin provides the following features.

    Tip: Running DocFx

    DocFx can be run with Cake.DocFx addin.

    "},{"location":"documentation/issue-providers/docfx/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from DocFx log files.
    "},{"location":"documentation/issue-providers/docfx/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/eslint/","title":"ESLint","text":"

    Support for reading issues reported by ESLint is implemented in the Cake.Issues.EsLint addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/eslint/features/","title":"Features","text":"

    The Cake.Issues.EsLint addin provides the following features.

    Tip: Running ESLint

    ESLint can be run with Cake.ESLint addin.

    "},{"location":"documentation/issue-providers/eslint/features/#basic-features","title":"Basic features","text":"
    • Reads issues reported by ESLint.
    • Provides URLs for all issues.
    • Support for custom URL resolving using the EsLintAddRuleUrlResolver alias.
    "},{"location":"documentation/issue-providers/eslint/features/#supported-log-file-formats","title":"Supported log file formats","text":"
    • EsLintJsonFormat alias for reading issues from log files created by ESLint json formatter.
    "},{"location":"documentation/issue-providers/eslint/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Support for custom rules can be added through a custom EsLintAddRuleUrlResolver
    "},{"location":"documentation/issue-providers/gitrepository/","title":"Git Repository","text":"

    Support for analyzing Git repositories is implemented in the Cake.Issues.GitRepository addin.

    • Features
    • Examples
    • Rules
    • API
    "},{"location":"documentation/issue-providers/gitrepository/examples/","title":"Examples","text":"

    To analyze Git repositories you need to import the Git repository issue provider:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.GitRepository&version=5.3.0\n

    Note

    In addition to the Git repository issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.GitRepository\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example prints the number of binary files which are not tracked by Git Large File Storage in a repository.

    Warning

    Checking binary files requires Git and Git Large File Storage available on the local machine.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Analyze-Repo\")\n.Does(() =>\n{\n    // Read issues.\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n    var settings =\n        new GitRepositoryIssuesSettings\n        {\n            CheckBinaryFilesTrackedByLfs = true\n        };    \n\n    var issues =\n        ReadIssues(\n            GitRepositoryIssues(settings),\n            repoRootPath);    \n\n    Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Analyze-Repo\")]\npublic sealed class AnalyzeRepoTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        // Read issues.\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n        var settings =\n            new GitRepositoryIssuesSettings\n            {\n                CheckBinaryFilesTrackedByLfs = true\n            };    \n\n        var issues =\n            context.ReadIssues(\n                context.GitRepositoryIssues(settings),\n                repoRootPath);    \n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/gitrepository/features/","title":"Features","text":"

    The Cake.Issues.GitRepository addin provides the following features.

    "},{"location":"documentation/issue-providers/gitrepository/features/#basic-features","title":"Basic features","text":"
    • Checks path length of files. See FilePathTooLong for details.
    • Checks if binary files are tracked by Git LFS. See BinaryFileNotTrackedByLfs for details.
    "},{"location":"documentation/issue-providers/gitrepository/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/gitrepository/rules/","title":"Rules","text":"
    • BinaryFileNotTrackedByLfs
    • FilePathTooLong
    "},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/","title":"BinaryFileNotTrackedByLfs","text":"Metadata Rule Id BinaryFileNotTrackedByLfs Priority Warning Available in 0.7.0 or higher"},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/#cause","title":"Cause","text":"

    A binary file in the repository is not tracked by Git Large File Storage.

    "},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/#rule-description","title":"Rule description","text":"

    By its nature Git repositories cannot handle binary files well and will keep a full copy of that file in the repository every time a change to that file is committed. Considering that you always clone the full history of a repository, and not only the latest version, using binary files in a repository considerably slow downs the operation. Git Large File Storage replaces large files with small text pointers inside the Git repository, while storing the file contents on a remote server.

    Info

    The rule assumes that all files, which are not text files are binary files. This also includes for example empty files.

    "},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/#how-to-fix-violations","title":"How to fix violations","text":"

    Track the file with Git Large File Storage.

    "},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/","title":"FilePathTooLong","text":"Metadata Rule Id FilePathTooLong Priority Warning Available in 0.7.3 or higher"},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/#cause","title":"Cause","text":"

    The path of a file in the repository is too long.

    "},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/#rule-description","title":"Rule description","text":"

    Some operating systems and applications have a limitation of maximum path length which they can handle. To guarantee proper building this length should not be exceeded.

    "},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/#how-to-fix-violations","title":"How to fix violations","text":"

    Rename the name of the file or shorten the path name.

    "},{"location":"documentation/issue-providers/inspectcode/","title":"InspectCode","text":"

    Support for reading issues reported by JetBrains InspectCode in XML format is implemented in the Cake.Issues.InspectCode addin.

    Note

    Starting from version 2024.1, the default output format of JetBrains InspectCode is Static Analysis Results Interchange Format (SARIF). The XML format, which was the default in previous versions, will soon be deprecated. Results in the XML format are still available with the -f=\"xml\" parameter.

    This issue provider is only for the deprecated XML format. For the new default SARIF format Cake.Issues.Sarif can be used.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/inspectcode/examples/","title":"Examples","text":"

    To read issues from InspectCode log files the InspectCode issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n

    Note

    In addition to the InspectCode issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will run JetBrains InspectCode and write a log file and a task to read issues from the log file and write the number of warnings to the console. JetBrains InspectCode is installed using JetBrains.ReSharper.CommandLineTools:

    Cake .NET ToolCake Frosting build.cake
    #tool \"nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2024.3.3\"\n\nvar logPath = @\"c:\\build\\inspectcode.xml\";\nvar repoRootFolder = MakeAbsolute(Directory(\"./\"));\n\nTask(\"Analyze-Project\").Does(() =>\n{\n    // Run InspectCode and enforce XML output.\n    var settings = new InspectCodeSettings() {\n        OutputFile = logPath,\n        ArgumentCustomization = x => x.Append(\"-f=xml\")\n    };\n\n    InspectCode(repoRootPath.CombineWithFilePath(\"MySolution.sln\"), settings);\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Analyze-Project\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                InspectCodeIssuesFromFilePath(logPath),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Core.IO;\nusing Cake.Core;\nusing Cake.Frosting;\nusing Cake.Common.Tools.InspectCode;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .InstallTool(\n            new Uri(\n                \"nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2024.3.3\"))\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\inspectcode.xml\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n}\n\n[TaskName(\"Analyze-Project\")]\npublic sealed class AnalyzeProjectTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Run InspectCode and enforce XML output.\n        var settings = new InspectCodeSettings() {\n            OutputFile = context.LogPath,\n            ArgumentCustomization = x => x.Append(\"-f=xml\")\n        };\n\n        context.InspectCode(\n            context.RepoRootPath.CombineWithFilePath(\"MySolution.sln\"),\n            settings);\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(AnalyzeProjectTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.InspectCodeIssuesFromFilePath(context.LogPath),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/inspectcode/features/","title":"Features","text":"

    The Cake.Issues.InspectCode addin provides the following features.

    Tip: Running InspectCode

    JetBrains InspectCode can be run using the InspectCode alias.

    "},{"location":"documentation/issue-providers/inspectcode/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from JetBrains InspectCode XML log files.
    • Provides URLs for issues containing a Wiki URL.

    Note

    Starting from version 2024.1, the default output format of JetBrains InspectCode is Static Analysis Results Interchange Format (SARIF). The XML format, which was the default in previous versions, will soon be deprecated. Results in the XML format are still available with the -f=\"xml\" parameter.

    This issue provider is only for the deprecated XML format. For the new default SARIF format Cake.Issues.Sarif can be used.

    "},{"location":"documentation/issue-providers/inspectcode/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/markdownlint/","title":"markdownlint","text":"

    Support for reading issues reported by markdownlint is implemented in the Cake.Issues.Markdownlint addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/markdownlint/examples/","title":"Examples","text":"

    To call markdownlint-cli from a Cake script the Cake.Markdownlint addin can be used. To read issues from markdownlint-cli log files the markdownlint issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Markdownlint&version=4.0.0\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.Markdownlint&version=5.3.0\n

    Note

    In addition to the markdownlint issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Markdownlint\" Version=\"4.0.0\" />\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Markdownlint\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will run markdownlint-cli and write a log file and a task to read issues from the log file and write the number of warnings to the console:

    Cake .NET ToolCake Frosting build.cake
    var logPath = @\"c:\\build\\markdownlint.log\";\nvar repoRootFolder = MakeAbsolute(Directory(\"./\"));\n\nTask(\"Lint-Documentation\").Does(() =>\n{\n    // Run markdownlint-cli.\n    var settings =\n        MarkdownlintNodeJsRunnerSettings.ForDirectory(\n            context.RepoRootPath.Combine(\"docs\"));\n    settings.OutputFile = logPath;\n    settings.ThrowOnIssue = false;\n    RunMarkdownlintNodeJs(settings);\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Lint-Documentation\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                MarkdownlintIssuesFromFilePath(\n                    logPath,\n                    MarkdownlintCliLogFileFormat),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Common.IO;\nusing Cake.Core;\nusing Cake.Core.IO;\nusing Cake.Frosting;\nusing Cake.Markdownlint;\nusing Cake.Markdownlint.NodeJs;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\markdownlint.log\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n}\n\n[TaskName(\"Lint-Documentation\")]\npublic sealed class LintDocumentationTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Run markdownlint-cli.\n        var settings =\n            MarkdownlintNodeJsRunnerSettings.ForDirectory(\n                context.RepoRootPath.Combine(\"docs\"));\n        settings.OutputFile = context.LogPath;\n        settings.ThrowOnIssue = false;\n        context.RunMarkdownlintNodeJs(settings);\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(LintDocumentationTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.MarkdownlintIssuesFromFilePath(\n                    context.LogPath,\n                    context.MarkdownlintCliLogFileFormat()),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/markdownlint/features/","title":"Features","text":"

    The Cake.Issues.Markdownlint addin provides the following features.

    Tip: Running markdownlint

    markdownlint-cli can be run with the Cake.Markdownlint addin.

    "},{"location":"documentation/issue-providers/markdownlint/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from Markdownlint logfiles.
    • Provides URLs for all issues.
    • Support for custom URL resolving using the MarkdownlintAddRuleUrlResolver alias (except for MarkdownlintCliJsonLogFileFormat).
    "},{"location":"documentation/issue-providers/markdownlint/features/#supported-log-file-formats","title":"Supported log file formats","text":"
    • MarkdownlintV1LogFileFormat alias for reading issues from Markdownlint output generated with options.resultVersion set to 1.
    • MarkdownlintCliLogFileFormat alias for reading issues from markdownlint-cli log files.
    • MarkdownlintCliJsonLogFileFormat alias for reading issues from markdownlint-cli log files created with the --json parameter.
    "},{"location":"documentation/issue-providers/markdownlint/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"MarkdownlintV1LogFileFormatMarkdownlintCliLogFileFormatMarkdownlintCliJsonLogFileFormat
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority (4)
    • IIssue.PriorityName (5)
    • IIssue.RuleId
    • IIssue.RuleUrl (6)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Always IssuePriority.Warning
    5. Always Warning
    6. Support for custom rules can be added through a custom MarkdownlintAddRuleUrlResolver
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority (4)
    • IIssue.PriorityName (5)
    • IIssue.RuleId
    • IIssue.RuleUrl (6)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Always IssuePriority.Warning
    5. Always Warning
    6. Support for custom rules can be added through a custom MarkdownlintAddRuleUrlResolver
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority (4)
    • IIssue.PriorityName (5)
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Always IssuePriority.Warning
    5. Always Warning
    "},{"location":"documentation/issue-providers/msbuild/","title":"MsBuild","text":"

    Support for reading warnings reported by MsBuild is implemented in the Cake.Issues.MsBuild.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/msbuild/features/","title":"Features","text":"

    The Cake.Issues.MsBuild addin provides the following features.

    Tip: Running MSBuild

    MSBuild can be run using the DotNet aliases or MsBuild aliases.

    "},{"location":"documentation/issue-providers/msbuild/features/#basic-features","title":"Basic features","text":"
    • Reads errors and warnings from MSBuild log files.
    • Provides URLs .NET SDK analyzers code quality rules (CA*), .NET SDK analyzers code style rules (IDE*), StyleCop analyzer rules (SA*), SonarLint rules (S*) and Roslynator rules (RCS*).
    • Support for custom URL resolving using the MsBuildAddRuleUrlResolver alias.
    "},{"location":"documentation/issue-providers/msbuild/features/#supported-log-file-formats","title":"Supported log file formats","text":"
    • MsBuildBinaryLogFileFormat alias for reading issues from binary log files.
    • MsBuildXmlFileLoggerFormat alias for reading issues from log files created by MSBuild Extension Pack XmlFileLogger.
    "},{"location":"documentation/issue-providers/msbuild/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"MsBuildBinaryLogFileFormatMsBuildXmlFileLoggerFormat
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For .NET SDK analyzers (CA*), StyleCop analyzer rules (SA*), SonarLint rules (S*) and Roslynator rules (RCS*). Support for additional rules can be added through a custom MsBuildAddRuleUrlResolver
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For .NET SDK analyzers code quality rules (CA*), .NET SDK analyzers code style rules (IDE*), StyleCop analyzer rules (SA*), SonarLint rules (S*) and Roslynator rules (RCS*). Support for additional rules can be added through a custom MsBuildAddRuleUrlResolver
    "},{"location":"documentation/issue-providers/msbuild/examples/","title":"Examples","text":"
    • Read binary log file
    • Use custom URL resolver
    "},{"location":"documentation/issue-providers/msbuild/examples/read-binary-log/","title":"Read MsBuild binary log file","text":"

    To read issues from MsBuild log files the MsBuild issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n

    Note

    In addition to the MsBuild issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will call MsBuild to build the solution and write a binary log file and a task to read issues from the binary log file and write the number of warnings to the console:

    Cake .NET ToolCake Frosting build.cake
    var logPath = @\"c:\\build\\msbuild.binlog\";\nvar repoRootPath = MakeAbsolute(Directory(\"./\"));\n\nTask(\"Build-Solution\").Does(() =>\n{\n    // Build solution.\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            logPath.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Build-Solution\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                MsBuildIssuesFromFilePath(\n                    logPath,\n                    MsBuildBinaryLogFileFormat),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Core;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\msbuild.binlog\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n}\n\n[TaskName(\"Build-Solution\")]\npublic sealed class BuildSolutionTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Build solution.\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                context.LogPath.FullPath);\n        context.DotNetBuild(\n            context.RepoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(BuildSolutionTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.MsBuildIssuesFromFilePath(\n                    context.LogPath,\n                    context.MsBuildBinaryLogFileFormat()),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n

    Tip

    When using MSBuildSettings.BinaryLogger property to write a binary log, the version of the binary log format written depends on the version of the .NET SDK.

    To avoid the risk of breaking builds when the .NET SDK is updated and introduces a new binary log format, which is not supported in the used version of Cake.Issues.MsBuild, the binary logger instance shipped as part of Cake.Issues.MsBuild is used in the above example.

    "},{"location":"documentation/issue-providers/msbuild/examples/use-custom-url-resolver/","title":"Use custom URL resolver for MsBuild issues","text":"

    Note

    This example builds on top of the Read binary log file example.

    The following example shows how URL schema for custom Roslyn analyzers can be defined.

    Before reading the issues a custom rule URL resolver can be registered to have all issues starting with CUS linking to an internal URL:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Read-Issues\")\n    .IsDependentOn(\"Build-Solution\")\n    .Does(() =>\n    {\n        // Define custom URL resolver adding URL for all rules starting with FOO.\n        MsBuildAddRuleUrlResolver(x =>\n            x.Category.ToUpperInvariant() == \"CUS\" ?\n            new Uri(\"https://myIntranet/rules/\" + x.Rule) :\n            null);\n\n        // Read issues.\n        var issues =\n            ReadIssues(\n                MsBuildIssuesFromFilePath(\n                    logPath,\n                    MsBuildBinaryLogFileFormat),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Frosting;\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(BuildSolutionTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Define custom URL resolver adding URL for all rules starting with FOO.\n        context.MsBuildAddRuleUrlResolver(x =>\n            x.Category.ToUpperInvariant() == \"CUS\" ?\n            new Uri(\"https://myIntranet/rules/\" + x.Rule) :\n            null);\n\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.MsBuildIssuesFromFilePath(\n                    context.LogPath,\n                    context.MsBuildBinaryLogFileFormat()),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/sarif/","title":"Sarif","text":"

    Support for reading issues in SARIF format is implemented in the Cake.Issues.Sarif addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/sarif/features/","title":"Features","text":"

    The Cake.Issues.Sarif addin provides the following features.

    "},{"location":"documentation/issue-providers/sarif/features/#basic-features","title":"Basic features","text":"
    • Reads issues from files in SARIF format.
    • Support for reading issues reported as suppressed by the linter
    "},{"location":"documentation/issue-providers/sarif/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/tap/","title":"Test Anything Protocol","text":"

    Support for reading issues in Test Anything Protocol (TAP) format is implemented in the Cake.Issues.Tap addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/tap/features/","title":"Features","text":"

    The Cake.Issues.Tap addin provides the following features.

    "},{"location":"documentation/issue-providers/tap/features/#basic-features","title":"Basic features","text":"
    • Reads issues from files in Test Anything Protocol (TAP) format version 13 or 14.
    "},{"location":"documentation/issue-providers/tap/features/#supported-log-file-formats","title":"Supported log file formats","text":"

    Note

    Details, like file, line / column or rule information, are not standardized in Test Anything Protocol (TAP). The GenericLogFileFormat will therefore only return issues containing the description, which might be the file name for some tools. To retrieve detailed information a tool specific log file format needs to be used which can parse the non-standardized data provided by the tool for every issue.

    • GenericLogFileFormat alias for reading issues from any Test Anything Protocol (TAP) compatible file
    • StylelintLogFileFormat alias for reading TAP files generated by stylelint.
      • Provides URLs for rules shipped with stylelint.
      • Support for custom URL resolving using the TapStylelintAddRuleUrlResolver alias.
    • TextlintLogFileFormat alias for reading TAP files generated by Textlint.
      • Provides URLs for rules shipped with Textlint.
      • Support for custom URL resolving using the TapTextlintAddRuleUrlResolver alias.
    "},{"location":"documentation/issue-providers/tap/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"GenericLogFileFormatStylelintLogFileFormatTextlintLogFileFormat
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For rules shipped with stylelint. Support for additional rules can be added through a custom TapTextlintAddRuleUrlResolver.
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For rules shipped with Textlint. Support for additional rules can be added through a custom TapStylelintAddRuleUrlResolver.
    "},{"location":"documentation/issue-providers/terraform/","title":"Terraform","text":"

    Support for reading issues reported by Terraform validate command is implemented in the Cake.Issues.Terraform addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/terraform/features/","title":"Features","text":"

    The Cake.Issues.Terraform addin provides the following features.

    Tip: Running Terraform

    Terraform can be run with Cake.Terraform addin.

    "},{"location":"documentation/issue-providers/terraform/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from Terraform validate command.
    "},{"location":"documentation/issue-providers/terraform/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/pull-request-systems/","title":"Pull Request Systems","text":"

    Pull request addins implement specific Pull Request Systems and allow the Cake Issues addin to write found issues as comments to pull requests.

    • AppVeyor \u2013 Integration with AppVeyor builds
    • Azure DevOps \u2013 Integration with Azure DevOps pull requests
    • GitHub Actions \u2013 Integration with GitHub Actions

    Tip

    See How to implement pull request systems for instruction on how to implement support for additional pull request systems.

    "},{"location":"documentation/pull-request-systems/appveyor/","title":"AppVeyor","text":"

    Support for AppVeyor is implemented in the Cake.Issues.PullRequests.AppVeyor addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/pull-request-systems/appveyor/features/","title":"Features","text":"

    The Cake.Issues.PullRequests.AppVeyor addin reports issues as messages to AppVeyor builds.

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/appveyor/features/#basic-features","title":"Basic features","text":"
    • Reports issues as messages to AppVeyor builds.
    • Messages can be written as comment to GitHub pull requests. See GitHub pull request integration for an example.
    "},{"location":"documentation/pull-request-systems/appveyor/features/#supported-capabilities","title":"Supported capabilities","text":"

    The Cake.Issues.PullRequests.AppVeyor addin doesn't support any additional capabilities.

    • Checking commit ID
    • Discussion threads
    • Filtering by modified files
    "},{"location":"documentation/pull-request-systems/appveyor/examples/","title":"Examples","text":"
    • Writting Messages To AppVeyor
    • GitHub PullRequest Integration

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/appveyor/examples/github-pullrequest-integration/","title":"GitHub pull request integration","text":"

    This example shows how to write AppVeyor messages created by Cake.Issues to GitHub pull requests.

    Issues reported as messages to AppVeyor builds can be written to a GitHub pull request using GitHub Pull Request Notification in your appveyor.yml file.

    The following example will write a comment to the GitHub pull request containing all issues which were posted as message to the AppVeyor build:

    notifications:\n- provider: GitHubPullRequest\n  template: \"{{#passed}}:white_check_mark:{{/passed}}{{#failed}}:x:{{/failed}} [Build {{&projectName}} {{buildVersion}} {{status}}]({{buildUrl}}) (commit {{commitUrl}} by @{{&commitAuthorUsername}})<p>Build messages:</p><ul>{{#jobs}}{{#messages}}<li>{{message}}<br/>{{details}}</li>{{/messages}}{{/jobs}}</ul>\"\n

    The output will look similar to this:

    "},{"location":"documentation/pull-request-systems/appveyor/examples/write-messages/","title":"Writing message to AppVeyor","text":"

    To report issues as messages to an AppVeyor build, the AppVeyor addin needs to be imported. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AppVeyor&version=5.3.0\n

    Note

    In addition to the AppVeyor pull request system the Cake.Issues and Cake.Issues.PullRequests core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AppVeyor\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    This example shows how to report issues as messages to an AppVeyor build using the AppVeyorBuilds alias:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToAppVeyor\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AppVeyorBuilds(),\n        repoRootPath);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToAppVeyor\")]\npublic sealed class ReportIssuesToAppVeyorTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AppVeyorBuilds(),\n            repoRootPath);\n    }\n}\n

    The output will look similar to this:

    "},{"location":"documentation/pull-request-systems/azure-devops/","title":"Azure DevOps","text":"

    Support for Azure DevOps is implemented in the Cake.Issues.PullRequests.AzureDevOps addin.

    • Features
    • Setup
    • Examples
    • API
    "},{"location":"documentation/pull-request-systems/azure-devops/features/","title":"Features","text":"

    The Cake.Issues.PullRequests.AzureDevOps addin provides the following features.

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/azure-devops/features/#basic-features","title":"Basic features","text":"
    • Writes issues as comments to Azure DevOps pull requests.
    • Identification of pull requests through source branch or pull request ID.
    • Comments written by the addin will be rendered with a specific icon corresponding to the state of the issue.
    • Adds rule number and, if provided by the issue provider, link to the rule description to the comment.
    • Support for issues messages formatted in Markdown format.
    "},{"location":"documentation/pull-request-systems/azure-devops/features/#supported-capabilities","title":"Supported capabilities","text":"

    The Cake.Issues.PullRequests.AzureDevOps addin supports the following capabilities.

    • Checking commit ID
    • Discussion threads
    • Filtering by modified files
    "},{"location":"documentation/pull-request-systems/azure-devops/features/#supported-authentication-methods","title":"Supported authentication methods","text":"Azure DevOps Server Azure DevOps Service Authentication method NTLM Basic authentication Personal access token OAuth Azure Active Directory

    For detailed instructions how to connect using the different methods see Setup instructions.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/","title":"Setup","text":"

    This page describes the different ways how the Cake.Issues.PullRequests.AzureDevOps addin can be setup.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#ntlm-authentication","title":"NTLM authentication","text":"

    Info

    NTLM authentication is only available for on-premise Azure DevOps Server.

    To authenticate with NTLM you can use the AzureDevOpsAuthenticationNtlm alias from the Cake.AzureDevOps addin.

    The user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#basic-authentication","title":"Basic authentication","text":"

    Info

    Basic authentication is only available for on-premise Azure DevOps Server.

    To authenticate with basic authentication you can use the AzureDevOpsAuthenticationBasic alias from the Cake.AzureDevOps addin and need to Configure Azure DevOps Server to use Basic Authentication.

    The user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#personal-access-token","title":"Personal access token","text":"

    To authenticate with an personal access token you can use the AzureDevOpsAuthenticationPersonalAccessToken alias from the Cake.AzureDevOps addin.

    If you want to use the Cake.Issues.PullRequests.AzureDevOps addin with an personal access token see Authenticate access with personal access tokens for Azure DevOps for instructions how to create a personal access token.

    The access token needs to have the scope Code (read and write) set and the user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#oauth-authentication-from-azure-pipelines","title":"OAuth authentication from Azure Pipelines","text":"

    Info

    OAuth authentication is only available for Azure DevOps Service.

    If you want to use the Cake.Issues.PullRequests.AzureDevOps addin from an Azure Pipelines you can authenticate using the OAuth token provided to the build. For this you need to enable the Allow scripts to access the OAuth token option on the build definition.

    To authenticate you can use the AzureDevOpsAuthenticationOAuth alias from the Cake.AzureDevOps addin.

    The user under which the build runs, named <projectName> Build Service (<organizationName>) (e.g. Cake.Issues-Demo Build Service (cake-contrib)), needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#entra-authentication","title":"Entra authentication","text":"

    Info

    Entra authentication is only available for Azure DevOps Service.

    To authenticate with Entra ID you can use the AzureDevOpsAuthenticationAzureActiveDirectory alias from the Cake.AzureDevOps addin.

    The user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/examples/","title":"Examples","text":"
    • Using With Pull Request ID
    • Using With Repository Remote URL And Source Branch Name
    • Using With Azure Pipelines

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/azure-devops/examples/azure-pipelines/","title":"Using with Azure Pipelines","text":"

    To write issues as comments to Azure DevOps pull requests, the Azure DevOps addin needs to be imported. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n#addin nuget:?package=Cake.AzureDevOps&version=5.0.0\n

    Note

    In addition to the Azure DevOps pull request system the Cake.Issues and Cake.Issues.PullRequests core addins and the Cake.AzureDevOps addin need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example shows a task which will call the AzureDevOpsPullRequests alias to connect to the pull request using the environment variables provided by Azure Pipelines.:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToPullRequest\").Does(() =>\n{\n    var repoRootFolder =\n        MakeAbsolute(Directory(\"./\"));\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AzureDevOpsPullRequests(),\n        repoRootPath);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath =\n            context.MakeAbsolute(context.Directory(\"./\"));\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AzureDevOpsPullRequests(),\n            repoRootPath);\n    }\n}\n

    Info

    Please note that you'll need to setup your Azure Pipelines build to Allow scripts to access the OAuth token and need to setup proper permissions.

    See OAuth authentication from Azure Pipelines for details.

    "},{"location":"documentation/pull-request-systems/azure-devops/examples/pullrequest-id/","title":"Using with pull request id","text":"

    To write issues as comments to Azure DevOps pull requests, the Azure DevOps addin needs to be imported. To determine the remote repository URL the Cake.Git addin can be used. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Git&version=5.0.1\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n#addin nuget:?package=Cake.AzureDevOps&version=5.0.0\n

    Note

    In addition to the Azure DevOps pull request system the Cake.Issues and Cake.Issues.PullRequests core addins and the Cake.AzureDevOps addin need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Git\" Version=\"{{ cake_git }}\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example shows a task which will first determine the remote repository URL and with this information call the AzureDevOpsPullRequests alias, which will authenticate through NTLM to an on-premise Azure DevOps Server instance:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToPullRequest\").Does(() =>\n{\n    var repoRootPath =\n        MakeAbsolute(Directory(\"./\"));\n    var currentBranch =\n        GitBranchCurrent(repoRootPath);\n    var repoRemoteUrl =\n        new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n    var pullRequestId = 123;\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AzureDevOpsPullRequests(\n            repoRemoteUrl,\n            pullRequestId,\n            AzureDevOpsAuthenticationNtlm()),\n        repoRootPath);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\nusing Cake.Git;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath =\n            context.MakeAbsolute(context.Directory(\"./\"));\n        var currentBranch =\n            context.GitBranchCurrent(repoRootPath);\n        var repoRemoteUrl = \n            new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n        var pullRequestId = 123;\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AzureDevOpsPullRequests(\n                repoRemoteUrl,\n                pullRequestId,\n                context.AzureDevOpsAuthenticationNtlm()),\n            repoRootPath);\n    }\n}\n
    "},{"location":"documentation/pull-request-systems/azure-devops/examples/repository-information/","title":"Using with repository remote url and source branch name","text":"

    To write issues as comments to Azure DevOps pull requests, the Azure DevOps addin needs to be imported. To determine the remote repository URL and source branch of the pull request the Cake.Git addin can be used. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Git&version=5.0.1\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n#addin nuget:?package=Cake.AzureDevOps&version=5.0.0\n

    Note

    In addition to the Azure DevOps pull request system the Cake.Issues and Cake.Issues.PullRequests core addins and the Cake.AzureDevOps addin need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Git\" Version=\"5.0.1\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example shows a task which will first determine the remote repository URL and source branch of the pull request and with this information call the AzureDevOpsPullRequests alias, which will authenticate through NTLM to an on-premise Azure DevOps Server instance:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToPullRequest\").Does(() =>\n{\n    var repoRootFolder =\n        MakeAbsolute(Directory(\"./\"));\n    var currentBranch =\n        GitBranchCurrent(repoRootFolder);\n    var repoRemoteUrl =\n        new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n    var sourceBranchName = currentBranch.CanonicalName;\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AzureDevOpsPullRequests(\n            repoRemoteUrl,\n            sourceBranchName,\n            AzureDevOpsAuthenticationNtlm()),\n        repoRootFolder);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\nusing Cake.Git;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath =\n            context.MakeAbsolute(context.Directory(\"./\"));\n        var currentBranch =\n            context.GitBranchCurrent(repoRootPath);\n        var repoRemoteUrl = \n            new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n        var sourceBranchName = currentBranch.CanonicalName;\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AzureDevOpsPullRequests(\n                repoRemoteUrl,\n                sourceBranchName,\n                context.AzureDevOpsAuthenticationNtlm()),\n            repoRootPath);\n    }\n}\n
    "},{"location":"documentation/pull-request-systems/github-actions/","title":"GitHub Actions","text":"

    Support for GitHub Actions is implemented in the Cake.Issues.PullRequests.GitHubActions addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/pull-request-systems/github-actions/features/","title":"Features","text":"

    The Cake.Issues.PullRequests.GitHubActions addin creates annotations from issues when running on GitHub actions.

    "},{"location":"documentation/pull-request-systems/github-actions/features/#basic-features","title":"Basic features","text":"
    • Reports issues as annotations to GitHub Actions builds.
    • Group issues in log output by provider and run information.
    "},{"location":"documentation/pull-request-systems/github-actions/features/#supported-capabilities","title":"Supported capabilities","text":"

    The Cake.Issues.PullRequests.GitHubActions addin doesn't support any additional capabilities.

    • Checking commit ID
    • Discussion threads
    • Filtering by modified files
    "},{"location":"documentation/pull-request-systems/github-actions/examples/","title":"Examples","text":"
    • Create Annotations In GitHub Actions
    "},{"location":"documentation/pull-request-systems/github-actions/examples/write-annotations/","title":"Create annotations in GitHub Actions","text":"

    To report issues as annotations to a GitHub Actions build, the GitHub Actions addin needs to be imported. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.GitHubActions&version=5.3.0\n

    Note

    In addition to the GitHub Actions pull request system the Cake.Issues and Cake.Issues.PullRequests core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.GitHubActions\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    This example shows how to report issues as annotations to GitHubActions build using the GitHubActionsBuilds alias:

    Cake .NET ToolCake Frosting build.cake
    Task(\"ReportIssuesToGitHubActions\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        GitHubActionsBuilds(),\n        repoRootFolder);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToAppVeyor\")]\npublic sealed class ReportIssuesToAppVeyorTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.GitHubActionsBuilds(),\n            repoRootPath);\n    }\n}\n

    The output will show up in the build log grouped by issue provider / run:

    Additionally the issues show up as annotations:

    Having issues available as annotations also means that they will be shown in pull requests on the related file / position:

    "},{"location":"documentation/recipe/","title":"Overview","text":"

    Cake.Issues recipes provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

    Integration of code analyzing and linting tools into a build pipeline often looks the similar, and differentiates mainly on the used linters, build and pull request systems. Cake.Issues recipes contain code to do all the parsing, integration with build and pull request systems for you, using the individual Cake.Issues addins. They support different linters based on the linting log files you pass it and integrate automatically with different build and pull request systems.

    There are two flavors available:

    • Cake.Issues.Recipe

      For Cake .NET Tool

    • Cake.Frosting.Issues.Recipe

      For Cake Frosting

    "},{"location":"documentation/recipe/#supported-tools","title":"Supported tools","text":"

    See supported tools for a list of supported linters, build servers and pull request systems.

    "},{"location":"documentation/recipe/#bundled-addins","title":"Bundled addins","text":"

    Cake.Issues recipes will add the following addins to your build:

    Cake.Issues.RecipeCake.Frosting.Issues.Recipe Addin Version Remarks Cake.Git 5.0.1 Only used if RepositoryInfoProvider type is set to RepositoryInfoProviderType.CakeGit. See Git repository information configuration for details. Cake.Issues 5.3.0 Cake.Issues.MsBuild 5.3.0 Cake.Issues.InspectCode 5.3.0 Cake.Issues.Markdownlint 5.3.0 Cake.Issues.EsLint 5.3.0 Cake.Issues.Sarif 5.3.0 Cake.Issues.Reporting 5.3.0 Cake.Issues.Reporting.Generic 5.3.0 Cake.Issues.Reporting.Sarif 5.3.0 Cake.Issues.PullRequests 5.3.0 Cake.Issues.PullRequests.AppVeyor 5.3.0 Cake.Issues.PullRequests.AzureDevOps 5.3.0 Cake.Issues.PullRequests.GitHubActions 5.3.0 Cake.AzureDevOps 5.0.0 Addin Version Remarks Cake.Frosting.Git 5.0.1 Only used if RepositoryInfoProvider type is set to RepositoryInfoProviderType.CakeGit. See Git repository information configuration for details. Cake.Issues 5.3.0 Cake.Frosting.Issues.MsBuild 5.3.0 Cake.Frosting.Issues.InspectCode 5.3.0 Cake.Frosting.Issues.Markdownlint 5.3.0 Cake.Frosting.Issues.EsLint 5.3.0 Cake.Frosting.Issues.Sarif 5.3.0 Cake.Frosting.Issues.Reporting 5.3.0 Cake.Frosting.Issues.Reporting.Generic 5.3.0 Cake.Frosting.Issues.Reporting.Sarif 5.3.0 Cake.Frosting.Issues.PullRequests 5.3.0 Cake.Frosting.Issues.PullRequests.AppVeyor 5.3.0 Cake.Frosting.Issues.PullRequests.AzureDevOps 5.3.0 Cake.Frosting.Issues.PullRequests.GitHubActions 5.3.0 Cake.Frosting.AzureDevOps 5.0.0"},{"location":"documentation/recipe/configuration/","title":"Configuration","text":"

    This page lists configuration properties which can be used to define the functionality and behavior of Cake.Issues recipes.

    "},{"location":"documentation/recipe/configuration/#git-repository-information","title":"Git repository information","text":"

    Cake.Issues recipes require some information about current Git repository.

    To define the Git provider in Cake.Issues.Recipe set the global variable RepositoryInfoProvider. To define the Git provider in Cake.Frosting.Issues.Recipe pass the value to the constructor of IssueContext.

    The following providers are supported:

    Provider Description RepositoryInfoProviderType.CakeGit Read repository information using Cake.Git addin. Requires system to be compatible with Cake.Git addin. RepositoryInfoProviderType.Cli Read repository information using Git CLI. Requires Git CLI to be available in path.

    By default Cake.Git addin will be used.

    "},{"location":"documentation/recipe/configuration/#general","title":"General","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters Property Default Value Description OutputDirectory BuildArtifacts Path to the output directory. A relative path will be relative to the current working directory. BuildIdentifier string.Empty Identifier for the build run. If set this identifier will be used to identify to artifacts provided by the build if building on multiple configurations. IssuesContext.Parameters Property Default Value Description OutputDirectory BuildArtifacts Path to the output directory. A relative path will be relative to the current working directory. BuildIdentifier string.Empty Identifier for the build run. If set this identifier will be used to identify to artifacts provided by the build if building on multiple configurations."},{"location":"documentation/recipe/configuration/#input-files","title":"Input files","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.InputFiles Methods Description AddMsBuildXmlFileLoggerLogFilePath() Adds a path to a MSBuild log file created by XmlFileLogger. AddMsBuildXmlFileLoggerLogFileContent() Adds content of a MSBuild log file created by XmlFileLogger. AddMsBuildBinaryLogFilePath() Adds a path to a MSBuild binary log file. AddMsBuildBinaryLogFileContent() Adds content of a MSBuild binary log file. AddInspectCodeLogFilePath() Adds a path to a JetBrains InspectCode log file. AddInspectCodeLogFileContent() Adds content of a JetBrains InspectCode log file. AddMarkdownlintCliLogFilePath() Adds a path to a markdownlint-cli log file. AddMarkdownlintCliLogFileContent() Adds content of a markdownlint-cli log file. AddMarkdownlintCliJsonLogFilePath() Adds a path to a markdownlint-cli log file writting with --json. AddMarkdownlintCliJsonLogFileContent() Adds content of a markdownlint-cli log file writting with --json. AddMarkdownlintV1LogFilePath() Adds a path to a markdownlint log file in version 1. AddMarkdownlintV1LogFileContent() Adds content of a markdownlint log file in version 1. AddEsLintJsonLogFilePath() Adds a path to a ESLint log file generated by the ESLint json formatter. AddEsLintJsonLogFileContent() Adds content of a ESLint log file generated by the ESLint json formatter. AddSarifLogFilePath() Adds a path to a SARIF log file. AddSarifLogFileContent() Adds content of a SARIF log file. IssuesContext.Parameters.InputFiles Methods Description AddMsBuildXmlFileLoggerLogFilePath() Adds a path to a MSBuild log file created by XmlFileLogger. AddMsBuildXmlFileLoggerLogFileContent() Adds content of a MSBuild log file created by XmlFileLogger. AddMsBuildBinaryLogFilePath() Adds a path to a MSBuild binary log file. AddMsBuildBinaryLogFileContent() Adds content of a MSBuild binary log file. AddInspectCodeLogFilePath() Adds a path to a JetBrains InspectCode log file. AddInspectCodeLogFileContent() Adds content of a JetBrains InspectCode log file. AddMarkdownlintCliLogFilePath() Adds a path to a markdownlint-cli log file. AddMarkdownlintCliLogFileContent() Adds content of a markdownlint-cli log file. AddMarkdownlintCliJsonLogFilePath() Adds a path to a markdownlint-cli log file writting with --json. AddMarkdownlintCliJsonLogFileContent() Adds content of a markdownlint-cli log file writting with --json. AddMarkdownlintV1LogFilePath() Adds a path to a markdownlint log file in version 1. AddMarkdownlintV1LogFileContent() Adds content of a markdownlint log file in version 1. AddEsLintJsonLogFilePath() Adds a path to a ESLint log file generated by the ESLint json formatter. AddEsLintJsonLogFileContent() Adds content of a ESLint log file generated by the ESLint json formatter. AddSarifLogFilePath() Adds a path to a SARIF log file. AddSarifLogFileContent() Adds content of a SARIF log file."},{"location":"documentation/recipe/configuration/#report-creation","title":"Report creation","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.Reporting Property Default Value Description ShouldCreateFullIssuesReport true Indicates whether full issues report should be created. FullIssuesReportSettings GenericIssueReportTemplate.HtmlDxDataGrid template with DevExtremeTheme.MaterialBlueLight theme. Settings for creating the full issues report. See Template Gallery for possible options. ShouldCreateSarifReport true Indicates whether a report in SARIF format should be created. ShouldReportIssuesToConsole false Indicates whether issues should be reported to the console. ReportToConsoleSettings Settings for reporting issues to the console. IssuesContext.Parameters.Reporting Property Default Value Description ShouldCreateFullIssuesReport true Indicates whether full issues report should be created. FullIssuesReportSettings GenericIssueReportTemplate.HtmlDxDataGrid template with DevExtremeTheme.MaterialBlueLight theme. Settings for creating the full issues report. See Template Gallery for possible options. ShouldCreateSarifReport true Indicates whether a report in SARIF format should be created. ShouldReportIssuesToConsole false Indicates whether issues should be reported to the console. ReportToConsoleSettings Settings for reporting issues to the console."},{"location":"documentation/recipe/configuration/#build-server-integration","title":"Build server integration","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.BuildServer Property Default Value Description ShouldReportIssuesToBuildServer true Indicates whether issues should be reported to the build server. ShouldPublishFullIssuesReport true Indicates whether full issues report should be published as artifact to the build system. ShouldPublishSarifReport true Indicates whether report int SARIF format shoudl be published as artifact to the build system. ShouldCreateSummaryIssuesReport true Indicates whether summary issues report should be created. IssuesContext.Parameters.BuildServer Property Default Value Description ShouldReportIssuesToBuildServer true Indicates whether issues should be reported to the build server. ShouldPublishFullIssuesReport true Indicates whether full issues report should be published as artifact to the build system. ShouldPublishSarifReport true Indicates whether report int SARIF format shoudl be published as artifact to the build system. ShouldCreateSummaryIssuesReport true Indicates whether summary issues report should be created."},{"location":"documentation/recipe/configuration/#pull-request-integration","title":"Pull request integration","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.PullRequestSystem Property Default Value Description ShouldReportIssuesToPullRequest true Indicates whether issues should be reported to the pull request system. MaxIssuesToPost null Global number of issues which should be posted at maximum over all issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't set a global limit. MaxIssuesToPostAcrossRuns null Global number of issues which should be posted at maximum over all issue providers and across multiple runs. Issues are filtered by priority and issues with a file path are prioritized. null won't set a limit across multiple runs. MaxIssuesToPostForEachIssueProvider 100 Number of issues which should be posted at maximum for each issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't limit issues per issue provider. ProviderIssueLimits Empty Issue limits for individual issue provider. The key must be the IIssue.ProviderType of a specific provider to which the limits should be applied to. IssueFilters Empty List of filter functions which should be applied before posting issues to pull requests. ShouldSetPullRequestStatus true Indicates whether a status on the pull request should be set if there are any issues found. ShouldSetSeparatePullRequestStatusForEachIssueProviderAndRun true Indicates whether a separate status should be set for issues of every issue provider and run. IssuesContext.Parameters.PullRequestSystem Property Default Value Description ShouldReportIssuesToPullRequest true Indicates whether issues should be reported to the pull request system. MaxIssuesToPost null Global number of issues which should be posted at maximum over all issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't set a global limit. MaxIssuesToPostAcrossRuns null Global number of issues which should be posted at maximum over all issue providers and across multiple runs. Issues are filtered by priority and issues with a file path are prioritized. null won't set a limit across multiple runs. MaxIssuesToPostForEachIssueProvider 100 Number of issues which should be posted at maximum for each issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't limit issues per issue provider. ProviderIssueLimits Empty Issue limits for individual issue provider. The key must be the IIssue.ProviderType of a specific provider to which the limits should be applied to. IssueFilters Empty List of filter functions which should be applied before posting issues to pull requests. ShouldSetPullRequestStatus true Indicates whether a status on the pull request should be set if there are any issues found. ShouldSetSeparatePullRequestStatusForEachIssueProviderAndRun true Indicates whether a separate status should be set for issues of every issue provider and run."},{"location":"documentation/recipe/configuration/#build-breaking","title":"Build breaking","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.BuildBreaking Property Default Value Description ShouldFailBuildOnIssues false Indicates whether build should fail if any issues are found. MinimumPriority IssuePriority.Undefined The minimum priority of issues considered to fail the build. If set to IssuePriority.Undefined, all issues are considered. IssueProvidersToConsider [] List of issue provider types to consider. IssueProvidersToIgnore [] List of issue provider types to ignore. IssuesContext.Parameters.BuildBreaking Property Default Value Description ShouldFailBuildOnIssues false Indicates whether build should fail if any issues are found. MinimumPriority IssuePriority.Undefined The minimum priority of issues considered to fail the build. If set to IssuePriority.Undefined, all issues are considered. IssueProvidersToConsider [] List of issue provider types to consider. IssueProvidersToIgnore [] List of issue provider types to ignore."},{"location":"documentation/recipe/demos/","title":"Demos","text":"

    There are demo setups available for different combinations of build servers and repositories which you can fork and to which you can create pull requests to test the recipe functionality.

    Recipe Build Server Repository Cake.Issues.Recipe Azure Pipelines Azure Repos"},{"location":"documentation/recipe/supported-tools/","title":"Supported tools","text":"

    Cake.Issues recipes support reading issues from different tools and integrates with different build and pull request systems.

    "},{"location":"documentation/recipe/supported-tools/#tools","title":"Tools","text":"

    Cake.Issues recipes support reading issues from output of the following tools:

    Cake.Issues.RecipeCake.Frosting.Issues.Recipe Tool Format IssuesParameters.InputFiles Method MsBuild MSBuild Extension Pack XmlFileLogger AddMsBuildXmlFileLoggerLogFile*() MsBuild Binary Log File AddMsBuildBinaryLogFile*() JetBrains InspectCode (ReSharper) xml AddInspectCodeLogFile*() markdownlint markdownlint-cli default format AddMarkdownlintCliLogFile*() markdownlint markdownlint-cli with --json AddMarkdownlintCliJsonLogFile*() markdownlint markdownlint version 1 AddMarkdownlintV1LogFile*() ESLint json formatter AddEsLintJsonLogFile*() Any SARIF compatible tool SARIF AddSarifLogFile*() Tool Format IssuesContext.Parameters.InputFiles Method MsBuild MSBuild Extension Pack XmlFileLogger AddMsBuildXmlFileLoggerLogFile*() MsBuild Binary Log File AddMsBuildBinaryLogFile*() JetBrains InspectCode (ReSharper) xml AddInspectCodeLogFile*() markdownlint markdownlint-cli default format AddMarkdownlintCliLogFile*() markdownlint markdownlint-cli with --json AddMarkdownlintCliJsonLogFile*() markdownlint markdownlint version 1 AddMarkdownlintV1LogFile*() ESLint json formatter AddEsLintJsonLogFile*() Any SARIF compatible tool SARIF AddSarifLogFile*()

    Tip

    See Supported tools for a list of tools supporting the SARIF format.

    "},{"location":"documentation/recipe/supported-tools/#build-systems","title":"Build systems","text":"

    Cake.Issues recipes integrates with the following build systems:

    AppVeyorAzure PipelinesGitHub Actions
    • Write issues to build server
    • Issues summary
    • Full issues report
    • Write issues to build server (1)
    • Issues summary
    • Full issues report
    1. Only first 10
    • Write issues to build server
    • Issues summary
    • Full issues report
    "},{"location":"documentation/recipe/supported-tools/#pull-request-systems","title":"Pull request systems","text":"

    Cake.Issues recipes integrates with the following pull request systems:

    Azure ReposGitHub
    • Write issues to pull requests
    • Set pull request status
    • Write issues to pull requests (1)
    • Set pull request status
    1. When build from GitHub Actions
    "},{"location":"documentation/recipe/tasks/","title":"Tasks","text":"

    Cake.Issues recipes provide the following tasks to your build script:

    Cake.Issues.RecipeCake.Frosting.Issues.Recipe Task Description IssuesBuildTasks property Issues Main tasks for issue management integration. IssuesTask Read-Issues Reads issues from the provided log files. ReadIssuesTask Create-FullIssuesReport Creates issue report. CreateFullIssuesReportTask Publish-IssuesArtifacts Publish artifacts to build server. PublishIssuesArtifactsTask Report-IssuesToBuildServer Report issues to build server. ReportIssuesToBuildServerTask Create-SummaryIssuesReport Creates a summary issue report. CreateSummaryIssuesReportTask Report-IssuesToPullRequest Report issues to pull request. ReportIssuesToPullRequestTask Set-PullRequestIssuesState Set pull request status. SetPullRequestIssuesStateTask Report-IssuesToConsole Report issues to console. ReportIssuesToConsoleTask Task Description Task type Issues Main tasks for issue management integration. Cake.Frosting.Issues.Recipe. IssuesTask Read-Issues Reads issues from the provided log files. Cake.Frosting.Issues.Recipe. ReadIssuesTask Create-FullIssuesReport Creates issue report. Cake.Frosting.Issues.Recipe. CreateFullIssuesReportTask Publish-IssuesArtifacts Publish artifacts to build server. Cake.Frosting.Issues.Recipe. PublishIssuesArtifactsTask Report-IssuesToBuildServer Report issues to build server. Cake.Frosting.Issues.Recipe. ReportIssuesToBuildServerTask Create-SummaryIssuesReport Creates a summary issue report. Cake.Frosting.Issues.Recipe. CreateSummaryIssuesReportTask Report-IssuesToPullRequest Report issues to pull request. Cake.Frosting.Issues.Recipe. ReportIssuesToPullRequestTask Set-PullRequestIssuesState Set pull request status. Cake.Frosting.Issues.Recipe. SetPullRequestIssuesStateTask Report-IssuesToConsole Report issues to console. Cake.Frosting.Issues.Recipe. ReportIssuesToConsoleTask"},{"location":"documentation/report-formats/","title":"Report Formats","text":"

    Report format addins implement specific report formats and allow the Cake Issues addin to create reports in the specific format.

    • Console \u2013 Support for reporting issues to the console
    • Generic \u2013 Support for creating reports in any text based format (HTML, Markdown, ...)
    • Sarif \u2013 Support for creating reports in SARIF format

    Tip

    See How to implement report format for instruction on how to implement support for additional report formats.

    "},{"location":"documentation/report-formats/console/","title":"Console","text":"

    Support for printing issues to the console is implemented in the a Cake.Issues.Reporting.Console addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/report-formats/console/examples/","title":"Examples","text":"

    To report issues to the console the Console report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Console&version=5.3.0\n

    Note

    In addition to the Console report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Console\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will print issues logged as warnings by MsBuild to the console.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    // Build MySolution.sln solution in the repository root folder and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Write issues to console.\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            msBuildLogFile,\n            MsBuildBinaryLogFileFormat),\n        ConsoleIssueReportFormat(\n            new ConsoleIssueReportFormatSettings\n            {\n                GroupByRule = true,\n                ShowProviderSummary = true,\n                ShowPrioritySummary = true\n            }),\n        repoRootPath,\n        string.Empty);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Write issues to console.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.ConsoleIssueReportFormat(\n                new ConsoleIssueReportFormatSettings\n                {\n                    GroupByRule = true,\n                    ShowProviderSummary = true,\n                    ShowPrioritySummary = true\n                }),\n            repoRootPath,\n            string.Empty);\n    }\n}\n
    "},{"location":"documentation/report-formats/console/features/","title":"Features","text":"

    The Cake.Issues.Reporting.Console addin provides the following features:

    • Prints issues containing line and column information.
    • Group issues by rule

    Reports:

    • Number of issues by provider
    • Number of issues by priority for every provider and run
    "},{"location":"documentation/report-formats/generic/","title":"Generic","text":"

    Support for creating reports in any text based format like HTML or Markdown is implemented in the Cake.Issues.Reporting.Generic addin.

    • Features
    • Examples
    • Template Gallery
    • API
    "},{"location":"documentation/report-formats/generic/features/","title":"Features","text":"

    The Cake.Issues.Reporting.Generic addin provides the following features:

    • Creates reports in any text based format like HTML or Markdown.
    • Provides out of the box templates
    • Possibility to use custom templates using Razor

    Info

    See Template Gallery for a list of available out of the box and 3rd party templates.

    "},{"location":"documentation/report-formats/generic/examples/","title":"Examples","text":"
    • Embedded Default Template
    • Custom Template
    "},{"location":"documentation/report-formats/generic/examples/custom-template/","title":"Custom template","text":"

    Info

    If you create a universally usable custom template we're happy to package it with the addin. To have it included in the addin please create a pull request with your contribution.

    To create custom HTML reports the Generic report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Generic&version=5.3.0\n

    Note

    In addition to the Generic report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Generic\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will create a HTML report for issues logged as warnings by MsBuild using a custom template.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"c:\\repo\");\n\n    // Build MySolution.sln solution in the repository root folder\n    // and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new MSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile)\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\"),\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Create HTML report using Diagnostic template.\n    CreateIssueReport(\n        new List<IIssueProvider>\n        {\n            MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                MsBuildBinaryLogFileFormat)\n        },\n        GenericIssueReportFormatFromFilePath(\n            @\"c:\\ReportTemplate.cshtml\"),\n        repoRootFolder,\n        @\"c:\\report.html\");\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder\n        // and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Write issues to console.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.GenericIssueReportFormatFromFilePath(\n                @\"c:\\ReportTemplate.cshtml\"),\n            repoRootPath,\n            @\"c:\\report.html\");\n    }\n}\n

    The template looks like this:

    ReportTemplate.cshtml
    @model IEnumerable<Cake.Issues.IIssue>\n\n<!DOCTYPE html>\n\n<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title></title>\n</head>\n<body>\n    <table>\n        <thead>\n            <tr>\n                <th scope=\"col\">AffectedFileRelativePath</th>\n                <th scope=\"col\">Line</th>\n                <th scope=\"col\">Message</th>\n                <th scope=\"col\">Priority</th>\n                <th scope=\"col\">Rule</th>\n                <th scope=\"col\">RuleUrl</th>\n                <th scope=\"col\">ProviderType</th>\n            </tr>\n        </thead>\n        <tbody>\n            @foreach (var issue in Model)\n            {\n                <tr>\n                    <td>@issue.AffectedFileRelativePath</td>\n                    <td>@issue.Line</td>\n                    <td>@issue.MessageText</td>\n                    <td>@issue.Priority</td>\n                    <td>@issue.RuleId</td>\n                    <td>@issue.RuleUrl</td>\n                    <td>@issue.ProviderType</td>\n                </tr>\n            }\n        </tbody>\n    </table>\n</body>\n</html>\n

    The template retrieves an IEnumerable<Cake.Issues.IIssue> as model.

    Info

    In custom templates functionality from the following assemblies are available:

    • System.dll
    • System.Core.dll
    • netstandard.dll
    • Cake.Core.dll
    • Cake.Issues.dll
    • Cake.Issues.Reporting.Generic.dll
    "},{"location":"documentation/report-formats/generic/examples/default-template/","title":"Embedded default template","text":"

    To create HTML reports the Generic report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Generic&version=5.3.0\n

    Note

    In addition to the Generic report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Generic\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will create a HTML report for issues logged as warnings by MsBuild.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    // Build MySolution.sln solution in the repository root folder\n    // and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Create HTML report using Diagnostic template.\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            msBuildLogFile,\n            MsBuildBinaryLogFileFormat),\n        GenericIssueReportFormatFromEmbeddedTemplate(\n            GenericIssueReportTemplate.HtmlDiagnostic),\n        repoRootPath,\n        @\"c:\\report.html\");\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder\n        // and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Write issues to console.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.GenericIssueReportFormatFromEmbeddedTemplate(\n                GenericIssueReportTemplate.HtmlDiagnostic),\n            repoRootPath,\n            @\"c:\\report.html\");\n    }\n}\n
    "},{"location":"documentation/report-formats/generic/templates/","title":"Template Gallery","text":"
    • HTML DevExtreme Data Grid
    • HTML Data Table
    • HTML Diagnostic
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/","title":"HTML Data Table","text":"

    Template for a HTML report containing a rich data table view with sorting and search functionality powered by Simple-DataTables.

    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#features","title":"Features","text":"
    • Separate table for issues of each issue provider.
    • Table with Severity, Project, Path, File, Location, Rule, Message.
    • Each column sortable by user.
    • Paged table with possibility for user to change number of entries per page.
    • Client-side full text search.
    • No internet access required for displaying.
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#requirements","title":"Requirements","text":"
    • Cake.Issues.Reporting.Generic 0.2.1 or higher
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#usage","title":"Usage","text":"

    To create a report using the HTML Data Table template you can use the GenericIssueReportTemplate.HtmlDataTable enum value:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDataTable),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDataTable),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#options","title":"Options","text":"

    This template doesn't support any options.

    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#demos","title":"Demos","text":"
    • Default
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#source-code","title":"Source Code","text":"

    Info

    You can use the source code as a template for your custom template.

    Source code is available on GitHub.

    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/","title":"HTML Diagnostic","text":"

    Template for a HTML report containing a list of all issues with all properties.

    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#features","title":"Features","text":"
    • Unstyled table listing all properties of IIssue
    • No internet access required for displaying.
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#requirements","title":"Requirements","text":"
    • No additional requirements.
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#usage","title":"Usage","text":"

    To create a report using the HTML diagnostic template you can use the GenericIssueReportTemplate.HtmlDiagnostic enum value:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDiagnostic),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDiagnostic),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#options","title":"Options","text":"

    This template doesn't support any options.

    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#demos","title":"Demos","text":"
    • Default
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#source-code","title":"Source Code","text":"

    Info

    You can use the source code as a template for your custom template.

    Source code is available on GitHub.

    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/","title":"HTML DevExtreme Data Grid","text":"

    Template for a HTML report containing a rich data grid with sorting, filtering, grouping and search capabilities powered by DevExtreme.

    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#features","title":"Features","text":"
    • Table with Provider, Severity, Project, Path, File, Location, Rule, Message by default.
    • Support for grouping by multiple columns by user.
    • Total number of issues by each group level.
    • Each column sortable by user.
    • Data can be filtered by any column by user.
    • Paged view.
    • Client-side full text search.
    • Client-side export to Microsoft Excel or PDF.
    • Fully customizable through options.
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#requirements","title":"Requirements","text":"
    • Cake.Issues.Reporting.Generic 0.3.1 or higher
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#usage","title":"Usage","text":"

    To create a report using the HTML DevExtreme Data Grid template you can use the GenericIssueReportTemplate.HtmlDxDataGrid enum value:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n      GenericIssueReportTemplate.HtmlDxDataGrid),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n      GenericIssueReportTemplate.HtmlDxDataGrid),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#options","title":"Options","text":"

    See HtmlDxDataGridOption for a list of possible options.

    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#demos","title":"Demos","text":"

    The following demo shows the template with its default options:

    • Default (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#themes","title":"Themes","text":"

    The template supports the teams defined in the DevExtremeTheme enumeration which can be set using the HtmlDxDataGridOption.Theme:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.Theme,\n                DevExtremeTheme.MaterialBlueLight)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                  HtmlDxDataGridOption.Theme,\n                  DevExtremeTheme.MaterialBlueLight)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Light Theme (Source Code)
    • Dark Theme (Source Code)
    • Contrast Theme (Source Code)
    • Carmine Theme (Source Code)
    • Dark Moon Theme (Source Code)
    • Soft Blue Theme (Source Code)
    • Dark Violet Theme (Source Code)
    • Green Mist Theme (Source Code)
    • Light Compact Theme (Source Code)
    • Dark Compact Theme (Source Code)
    • Contrast Compact Theme (Source Code)
    • Material Blue Light Theme (Source Code)
    • Material Lime Light Theme (Source Code)
    • Material Orange Light Theme (Source Code)
    • Material Purple Light Theme (Source Code)
    • Material Teal Light Theme (Source Code)
    • Material Blue Dark Theme (Source Code)
    • Material Lime Dark Theme (Source Code)
    • Material Orange Dark Theme (Source Code)
    • Material Purple Dark Theme (Source Code)
    • Material Teal Dark Theme (Source Code)
    • Material Blue Light Compact Theme (Source Code)
    • Material Lime Light Compact Theme (Source Code)
    • Material Orange Light Compact Theme (Source Code)
    • Material Purple Light Compact Theme (Source Code)
    • Material Teal Light Compact Theme (Source Code)
    • Material Blue Dark Compact Theme (Source Code)
    • Material Lime Dark Compact Theme (Source Code)
    • Material Orange Dark Compact Theme (Source Code)
    • Material Purple Dark Compact Theme (Source Code)
    • Material Teal Dark Compact Theme (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#column-visibility","title":"Column visibility","text":"

    Visible columns can be defined using the ColumnNameVisible option:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.LineVisible,\n                false)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.LineVisible,\n                false)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n

    Additional columns can be added using the HtmlDxDataGridOption.AdditionalColumns option.

    • Show and hide columns (Source Code)
    • Add additional columns (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#sorting","title":"Sorting","text":"

    Sorted columns can be defined using the HtmlDxDataGridOption.SortedColumns and the ColumnNameSortOder options:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.SortedColumns,\n                new List<ReportColumn> { ReportColumn.RuleId })\n            .WithOption(\n                HtmlDxDataGridOption.RuleIdSortOrder,\n                ColumnSortOrder.Descending )),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.SortedColumns,\n                new List<ReportColumn> { ReportColumn.RuleId })\n            .WithOption(\n                HtmlDxDataGridOption.RuleIdSortOrder, \n                ColumnSortOrder.Descending )),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Change sorting (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#grouping","title":"Grouping","text":"

    Grouping can be defined using the HtmlDxDataGridOption.GroupedColumns option:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.GroupedColumns, \n                new List<ReportColumn> { ReportColumn.RuleId })),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.GroupedColumns, \n                new List<ReportColumn> { ReportColumn.RuleId })),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Change grouping (Source Code)
    • Disable grouping (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#exporting","title":"Exporting","text":"

    Exporting can be enabled using the HtmlDxDataGridOption.EnableExporting option:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.EnableExporting,\n                true)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.EnableExporting,\n                true)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Enable exporting (Source Code)
    • Microsoft Excel export (*.xlsx) (Source Code)
    • PDF export (*.pdf) (Source Code)
    • Custom export file name (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#other-features","title":"Other features","text":"
    • Change title (Source Code)
    • Disable header (Source Code)
    • Disable filtering (Source Code)
    • Disable searching (Source Code)
    • Custom script location and version (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#source-code","title":"Source Code","text":"

    Info

    You can use the source code as a template for your custom template.

    Source code is available on GitHub.

    "},{"location":"documentation/report-formats/sarif/","title":"Sarif","text":"

    Support for creating SARIF compatible reports is implemented in the Cake.Issues.Reporting.Sarif addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/report-formats/sarif/examples/","title":"Examples","text":"

    To report issues to the console the SARIF report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Sarif&version=5.3.0\n

    Note

    In addition to the SARIF report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Sarif\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will create a SARIF report for issues logged as warnings by MsBuild.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    // Build MySolution.sln solution in the repository root folder\n    // and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Create SARIF report.\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            msBuildLogFile,\n            MsBuildBinaryLogFileFormat,\n        SarifIssueReportFormat(),\n        repoRootPath,\n        @\"c:\\report.sarif\");\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder\n        // and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Create SARIF report.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.SarifIssueReportFormat(),\n            repoRootPath,\n            @\"c:\\report.sarif\");\n    }\n}\n
    "},{"location":"documentation/report-formats/sarif/features/","title":"Features","text":"

    The Cake.Issues.Reporting.Sarif addin provides the following features:

    • Creates SARIF compatible files.

    Supports the following properties in the SARIF report:

    • RuleId
    • Message
    • Kind
    • Level
    • Location
    • RuleUrl
    "},{"location":"documentation/resources/blog-posts/","title":"Blog posts","text":"

    Info

    If you have written about Cake Issues we would like to hear from you. You can add it by creating a pull request here.

    "},{"location":"documentation/resources/blog-posts/#2018","title":"2018","text":"
    • Cake.Issues - A suite of addins for issue handling in Cake - Pascal Berger
    "},{"location":"documentation/resources/blog-posts/#2017","title":"2017","text":"
    • Finding typos with ReSharper Command Line Tools, ReSpeller and Cake - Tom Podolak
    • Cake build issue reporting with PRCA - Tomasz Cielecki
    "},{"location":"documentation/resources/presentations/","title":"Presentations","text":"

    Info

    If you have done a presentation about Cake Issues we would like to hear from you. You can add it by creating a pull request here.

    "},{"location":"documentation/resources/presentations/#2019","title":"2019","text":"
    • Continuous Code Inspection using Cake - .NET User Group Basel: Video Slides - Pascal Berger
    "},{"location":"documentation/resources/presentations/#2018","title":"2018","text":"
    • Ensuring quality in your DevOps pipelines using Cake - Azure DevOps Saturday Gothenburg - Pascal Berger
    "},{"location":"documentation/usage/","title":"Usage","text":""},{"location":"documentation/usage/#ready-to-use-distributions","title":"Ready To Use Distributions","text":"

    The easiest way to use Cake Issues is by using one of the Recipe packages, which provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

    "},{"location":"documentation/usage/#consuming-of-individual-addins","title":"Consuming Of Individual Addins","text":"

    The addins can be added individually to any Cake build and allow advanced customizations:

    • Creating Issues
    • Reading Issues
    • Creating Reports
    • Reporting Issues To Pull Request And Build Systems
    • Breaking Builds
    "},{"location":"documentation/usage/breaking-builds/breaking-builds/","title":"Breaking builds","text":"

    The Cake.Issues addin can be used to break builds if specific issues were reported.

    List of all aliases for breaking builds

    See all available Aliases for breaking builds

    To break builds you need to import the following core addin:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n
    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Issues\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following task will fail the build if any issues were added to the issues global variable:

    Cake .NET ToolCake Frosting build.cake
    // Global issues list into which issues need to be added.\nIEnumerable<IIssue> issues = null;\n\nTask(\"BreakBuildOnIssues\")\n    .Description(\"Breaks build if any issues in the code are found.\")\n    .Does(() =>\n{\n    BreakBuildOnIssues(issues);\n});\n
    Program.cs
    using Cake.Core;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    private readonly List<IIssue> _issues = [];\n\n    public IEnumerable<IIssue> Issues { get { return _issues;  } }\n\n    public void AddIssues(IEnumerable<IIssue> issues)\n    {\n        _issues.AddRange(issues);\n    }\n}\n\n[TaskName(\"BreakBuildOnIssues\")]\npublic sealed class BreakBuildOnIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        context.BreakBuildOnIssues(context.Issues);\n    }\n}\n
    "},{"location":"documentation/usage/creating-issues/creating-issues/","title":"Creating issues","text":"

    The Cake.Issues addin can be used to create issues directly in the build script. This issues can for example be used to create reports.

    List of all aliases for creating issues

    See all available Aliases for creating issues

    To create issues you need to import the following core addin:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n
    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Issues\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    In the following task a new warning for the myfile.txt file on line 42 is created:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-Issue\").Does(() =>\n{\n    var issue =\n        NewIssue(\n            \"Something went wrong\",\n            \"MyCakeScript\",\n            \"My Cake Script\")\n            .WithMessageInHtmlFormat(\"Something went <b>wrong</b>\")\n            .WithMessageInMarkdownFormat(\"Something went **wrong**\")\n            .InFile(\"myfile.txt\", 42)\n            .WithPriority(IssuePriority.Warning)\n            .Create();\n\n    Information(\n        \"Issue created with message: {0}\",\n        issue.MessageText);\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-Issue\")]\npublic sealed class CreateIssueTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var issue =\n            context.NewIssue(\n                \"Something went wrong\",\n                \"MyCakeScript\",\n                \"My Cake Script\")\n                .WithMessageInHtmlFormat(\"Something went <b>wrong</b>\")\n                .WithMessageInMarkdownFormat(\"Something went **wrong**\")\n                .InFile(\"myfile.txt\", 42)\n                .WithPriority(IssuePriority.Warning)\n                .Create();\n\n        context.Information(\n            \"Issue created with message: {0}\",\n            issue.MessageText);\n    }\n}\n
    "},{"location":"documentation/usage/creating-reports/","title":"Creating Reports","text":"
    • Create Reports
    "},{"location":"documentation/usage/creating-reports/creating-reports/","title":"Creating reports","text":"

    The Cake.Issues.Reporting addin can be used to create issue reports in different formats.

    List of all aliases for creating reports

    See all available Aliases for creating reports

    To create report for issues you need to import the corresponding report format. In the following example the issue provider for reading warnings from MsBuild log files and generic report format is imported:

    Example for other report formats

    For examples for other formats see Report Format Examples.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Generic&version=5.3.0\n

    Note

    In addition to the report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Generic\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    Afterwards you can define a task where you call the reporting addin with the desired issue provider and report format:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-Report\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\msbuild.log\",\n            MsBuildBinaryLogFileFormat),\n        GenericIssueReportFormatFromEmbeddedTemplate(\n            GenericIssueReportTemplate.HtmlDiagnostic),\n        repoRootFolder,\n        @\"c:\\report.html\");\n});\n
    Program.cs
    using Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-Report\")]\npublic sealed class CreateReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                context.MsBuildBinaryLogFileFormat()),\n            context.GenericIssueReportFormatFromEmbeddedTemplate(\n                GenericIssueReportTemplate.HtmlDiagnostic),\n            repoRootFolder,\n            @\"c:\\report.html\");\n    }\n}\n
    "},{"location":"documentation/usage/reading-issues/","title":"Reading Issues","text":"
    • Read Issues
    • Pass Additional Run Information
    • Configure File Links
    "},{"location":"documentation/usage/reading-issues/file-linking/","title":"File linking","text":"

    File link settings can be defined while reading issues and are passed through the IIssue.FileLink property to reporting formats, pull request systems and build server implementations:

    List of all aliases for file linking

    See all available Aliases for file linking

    Cake .NET ToolCake Frosting
    var settings =\n    new ReadIssuesSettings(@\"c:\\repo\")\n    {\n        FileLinkSettings =\n            IssueFileLinkSettingsForGitHubCommit(\n                \"https://github.com/cake-contrib/Cake.Issues\",\n                \"76a7cacef7ad4295a6766646d45c9b56\")\n    };    \n\n    var issues =\n        ReadIssues(\n            InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            settings));\n
    var settings =\n    new ReadIssuesSettings(@\"c:\\repo\")\n    {\n        FileLinkSettings =\n            IssueFileLinkSettingsForGitHubCommit(\n                \"https://github.com/cake-contrib/Cake.Issues\",\n                \"76a7cacef7ad4295a6766646d45c9b56\")\n    };    \n\n    var issues =\n        context.ReadIssues(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            settings));\n

    Cake.Issues comes with out-of-the-box support for linking to files hosted on GitHub and Azure Repos, either for a specific branch or commit. Additionally there are aliases which can be used to define any custom pattern.

    "},{"location":"documentation/usage/reading-issues/reading-issues/","title":"Reading issues","text":"

    The Cake.Issues addin can be used to aggregate issues from different sources. This can for example be useful to break builds based on the reported issues.

    List of all aliases for reading issues

    See all available Aliases for reading issues

    To read issues you need to import at least one issue provider. In the following example the issue providers for reading warnings from MsBuild log files and from JetBrains InspectCode are imported:

    Example for other tools

    For examples for issue providers for reading issues form other tools see Issue Provider Examples.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n

    Note

    In addition to the issue providers the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    Afterwards you can define a task where you call the core addin with the desired issue providers. The following example reads warnings and errors reported by MsBuild from a binary log and issues reported by JetBrains InspectCode:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Read-Issues\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n    var issues = ReadIssues(\n        new List<IIssueProvider>\n        {\n            MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                MsBuildBinaryLogFileFormat),\n            InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\")\n        },\n        repoRootFolder);\n\n    Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Read-Issues\")]\npublic sealed class ReadIssuesTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        var issues = context.ReadIssues(\n            new List<IIssueProvider>\n            {\n                context.MsBuildIssuesFromFilePath(\n                    @\"C:\\build\\msbuild.log\",\n                    context.MsBuildBinaryLogFileFormat()),\n                context.InspectCodeIssuesFromFilePath(\n                    @\"C:\\build\\inspectcode.log\")\n            },\n            repoRootFolder);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/usage/reading-issues/run-information/","title":"Additional run information","text":"

    If a build script needs to parse multiple log files using the same issue provider, e.g. by importing results in SARIF or Test Anything Protocol format from different tools, this can be done by calling the issue provider multiple times.

    If the results are read into the same list and shown on the same report, individual issues could not be assigned to any of the calls, since issue provider type and name are identical.

    Starting with Cake.Issues 0.9.0 it is possible to pass additional run information while reading issues, which then will be stored with each issues in the IIssue.Run property:

    Cake .NET ToolCake Frosting
    var issues = new List<IIssue>();\n\n// Parse issues from build of solution 1\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution1-msbuild.log\",\n            MsBuildBinaryLogFileFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 1\"\n        }\n    )\n);\n\n// Parse issues from build of solution 2\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution2-msbuild.log\",\n            MsBuildBinaryLogFileFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 2\"\n        }\n    )\n);\n
    var issues = new List<IIssue>();\n\n// Parse issues from build of solution 1\nissues.AddRange(\n    context.ReadIssues(\n        context.MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution1-msbuild.log\",\n            context.MsBuildBinaryLogFileFormat()),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 1\"\n        }\n    )\n);\n\n// Parse issues from build of solution 2\nissues.AddRange(\n    context.ReadIssues(\n        context.MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution2-msbuild.log\",\n            context.MsBuildBinaryLogFileFormat()),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 2\"\n        }\n    )\n);\n
    "},{"location":"documentation/usage/recipe/","title":"Recipe usage","text":"

    Cake.Issues recipes provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

    Integration of code analyzing and linting tools into a build pipeline often looks the similar, and differentiates mainly on the used linters, build and pull request systems. Cake.Issues recipes contain code to do all the parsing, integration with build and pull request systems for you, using the individual Cake.Issues addins. They support different linters based on the linting log files you pass it and integrate automatically with different build and pull request systems.

    There are two flavors available:

    • Cake.Issues.Recipe

      For Cake .NET Tool

    • Cake.Frosting.Issues.Recipe

      For Cake Frosting

    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/","title":"Using Cake.Frosting.Issues.Recipe","text":"

    The Cake.Frosting.Issues.Recipe package can be used to easily add issue management functionality to your Cake Frosting build.

    Info

    See Setting Up A New Frosting Project for instructions how to create a new Cake Frosting project.

    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#add-cakefrostingissuesrecipe-to-your-cake-frosting-build","title":"Add Cake.Frosting.Issues.Recipe to your Cake Frosting build","text":"

    To use Cake.Frosting.Issues.Recipe in your Cake Frosting build you need to first add the NuGet package in your .csproj file:

    <PackageReference Include=\"Cake.Frosting.Issues.Recipe\" Version=\"5.3.0\" />\n
    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#register-cakeissues-tasks","title":"Register Cake.Issues tasks","text":"

    To make Cake Issues tasks available to your Cake Frosting build you need to register them.

    Add the following line to the bootstrapping code in the Main method of your Cake Frosting project:

    AddAssembly(Assembly.GetAssembly(typeof(IssuesTask)))\n

    The following bootstrapping code registers the Cake Issues tasks and also installs JetBrains InspectCode:

    using System;\nusing System.Reflection;\nusing Cake.Frosting;\nusing Cake.Frosting.Issues.Recipe;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .InstallTool(\n                new Uri(\n                    \"nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2024.3.3\"))\n            .AddAssembly(Assembly.GetAssembly(typeof(IssuesTask)))\n            .Run(args);\n    }\n}\n
    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#create-build-context","title":"Create build context","text":"

    Cake.Frosting.Issues.Recipe provides a build context from which you need to inherit your custom build context. The build context contains configuration parameters, but also the state of the current running build, like for example all collected issues.

    The following example creates a build context and defines that Cake Issues should use Cake.Git addin to determine state of the Git repository:

    public class BuildContext : IssuesContext\n{\n    public BuildContext(ICakeContext context)\n        : base(context, RepositoryInfoProviderType.CakeGit)\n    {\n    }\n}\n
    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#passing-issues-to-cakefrostingissuesrecipe","title":"Passing issues to Cake.Frosting.Issues.Recipe","text":"

    To make issues available to Cake.Frosting.Issues.Recipe you need pass the log files through the corresponding methods. The tasks need to also be a dependency of ReadIssuesTask provided by Cake.Frosting.Issues.Recipe.

    In the following example a new task is introduced which runs JetBrains InspectCode and passes the log file to Cake.Frosting.Issues.Recipe:

    [TaskName(\"Run-InspectCode\")]\n[IsDependeeOf(typeof(ReadIssuesTask))]\npublic class RunInspectCodeTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        var inspectCodeLogFilePath =\n            context.Parameters.OutputDirectory\n                .CombineWithFilePath(\"inspectCode.log\");\n\n        // Run JetBrains InspectCode\n        context.InspectCode(\n            context.State.RepositoryRootDirectory\n                .Combine(\"src\")\n                .CombineWithFilePath(\"ClassLibrary1.sln\"),\n            new InspectCodeSettings() {\n                OutputFile = context.InspectCodeLogFilePath\n            });\n\n        // Pass path to InspectCode log file to Cake.Frosting.Issues.Recipe\n        context.Parameters.InputFiles\n            .AddInspectCodeLogFilePath(context.InspectCodeLogFilePath);\n    }\n}\n

    Tip

    See configuration for a full list of available configuration parameters.

    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#calling-issues-tasks","title":"Calling issues tasks","text":"

    Cake.Frosting.Issues.Recipe will add a bunch of tasks to your build script.

    To add the issues functionality into your existing build pipeline you need to add ReadIssuesTask to your pipeline.

    In the following example the Default task makes sure the main IssuesTask is executed:

    [TaskName(\"Default\")]\n[IsDependentOn(typeof(IssuesTask))]\npublic class DefaultTask : FrostingTask\n{\n}\n
    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/","title":"Using Cake.Issues.Recipe","text":"

    The Cake.Issues.Recipe package can be used to easily add issue management functionality to your build script.

    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/#add-cakeissuesrecipe-to-your-build-script","title":"Add Cake.Issues.Recipe to your build script","text":"

    To use Cake.Issues.Recipe in your build script you need to first load the NuGet package:

    #load nuget:package=Cake.Issues.Recipe&version=5.3.0\n
    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/#configuring-cakeissuesrecipe","title":"Configuring Cake.Issues.Recipe","text":"

    To make issues available to Cake.Issues.Recipe you need to set the corresponding configuration parameters.

    In the following example a new task is introduced which depends on existing tasks which build a MsBuild solution and run JetBrains InspectCode. It will pass the MsBuild and InspectCode logfile to Cake.Issues.Recipe:

    // Run issues task by default.\nTask(\"Configure-CakeIssuesRecipe\")\n    .IsDependentOn(\"Build\")\n    .IsDependentOn(\"Run-InspectCode\")\n    .Does(() =>\n{\n    IssuesParameters.InputFiles\n        .AddMsBuildBinaryLogFilePath(msBuildLogFilePath);\n    IssuesParameters.InputFiles\n        .AddInspectCodeLogFilePath(inspectCodeLogFilePath);\n}\n

    Tip

    See configuration for a full list of available configuration parameters.

    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/#calling-issues-tasks","title":"Calling issues tasks","text":"

    Cake.Issues.Recipe will add a bunch of tasks to your build script.

    To add the issues functionality into your existing build pipeline you can make the Read-Issues task dependent on the task which configures Cake.Issues.Recipe:

    // Make sure build and linters run before issues task.\nIssuesBuildTasks.ReadIssuesTask\n    .IsDependentOn(\"Configure-CakeIssuesRecipe\");\n

    At some point you need to call the tasks provided by Cake.Isses.Recipe. In the following example the Default task calls the main Issues task:

    // Run issues task by default.\nTask(\"Default\")\n    .IsDependentOn(\"Issues\");\n
    "},{"location":"documentation/usage/reporting-issues-to-pull-requests/","title":"Reporting Issues To Pull Requests","text":"
    • Report Issues To Pull Requests
    • Apply Custom Issue Filter
    "},{"location":"documentation/usage/reporting-issues-to-pull-requests/custom-issue-filter/","title":"Custom issue filter","text":"

    The IssueFilters setting property allows to define custom filters which are applied to issues before they are posted as comments to pull requests.

    Tip: Filter to issues introduced with pull request

    You can use a custom filter to only have issues introduced with the current code posted to the pull request.

    For this you need to store your log files as artifacts on your build system, then you can define a custom filter which retrieves the logs from the previous build, parses them using the appropriate issue provider and filters out any issues which were already existing in the previous build.

    The following example will filter out all issues from the rule CA1000 from being posted to the pull request.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0    \n\nTask(\"ReportIssuesToPullRequest\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"C:\\repo\");    \n\n    var settings =\n        new ReportIssuesToPullRequestFromIssueProviderSettings(repoRootFolder);\n\n    // Add custom filter.\n    settings.IssueFilters.Add(x => x.Where(issue => issue.RuleId != \"CA1000\"));\n\n    ReportIssuesToPullRequest(\n        new List<IIssueProvider>\n        {\n            MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                MsBuildBinaryLogFileFormat)\n        },\n        AzureDevOpsPullRequests(),\n        settings);\n});\n
    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n
    Program.cs
    using Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"ReportIssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n\n        var settings =\n            new ReportIssuesToPullRequestFromIssueProviderSettings(\n                repoRootFolder);\n\n        // Add custom filter.\n        settings.IssueFilters.Add(x =>\n            x.Where(issue => issue.RuleId != \"CA1000\"));\n\n        context.ReportIssuesToPullRequest(\n            new List<IIssueProvider>\n            {\n                context.MsBuildIssuesFromFilePath(\n                    @\"C:\\build\\msbuild.log\",\n                    context.MsBuildBinaryLogFileFormat())\n            },\n            context.AzureDevOpsPullRequests(),\n            settings);\n    }\n}\n
    "},{"location":"documentation/usage/reporting-issues-to-pull-requests/report-issues-to-pull-requests/","title":"Report issues to pull requests","text":"

    The Cake.Issues.PullRequests addin can be used to report issues to build servers and pull request systems.

    List of all aliases for reporting issues

    See all available Aliases for reporting issues

    To use report issues to pull requests you need to import the corresponding pull request system addin. In the following example the issue provider for reading warnings from MsBuild log files and support for Azure DevOps pull requests is imported:

    Example for other build server and pull request systems

    For examples for other build server and pull request systems see Pull Request System Examples.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n

    Note

    In addition to the pull request system the Cake.Issues and Cake.Issues.PullRequests core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    Afterwards you can define a task where you call the core addin with the desired issue provider and pull request system:

    Cake .NET ToolCake Frosting build.cake
        Task(\"ReportIssuesToPullRequest\").Does(() =>\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        ReportIssuesToPullRequest(\n            MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                MsBuildBinaryLogFileFormat),\n            AzureDevOpsPullRequests(),\n            repoRootFolder);\n    });\n
    Program.cs
    using Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"ReportIssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        context.ReportIssuesToPullRequest(\n            context.MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                context.MsBuildBinaryLogFileFormat()),\n            context.AzureDevOpsPullRequests(),\n            repoRootFolder);\n    }\n}\n
    "},{"location":"news/","title":"News","text":""},{"location":"news/2020/08/22/cake-issues-v090-released/","title":"Cake Issues v0.9.0 Released","text":"

    Cake Issues version 0.9.0 has been released. This is a major release bringing a lot of new features across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • AdmiringWorm
    • christianbumann
    • eoehen
    • gep13
    • janniksam
    • mholo65
    • pascalberger
    • Speeedy01
    • jokay
    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#full-cross-platform-support","title":"Full cross-platform support","text":"

    While in previous versions most parts of Cake Issues was already targeting .NET Standard and with this could be executed on .NET Framework, .NET Core and Mono, Cake.Issues.Reporting.Generic could only run on .NET Framework and Mono, but not on .NET Core. With this release Cake.Issues.Reporting.Generic was ported to also run on .NET Core.

    The migration was done by gep13 on his Twitch stream and you can watch work done in Stream 90 - Working on Cake.Issues.Recipe, Stream 91 - Working on Cake.Issues.Reporting.Generic and Gazorator and Stream 92 - Working on Cake.Issues.Reporting.Generic and Gazorator - Part 2.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#enhanced-issue-information","title":"Enhanced issue information","text":"

    The description for issues has been extended by additional information for column and ranges:

    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn

    Existing issue providers have been updated to provide the additional information where available. See feature description for individual issue providers for which information a specific issue provider supports.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#file-linking","title":"File linking","text":"

    In previous versions Cake.Issues.Reporting.Generic supported entries linking to the file on the source code provider (GitHub, Azure Repos, ...). With this release file linking infrastructure has been moved to the Cake.Issues addin and can be used by any addin.

    File link settings can be defined while reading issues and are passed through the new IIssue.FileLink property to reporting formats, pull request systems and build server implementations:

    var settings =\n    new ReadIssuesSettings(@\"c:\\repo\")\n    {\n        FileLinkSettings =\n            IssueFileLinkSettingsForGitHubCommit(\n                \"https://github.com/cake-contrib/Cake.Issues.Reporting.Generic\",\n                \"76a7cacef7ad4295a6766646d45c9b56\")\n    };\n\n    var issues =\n        ReadIssues(\n            InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            settings));\n

    Cake.Issues comes with out-of-the-box support for linking to files hosted on GitHub and Azure Repos, either for a specific branch or commit. Additionally there are aliases which can be used to define any custom pattern.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#support-for-passing-additional-run-information","title":"Support for passing additional run information","text":"

    If a build script needed to parse multiple log files from the same tool, e.g. because multiple MsBuild solutions were built, this was currently possible by calling the issue provider multiple times. If the results were read into the same list and shown on the same report, individual issues could not be assigned to any of the calls, since issue provider type and name were identical. Starting with Cake.Issues 0.9.0 it is now possible to pass additional run information while reading issues, which then will be stored with each issues in the IIssue.Run property:

    var issues = new List<IIssue>();\n\n// Parse issues from build of solutions 1\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution1-msbuild.log\",\n            MsBuildXmlFileLoggerFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 1\"\n        }\n    )\n);\n\n// Parse issues from build of solutions 2\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution2-msbuild.log\",\n            MsBuildXmlFileLoggerFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 2\"\n        }\n    )\n);\n
    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#improved-pull-request-integration","title":"Improved pull request integration","text":"

    In previous versions the text message of an issue was used to detect issues already reported in a previous run. This didn't work well for issues which contain information in the message which likely changes between runs, like e.g. line information. In this version a specific identifier, IIssue.Identifier, is used which can be set by the issue provider.

    When working with legacy code bases which contain a lot of existing issues, using something like Cake.Issues can be hard, since it will notify about every existing issue if something is changed in a file. To work around this issue it is possible to limit issues which will be posted to pull request systems. In previous versions it was already possible to limit the total number of issues, the number of issues for every issue provider and the total number of issues across multiple run. With 0.9.0 it will additionally be possible to limit the number of issues for specific issue providers for either a single or across multiple runs. This allows advanced scenarios like posting a maximum of 10 MsBuild issues every run, but not more than 20 in total across all runs.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#get-everything-together","title":"Get everything together","text":"

    Cake.Issues.Recipe, the Cake Recipe script which you can integrate into your build script for easy integration of full feature issue management, has been updated to version 0.4.0, bringing all the new features of Cake.Issues 0.9.0.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 0.9.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • Serialization format has been updated to version 3. Older version are still supported for deserialization.
    • Cake.Issues.Markdownlint
    • MarkdownlintLogFileFormat alias has been renamed to MarkdownlintV1LogFileFormat (#116).
    • Cake.Issues.PullRequest
    • ReportIssuesToPullRequest alias which accepts an issue provider, or a list of issue providers, and settings requires now settings of type IReportIssuesToPullRequestFromIssueProviderSettings instead of ReportIssuesToPullRequestSettings to provider additional functionality, like support for File linking and Support for passing additional run information.
    • Cake.Issues.PullRequests.AzureDevOps
    • Cake.Issues.PullRequests.AzureDevOps requires at least Cake.AzureDevOps 0.5.0
    • Cake.Issues.Reporting
    • CreateIssueReport alias which accepts an issue provider, or a list of issue providers, and settings requires now settings of type ICreateIssueReportFromIssueProviderSettings instead of CreateIssueReportSettings to provider additional functionality, like support for File linking and Support for passing additional run information.
    • Cake.Issues.Reporting.Generic
    • Cake.Issues.Reporting.Generic requires at least Cake 0.38.0
    • HtmlDxDataGridOption.FileLinkSettings has been removed. File link settings can now be defined while reading the issues. For details see File linking. (#265).
    • HtmlDxDataGridOption.JSZipLocation has been split into HtmlDxDataGridOption.JsZipLocation and HtmlDxDataGridOption.JsZipVersion (#320).
    • Cake.Issues.Recipe
    • Cake.Issues.Recipe requires at least Cake 0.38.0

    For details see release notes of the individual addins:

    • Cake.Issues 0.9.0
    • Cake.Issues.MsBuild 0.9.0
    • Cake.Issues.InspectCode 0.9.0
    • Cake.Issues.DupFinder 0.9.0
    • Cake.Issues.GitRepository 0.9.0
    • Cake.Issues.Markdownlint 0.9.0
    • Cake.Issues.EsLint 0.9.0
    • Cake.Issues.DocFx 0.9.0
    • Cake.Issues.PullRequests 0.9.0
    • Cake.Issues.PullRequests.AzureDevOps 0.9.0
    • Cake.Issues.PullRequests.AppVeyor 0.9.0
    • Cake.Issues.Reporting 0.9.0
    • Cake.Issues.Reporting.Generic 0.9.0
    • Cake.Issues.Reporting.Sarif 0.9.0
    • Cake.Issues.Recipe 0.4.0
    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/","title":"Cake Issues v0.9.1 Released","text":"

    Version 0.9.1 of Cake Issues and Cake.Issues.PullRequests.AzureDevOps have been released. These are minor releases containing improvements and bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • janniksam
    • pascalberger
    • jokay
    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/#easier-file-linking-for-manually-created-issues","title":"Easier file linking for manually created issues","text":"

    With 0.8.0 file links was implemented in Cake.Issues.Reporting.Generic and worked for any issues passed to the report. With 0.9.0 file link infrastructure was moved to Cake.Issues. File link settings can now be set while reading issues, and are passed through the IIssue.FileLink property to reports and pull request systems.

    While this solution works for issues read by an issue provider, where file link settings can be passed to the ReadIssues alias, it become much more complicated for issues created using the NewIssue alias, where an URL can be set, which needs to be resolved manually before.

    Cake.Issues 0.9.1 adds an WithFileLinkSettings method to IIssueBuilder where a file link setting object can be passed which does resolve the URL.

    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/#line-range-and-column-support-in-azure-devops-pull-request-integration","title":"Line range and column support in Azure DevOps pull request integration","text":"

    Cake Issues 0.9.0 added support for line ranges and column information. With 0.9.0 the Azure DevOps pull request integration didn't use this information while posting comments to pull requests. Cake.Issues.PullRequests.AzureDevOps 0.9.1 fixes this and will post comments for line and column ranges if they are available on an issue.

    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues and Cake.Issues.PullRequests.AzureDevOps 0.9.1 are compatible with version 0.9.0 without any breaking changes. To update to the new version bump the version of the specific addins.

    ","boost":0.5},{"location":"news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/","title":"Cake Issues Recipe v0.4.2 released, bringing support for GitHub Actions","text":"

    Version 0.4.2 of Cake Issues Recipe has been released bringing support for GitHub Actions.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • admiringworm
    • pascalberger
    ","boost":0.5},{"location":"news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/#support-for-github-actions","title":"Support for GitHub Actions","text":"

    This version of Cake.Issues.Recipe brings support for running under GitHub Actions. Currently supported feature is writing of issues to build server which will show up in the build log grouped by issue provider / run:

    Additionally the issues show up as annotations:

    Having issues available as annotations also means that they will be shown in pull requests on the related file / position:

    It's planned to support remaining features like providing full issue report as artifact in a future release.

    Info

    Support for GitHub Actions integration is currently only available in Cake.Issues.Recipe, but not as a standalone addin. It's planned to additionally provide a standalone addin which can be used outside of Cake.Issues.Recipe in the future.

    ","boost":0.5},{"location":"news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Recipe 0.4.2 is compatible with version 0.4.x without any breaking changes. To update to the new version bump the version in your build script.

    ","boost":0.5},{"location":"news/2020/09/27/new-github-actions-addin/","title":"New GitHub Actions addin","text":"

    A new Cake.Issues.PullRequest.GitHubActions addin has been released which brings integration with GitHub Actions and GitHub pull requests.

    Cake.Issues.PullRequest.GitHubActions addin creates annotations from issues when running on GitHub Actions:

    These annotations will also be shown in pull requests on the related file / position, bringing first class integration for GitHub pull requests to Cake.Issues:

    This integration was first released in Cake.Issues.Recipe 0.4.2 and has now been moved to its own addin, which can also be used outside of Cake.Issues.Recipe.

    ","boost":0.5},{"location":"news/2020/10/09/cake-issues-pullrequests-v091-released/","title":"Cake Issues PullRequests v0.9.1 Released","text":"

    Version 0.9.1 of Cake.Issues.PullRequests has been released. This is a minor releases containing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • janniksam
    • pascalberger
    • phlorian
    ","boost":0.5},{"location":"news/2020/10/09/cake-issues-pullrequests-v091-released/#dont-post-issues-if-a-provider-limit-is-set-to-0","title":"Don't post issues if a provider limit is set to 0","text":"

    This version fixes a bug where if MaxIssuesToPost or MaxIssuesToPostAcrossRuns was set to 0 all issues were posted to the pull request instead of none.

    ","boost":0.5},{"location":"news/2020/10/09/cake-issues-pullrequests-v091-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.PullRequests 0.9.1 is compatible with version 0.9.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2020/10/20/cake-issues-msbuild-v091-released/","title":"Cake Issues MsBuild v0.9.1 Released","text":"

    Version 0.9.1 of MsBuild support for Cake.Issues has been released. This is a minor release containing improvements.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • cho-trackman
    • eoehen
    • pascalberger
    • jokay
    ","boost":0.5},{"location":"news/2020/10/20/cake-issues-msbuild-v091-released/#support-for-reading-of-errors","title":"Support for reading of errors","text":"

    Until now MsBuild support did read warnings from MsBuild log files. Starting with version 0.9.1 it will also return errors. Reading of errors has been implemented for MsBuildBinaryLogFileFormat and MsBuildXmlFileLoggerFormat. For errors IIssue.Priority will be set to IssuePriority.Error.

    Info

    To keep previous behavior result after reading the issues can be filtered for IIssue.Priority == IIssuePriority.Warning.

    ","boost":0.5},{"location":"news/2020/10/20/cake-issues-msbuild-v091-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.MsBuild 0.9.1 is compatible with version 0.9.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/","title":"Cake Issues Recipe v0.4.4 released, bringing support for ESLint","text":"

    Version 0.4.4 of Cake Issues Recipe has been released bringing support for ESLint.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions. For details see full release notes.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/#support-for-eslint","title":"Support for ESLint","text":"

    This version of Cake.Issues.Recipe brings support for issues reported by ESLint. Currently supported are files generated using the ESLint json formatter

    ","boost":0.5},{"location":"news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Recipe 0.4.4 is compatible with version 0.4.x without any breaking changes. To update to the new version bump the version in your build script.

    ","boost":0.5},{"location":"news/2021/07/27/new-addin-for-terraform-support/","title":"New addin for Terraform support","text":"

    A new Cake.Issues.Terraform addin has been released which adds support for reading issues from Terraform validate command.

    Cake.Issues.Terraform addin brings support for Terraform to the Cake.Issues ecosystem. It allows to read the output of the Terraform validate command. Together with other Cake.Issues addins it is possible to create powerful infrastructure as code pipelines which ensure quality standards by validating Terraform files before merging or deploying the changes. When using a pull requests workflow it is also possible to have the issues reported by Terraform validate automatically reported as comments to pull request.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/","title":"Cake Issues v1.0.0 Released","text":"

    More than 4 years after the first commit for Cake.Prca, the predecessor of Cake Issues, we're happy to announce that Cake Issues version 1.0.0 has been released. This is a major release bringing a lot of new features across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • janniksam
    • pascalberger
    • phlorian
    • jokay
    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#support-for-cake-10","title":"Support for Cake 1.0","text":"

    All addins have been updated to support Cake 1.x.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#support-for-cake-frosting","title":"Support for Cake Frosting","text":"

    All addins can be used with Cake Frosting.

    Cake Issues addins have always been self-contained, shipping with all required dependencies, to provide the best user experience. While this approach makes sense for Cake script runners, it makes things more complex than required when running under Cake Frosting. This is especially true for the Cake.Issues.Reporting.Generic addin, which uses Razor engine to generate the reports.

    It was therefore decided to release separate versions of the Cake.Issues.Reporting.Generic addin for the different script runners:

    • Cake.Issues.Reporting.Generic: The addin packaged in a self-contained NuGet package for use with Cake script runners
    • Cake.Frosting.Issues.Reporting.Generic: The addin packaged in a NuGet package containing dependencies for use with Cake Frosting

    Cake.Frosting.Issues.Reporting.Generic has the additional benefit for the user that it gives the user full control of what exact version of dependencies should be used. In the future more Cake Issues addins might be released in Frosting specific packages.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#support-for-arbitrary-values-in-an-issue","title":"Support for arbitrary values in an issue","text":"

    Specific issue providers might have additional information for which no equivalent does exist on IIssue. These kind of information can now be stored in the IIssue.AdditionalInformation property.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#new-provider-type-property","title":"New provider type property","text":"

    While there are aliases to get provider type name (e.g. MsBuildIssuesProviderTypeName), this information was in previous versions not available through the IIssueProvider interface. There is a new IIssueProvider.ProviderType property which can be used to retrieve the provider type.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#pdf-export","title":"PDF export","text":"

    A new PDF export has been added to the HtmlDxDataGrid template of the Cake.Issues.Reporting.Generic addin.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#simplified-release-process","title":"Simplified release process","text":"

    Starting with Cake Issues 1.0.0 the three core addins Cake.Issues, Cake.Issues.PullRequests and Cake.Issues.Reporting will be always released together. For that source code for the addin has been merged in the Cake.Issues repository. Please open any issues related to any of the core addins in the Cake.Issues issue tracker.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 1.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • Serialization format has been updated to version 4. Older version are still supported for deserialization.
    • IIssueProvider was extended with an additional ProviderType property. For issue providers inheriting from BaseIssueProvider no action is required to keep the same behavior as with previous versions, with the type name used as provider type.

    Info

    Cake.Recipe has not been updated to 1.0 yet.

    For details see release notes of the individual addins:

    • Cake.Issues 1.0.0
    • Cake.Issues.MsBuild 1.0.0
    • Cake.Issues.InspectCode 1.0.0
    • Cake.Issues.DupFinder 1.0.0
    • Cake.Issues.GitRepository 1.0.0
    • Cake.Issues.Markdownlint 1.0.0
    • Cake.Issues.EsLint 1.0.0
    • Cake.Issues.DocFx 1.0.0
    • Cake.Issues.Terraform 1.0.0
    • Cake.Issues.PullRequests 1.0.0
    • Cake.Issues.PullRequests.AzureDevOps 1.0.0
    • Cake.Issues.PullRequests.AppVeyor 1.0.0
    • Cake.Issues.Reporting 1.0.0
    • Cake.Issues.Reporting.Generic 1.0.0
    • Cake.Issues.Reporting.Sarif 1.0.0
    ","boost":0.5},{"location":"news/2021/07/30/cake-issues-eslint-v101-released/","title":"Cake Issues ESLint v1.0.1 Released","text":"

    Version 1.0.1 of ESLint support for Cake.Issues has been released. This is a minor release containing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2021/07/30/cake-issues-eslint-v101-released/#bug-fix-for-issues-with-line-column-or-rule","title":"Bug fix for issues with line, column or rule","text":"

    When an issue reported by ESLint didn't contain line or column information, or rule was set to null an exception ocurred while parsing the file. This release fixes this and can now also correctly parse issues without position or rule information.

    ","boost":0.5},{"location":"news/2021/07/30/cake-issues-eslint-v101-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.EsLint 1.0.1 is compatible with version 1.0.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/","title":"Cake Issues Recipe v1.0.0 Released, bringing support for Cake Frosting","text":"

    Hard on the heels of the announcement for release 1.0 of Cake.Issues addins, we're happy to announce release 1.0 of the recipe script for Cake.Issues.

    This is a major release bringing support for Cake Frosting and other new features.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#support-for-cake-10","title":"Support for Cake 1.0","text":"

    Cake Issues recipe has been updated to use latest 1.x versions of the Cake.Issues addins which support Cake 1.x.

    See announcement for release 1.0 of Cake.Issues addins for features added in the individual addins.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#support-for-cake-frosting","title":"Support for Cake Frosting","text":"

    Additionally to the existing Cake.Issues.Recipe package, which works fine for Cake script runners, there's a new Cake.Frosting.Issues.Recipe package suitable for builds using Cake Frosting.

    See Using Cake.Frosting.Issues.Recipe for an example.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#support-for-environments-not-compatible-with-cakegit-addin","title":"Support for environments not compatible with Cake.Git addin","text":"

    In previous versions Cake.Issues recipes had used Cake.Git addin to determine state of the Git repository. While this works in most cases, there are some environments where Cake.Git addin currently does not work.

    Starting with this version it is now possible to define if Cake.Git addin or Git CLI should be used.

    See Git repository information configuration for details.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#define-settings-for-issue-providers","title":"Define settings for issue providers","text":"

    Previous versions of Cake.Issues recipes used default settings for reading issues from the passed log files. This made it impossible to parse log files which for example are created by tools running in containers, as they have a root path different to the repository root.

    This version introduced methods to pass log files to the recipe scripts, which additionally to the log file path accept a settings object.

    The new implementation also supports other use-cases like reading multiple files with the same issues provider, but different settings (e.g. run information).

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues Recipes 1.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Properties for passing input files to the recipe scripts have been replaced by methods. As an example, in previous versions MsBuild XML log files could be passed by setting the IssuesParameters.InputFiles.MsBuildXmlFileLoggerLogFilePath property:
    IssuesParameters.InputFiles.MsBuildXmlFileLoggerLogFilePath = @\"c:\\build\\msbuild.log\";\n

    With 1.0 the IssuesParameters.InputFiles.AddMsBuildXmlFileLoggerLogFile() method needs to be called instead:

    IssuesParameters.InputFiles.AddMsBuildXmlFileLoggerLogFile(@\"c:\\build\\msbuild.log\");\n

    For details see full release notes

    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/","title":"Cake Issues Recipes v1.1.0 released","text":"

    Version 1.1.0 of Cake Issues recipes have been released adding support to customize report generation.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/#report-customization","title":"Report customization","text":"

    This version of Cake Issues recipes adds a new FullIssuesReportSettings configuration parameter which allows to customize the generated issue report. See Report creation parameters for details.

    The following example enables exporting of the report when using Cake.Issues.Recipe:

    IssuesParameters.Reporting.FullIssuesReportSettings\n    .WithOption(HtmlDxDataGridOption.EnableExporting, true)\n

    The following example enables exporting of the report when using Cake.Frosting.Issues.Recipe:

    context.Parameters.Reporting.FullIssuesReportSettings\n    .WithOption(HtmlDxDataGridOption.EnableExporting, true)\n
    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/#updated-addins","title":"Updated addins","text":"

    Cake.Git has been updated to version 1.1.0 which comes with an updated version of LibGit2Sharp which adds support for Ubuntu 20.

    See Cake.Git 1.1.0 release notes for details.

    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake Issues recipes 1.1.0 are compatible with version 1.x without any breaking changes. To update to the new version bump the version in your build.

    ","boost":0.5},{"location":"news/2021/08/19/cake-issues-recipes-v120-released/","title":"Cake Issues Recipes v1.2.0 released","text":"

    Version 1.2.0 of Cake Issues recipes have been released adding support to customize issue reporting to pull requests.

    This post shows the highlights included in this release. For details see full release notes. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/19/cake-issues-recipes-v120-released/#customization-of-pull-request-integration","title":"Customization of pull request integration","text":"

    This version of Cake Issues recipes adds several new configuration parameter which allows to customize how issues are reported to pull requests. See Pull request integration parameters for details.

    The following example limits the number of issues posted to pull requests to 20 when using Cake.Issues.Recipe:

    IssuesParameters.PullRequestSystem.MaxIssuesToPost = 20;\n

    The following example limits the number of issues posted to pull requests to 20 when using Cake.Frosting.Issues.Recipe:

    context.Parameters.PullRequestSystem.MaxIssuesToPost = 20;\n
    ","boost":0.5},{"location":"news/2021/08/19/cake-issues-recipes-v120-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake Issues recipes 1.2.0 are compatible with version 1.x without any breaking changes. To update to the new version bump the version in your build.

    ","boost":0.5},{"location":"news/2021/08/29/new-addin-for-printing-issues-to-console/","title":"New addin for printing issues to console","text":"

    A new Cake.Issues.Reporting.Console addin has been released which allows to output issues to the console.

    Cake.Issues.Reporting.Console addin can be used to print issues to the console and is built on top of the excellent Errata library by Patrik Svensson.

    Its main focus is to annotate source code with issues:

    It currently only supports issues containing line and column information. Output can be grouped by rule, like in the image above, or individual entries for every issue.

    Beside printing issues it can also show summary tables.

    There's one summary which shows the number of issues for everyprovider and run:

    Another summary shows the number of issues by priority for every provider and run:

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/","title":"Cake Issues Markdownlint v1.1.0 Released","text":"

    Version 1.1.0 of Markdownlint support for Cake.Issues has been released. This is a minor release adding features and improvements.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#support-for-markdownlint-cli-json-format","title":"Support for markdownlint-cli JSON format","text":"

    Since version 0.28.0 markdownlint-cli supports a --json option to output result in JSON format. This version adds support for this format through the MarkdownlintCliJsonLogFileFormat alias.

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#provide-column-information","title":"Provide column information","text":"

    This release of Cake.Issues.Markdownlint enhances the MarkdownlintCliLogFileFormat to provide column information if reported by markdownlint.

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#recipe-packages","title":"Recipe packages","text":"

    Cake Issues recipes have been released in version 1.3.0 shipping with Cake.Issues.Markdownlint 1.1.0 and adding support for markdownlint-cli JSON files.

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Markdownlint 1.1.0 is compatible with version 1.0.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/","title":"Cake Issues Reporting Console v0.3.0 released, adding support for all Cake runners","text":"

    Version 0.3.0 of Cake.Issues.Reporting.Console has been released. This is a minor release adding features and improvements.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    • patriksvensson
    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#support-for-all-cake-runners","title":"Support for all Cake runners","text":"

    Starting with this release Cake.Issues.Reporting.Console will target .NET Standard 2.0 instead of .NET 5.0 and therefore will support all Cake runners.

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#improved-reporting","title":"Improved reporting","text":"

    Provider report is now rendered in different colors for the individual bars, making it easier to read:

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#errata-060","title":"Errata 0.6.0","text":"

    Underlying Errata library has been updated to 0.6.0, containing additional bug fixes and rendering improvements.

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Reporting.Console 0.3.0 is compatible with previous versions without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/","title":"Cake Issues v2.0.0 Released","text":"

    After several months with beta releases Cake Issues version 2.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • KirillOsenkov
    • pascalberger
    • twenzel
    • yansklyarenko
    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/#support-for-cake-20","title":"Support for Cake 2.0","text":"

    All addins have been updated to support Cake 2.x.

    Target framework have been updated to .NET Core 3.1, .NET 5 and .NET 6 to be in line with Cake. See Sunsetting of .NET Framework and .NET Core runners in Cake 2.0 for details.

    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/#support-for-msbuild-binary-logs-version-9","title":"Support for MsBuild binary logs version 9","text":"

    Support for binary logs in version 9 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 2.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • Serialization format has been updated to version 5. Older version are still supported for deserialization.
    • ProviderIssueIssueLimits has been renamed to ProviderIssueLimits
    • IIssue.Rule has been renamed to IIssue.RuleId
    • IIssue was extended with an additional RuleName property.
    • Cake.Issues.MsBuild
    • MsBuild 15 or newer required for binary logs

    For details see release notes of the individual addins:

    • Cake.Issues 2.0.0
    • Cake.Issues.DocFx 2.0.0
    • Cake.Issues.DupFinder 2.0.0
    • Cake.Issues.EsLint 2.0.0
    • Cake.Issues.GitRepository 2.0.0
    • Cake.Issues.InspectCode 2.0.0
    • Cake.Issues.Markdownlint 2.0.0
    • Cake.Issues.MsBuild 2.0.0
    • Cake.Issues.Terraform 2.0.0
    • Cake.Issues.Reporting.Console 2.0.0
    • Cake.Issues.Reporting.Generic 2.0.0
    • Cake.Issues.Reporting.Sarif 2.0.0
    • Cake.Issues.PullRequests.AppVeyor 2.0.0
    • Cake.Issues.PullRequests.AzureDevOps 2.0.0
    • Cake.Issues.PullRequests.GitHubActions 2.0.0
    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/","title":"Cake Issues v3.0.0 Released","text":"

    Cake Issues version 3.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • DiDoHH
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#support-for-cake-30","title":"Support for Cake 3.0","text":"

    All addins have been updated to support Cake 3.x.

    Target framework have been updated to .NET 6 and .NET 7 to be in line with Cake.

    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#support-for-msbuild-binary-logs-version-16","title":"Support for MsBuild binary logs version 16","text":"

    Support for binary logs in version 16 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#out-of-the-box-support-for-more-rule-links","title":"Out of the box support for more rule links","text":"

    Cake.Issues.MsBuild now will automatically provide links for Roslynator and SonarLint rules. Links for CA rules have updated to link to learn.microsoft.com.

    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 3.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • StringPathExtensions.IsValideRepositoryFilePath has been renamed to StringPathExtensions.IsValidRepositoryFilePath
    • BaseRuleDescription.Rule has been made immutable after initialization
    • Cake.Issues.Recipe
    • Since Dupfinder has been sunsetted end of 2021, out of the box support for it has been removed from Cake Issues Recipe and DupFinderLogFilePaths is no longer available. To keep using DupFinder you need to manually add Cake.Issues.DupFinder and add issues using the AddIssues method.

    For details see release notes of the individual addins:

    • Cake.Issues.Recipe 3.0.0
    • Cake.Issues 3.0.0
    • Cake.Issues.DocFx 3.0.0
    • Cake.Issues.DupFinder 3.0.0
    • Cake.Issues.EsLint 3.0.0
    • Cake.Issues.GitRepository 3.0.0
    • Cake.Issues.InspectCode 3.0.0
    • Cake.Issues.Markdownlint 3.0.0
    • Cake.Issues.MsBuild 3.0.0
    • Cake.Issues.Terraform 3.0.0
    • Cake.Issues.Reporting.Console 3.0.0
    • Cake.Issues.Reporting.Generic 3.0.0
    • Cake.Issues.Reporting.Sarif 3.0.0
    • Cake.Issues.PullRequests.AppVeyor 3.0.0
    • Cake.Issues.PullRequests.AzureDevOps 3.0.0
    • Cake.Issues.PullRequests.GitHubActions 3.0.0
    ","boost":0.5},{"location":"news/2023/08/16/cake-issues-recipes-v310-released/","title":"Cake Issues Recipes v3.1.0 released","text":"

    Version 3.1.0 of Cake Issues recipes have been released adding support for creating of reports in SARIF format.

    This post shows the highlights included in this release. For details see full release notes. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2023/08/16/cake-issues-recipes-v310-released/#reports-in-sarif-format","title":"Reports in SARIF format","text":"

    This version of Cake Issues recipes adds a new configuration parameter which allows to create reports in SARIF format allowing further processing in a lot of different tools also supporting the SARIF standard. See Report parameters for details.

    If running on Azure Pipelines the generated SARIF file is uploaded so that it will be shown in the SARIF SAST Scans Tab extension.

    ","boost":0.5},{"location":"news/2023/08/16/cake-issues-recipes-v310-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake Issues recipes 3.1.0 are compatible with version 3.x without any breaking changes. To update to the new version bump the version in your build.

    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/","title":"Cake Issues v4.0.0 Released","text":"

    Cake Issues version 4.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/#support-for-cake-40","title":"Support for Cake 4.0","text":"

    All addins have been updated to support Cake 4.x.

    Target framework have been updated to .NET 6, .NET 7 and .NET 8 to be in line with Cake.

    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/#switch-to-systemtextjson-for-serialization","title":"Switch to System.Text.Json for serialization","text":"

    For serialization / deserialization of issues LitJson was used internally. With Cake.Issues 4.0 internal code has been changed to use System.Text.Json classes.

    The change should not have any impact for users.

    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    While Cake.Issues 4.0.0 is a breaking release, there are no breaking changes beside the update to Cake 4.x and the changes to target framework version.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/01/14/alignment-of-addin-lifecycles/","title":"Alignment of addin lifecycles","text":"

    Cake Issues has a modular architecture consisting of multiple addins. Historically every addin had its own independent release lifecycle. Starting with the next release work will begin to have all addins share the same release lifecycle.

    When Cake Issues started all three core addins (Cake.Issues, Cake.Issues.Reporting and Cake.Issues.PullRequsts) and every issue provider, report format and pull request system addin were released on their own schedule, allowing fast iterations of individual components. With the release of Cake Issues 1.0 the release lifecycle of the three core addins have been aligned, resulting in a simplified release process.

    Starting with the next release we'll begin to move also the remaining issue provider, report format and pull request system addins into the main Cake Issues repository and have them released together with the core addins.

    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/","title":"Cake Issues v4.1.0 Released","text":"

    Cake Issues version 4.1.0 has been released with improvements for Cake Frosting and support for latest MsBuild binary log format.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • pascalberger
    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#improvement-for-cake-frosting","title":"Improvement for Cake Frosting","text":"

    Cake.Frosting.Issues.Reporting and Cake.Frosting.Issues.PullRequests have been released as optimized version of the Cake.Issues.Reporting and Cake.Issues.PullRequests for Cake Frosting.

    These addins come with a dependency to the core Cake.Issues addin, allowing it to be consumed as transitive dependency.

    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#support-for-msbuild-binary-logs-version-18","title":"Support for MsBuild binary logs version 18","text":"

    Support for binary logs in version 18 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#alignment-of-release-lifecycle","title":"Alignment of release lifecycle","text":"

    As announced in Alignment of addin lifecycles work as started to move addins into the main Cake Issues repository.

    Starting with this release the following addins will be released together with the core addins:

    • Cake.Issues.DocFx
    • Cake.Issues.EsLint
    • Cake.Issues.MsBuild
    • Cake.Issues.InspectCode
    • Cake.Issues.Markdownlint
    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.1.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/","title":"Cake Issues v4.2.0 Released","text":"

    Cake Issues version 4.2.0 has been released introducing a new issue provider for SARIF compatible files.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#new-issue-provider-for-sarif-files","title":"New issue provider for SARIF files","text":"

    A new Cake.Issues.Sarif addin has been released which adds support for reading issues in SARIF format.

    See New addin for reading SARIF files for details.

    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#improvement-for-cake-frosting","title":"Improvement for Cake Frosting","text":"

    Optimized versions for Cake Frosting have been released for the following addins:

    • Cake.Frosting.Issues.DocFx
    • Cake.Frosting.Issues.EsLint
    • Cake.Frosting.Issues.GitRepository
    • Cake.Frosting.Issues.InspectCode
    • Cake.Frosting.Issues.Markdownlint
    • Cake.Frosting.Issues.Terraform
    • Cake.Frosting.Issues.PullRequests.AppVeyor
    • Cake.Frosting.Issues.PullRequests.AzureDevOps
    • Cake.Frosting.Issues.PullRequests.GitHubActions

    These addins come with a dependency to the core addins, allowing the core addins to be consumed as transitive dependencies.

    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#alignment-of-release-lifecycle","title":"Alignment of release lifecycle","text":"

    As announced in Alignment of addin lifecycles work as started to move addins into the main Cake Issues repository.

    Starting with this release the following addins will be released together with the core addins:

    • Cake.Issues.GitRepository
    • Cake.Issues.Terraform
    • Cake.Issues.PullRequests.AppVeyor
    • Cake.Issues.PullRequests.AzureDevOps
    • Cake.Issues.PullRequsts.GitHubActions
    • Cake.Issues.Reporting.Console
    • Cake.Issues.Reporting.Generic
    • Cake.Issues.Reporting.Sarif
    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.2.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/14/new-addin-for-reading-sarif-files/","title":"New addin for reading SARIF files","text":"

    In version 4.2.0 a new Cake.Issues.Sarif addin has been released which adds support for reading issues in SARIF format.

    SARIF is an industry standard format for the output of static analysis tools. With the introduction of SARIF support through the Cake.Issues.Sarif addin any tool which can output results in SARIF format can now be used together with Cake Issues.

    See Supported Tools for an updated list of supported tools.

    The addins is available in a version for Cake .NET Tool (Cake.Issues.Sarif) and Cake Frosting (Cake.Frosting.Issues.Sarif).

    ","boost":0.5},{"location":"news/2024/04/16/cake-issues-v421-released/","title":"Cake Issues v4.2.1 Released","text":"

    Cake Issues version 4.2.1 has been released with compatibility fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/16/cake-issues-v421-released/#compatibility-improvements","title":"Compatibility improvements","text":"

    As a side-effect of moving all addins to the central Cake Issues repository, AssemblyVersion of every has been set to the release version.

    Addins are backwards compatible though to latest major version, which was no longer possible with this change.

    This release fixes this by setting the AssemblyVersion to the major version (currently 4.0.0).

    ","boost":0.5},{"location":"news/2024/04/16/cake-issues-v421-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.2.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/20/cake-issues-v430-released/","title":"Cake Issues v4.3.0 Released","text":"

    Cake Issues version 4.3.0 has been released with support for MsBuild binary log format version 20.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/20/cake-issues-v430-released/#support-for-msbuild-binary-logs-version-20","title":"Support for MsBuild binary logs version 20","text":"

    Support for binary logs in version 20 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/04/20/cake-issues-v430-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.3.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/25/cake-issues-v431-released/","title":"Cake Issues v4.3.1 Released","text":"

    Cake Issues version 4.3.1 has been released bringing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/25/cake-issues-v431-released/#bugfix-for-issues-across-multiple-lines","title":"Bugfix for issues across multiple lines","text":"

    This release fixes an exception if an issue provider reports an issue across multiple lines and the end column is before the start column.

    ","boost":0.5},{"location":"news/2024/04/25/cake-issues-v431-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.3.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/","title":"Cake Issues v4.4.0 Released","text":"

    Cake Issues version 4.4.0 has been released with improvements for Cake Frosting.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/#cake-frosting-improvements","title":"Cake Frosting improvements","text":"

    Support for implicit usings has been added to the Cake Frosting addins.

    If <ImplicitUsings>enable</ImplicitUsings> is set in a Cake Frosting build, namespaces for Cake Issues addins are implicitly added, resulting in a similar experience as when using Cake .NET Tool, where aliases can be used directly without the requirements to first add using statements.

    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/#filtering-improvements-in-html-devextreme-data-grid-template","title":"Filtering improvements in HTML DevExtreme Data Grid template","text":"

    The HTML DevExtreme Data Grid template now supports search boxes in filter dropdowns.

    See Header Filter Customization in DataGrid for details.

    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.4.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/","title":"Cake Issues v4.5.0 Released","text":"

    Cake Issues version 4.5.0 has been released adding support for build breaking.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/#support-for-breaking-builds","title":"Support for breaking builds","text":"

    New BreakBuildOnIssues aliases have been introduced to fail builds when issues are found.

    See build breaking for an example.

    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/#possibility-to-define-license-for-html-devextreme-data-grid","title":"Possibility to define license for HTML DevExtreme Data Grid","text":"

    Starting with version 23.2 DevExtreme no longer comes with a free community license. HTML DevExtreme Data Grid template will stay on version 23.1 for this reason.

    If you have a DevExtreme license you can pass it to the new DevExtremeLicenseKey option and update to a newer version using the DevExtremeVersion option.

    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.5.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/05/24/cake-issues-v451-released/","title":"Cake Issues v4.5.1 Released","text":"

    Cake Issues version 4.5.1 has been released containing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/05/24/cake-issues-v451-released/#fixed-log-output","title":"Fixed log output","text":"

    This release fixes verbose output of Cake.Issues.PullRequests for provider issue limits.

    ","boost":0.5},{"location":"news/2024/05/24/cake-issues-v451-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.5.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/06/24/cake-issues-v460-released/","title":"Cake Issues v4.6.0 Released","text":"

    Cake Issues version 4.6.0 has been released with improvements for SARIF reports.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2024/06/24/cake-issues-v460-released/#improvements-for-sarif-reports","title":"Improvements for SARIF Reports","text":"

    A new option SarifIssueReportFormatSettings.ExistingIssues has been introduced which allows to pass in a list of known issues not related to current code changes, resulting in the baselineState property being set in the resulting SARIF report.

    This property is for example be used in the SARIF viewer extension for Azure Pipelines as filter option.

    The following new settings options have been added:

    SarifIssueReportFormatSettings property Output property Description Guid automationDetails.guid Unique, stable identifier for the run BaselineGuid run.baselineGuid String equal to Guid of a previous run CorrelationGuid automationDetails.correlationGuid Guid shared by all runs of the same type","boost":0.5},{"location":"news/2024/06/24/cake-issues-v460-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.6.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/","title":"Cake Issues v4.7.0 Released","text":"

    Cake Issues version 4.7.0 has been released with detailed line information for SARIF issue provider and support for MsBuild binary log format version 21.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/#support-for-msbuild-binary-logs-version-21","title":"Support for MsBuild binary logs version 21","text":"

    Support for binary logs in version 21 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/#enhanced-line-and-column-information-from-sarif-reports","title":"Enhanced line and column information from SARIF reports","text":"

    Cake.Issues.Sarif has been enhanced to also provide the following IIssue properties if available:

    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.7.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/17/cake-issues-v471-released/","title":"Cake Issues v4.7.1 Released","text":"

    Cake Issues version 4.7.1 has been released with bugfixes for SARIF reports

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/17/cake-issues-v471-released/#bugfixes-for-sarif-reports","title":"Bugfixes for SARIF reports","text":"

    This release fixes two bugs in Cake.Issues.Reporting.Sarif:

    • If two or more different rules containing a rule URL are reported by the same issue provider, the first occurrence of the second rule will have 0 as ruleIndex instead of 1
    • originalUriBaseIds should end with a slash as defined in SARIF Specification 2.1.0 \u00a73.14.14.
    ","boost":0.5},{"location":"news/2024/07/17/cake-issues-v471-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.7.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/18/cake-issues-v472-released/","title":"Cake Issues v4.7.2 Released","text":"

    Cake Issues version 4.7.2 has been released containing bug fixes for generic reporting addin.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/18/cake-issues-v472-released/#fix-for-generic-reporting-addin","title":"Fix for generic reporting addin","text":"

    This release fixes an bug in Cake.Issues.Reporting.Generic where it was not possible to overwrite version of JsPdf version used in HTML DevExtreme Data Grid template.

    ","boost":0.5},{"location":"news/2024/07/18/cake-issues-v472-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.7.2 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/19/cake-issues-v480-released/","title":"Cake Issues v4.8.0 Released","text":"

    Cake Issues version 4.8.0 has been released with improvements for SARIF issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/19/cake-issues-v480-released/#improvements-for-sarif-issue-provider","title":"Improvements for SARIF issue provider","text":"

    In previous releases the SARIF issue provider used the tool name defined in the SARIF file for a specific run as issue provider. This has the advantage that if multiple SARIF files from different sources are read, every issue has a different issue provider name, which reflects the original tool.

    But it can also have side-effect, for example that different states are reported to pull request depending if run is successful or not (see cake-contrib/Cake.Issues.Recipe#477), because the actual issue provider name is only known once there are issues reported.

    This release introduces a new option SarifIssuesSettings.UseToolNameAsIssueProviderName to define whether the tool name reported in the SARIF log or a fixed value should be used as issue provider name.

    ","boost":0.5},{"location":"news/2024/07/19/cake-issues-v480-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.8.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/","title":"Cake Issues v4.9.0 Released","text":"

    Cake Issues version 4.9.0 has been released with bugfixes for SARIF report format and Terraform issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/#bugfixes-for-sarif-report-format","title":"Bugfixes for SARIF report format","text":"

    This release fixes an issue where entries in a SARIF report were marked as updated if branch or commit in file link has changed.

    To achieve this, a new constructor for the generic IIssueComparer has been introduced, which allows to define which IIssue properties should be ignored for the comparison.

    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/#bugfixes-for-terraform-issue-provider","title":"Bugfixes for Terraform issue provider","text":"

    A bug has been fixed where root directory was not correctly determined when running on Linux or macOS.

    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.9.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/30/cake-issues-v4100-released/","title":"Cake Issues v4.10.0 Released","text":"

    Cake Issues version 4.10.0 has been released with support for MsBuild binary log format version 22.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/30/cake-issues-v4100-released/#support-for-msbuild-binary-logs-version-22","title":"Support for MsBuild binary logs version 22","text":"

    Support for binary logs in version 20 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/07/30/cake-issues-v4100-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.10.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/","title":"Cake Issues v4.10.1 Released","text":"

    Cake Issues version v4.10.1 has been released with bugfixes for Cake Frosting and file linking

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • gep13
    • hotchkj
    • pascalberger
    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/#bugfixes-for-cake-frosting","title":"Bugfixes for Cake Frosting","text":"

    This release fixes dependencies of the following Cake Frosting optimized NuGet packages:

    • Cake.Frosting.Issues.PullRequests.AppVeyor
    • Cake.Frosting.Issues.PullRequests.AzureDevOps
    • Cake.Frosting.Issues.PullRequests.GitHubActions
    • Cake.Frosting.Issues.Reporting.Console
    • Cake.Frosting.Issues.Reporting.Generic
    • Cake.Frosting.Issues.Reporting.Sarif
    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/#bugfixes-for-file-linking","title":"Bugfixes for file linking","text":"

    This release fixes an issue that file links are created for issues which are not related to a file.

    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues v4.10.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/10/06/cake-issues-v4110-released/","title":"Cake Issues v4.11.0 Released","text":"

    Cake Issues version 4.11.0 has been released with support for MsBuild binary log format version 23.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/10/06/cake-issues-v4110-released/#support-for-msbuild-binary-logs-version-23","title":"Support for MsBuild binary logs version 23","text":"

    Support for binary logs in version 23 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/10/06/cake-issues-v4110-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.11.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/11/05/cake-issues-v4120-released/","title":"Cake Issues v4.12.0 Released","text":"

    Cake Issues version 4.12.0 has been released with support for MsBuild binary log format version 24.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/11/05/cake-issues-v4120-released/#support-for-msbuild-binary-logs-version-24","title":"Support for MsBuild binary logs version 24","text":"

    Support for binary logs in version 24 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/11/05/cake-issues-v4120-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.12.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/","title":"Cake Issues v5.0.0 Released","text":"

    Cake Issues version 5.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#support-for-cake-50","title":"Support for Cake 5.0","text":"

    All addins have been updated to support Cake 5.x.

    Target framework have been updated to .NET 8 and .NET 9 to be in line with Cake.

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#improvements-for-cake-frosting","title":"Improvements for Cake Frosting","text":"

    Cake.Frosting.Issues.PullRequests.AzureDevOps now references Cake.Frosting.AzureDevOps, a version of Cake.AzureDevOps, optimized for Cake Frosting.

    Instead of shipping client assemblies to access Azure DevOps as part of Cake.AzureDevOps, Cake.Frosting.AzureDevOps references the corresponding NuGet packages, which for example allows to control version of the libraries used.

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#security-improvements","title":"Security improvements","text":"

    Transitive dependencies which contain known security vulnerabilities have been updated to newer versions where the vulnerabilities are fixed.

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.0.0 is a breaking release, which means that there is a small change that changes to your build script are required.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/12/17/cake-issues-v501-released/","title":"Cake Issues v5.0.1 Released","text":"

    Cake Issues version 5.0.1 has been released containing bug fixes for Cake Frosting addins

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/12/17/cake-issues-v501-released/#bugfixes-for-cake-frosting","title":"Bugfixes for Cake Frosting","text":"

    This release fixes dependencies of the following Cake Frosting optimized NuGet packages:

    • Cake.Frosting.Issues.PullRequests.AppVeyor
    ","boost":0.5},{"location":"news/2024/12/17/cake-issues-v501-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.0.1 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/12/21/new-website/","title":"New website","text":"

    Today a new version of the Cake Issues website has been published.

    The Cake Issues website was introduced 2017 as a static website built using Wyam, like the Cake website. Using Wyam allowed to add full API documentation and other features like list of addins or overview of open issues across all addins.

    Wyam is no longer maintained, with Statiq as its successor. Unfortunately also the deployment pipeline for the Cake Issues website stopped working in 2023, resulting in the website no longer receiving updates.

    Since the introduction of the Cake Issues website seven years ago, the Cake website also has been improved, among other things, with a dedicated page for each addin listing the aliases the addin provides. These improvements made a full API documentation on Cake Issues website somehow redundant.

    With .NET API documentation no longer being a requirement there are much more tooling options available. The choice was made to use Material for MkDocs, which comes with a lot of features for writing technical documentation.

    One of the features of the new website is support for multiple versions using mike. https://cakeissues.net/latest/ will always point to the documentation of the latest released version. https://cakeissues.net/develop/ points to the documentation of the current development branch. Beside that there's now a version selector in the header to show documentation for any old version.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/","title":"2024 In Review","text":"

    2024 had been an amazing year for Cake Issues. In this post we'll look back to what had been achieved in 2024.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#alignment-of-addin-lifecycles","title":"Alignment of addin lifecycles","text":"

    2024 started with an announcement to consolidate all Cake Issue addins into the main Cake.Issues GitHub repository, which has been finished by now.

    Beside having all addins share a release lifecycle, having them in a single repository also simplified maintenance work and release process. This resulted in a total of 20 releases of Cake Issues in 2024, including one major release with 5.0.0, bringing constant improvements and bugfixes.

    Core Cake.Issues addin has seen a steady, and stronger than 2023, rise of downloads during 2024, resulting in nearly 1 million downloads by the end of the year:

    See NuGet Trends for details.

    The individual addins had a different age, some up to 7 years old, written for .NET Framework. As part of the consolidation of all addins in a single mono-repository effort was made to unify and modernize the code base across all addins.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#new-addins","title":"New addins","text":"

    With the introduction of Cake.Issues.Sarif a lot of additional tools supporting the SARIF standard are now supported by Cake Issues as listed on Supported Tools.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#improvements-for-cake-frosting","title":"Improvements for Cake Frosting","text":"

    Several improvements were released during 2024 for running Cake Issues with Cake Frosting.

    For all addins a NuGet package optimized for running with Cake Frosting is now available. These NuGet packages have dependencies to Cake, Cake Issues core addins or any other required dependency defined, which gives full control about the dependency, their version and update behavior to the user through the standard .NET project system.

    These packages also support implicit usings improving discoverability of aliases for build authors. Implicit usings can be enabled by setting <ImplicitUsings>enable</ImplicitUsings> in the csproj file of a build.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#updated-website","title":"Updated website","text":"

    The end of 2024 saw also the relaunch of Cake Issues website, which has been updated to modern standards and tooling. Effort has also been put into content to improve discoverability of documentation for users. Examples and documentation have also been updated to latest Cake Issues and .NET version.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#thanks","title":"Thanks","text":"

    \u2764 Huge thanks to our community! All what had been achieved in 2024 would not have been possible without the support and contributions of the community! \u2764

    People contributing to Cake Issues in 2024:

    • christianbumann
    • eoehen
    • gep13
    • hotchkj
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/","title":"Cake Issues v5.1.0 Released","text":"

    Cake Issues version 5.1.0 has been released introducing a new issue provider for Test Anything Protocol (TAP) compatible files.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#new-issue-provider-for-test-anything-protocol-tap-files","title":"New issue provider for Test Anything Protocol (TAP) files","text":"

    A new Cake.Issues.Tap addin has been released which adds support for reading issues in Test Anything Protocol (TAP) format.

    See New addin for reading TAP files for details.

    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#improvements-for-cake-frosting-in-cake-issues-recipe","title":"Improvements for Cake Frosting in Cake Issues Recipe","text":"

    Cake Issues Recipe for Cake Frosting has been updated to use Cake.Frosting.AzureDevOps instead of Cake.AzureDevOps allow more control over dependencies in Cake Frosting builds.

    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#documentation-improvements-for-cake-frosting","title":"Documentation improvements for Cake Frosting","text":"

    Examples for Cake Frosting have been added across whole documentation.

    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.1.0 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2025/01/03/new-addin-for-reading-test-anything-protocol-tap-files/","title":"New addin for reading Test Anything Protocol (TAP) files","text":"

    In version 5.1.0 a new Cake.Issues.Tap addin has been released which adds support for reading issues in Test Anything Protocol (TAP) format.

    Test Anything Protocol (TAP) is a protocol for communicating between test logic in a language-agnostic way. There are several linting tools which can output their result in a TAP compatible format.

    The Cake.Issues.Tap addin supports multiple log file formats. Details, like file, line / column or rule information, are not standardized in Test Anything Protocol (TAP). The GenericLogFileFormat will therefore only return issues containing the description, which might be the file name for some tools. To retrieve detailed information a tool specific log file format needs to be used which can parse the non-standardized data provided by the tool for every issue.

    There are additional log file formats for the following tools available:

    • stylelint
    • Textlint

    See Supported Tools for an updated list of supported tools.

    The addins is available in a version for Cake .NET Tool (Cake.Issues.Tap) and Cake Frosting (Cake.Frosting.Issues.Tap).

    ","boost":0.5},{"location":"news/2025/01/05/cake-issues-v511-released/","title":"Cake Issues v5.1.1 Released","text":"

    Cake Issues version 5.1.1 has been released containing bug fixes for Cake Frosting addins

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/05/cake-issues-v511-released/#bugfixes-for-cake-frosting","title":"Bugfixes for Cake Frosting","text":"

    This release fixes dependencies of the following Cake Frosting optimized NuGet packages:

    • Cake.Frosting.Issues.PullRequests
    • Cake.Frosting.Issues.MsBuild
    ","boost":0.5},{"location":"news/2025/01/05/cake-issues-v511-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.1.1 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/","title":"Cake Issues v5.2.0 Released","text":"

    Cake Issues version 5.2.0 has been released bringing improvements to build breaking and SARIF issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#support-for-suppressed-issues-in-sarif-files","title":"Support for suppressed issues in SARIF files.","text":"

    SARIF supports suppressions for issues which are suppressed, either in the source code or through some external tool.

    Until now this property was ignored. Starting with Cake Issues 5.2.0 issues which are marked as suppressed in a SARIF file will no longer be imported by default. There is a new setting IgnoreSuppressedIssues which can be disabled to continue reading suppressed issues.

    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#additional-alias-for-build-breaking","title":"Additional alias for build breaking","text":"

    There is a new alias for fails build if any issues are found with settings to limit to priority and issue provider types to complement the already existing aliases for failing builds.

    The following example fails build if issues with severity warning or higher from MsBuild are found:

    Cake .NET ToolCake Frosting
    BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToConsider = [MsBuildIssuesProviderTypeName]\n    });\n
    context.BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToConsider = [context.MsBuildIssuesProviderTypeName()]\n    });\n

    The following example fails build if issues with severity warning or higher are found, ignoring issues reported by MsBuild:

    Cake .NET ToolCake Frosting
    BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToIgnore = [MsBuildIssuesProviderTypeName]\n    });\n
    context.BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToIgnore = [context.MsBuildIssuesProviderTypeName()]\n    });\n
    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#support-for-failing-builds-in-cake-issues-recipe","title":"Support for failing builds in Cake Issues Recipe","text":"

    Cake Issues Recipe has new configuration options to support failing of builds if any issues are found:

    • ShouldFailBuildOnIssues: Indicates whether build should fail if any issues are found
    • MinimumPriority: Minimum priority of issues considered to fail the build
    • IssueProvidersToConsider: List of issue provider types to consider
    • IssueProvidersToIgnore: List of issue provider types to ignore
    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.2.0 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2025/01/10/cake-issues-v530-released/","title":"Cake Issues v5.3.0 Released","text":"

    Cake Issues version 5.3.0 has been released bringing improvements to Test Anything Protocol issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/10/cake-issues-v530-released/#improvements-for-test-anything-protocol-issue-provider","title":"Improvements for Test Anything Protocol issue provider","text":"

    This version fixes an issue where TAP files created by stylelint containing absolute paths could not be read.

    There are also cases where stylelint would write invalid YAML content into the TAP file. The parser now tries to handle the case where double quotes are not escaped in a YAML block, which is the case if a message from a stylelint rule contains double quotes.

    Starting with this release the stylelint log format for the TAP issue provider will also skip issues with a path outside of the defined repository root path.

    ","boost":0.5},{"location":"news/2025/01/10/cake-issues-v530-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.3.0 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/archive/2025/","title":"2025","text":""},{"location":"news/archive/2024/","title":"2024","text":""},{"location":"news/archive/2023/","title":"2023","text":""},{"location":"news/archive/2022/","title":"2022","text":""},{"location":"news/archive/2021/","title":"2021","text":""},{"location":"news/archive/2020/","title":"2020","text":""},{"location":"news/category/release-notes/","title":"Release Notes","text":""},{"location":"news/category/new-addin/","title":"New Addin","text":""},{"location":"news/category/announcements/","title":"Announcements","text":""},{"location":"news/page/2/","title":"News","text":""},{"location":"news/page/3/","title":"News","text":""},{"location":"news/page/4/","title":"News","text":""},{"location":"news/page/5/","title":"News","text":""},{"location":"news/archive/2024/page/2/","title":"2024","text":""},{"location":"news/archive/2024/page/3/","title":"2024","text":""},{"location":"news/category/release-notes/page/2/","title":"Release Notes","text":""},{"location":"news/category/release-notes/page/3/","title":"Release Notes","text":""},{"location":"news/category/release-notes/page/4/","title":"Release Notes","text":""},{"location":"news/category/release-notes/page/5/","title":"Release Notes","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"api/","title":"API","text":""},{"location":"api/#core-addins","title":"Core Addins","text":"
    • Cake.Issues
    • Cake.Issues.Reporting
    • Cake.Issues.PullRequests
    "},{"location":"api/#issue-provider","title":"Issue Provider","text":"
    • Cake.Issues.DocFx
    • Cake.Issues.EsLint
    • Cake.Issues.GitRepository
    • Cake.Issues.InspectCode
    • Cake.Issues.Markdownlint
    • Cake.Issues.MsBuild
    • Cake.Issues.Sarif
    • Cake.Issues.Tap
    • Cake.Issues.Terraform
    "},{"location":"api/#report-formats","title":"Report Formats","text":"
    • Cake.Issues.Reporting.Console
    • Cake.Issues.Reporting.Generic
    • Cake.Issues.Reporting.Sarif
    "},{"location":"api/#pull-request-systems","title":"Pull Request Systems","text":"
    • Cake.Issues.PullRequests.AppVeyor
    • Cake.Issues.PullRequests.AzureDevOps
    • Cake.Issues.PullRequests.GitHubActions
    "},{"location":"documentation/features/","title":"Features","text":""},{"location":"documentation/features/#ready-to-use-distributions","title":"Ready To Use Distributions","text":"
    • Cake Recipe Packages

      Cake Issues recipes provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

      It handles all the parsing, integration with build and pull request systems for you, using the individual Cake Issues addins.

      Recipes

    "},{"location":"documentation/features/#reading-creating-issues","title":"Reading & Creating Issues","text":"
    • Read issues provided by tools

      The ReadIssues aliases can be used for reading issues reported by a linter to tool using an issue provider.

      There are overloads for reading using a single or multiple issue provider.

      Reading issues

    • Create issues in your build

      The NewIssue aliases can be used for creating issues in the build script.

      Creating issues

    • Support for file links

      Support for creating links to file & location on source code hosting system (GitHub, Azure Repos, etc).

      Linking to file repositories

    • Issue serialization

      Support for serializing and deserializing created issues and issues read from tools.

      Aliases

    • Support for multiple message formats

      Support for reading issues in multiple formats (Plain text, Markdown, HTML) if supported by issue provider.

    • Support for run information

      Support for passing additional run information to identify specific runs.

    "},{"location":"documentation/features/#breaking-builds","title":"Breaking builds","text":"
    • Fail builds on reported issues

      The BreakBuildOnIssues aliases can be used for failing builds if specific issues were reported.

      There are overloads for failing if issues of certain minimum priority or issue providers are found, or by passing any custom function.

      Failing builds

    "},{"location":"documentation/features/#reporting","title":"Reporting","text":"
    • Create reports

      The CreateIssueReport aliases can be used for creating reports in a supported reporting format.

      There are overloads for reading issues from a single or multiple issue provider or for passing an existing list of issues.

      Creating reports

    "},{"location":"documentation/features/#build-pull-request-system-integration","title":"Build & Pull Request System Integration","text":"
    • Add comments to pull requests

      The ReportIssuesToPullRequest aliases can be used for writing issues as comments to pull requests.

      There are overloads for reading issues from a single or multiple issue provider or for passing an existing list of issues.

      Reporting issues to pull request systems

    • Report issues to build runs

      The ReportIssuesToPullRequest aliases can be used for reporting issues to build runs.

      There are overloads for reading issues from a single or multiple issue provider or for passing an existing list of issues.

      Reporting issues to build servers

    • Issue filters

      Support for passing custom issue filter routines.

      Using custom issue filter

    • Limit reported issues

      Advanced support to limit number of maximum issues per run, across multiple runs or per issue provider through settings.

      Settings

    • Automatic comment resolving

      If supported by the pull request system, comments for issues are automatic resolved if fixed in subsequent commits.

    "},{"location":"documentation/how-cake-issues-works/","title":"How Cake Issues Works","text":"

    The Cake Issues addins are built in a modular architecture, allowing to easily enhance it for supporting additional analyzers, linters, report formats and pull request systems.

    "},{"location":"documentation/how-cake-issues-works/#cakeissues-addin","title":"Cake.Issues addin","text":"

    The Cake.Issues addin provides aliases for creating issues or reading issues using one or more issue providers.

    Support for different code analyzers and linters is provided through issue provider addins which cover a wide range of linters and tools.

    The issues are read into IIssue objects which then can be passed to Cake.Issues.Reporting addin, Cake.Issues.PullRequests addin or further processed in the build script.

    The use of issue provider addins, which contain the parsing logic for individual tool output formats, and the use of IIssue as common data structure, allows to abstract the tooling output from other concerns like integration with build systems, pull request workflow or the creation of reports.

    "},{"location":"documentation/how-cake-issues-works/#cakeissuesreporting-addin","title":"Cake.Issues.Reporting addin","text":"

    The Cake.Issues.Reporting addin provides aliases for creating reports for issues which are read or have been created using the Cake.Issues addin.

    Support for different report formats is provided through report format addins.

    "},{"location":"documentation/how-cake-issues-works/#cakeissuespullrequests-addin","title":"Cake.Issues.PullRequests addin","text":"

    The Cake.Issues.PullRequests addin provides aliases for reporting issues which are read or have been created using the Cake.Issues addin as comments to pull requests or builds.

    Support for different pull request systems is provided through pull request system addins.

    "},{"location":"documentation/overview/","title":"Introduction","text":"

    The Cake.Issues addins for the Cake build automation system offer an extensive and flexible solution for reading linting issues.

    Cake.Issues redefines issue management within the Cake build system by offering a comprehensive, universal, and extensible solution. The unique capabilities of the addins empower development teams to enforce coding standards, generate insightful reports, seamlessly incorporate various linting tools, and streamlining the integration with pull requests. With its modular architecture and extensive set of aliases, Cake.Issues provides a future-proof infrastructure for issue management in Cake builds, fostering a more efficient and adaptable development process.

    "},{"location":"documentation/overview/#unique-problem-solving","title":"Unique Problem Solving","text":"

    Some examples how Cake.Issues can help development teams to improve code quality.

    "},{"location":"documentation/overview/#break-build-on-linting-issues","title":"Break build on linting issues","text":"

    Cake.Issues provides a seamless integration, allowing you to enforce coding standards by breaking builds when linting issues are detected.

    Breaking builds

    "},{"location":"documentation/overview/#pull-requests-integration","title":"Pull Requests integration","text":"

    Ensure linting issues are promptly addressed by having them reported as comments on pull requests. Cake.Issues bridges the gap between linting tools and version control systems, fostering efficient collaboration during code reviews.

    Integrate with pull request systems

    "},{"location":"documentation/overview/#reports","title":"Reports","text":"

    Craft detailed and visually appealing reports for linting issues directly within your Cake build. The addins facilitates easy identification and resolution of linting concerns, enhancing the overall code quality.

    Creating Reports

    "},{"location":"documentation/overview/#universal-compatibility","title":"Universal Compatibility","text":""},{"location":"documentation/overview/#diverse-linting-tool-support","title":"Diverse Linting Tool Support","text":"

    Regardless of the linting tools you use, Cake.Issues ensures that you're not left out. Cake.Issues supports a variety of analyzers and linters, allowing you to incorporate new tools effortlessly while maintaining integration with existing ones.

    Supported Tools

    "},{"location":"documentation/overview/#build-system-agnosticism","title":"Build System Agnosticism","text":"

    Embrace the freedom to choose the build system that best suit your needs. If your current build system lacks tasks for reporting issues in pull requests, Cake.Issues steps in to fill that void seamlessly. In the case of using multiple CI services, Cake.Issues guarantees a consistent feature set across all of them.

    Supported Build and pull request systems

    "},{"location":"documentation/overview/#unprecedented-extensibility","title":"Unprecedented Extensibility","text":""},{"location":"documentation/overview/#modular-architecture","title":"Modular Architecture","text":"

    The Cake.Issues addin breaks away from the norm by offering a modular architecture. Comprising over 15 distinct addins, it presents a cohesive solution through more than 75 aliases for Cake builds, providing unparalleled flexibility.

    Architecture

    "},{"location":"documentation/overview/#extensible-infrastructure","title":"Extensible Infrastructure","text":"

    Designed with extensibility in mind, Cake.Issues provides extension points for supporting additional analyzers, linters,report formats, and code review systems. This adaptability ensures that your build scripts can evolve with the ever-changing landscape of development tools.

    Documentation

    "},{"location":"documentation/supported-tools/","title":"Supported Tools","text":"

    This pages lists tools known to be working with Cake Issues (1)

    1. If you have used Cake Issues with other we would like to hear from you. You can add it to this list by creating a pull request here.
    "},{"location":"documentation/supported-tools/#net","title":".NET","text":"Tool Tool Version Format Issue Provider Supported Since dupFinder Cake.Issues.DupFinder 0.8.0 InspectCode xml Cake.Issues.InspectCode 0.1.0 InspectCode >= 2024.1 SARIF Cake.Issues.Sarif 4.2.0 MsBuild Binary Log 7 Cake.Issues.MsBuild 0.6.1 MsBuild Binary Log 8 Cake.Issues.MsBuild 0.8.0 MsBuild Binary Log 9 Cake.Issues.MsBuild 2.0.0 MsBuild Binary Log 16 Cake.Issues.MsBuild 3.0.0 MsBuild Binary Log 17 Cake.Issues.MsBuild 4.0.0 MsBuild Binary Log 18 Cake.Issues.MsBuild 4.1.0 MsBuild Binary Log 20 Cake.Issues.MsBuild 4.3.0 MsBuild Binary Log 21 Cake.Issues.MsBuild 4.7.0 MsBuild Binary Log 22 Cake.Issues.MsBuild 4.10.0 MsBuild Binary Log 23 Cake.Issues.MsBuild 4.11.0 MsBuild Binary Log 24 Cake.Issues.MsBuild 4.12.0 MsBuild XmlFileLogger Cake.Issues.MsBuild 0.1.0"},{"location":"documentation/supported-tools/#ansible","title":"Ansible","text":"Tool Tool Version Format Issue Provider Supported Since Ansible-lint SARIF Cake.Issues.Sarif 4.2.0 checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#amazon-cloud-formation-templates","title":"Amazon Cloud Formation Templates","text":"Tool Tool Version Format Issue Provider Supported Since cfn-lint SARIF Cake.Issues.Sarif 4.2.0 checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#azure-resource-manager-arm","title":"Azure Resource Manager (ARM)","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#bicep","title":"Bicep","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#clojure","title":"Clojure","text":"Tool Tool Version Format Issue Provider Supported Since clj-kondo sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#copypaste-detection","title":"Copy/Paste Detection","text":"Tool Tool Version Format Issue Provider Supported Since dupFinder Cake.Issues.DupFinder 0.8.0 jscpd jscpd-sarif-reporter Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#css-scss-sass","title":"CSS, SCSS, Sass","text":"Tool Tool Version Format Issue Provider Supported Since stylelint tap Cake.Issues.Tap 5.1.0"},{"location":"documentation/supported-tools/#dockerfile","title":"Dockerfile","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 Hadolint sarif Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#github-actions","title":"GitHub Actions","text":"Tool Tool Version Format Issue Provider Supported Since actionlint SARIF Cake.Issues.Sarif 4.2.0 checkov SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#go","title":"Go","text":"Tool Tool Version Format Issue Provider Supported Since golangci-lint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#groovy","title":"Groovy","text":"Tool Tool Version Format Issue Provider Supported Since npm-groovy-lint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#helm-charts","title":"Helm charts","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#java","title":"Java","text":"Tool Tool Version Format Issue Provider Supported Since checkstyle sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#javascript","title":"JavaScript","text":"Tool Tool Version Format Issue Provider Supported Since ESLint Current json Cake.Issues.EsLint 0.1.0"},{"location":"documentation/supported-tools/#json","title":"JSON","text":"Tool Tool Version Format Issue Provider Supported Since eslint-plugin-json Cake.Issues.EsLint 0.1.0 eslint-plugin-jsonc Cake.Issues.EsLint 0.1.0"},{"location":"documentation/supported-tools/#jsx-tsx","title":"JSX & TSX","text":"Tool Tool Version Format Issue Provider Supported Since eslint-plugin-jsx-a11y Cake.Issues.EsLint 0.1.0 eslint-plugin-react Cake.Issues.EsLint 0.1.0"},{"location":"documentation/supported-tools/#kotlin","title":"Kotlin","text":"Tool Tool Version Format Issue Provider Supported Since detekt sarif Cake.Issues.Sarif 4.2.0 ktlint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#kubernetes","title":"Kubernetes","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Kubeconform tap Cake.Issues.Tap 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#markdown","title":"Markdown","text":"Tool Tool Version Format Issue Provider Supported Since DocFx Cake.Issues.DocFx 0.1.0 markdownlint resultVersion=1 Cake.Issues.Markdownlint 0.1.0 markdownlint-cli < 0.9.0 Default Cake.Issues.Markdownlint 0.2.0 markdownlint-cli >= 0.9.0 Default Cake.Issues.Markdownlint 0.3.0 markdownlint-cli >= 0.19.0 Default Cake.Issues.Markdownlint 0.8.1 markdownlint-cli >= 0.22.0 Default Cake.Issues.Markdownlint 0.8.2 markdownlint-cli json Cake.Issues.Markdownlint 1.1.0"},{"location":"documentation/supported-tools/#natural-language","title":"Natural language","text":"Tool Tool Version Format Issue Provider Supported Since textlint tap Cake.Issues.Tap 5.1.0"},{"location":"documentation/supported-tools/#openapi","title":"OpenAPI","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Spectral sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#php","title":"PHP","text":"Tool Tool Version Format Issue Provider Supported Since Psalm results.sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#protobuf","title":"Protobuf","text":"Tool Tool Version Format Issue Provider Supported Since protolint sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#python","title":"Python","text":"Tool Tool Version Format Issue Provider Supported Since Bandit sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#secrets","title":"Secrets","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 DevSkim sarif Cake.Issues.Sarif 4.2.0 gitleaks sarif Cake.Issues.Sarif 4.2.0 secretlint sarif Cake.Issues.Sarif 4.2.0 semgrep sarif Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#terraform","title":"Terraform","text":"Tool Tool Version Format Issue Provider Supported Since checkov SARIF Cake.Issues.Sarif 4.2.0 kics sarif Cake.Issues.Sarif 4.2.0 Terraform Validate Cake.Issues.Terraform 1.0.0 TFLint sarif Cake.Issues.Sarif 4.2.0 Trivy SARIF Cake.Issues.Sarif 4.2.0"},{"location":"documentation/supported-tools/#typescript","title":"TypeScript","text":"Tool Tool Version Format Issue Provider Supported Since ESLint Current json Cake.Issues.EsLint 0.1.0"},{"location":"documentation/contributing/how-to-build/","title":"How to build addins","text":""},{"location":"documentation/contributing/how-to-build/#building-addins","title":"Building addins","text":"

    Ensure the following prerequisites are fulfilled:

    • Latest .NET version installed

    To build the addins and run unit tests Cake is used:

    Windows macOS Linux
    .\\build.ps1\n
    ./build.sh\n
    ./build.sh\n

    To run only part of the build a task can be passed using the --target=<TASK> syntax:

    Task Description DotNetCore-Build Builds all addins Create-NuGet-Packages Builds an creates NuGet packages for all addins. The NuGet packages are available in the BuildArtifacts\\Packages\\NuGet directory. Test Builds all addins and runs unit tests. Coverage report is available in the BuildArtifacts\\TestCoverage directory."},{"location":"documentation/contributing/how-to-build/#building-and-running-website-locally","title":"Building and running website locally","text":"

    Ensure the following prerequisites are fulfilled:

    • Latest .NET version installed
    • Python 3 installed

    To build and serve the website Cake is used:

    Windows macOS Linux
    .\\build.ps1 --target=website\n
    ./build.sh --target=website\n
    ./build.sh --target=website\n

    Website is available on http://127.0.0.1:8000/

    "},{"location":"documentation/contributing/how-to-contribute/","title":"How to contribute","text":"

    The repositories are using GitFlow with default configuration. Development is happening on develop branch.

    To contribute:

    • Fork this repository.
    • Create a feature branch from develop.
    • Implement your changes.
    • Push your feature branch.
    • Create a pull request.

    Tip

    For getting started see issues marked with Up-for-grabs.

    "},{"location":"documentation/contributing/how-to-release/","title":"How to release addins","text":"

    See Cake.Recipe documentation how to create a new release of this addin.

    "},{"location":"documentation/extending/","title":"Extending","text":"

    Cake Issues can easily be extended with additional Issue Provider, Report Formats and Pull Request System integrations.

    "},{"location":"documentation/extending/testing/","title":"Testing","text":"

    The Cake.Issues.Testing package provides different helper classes for writing test cases for issue provider, report format or pull request system addins.

    API Documentation on fuget.org

    "},{"location":"documentation/extending/issue-provider/categories/","title":"Alias categories","text":"

    Issue provider aliases should use the IssuesAliasConstants.MainCakeAliasCategory and IssuesAliasConstants.IssueProviderCakeAliasCategory constants for defining their category:

    [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueProviderAliases\n{\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssueProvider(\n        this ICakeContext context)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/helper/","title":"Helper","text":"

    The following helpers are provider by Cake.Issues for simplifying implementation of issue providers:

    Helper Description StringPathExtensions Extensions for string for handling paths. ByteArrayExtensions Extensions for converting between strings an byte arrays."},{"location":"documentation/extending/issue-provider/overview/","title":"Overview","text":"

    Issue providers need to implement the IIssueProvider interface.

    "},{"location":"documentation/extending/issue-provider/overview/#base-classes","title":"Base classes","text":"

    For simplifying implementation there exists base classes from which concrete implementation can be inherited.

    Base Class Use case Tutorial BaseIssueProvider Base class for a simple issue provider implementation. Simple provider BaseConfigurableIssueProvider Base class for a issue provider with issue provider specific settings. Provider settings BaseMultiFormatIssueProvider Base class for issue providers supporting multiple log formats. Multiple log file formats support"},{"location":"documentation/extending/issue-provider/tutorials/file-linking/","title":"File links in message","text":"

    Cake Issues provides infrastructure to get links to files on source code hosts like GitHub or Azure Repos.

    This infrastructure can also be used inside an issue providers InternalReadIssues method to generate file links which can be used inside the issue messages:

    protected override IEnumerable<IIssue> InternalReadIssues()\n{\n    var result = new List<IIssue>();\n\n    var filePath = \"foo.cs\";\n    var line = 10;\n\n    var fileLink = \n        this.Settings.FileLinkSettings.GetFileLink(\n            IssueBuilder\n                .NewIssue(\"Issue for creating file link\", this)\n                .InFile(filePath, line)\n                .Create()\n        );\n\n    var htmlMessage =\n        $\"This is an issues in the file <a href=\\\"{fileLink}\\\">{filePath}</a>\";\n\n    var issue =\n        IssueBuilder\n            .NewIssue(\"MyMessage\", this)\n            .WithMessageInHtmlFormat(htmlMessage)\n            .InFile(filePath, line)\n            .Create();\n\n    return result;\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/","title":"Multiple log file formats","text":"

    A single issue provider might support reading issues from multiple different log file formats. For these cases the Cake.Issue addin provides the BaseMultiFormatIssueProvider, BaseMultiFormatIssueProviderSettings and BaseLogFileFormat classes for simplifying implementation in the issue provider addin.

    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#implementing-issue-provider","title":"Implementing issue provider","text":"

    A concrete class inheriting from BaseMultiFormatIssueProvider needs to be implemented defining the concrete types.

    /// <summary>\n/// My issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log context.</param>\n/// <param name=\"settings\">Settings for reading the log file.</param>\npublic class MyIssuesProvider(ICakeLog log, MyIssuesSettings settings)\n    : BaseMultiFormatIssueProvider<MyIssuesSettings, MyIssuesProvider>(\n        log,\n        settings)\n{\n    /// <inheritdoc />\n    public override string ProviderName => \"MyIssuesProvider\";\n}\n

    Also a concrete class inheriting from BaseMultiFormatIssueProviderSettings needs to be implemented defining the concrete types. Based on the capabilities of the log file formats the appropriate constructors for reading from the file system or memory can be made public:

    /// <summary>\n/// Settings for my issue provider.\n/// </summary>\npublic class MyIssuesSettings\n    : BaseMultiFormatIssueProviderSettings<MyIssuesProvider, MyIssuesSettings>\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for reading a log file on disk.\n    /// </summary>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    public MyIssuesSettings(FilePath logFilePath, MyLogFileFormat format)\n        : base(logFilePath, format)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for a log file content in memory.\n    /// </summary>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    public MyIssuesSettings(byte[] logFileContent, MyLogFileFormat format)\n        : base(logFileContent, format)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#implementing-log-file-format-infrastructure","title":"Implementing log file format infrastructure","text":"

    An abstract class inheriting from BaseLogFileFormat needs to be implemented defining the concrete types for the issue provider:

    /// <summary>\n/// Base class for all log file formats supported by my issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log instance.</param>\npublic abstract class MyLogFileFormat(ICakeLog log)\n    : BaseLogFileFormat<MyIssuesProvider, MyIssuesSettings>(log)\n{\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#implementing-log-file-format","title":"Implementing log file format","text":"

    The different log file formats of an issue provider need to be inherited from the abstract log file format class:

    /// <summary>\n/// Concrete log format.\n/// </summary>\n/// <param name=\"log\">The Cake log instance.</param>\ninternal class MyConcreteLogFileFormat(ICakeLog log) : MyLogFileFormat(log)\n{\n    /// <inheritdoc/>\n    public override IEnumerable<IIssue> ReadIssues(\n        MyIssuesProvider issueProvider,\n        IRepositorySettings repositorySettings,\n        MyIssuesSettings issueProviderSettings)\n    {\n        issueProvider.NotNull();\n        repositorySettings.NotNull();\n        issueProviderSettings.NotNull();\n\n        var result = new List<IIssue>();\n\n        // Implement log file format logic here.\n        result.Add(\n            IssueBuilder\n                .NewIssue(\"Some message\", issueProvider)\n                .WithPriority(IssuePriority.Warning)\n                .OfRule(\"My rule\")\n                .Create());\n\n        return result;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/logfile-format/#aliases","title":"Aliases","text":"

    For each concrete log file format a Cake property alias should be provided. Additionally an alias for reading issues with a specific format should be provided. For convenience of the user and based on the capabilities of the issue provider additional aliases for reading from the file system or from memory can be added. Finally an additional property alias for returning the provider type name should be defined.

    Alias for log file formatAlias for reading issuesAdditional convenience aliasesAlias for property type name
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of the concrete log format.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of the concrete log format.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static MyLogFileFormat MyConcreteLogFileFormat(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyConcreteLogFileFormat(context.Log);\n    }\n\n    /// <summary>\n    /// Gets an instance of a provider for issues using specified settings\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of a provider for issues.</returns>\n    /// <example>\n    /// <para>Read issues using my concrete log file format:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings =\n    ///         new MyIssuesSettings(\n    ///             @\"c:\\build\\issues.xml\",\n    ///             MyConcreteLogFileFormat);\n    ///\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssues(settings),\n    ///             @\"c:\\repo\");\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.\n    /// The log file needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromFilePath(\n    ///                 @\"c:\\build\\issues.log\",\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n        format.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath, format));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.\n    /// The log content needs to be in the format as defined by the\n    /// <paramref name=\"format\"/> parameter.</param>\n    /// <param name=\"format\">Format of the provided log content.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues =\n    ///         ReadIssues(\n    ///             MyIssuesFromContent(\n    ///                 logFileContent,\n    ///                 MyConcreteLogFileFormat));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent,\n        MyLogFileFormat format)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n        format.NotNull();\n\n        return\n            context.MyIssues(\n                new MyIssuesSettings(\n                    logFileContent.ToByteArray(),\n                    format));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/rule-url-resolving/","title":"Rule URL resolving","text":"

    For cases where additional logic is required to determine the URL for a rule, the Cake.Issue addin provides the BaseRuleDescription and BaseRuleUrlResolver classes for simplifying implementation of providing URLs linking to site providing information about issues.

    "},{"location":"documentation/extending/issue-provider/tutorials/rule-url-resolving/#implementing-ruleurlresolver","title":"Implementing RuleUrlResolver","text":"

    In the issue provider a concrete class inheriting from BaseRuleDescription should be implemented containing all properties required to determine the URL to a rule.

    The following class adds two properties Category and RuleId to the description, to handle rules following a pattern like ABC123, where ABC is the Category, and 123 is the RuleId:

    /// <summary>\n/// Class describing rules for my issue provider.\n/// </summary>\npublic class MyRuleDescription : BaseRuleDescription\n{\n    /// <summary>\n    /// Gets or sets the category of the rule.\n    /// </summary>\n    public string Category { get; set; }\n\n    /// <summary>\n    /// Gets or sets the identifier of the rule.\n    /// </summary>\n    public int RuleId { get; set; }\n}\n

    A class inheriting from BaseRuleUrlResolver needs to be implemented containing an implementation of TryGetRuleDescription for parsing rule urls to the concrete BaseRuleDescription class. Additionally different resolvers need to be registered which return the actual URL based on the rule description.

    Parsing ruleResolver registration
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n

    To use the URL resolver the ResolveRuleUrl method can be called from the issue provider:

    var resolver = new MyRuleUrlResolver();\nvar url = resolver.ResolveRuleUrl(rule)\n
    "},{"location":"documentation/extending/issue-provider/tutorials/rule-url-resolving/#support-custom-url-resolvers","title":"Support custom URL resolvers","text":"

    The AddUrlResolver method can also be called from a Cake alias to allow users of the addin to register custom resolvers. For this the URL resolver class needs to be implemented as a singleton:

    SingletonParsing ruleResolver registration
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    private static readonly Lazy<MyRuleUrlResolver> InstanceValue =\n        new Lazy<MyRuleUrlResolver>(() => new MyRuleUrlResolver());\n\n    /// <summary>\n    /// Gets the instance of the rule resolver.\n    /// </summary>\n    public static MyRuleUrlResolver Instance => InstanceValue.Value;\n\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    private static readonly Lazy<MyRuleUrlResolver> InstanceValue =\n        new Lazy<MyRuleUrlResolver>(() => new MyRuleUrlResolver());\n\n    /// <summary>\n    /// Gets the instance of the rule resolver.\n    /// </summary>\n    public static MyRuleUrlResolver Instance => InstanceValue.Value;\n\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    /// <summary>\n/// Class for retrieving an URL linking to a site describing a rule.\n/// </summary>\ninternal class MyRuleUrlResolver : BaseRuleUrlResolver<MyRuleDescription>\n{\n    private static readonly Lazy<MyRuleUrlResolver> InstanceValue =\n        new Lazy<MyRuleUrlResolver>(() => new MyRuleUrlResolver());\n\n    /// <summary>\n    /// Gets the instance of the rule resolver.\n    /// </summary>\n    public static MyRuleUrlResolver Instance => InstanceValue.Value;\n\n    /// <inheritdoc/>\n    protected override bool TryGetRuleDescription(\n        string rule,\n        MyRuleDescription ruleDescription)\n    {\n        // Take the first 3 characters as category \n        ruleDescription.Category = rule[..3];\n        // Take everything afterwards as the ID\n        ruleDescription.RuleId = int.Parse(rule.Substring(3));\n\n        return true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the\n    /// <see cref=\"MyRuleUrlResolver\"/> class.\n    /// </summary>\n    private MyRuleUrlResolver()\n    {\n        // Add resolver for different issue categories.\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"FOO\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.google.com/search?q=%22\" + x.Rule) :\n                null);\n        this.AddUrlResolver(x =>\n            x.Category\n                .Equals(\n                    \"BAR\",\n                    StringComparison.InvariantCultureIgnoreCase) ?\n                new Uri(\"https://www.bing.com/search?q=%22\" + x.Rule) :\n                null);\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/settings/","title":"Provider settings","text":"

    Often issue providers require specific settings. For these cases the Cake.Issue addin provides the BaseConfigurableIssueProvider and IssueProviderSettings classes for simplifying implementation in the issue provider addin.

    "},{"location":"documentation/extending/issue-provider/tutorials/settings/#implementing-issue-provider","title":"Implementing issue provider","text":"

    A concrete class inheriting from BaseConfigurableIssueProvider needs to be implemented defining the concrete settings class to use:

    /// <summary>\n/// My issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log context.</param>\n/// <param name=\"settings\">Settings for reading the log file.</param>\npublic class MyIssuesProvider(ICakeLog log, MyIssuesSettings settings)\n    : BaseConfigurableIssueProvider<MyIssuesSettings>(log, settings)\n{\n    /// <inheritdoc />\n    public override string ProviderName => \"MyIssuesProvider\";\n\n    /// <inheritdoc />\n    protected override IEnumerable<IIssue> InternalReadIssues()\n    {\n        var result = new List<IIssue>();\n\n        // Implement issue provider logic here.\n        result.Add(\n            IssueBuilder\n                .NewIssue(\"Some message\", this)\n                .WithPriority(IssuePriority.Warning)\n                .OfRule(\"My rule\")\n                .Create());\n\n        return result;\n    }\n}\n

    Also a concrete class inheriting from IssueProviderSettings needs to be implemented. Based on the capabilities of the issue provider the appropriate constructors for reading from the file system or memory can be made public:

    /// <summary>\n/// Settings for my issue provider.\n/// </summary>\npublic class MyIssuesSettings : IssueProviderSettings\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for reading a log file on disk.\n    /// </summary>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    public MyIssuesSettings(FilePath logFilePath)\n        : base(logFilePath)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MyIssuesSettings\"/> class\n    /// for a log file content in memory.\n    /// </summary>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    public MyIssuesSettings(byte[] logFileContent)\n        : base(logFileContent)\n    {\n    }\n\n    // Add additional settings for the issue provider here.\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/settings/#aliases","title":"Aliases","text":"

    An alias for reading issues with the provider should be provided. For convenience of the user and based on the capabilities of the issue provider, additional aliases for reading from the file system or from memory can be added. Finally an additional property alias for returning the provider type name should be defined:

    Alias for reading issuesAdditional convenience aliasesAlias for property type name
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings = new MyIssuesSettings(@\"c:\\build\\issues.log\");\n    ///     var issues = ReadIssues(MyIssues(settings));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromFilePath(@\"c:\\build\\issues.log\"));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromContent(logFileContent));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n\n        return context.MyIssues(\n            new MyIssuesSettings(logFileContent.ToByteArray()));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings = new MyIssuesSettings(@\"c:\\build\\issues.log\");\n    ///     var issues = ReadIssues(MyIssues(settings));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromFilePath(@\"c:\\build\\issues.log\"));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromContent(logFileContent));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n\n        return context.MyIssues(\n            new MyIssuesSettings(logFileContent.ToByteArray()));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"settings\">Settings for reading the log.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var settings = new MyIssuesSettings(@\"c:\\build\\issues.log\");\n    ///     var issues = ReadIssues(MyIssues(settings));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context,\n        MyIssuesSettings settings)\n    {\n        context.NotNull();\n        settings.NotNull();\n\n        return new MyIssuesProvider(context.Log, settings);\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file from disk.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFilePath\">Path to the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromFilePath(@\"c:\\build\\issues.log\"));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromFilePath(\n        this ICakeContext context,\n        FilePath logFilePath)\n    {\n        context.NotNull();\n        logFilePath.NotNull();\n\n        return context.MyIssues(new MyIssuesSettings(logFilePath));\n    }\n\n    /// <summary>\n    /// Gets an instance of my issues provider for reading a log file\n    /// from memory.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <param name=\"logFileContent\">Content of the log file.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(\n    ///         MyIssuesFromContent(logFileContent));\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssuesFromContent(\n        this ICakeContext context,\n        string logFileContent)\n    {\n        context.NotNull();\n        logFileContent.NotNullOrWhiteSpace();\n\n        return context.MyIssues(\n            new MyIssuesSettings(logFileContent.ToByteArray()));\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/simple/","title":"Simple issue provider","text":"

    This tutorial explains how to implement a simple issue provider using the BaseIssueProvider class from the Cake.Issue addin.

    "},{"location":"documentation/extending/issue-provider/tutorials/simple/#implementing-issue-provider","title":"Implementing issue provider","text":"

    A concrete class inheriting from BaseIssueProvider needs to be implemented:

    /// <summary>\n/// My issue provider.\n/// </summary>\n/// <param name=\"log\">The Cake log context.</param>\npublic class MyIssuesProvider(ICakeLog log) : BaseIssueProvider(log)\n{\n    /// <inheritdoc />\n    public override string ProviderName => \"MyIssuesProvider\";\n\n    /// <inheritdoc />\n    protected override IEnumerable<IIssue> InternalReadIssues()\n    {\n        var result = new List<IIssue>();\n\n        // Implement issue provider logic here.\n        result.Add(\n            IssueBuilder\n                .NewIssue(\"Some message\", this)\n                .WithPriority(IssuePriority.Warning)\n                .OfRule(\"My rule\")\n                .Create());\n\n        return result;\n    }\n}\n
    "},{"location":"documentation/extending/issue-provider/tutorials/simple/#aliases","title":"Aliases","text":"

    An alias for reading issues with the provider and a property alias for returning the provider type name should be defined:

    Alias for reading issuesAlias for property type name
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(MyIssues());\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyIssuesProvider(context.Log);\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    /// <summary>\n/// Contains functionality related to my issue provider.\n/// </summary>\n[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyIssueAliases\n{\n    /// <summary>\n    /// Gets an instance of my issues provider using specified settings.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Instance of my issues provider.</returns>\n    /// <example>\n    /// <para>Read issues using my issues provider:</para>\n    /// <code>\n    /// <![CDATA[\n    ///     var issues = ReadIssues(MyIssues());\n    /// ]]>\n    /// </code>\n    /// </example>\n    [CakeMethodAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static IIssueProvider MyIssues(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return new MyIssuesProvider(context.Log);\n    }\n\n    /// <summary>\n    /// Gets the name of my issue provider.\n    /// This name can be used to identify issues based on the\n    /// <see cref=\"IIssue.ProviderType\"/> property.\n    /// </summary>\n    /// <param name=\"context\">The context.</param>\n    /// <returns>Name of my issue provider.</returns>\n    [CakePropertyAlias]\n    [CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]\n    public static string MyIssuesProviderTypeName(\n        this ICakeContext context)\n    {\n        context.NotNull();\n\n        return typeof(MyIssuesProvider).FullName;\n    }\n}\n
    "},{"location":"documentation/extending/pull-request-system/categories/","title":"Alias categories","text":"

    Pull request system aliases should use the IssuesAliasConstants.MainCakeAliasCategory and PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory constants for defining their category:

    [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyPullRequestSystemAliases\n{\n    [CakeMethodAlias]\n    [CakeAliasCategory(PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory)]\n    public static IPullRequestSystem MyPullRequestSystem(\n        this ICakeContext context)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/pull-request-system/overview/","title":"Overview","text":"

    Pull Request Systems need to implement the IPullRequestSystem interface.

    "},{"location":"documentation/extending/pull-request-system/overview/#baseclasses","title":"BaseClasses","text":"

    For simplifying implementation there exists base classes from which concrete implementation can be inherited. BasePullRequestSystem is the main base class with the required functionality for a pull request system implementation. Additionally there exists several classes which can be implemented to support additional optional capabilities in a pull request system implementation.

    Base Class Use case Tutorial BasePullRequestSystem Base class for all pull request system implementations. BaseCheckingCommitIdCapability Base class for capability to post issues only if pull request is for a specific commit. BaseDiscussionThreadsCapability Base class for capability to read, resolve and reopen discussion threads. BaseFilteringByModifiedFilesCapability Base class for capability to filter issues to only those affecting files modified in the pull request."},{"location":"documentation/extending/report-format/categories/","title":"Alias categories","text":"

    Report format aliases should use the IssuesAliasConstants.MainCakeAliasCategory and ReportingAliasConstants.ReportingFormatCakeAliasCategory constants for defining their category:

    [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]\npublic static class MyReportFormatAliases\n{\n    [CakeMethodAlias]\n    [CakeAliasCategory(ReportingAliasConstants.ReportingFormatCakeAliasCategory)]\n    public static IIssueReportFormat MyReportFormat(\n        this ICakeContext context)\n    {\n    }\n}\n
    "},{"location":"documentation/extending/report-format/overview/","title":"Overview","text":"

    Report formats need to implement the IIssueReportFormat interface. For simplifying implementation there exists an abstract IssueReportFormat base class from which concrete implementation can be inherited.

    "},{"location":"documentation/issue-providers/","title":"Issue Providers","text":"

    Issue provider addins are responsible for providing the output of an analyzer or linter to the Cake Issues addin.

    • DocFx \u2013 Issue provider for reading DocFx warnings
    • ESLint \u2013 Issue provider for reading ESLint issues
    • Git Repository \u2013 Issue provider for analyzing Git repositories
    • Inspect Code \u2013 Issue provider for reading JetBrains Inspect Code / ReSharper issues
    • Markdownlint \u2013 Issue provider for reading issues from markdownlint
    • MsBuild \u2013 Issue provider for reading MsBuild errors and warnings
    • Sarif \u2013 Issue provider for reading SARIF reports
    • Test Anything Protocol (TAP) \u2013 Issue provider for reading TAP reports
    • Terraform \u2013 Issue provider for reading Terraform validation output

    Tip

    See How to implement issue providers for instruction on how to implement support for additional issue providers.

    "},{"location":"documentation/issue-providers/docfx/","title":"DocFx","text":"

    Support for reading warnings reported by DocFx is implemented in the Cake.Issues.DocFx addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/docfx/examples/","title":"Examples","text":"

    To call DocFx from a Cake script the Cake.DocFx addin can be used. To read issues from DocFx log files the DocFx issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.DocFx&version=1.0.0\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.DocFx&version=5.3.0\n

    Note

    In addition to the DocFx issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.DocFx\" Version=\"1.0.0\" />\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.DocFx\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will build the DocFx project and write a log file and a task to read issues from the log file and write the number of warnings to the console:

    Cake .NET ToolCake Frosting build.cake
    var logPath = @\"c:\\build\\docfx.log\";\nvar repoRootFolder = MakeAbsolute(Directory(\"./\"));\nvar docRootPath = @\"docs\";\n\nTask(\"Build-Documentation\").Does(() =>\n{\n    // Run DocFx.\n    DocFxBuild(new DocFxBuildSettings()\n    {\n        LogPath = logPath\n    });\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Build-Documentation\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                DocFxIssuesFromFilePath(logPath, docRootPath),\n                repoRootPath);    \n\n        Information(\"{0} issues are found.\", issues.Count());\n    });\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Core.IO;\nusing Cake.Core;\nusing Cake.DocFx;\nusing Cake.DocFx.Build;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\docfx.log\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n    public string DocRootPath { get; } = \"docs\";\n}\n\n[TaskName(\"Build-Documentation\")]\npublic sealed class BuildDocumentationTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Run DocFx.\n        context.DocFxBuild(new DocFxBuildSettings()\n        {\n            LogPath = context.LogPath\n        });\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(BuildDocumentationTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.DocFxIssuesFromFilePath(\n                    context.LogPath,\n                    context.DocRootPath),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/docfx/features/","title":"Features","text":"

    The Cake.Issues.DocFx addin provides the following features.

    Tip: Running DocFx

    DocFx can be run with Cake.DocFx addin.

    "},{"location":"documentation/issue-providers/docfx/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from DocFx log files.
    "},{"location":"documentation/issue-providers/docfx/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/eslint/","title":"ESLint","text":"

    Support for reading issues reported by ESLint is implemented in the Cake.Issues.EsLint addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/eslint/features/","title":"Features","text":"

    The Cake.Issues.EsLint addin provides the following features.

    Tip: Running ESLint

    ESLint can be run with Cake.ESLint addin.

    "},{"location":"documentation/issue-providers/eslint/features/#basic-features","title":"Basic features","text":"
    • Reads issues reported by ESLint.
    • Provides URLs for all issues.
    • Support for custom URL resolving using the EsLintAddRuleUrlResolver alias.
    "},{"location":"documentation/issue-providers/eslint/features/#supported-log-file-formats","title":"Supported log file formats","text":"
    • EsLintJsonFormat alias for reading issues from log files created by ESLint json formatter.
    "},{"location":"documentation/issue-providers/eslint/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Support for custom rules can be added through a custom EsLintAddRuleUrlResolver
    "},{"location":"documentation/issue-providers/gitrepository/","title":"Git Repository","text":"

    Support for analyzing Git repositories is implemented in the Cake.Issues.GitRepository addin.

    • Features
    • Examples
    • Rules
    • API
    "},{"location":"documentation/issue-providers/gitrepository/examples/","title":"Examples","text":"

    To analyze Git repositories you need to import the Git repository issue provider:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.GitRepository&version=5.3.0\n

    Note

    In addition to the Git repository issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.GitRepository\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example prints the number of binary files which are not tracked by Git Large File Storage in a repository.

    Warning

    Checking binary files requires Git and Git Large File Storage available on the local machine.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Analyze-Repo\")\n.Does(() =>\n{\n    // Read issues.\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n    var settings =\n        new GitRepositoryIssuesSettings\n        {\n            CheckBinaryFilesTrackedByLfs = true\n        };    \n\n    var issues =\n        ReadIssues(\n            GitRepositoryIssues(settings),\n            repoRootPath);    \n\n    Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Analyze-Repo\")]\npublic sealed class AnalyzeRepoTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        // Read issues.\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n        var settings =\n            new GitRepositoryIssuesSettings\n            {\n                CheckBinaryFilesTrackedByLfs = true\n            };    \n\n        var issues =\n            context.ReadIssues(\n                context.GitRepositoryIssues(settings),\n                repoRootPath);    \n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/gitrepository/features/","title":"Features","text":"

    The Cake.Issues.GitRepository addin provides the following features.

    "},{"location":"documentation/issue-providers/gitrepository/features/#basic-features","title":"Basic features","text":"
    • Checks path length of files. See FilePathTooLong for details.
    • Checks if binary files are tracked by Git LFS. See BinaryFileNotTrackedByLfs for details.
    "},{"location":"documentation/issue-providers/gitrepository/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/gitrepository/rules/","title":"Rules","text":"
    • BinaryFileNotTrackedByLfs
    • FilePathTooLong
    "},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/","title":"BinaryFileNotTrackedByLfs","text":"Metadata Rule Id BinaryFileNotTrackedByLfs Priority Warning Available in 0.7.0 or higher"},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/#cause","title":"Cause","text":"

    A binary file in the repository is not tracked by Git Large File Storage.

    "},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/#rule-description","title":"Rule description","text":"

    By its nature Git repositories cannot handle binary files well and will keep a full copy of that file in the repository every time a change to that file is committed. Considering that you always clone the full history of a repository, and not only the latest version, using binary files in a repository considerably slow downs the operation. Git Large File Storage replaces large files with small text pointers inside the Git repository, while storing the file contents on a remote server.

    Info

    The rule assumes that all files, which are not text files are binary files. This also includes for example empty files.

    "},{"location":"documentation/issue-providers/gitrepository/rules/BinaryFileNotTrackedByLfs/#how-to-fix-violations","title":"How to fix violations","text":"

    Track the file with Git Large File Storage.

    "},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/","title":"FilePathTooLong","text":"Metadata Rule Id FilePathTooLong Priority Warning Available in 0.7.3 or higher"},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/#cause","title":"Cause","text":"

    The path of a file in the repository is too long.

    "},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/#rule-description","title":"Rule description","text":"

    Some operating systems and applications have a limitation of maximum path length which they can handle. To guarantee proper building this length should not be exceeded.

    "},{"location":"documentation/issue-providers/gitrepository/rules/FilePathTooLong/#how-to-fix-violations","title":"How to fix violations","text":"

    Rename the name of the file or shorten the path name.

    "},{"location":"documentation/issue-providers/inspectcode/","title":"InspectCode","text":"

    Support for reading issues reported by JetBrains InspectCode in XML format is implemented in the Cake.Issues.InspectCode addin.

    Note

    Starting from version 2024.1, the default output format of JetBrains InspectCode is Static Analysis Results Interchange Format (SARIF). The XML format, which was the default in previous versions, will soon be deprecated. Results in the XML format are still available with the -f=\"xml\" parameter.

    This issue provider is only for the deprecated XML format. For the new default SARIF format Cake.Issues.Sarif can be used.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/inspectcode/examples/","title":"Examples","text":"

    To read issues from InspectCode log files the InspectCode issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n

    Note

    In addition to the InspectCode issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will run JetBrains InspectCode and write a log file and a task to read issues from the log file and write the number of warnings to the console. JetBrains InspectCode is installed using JetBrains.ReSharper.CommandLineTools:

    Cake .NET ToolCake Frosting build.cake
    #tool \"nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2024.3.3\"\n\nvar logPath = @\"c:\\build\\inspectcode.xml\";\nvar repoRootFolder = MakeAbsolute(Directory(\"./\"));\n\nTask(\"Analyze-Project\").Does(() =>\n{\n    // Run InspectCode and enforce XML output.\n    var settings = new InspectCodeSettings() {\n        OutputFile = logPath,\n        ArgumentCustomization = x => x.Append(\"-f=xml\")\n    };\n\n    InspectCode(repoRootPath.CombineWithFilePath(\"MySolution.sln\"), settings);\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Analyze-Project\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                InspectCodeIssuesFromFilePath(logPath),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Core.IO;\nusing Cake.Core;\nusing Cake.Frosting;\nusing Cake.Common.Tools.InspectCode;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .InstallTool(\n            new Uri(\n                \"nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2024.3.3\"))\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\inspectcode.xml\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n}\n\n[TaskName(\"Analyze-Project\")]\npublic sealed class AnalyzeProjectTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Run InspectCode and enforce XML output.\n        var settings = new InspectCodeSettings() {\n            OutputFile = context.LogPath,\n            ArgumentCustomization = x => x.Append(\"-f=xml\")\n        };\n\n        context.InspectCode(\n            context.RepoRootPath.CombineWithFilePath(\"MySolution.sln\"),\n            settings);\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(AnalyzeProjectTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.InspectCodeIssuesFromFilePath(context.LogPath),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/inspectcode/features/","title":"Features","text":"

    The Cake.Issues.InspectCode addin provides the following features.

    Tip: Running InspectCode

    JetBrains InspectCode can be run using the InspectCode alias.

    "},{"location":"documentation/issue-providers/inspectcode/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from JetBrains InspectCode XML log files.
    • Provides URLs for issues containing a Wiki URL.

    Note

    Starting from version 2024.1, the default output format of JetBrains InspectCode is Static Analysis Results Interchange Format (SARIF). The XML format, which was the default in previous versions, will soon be deprecated. Results in the XML format are still available with the -f=\"xml\" parameter.

    This issue provider is only for the deprecated XML format. For the new default SARIF format Cake.Issues.Sarif can be used.

    "},{"location":"documentation/issue-providers/inspectcode/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/markdownlint/","title":"markdownlint","text":"

    Support for reading issues reported by markdownlint is implemented in the Cake.Issues.Markdownlint addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/markdownlint/examples/","title":"Examples","text":"

    To call markdownlint-cli from a Cake script the Cake.Markdownlint addin can be used. To read issues from markdownlint-cli log files the markdownlint issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Markdownlint&version=4.0.0\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.Markdownlint&version=5.3.0\n

    Note

    In addition to the markdownlint issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Markdownlint\" Version=\"4.0.0\" />\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Markdownlint\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will run markdownlint-cli and write a log file and a task to read issues from the log file and write the number of warnings to the console:

    Cake .NET ToolCake Frosting build.cake
    var logPath = @\"c:\\build\\markdownlint.log\";\nvar repoRootFolder = MakeAbsolute(Directory(\"./\"));\n\nTask(\"Lint-Documentation\").Does(() =>\n{\n    // Run markdownlint-cli.\n    var settings =\n        MarkdownlintNodeJsRunnerSettings.ForDirectory(\n            context.RepoRootPath.Combine(\"docs\"));\n    settings.OutputFile = logPath;\n    settings.ThrowOnIssue = false;\n    RunMarkdownlintNodeJs(settings);\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Lint-Documentation\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                MarkdownlintIssuesFromFilePath(\n                    logPath,\n                    MarkdownlintCliLogFileFormat),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Common.IO;\nusing Cake.Core;\nusing Cake.Core.IO;\nusing Cake.Frosting;\nusing Cake.Markdownlint;\nusing Cake.Markdownlint.NodeJs;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\markdownlint.log\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n}\n\n[TaskName(\"Lint-Documentation\")]\npublic sealed class LintDocumentationTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Run markdownlint-cli.\n        var settings =\n            MarkdownlintNodeJsRunnerSettings.ForDirectory(\n                context.RepoRootPath.Combine(\"docs\"));\n        settings.OutputFile = context.LogPath;\n        settings.ThrowOnIssue = false;\n        context.RunMarkdownlintNodeJs(settings);\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(LintDocumentationTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.MarkdownlintIssuesFromFilePath(\n                    context.LogPath,\n                    context.MarkdownlintCliLogFileFormat()),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/markdownlint/features/","title":"Features","text":"

    The Cake.Issues.Markdownlint addin provides the following features.

    Tip: Running markdownlint

    markdownlint-cli can be run with the Cake.Markdownlint addin.

    "},{"location":"documentation/issue-providers/markdownlint/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from Markdownlint logfiles.
    • Provides URLs for all issues.
    • Support for custom URL resolving using the MarkdownlintAddRuleUrlResolver alias (except for MarkdownlintCliJsonLogFileFormat).
    "},{"location":"documentation/issue-providers/markdownlint/features/#supported-log-file-formats","title":"Supported log file formats","text":"
    • MarkdownlintV1LogFileFormat alias for reading issues from Markdownlint output generated with options.resultVersion set to 1.
    • MarkdownlintCliLogFileFormat alias for reading issues from markdownlint-cli log files.
    • MarkdownlintCliJsonLogFileFormat alias for reading issues from markdownlint-cli log files created with the --json parameter.
    "},{"location":"documentation/issue-providers/markdownlint/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"MarkdownlintV1LogFileFormatMarkdownlintCliLogFileFormatMarkdownlintCliJsonLogFileFormat
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority (4)
    • IIssue.PriorityName (5)
    • IIssue.RuleId
    • IIssue.RuleUrl (6)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Always IssuePriority.Warning
    5. Always Warning
    6. Support for custom rules can be added through a custom MarkdownlintAddRuleUrlResolver
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority (4)
    • IIssue.PriorityName (5)
    • IIssue.RuleId
    • IIssue.RuleUrl (6)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Always IssuePriority.Warning
    5. Always Warning
    6. Support for custom rules can be added through a custom MarkdownlintAddRuleUrlResolver
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority (4)
    • IIssue.PriorityName (5)
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. Always IssuePriority.Warning
    5. Always Warning
    "},{"location":"documentation/issue-providers/msbuild/","title":"MsBuild","text":"

    Support for reading warnings reported by MsBuild is implemented in the Cake.Issues.MsBuild.

    • Features
    • Examples
    • API
    "},{"location":"documentation/issue-providers/msbuild/features/","title":"Features","text":"

    The Cake.Issues.MsBuild addin provides the following features.

    Tip: Running MSBuild

    MSBuild can be run using the DotNet aliases or MsBuild aliases.

    "},{"location":"documentation/issue-providers/msbuild/features/#basic-features","title":"Basic features","text":"
    • Reads errors and warnings from MSBuild log files.
    • Provides URLs .NET SDK analyzers code quality rules (CA*), .NET SDK analyzers code style rules (IDE*), StyleCop analyzer rules (SA*), SonarLint rules (S*) and Roslynator rules (RCS*).
    • Support for custom URL resolving using the MsBuildAddRuleUrlResolver alias.
    "},{"location":"documentation/issue-providers/msbuild/features/#supported-log-file-formats","title":"Supported log file formats","text":"
    • MsBuildBinaryLogFileFormat alias for reading issues from binary log files.
    • MsBuildXmlFileLoggerFormat alias for reading issues from log files created by MSBuild Extension Pack XmlFileLogger.
    "},{"location":"documentation/issue-providers/msbuild/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"MsBuildBinaryLogFileFormatMsBuildXmlFileLoggerFormat
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For .NET SDK analyzers (CA*), StyleCop analyzer rules (SA*), SonarLint rules (S*) and Roslynator rules (RCS*). Support for additional rules can be added through a custom MsBuildAddRuleUrlResolver
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For .NET SDK analyzers code quality rules (CA*), .NET SDK analyzers code style rules (IDE*), StyleCop analyzer rules (SA*), SonarLint rules (S*) and Roslynator rules (RCS*). Support for additional rules can be added through a custom MsBuildAddRuleUrlResolver
    "},{"location":"documentation/issue-providers/msbuild/examples/","title":"Examples","text":"
    • Read binary log file
    • Use custom URL resolver
    "},{"location":"documentation/issue-providers/msbuild/examples/read-binary-log/","title":"Read MsBuild binary log file","text":"

    To read issues from MsBuild log files the MsBuild issue provider needs to be imported:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n

    Note

    In addition to the MsBuild issue provider the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example contains a task which will call MsBuild to build the solution and write a binary log file and a task to read issues from the binary log file and write the number of warnings to the console:

    Cake .NET ToolCake Frosting build.cake
    var logPath = @\"c:\\build\\msbuild.binlog\";\nvar repoRootPath = MakeAbsolute(Directory(\"./\"));\n\nTask(\"Build-Solution\").Does(() =>\n{\n    // Build solution.\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            logPath.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n});\n\nTask(\"Read-Issues\")\n    .IsDependentOn(\"Build-Solution\")\n    .Does(() =>\n    {\n        // Read issues.\n        var issues =\n            ReadIssues(\n                MsBuildIssuesFromFilePath(\n                    logPath,\n                    MsBuildBinaryLogFileFormat),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Core;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    public FilePath LogPath { get; } = @\"c:\\build\\msbuild.binlog\";\n    public DirectoryPath RepoRootPath { get; } =\n        context.MakeAbsolute(context.Directory(\"./\"));\n}\n\n[TaskName(\"Build-Solution\")]\npublic sealed class BuildSolutionTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Build solution.\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                context.LogPath.FullPath);\n        context.DotNetBuild(\n            context.RepoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n    }\n}\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(BuildSolutionTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.MsBuildIssuesFromFilePath(\n                    context.LogPath,\n                    context.MsBuildBinaryLogFileFormat()),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n

    Tip

    When using MSBuildSettings.BinaryLogger property to write a binary log, the version of the binary log format written depends on the version of the .NET SDK.

    To avoid the risk of breaking builds when the .NET SDK is updated and introduces a new binary log format, which is not supported in the used version of Cake.Issues.MsBuild, the binary logger instance shipped as part of Cake.Issues.MsBuild is used in the above example.

    "},{"location":"documentation/issue-providers/msbuild/examples/use-custom-url-resolver/","title":"Use custom URL resolver for MsBuild issues","text":"

    Note

    This example builds on top of the Read binary log file example.

    The following example shows how URL schema for custom Roslyn analyzers can be defined.

    Before reading the issues a custom rule URL resolver can be registered to have all issues starting with CUS linking to an internal URL:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Read-Issues\")\n    .IsDependentOn(\"Build-Solution\")\n    .Does(() =>\n    {\n        // Define custom URL resolver adding URL for all rules starting with FOO.\n        MsBuildAddRuleUrlResolver(x =>\n            x.Category.ToUpperInvariant() == \"CUS\" ?\n            new Uri(\"https://myIntranet/rules/\" + x.Rule) :\n            null);\n\n        // Read issues.\n        var issues =\n            ReadIssues(\n                MsBuildIssuesFromFilePath(\n                    logPath,\n                    MsBuildBinaryLogFileFormat),\n                repoRootPath);\n\n        Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Frosting;\n\n[TaskName(\"Read-Issues\")]\n[IsDependentOn(typeof(BuildSolutionTask))]\npublic sealed class ReadIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        // Define custom URL resolver adding URL for all rules starting with FOO.\n        context.MsBuildAddRuleUrlResolver(x =>\n            x.Category.ToUpperInvariant() == \"CUS\" ?\n            new Uri(\"https://myIntranet/rules/\" + x.Rule) :\n            null);\n\n        // Read issues.\n        var issues =\n            context.ReadIssues(\n                context.MsBuildIssuesFromFilePath(\n                    context.LogPath,\n                    context.MsBuildBinaryLogFileFormat()),\n                context.RepoRootPath);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/issue-providers/sarif/","title":"Sarif","text":"

    Support for reading issues in SARIF format is implemented in the Cake.Issues.Sarif addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/sarif/features/","title":"Features","text":"

    The Cake.Issues.Sarif addin provides the following features.

    "},{"location":"documentation/issue-providers/sarif/features/#basic-features","title":"Basic features","text":"
    • Reads issues from files in SARIF format.
    • Support for reading issues reported as suppressed by the linter
    "},{"location":"documentation/issue-providers/sarif/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/issue-providers/tap/","title":"Test Anything Protocol","text":"

    Support for reading issues in Test Anything Protocol (TAP) format is implemented in the Cake.Issues.Tap addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/tap/features/","title":"Features","text":"

    The Cake.Issues.Tap addin provides the following features.

    "},{"location":"documentation/issue-providers/tap/features/#basic-features","title":"Basic features","text":"
    • Reads issues from files in Test Anything Protocol (TAP) format version 13 or 14.
    "},{"location":"documentation/issue-providers/tap/features/#supported-log-file-formats","title":"Supported log file formats","text":"

    Note

    Details, like file, line / column or rule information, are not standardized in Test Anything Protocol (TAP). The GenericLogFileFormat will therefore only return issues containing the description, which might be the file name for some tools. To retrieve detailed information a tool specific log file format needs to be used which can parse the non-standardized data provided by the tool for every issue.

    • GenericLogFileFormat alias for reading issues from any Test Anything Protocol (TAP) compatible file
    • StylelintLogFileFormat alias for reading TAP files generated by stylelint.
      • Provides URLs for rules shipped with stylelint.
      • Support for custom URL resolving using the TapStylelintAddRuleUrlResolver alias.
    • TextlintLogFileFormat alias for reading TAP files generated by Textlint.
      • Provides URLs for rules shipped with Textlint.
      • Support for custom URL resolving using the TapTextlintAddRuleUrlResolver alias.
    "},{"location":"documentation/issue-providers/tap/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"GenericLogFileFormatStylelintLogFileFormatTextlintLogFileFormat
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For rules shipped with stylelint. Support for additional rules can be added through a custom TapTextlintAddRuleUrlResolver.
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl (4)
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    4. For rules shipped with Textlint. Support for additional rules can be added through a custom TapStylelintAddRuleUrlResolver.
    "},{"location":"documentation/issue-providers/terraform/","title":"Terraform","text":"

    Support for reading issues reported by Terraform validate command is implemented in the Cake.Issues.Terraform addin.

    • Features
    • API
    "},{"location":"documentation/issue-providers/terraform/features/","title":"Features","text":"

    The Cake.Issues.Terraform addin provides the following features.

    Tip: Running Terraform

    Terraform can be run with Cake.Terraform addin.

    "},{"location":"documentation/issue-providers/terraform/features/#basic-features","title":"Basic features","text":"
    • Reads warnings from Terraform validate command.
    "},{"location":"documentation/issue-providers/terraform/features/#supported-iissue-properties","title":"Supported IIssue properties","text":"
    • IIssue.ProviderType
    • IIssue.ProviderName
    • IIssue.Run (1)
    • IIssue.Identifier (2)
    • IIssue.ProjectName
    • IIssue.ProjectFileRelativePath
    • IIssue.AffectedFileRelativePath
    • IIssue.Line
    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    • IIssue.FileLink (3)
    • IIssue.MessageText
    • IIssue.MessageHtml
    • IIssue.MessageMarkdown
    • IIssue.Priority
    • IIssue.PriorityName
    • IIssue.RuleId
    • IIssue.RuleUrl
    1. Can be set while reading issues
    2. Set to IIssue.MessageText
    3. Can be set while reading issues
    "},{"location":"documentation/pull-request-systems/","title":"Pull Request Systems","text":"

    Pull request addins implement specific Pull Request Systems and allow the Cake Issues addin to write found issues as comments to pull requests.

    • AppVeyor \u2013 Integration with AppVeyor builds
    • Azure DevOps \u2013 Integration with Azure DevOps pull requests
    • GitHub Actions \u2013 Integration with GitHub Actions

    Tip

    See How to implement pull request systems for instruction on how to implement support for additional pull request systems.

    "},{"location":"documentation/pull-request-systems/appveyor/","title":"AppVeyor","text":"

    Support for AppVeyor is implemented in the Cake.Issues.PullRequests.AppVeyor addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/pull-request-systems/appveyor/features/","title":"Features","text":"

    The Cake.Issues.PullRequests.AppVeyor addin reports issues as messages to AppVeyor builds.

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/appveyor/features/#basic-features","title":"Basic features","text":"
    • Reports issues as messages to AppVeyor builds.
    • Messages can be written as comment to GitHub pull requests. See GitHub pull request integration for an example.
    "},{"location":"documentation/pull-request-systems/appveyor/features/#supported-capabilities","title":"Supported capabilities","text":"

    The Cake.Issues.PullRequests.AppVeyor addin doesn't support any additional capabilities.

    • Checking commit ID
    • Discussion threads
    • Filtering by modified files
    "},{"location":"documentation/pull-request-systems/appveyor/examples/","title":"Examples","text":"
    • Writting Messages To AppVeyor
    • GitHub PullRequest Integration

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/appveyor/examples/github-pullrequest-integration/","title":"GitHub pull request integration","text":"

    This example shows how to write AppVeyor messages created by Cake.Issues to GitHub pull requests.

    Issues reported as messages to AppVeyor builds can be written to a GitHub pull request using GitHub Pull Request Notification in your appveyor.yml file.

    The following example will write a comment to the GitHub pull request containing all issues which were posted as message to the AppVeyor build:

    notifications:\n- provider: GitHubPullRequest\n  template: \"{{#passed}}:white_check_mark:{{/passed}}{{#failed}}:x:{{/failed}} [Build {{&projectName}} {{buildVersion}} {{status}}]({{buildUrl}}) (commit {{commitUrl}} by @{{&commitAuthorUsername}})<p>Build messages:</p><ul>{{#jobs}}{{#messages}}<li>{{message}}<br/>{{details}}</li>{{/messages}}{{/jobs}}</ul>\"\n

    The output will look similar to this:

    "},{"location":"documentation/pull-request-systems/appveyor/examples/write-messages/","title":"Writing message to AppVeyor","text":"

    To report issues as messages to an AppVeyor build, the AppVeyor addin needs to be imported. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AppVeyor&version=5.3.0\n

    Note

    In addition to the AppVeyor pull request system the Cake.Issues and Cake.Issues.PullRequests core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AppVeyor\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    This example shows how to report issues as messages to an AppVeyor build using the AppVeyorBuilds alias:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToAppVeyor\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AppVeyorBuilds(),\n        repoRootPath);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToAppVeyor\")]\npublic sealed class ReportIssuesToAppVeyorTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AppVeyorBuilds(),\n            repoRootPath);\n    }\n}\n

    The output will look similar to this:

    "},{"location":"documentation/pull-request-systems/azure-devops/","title":"Azure DevOps","text":"

    Support for Azure DevOps is implemented in the Cake.Issues.PullRequests.AzureDevOps addin.

    • Features
    • Setup
    • Examples
    • API
    "},{"location":"documentation/pull-request-systems/azure-devops/features/","title":"Features","text":"

    The Cake.Issues.PullRequests.AzureDevOps addin provides the following features.

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/azure-devops/features/#basic-features","title":"Basic features","text":"
    • Writes issues as comments to Azure DevOps pull requests.
    • Identification of pull requests through source branch or pull request ID.
    • Comments written by the addin will be rendered with a specific icon corresponding to the state of the issue.
    • Adds rule number and, if provided by the issue provider, link to the rule description to the comment.
    • Support for issues messages formatted in Markdown format.
    "},{"location":"documentation/pull-request-systems/azure-devops/features/#supported-capabilities","title":"Supported capabilities","text":"

    The Cake.Issues.PullRequests.AzureDevOps addin supports the following capabilities.

    • Checking commit ID
    • Discussion threads
    • Filtering by modified files
    "},{"location":"documentation/pull-request-systems/azure-devops/features/#supported-authentication-methods","title":"Supported authentication methods","text":"Azure DevOps Server Azure DevOps Service Authentication method NTLM Basic authentication Personal access token OAuth Azure Active Directory

    For detailed instructions how to connect using the different methods see Setup instructions.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/","title":"Setup","text":"

    This page describes the different ways how the Cake.Issues.PullRequests.AzureDevOps addin can be setup.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#ntlm-authentication","title":"NTLM authentication","text":"

    Info

    NTLM authentication is only available for on-premise Azure DevOps Server.

    To authenticate with NTLM you can use the AzureDevOpsAuthenticationNtlm alias from the Cake.AzureDevOps addin.

    The user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#basic-authentication","title":"Basic authentication","text":"

    Info

    Basic authentication is only available for on-premise Azure DevOps Server.

    To authenticate with basic authentication you can use the AzureDevOpsAuthenticationBasic alias from the Cake.AzureDevOps addin and need to Configure Azure DevOps Server to use Basic Authentication.

    The user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#personal-access-token","title":"Personal access token","text":"

    To authenticate with an personal access token you can use the AzureDevOpsAuthenticationPersonalAccessToken alias from the Cake.AzureDevOps addin.

    If you want to use the Cake.Issues.PullRequests.AzureDevOps addin with an personal access token see Authenticate access with personal access tokens for Azure DevOps for instructions how to create a personal access token.

    The access token needs to have the scope Code (read and write) set and the user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#oauth-authentication-from-azure-pipelines","title":"OAuth authentication from Azure Pipelines","text":"

    Info

    OAuth authentication is only available for Azure DevOps Service.

    If you want to use the Cake.Issues.PullRequests.AzureDevOps addin from an Azure Pipelines you can authenticate using the OAuth token provided to the build. For this you need to enable the Allow scripts to access the OAuth token option on the build definition.

    To authenticate you can use the AzureDevOpsAuthenticationOAuth alias from the Cake.AzureDevOps addin.

    The user under which the build runs, named <projectName> Build Service (<organizationName>) (e.g. Cake.Issues-Demo Build Service (cake-contrib)), needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/setup/#entra-authentication","title":"Entra authentication","text":"

    Info

    Entra authentication is only available for Azure DevOps Service.

    To authenticate with Entra ID you can use the AzureDevOpsAuthenticationAzureActiveDirectory alias from the Cake.AzureDevOps addin.

    The user needs to have Contribute to pull requests permission for the specific repository to allow Cake.Issues.PullRequests.AzureDevOps addin to post issues as comments to pull requests.

    "},{"location":"documentation/pull-request-systems/azure-devops/examples/","title":"Examples","text":"
    • Using With Pull Request ID
    • Using With Repository Remote URL And Source Branch Name
    • Using With Azure Pipelines

    Info

    There's a demo repository available which you can fork and to which you can create pull requests to test the integration functionality.

    "},{"location":"documentation/pull-request-systems/azure-devops/examples/azure-pipelines/","title":"Using with Azure Pipelines","text":"

    To write issues as comments to Azure DevOps pull requests, the Azure DevOps addin needs to be imported. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n#addin nuget:?package=Cake.AzureDevOps&version=5.0.0\n

    Note

    In addition to the Azure DevOps pull request system the Cake.Issues and Cake.Issues.PullRequests core addins and the Cake.AzureDevOps addin need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example shows a task which will call the AzureDevOpsPullRequests alias to connect to the pull request using the environment variables provided by Azure Pipelines.:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToPullRequest\").Does(() =>\n{\n    var repoRootFolder =\n        MakeAbsolute(Directory(\"./\"));\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AzureDevOpsPullRequests(),\n        repoRootPath);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath =\n            context.MakeAbsolute(context.Directory(\"./\"));\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AzureDevOpsPullRequests(),\n            repoRootPath);\n    }\n}\n

    Info

    Please note that you'll need to setup your Azure Pipelines build to Allow scripts to access the OAuth token and need to setup proper permissions.

    See OAuth authentication from Azure Pipelines for details.

    "},{"location":"documentation/pull-request-systems/azure-devops/examples/pullrequest-id/","title":"Using with pull request id","text":"

    To write issues as comments to Azure DevOps pull requests, the Azure DevOps addin needs to be imported. To determine the remote repository URL the Cake.Git addin can be used. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Git&version=5.0.1\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n#addin nuget:?package=Cake.AzureDevOps&version=5.0.0\n

    Note

    In addition to the Azure DevOps pull request system the Cake.Issues and Cake.Issues.PullRequests core addins and the Cake.AzureDevOps addin need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Git\" Version=\"{{ cake_git }}\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example shows a task which will first determine the remote repository URL and with this information call the AzureDevOpsPullRequests alias, which will authenticate through NTLM to an on-premise Azure DevOps Server instance:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToPullRequest\").Does(() =>\n{\n    var repoRootPath =\n        MakeAbsolute(Directory(\"./\"));\n    var currentBranch =\n        GitBranchCurrent(repoRootPath);\n    var repoRemoteUrl =\n        new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n    var pullRequestId = 123;\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AzureDevOpsPullRequests(\n            repoRemoteUrl,\n            pullRequestId,\n            AzureDevOpsAuthenticationNtlm()),\n        repoRootPath);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\nusing Cake.Git;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath =\n            context.MakeAbsolute(context.Directory(\"./\"));\n        var currentBranch =\n            context.GitBranchCurrent(repoRootPath);\n        var repoRemoteUrl = \n            new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n        var pullRequestId = 123;\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AzureDevOpsPullRequests(\n                repoRemoteUrl,\n                pullRequestId,\n                context.AzureDevOpsAuthenticationNtlm()),\n            repoRootPath);\n    }\n}\n
    "},{"location":"documentation/pull-request-systems/azure-devops/examples/repository-information/","title":"Using with repository remote url and source branch name","text":"

    To write issues as comments to Azure DevOps pull requests, the Azure DevOps addin needs to be imported. To determine the remote repository URL and source branch of the pull request the Cake.Git addin can be used. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Git&version=5.0.1\n#addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n#addin nuget:?package=Cake.AzureDevOps&version=5.0.0\n

    Note

    In addition to the Azure DevOps pull request system the Cake.Issues and Cake.Issues.PullRequests core addins and the Cake.AzureDevOps addin need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Git\" Version=\"5.0.1\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example shows a task which will first determine the remote repository URL and source branch of the pull request and with this information call the AzureDevOpsPullRequests alias, which will authenticate through NTLM to an on-premise Azure DevOps Server instance:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Report-IssuesToPullRequest\").Does(() =>\n{\n    var repoRootFolder =\n        MakeAbsolute(Directory(\"./\"));\n    var currentBranch =\n        GitBranchCurrent(repoRootFolder);\n    var repoRemoteUrl =\n        new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n    var sourceBranchName = currentBranch.CanonicalName;\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        AzureDevOpsPullRequests(\n            repoRemoteUrl,\n            sourceBranchName,\n            AzureDevOpsAuthenticationNtlm()),\n        repoRootFolder);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\nusing Cake.Git;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath =\n            context.MakeAbsolute(context.Directory(\"./\"));\n        var currentBranch =\n            context.GitBranchCurrent(repoRootPath);\n        var repoRemoteUrl = \n            new Uri(currentBranch.Remotes.Single(x => x.Name == \"origin\").Url);\n        var sourceBranchName = currentBranch.CanonicalName;\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.AzureDevOpsPullRequests(\n                repoRemoteUrl,\n                sourceBranchName,\n                context.AzureDevOpsAuthenticationNtlm()),\n            repoRootPath);\n    }\n}\n
    "},{"location":"documentation/pull-request-systems/github-actions/","title":"GitHub Actions","text":"

    Support for GitHub Actions is implemented in the Cake.Issues.PullRequests.GitHubActions addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/pull-request-systems/github-actions/features/","title":"Features","text":"

    The Cake.Issues.PullRequests.GitHubActions addin creates annotations from issues when running on GitHub actions.

    "},{"location":"documentation/pull-request-systems/github-actions/features/#basic-features","title":"Basic features","text":"
    • Reports issues as annotations to GitHub Actions builds.
    • Group issues in log output by provider and run information.
    "},{"location":"documentation/pull-request-systems/github-actions/features/#supported-capabilities","title":"Supported capabilities","text":"

    The Cake.Issues.PullRequests.GitHubActions addin doesn't support any additional capabilities.

    • Checking commit ID
    • Discussion threads
    • Filtering by modified files
    "},{"location":"documentation/pull-request-systems/github-actions/examples/","title":"Examples","text":"
    • Create Annotations In GitHub Actions
    "},{"location":"documentation/pull-request-systems/github-actions/examples/write-annotations/","title":"Create annotations in GitHub Actions","text":"

    To report issues as annotations to a GitHub Actions build, the GitHub Actions addin needs to be imported. For this example the JetBrains InspectCode issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.GitHubActions&version=5.3.0\n

    Note

    In addition to the GitHub Actions pull request system the Cake.Issues and Cake.Issues.PullRequests core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.GitHubActions\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    This example shows how to report issues as annotations to GitHubActions build using the GitHubActionsBuilds alias:

    Cake .NET ToolCake Frosting build.cake
    Task(\"ReportIssuesToGitHubActions\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    ReportIssuesToPullRequest(\n        InspectCodeIssuesFromFilePath(\n            @\"C:\\build\\inspectcode.log\"),\n        GitHubActionsBuilds(),\n        repoRootFolder);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Report-IssuesToAppVeyor\")]\npublic sealed class ReportIssuesToAppVeyorTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        context.ReportIssuesToPullRequest(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            context.GitHubActionsBuilds(),\n            repoRootPath);\n    }\n}\n

    The output will show up in the build log grouped by issue provider / run:

    Additionally the issues show up as annotations:

    Having issues available as annotations also means that they will be shown in pull requests on the related file / position:

    "},{"location":"documentation/recipe/","title":"Overview","text":"

    Cake.Issues recipes provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

    Integration of code analyzing and linting tools into a build pipeline often looks the similar, and differentiates mainly on the used linters, build and pull request systems. Cake.Issues recipes contain code to do all the parsing, integration with build and pull request systems for you, using the individual Cake.Issues addins. They support different linters based on the linting log files you pass it and integrate automatically with different build and pull request systems.

    There are two flavors available:

    • Cake.Issues.Recipe

      For Cake .NET Tool

    • Cake.Frosting.Issues.Recipe

      For Cake Frosting

    "},{"location":"documentation/recipe/#supported-tools","title":"Supported tools","text":"

    See supported tools for a list of supported linters, build servers and pull request systems.

    "},{"location":"documentation/recipe/#bundled-addins","title":"Bundled addins","text":"

    Cake.Issues recipes will add the following addins to your build:

    Cake.Issues.RecipeCake.Frosting.Issues.Recipe Addin Version Remarks Cake.Git 5.0.1 Only used if RepositoryInfoProvider type is set to RepositoryInfoProviderType.CakeGit. See Git repository information configuration for details. Cake.Issues 5.3.0 Cake.Issues.MsBuild 5.3.0 Cake.Issues.InspectCode 5.3.0 Cake.Issues.Markdownlint 5.3.0 Cake.Issues.EsLint 5.3.0 Cake.Issues.Sarif 5.3.0 Cake.Issues.Reporting 5.3.0 Cake.Issues.Reporting.Generic 5.3.0 Cake.Issues.Reporting.Sarif 5.3.0 Cake.Issues.PullRequests 5.3.0 Cake.Issues.PullRequests.AppVeyor 5.3.0 Cake.Issues.PullRequests.AzureDevOps 5.3.0 Cake.Issues.PullRequests.GitHubActions 5.3.0 Cake.AzureDevOps 5.0.0 Addin Version Remarks Cake.Frosting.Git 5.0.1 Only used if RepositoryInfoProvider type is set to RepositoryInfoProviderType.CakeGit. See Git repository information configuration for details. Cake.Issues 5.3.0 Cake.Frosting.Issues.MsBuild 5.3.0 Cake.Frosting.Issues.InspectCode 5.3.0 Cake.Frosting.Issues.Markdownlint 5.3.0 Cake.Frosting.Issues.EsLint 5.3.0 Cake.Frosting.Issues.Sarif 5.3.0 Cake.Frosting.Issues.Reporting 5.3.0 Cake.Frosting.Issues.Reporting.Generic 5.3.0 Cake.Frosting.Issues.Reporting.Sarif 5.3.0 Cake.Frosting.Issues.PullRequests 5.3.0 Cake.Frosting.Issues.PullRequests.AppVeyor 5.3.0 Cake.Frosting.Issues.PullRequests.AzureDevOps 5.3.0 Cake.Frosting.Issues.PullRequests.GitHubActions 5.3.0 Cake.Frosting.AzureDevOps 5.0.0"},{"location":"documentation/recipe/configuration/","title":"Configuration","text":"

    This page lists configuration properties which can be used to define the functionality and behavior of Cake.Issues recipes.

    "},{"location":"documentation/recipe/configuration/#git-repository-information","title":"Git repository information","text":"

    Cake.Issues recipes require some information about current Git repository.

    To define the Git provider in Cake.Issues.Recipe set the global variable RepositoryInfoProvider. To define the Git provider in Cake.Frosting.Issues.Recipe pass the value to the constructor of IssueContext.

    The following providers are supported:

    Provider Description RepositoryInfoProviderType.CakeGit Read repository information using Cake.Git addin. Requires system to be compatible with Cake.Git addin. RepositoryInfoProviderType.Cli Read repository information using Git CLI. Requires Git CLI to be available in path.

    By default Cake.Git addin will be used.

    "},{"location":"documentation/recipe/configuration/#general","title":"General","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters Property Default Value Description OutputDirectory BuildArtifacts Path to the output directory. A relative path will be relative to the current working directory. BuildIdentifier string.Empty Identifier for the build run. If set this identifier will be used to identify to artifacts provided by the build if building on multiple configurations. IssuesContext.Parameters Property Default Value Description OutputDirectory BuildArtifacts Path to the output directory. A relative path will be relative to the current working directory. BuildIdentifier string.Empty Identifier for the build run. If set this identifier will be used to identify to artifacts provided by the build if building on multiple configurations."},{"location":"documentation/recipe/configuration/#input-files","title":"Input files","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.InputFiles Methods Description AddMsBuildXmlFileLoggerLogFilePath() Adds a path to a MSBuild log file created by XmlFileLogger. AddMsBuildXmlFileLoggerLogFileContent() Adds content of a MSBuild log file created by XmlFileLogger. AddMsBuildBinaryLogFilePath() Adds a path to a MSBuild binary log file. AddMsBuildBinaryLogFileContent() Adds content of a MSBuild binary log file. AddInspectCodeLogFilePath() Adds a path to a JetBrains InspectCode log file. AddInspectCodeLogFileContent() Adds content of a JetBrains InspectCode log file. AddMarkdownlintCliLogFilePath() Adds a path to a markdownlint-cli log file. AddMarkdownlintCliLogFileContent() Adds content of a markdownlint-cli log file. AddMarkdownlintCliJsonLogFilePath() Adds a path to a markdownlint-cli log file writting with --json. AddMarkdownlintCliJsonLogFileContent() Adds content of a markdownlint-cli log file writting with --json. AddMarkdownlintV1LogFilePath() Adds a path to a markdownlint log file in version 1. AddMarkdownlintV1LogFileContent() Adds content of a markdownlint log file in version 1. AddEsLintJsonLogFilePath() Adds a path to a ESLint log file generated by the ESLint json formatter. AddEsLintJsonLogFileContent() Adds content of a ESLint log file generated by the ESLint json formatter. AddSarifLogFilePath() Adds a path to a SARIF log file. AddSarifLogFileContent() Adds content of a SARIF log file. IssuesContext.Parameters.InputFiles Methods Description AddMsBuildXmlFileLoggerLogFilePath() Adds a path to a MSBuild log file created by XmlFileLogger. AddMsBuildXmlFileLoggerLogFileContent() Adds content of a MSBuild log file created by XmlFileLogger. AddMsBuildBinaryLogFilePath() Adds a path to a MSBuild binary log file. AddMsBuildBinaryLogFileContent() Adds content of a MSBuild binary log file. AddInspectCodeLogFilePath() Adds a path to a JetBrains InspectCode log file. AddInspectCodeLogFileContent() Adds content of a JetBrains InspectCode log file. AddMarkdownlintCliLogFilePath() Adds a path to a markdownlint-cli log file. AddMarkdownlintCliLogFileContent() Adds content of a markdownlint-cli log file. AddMarkdownlintCliJsonLogFilePath() Adds a path to a markdownlint-cli log file writting with --json. AddMarkdownlintCliJsonLogFileContent() Adds content of a markdownlint-cli log file writting with --json. AddMarkdownlintV1LogFilePath() Adds a path to a markdownlint log file in version 1. AddMarkdownlintV1LogFileContent() Adds content of a markdownlint log file in version 1. AddEsLintJsonLogFilePath() Adds a path to a ESLint log file generated by the ESLint json formatter. AddEsLintJsonLogFileContent() Adds content of a ESLint log file generated by the ESLint json formatter. AddSarifLogFilePath() Adds a path to a SARIF log file. AddSarifLogFileContent() Adds content of a SARIF log file."},{"location":"documentation/recipe/configuration/#report-creation","title":"Report creation","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.Reporting Property Default Value Description ShouldCreateFullIssuesReport true Indicates whether full issues report should be created. FullIssuesReportSettings GenericIssueReportTemplate.HtmlDxDataGrid template with DevExtremeTheme.MaterialBlueLight theme. Settings for creating the full issues report. See Template Gallery for possible options. ShouldCreateSarifReport true Indicates whether a report in SARIF format should be created. ShouldReportIssuesToConsole false Indicates whether issues should be reported to the console. ReportToConsoleSettings Settings for reporting issues to the console. IssuesContext.Parameters.Reporting Property Default Value Description ShouldCreateFullIssuesReport true Indicates whether full issues report should be created. FullIssuesReportSettings GenericIssueReportTemplate.HtmlDxDataGrid template with DevExtremeTheme.MaterialBlueLight theme. Settings for creating the full issues report. See Template Gallery for possible options. ShouldCreateSarifReport true Indicates whether a report in SARIF format should be created. ShouldReportIssuesToConsole false Indicates whether issues should be reported to the console. ReportToConsoleSettings Settings for reporting issues to the console."},{"location":"documentation/recipe/configuration/#build-server-integration","title":"Build server integration","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.BuildServer Property Default Value Description ShouldReportIssuesToBuildServer true Indicates whether issues should be reported to the build server. ShouldPublishFullIssuesReport true Indicates whether full issues report should be published as artifact to the build system. ShouldPublishSarifReport true Indicates whether report int SARIF format shoudl be published as artifact to the build system. ShouldCreateSummaryIssuesReport true Indicates whether summary issues report should be created. IssuesContext.Parameters.BuildServer Property Default Value Description ShouldReportIssuesToBuildServer true Indicates whether issues should be reported to the build server. ShouldPublishFullIssuesReport true Indicates whether full issues report should be published as artifact to the build system. ShouldPublishSarifReport true Indicates whether report int SARIF format shoudl be published as artifact to the build system. ShouldCreateSummaryIssuesReport true Indicates whether summary issues report should be created."},{"location":"documentation/recipe/configuration/#pull-request-integration","title":"Pull request integration","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.PullRequestSystem Property Default Value Description ShouldReportIssuesToPullRequest true Indicates whether issues should be reported to the pull request system. MaxIssuesToPost null Global number of issues which should be posted at maximum over all issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't set a global limit. MaxIssuesToPostAcrossRuns null Global number of issues which should be posted at maximum over all issue providers and across multiple runs. Issues are filtered by priority and issues with a file path are prioritized. null won't set a limit across multiple runs. MaxIssuesToPostForEachIssueProvider 100 Number of issues which should be posted at maximum for each issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't limit issues per issue provider. ProviderIssueLimits Empty Issue limits for individual issue provider. The key must be the IIssue.ProviderType of a specific provider to which the limits should be applied to. IssueFilters Empty List of filter functions which should be applied before posting issues to pull requests. ShouldSetPullRequestStatus true Indicates whether a status on the pull request should be set if there are any issues found. ShouldSetSeparatePullRequestStatusForEachIssueProviderAndRun true Indicates whether a separate status should be set for issues of every issue provider and run. IssuesContext.Parameters.PullRequestSystem Property Default Value Description ShouldReportIssuesToPullRequest true Indicates whether issues should be reported to the pull request system. MaxIssuesToPost null Global number of issues which should be posted at maximum over all issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't set a global limit. MaxIssuesToPostAcrossRuns null Global number of issues which should be posted at maximum over all issue providers and across multiple runs. Issues are filtered by priority and issues with a file path are prioritized. null won't set a limit across multiple runs. MaxIssuesToPostForEachIssueProvider 100 Number of issues which should be posted at maximum for each issue provider. Issues are filtered by priority and issues with a file path are prioritized. null won't limit issues per issue provider. ProviderIssueLimits Empty Issue limits for individual issue provider. The key must be the IIssue.ProviderType of a specific provider to which the limits should be applied to. IssueFilters Empty List of filter functions which should be applied before posting issues to pull requests. ShouldSetPullRequestStatus true Indicates whether a status on the pull request should be set if there are any issues found. ShouldSetSeparatePullRequestStatusForEachIssueProviderAndRun true Indicates whether a separate status should be set for issues of every issue provider and run."},{"location":"documentation/recipe/configuration/#build-breaking","title":"Build breaking","text":"Cake.Issues.RecipeCake.Frosting.Issues.Recipe IssuesParameters.BuildBreaking Property Default Value Description ShouldFailBuildOnIssues false Indicates whether build should fail if any issues are found. MinimumPriority IssuePriority.Undefined The minimum priority of issues considered to fail the build. If set to IssuePriority.Undefined, all issues are considered. IssueProvidersToConsider [] List of issue provider types to consider. IssueProvidersToIgnore [] List of issue provider types to ignore. IssuesContext.Parameters.BuildBreaking Property Default Value Description ShouldFailBuildOnIssues false Indicates whether build should fail if any issues are found. MinimumPriority IssuePriority.Undefined The minimum priority of issues considered to fail the build. If set to IssuePriority.Undefined, all issues are considered. IssueProvidersToConsider [] List of issue provider types to consider. IssueProvidersToIgnore [] List of issue provider types to ignore."},{"location":"documentation/recipe/demos/","title":"Demos","text":"

    There are demo setups available for different combinations of build servers and repositories which you can fork and to which you can create pull requests to test the recipe functionality.

    Recipe Build Server Repository Cake.Issues.Recipe Azure Pipelines Azure Repos"},{"location":"documentation/recipe/supported-tools/","title":"Supported tools","text":"

    Cake.Issues recipes support reading issues from different tools and integrates with different build and pull request systems.

    "},{"location":"documentation/recipe/supported-tools/#tools","title":"Tools","text":"

    Cake.Issues recipes support reading issues from output of the following tools:

    Cake.Issues.RecipeCake.Frosting.Issues.Recipe Tool Format IssuesParameters.InputFiles Method MsBuild MSBuild Extension Pack XmlFileLogger AddMsBuildXmlFileLoggerLogFile*() MsBuild Binary Log File AddMsBuildBinaryLogFile*() JetBrains InspectCode (ReSharper) xml AddInspectCodeLogFile*() markdownlint markdownlint-cli default format AddMarkdownlintCliLogFile*() markdownlint markdownlint-cli with --json AddMarkdownlintCliJsonLogFile*() markdownlint markdownlint version 1 AddMarkdownlintV1LogFile*() ESLint json formatter AddEsLintJsonLogFile*() Any SARIF compatible tool SARIF AddSarifLogFile*() Tool Format IssuesContext.Parameters.InputFiles Method MsBuild MSBuild Extension Pack XmlFileLogger AddMsBuildXmlFileLoggerLogFile*() MsBuild Binary Log File AddMsBuildBinaryLogFile*() JetBrains InspectCode (ReSharper) xml AddInspectCodeLogFile*() markdownlint markdownlint-cli default format AddMarkdownlintCliLogFile*() markdownlint markdownlint-cli with --json AddMarkdownlintCliJsonLogFile*() markdownlint markdownlint version 1 AddMarkdownlintV1LogFile*() ESLint json formatter AddEsLintJsonLogFile*() Any SARIF compatible tool SARIF AddSarifLogFile*()

    Tip

    See Supported tools for a list of tools supporting the SARIF format.

    "},{"location":"documentation/recipe/supported-tools/#build-systems","title":"Build systems","text":"

    Cake.Issues recipes integrates with the following build systems:

    AppVeyorAzure PipelinesGitHub Actions
    • Write issues to build server
    • Issues summary
    • Full issues report
    • Write issues to build server (1)
    • Issues summary
    • Full issues report
    1. Only first 10
    • Write issues to build server
    • Issues summary
    • Full issues report
    "},{"location":"documentation/recipe/supported-tools/#pull-request-systems","title":"Pull request systems","text":"

    Cake.Issues recipes integrates with the following pull request systems:

    Azure ReposGitHub
    • Write issues to pull requests
    • Set pull request status
    • Write issues to pull requests (1)
    • Set pull request status
    1. When build from GitHub Actions
    "},{"location":"documentation/recipe/tasks/","title":"Tasks","text":"

    Cake.Issues recipes provide the following tasks to your build script:

    Cake.Issues.RecipeCake.Frosting.Issues.Recipe Task Description IssuesBuildTasks property Issues Main tasks for issue management integration. IssuesTask Read-Issues Reads issues from the provided log files. ReadIssuesTask Create-FullIssuesReport Creates issue report. CreateFullIssuesReportTask Publish-IssuesArtifacts Publish artifacts to build server. PublishIssuesArtifactsTask Report-IssuesToBuildServer Report issues to build server. ReportIssuesToBuildServerTask Create-SummaryIssuesReport Creates a summary issue report. CreateSummaryIssuesReportTask Report-IssuesToPullRequest Report issues to pull request. ReportIssuesToPullRequestTask Set-PullRequestIssuesState Set pull request status. SetPullRequestIssuesStateTask Report-IssuesToConsole Report issues to console. ReportIssuesToConsoleTask Task Description Task type Issues Main tasks for issue management integration. Cake.Frosting.Issues.Recipe. IssuesTask Read-Issues Reads issues from the provided log files. Cake.Frosting.Issues.Recipe. ReadIssuesTask Create-FullIssuesReport Creates issue report. Cake.Frosting.Issues.Recipe. CreateFullIssuesReportTask Publish-IssuesArtifacts Publish artifacts to build server. Cake.Frosting.Issues.Recipe. PublishIssuesArtifactsTask Report-IssuesToBuildServer Report issues to build server. Cake.Frosting.Issues.Recipe. ReportIssuesToBuildServerTask Create-SummaryIssuesReport Creates a summary issue report. Cake.Frosting.Issues.Recipe. CreateSummaryIssuesReportTask Report-IssuesToPullRequest Report issues to pull request. Cake.Frosting.Issues.Recipe. ReportIssuesToPullRequestTask Set-PullRequestIssuesState Set pull request status. Cake.Frosting.Issues.Recipe. SetPullRequestIssuesStateTask Report-IssuesToConsole Report issues to console. Cake.Frosting.Issues.Recipe. ReportIssuesToConsoleTask"},{"location":"documentation/report-formats/","title":"Report Formats","text":"

    Report format addins implement specific report formats and allow the Cake Issues addin to create reports in the specific format.

    • Console \u2013 Support for reporting issues to the console
    • Generic \u2013 Support for creating reports in any text based format (HTML, Markdown, ...)
    • Sarif \u2013 Support for creating reports in SARIF format

    Tip

    See How to implement report format for instruction on how to implement support for additional report formats.

    "},{"location":"documentation/report-formats/console/","title":"Console","text":"

    Support for printing issues to the console is implemented in the a Cake.Issues.Reporting.Console addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/report-formats/console/examples/","title":"Examples","text":"

    To report issues to the console the Console report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Console&version=5.3.0\n

    Note

    In addition to the Console report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Console\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will print issues logged as warnings by MsBuild to the console.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    // Build MySolution.sln solution in the repository root folder and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Write issues to console.\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            msBuildLogFile,\n            MsBuildBinaryLogFileFormat),\n        ConsoleIssueReportFormat(\n            new ConsoleIssueReportFormatSettings\n            {\n                GroupByRule = true,\n                ShowProviderSummary = true,\n                ShowPrioritySummary = true\n            }),\n        repoRootPath,\n        string.Empty);\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Write issues to console.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.ConsoleIssueReportFormat(\n                new ConsoleIssueReportFormatSettings\n                {\n                    GroupByRule = true,\n                    ShowProviderSummary = true,\n                    ShowPrioritySummary = true\n                }),\n            repoRootPath,\n            string.Empty);\n    }\n}\n
    "},{"location":"documentation/report-formats/console/features/","title":"Features","text":"

    The Cake.Issues.Reporting.Console addin provides the following features:

    • Prints issues containing line and column information.
    • Group issues by rule

    Reports:

    • Number of issues by provider
    • Number of issues by priority for every provider and run
    "},{"location":"documentation/report-formats/generic/","title":"Generic","text":"

    Support for creating reports in any text based format like HTML or Markdown is implemented in the Cake.Issues.Reporting.Generic addin.

    • Features
    • Examples
    • Template Gallery
    • API
    "},{"location":"documentation/report-formats/generic/features/","title":"Features","text":"

    The Cake.Issues.Reporting.Generic addin provides the following features:

    • Creates reports in any text based format like HTML or Markdown.
    • Provides out of the box templates
    • Possibility to use custom templates using Razor

    Info

    See Template Gallery for a list of available out of the box and 3rd party templates.

    "},{"location":"documentation/report-formats/generic/examples/","title":"Examples","text":"
    • Embedded Default Template
    • Custom Template
    "},{"location":"documentation/report-formats/generic/examples/custom-template/","title":"Custom template","text":"

    Info

    If you create a universally usable custom template we're happy to package it with the addin. To have it included in the addin please create a pull request with your contribution.

    To create custom HTML reports the Generic report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Generic&version=5.3.0\n

    Note

    In addition to the Generic report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Generic\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will create a HTML report for issues logged as warnings by MsBuild using a custom template.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"c:\\repo\");\n\n    // Build MySolution.sln solution in the repository root folder\n    // and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new MSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile)\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\"),\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Create HTML report using Diagnostic template.\n    CreateIssueReport(\n        new List<IIssueProvider>\n        {\n            MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                MsBuildBinaryLogFileFormat)\n        },\n        GenericIssueReportFormatFromFilePath(\n            @\"c:\\ReportTemplate.cshtml\"),\n        repoRootFolder,\n        @\"c:\\report.html\");\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder\n        // and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Write issues to console.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.GenericIssueReportFormatFromFilePath(\n                @\"c:\\ReportTemplate.cshtml\"),\n            repoRootPath,\n            @\"c:\\report.html\");\n    }\n}\n

    The template looks like this:

    ReportTemplate.cshtml
    @model IEnumerable<Cake.Issues.IIssue>\n\n<!DOCTYPE html>\n\n<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title></title>\n</head>\n<body>\n    <table>\n        <thead>\n            <tr>\n                <th scope=\"col\">AffectedFileRelativePath</th>\n                <th scope=\"col\">Line</th>\n                <th scope=\"col\">Message</th>\n                <th scope=\"col\">Priority</th>\n                <th scope=\"col\">Rule</th>\n                <th scope=\"col\">RuleUrl</th>\n                <th scope=\"col\">ProviderType</th>\n            </tr>\n        </thead>\n        <tbody>\n            @foreach (var issue in Model)\n            {\n                <tr>\n                    <td>@issue.AffectedFileRelativePath</td>\n                    <td>@issue.Line</td>\n                    <td>@issue.MessageText</td>\n                    <td>@issue.Priority</td>\n                    <td>@issue.RuleId</td>\n                    <td>@issue.RuleUrl</td>\n                    <td>@issue.ProviderType</td>\n                </tr>\n            }\n        </tbody>\n    </table>\n</body>\n</html>\n

    The template retrieves an IEnumerable<Cake.Issues.IIssue> as model.

    Info

    In custom templates functionality from the following assemblies are available:

    • System.dll
    • System.Core.dll
    • netstandard.dll
    • Cake.Core.dll
    • Cake.Issues.dll
    • Cake.Issues.Reporting.Generic.dll
    "},{"location":"documentation/report-formats/generic/examples/default-template/","title":"Embedded default template","text":"

    To create HTML reports the Generic report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Generic&version=5.3.0\n

    Note

    In addition to the Generic report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Generic\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will create a HTML report for issues logged as warnings by MsBuild.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    // Build MySolution.sln solution in the repository root folder\n    // and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Create HTML report using Diagnostic template.\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            msBuildLogFile,\n            MsBuildBinaryLogFileFormat),\n        GenericIssueReportFormatFromEmbeddedTemplate(\n            GenericIssueReportTemplate.HtmlDiagnostic),\n        repoRootPath,\n        @\"c:\\report.html\");\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder\n        // and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Write issues to console.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.GenericIssueReportFormatFromEmbeddedTemplate(\n                GenericIssueReportTemplate.HtmlDiagnostic),\n            repoRootPath,\n            @\"c:\\report.html\");\n    }\n}\n
    "},{"location":"documentation/report-formats/generic/templates/","title":"Template Gallery","text":"
    • HTML DevExtreme Data Grid
    • HTML Data Table
    • HTML Diagnostic
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/","title":"HTML Data Table","text":"

    Template for a HTML report containing a rich data table view with sorting and search functionality powered by Simple-DataTables.

    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#features","title":"Features","text":"
    • Separate table for issues of each issue provider.
    • Table with Severity, Project, Path, File, Location, Rule, Message.
    • Each column sortable by user.
    • Paged table with possibility for user to change number of entries per page.
    • Client-side full text search.
    • No internet access required for displaying.
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#requirements","title":"Requirements","text":"
    • Cake.Issues.Reporting.Generic 0.2.1 or higher
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#usage","title":"Usage","text":"

    To create a report using the HTML Data Table template you can use the GenericIssueReportTemplate.HtmlDataTable enum value:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDataTable),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDataTable),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#options","title":"Options","text":"

    This template doesn't support any options.

    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#demos","title":"Demos","text":"
    • Default
    "},{"location":"documentation/report-formats/generic/templates/htmldatatable/#source-code","title":"Source Code","text":"

    Info

    You can use the source code as a template for your custom template.

    Source code is available on GitHub.

    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/","title":"HTML Diagnostic","text":"

    Template for a HTML report containing a list of all issues with all properties.

    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#features","title":"Features","text":"
    • Unstyled table listing all properties of IIssue
    • No internet access required for displaying.
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#requirements","title":"Requirements","text":"
    • No additional requirements.
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#usage","title":"Usage","text":"

    To create a report using the HTML diagnostic template you can use the GenericIssueReportTemplate.HtmlDiagnostic enum value:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDiagnostic),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDiagnostic),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#options","title":"Options","text":"

    This template doesn't support any options.

    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#demos","title":"Demos","text":"
    • Default
    "},{"location":"documentation/report-formats/generic/templates/htmldiagnostic/#source-code","title":"Source Code","text":"

    Info

    You can use the source code as a template for your custom template.

    Source code is available on GitHub.

    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/","title":"HTML DevExtreme Data Grid","text":"

    Template for a HTML report containing a rich data grid with sorting, filtering, grouping and search capabilities powered by DevExtreme.

    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#features","title":"Features","text":"
    • Table with Provider, Severity, Project, Path, File, Location, Rule, Message by default.
    • Support for grouping by multiple columns by user.
    • Total number of issues by each group level.
    • Each column sortable by user.
    • Data can be filtered by any column by user.
    • Paged view.
    • Client-side full text search.
    • Client-side export to Microsoft Excel or PDF.
    • Fully customizable through options.
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#requirements","title":"Requirements","text":"
    • Cake.Issues.Reporting.Generic 0.3.1 or higher
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#usage","title":"Usage","text":"

    To create a report using the HTML DevExtreme Data Grid template you can use the GenericIssueReportTemplate.HtmlDxDataGrid enum value:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n      GenericIssueReportTemplate.HtmlDxDataGrid),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n      GenericIssueReportTemplate.HtmlDxDataGrid),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#options","title":"Options","text":"

    See HtmlDxDataGridOption for a list of possible options.

    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#demos","title":"Demos","text":"

    The following demo shows the template with its default options:

    • Default (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#themes","title":"Themes","text":"

    The template supports the teams defined in the DevExtremeTheme enumeration which can be set using the HtmlDxDataGridOption.Theme:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.Theme,\n                DevExtremeTheme.MaterialBlueLight)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                  HtmlDxDataGridOption.Theme,\n                  DevExtremeTheme.MaterialBlueLight)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Light Theme (Source Code)
    • Dark Theme (Source Code)
    • Contrast Theme (Source Code)
    • Carmine Theme (Source Code)
    • Dark Moon Theme (Source Code)
    • Soft Blue Theme (Source Code)
    • Dark Violet Theme (Source Code)
    • Green Mist Theme (Source Code)
    • Light Compact Theme (Source Code)
    • Dark Compact Theme (Source Code)
    • Contrast Compact Theme (Source Code)
    • Material Blue Light Theme (Source Code)
    • Material Lime Light Theme (Source Code)
    • Material Orange Light Theme (Source Code)
    • Material Purple Light Theme (Source Code)
    • Material Teal Light Theme (Source Code)
    • Material Blue Dark Theme (Source Code)
    • Material Lime Dark Theme (Source Code)
    • Material Orange Dark Theme (Source Code)
    • Material Purple Dark Theme (Source Code)
    • Material Teal Dark Theme (Source Code)
    • Material Blue Light Compact Theme (Source Code)
    • Material Lime Light Compact Theme (Source Code)
    • Material Orange Light Compact Theme (Source Code)
    • Material Purple Light Compact Theme (Source Code)
    • Material Teal Light Compact Theme (Source Code)
    • Material Blue Dark Compact Theme (Source Code)
    • Material Lime Dark Compact Theme (Source Code)
    • Material Orange Dark Compact Theme (Source Code)
    • Material Purple Dark Compact Theme (Source Code)
    • Material Teal Dark Compact Theme (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#column-visibility","title":"Column visibility","text":"

    Visible columns can be defined using the ColumnNameVisible option:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.LineVisible,\n                false)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.LineVisible,\n                false)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n

    Additional columns can be added using the HtmlDxDataGridOption.AdditionalColumns option.

    • Show and hide columns (Source Code)
    • Add additional columns (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#sorting","title":"Sorting","text":"

    Sorted columns can be defined using the HtmlDxDataGridOption.SortedColumns and the ColumnNameSortOder options:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.SortedColumns,\n                new List<ReportColumn> { ReportColumn.RuleId })\n            .WithOption(\n                HtmlDxDataGridOption.RuleIdSortOrder,\n                ColumnSortOrder.Descending )),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.SortedColumns,\n                new List<ReportColumn> { ReportColumn.RuleId })\n            .WithOption(\n                HtmlDxDataGridOption.RuleIdSortOrder, \n                ColumnSortOrder.Descending )),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Change sorting (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#grouping","title":"Grouping","text":"

    Grouping can be defined using the HtmlDxDataGridOption.GroupedColumns option:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.GroupedColumns, \n                new List<ReportColumn> { ReportColumn.RuleId })),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.GroupedColumns, \n                new List<ReportColumn> { ReportColumn.RuleId })),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Change grouping (Source Code)
    • Disable grouping (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#exporting","title":"Exporting","text":"

    Exporting can be enabled using the HtmlDxDataGridOption.EnableExporting option:

    Cake .NET ToolCake Frosting
    CreateIssueReport(\n    issues,\n    GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.EnableExporting,\n                true)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    context.CreateIssueReport(\n    issues,\n    context.GenericIssueReportFormatFromEmbeddedTemplate(\n        GenericIssueReportTemplate.HtmlDxDataGrid,\n        settings => settings\n            .WithOption(\n                HtmlDxDataGridOption.EnableExporting,\n                true)),\n    @\"c:\\repo\",\n    @\"c:\\report.html\");\n
    • Enable exporting (Source Code)
    • Microsoft Excel export (*.xlsx) (Source Code)
    • PDF export (*.pdf) (Source Code)
    • Custom export file name (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#other-features","title":"Other features","text":"
    • Change title (Source Code)
    • Disable header (Source Code)
    • Disable filtering (Source Code)
    • Disable searching (Source Code)
    • Custom script location and version (Source Code)
    "},{"location":"documentation/report-formats/generic/templates/htmldxdatagrid/#source-code","title":"Source Code","text":"

    Info

    You can use the source code as a template for your custom template.

    Source code is available on GitHub.

    "},{"location":"documentation/report-formats/sarif/","title":"Sarif","text":"

    Support for creating SARIF compatible reports is implemented in the Cake.Issues.Reporting.Sarif addin.

    • Features
    • Examples
    • API
    "},{"location":"documentation/report-formats/sarif/examples/","title":"Examples","text":"

    To report issues to the console the SARIF report format needs to be imported. For this example the MsBuild issue provider is additionally used for reading issues:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Sarif&version=5.3.0\n

    Note

    In addition to the SARIF report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Sarif\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following example will create a SARIF report for issues logged as warnings by MsBuild.

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-IssueReport\").Does(() =>\n{\n    var repoRootPath = MakeAbsolute(Directory(\"./\"));\n\n    // Build MySolution.sln solution in the repository root folder\n    // and write a binary log.\n    FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n    var msBuildSettings =\n        new DotNetMSBuildSettings().WithLogger(\n            \"BinaryLogger,\" + Context.Tools.Resolve(\"Cake.Issues.MsBuild*/**/StructuredLogger.dll\"),\n            \"\",\n            msBuildLogFile.FullPath);\n    DotNetBuild(\n        repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n        new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n    // Create SARIF report.\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            msBuildLogFile,\n            MsBuildBinaryLogFileFormat,\n        SarifIssueReportFormat(),\n        repoRootPath,\n        @\"c:\\report.sarif\");\n});\n
    Program.cs
    using Cake.Common.IO;\nusing Cake.Common.Tools.DotNet;\nusing Cake.Common.Tools.DotNet.Build;\nusing Cake.Common.Tools.DotNet.MSBuild;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-IssueReport\")]\npublic sealed class CreateIssueReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootPath = context.MakeAbsolute(context.Directory(\"./\"));\n\n        // Build MySolution.sln solution in the repository root folder\n        // and write a binary log.\n        FilePath msBuildLogFile = @\"c:\\build\\msbuild.log\";\n        var msBuildSettings =\n            new DotNetMSBuildSettings().WithLogger(\n                \"BinaryLogger,\" + context.Environment.ApplicationRoot.CombineWithFilePath(\"StructuredLogger.dll\"),\n                \"\",\n                msBuildLogFile.FullPath);\n        context.DotNetBuild(\n            repoRootPath.CombineWithFilePath(\"MySolution.sln\").FullPath,\n            new DotNetBuildSettings{MSBuildSettings = msBuildSettings});\n\n        // Create SARIF report.\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                msBuildLogFile,\n                context.MsBuildBinaryLogFileFormat()),\n            context.SarifIssueReportFormat(),\n            repoRootPath,\n            @\"c:\\report.sarif\");\n    }\n}\n
    "},{"location":"documentation/report-formats/sarif/features/","title":"Features","text":"

    The Cake.Issues.Reporting.Sarif addin provides the following features:

    • Creates SARIF compatible files.

    Supports the following properties in the SARIF report:

    • RuleId
    • Message
    • Kind
    • Level
    • Location
    • RuleUrl
    "},{"location":"documentation/resources/blog-posts/","title":"Blog posts","text":"

    Info

    If you have written about Cake Issues we would like to hear from you. You can add it by creating a pull request here.

    "},{"location":"documentation/resources/blog-posts/#2018","title":"2018","text":"
    • Cake.Issues - A suite of addins for issue handling in Cake - Pascal Berger
    "},{"location":"documentation/resources/blog-posts/#2017","title":"2017","text":"
    • Finding typos with ReSharper Command Line Tools, ReSpeller and Cake - Tom Podolak
    • Cake build issue reporting with PRCA - Tomasz Cielecki
    "},{"location":"documentation/resources/presentations/","title":"Presentations","text":"

    Info

    If you have done a presentation about Cake Issues we would like to hear from you. You can add it by creating a pull request here.

    "},{"location":"documentation/resources/presentations/#2019","title":"2019","text":"
    • Continuous Code Inspection using Cake - .NET User Group Basel: Video Slides - Pascal Berger
    "},{"location":"documentation/resources/presentations/#2018","title":"2018","text":"
    • Ensuring quality in your DevOps pipelines using Cake - Azure DevOps Saturday Gothenburg - Pascal Berger
    "},{"location":"documentation/usage/","title":"Usage","text":""},{"location":"documentation/usage/#ready-to-use-distributions","title":"Ready To Use Distributions","text":"

    The easiest way to use Cake Issues is by using one of the Recipe packages, which provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

    "},{"location":"documentation/usage/#consuming-of-individual-addins","title":"Consuming Of Individual Addins","text":"

    The addins can be added individually to any Cake build and allow advanced customizations:

    • Creating Issues
    • Reading Issues
    • Creating Reports
    • Reporting Issues To Pull Request And Build Systems
    • Breaking Builds
    "},{"location":"documentation/usage/breaking-builds/breaking-builds/","title":"Breaking builds","text":"

    The Cake.Issues addin can be used to break builds if specific issues were reported.

    List of all aliases for breaking builds

    See all available Aliases for breaking builds

    To break builds you need to import the following core addin:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n
    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Issues\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    The following task will fail the build if any issues were added to the issues global variable:

    Cake .NET ToolCake Frosting build.cake
    // Global issues list into which issues need to be added.\nIEnumerable<IIssue> issues = null;\n\nTask(\"BreakBuildOnIssues\")\n    .Description(\"Breaks build if any issues in the code are found.\")\n    .Does(() =>\n{\n    BreakBuildOnIssues(issues);\n});\n
    Program.cs
    using Cake.Core;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .Run(args);\n    }\n}\n\npublic class BuildContext(ICakeContext context) : FrostingContext(context)\n{\n    private readonly List<IIssue> _issues = [];\n\n    public IEnumerable<IIssue> Issues { get { return _issues;  } }\n\n    public void AddIssues(IEnumerable<IIssue> issues)\n    {\n        _issues.AddRange(issues);\n    }\n}\n\n[TaskName(\"BreakBuildOnIssues\")]\npublic sealed class BreakBuildOnIssuesTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        context.BreakBuildOnIssues(context.Issues);\n    }\n}\n
    "},{"location":"documentation/usage/creating-issues/creating-issues/","title":"Creating issues","text":"

    The Cake.Issues addin can be used to create issues directly in the build script. This issues can for example be used to create reports.

    List of all aliases for creating issues

    See all available Aliases for creating issues

    To create issues you need to import the following core addin:

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n
    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Issues\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    In the following task a new warning for the myfile.txt file on line 42 is created:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-Issue\").Does(() =>\n{\n    var issue =\n        NewIssue(\n            \"Something went wrong\",\n            \"MyCakeScript\",\n            \"My Cake Script\")\n            .WithMessageInHtmlFormat(\"Something went <b>wrong</b>\")\n            .WithMessageInMarkdownFormat(\"Something went **wrong**\")\n            .InFile(\"myfile.txt\", 42)\n            .WithPriority(IssuePriority.Warning)\n            .Create();\n\n    Information(\n        \"Issue created with message: {0}\",\n        issue.MessageText);\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-Issue\")]\npublic sealed class CreateIssueTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var issue =\n            context.NewIssue(\n                \"Something went wrong\",\n                \"MyCakeScript\",\n                \"My Cake Script\")\n                .WithMessageInHtmlFormat(\"Something went <b>wrong</b>\")\n                .WithMessageInMarkdownFormat(\"Something went **wrong**\")\n                .InFile(\"myfile.txt\", 42)\n                .WithPriority(IssuePriority.Warning)\n                .Create();\n\n        context.Information(\n            \"Issue created with message: {0}\",\n            issue.MessageText);\n    }\n}\n
    "},{"location":"documentation/usage/creating-reports/","title":"Creating Reports","text":"
    • Create Reports
    "},{"location":"documentation/usage/creating-reports/creating-reports/","title":"Creating reports","text":"

    The Cake.Issues.Reporting addin can be used to create issue reports in different formats.

    List of all aliases for creating reports

    See all available Aliases for creating reports

    To create report for issues you need to import the corresponding report format. In the following example the issue provider for reading warnings from MsBuild log files and generic report format is imported:

    Example for other report formats

    For examples for other formats see Report Format Examples.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.Reporting.Generic&version=5.3.0\n

    Note

    In addition to the report format the Cake.Issues and Cake.Issues.Reporting core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.Reporting.Generic\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    Afterwards you can define a task where you call the reporting addin with the desired issue provider and report format:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Create-Report\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n    CreateIssueReport(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\msbuild.log\",\n            MsBuildBinaryLogFileFormat),\n        GenericIssueReportFormatFromEmbeddedTemplate(\n            GenericIssueReportTemplate.HtmlDiagnostic),\n        repoRootFolder,\n        @\"c:\\report.html\");\n});\n
    Program.cs
    using Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Create-Report\")]\npublic sealed class CreateReportTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        context.CreateIssueReport(\n            context.MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                context.MsBuildBinaryLogFileFormat()),\n            context.GenericIssueReportFormatFromEmbeddedTemplate(\n                GenericIssueReportTemplate.HtmlDiagnostic),\n            repoRootFolder,\n            @\"c:\\report.html\");\n    }\n}\n
    "},{"location":"documentation/usage/reading-issues/","title":"Reading Issues","text":"
    • Read Issues
    • Pass Additional Run Information
    • Configure File Links
    "},{"location":"documentation/usage/reading-issues/file-linking/","title":"File linking","text":"

    File link settings can be defined while reading issues and are passed through the IIssue.FileLink property to reporting formats, pull request systems and build server implementations:

    List of all aliases for file linking

    See all available Aliases for file linking

    Cake .NET ToolCake Frosting
    var settings =\n    new ReadIssuesSettings(@\"c:\\repo\")\n    {\n        FileLinkSettings =\n            IssueFileLinkSettingsForGitHubCommit(\n                \"https://github.com/cake-contrib/Cake.Issues\",\n                \"76a7cacef7ad4295a6766646d45c9b56\")\n    };    \n\n    var issues =\n        ReadIssues(\n            InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            settings));\n
    var settings =\n    new ReadIssuesSettings(@\"c:\\repo\")\n    {\n        FileLinkSettings =\n            IssueFileLinkSettingsForGitHubCommit(\n                \"https://github.com/cake-contrib/Cake.Issues\",\n                \"76a7cacef7ad4295a6766646d45c9b56\")\n    };    \n\n    var issues =\n        context.ReadIssues(\n            context.InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            settings));\n

    Cake.Issues comes with out-of-the-box support for linking to files hosted on GitHub and Azure Repos, either for a specific branch or commit. Additionally there are aliases which can be used to define any custom pattern.

    "},{"location":"documentation/usage/reading-issues/reading-issues/","title":"Reading issues","text":"

    The Cake.Issues addin can be used to aggregate issues from different sources. This can for example be useful to break builds based on the reported issues.

    List of all aliases for reading issues

    See all available Aliases for reading issues

    To read issues you need to import at least one issue provider. In the following example the issue providers for reading warnings from MsBuild log files and from JetBrains InspectCode are imported:

    Example for other tools

    For examples for issue providers for reading issues form other tools see Issue Provider Examples.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.InspectCode&version=5.3.0\n

    Note

    In addition to the issue providers the Cake.Issues core addin needs to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.InspectCode\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    Afterwards you can define a task where you call the core addin with the desired issue providers. The following example reads warnings and errors reported by MsBuild from a binary log and issues reported by JetBrains InspectCode:

    Cake .NET ToolCake Frosting build.cake
    Task(\"Read-Issues\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n    var issues = ReadIssues(\n        new List<IIssueProvider>\n        {\n            MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                MsBuildBinaryLogFileFormat),\n            InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\")\n        },\n        repoRootFolder);\n\n    Information(\"{0} issues are found.\", issues.Count());\n});\n
    Program.cs
    using Cake.Common.Diagnostics;\nusing Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"Read-Issues\")]\npublic sealed class ReadIssuesTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        var issues = context.ReadIssues(\n            new List<IIssueProvider>\n            {\n                context.MsBuildIssuesFromFilePath(\n                    @\"C:\\build\\msbuild.log\",\n                    context.MsBuildBinaryLogFileFormat()),\n                context.InspectCodeIssuesFromFilePath(\n                    @\"C:\\build\\inspectcode.log\")\n            },\n            repoRootFolder);\n\n        context.Information(\"{0} issues are found.\", issues.Count());\n    }\n}\n
    "},{"location":"documentation/usage/reading-issues/run-information/","title":"Additional run information","text":"

    If a build script needs to parse multiple log files using the same issue provider, e.g. by importing results in SARIF or Test Anything Protocol format from different tools, this can be done by calling the issue provider multiple times.

    If the results are read into the same list and shown on the same report, individual issues could not be assigned to any of the calls, since issue provider type and name are identical.

    Starting with Cake.Issues 0.9.0 it is possible to pass additional run information while reading issues, which then will be stored with each issues in the IIssue.Run property:

    Cake .NET ToolCake Frosting
    var issues = new List<IIssue>();\n\n// Parse issues from build of solution 1\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution1-msbuild.log\",\n            MsBuildBinaryLogFileFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 1\"\n        }\n    )\n);\n\n// Parse issues from build of solution 2\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution2-msbuild.log\",\n            MsBuildBinaryLogFileFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 2\"\n        }\n    )\n);\n
    var issues = new List<IIssue>();\n\n// Parse issues from build of solution 1\nissues.AddRange(\n    context.ReadIssues(\n        context.MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution1-msbuild.log\",\n            context.MsBuildBinaryLogFileFormat()),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 1\"\n        }\n    )\n);\n\n// Parse issues from build of solution 2\nissues.AddRange(\n    context.ReadIssues(\n        context.MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution2-msbuild.log\",\n            context.MsBuildBinaryLogFileFormat()),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 2\"\n        }\n    )\n);\n
    "},{"location":"documentation/usage/recipe/","title":"Recipe usage","text":"

    Cake.Issues recipes provide build scripts, delivered as a NuGet package, which can be used inside your projects Cake build to add issue management.

    Integration of code analyzing and linting tools into a build pipeline often looks the similar, and differentiates mainly on the used linters, build and pull request systems. Cake.Issues recipes contain code to do all the parsing, integration with build and pull request systems for you, using the individual Cake.Issues addins. They support different linters based on the linting log files you pass it and integrate automatically with different build and pull request systems.

    There are two flavors available:

    • Cake.Issues.Recipe

      For Cake .NET Tool

    • Cake.Frosting.Issues.Recipe

      For Cake Frosting

    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/","title":"Using Cake.Frosting.Issues.Recipe","text":"

    The Cake.Frosting.Issues.Recipe package can be used to easily add issue management functionality to your Cake Frosting build.

    Info

    See Setting Up A New Frosting Project for instructions how to create a new Cake Frosting project.

    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#add-cakefrostingissuesrecipe-to-your-cake-frosting-build","title":"Add Cake.Frosting.Issues.Recipe to your Cake Frosting build","text":"

    To use Cake.Frosting.Issues.Recipe in your Cake Frosting build you need to first add the NuGet package in your .csproj file:

    <PackageReference Include=\"Cake.Frosting.Issues.Recipe\" Version=\"5.3.0\" />\n
    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#register-cakeissues-tasks","title":"Register Cake.Issues tasks","text":"

    To make Cake Issues tasks available to your Cake Frosting build you need to register them.

    Add the following line to the bootstrapping code in the Main method of your Cake Frosting project:

    AddAssembly(Assembly.GetAssembly(typeof(IssuesTask)))\n

    The following bootstrapping code registers the Cake Issues tasks and also installs JetBrains InspectCode:

    using System;\nusing System.Reflection;\nusing Cake.Frosting;\nusing Cake.Frosting.Issues.Recipe;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .UseContext<BuildContext>()\n            .InstallTool(\n                new Uri(\n                    \"nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2024.3.3\"))\n            .AddAssembly(Assembly.GetAssembly(typeof(IssuesTask)))\n            .Run(args);\n    }\n}\n
    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#create-build-context","title":"Create build context","text":"

    Cake.Frosting.Issues.Recipe provides a build context from which you need to inherit your custom build context. The build context contains configuration parameters, but also the state of the current running build, like for example all collected issues.

    The following example creates a build context and defines that Cake Issues should use Cake.Git addin to determine state of the Git repository:

    public class BuildContext : IssuesContext\n{\n    public BuildContext(ICakeContext context)\n        : base(context, RepositoryInfoProviderType.CakeGit)\n    {\n    }\n}\n
    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#passing-issues-to-cakefrostingissuesrecipe","title":"Passing issues to Cake.Frosting.Issues.Recipe","text":"

    To make issues available to Cake.Frosting.Issues.Recipe you need pass the log files through the corresponding methods. The tasks need to also be a dependency of ReadIssuesTask provided by Cake.Frosting.Issues.Recipe.

    In the following example a new task is introduced which runs JetBrains InspectCode and passes the log file to Cake.Frosting.Issues.Recipe:

    [TaskName(\"Run-InspectCode\")]\n[IsDependeeOf(typeof(ReadIssuesTask))]\npublic class RunInspectCodeTask : FrostingTask<BuildContext>\n{\n    public override void Run(BuildContext context)\n    {\n        var inspectCodeLogFilePath =\n            context.Parameters.OutputDirectory\n                .CombineWithFilePath(\"inspectCode.log\");\n\n        // Run JetBrains InspectCode\n        context.InspectCode(\n            context.State.RepositoryRootDirectory\n                .Combine(\"src\")\n                .CombineWithFilePath(\"ClassLibrary1.sln\"),\n            new InspectCodeSettings() {\n                OutputFile = context.InspectCodeLogFilePath\n            });\n\n        // Pass path to InspectCode log file to Cake.Frosting.Issues.Recipe\n        context.Parameters.InputFiles\n            .AddInspectCodeLogFilePath(context.InspectCodeLogFilePath);\n    }\n}\n

    Tip

    See configuration for a full list of available configuration parameters.

    "},{"location":"documentation/usage/recipe/using-cake-frosting-issues-recipe/#calling-issues-tasks","title":"Calling issues tasks","text":"

    Cake.Frosting.Issues.Recipe will add a bunch of tasks to your build script.

    To add the issues functionality into your existing build pipeline you need to add ReadIssuesTask to your pipeline.

    In the following example the Default task makes sure the main IssuesTask is executed:

    [TaskName(\"Default\")]\n[IsDependentOn(typeof(IssuesTask))]\npublic class DefaultTask : FrostingTask\n{\n}\n
    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/","title":"Using Cake.Issues.Recipe","text":"

    The Cake.Issues.Recipe package can be used to easily add issue management functionality to your build script.

    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/#add-cakeissuesrecipe-to-your-build-script","title":"Add Cake.Issues.Recipe to your build script","text":"

    To use Cake.Issues.Recipe in your build script you need to first load the NuGet package:

    #load nuget:package=Cake.Issues.Recipe&version=5.3.0\n
    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/#configuring-cakeissuesrecipe","title":"Configuring Cake.Issues.Recipe","text":"

    To make issues available to Cake.Issues.Recipe you need to set the corresponding configuration parameters.

    In the following example a new task is introduced which depends on existing tasks which build a MsBuild solution and run JetBrains InspectCode. It will pass the MsBuild and InspectCode logfile to Cake.Issues.Recipe:

    // Run issues task by default.\nTask(\"Configure-CakeIssuesRecipe\")\n    .IsDependentOn(\"Build\")\n    .IsDependentOn(\"Run-InspectCode\")\n    .Does(() =>\n{\n    IssuesParameters.InputFiles\n        .AddMsBuildBinaryLogFilePath(msBuildLogFilePath);\n    IssuesParameters.InputFiles\n        .AddInspectCodeLogFilePath(inspectCodeLogFilePath);\n}\n

    Tip

    See configuration for a full list of available configuration parameters.

    "},{"location":"documentation/usage/recipe/using-cake-issues-recipe/#calling-issues-tasks","title":"Calling issues tasks","text":"

    Cake.Issues.Recipe will add a bunch of tasks to your build script.

    To add the issues functionality into your existing build pipeline you can make the Read-Issues task dependent on the task which configures Cake.Issues.Recipe:

    // Make sure build and linters run before issues task.\nIssuesBuildTasks.ReadIssuesTask\n    .IsDependentOn(\"Configure-CakeIssuesRecipe\");\n

    At some point you need to call the tasks provided by Cake.Isses.Recipe. In the following example the Default task calls the main Issues task:

    // Run issues task by default.\nTask(\"Default\")\n    .IsDependentOn(\"Issues\");\n
    "},{"location":"documentation/usage/reporting-issues-to-pull-requests/","title":"Reporting Issues To Pull Requests","text":"
    • Report Issues To Pull Requests
    • Apply Custom Issue Filter
    "},{"location":"documentation/usage/reporting-issues-to-pull-requests/custom-issue-filter/","title":"Custom issue filter","text":"

    The IssueFilters setting property allows to define custom filters which are applied to issues before they are posted as comments to pull requests.

    Tip: Filter to issues introduced with pull request

    You can use a custom filter to only have issues introduced with the current code posted to the pull request.

    For this you need to store your log files as artifacts on your build system, then you can define a custom filter which retrieves the logs from the previous build, parses them using the appropriate issue provider and filters out any issues which were already existing in the previous build.

    The following example will filter out all issues from the rule CA1000 from being posted to the pull request.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0    \n\nTask(\"ReportIssuesToPullRequest\").Does(() =>\n{\n    var repoRootFolder = new DirectoryPath(@\"C:\\repo\");    \n\n    var settings =\n        new ReportIssuesToPullRequestFromIssueProviderSettings(repoRootFolder);\n\n    // Add custom filter.\n    settings.IssueFilters.Add(x => x.Where(issue => issue.RuleId != \"CA1000\"));\n\n    ReportIssuesToPullRequest(\n        new List<IIssueProvider>\n        {\n            MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                MsBuildBinaryLogFileFormat)\n        },\n        AzureDevOpsPullRequests(),\n        settings);\n});\n
    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n
    Program.cs
    using Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"ReportIssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n\n        var settings =\n            new ReportIssuesToPullRequestFromIssueProviderSettings(\n                repoRootFolder);\n\n        // Add custom filter.\n        settings.IssueFilters.Add(x =>\n            x.Where(issue => issue.RuleId != \"CA1000\"));\n\n        context.ReportIssuesToPullRequest(\n            new List<IIssueProvider>\n            {\n                context.MsBuildIssuesFromFilePath(\n                    @\"C:\\build\\msbuild.log\",\n                    context.MsBuildBinaryLogFileFormat())\n            },\n            context.AzureDevOpsPullRequests(),\n            settings);\n    }\n}\n
    "},{"location":"documentation/usage/reporting-issues-to-pull-requests/report-issues-to-pull-requests/","title":"Report issues to pull requests","text":"

    The Cake.Issues.PullRequests addin can be used to report issues to build servers and pull request systems.

    List of all aliases for reporting issues

    See all available Aliases for reporting issues

    To use report issues to pull requests you need to import the corresponding pull request system addin. In the following example the issue provider for reading warnings from MsBuild log files and support for Azure DevOps pull requests is imported:

    Example for other build server and pull request systems

    For examples for other build server and pull request systems see Pull Request System Examples.

    Cake .NET ToolCake Frosting build.cake
    #addin nuget:?package=Cake.Issues&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests&version=5.3.0\n#addin nuget:?package=Cake.Issues.MsBuild&version=5.3.0\n#addin nuget:?package=Cake.Issues.PullRequests.AzureDevOps&version=5.3.0\n

    Note

    In addition to the pull request system the Cake.Issues and Cake.Issues.PullRequests core addins need to be added.

    Build.csproj
    <Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</TargetFramework>\n    <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Cake.Frosting\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.MsBuild\" Version=\"5.3.0\" />\n    <PackageReference Include=\"Cake.Frosting.Issues.PullRequests.AzureDevOps\" Version=\"5.3.0\" />\n  </ItemGroup>\n</Project>\n

    Afterwards you can define a task where you call the core addin with the desired issue provider and pull request system:

    Cake .NET ToolCake Frosting build.cake
        Task(\"ReportIssuesToPullRequest\").Does(() =>\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        ReportIssuesToPullRequest(\n            MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                MsBuildBinaryLogFileFormat),\n            AzureDevOpsPullRequests(),\n            repoRootFolder);\n    });\n
    Program.cs
    using Cake.Core.IO;\nusing Cake.Frosting;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        return new CakeHost()\n            .Run(args);\n    }\n}\n\n[TaskName(\"ReportIssuesToPullRequest\")]\npublic sealed class ReportIssuesToPullRequestTask : FrostingTask<FrostingContext>\n{\n    public override void Run(FrostingContext context)\n    {\n        var repoRootFolder = new DirectoryPath(@\"C:\\repo\");\n        context.ReportIssuesToPullRequest(\n            context.MsBuildIssuesFromFilePath(\n                @\"C:\\build\\msbuild.log\",\n                context.MsBuildBinaryLogFileFormat()),\n            context.AzureDevOpsPullRequests(),\n            repoRootFolder);\n    }\n}\n
    "},{"location":"news/","title":"News","text":""},{"location":"news/2020/08/22/cake-issues-v090-released/","title":"Cake Issues v0.9.0 Released","text":"

    Cake Issues version 0.9.0 has been released. This is a major release bringing a lot of new features across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • AdmiringWorm
    • christianbumann
    • eoehen
    • gep13
    • janniksam
    • mholo65
    • pascalberger
    • Speeedy01
    • jokay
    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#full-cross-platform-support","title":"Full cross-platform support","text":"

    While in previous versions most parts of Cake Issues was already targeting .NET Standard and with this could be executed on .NET Framework, .NET Core and Mono, Cake.Issues.Reporting.Generic could only run on .NET Framework and Mono, but not on .NET Core. With this release Cake.Issues.Reporting.Generic was ported to also run on .NET Core.

    The migration was done by gep13 on his Twitch stream and you can watch work done in Stream 90 - Working on Cake.Issues.Recipe, Stream 91 - Working on Cake.Issues.Reporting.Generic and Gazorator and Stream 92 - Working on Cake.Issues.Reporting.Generic and Gazorator - Part 2.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#enhanced-issue-information","title":"Enhanced issue information","text":"

    The description for issues has been extended by additional information for column and ranges:

    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn

    Existing issue providers have been updated to provide the additional information where available. See feature description for individual issue providers for which information a specific issue provider supports.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#file-linking","title":"File linking","text":"

    In previous versions Cake.Issues.Reporting.Generic supported entries linking to the file on the source code provider (GitHub, Azure Repos, ...). With this release file linking infrastructure has been moved to the Cake.Issues addin and can be used by any addin.

    File link settings can be defined while reading issues and are passed through the new IIssue.FileLink property to reporting formats, pull request systems and build server implementations:

    var settings =\n    new ReadIssuesSettings(@\"c:\\repo\")\n    {\n        FileLinkSettings =\n            IssueFileLinkSettingsForGitHubCommit(\n                \"https://github.com/cake-contrib/Cake.Issues.Reporting.Generic\",\n                \"76a7cacef7ad4295a6766646d45c9b56\")\n    };\n\n    var issues =\n        ReadIssues(\n            InspectCodeIssuesFromFilePath(\n                @\"C:\\build\\inspectcode.log\"),\n            settings));\n

    Cake.Issues comes with out-of-the-box support for linking to files hosted on GitHub and Azure Repos, either for a specific branch or commit. Additionally there are aliases which can be used to define any custom pattern.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#support-for-passing-additional-run-information","title":"Support for passing additional run information","text":"

    If a build script needed to parse multiple log files from the same tool, e.g. because multiple MsBuild solutions were built, this was currently possible by calling the issue provider multiple times. If the results were read into the same list and shown on the same report, individual issues could not be assigned to any of the calls, since issue provider type and name were identical. Starting with Cake.Issues 0.9.0 it is now possible to pass additional run information while reading issues, which then will be stored with each issues in the IIssue.Run property:

    var issues = new List<IIssue>();\n\n// Parse issues from build of solutions 1\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution1-msbuild.log\",\n            MsBuildXmlFileLoggerFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 1\"\n        }\n    )\n);\n\n// Parse issues from build of solutions 2\nissues.AddRange(\n    ReadIssues(\n        MsBuildIssuesFromFilePath(\n            @\"C:\\build\\solution2-msbuild.log\",\n            MsBuildXmlFileLoggerFormat),\n        new ReadIssuesSettings(@\"c:\\repo\")\n        {\n            Run = \"Solution 2\"\n        }\n    )\n);\n
    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#improved-pull-request-integration","title":"Improved pull request integration","text":"

    In previous versions the text message of an issue was used to detect issues already reported in a previous run. This didn't work well for issues which contain information in the message which likely changes between runs, like e.g. line information. In this version a specific identifier, IIssue.Identifier, is used which can be set by the issue provider.

    When working with legacy code bases which contain a lot of existing issues, using something like Cake.Issues can be hard, since it will notify about every existing issue if something is changed in a file. To work around this issue it is possible to limit issues which will be posted to pull request systems. In previous versions it was already possible to limit the total number of issues, the number of issues for every issue provider and the total number of issues across multiple run. With 0.9.0 it will additionally be possible to limit the number of issues for specific issue providers for either a single or across multiple runs. This allows advanced scenarios like posting a maximum of 10 MsBuild issues every run, but not more than 20 in total across all runs.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#get-everything-together","title":"Get everything together","text":"

    Cake.Issues.Recipe, the Cake Recipe script which you can integrate into your build script for easy integration of full feature issue management, has been updated to version 0.4.0, bringing all the new features of Cake.Issues 0.9.0.

    ","boost":0.5},{"location":"news/2020/08/22/cake-issues-v090-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 0.9.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • Serialization format has been updated to version 3. Older version are still supported for deserialization.
    • Cake.Issues.Markdownlint
    • MarkdownlintLogFileFormat alias has been renamed to MarkdownlintV1LogFileFormat (#116).
    • Cake.Issues.PullRequest
    • ReportIssuesToPullRequest alias which accepts an issue provider, or a list of issue providers, and settings requires now settings of type IReportIssuesToPullRequestFromIssueProviderSettings instead of ReportIssuesToPullRequestSettings to provider additional functionality, like support for File linking and Support for passing additional run information.
    • Cake.Issues.PullRequests.AzureDevOps
    • Cake.Issues.PullRequests.AzureDevOps requires at least Cake.AzureDevOps 0.5.0
    • Cake.Issues.Reporting
    • CreateIssueReport alias which accepts an issue provider, or a list of issue providers, and settings requires now settings of type ICreateIssueReportFromIssueProviderSettings instead of CreateIssueReportSettings to provider additional functionality, like support for File linking and Support for passing additional run information.
    • Cake.Issues.Reporting.Generic
    • Cake.Issues.Reporting.Generic requires at least Cake 0.38.0
    • HtmlDxDataGridOption.FileLinkSettings has been removed. File link settings can now be defined while reading the issues. For details see File linking. (#265).
    • HtmlDxDataGridOption.JSZipLocation has been split into HtmlDxDataGridOption.JsZipLocation and HtmlDxDataGridOption.JsZipVersion (#320).
    • Cake.Issues.Recipe
    • Cake.Issues.Recipe requires at least Cake 0.38.0

    For details see release notes of the individual addins:

    • Cake.Issues 0.9.0
    • Cake.Issues.MsBuild 0.9.0
    • Cake.Issues.InspectCode 0.9.0
    • Cake.Issues.DupFinder 0.9.0
    • Cake.Issues.GitRepository 0.9.0
    • Cake.Issues.Markdownlint 0.9.0
    • Cake.Issues.EsLint 0.9.0
    • Cake.Issues.DocFx 0.9.0
    • Cake.Issues.PullRequests 0.9.0
    • Cake.Issues.PullRequests.AzureDevOps 0.9.0
    • Cake.Issues.PullRequests.AppVeyor 0.9.0
    • Cake.Issues.Reporting 0.9.0
    • Cake.Issues.Reporting.Generic 0.9.0
    • Cake.Issues.Reporting.Sarif 0.9.0
    • Cake.Issues.Recipe 0.4.0
    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/","title":"Cake Issues v0.9.1 Released","text":"

    Version 0.9.1 of Cake Issues and Cake.Issues.PullRequests.AzureDevOps have been released. These are minor releases containing improvements and bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • janniksam
    • pascalberger
    • jokay
    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/#easier-file-linking-for-manually-created-issues","title":"Easier file linking for manually created issues","text":"

    With 0.8.0 file links was implemented in Cake.Issues.Reporting.Generic and worked for any issues passed to the report. With 0.9.0 file link infrastructure was moved to Cake.Issues. File link settings can now be set while reading issues, and are passed through the IIssue.FileLink property to reports and pull request systems.

    While this solution works for issues read by an issue provider, where file link settings can be passed to the ReadIssues alias, it become much more complicated for issues created using the NewIssue alias, where an URL can be set, which needs to be resolved manually before.

    Cake.Issues 0.9.1 adds an WithFileLinkSettings method to IIssueBuilder where a file link setting object can be passed which does resolve the URL.

    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/#line-range-and-column-support-in-azure-devops-pull-request-integration","title":"Line range and column support in Azure DevOps pull request integration","text":"

    Cake Issues 0.9.0 added support for line ranges and column information. With 0.9.0 the Azure DevOps pull request integration didn't use this information while posting comments to pull requests. Cake.Issues.PullRequests.AzureDevOps 0.9.1 fixes this and will post comments for line and column ranges if they are available on an issue.

    ","boost":0.5},{"location":"news/2020/09/19/cake-issues-v091-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues and Cake.Issues.PullRequests.AzureDevOps 0.9.1 are compatible with version 0.9.0 without any breaking changes. To update to the new version bump the version of the specific addins.

    ","boost":0.5},{"location":"news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/","title":"Cake Issues Recipe v0.4.2 released, bringing support for GitHub Actions","text":"

    Version 0.4.2 of Cake Issues Recipe has been released bringing support for GitHub Actions.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • admiringworm
    • pascalberger
    ","boost":0.5},{"location":"news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/#support-for-github-actions","title":"Support for GitHub Actions","text":"

    This version of Cake.Issues.Recipe brings support for running under GitHub Actions. Currently supported feature is writing of issues to build server which will show up in the build log grouped by issue provider / run:

    Additionally the issues show up as annotations:

    Having issues available as annotations also means that they will be shown in pull requests on the related file / position:

    It's planned to support remaining features like providing full issue report as artifact in a future release.

    Info

    Support for GitHub Actions integration is currently only available in Cake.Issues.Recipe, but not as a standalone addin. It's planned to additionally provide a standalone addin which can be used outside of Cake.Issues.Recipe in the future.

    ","boost":0.5},{"location":"news/2020/09/24/cake-issues-recipe-v042-released-bringing-support-for-github-actions/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Recipe 0.4.2 is compatible with version 0.4.x without any breaking changes. To update to the new version bump the version in your build script.

    ","boost":0.5},{"location":"news/2020/09/27/new-github-actions-addin/","title":"New GitHub Actions addin","text":"

    A new Cake.Issues.PullRequest.GitHubActions addin has been released which brings integration with GitHub Actions and GitHub pull requests.

    Cake.Issues.PullRequest.GitHubActions addin creates annotations from issues when running on GitHub Actions:

    These annotations will also be shown in pull requests on the related file / position, bringing first class integration for GitHub pull requests to Cake.Issues:

    This integration was first released in Cake.Issues.Recipe 0.4.2 and has now been moved to its own addin, which can also be used outside of Cake.Issues.Recipe.

    ","boost":0.5},{"location":"news/2020/10/09/cake-issues-pullrequests-v091-released/","title":"Cake Issues PullRequests v0.9.1 Released","text":"

    Version 0.9.1 of Cake.Issues.PullRequests has been released. This is a minor releases containing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • janniksam
    • pascalberger
    • phlorian
    ","boost":0.5},{"location":"news/2020/10/09/cake-issues-pullrequests-v091-released/#dont-post-issues-if-a-provider-limit-is-set-to-0","title":"Don't post issues if a provider limit is set to 0","text":"

    This version fixes a bug where if MaxIssuesToPost or MaxIssuesToPostAcrossRuns was set to 0 all issues were posted to the pull request instead of none.

    ","boost":0.5},{"location":"news/2020/10/09/cake-issues-pullrequests-v091-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.PullRequests 0.9.1 is compatible with version 0.9.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2020/10/20/cake-issues-msbuild-v091-released/","title":"Cake Issues MsBuild v0.9.1 Released","text":"

    Version 0.9.1 of MsBuild support for Cake.Issues has been released. This is a minor release containing improvements.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • cho-trackman
    • eoehen
    • pascalberger
    • jokay
    ","boost":0.5},{"location":"news/2020/10/20/cake-issues-msbuild-v091-released/#support-for-reading-of-errors","title":"Support for reading of errors","text":"

    Until now MsBuild support did read warnings from MsBuild log files. Starting with version 0.9.1 it will also return errors. Reading of errors has been implemented for MsBuildBinaryLogFileFormat and MsBuildXmlFileLoggerFormat. For errors IIssue.Priority will be set to IssuePriority.Error.

    Info

    To keep previous behavior result after reading the issues can be filtered for IIssue.Priority == IIssuePriority.Warning.

    ","boost":0.5},{"location":"news/2020/10/20/cake-issues-msbuild-v091-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.MsBuild 0.9.1 is compatible with version 0.9.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/","title":"Cake Issues Recipe v0.4.4 released, bringing support for ESLint","text":"

    Version 0.4.4 of Cake Issues Recipe has been released bringing support for ESLint.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions. For details see full release notes.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/#support-for-eslint","title":"Support for ESLint","text":"

    This version of Cake.Issues.Recipe brings support for issues reported by ESLint. Currently supported are files generated using the ESLint json formatter

    ","boost":0.5},{"location":"news/2020/12/01/cake-issues-recipe-v044-released-bringing-support-for-eslint/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Recipe 0.4.4 is compatible with version 0.4.x without any breaking changes. To update to the new version bump the version in your build script.

    ","boost":0.5},{"location":"news/2021/07/27/new-addin-for-terraform-support/","title":"New addin for Terraform support","text":"

    A new Cake.Issues.Terraform addin has been released which adds support for reading issues from Terraform validate command.

    Cake.Issues.Terraform addin brings support for Terraform to the Cake.Issues ecosystem. It allows to read the output of the Terraform validate command. Together with other Cake.Issues addins it is possible to create powerful infrastructure as code pipelines which ensure quality standards by validating Terraform files before merging or deploying the changes. When using a pull requests workflow it is also possible to have the issues reported by Terraform validate automatically reported as comments to pull request.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/","title":"Cake Issues v1.0.0 Released","text":"

    More than 4 years after the first commit for Cake.Prca, the predecessor of Cake Issues, we're happy to announce that Cake Issues version 1.0.0 has been released. This is a major release bringing a lot of new features across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • janniksam
    • pascalberger
    • phlorian
    • jokay
    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#support-for-cake-10","title":"Support for Cake 1.0","text":"

    All addins have been updated to support Cake 1.x.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#support-for-cake-frosting","title":"Support for Cake Frosting","text":"

    All addins can be used with Cake Frosting.

    Cake Issues addins have always been self-contained, shipping with all required dependencies, to provide the best user experience. While this approach makes sense for Cake script runners, it makes things more complex than required when running under Cake Frosting. This is especially true for the Cake.Issues.Reporting.Generic addin, which uses Razor engine to generate the reports.

    It was therefore decided to release separate versions of the Cake.Issues.Reporting.Generic addin for the different script runners:

    • Cake.Issues.Reporting.Generic: The addin packaged in a self-contained NuGet package for use with Cake script runners
    • Cake.Frosting.Issues.Reporting.Generic: The addin packaged in a NuGet package containing dependencies for use with Cake Frosting

    Cake.Frosting.Issues.Reporting.Generic has the additional benefit for the user that it gives the user full control of what exact version of dependencies should be used. In the future more Cake Issues addins might be released in Frosting specific packages.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#support-for-arbitrary-values-in-an-issue","title":"Support for arbitrary values in an issue","text":"

    Specific issue providers might have additional information for which no equivalent does exist on IIssue. These kind of information can now be stored in the IIssue.AdditionalInformation property.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#new-provider-type-property","title":"New provider type property","text":"

    While there are aliases to get provider type name (e.g. MsBuildIssuesProviderTypeName), this information was in previous versions not available through the IIssueProvider interface. There is a new IIssueProvider.ProviderType property which can be used to retrieve the provider type.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#pdf-export","title":"PDF export","text":"

    A new PDF export has been added to the HtmlDxDataGrid template of the Cake.Issues.Reporting.Generic addin.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#simplified-release-process","title":"Simplified release process","text":"

    Starting with Cake Issues 1.0.0 the three core addins Cake.Issues, Cake.Issues.PullRequests and Cake.Issues.Reporting will be always released together. For that source code for the addin has been merged in the Cake.Issues repository. Please open any issues related to any of the core addins in the Cake.Issues issue tracker.

    ","boost":0.5},{"location":"news/2021/07/28/cake-issues-v100-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 1.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • Serialization format has been updated to version 4. Older version are still supported for deserialization.
    • IIssueProvider was extended with an additional ProviderType property. For issue providers inheriting from BaseIssueProvider no action is required to keep the same behavior as with previous versions, with the type name used as provider type.

    Info

    Cake.Recipe has not been updated to 1.0 yet.

    For details see release notes of the individual addins:

    • Cake.Issues 1.0.0
    • Cake.Issues.MsBuild 1.0.0
    • Cake.Issues.InspectCode 1.0.0
    • Cake.Issues.DupFinder 1.0.0
    • Cake.Issues.GitRepository 1.0.0
    • Cake.Issues.Markdownlint 1.0.0
    • Cake.Issues.EsLint 1.0.0
    • Cake.Issues.DocFx 1.0.0
    • Cake.Issues.Terraform 1.0.0
    • Cake.Issues.PullRequests 1.0.0
    • Cake.Issues.PullRequests.AzureDevOps 1.0.0
    • Cake.Issues.PullRequests.AppVeyor 1.0.0
    • Cake.Issues.Reporting 1.0.0
    • Cake.Issues.Reporting.Generic 1.0.0
    • Cake.Issues.Reporting.Sarif 1.0.0
    ","boost":0.5},{"location":"news/2021/07/30/cake-issues-eslint-v101-released/","title":"Cake Issues ESLint v1.0.1 Released","text":"

    Version 1.0.1 of ESLint support for Cake.Issues has been released. This is a minor release containing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2021/07/30/cake-issues-eslint-v101-released/#bug-fix-for-issues-with-line-column-or-rule","title":"Bug fix for issues with line, column or rule","text":"

    When an issue reported by ESLint didn't contain line or column information, or rule was set to null an exception ocurred while parsing the file. This release fixes this and can now also correctly parse issues without position or rule information.

    ","boost":0.5},{"location":"news/2021/07/30/cake-issues-eslint-v101-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.EsLint 1.0.1 is compatible with version 1.0.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/","title":"Cake Issues Recipe v1.0.0 Released, bringing support for Cake Frosting","text":"

    Hard on the heels of the announcement for release 1.0 of Cake.Issues addins, we're happy to announce release 1.0 of the recipe script for Cake.Issues.

    This is a major release bringing support for Cake Frosting and other new features.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#support-for-cake-10","title":"Support for Cake 1.0","text":"

    Cake Issues recipe has been updated to use latest 1.x versions of the Cake.Issues addins which support Cake 1.x.

    See announcement for release 1.0 of Cake.Issues addins for features added in the individual addins.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#support-for-cake-frosting","title":"Support for Cake Frosting","text":"

    Additionally to the existing Cake.Issues.Recipe package, which works fine for Cake script runners, there's a new Cake.Frosting.Issues.Recipe package suitable for builds using Cake Frosting.

    See Using Cake.Frosting.Issues.Recipe for an example.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#support-for-environments-not-compatible-with-cakegit-addin","title":"Support for environments not compatible with Cake.Git addin","text":"

    In previous versions Cake.Issues recipes had used Cake.Git addin to determine state of the Git repository. While this works in most cases, there are some environments where Cake.Git addin currently does not work.

    Starting with this version it is now possible to define if Cake.Git addin or Git CLI should be used.

    See Git repository information configuration for details.

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#define-settings-for-issue-providers","title":"Define settings for issue providers","text":"

    Previous versions of Cake.Issues recipes used default settings for reading issues from the passed log files. This made it impossible to parse log files which for example are created by tools running in containers, as they have a root path different to the repository root.

    This version introduced methods to pass log files to the recipe scripts, which additionally to the log file path accept a settings object.

    The new implementation also supports other use-cases like reading multiple files with the same issues provider, but different settings (e.g. run information).

    ","boost":0.5},{"location":"news/2021/08/04/cake-issues-recipe-v100-released-bringing-support-for-cake-frosting/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues Recipes 1.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Properties for passing input files to the recipe scripts have been replaced by methods. As an example, in previous versions MsBuild XML log files could be passed by setting the IssuesParameters.InputFiles.MsBuildXmlFileLoggerLogFilePath property:
    IssuesParameters.InputFiles.MsBuildXmlFileLoggerLogFilePath = @\"c:\\build\\msbuild.log\";\n

    With 1.0 the IssuesParameters.InputFiles.AddMsBuildXmlFileLoggerLogFile() method needs to be called instead:

    IssuesParameters.InputFiles.AddMsBuildXmlFileLoggerLogFile(@\"c:\\build\\msbuild.log\");\n

    For details see full release notes

    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/","title":"Cake Issues Recipes v1.1.0 released","text":"

    Version 1.1.0 of Cake Issues recipes have been released adding support to customize report generation.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/#report-customization","title":"Report customization","text":"

    This version of Cake Issues recipes adds a new FullIssuesReportSettings configuration parameter which allows to customize the generated issue report. See Report creation parameters for details.

    The following example enables exporting of the report when using Cake.Issues.Recipe:

    IssuesParameters.Reporting.FullIssuesReportSettings\n    .WithOption(HtmlDxDataGridOption.EnableExporting, true)\n

    The following example enables exporting of the report when using Cake.Frosting.Issues.Recipe:

    context.Parameters.Reporting.FullIssuesReportSettings\n    .WithOption(HtmlDxDataGridOption.EnableExporting, true)\n
    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/#updated-addins","title":"Updated addins","text":"

    Cake.Git has been updated to version 1.1.0 which comes with an updated version of LibGit2Sharp which adds support for Ubuntu 20.

    See Cake.Git 1.1.0 release notes for details.

    ","boost":0.5},{"location":"news/2021/08/11/cake-issues-recipes-v110-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake Issues recipes 1.1.0 are compatible with version 1.x without any breaking changes. To update to the new version bump the version in your build.

    ","boost":0.5},{"location":"news/2021/08/19/cake-issues-recipes-v120-released/","title":"Cake Issues Recipes v1.2.0 released","text":"

    Version 1.2.0 of Cake Issues recipes have been released adding support to customize issue reporting to pull requests.

    This post shows the highlights included in this release. For details see full release notes. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/19/cake-issues-recipes-v120-released/#customization-of-pull-request-integration","title":"Customization of pull request integration","text":"

    This version of Cake Issues recipes adds several new configuration parameter which allows to customize how issues are reported to pull requests. See Pull request integration parameters for details.

    The following example limits the number of issues posted to pull requests to 20 when using Cake.Issues.Recipe:

    IssuesParameters.PullRequestSystem.MaxIssuesToPost = 20;\n

    The following example limits the number of issues posted to pull requests to 20 when using Cake.Frosting.Issues.Recipe:

    context.Parameters.PullRequestSystem.MaxIssuesToPost = 20;\n
    ","boost":0.5},{"location":"news/2021/08/19/cake-issues-recipes-v120-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake Issues recipes 1.2.0 are compatible with version 1.x without any breaking changes. To update to the new version bump the version in your build.

    ","boost":0.5},{"location":"news/2021/08/29/new-addin-for-printing-issues-to-console/","title":"New addin for printing issues to console","text":"

    A new Cake.Issues.Reporting.Console addin has been released which allows to output issues to the console.

    Cake.Issues.Reporting.Console addin can be used to print issues to the console and is built on top of the excellent Errata library by Patrik Svensson.

    Its main focus is to annotate source code with issues:

    It currently only supports issues containing line and column information. Output can be grouped by rule, like in the image above, or individual entries for every issue.

    Beside printing issues it can also show summary tables.

    There's one summary which shows the number of issues for everyprovider and run:

    Another summary shows the number of issues by priority for every provider and run:

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/","title":"Cake Issues Markdownlint v1.1.0 Released","text":"

    Version 1.1.0 of Markdownlint support for Cake.Issues has been released. This is a minor release adding features and improvements.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#support-for-markdownlint-cli-json-format","title":"Support for markdownlint-cli JSON format","text":"

    Since version 0.28.0 markdownlint-cli supports a --json option to output result in JSON format. This version adds support for this format through the MarkdownlintCliJsonLogFileFormat alias.

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#provide-column-information","title":"Provide column information","text":"

    This release of Cake.Issues.Markdownlint enhances the MarkdownlintCliLogFileFormat to provide column information if reported by markdownlint.

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#recipe-packages","title":"Recipe packages","text":"

    Cake Issues recipes have been released in version 1.3.0 shipping with Cake.Issues.Markdownlint 1.1.0 and adding support for markdownlint-cli JSON files.

    ","boost":0.5},{"location":"news/2021/08/31/cake-issues-markdownlint-v110-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Markdownlint 1.1.0 is compatible with version 1.0.0 without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/","title":"Cake Issues Reporting Console v0.3.0 released, adding support for all Cake runners","text":"

    Version 0.3.0 of Cake.Issues.Reporting.Console has been released. This is a minor release adding features and improvements.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    • patriksvensson
    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#support-for-all-cake-runners","title":"Support for all Cake runners","text":"

    Starting with this release Cake.Issues.Reporting.Console will target .NET Standard 2.0 instead of .NET 5.0 and therefore will support all Cake runners.

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#improved-reporting","title":"Improved reporting","text":"

    Provider report is now rendered in different colors for the individual bars, making it easier to read:

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#errata-060","title":"Errata 0.6.0","text":"

    Underlying Errata library has been updated to 0.6.0, containing additional bug fixes and rendering improvements.

    ","boost":0.5},{"location":"news/2021/09/05/cake-issues-reporting-console-v030-released-adding-support-for-all-cake-runners/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues.Reporting.Console 0.3.0 is compatible with previous versions without any breaking changes. To update to the new version bump the version of the addin.

    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/","title":"Cake Issues v2.0.0 Released","text":"

    After several months with beta releases Cake Issues version 2.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • KirillOsenkov
    • pascalberger
    • twenzel
    • yansklyarenko
    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/#support-for-cake-20","title":"Support for Cake 2.0","text":"

    All addins have been updated to support Cake 2.x.

    Target framework have been updated to .NET Core 3.1, .NET 5 and .NET 6 to be in line with Cake. See Sunsetting of .NET Framework and .NET Core runners in Cake 2.0 for details.

    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/#support-for-msbuild-binary-logs-version-9","title":"Support for MsBuild binary logs version 9","text":"

    Support for binary logs in version 9 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2022/12/10/cake-issues-v200-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 2.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • Serialization format has been updated to version 5. Older version are still supported for deserialization.
    • ProviderIssueIssueLimits has been renamed to ProviderIssueLimits
    • IIssue.Rule has been renamed to IIssue.RuleId
    • IIssue was extended with an additional RuleName property.
    • Cake.Issues.MsBuild
    • MsBuild 15 or newer required for binary logs

    For details see release notes of the individual addins:

    • Cake.Issues 2.0.0
    • Cake.Issues.DocFx 2.0.0
    • Cake.Issues.DupFinder 2.0.0
    • Cake.Issues.EsLint 2.0.0
    • Cake.Issues.GitRepository 2.0.0
    • Cake.Issues.InspectCode 2.0.0
    • Cake.Issues.Markdownlint 2.0.0
    • Cake.Issues.MsBuild 2.0.0
    • Cake.Issues.Terraform 2.0.0
    • Cake.Issues.Reporting.Console 2.0.0
    • Cake.Issues.Reporting.Generic 2.0.0
    • Cake.Issues.Reporting.Sarif 2.0.0
    • Cake.Issues.PullRequests.AppVeyor 2.0.0
    • Cake.Issues.PullRequests.AzureDevOps 2.0.0
    • Cake.Issues.PullRequests.GitHubActions 2.0.0
    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/","title":"Cake Issues v3.0.0 Released","text":"

    Cake Issues version 3.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • DiDoHH
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#support-for-cake-30","title":"Support for Cake 3.0","text":"

    All addins have been updated to support Cake 3.x.

    Target framework have been updated to .NET 6 and .NET 7 to be in line with Cake.

    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#support-for-msbuild-binary-logs-version-16","title":"Support for MsBuild binary logs version 16","text":"

    Support for binary logs in version 16 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#out-of-the-box-support-for-more-rule-links","title":"Out of the box support for more rule links","text":"

    Cake.Issues.MsBuild now will automatically provide links for Roslynator and SonarLint rules. Links for CA rules have updated to link to learn.microsoft.com.

    ","boost":0.5},{"location":"news/2023/07/22/cake-issues-v300-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 3.0.0 is a breaking release, which means that it probably requires changes to your build script. This section documents the most common changes which might be required:

    • Cake.Issues
    • StringPathExtensions.IsValideRepositoryFilePath has been renamed to StringPathExtensions.IsValidRepositoryFilePath
    • BaseRuleDescription.Rule has been made immutable after initialization
    • Cake.Issues.Recipe
    • Since Dupfinder has been sunsetted end of 2021, out of the box support for it has been removed from Cake Issues Recipe and DupFinderLogFilePaths is no longer available. To keep using DupFinder you need to manually add Cake.Issues.DupFinder and add issues using the AddIssues method.

    For details see release notes of the individual addins:

    • Cake.Issues.Recipe 3.0.0
    • Cake.Issues 3.0.0
    • Cake.Issues.DocFx 3.0.0
    • Cake.Issues.DupFinder 3.0.0
    • Cake.Issues.EsLint 3.0.0
    • Cake.Issues.GitRepository 3.0.0
    • Cake.Issues.InspectCode 3.0.0
    • Cake.Issues.Markdownlint 3.0.0
    • Cake.Issues.MsBuild 3.0.0
    • Cake.Issues.Terraform 3.0.0
    • Cake.Issues.Reporting.Console 3.0.0
    • Cake.Issues.Reporting.Generic 3.0.0
    • Cake.Issues.Reporting.Sarif 3.0.0
    • Cake.Issues.PullRequests.AppVeyor 3.0.0
    • Cake.Issues.PullRequests.AzureDevOps 3.0.0
    • Cake.Issues.PullRequests.GitHubActions 3.0.0
    ","boost":0.5},{"location":"news/2023/08/16/cake-issues-recipes-v310-released/","title":"Cake Issues Recipes v3.1.0 released","text":"

    Version 3.1.0 of Cake Issues recipes have been released adding support for creating of reports in SARIF format.

    This post shows the highlights included in this release. For details see full release notes. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2023/08/16/cake-issues-recipes-v310-released/#reports-in-sarif-format","title":"Reports in SARIF format","text":"

    This version of Cake Issues recipes adds a new configuration parameter which allows to create reports in SARIF format allowing further processing in a lot of different tools also supporting the SARIF standard. See Report parameters for details.

    If running on Azure Pipelines the generated SARIF file is uploaded so that it will be shown in the SARIF SAST Scans Tab extension.

    ","boost":0.5},{"location":"news/2023/08/16/cake-issues-recipes-v310-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake Issues recipes 3.1.0 are compatible with version 3.x without any breaking changes. To update to the new version bump the version in your build.

    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/","title":"Cake Issues v4.0.0 Released","text":"

    Cake Issues version 4.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/#support-for-cake-40","title":"Support for Cake 4.0","text":"

    All addins have been updated to support Cake 4.x.

    Target framework have been updated to .NET 6, .NET 7 and .NET 8 to be in line with Cake.

    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/#switch-to-systemtextjson-for-serialization","title":"Switch to System.Text.Json for serialization","text":"

    For serialization / deserialization of issues LitJson was used internally. With Cake.Issues 4.0 internal code has been changed to use System.Text.Json classes.

    The change should not have any impact for users.

    ","boost":0.5},{"location":"news/2023/12/23/cake-issues-v400-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    While Cake.Issues 4.0.0 is a breaking release, there are no breaking changes beside the update to Cake 4.x and the changes to target framework version.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/01/14/alignment-of-addin-lifecycles/","title":"Alignment of addin lifecycles","text":"

    Cake Issues has a modular architecture consisting of multiple addins. Historically every addin had its own independent release lifecycle. Starting with the next release work will begin to have all addins share the same release lifecycle.

    When Cake Issues started all three core addins (Cake.Issues, Cake.Issues.Reporting and Cake.Issues.PullRequsts) and every issue provider, report format and pull request system addin were released on their own schedule, allowing fast iterations of individual components. With the release of Cake Issues 1.0 the release lifecycle of the three core addins have been aligned, resulting in a simplified release process.

    Starting with the next release we'll begin to move also the remaining issue provider, report format and pull request system addins into the main Cake Issues repository and have them released together with the core addins.

    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/","title":"Cake Issues v4.1.0 Released","text":"

    Cake Issues version 4.1.0 has been released with improvements for Cake Frosting and support for latest MsBuild binary log format.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • pascalberger
    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#improvement-for-cake-frosting","title":"Improvement for Cake Frosting","text":"

    Cake.Frosting.Issues.Reporting and Cake.Frosting.Issues.PullRequests have been released as optimized version of the Cake.Issues.Reporting and Cake.Issues.PullRequests for Cake Frosting.

    These addins come with a dependency to the core Cake.Issues addin, allowing it to be consumed as transitive dependency.

    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#support-for-msbuild-binary-logs-version-18","title":"Support for MsBuild binary logs version 18","text":"

    Support for binary logs in version 18 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#alignment-of-release-lifecycle","title":"Alignment of release lifecycle","text":"

    As announced in Alignment of addin lifecycles work as started to move addins into the main Cake Issues repository.

    Starting with this release the following addins will be released together with the core addins:

    • Cake.Issues.DocFx
    • Cake.Issues.EsLint
    • Cake.Issues.MsBuild
    • Cake.Issues.InspectCode
    • Cake.Issues.Markdownlint
    ","boost":0.5},{"location":"news/2024/02/21/cake-issues-v410-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.1.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/","title":"Cake Issues v4.2.0 Released","text":"

    Cake Issues version 4.2.0 has been released introducing a new issue provider for SARIF compatible files.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#new-issue-provider-for-sarif-files","title":"New issue provider for SARIF files","text":"

    A new Cake.Issues.Sarif addin has been released which adds support for reading issues in SARIF format.

    See New addin for reading SARIF files for details.

    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#improvement-for-cake-frosting","title":"Improvement for Cake Frosting","text":"

    Optimized versions for Cake Frosting have been released for the following addins:

    • Cake.Frosting.Issues.DocFx
    • Cake.Frosting.Issues.EsLint
    • Cake.Frosting.Issues.GitRepository
    • Cake.Frosting.Issues.InspectCode
    • Cake.Frosting.Issues.Markdownlint
    • Cake.Frosting.Issues.Terraform
    • Cake.Frosting.Issues.PullRequests.AppVeyor
    • Cake.Frosting.Issues.PullRequests.AzureDevOps
    • Cake.Frosting.Issues.PullRequests.GitHubActions

    These addins come with a dependency to the core addins, allowing the core addins to be consumed as transitive dependencies.

    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#alignment-of-release-lifecycle","title":"Alignment of release lifecycle","text":"

    As announced in Alignment of addin lifecycles work as started to move addins into the main Cake Issues repository.

    Starting with this release the following addins will be released together with the core addins:

    • Cake.Issues.GitRepository
    • Cake.Issues.Terraform
    • Cake.Issues.PullRequests.AppVeyor
    • Cake.Issues.PullRequests.AzureDevOps
    • Cake.Issues.PullRequsts.GitHubActions
    • Cake.Issues.Reporting.Console
    • Cake.Issues.Reporting.Generic
    • Cake.Issues.Reporting.Sarif
    ","boost":0.5},{"location":"news/2024/04/14/cake-issues-v420-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.2.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/14/new-addin-for-reading-sarif-files/","title":"New addin for reading SARIF files","text":"

    In version 4.2.0 a new Cake.Issues.Sarif addin has been released which adds support for reading issues in SARIF format.

    SARIF is an industry standard format for the output of static analysis tools. With the introduction of SARIF support through the Cake.Issues.Sarif addin any tool which can output results in SARIF format can now be used together with Cake Issues.

    See Supported Tools for an updated list of supported tools.

    The addins is available in a version for Cake .NET Tool (Cake.Issues.Sarif) and Cake Frosting (Cake.Frosting.Issues.Sarif).

    ","boost":0.5},{"location":"news/2024/04/16/cake-issues-v421-released/","title":"Cake Issues v4.2.1 Released","text":"

    Cake Issues version 4.2.1 has been released with compatibility fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/16/cake-issues-v421-released/#compatibility-improvements","title":"Compatibility improvements","text":"

    As a side-effect of moving all addins to the central Cake Issues repository, AssemblyVersion of every has been set to the release version.

    Addins are backwards compatible though to latest major version, which was no longer possible with this change.

    This release fixes this by setting the AssemblyVersion to the major version (currently 4.0.0).

    ","boost":0.5},{"location":"news/2024/04/16/cake-issues-v421-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.2.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/20/cake-issues-v430-released/","title":"Cake Issues v4.3.0 Released","text":"

    Cake Issues version 4.3.0 has been released with support for MsBuild binary log format version 20.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/20/cake-issues-v430-released/#support-for-msbuild-binary-logs-version-20","title":"Support for MsBuild binary logs version 20","text":"

    Support for binary logs in version 20 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/04/20/cake-issues-v430-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.3.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/04/25/cake-issues-v431-released/","title":"Cake Issues v4.3.1 Released","text":"

    Cake Issues version 4.3.1 has been released bringing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/04/25/cake-issues-v431-released/#bugfix-for-issues-across-multiple-lines","title":"Bugfix for issues across multiple lines","text":"

    This release fixes an exception if an issue provider reports an issue across multiple lines and the end column is before the start column.

    ","boost":0.5},{"location":"news/2024/04/25/cake-issues-v431-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.3.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/","title":"Cake Issues v4.4.0 Released","text":"

    Cake Issues version 4.4.0 has been released with improvements for Cake Frosting.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/#cake-frosting-improvements","title":"Cake Frosting improvements","text":"

    Support for implicit usings has been added to the Cake Frosting addins.

    If <ImplicitUsings>enable</ImplicitUsings> is set in a Cake Frosting build, namespaces for Cake Issues addins are implicitly added, resulting in a similar experience as when using Cake .NET Tool, where aliases can be used directly without the requirements to first add using statements.

    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/#filtering-improvements-in-html-devextreme-data-grid-template","title":"Filtering improvements in HTML DevExtreme Data Grid template","text":"

    The HTML DevExtreme Data Grid template now supports search boxes in filter dropdowns.

    See Header Filter Customization in DataGrid for details.

    ","boost":0.5},{"location":"news/2024/05/18/cake-issues-v440-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.4.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/","title":"Cake Issues v4.5.0 Released","text":"

    Cake Issues version 4.5.0 has been released adding support for build breaking.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/#support-for-breaking-builds","title":"Support for breaking builds","text":"

    New BreakBuildOnIssues aliases have been introduced to fail builds when issues are found.

    See build breaking for an example.

    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/#possibility-to-define-license-for-html-devextreme-data-grid","title":"Possibility to define license for HTML DevExtreme Data Grid","text":"

    Starting with version 23.2 DevExtreme no longer comes with a free community license. HTML DevExtreme Data Grid template will stay on version 23.1 for this reason.

    If you have a DevExtreme license you can pass it to the new DevExtremeLicenseKey option and update to a newer version using the DevExtremeVersion option.

    ","boost":0.5},{"location":"news/2024/05/23/cake-issues-v450-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.5.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/05/24/cake-issues-v451-released/","title":"Cake Issues v4.5.1 Released","text":"

    Cake Issues version 4.5.1 has been released containing bug fixes.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/05/24/cake-issues-v451-released/#fixed-log-output","title":"Fixed log output","text":"

    This release fixes verbose output of Cake.Issues.PullRequests for provider issue limits.

    ","boost":0.5},{"location":"news/2024/05/24/cake-issues-v451-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.5.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/06/24/cake-issues-v460-released/","title":"Cake Issues v4.6.0 Released","text":"

    Cake Issues version 4.6.0 has been released with improvements for SARIF reports.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2024/06/24/cake-issues-v460-released/#improvements-for-sarif-reports","title":"Improvements for SARIF Reports","text":"

    A new option SarifIssueReportFormatSettings.ExistingIssues has been introduced which allows to pass in a list of known issues not related to current code changes, resulting in the baselineState property being set in the resulting SARIF report.

    This property is for example be used in the SARIF viewer extension for Azure Pipelines as filter option.

    The following new settings options have been added:

    SarifIssueReportFormatSettings property Output property Description Guid automationDetails.guid Unique, stable identifier for the run BaselineGuid run.baselineGuid String equal to Guid of a previous run CorrelationGuid automationDetails.correlationGuid Guid shared by all runs of the same type","boost":0.5},{"location":"news/2024/06/24/cake-issues-v460-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.6.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/","title":"Cake Issues v4.7.0 Released","text":"

    Cake Issues version 4.7.0 has been released with detailed line information for SARIF issue provider and support for MsBuild binary log format version 21.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/#support-for-msbuild-binary-logs-version-21","title":"Support for MsBuild binary logs version 21","text":"

    Support for binary logs in version 21 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/#enhanced-line-and-column-information-from-sarif-reports","title":"Enhanced line and column information from SARIF reports","text":"

    Cake.Issues.Sarif has been enhanced to also provide the following IIssue properties if available:

    • IIssue.EndLine
    • IIssue.Column
    • IIssue.EndColumn
    ","boost":0.5},{"location":"news/2024/07/16/cake-issues-v470-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.7.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/17/cake-issues-v471-released/","title":"Cake Issues v4.7.1 Released","text":"

    Cake Issues version 4.7.1 has been released with bugfixes for SARIF reports

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/17/cake-issues-v471-released/#bugfixes-for-sarif-reports","title":"Bugfixes for SARIF reports","text":"

    This release fixes two bugs in Cake.Issues.Reporting.Sarif:

    • If two or more different rules containing a rule URL are reported by the same issue provider, the first occurrence of the second rule will have 0 as ruleIndex instead of 1
    • originalUriBaseIds should end with a slash as defined in SARIF Specification 2.1.0 \u00a73.14.14.
    ","boost":0.5},{"location":"news/2024/07/17/cake-issues-v471-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.7.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/18/cake-issues-v472-released/","title":"Cake Issues v4.7.2 Released","text":"

    Cake Issues version 4.7.2 has been released containing bug fixes for generic reporting addin.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/18/cake-issues-v472-released/#fix-for-generic-reporting-addin","title":"Fix for generic reporting addin","text":"

    This release fixes an bug in Cake.Issues.Reporting.Generic where it was not possible to overwrite version of JsPdf version used in HTML DevExtreme Data Grid template.

    ","boost":0.5},{"location":"news/2024/07/18/cake-issues-v472-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.7.2 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/19/cake-issues-v480-released/","title":"Cake Issues v4.8.0 Released","text":"

    Cake Issues version 4.8.0 has been released with improvements for SARIF issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/19/cake-issues-v480-released/#improvements-for-sarif-issue-provider","title":"Improvements for SARIF issue provider","text":"

    In previous releases the SARIF issue provider used the tool name defined in the SARIF file for a specific run as issue provider. This has the advantage that if multiple SARIF files from different sources are read, every issue has a different issue provider name, which reflects the original tool.

    But it can also have side-effect, for example that different states are reported to pull request depending if run is successful or not (see cake-contrib/Cake.Issues.Recipe#477), because the actual issue provider name is only known once there are issues reported.

    This release introduces a new option SarifIssuesSettings.UseToolNameAsIssueProviderName to define whether the tool name reported in the SARIF log or a fixed value should be used as issue provider name.

    ","boost":0.5},{"location":"news/2024/07/19/cake-issues-v480-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.8.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/","title":"Cake Issues v4.9.0 Released","text":"

    Cake Issues version 4.9.0 has been released with bugfixes for SARIF report format and Terraform issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/#bugfixes-for-sarif-report-format","title":"Bugfixes for SARIF report format","text":"

    This release fixes an issue where entries in a SARIF report were marked as updated if branch or commit in file link has changed.

    To achieve this, a new constructor for the generic IIssueComparer has been introduced, which allows to define which IIssue properties should be ignored for the comparison.

    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/#bugfixes-for-terraform-issue-provider","title":"Bugfixes for Terraform issue provider","text":"

    A bug has been fixed where root directory was not correctly determined when running on Linux or macOS.

    ","boost":0.5},{"location":"news/2024/07/25/cake-issues-v490-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.9.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/07/30/cake-issues-v4100-released/","title":"Cake Issues v4.10.0 Released","text":"

    Cake Issues version 4.10.0 has been released with support for MsBuild binary log format version 22.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/07/30/cake-issues-v4100-released/#support-for-msbuild-binary-logs-version-22","title":"Support for MsBuild binary logs version 22","text":"

    Support for binary logs in version 20 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/07/30/cake-issues-v4100-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.10.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/","title":"Cake Issues v4.10.1 Released","text":"

    Cake Issues version v4.10.1 has been released with bugfixes for Cake Frosting and file linking

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • gep13
    • hotchkj
    • pascalberger
    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/#bugfixes-for-cake-frosting","title":"Bugfixes for Cake Frosting","text":"

    This release fixes dependencies of the following Cake Frosting optimized NuGet packages:

    • Cake.Frosting.Issues.PullRequests.AppVeyor
    • Cake.Frosting.Issues.PullRequests.AzureDevOps
    • Cake.Frosting.Issues.PullRequests.GitHubActions
    • Cake.Frosting.Issues.Reporting.Console
    • Cake.Frosting.Issues.Reporting.Generic
    • Cake.Frosting.Issues.Reporting.Sarif
    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/#bugfixes-for-file-linking","title":"Bugfixes for file linking","text":"

    This release fixes an issue that file links are created for issues which are not related to a file.

    ","boost":0.5},{"location":"news/2024/08/20/cake-issues-v4101-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues v4.10.1 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/10/06/cake-issues-v4110-released/","title":"Cake Issues v4.11.0 Released","text":"

    Cake Issues version 4.11.0 has been released with support for MsBuild binary log format version 23.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/10/06/cake-issues-v4110-released/#support-for-msbuild-binary-logs-version-23","title":"Support for MsBuild binary logs version 23","text":"

    Support for binary logs in version 23 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/10/06/cake-issues-v4110-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.11.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/11/05/cake-issues-v4120-released/","title":"Cake Issues v4.12.0 Released","text":"

    Cake Issues version 4.12.0 has been released with support for MsBuild binary log format version 24.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/11/05/cake-issues-v4120-released/#support-for-msbuild-binary-logs-version-24","title":"Support for MsBuild binary logs version 24","text":"

    Support for binary logs in version 24 has been added to Cake.Issues.MsBuild.

    ","boost":0.5},{"location":"news/2024/11/05/cake-issues-v4120-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 4.12.0 addins are compatible with any 4.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/","title":"Cake Issues v5.0.0 Released","text":"

    Cake Issues version 5.0.0 has been released. This is a major release, containing breaking changes beside bringing new features and bug fixes across all addins.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#support-for-cake-50","title":"Support for Cake 5.0","text":"

    All addins have been updated to support Cake 5.x.

    Target framework have been updated to .NET 8 and .NET 9 to be in line with Cake.

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#improvements-for-cake-frosting","title":"Improvements for Cake Frosting","text":"

    Cake.Frosting.Issues.PullRequests.AzureDevOps now references Cake.Frosting.AzureDevOps, a version of Cake.AzureDevOps, optimized for Cake Frosting.

    Instead of shipping client assemblies to access Azure DevOps as part of Cake.AzureDevOps, Cake.Frosting.AzureDevOps references the corresponding NuGet packages, which for example allows to control version of the libraries used.

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#security-improvements","title":"Security improvements","text":"

    Transitive dependencies which contain known security vulnerabilities have been updated to newer versions where the vulnerabilities are fixed.

    ","boost":0.5},{"location":"news/2024/12/02/cake-issues-v500-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.0.0 is a breaking release, which means that there is a small change that changes to your build script are required.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/12/17/cake-issues-v501-released/","title":"Cake Issues v5.0.1 Released","text":"

    Cake Issues version 5.0.1 has been released containing bug fixes for Cake Frosting addins

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • christianbumann
    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2024/12/17/cake-issues-v501-released/#bugfixes-for-cake-frosting","title":"Bugfixes for Cake Frosting","text":"

    This release fixes dependencies of the following Cake Frosting optimized NuGet packages:

    • Cake.Frosting.Issues.PullRequests.AppVeyor
    ","boost":0.5},{"location":"news/2024/12/17/cake-issues-v501-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.0.1 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2024/12/21/new-website/","title":"New website","text":"

    Today a new version of the Cake Issues website has been published.

    The Cake Issues website was introduced 2017 as a static website built using Wyam, like the Cake website. Using Wyam allowed to add full API documentation and other features like list of addins or overview of open issues across all addins.

    Wyam is no longer maintained, with Statiq as its successor. Unfortunately also the deployment pipeline for the Cake Issues website stopped working in 2023, resulting in the website no longer receiving updates.

    Since the introduction of the Cake Issues website seven years ago, the Cake website also has been improved, among other things, with a dedicated page for each addin listing the aliases the addin provides. These improvements made a full API documentation on Cake Issues website somehow redundant.

    With .NET API documentation no longer being a requirement there are much more tooling options available. The choice was made to use Material for MkDocs, which comes with a lot of features for writing technical documentation.

    One of the features of the new website is support for multiple versions using mike. https://cakeissues.net/latest/ will always point to the documentation of the latest released version. https://cakeissues.net/develop/ points to the documentation of the current development branch. Beside that there's now a version selector in the header to show documentation for any old version.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/","title":"2024 In Review","text":"

    2024 had been an amazing year for Cake Issues. In this post we'll look back to what had been achieved in 2024.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#alignment-of-addin-lifecycles","title":"Alignment of addin lifecycles","text":"

    2024 started with an announcement to consolidate all Cake Issue addins into the main Cake.Issues GitHub repository, which has been finished by now.

    Beside having all addins share a release lifecycle, having them in a single repository also simplified maintenance work and release process. This resulted in a total of 20 releases of Cake Issues in 2024, including one major release with 5.0.0, bringing constant improvements and bugfixes.

    Core Cake.Issues addin has seen a steady, and stronger than 2023, rise of downloads during 2024, resulting in nearly 1 million downloads by the end of the year:

    See NuGet Trends for details.

    The individual addins had a different age, some up to 7 years old, written for .NET Framework. As part of the consolidation of all addins in a single mono-repository effort was made to unify and modernize the code base across all addins.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#new-addins","title":"New addins","text":"

    With the introduction of Cake.Issues.Sarif a lot of additional tools supporting the SARIF standard are now supported by Cake Issues as listed on Supported Tools.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#improvements-for-cake-frosting","title":"Improvements for Cake Frosting","text":"

    Several improvements were released during 2024 for running Cake Issues with Cake Frosting.

    For all addins a NuGet package optimized for running with Cake Frosting is now available. These NuGet packages have dependencies to Cake, Cake Issues core addins or any other required dependency defined, which gives full control about the dependency, their version and update behavior to the user through the standard .NET project system.

    These packages also support implicit usings improving discoverability of aliases for build authors. Implicit usings can be enabled by setting <ImplicitUsings>enable</ImplicitUsings> in the csproj file of a build.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#updated-website","title":"Updated website","text":"

    The end of 2024 saw also the relaunch of Cake Issues website, which has been updated to modern standards and tooling. Effort has also been put into content to improve discoverability of documentation for users. Examples and documentation have also been updated to latest Cake Issues and .NET version.

    ","boost":0.5},{"location":"news/2025/01/01/2024-in-review/#thanks","title":"Thanks","text":"

    \u2764 Huge thanks to our community! All what had been achieved in 2024 would not have been possible without the support and contributions of the community! \u2764

    People contributing to Cake Issues in 2024:

    • christianbumann
    • eoehen
    • gep13
    • hotchkj
    • pascalberger
    • Speeedy01
    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/","title":"Cake Issues v5.1.0 Released","text":"

    Cake Issues version 5.1.0 has been released introducing a new issue provider for Test Anything Protocol (TAP) compatible files.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#new-issue-provider-for-test-anything-protocol-tap-files","title":"New issue provider for Test Anything Protocol (TAP) files","text":"

    A new Cake.Issues.Tap addin has been released which adds support for reading issues in Test Anything Protocol (TAP) format.

    See New addin for reading TAP files for details.

    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#improvements-for-cake-frosting-in-cake-issues-recipe","title":"Improvements for Cake Frosting in Cake Issues Recipe","text":"

    Cake Issues Recipe for Cake Frosting has been updated to use Cake.Frosting.AzureDevOps instead of Cake.AzureDevOps allow more control over dependencies in Cake Frosting builds.

    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#documentation-improvements-for-cake-frosting","title":"Documentation improvements for Cake Frosting","text":"

    Examples for Cake Frosting have been added across whole documentation.

    ","boost":0.5},{"location":"news/2025/01/03/cake-issues-v510-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.1.0 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2025/01/03/new-addin-for-reading-test-anything-protocol-tap-files/","title":"New addin for reading Test Anything Protocol (TAP) files","text":"

    In version 5.1.0 a new Cake.Issues.Tap addin has been released which adds support for reading issues in Test Anything Protocol (TAP) format.

    Test Anything Protocol (TAP) is a protocol for communicating between test logic in a language-agnostic way. There are several linting tools which can output their result in a TAP compatible format.

    The Cake.Issues.Tap addin supports multiple log file formats. Details, like file, line / column or rule information, are not standardized in Test Anything Protocol (TAP). The GenericLogFileFormat will therefore only return issues containing the description, which might be the file name for some tools. To retrieve detailed information a tool specific log file format needs to be used which can parse the non-standardized data provided by the tool for every issue.

    There are additional log file formats for the following tools available:

    • stylelint
    • Textlint

    See Supported Tools for an updated list of supported tools.

    The addins is available in a version for Cake .NET Tool (Cake.Issues.Tap) and Cake Frosting (Cake.Frosting.Issues.Tap).

    ","boost":0.5},{"location":"news/2025/01/05/cake-issues-v511-released/","title":"Cake Issues v5.1.1 Released","text":"

    Cake Issues version 5.1.1 has been released containing bug fixes for Cake Frosting addins

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/05/cake-issues-v511-released/#bugfixes-for-cake-frosting","title":"Bugfixes for Cake Frosting","text":"

    This release fixes dependencies of the following Cake Frosting optimized NuGet packages:

    • Cake.Frosting.Issues.PullRequests
    • Cake.Frosting.Issues.MsBuild
    ","boost":0.5},{"location":"news/2025/01/05/cake-issues-v511-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.1.1 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/","title":"Cake Issues v5.2.0 Released","text":"

    Cake Issues version 5.2.0 has been released bringing improvements to build breaking and SARIF issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • eoehen
    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#support-for-suppressed-issues-in-sarif-files","title":"Support for suppressed issues in SARIF files.","text":"

    SARIF supports suppressions for issues which are suppressed, either in the source code or through some external tool.

    Until now this property was ignored. Starting with Cake Issues 5.2.0 issues which are marked as suppressed in a SARIF file will no longer be imported by default. There is a new setting IgnoreSuppressedIssues which can be disabled to continue reading suppressed issues.

    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#additional-alias-for-build-breaking","title":"Additional alias for build breaking","text":"

    There is a new alias for fails build if any issues are found with settings to limit to priority and issue provider types to complement the already existing aliases for failing builds.

    The following example fails build if issues with severity warning or higher from MsBuild are found:

    Cake .NET ToolCake Frosting
    BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToConsider = [MsBuildIssuesProviderTypeName]\n    });\n
    context.BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToConsider = [context.MsBuildIssuesProviderTypeName()]\n    });\n

    The following example fails build if issues with severity warning or higher are found, ignoring issues reported by MsBuild:

    Cake .NET ToolCake Frosting
    BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToIgnore = [MsBuildIssuesProviderTypeName]\n    });\n
    context.BreakBuildOnIssues(\n    issues,\n    new BuildBreakingSettings\n    {\n        MinimumPriority = IssuePriority.Warning,\n        IssueProvidersToIgnore = [context.MsBuildIssuesProviderTypeName()]\n    });\n
    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#support-for-failing-builds-in-cake-issues-recipe","title":"Support for failing builds in Cake Issues Recipe","text":"

    Cake Issues Recipe has new configuration options to support failing of builds if any issues are found:

    • ShouldFailBuildOnIssues: Indicates whether build should fail if any issues are found
    • MinimumPriority: Minimum priority of issues considered to fail the build
    • IssueProvidersToConsider: List of issue provider types to consider
    • IssueProvidersToIgnore: List of issue provider types to ignore
    ","boost":0.5},{"location":"news/2025/01/09/cake-issues-v520-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.2.0 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/2025/01/10/cake-issues-v530-released/","title":"Cake Issues v5.3.0 Released","text":"

    Cake Issues version 5.3.0 has been released bringing improvements to Test Anything Protocol issue provider.

    This post shows the highlights included in this release. For update instructions skip to Updating from previous versions.

    \u2764 Huge thanks to our community! This release would not have been possible without your support and contributions! \u2764

    People working on this release:

    • pascalberger
    ","boost":0.5},{"location":"news/2025/01/10/cake-issues-v530-released/#improvements-for-test-anything-protocol-issue-provider","title":"Improvements for Test Anything Protocol issue provider","text":"

    This version fixes an issue where TAP files created by stylelint containing absolute paths could not be read.

    There are also cases where stylelint would write invalid YAML content into the TAP file. The parser now tries to handle the case where double quotes are not escaped in a YAML block, which is the case if a message from a stylelint rule contains double quotes.

    Starting with this release the stylelint log format for the TAP issue provider will also skip issues with a path outside of the defined repository root path.

    ","boost":0.5},{"location":"news/2025/01/10/cake-issues-v530-released/#updating-from-previous-versions","title":"Updating from previous versions","text":"

    Cake.Issues 5.3.0 addins are compatible with any 5.x addins. To update to the new version bump the version of the specific addins.

    For details see release notes

    ","boost":0.5},{"location":"news/archive/2025/","title":"2025","text":""},{"location":"news/archive/2024/","title":"2024","text":""},{"location":"news/archive/2023/","title":"2023","text":""},{"location":"news/archive/2022/","title":"2022","text":""},{"location":"news/archive/2021/","title":"2021","text":""},{"location":"news/archive/2020/","title":"2020","text":""},{"location":"news/category/release-notes/","title":"Release Notes","text":""},{"location":"news/category/new-addin/","title":"New Addin","text":""},{"location":"news/category/announcements/","title":"Announcements","text":""},{"location":"news/page/2/","title":"News","text":""},{"location":"news/page/3/","title":"News","text":""},{"location":"news/page/4/","title":"News","text":""},{"location":"news/page/5/","title":"News","text":""},{"location":"news/archive/2024/page/2/","title":"2024","text":""},{"location":"news/archive/2024/page/3/","title":"2024","text":""},{"location":"news/category/release-notes/page/2/","title":"Release Notes","text":""},{"location":"news/category/release-notes/page/3/","title":"Release Notes","text":""},{"location":"news/category/release-notes/page/4/","title":"Release Notes","text":""},{"location":"news/category/release-notes/page/5/","title":"Release Notes","text":""}]} \ No newline at end of file diff --git a/develop/sitemap.xml b/develop/sitemap.xml index 187bb15a4..2d817d0ee 100644 --- a/develop/sitemap.xml +++ b/develop/sitemap.xml @@ -56,6 +56,10 @@ https://cakeissues.net/develop/documentation/extending/issue-provider/overview/ 2025-01-13 + + https://cakeissues.net/develop/documentation/extending/issue-provider/tutorials/file-linking/ + 2025-01-13 + https://cakeissues.net/develop/documentation/extending/issue-provider/tutorials/logfile-format/ 2025-01-13 diff --git a/develop/sitemap.xml.gz b/develop/sitemap.xml.gz index 891219890c6628d610196ef25014ce82b437d2bf..5293765cc9e83f38eeeaadf1b27ffbdd63f2d432 100644 GIT binary patch delta 1565 zcmV+&2IBeS4CM@v7=O=h<2De+@B0)%?u`Ce-o!;V3+!P}i=v0^1JKe~79xu(N!f9q zzC%g&O0?51TA=(K1WBaO;?FajkHeAZ=g)7u`fg9!RI2%OpFG6(chuynsG9QA{qNtu zil_U}FCU&eT^q7@+_*8H?zh&qzeLgDaCk74rJZcegVJSW@_#KKm}op1#Sg3dmk)RR z&=xoWJg)}7^G?Y(A|Sa(%j0CJtr5g?qVnxqL$MsJoHC%iBmmW)N> z>6?mHt9@0F=2u%Pm9By-=DUPjs$2dAN(UmU@ABEsvUerx?53(o)K&8eJQ{z{)~f7* zH%jlM#pl%>!*V~YgGSZ+o3JrwqfVO44Uks5w#J!T+JCNgj{bw&TValdGj&8Ey@m;= zSDIWlc#3mCE6xEy>^F}T14hID-Mm3E(VKKif@v_2wW|+DhO-8X2?c7hva(J#OvMw} z5tYEClV*A8Z zV_M2>u73&wCIgN5DI#dR@1%Y$)S&^K4rgef9-c9xy4WBTf8V15HyY}=^YJvvLah5~ zP}HhK$L$P>yfaqqCIzP86;U7CNL_6pnLwk)$`+6a)mWspbR`&AE)c_Asrf-7$+q3o zQE6y4WS^cPL1x{bgydD-wp$C=`qY@yK`Qldm4BOf4+mXY5<4|Cc_+V7j$E#nrHF0mX^S23);x8w&1uYI)je4 zwY$2I+*+<{x(V1ymW?tNRgyf~H)q^Z2VZM?vycRR7uIdiOQRf?8_ z0SBq&KToGaQ+2M|3&F6~B;78KVWXP4IDbZ9%$dn;E*LjJUK~R)4)F;J1xe{1p#bxy zhXl0U=_((-1$EZ|m4{D=0QI&RN@twO`n}#8t;|H@1T-unqtmyE{j3tx;;^|9%5eoe zJSxI6WP?Ae^|Rz-o{D1rh7N%`gk=dIl70&BM@*#IY*xmPR7*y}tRIcyz}el8^<@j{(7wo^5K~$sK5%LBN>&bBZ}W z(~3iwMsf1aFwOp9mHhS7Qa67kb0OQO2ok&K z#otSs7a(LD^&hWC{UU)NWUunine8$J+hs0UO0r1SRoS>zrBItunCfan`7bdKaf@X_ z$979RyCoQQ%beZjWGN8Ye1k0L)lt3G-ZDlZ^VN0A7 z%M``cer;_Te03*vzOD8&5QZkmf)gx)6Qo(e36kIhaTtQ}GlGxN7?Pq delta 1563 zcmV+$2ITqW4C4%t7=PPt<2De6@AoN!+%q~@-o!aE7DX@82cV^~Ojs6GlCtAI zeMud>6795$7ASuQK@usn_<4r&b2t+H{N;UL-5p42A?ug>iQtO)A>o#)#{L4O0}<5^`Alo9ce&NsN|qZ@5!*<$=LVlwwHDU) zW0ghA>Hr)=KbUQP=Yn0|0IAqF6^>drZRH&Ohiz||K7VPO`yxuyHB2}KP~`HfG0p+4 zI0po=-#k(@7>)h!<{grW-nml}OoM@}27Nfvm8cCS6sXBcVVrDeVJEN?G#h9@%pq^W z%Ps@F1;VeQ=IZp#CfC18^QL&dqvGr7`{owd9rbVAY~Q5(E`z7oKC!5EL%GRiLBM37 z5kEx)jeqw&SGz(UYryGnh6d{486Ð9|S{BPwvCp^iHrPZ2NJx|;@BB};VNRujux zZRCDZU;5F9UDa*dHFK@U#x@CIcuU|j6)SFs`$t{Pif?~o3siiE>4N93iM|0sWHIwlk%i(T)PCya zbuIf>hlW>_TiL>Z$Ys3|Webr>4M+v;C5Vf#9^@RL4A;BxD3j+Kz+mi<*0Lf@C=mVp zfPW5TBJ$`;s!53)6AIg8n8WRYZm3k-S-h#ZA#mD)HoUD2IPOTN(ebusUlrW8=Ie@X z0#@*{mfE07l1KaQj9aSUYfX<9;oi?xBuveOx-I2yC$=iL9P3J!tg*p>gVfkR$J3#y zT379bU|1{SJ5iVY)-Qc=jKG*%Cbzj@*nd)ZaSX-S$0sNhB&B#xZDEL`J7?6Z;v-ro~}>Bb37mxPMf{ z%8&{Etk%zx4|ytz`D;1`>eOC4j^d{%O`~bB9O6|xZXGW|lC7d-<&z~KWN8*%3V)0R z%+fO;TPr&Z-AEj&@@{Fw0^jSKzlle8>>)8;*!eLaSkkdgtvk5`jWY-=ru{j^9G+># zAxxt<`Cyo4|1eAgZHF7-lPG>1hi5k)JE-$>h$CuXzNfi5B{6_*c4UkB!0esr022tn zrzpNIpHmB7AD6QfH0*mwuEmxc27gHmVr6go{6Uza5T+|H#2f2$FMA7hdvpf6m^*vA z%Lm8ft0-Q29v_q8!H8D+7n2a{>^=`LZgb)85_Vx+huCyKzMs_1U&&m^4k?1fE;{k| zlI8^nnT`6-*Q0)sKoDB5+MhGqWeB#*T(Xp85wAp9yHzEVn?aZ=v7!8whb_3pGNH3} zOFX+J7Fd`b2hlV1fc zf3CFZ>qdf+L?(&9c(rI4S){9@daJ!W zb`78?$R``lalBM)i4cP$+4bd;`^;p<>yz2Kqee+1b6GLNo4{+R9((B