From 6da2a95fd1ccfa6ab708b9634fb28b8385ac8c9e Mon Sep 17 00:00:00 2001 From: Mohammed-Abubakkar-Siddiq Date: Tue, 30 Jul 2024 18:22:29 +0530 Subject: [PATCH] CI-license-validation Improvement changes - hf/26.2 --- .../license-key/CI-license-validation.md | 34 ++++++++++++++---- .../how-to-register-in-an-application.md | 2 ++ .../images/license-validation-method.png | Bin 43075 -> 43186 bytes 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/blazor/getting-started/license-key/CI-license-validation.md b/blazor/getting-started/license-key/CI-license-validation.md index 0a098b3e47..1ac0081f85 100644 --- a/blazor/getting-started/license-key/CI-license-validation.md +++ b/blazor/getting-started/license-key/CI-license-validation.md @@ -19,7 +19,9 @@ margin-top: 1.5em; margin-bottom: 1.5em; # Syncfusion license key validation in CI services -Syncfusion license key validation in CI services ensures that Syncfusion Essential Studio components are properly licensed during CI processes. Validating the license key at the CI level can prevent licensing errors during deployment. The following section shows how to validate the Syncfusion license key in CI services. +Syncfusion license key validation in CI services ensures that Syncfusion Essential Studio components are properly licensed during CI processes. Validating the license key at the CI level can prevent licensing errors during deployment. Set up the continuous integration process to fail in case the license key validation fails. Validate the passed parameters and the registered license key again to resolve the issue. + +The following section shows how to validate the Syncfusion license key in CI services. * Download and extract the LicenseKeyValidator.zip utility from the following link: [LicenseKeyValidator](https://s3.amazonaws.com/files2.syncfusion.com/Installs/LicenseKeyValidation/LicenseKeyValidator.zip). @@ -43,7 +45,8 @@ Syncfusion license key validation in CI services ensures that Syncfusion Essenti The following example shows the syntax for Windows build agents. -```bash +{% tabs %} +{% highlight tabtitle ="YAML" %} pool: vmImage: 'windows-latest' @@ -55,7 +58,8 @@ steps: filePath: $(LICENSE_VALIDATION) #Or the actual path to the LicenseKeyValidation.ps1 script. displayName: Syncfusion License Validation -``` +{% endhighlight %} +{% endtabs %} ## Azure Pipelines (Classic) @@ -71,13 +75,15 @@ steps: The following example shows the syntax for validating Syncfusion license key in GitHub actions. -```bash +{% tabs %} +{% highlight tabtitle ="YAML" %} steps: - name: Syncfusion License Validation shell: pwsh run: | ./path/LicenseKeyValidator/LicenseKeyValidation.ps1 -``` +{% endhighlight %} +{% endtabs %} ## Jenkins @@ -87,7 +93,8 @@ The following example shows the syntax for validating Syncfusion license key in The following example shows the syntax for validating Syncfusion license key in Jenkins pipeline. -```bash +{% tabs %} +{% highlight json %} pipeline { agent any environment { @@ -101,7 +108,8 @@ pipeline { } } } -``` +{% endhighlight %} +{% endtabs %} ## Validate the License Key Using ValidateLicense() Method @@ -109,6 +117,18 @@ pipeline { * Once the license key is registered, it can be validated by using ValidateLicense("Platform.Blazor") method. This ensures that the license key is valid for the platform and version you are using. For reference please check the following example. +{% tabs %} +{% highlight c# %} +using Syncfusion.Licensing; + +//Register Syncfusion license key +Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY"); + +//Validate the registered license key +bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.Blazor); +{% endhighlight %} +{% endtabs %} + ![LicenseKeyValidationMethod](images/license-validation-method.png) * If ValidateLicense() method returns true, registered license key is valid and can proceed with deployment. diff --git a/blazor/getting-started/license-key/how-to-register-in-an-application.md b/blazor/getting-started/license-key/how-to-register-in-an-application.md index 0682c10c23..401275b745 100644 --- a/blazor/getting-started/license-key/how-to-register-in-an-application.md +++ b/blazor/getting-started/license-key/how-to-register-in-an-application.md @@ -22,6 +22,8 @@ Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY N> * Place the license key between double quotes. Also, ensure that Syncfusion.Licensing.dll is referenced in your project where the license key is being registered. * Syncfusion license validation is done offline during application execution and does not require internet access. Apps registered with a Syncfusion license key can be deployed on any system that does not have an internet connection. +I> Syncfusion license keys can be validated during the Continuous Integration (CI) processes to ensure proper licensing and prevent licensing errors during deployment. Refer to the [CI License Validation] (https://blazor.syncfusion.com/documentation/getting-started/license-key/ci-license-validation) section for detailed instructions on how to implement it. + ## Blazor Web App Open **~/Program.cs** file and register the Syncfusion Blazor license key in the Blazor web app. diff --git a/blazor/getting-started/license-key/images/license-validation-method.png b/blazor/getting-started/license-key/images/license-validation-method.png index d1f688e1d4ce6756c37e7ddf1df269a71d21797c..c7cfdfc235767de3cb47a73f9ca3b428800de753 100644 GIT binary patch delta 9204 zcmb_?Ra9I{&@KcE9$W_k1Q=X`TX2HA!yrSj;2vyn9V}>&V8I#O-AM>GcyI|0!QC$B z{5kjK-nH(_ecP*dRo7QtUDaRL-o4{5YTz&8Nifo0q9Pz5c-r(fCD8D^D3+_%9S(uu zUY8D?;jVVJ>N+^^(FC);2&q!%`;M=EfX}3`U+g|b8(Rv~DR^AcD62QH2FR3gCl$zC zel88*yASlE+49~ViJ$*JQ(KxaNutf_1d#b2g}kOtHPIG!C2kZLuhh zn4n_SXEYS;QwZ&jS{MXNo;RLzkyzyJEWE=WDUgG&dGs1-gcU9ujJ zxThUPpArL-uLHFkyyTewtF*ifCZU-;Vb^kG(sDItfpIwc+b#16Xh!@il|VynVwF_B z{3qVYaYjKva2Rf2y)`4V!GjuP+@ljlTH1rpWj;h{#Q%X@36*VxB;r{5l|N6}E2-`F zzzlykw8Hyq{d@DZY))=Atcy<>YG!co@ebGf_f!!yWG9@|D^TK=Odyd0DFLJDURx{Y zhs%xcN-=U2$utuAn86bZktv15*1ZG?g5KojF)jjSxEoVn7|tm?ML&OrOvH1!2nYcW z``ttd;{t#?_qUdE?qqdtqlCIz>$4_@gHkM>tNpYT4*93>JB?Jv7TI*DEXL)oH=VAg zz6(w3gyhFrQ@tmx``6PUoG_{tiiB9f+4I4<5H$gzh2zage7n->?)8Jd^hJ#}NFIKX zu#uCYfpgAs^e1p-!q6SW6+CGME9+lFrS_iWJ(IIZa5J9VNHP1;nO^N_!D%)=AmnJTi|3H zjE>rlPxS>c_?9u3$LbwMU-ZnhdfILNg44FDWe%+m$L;bNx7ZV8(zm27d+wT^`FH-w zR%>TJ2lXc^j%6<7yA%#7(J4|cdn(Hh(sV-pSX8Z!h+q920Uj0pXk@udieF6jY$0oO z)HZLk`(j73*TXsjDe|CP1Ej4Y#@ym0((R39hL(nj*3qcNqfshRRu_bxk$QTZ8Y97b zT^elPRovf!tF9U$JGzv)sFX{4f}m2nAtt9LXGHyAzsI=ZXR43B3irc&(w#TCbV^g07SD*zRt1u~B!vl_zsCsEA~EPzsZH zbuFBFpcj*>Cm54za4&zlTd>0zh?0F~rP6ns4VCoL6kHzR(`@+3*#e=&0*uUQ!=pB| zVG*%0GTii<2XUEs`s%yHl%RK07|m|SOFZQ{2pOL#--Le-`Z*3l_p%@5X>+s3!iTPT z*#_kl= zb6$2`r(&x7Q0H59tsdw!UL)kriAUH*ZZpjeSCV^*%rT*W4%oX{6Lr^Nt|x>jivD7; zSCqY@qAWsErVogl-B`^Z2)pLTs4!=7Kpo_Kg=B zYjx{rR;9fn2z>NgKkkEac{ym&z7X6C&bVZu5%I!j;@u(n5F(-SVVXlOLVzhUeFBzv zV@3jDTaQvxQsm05DkYamz5rhA+K4EmS4IOHY5R=_M>ejy6c^C3W1|t&e!0&EZ@K$q z&dJ%BuuXtAdg{)XBd`Zn30G(ri{-xYv|>f7n?(?f1gFMx+lfpa_6ulMQ74bso>Op1 zrh}Td0j!@M1PL=JR_hxztE3AGe2yi0#X2F-nzi-7aBH*FA7k}@yeU<_Gno=)HK8QS zBB2}>eZCZP9C>?fdLmr>vA*lD?imce@h(!ile+$8bnsG)$?uFZvZAZXfj`(ky1+3~N=Q&a;<;UvHf4mC@a;Q7Q?x-J#%%|A|+D`S`ZqCP?O6M7t zM1pHkWbSm-=TkSv(ecVxpuqMyE8gTzQl89;TiN}ZCMsKZgEyB^eL26yyv$|sVBo^*70 zR?t3bhwLccM&&N7mQl9}=Wi^tzfLRg+Cz6}H!v=9TqgPQuu%Juqh)+U(9uz2v_?gf zw%M!wS{j6H@~w`F{4ujXT1;t0jksFK)2-Yx3h6sdodmgFL=U-CmMa(78i)q2*kS*-tdAQwYt2 z{tf&wQp7>urp`?}$l?V#2@+cV2#<%IGBCO&SS?(Q;eU9@K41nvS0wKySM{NOHJM(C zK(B75)$b0g9dad-yf~x;m{<@p>?u3c#|F&rx!J1xh=~m2+;sy?;DDHHME&NjLeBs; ztraSWy=k(f*Gp3|i~}*$-(Qi*Ic}y~{p+UqbBgOwWh`0dVSuEszhr46quxREQ~f5>FoSAY1H5V1*+y>bS>Rwb@aiO9~O23y$#6C$|PHRd-}poC&)RY6*ofCcv2b#6VCZ_SLL zsAwwMs{(*H_f?}mGVW&fOTG}>`SAGTm%~4l1{M+F#g%1))jGJ6d2|W6iBh?k z{a4}N*4T&Qgv06SKqZnzlQEo{$W&x+5pZLv0x~A@3RV~QJ#wNZw2qGRa_fmcC<6#h zksI=HVtT~$aZR#-xxS7ALkHYbHj-Sd+)m_i3W^~eBM_)Aj?U{ET~=9Xc})j7twW3c3#X| z8n<`*?bdd=z8^hvmn?gK-16zQvWlS)*-v-N<$uTT_y&hz!=Sx)wZEYXZ6@IM}sIBmp-&0L)#u5lv-{;M*L^t5k*03 z1uh2-{JDiqq|-$GNna(?Sjtv&OsC*Fn6COy&cPgKdQkzfT^KvX;G zq8Ja^mjin2gELKA0au{GQ%xjb?3RnT5*Tc{aPKEZ=)?~ z;}~NJmLiFjfO89VvI$7dmUx5%iiTmax8cr zA0u@(z|C}dtfDu~f^NDmDPp3f%H5BzV@@Z+L-{2>HposuFGeE&E-y|#=9rX@Ts5-? zt<1IR&WYYU-12p=NubHQPO6^`UnR6#sV|Z(?N)R{`#y%54y1WaZT>d@5k(mxH%ZXL z^Kw5i!lpMUxivce2a#IIG(;`?D*v-VcxM)F5oYvBc(7GfK{;^-=020xPOwRgqRh9c z+j8-?6{TkJIbHv z^%RpwVKUmqE+4t*1&vyKCg-Liz*;Mr^Y5tE0)<2^$gz7wv-EuO2qF3-9^XR9O&uI$ zGq{n-hCJG8PDsVr%DcDL4S0Z1FY9}8EbPhkooXWy*HtW>sRh%5C^wJ{whJ3b=?_Vq zL_3u8`JUv+$Xs0nk7>>iU!Tz;u(-rI06Iz-XwagDm%-oLyt7Q$7=Q{07?M|Y)RBcV z?^oqFp;BO!#V`HthRpqbfAB6TMmIKzZg9PDbs@Ao&o)hzTuDB%e^rmpwv_qgs*TxT z6ly%3Mfzoe!Y@yWROwSSZztBru_?{l{qYj){_Ex3;7m&FANHVaHEsodJi&9nnl3=B2 z_UJCfCBOLnwQW23$TY8>_C_}Vj0Uy{v939zxs#>>EgFUZus!C0D`zZa2@6|;b3iBYDj-`Zjp-sCl}5xUM?v)toz4j4Ay*bbIb%ta?{*06F>VvB#ekxML-0{ zLcKXEE=Fp;xsmC`B}Ut0pDS=Wt}Ao*%eKKeVXn9<-=*V9@NcHhzB#iJ4YIfCO2r~A z82ZAUlI~?Ms!!B`f;ALTVjJ<~BsgDa$jN>1a2&2*GD2{U#LHX|!ZaTL=-(3Z`8Q+n zV#geN=;Xith*sW$1%0NWz3GqhJ)M4!V!;g@trYqhv5vd;2&S;2?JLrY;%vM3XS zO5&Y}ba4GPJfDt7O2#<5u1Esy9noh(JqYIoiXn%#rmTNou1xSW#bhn*AQj;xnKPA$ zhm%6Tsc+Fr=b@wm<^s~e{%$VZ3VfZ>?_eB*^bN^kXDJnN7T(5gCMG6&?u%t8QS;^; zM8hbw2Zx@aNLF5ydM{(oxlK8c0(GF9l$DdaKBYpJnUWdUZ-rt>*vjK&J?{jK%;{wD ziCeEMICQ#Q63~JNywZGwDi?Xy71=9;JwDj?dIl_2Bu3comjyiDIqp60Qs(qL#Jk^W zgoMz#5?f+nwtb(RG>GCY(*-YF9?o4urfpdt%&8f~j#YBjm2HjhbHfPO8oM~@}B+ET}X-RkTyX9F}_Bdy0!oc*5PHdnFL}p z+HyG$V82)SDQ)6MA$I+ssMoRg5g5J{+usR!32%78+IA%7`>6&eM*C(i(J(jxGP@Ge zWUAS^01s^G3HCbJ#?7<84)y{+UTpj2%ffXroi_-wP3POPX#~G5p#9rku#0Fi+G1Rf zY0mp_O5vM#fnD{h*a3zH^uIw>q?;bx^*rGBS;)<0uQGZw{gdOjD}wU6=tt()w3$J> zic^es0KU2fKQ-n}HH{BHHuE56FjPDmjN4(R`npK=D)KCHv#_)5;0u8)YtL&u@={Sp z3LJx?ex?Rk@ZzDQW;oh_8sOZj)wmVDxD{fOD_*RQ#%rBPe5@9#NWX;#;|85zwc!Yz zG;n8AD8p2&v4ld3?+M!?tP)#M*q)gDsSnt3g$gR_xuwU&&@?Gc9U%jgWi_ixR8W3~ zOLSk^pL2_#p?4>X0*C3dNUbCj6#1Z1nVQSX@|4(hqY(9Jsm6E~YwDE~W>J#CVO3D*ODt<2yIJl-@xr#3niLb=S7c z+YgyRry}JnN27(tOc2qt((W@Pu!JOcwC>I+<6&l=d%$GbU@p^`>YYcOoJx z0yah>q)rmz`IPHDXE+i~Qi}RS+k_kyzdOY@686-!YUft)@p7!mX&`FDsP-kxCfj{Q@;%_&9_be&kPE)C_`?(nuicc;3 zQw>$|L&yHZ3)(~bB##rZcL0E*vu}U3MZ^|(&G#es zo@JY04Qf>PMo8AF(88|JMu!5 z`c%Cz$5nhQJoQwDDFq&hv!>-RpRuMJHr|w8f#gtJw=U?!?Af3rApICBE4j8SUNl1E z7n*$TBC>uZWLj%rjh%!$(a6n2Z2KN_JDHR3cU^_corDf1+>I*o?A17ZK|gjy_y)?!f$@8!Jq)7|L zT59WgCst@V+;Z1A$zJ%)u*Fpka6qyqj5+XRSb!}de z;o*5nyh)hZOrojL)mo+ZOA1RVv=nmWiJv@i`9u@}jZLcfW!~B0?;}R_cqVq9aW2)? zumeHCB2u+;ueFCCdf8gN>A1Z$?lVq{{I}4sM%>;OAf5kAYHT3~)d~uDxbIlQ2Iud+ zliUSfzYSU2&cCHqIXjx3AUruyd-Dc)kQA)TPJ&Sr*G-TT)ol|f2i8+vm$UyNpJq?f z=DMtm(rd;~KiLTW zw|Bun;=%Uxl9!8s%h5pAiTs~2c79s+?O3Phr@0TxF+Unt#<~Tc$30M*)(yuu$3)Rg zj52wKJF--Y68-z~5mN@KQwyCjh5k_`1w;M#E27x{>|L#dJJ0jjK+=peugUWo8u+AT zWqTk8r0G^;DTS^9qtBB6h_A$yn_r9kEtnB4%jKU6u1MJ;_?3KZc0*{rag0Nyf-Cmhq0CqC4%pTo$ zJf^lCag*rjvEi?GP-BQ#MGHcE?{2?|$Bg+*24fXdCCZh`Ud+naVKkRbZd$xUkE4S^ zUxTK-*X~b@xy)@)x=zOi(*0>Ot|@wK_GWqSP~21O2Jh%cB?F`urG zZq!3i2FE6L)Y~q=Z6{Yt-ROOWF`f6j#)NuOK?I|C*k|0goiG6DRhQxQe&sf@*p6(a zw$x(`2yz(6;1`-tPBBw1MbIf4@HeCtKwaguRFkDhIWb`*4wSvVx5E!zuOBDVfdzOF|f6tJmv9Hz_5Yy0^uymM7+~i+W?u+V#DV!oj^Yr#q*@ zW%hbGmQ8MJ;LCUF(~%^P>Va`rvtZv&wYE<_&dx)`LZ)c?5J;BvjsNl zasvY9pBu!yDSv6~3@9=o*vBD*$8ly9pmvcRL0SNKC|rp~!4(aNnA|_!+S`c#$P*8L z$J@U^6wYV5Q0?L+%yI(hA&3s>c6D0ub6sT-j^vIuZXp}*KRQzj>gBS(<-sE7M0j_* ztI8>`9MPWL9_Y!hy%Fx}AQM)KVN$Vx_R;Cfq+El!rx}ayjEKm|dD+X(N05l`n48@v zAG{9sz4Yk+oK|d>HwLP9H<&Ge|-!%MO zz~5vwKw(<_&&`o&8m1DmpWI!5)W(hmnY!f>>D-Y4o_2J#2|M%->KB|xzR563sP3V8n~)Z4rUNmIeBqZvWh;Ahg7a>N@zCcYK>k2vx>SesR4N zO5E1kPJT1ZckiWz6?VymoJ!2LEOrg-IXZ93QA&?UUAaNvP?=n9kK-3_>lF34w^RDO zy_ztX`r2knDsv!N2bvx5mQUn6E)G?+c{M=soUt&Vst*+e8D6cZBOnT^r?;L0FHXQ?(| zHdOCTS#oKiZe}#p;|}4ur$F? z4-(k~HRHUQUxmxk7*&223(m(LbUihjypptZA@t?OriJF6wGlAZ*1|2XXt*ohackrw zoe?-6P>_>8x z72>5oQ&8q&Zt2rn(8meNggw9?R}|?{FiEgpT3syiFal`a~a8^{agHo zClPq^za7Wt#F~4WA$r1Uu{$xhW>jt|zp7*jcyxpu2J2N0Zb)cp5sJvg9>3lBn}L^r zR_3n~{G?cF%*kpcTB(O|@1G#9)Y4a<;0h}j7mk0$20DCneKEcJPB+JuGJ)8&kWu%Y zSB*LUQk!Rso=Sb2y1oGp26Zo^zP+(YdvFESlKsQS!UX?u{uwm{T75L2jh9mk0igYF z+e@#U1>d<1|3^|T5OggtTN+yo_DV+{MWe30fcW@9fAfiJ;L)&Rj{VPnc;+@kTATiw zCk2Zl|L;i$^l-bLZxVmyW{{lzhvNOa{uc<8|3QA%LHK{^{Il5qzf^SoLG*uz_J5iQ q7*@65)^|$!yBD6>sp#qxBEkxa|JE;tvFCq#5aeZ4q$?y%gZ>xDP}{Ho delta 9092 zcmcI~RahKb&@B=i26sy!KyV1|!4D2WgS%^RZG1?OfuMolF2Q{m2%g|1xLfdn!5wan z{P*EL{V%t^ub=kn>RP>bt*X7d>nBlqCr}c}u|H#?BOxJm2oTUFz2HYFovYIyi3Eth zy&8f7YpbIxS-gEXo?X8a3-mMqLJ1rFGN$Bv^V zU(@PgEk*f9EjZf|37FF`kHbKl194GG!Q}*ob*ELM2)tJ8*_B(Bk&HlMW>uP~&_zm` z1WsuVHa40N2>nbX|FeDk!rDfx+ublCbGL7Kok}svU6|V3ZRo$a+h`uFUbdzl_e~Zk z;7S03=tZ{XTmFTUIbF!bqX6=*O`F*)Zu}%Gg^;HtSEdNH);if|t_*|@<|>pA--=8e zG7NZ0*gjrc+;1dFSp@~~J2rH^aj3*AWLA}Xnp&sG{v7ua)vQ1X#DWe(zDz04Xj)Sk z>DZs8NJ@(%bCCTwPlXpzL#&3UR@+x(-WNIlS3S5}w~bmcLBRa`77)wpZZ7(IFc%DB z4Gg2fpJsXpms_taLGD`gH}xQ90KM+nE^a%s_xTc+1cSpO6bIJSJ2pddt1KKBYgBJ z!&MYpLNp3m1%AcH0hqIEnyyyWhTa6K3HZ$3OzJ0mmQsc!Z)W1@C(wpvmE=JBaY{Bm zreF#`pj(4>V^2OLQRIAzEU%}Teyw3LoYP^7KXQq?bh-A+@3vnEv9YXOcU`_}slE5v z4ciVIBGWpGRKrEX2nNYbcDsDn6*3g+x0-=e_v1;mJuALz2Fwwo8XLV*tNBe=vXzqZ z4s*{s5JPS!!%+JE%~{C6%oTYd8FO3~4C(AOablu4;nhkz0e)8<4Ru;)+{pKwuN--J zO;Q)1Am?pYRuAdN8$Y|dx#d2@#Oy-%;*d?Wc3{iBuZ^g5%=n-0RPCmSJ0&j_*VkI6 z^WlqN%#4M%16xbubW{&t2S^7qk?bI6G`U}#qm|r+WjjSVYow5}pE0RiDHU*0`HFiG z=fM1Fyf_8?ZtCP)_ru1uma2Q|u##C=3d_qd13_Db>g2HwR#v~g@g)Nf81L`fIA7T# z@|t=v(pND6$Pr-|2g~!}x|~bvDg0bjr^Gi@TM@l*04!1vcvxY&eRrFD>FN#E-|UX^ zT^ozS@t8I7U9XPv-MEbE8u$rI&1da2Es7i$+g9)Wm}?x95lz%lUn5gt0>+ZPd(lxy zNUf6Pk=H?qrKI#%s%6CmRx*F3dOK+;H&U{s>f$w>e^q)Yr#uKNLb}JsI``4f_R(3~ zLz>|hShPZn=r$lu!X2(nKjBHHlbe=vCG#3!aJ48dL_L!dG2`#Q9L%lG`FOxrpsADq$ zMrqCHvqx2RRk#(heYt;#_?(Pb_+k+=BT{F51~P8376Y~1S){y&cBnf`eu3CPJ?okm z!1EDz3|eIHG-BuE$o|I~Mj7u;NT5plZ+ZI)nG+N&p=eD1VLqZDQQ!2#eZ3*cjmxRHX;yWXV@pNf^5Q5pqK9Sp1FnQV z^2Ef$SFq~ANqepCP^V5RY$$%7GB}B3Xzi05p;gNZ^(

%C-H=@}q7(3Vt7KRTnhj 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