/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . bk repo . helm . service . impl Ċ Ċ import Ġcom . tencent . bk repo . common . artifact . exception . Version NotFoundException Ċ import Ġcom . tencent . bk repo . common . artifact . repository . context . Artifact Remove Context Ċ import Ġcom . tencent . bk repo . common . artifact . util . Package Keys Ċ import Ġcom . tencent . bk repo . common . security . util . Security Utils Ċ import Ġcom . tencent . bk repo . helm . artifact . repository . Helm Local Repository Ċ import Ġcom . tencent . bk repo . helm . exception . Helm FileNotFoundException Ċ import Ġcom . tencent . bk repo . helm . pojo . artifact . Helm Delete Artifact Info Ċ import Ġcom . tencent . bk repo . helm . utils . Chart Parser Util Ċ import Ġcom . tencent . bk repo . helm . utils . Helm Metadata Utils Ċ import Ġcom . tencent . bk repo . helm . utils . Helm Utils Ċ import Ġcom . tencent . bk repo . helm . utils . Object Builder Util Ċ import Ġcom . tencent . bk repo . repository . pojo . node . service . Node Delete Request Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠHelm Operation Service Ġ: ĠAbstract Chart Service () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ chart æĪĸèĢħ prov ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Chart Or Prov ( context : ĠArtifact Remove Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( context . artifact Info Ġas ĠHelm Delete Artifact Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Client . find Version ByName ( projectId , Ġrepo Name , ĠpackageName , Ġversion ). data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Version ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Key Ġ= ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġcontext . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠVersion NotFoundException ( version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Client . list All Version ( projectId , Ġrepo Name , ĠpackageName ). data . or Empty (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Version ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Key Ġ= ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġcontext . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Package Extension ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ [ version ] Ġ å¯¹åºĶçļĦ node èĬĤçĤ¹ ä¹Ł ä¼ļ ä¸Ģèµ· åĪłéĻ¤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Version ( ĊĠĠĠĠĠĠĠ ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠ Ġrepo Name : ĠString , ĊĠĠĠĠĠĠĠ Ġversion : ĠString , ĊĠĠĠĠĠĠĠ Ġpackage Key : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpackage Client . delete Version ( projectId , Ġrepo Name , Ġpackage Key , Ġversion ) ĊĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= ĠPackage Keys . resolve Helm ( package Key ) ĊĠĠĠĠĠĠĠ Ġval Ġchart Path Ġ= ĠHelm Utils . get Chart File FullPath ( packageName , Ġversion ) ĊĠĠĠĠĠĠĠ Ġval Ġprov Path Ġ= ĠHelm Utils . get Prov File FullPath ( packageName , Ġversion ) ĊĠĠĠĠĠĠĠ Ġif Ġ( chart Path . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠNode Delete Request ( projectId , Ġrepo Name , Ġchart Path , ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Client . delete Node ( request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( prov Path . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Client . delete Node ( Node Delete Request ( projectId , Ġrepo Name , Ġprov Path , ĠuserId )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĬĤçĤ¹ åĪłéĻ¤ åĲİ ï¼Į å°Ĩ package Ġextension ä¿¡æģ¯ æĽ´æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Package Extension ( context : ĠArtifact Remove Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( context . artifact Info Ġas ĠHelm Delete Artifact Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġpackage Client . find Package ByKey ( projectId , Ġrepo Name , ĠpackageName ). data ?. latest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Path Ġ= ĠHelm Utils . get Chart File FullPath ( get Artifact Name (), Ġversion !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġnode Client . getNode Detail ( projectId , Ġrepo Name , Ġchart Path ). data ?. metadata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Info Ġ= Ġmap ?. let Ġ{ Ġit 1 Ġ-> ĠHelm Metadata Utils . convertTo Object ( it 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchart Info ?. app Version ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Update Request Ġ= ĠObject Builder Util . build Package Update Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠPackage Keys . resolve Helm ( packageName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Version Ġ= Ġchart Info . app Version !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġchart Info . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Client . update Package ( package Update Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHelm Local Repository . logger . warn (" can Ġnot Ġconvert Ġmeta Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĿ æ¬¡ åĪĽå»º ä»ĵåºĵ æĹ¶ æł¹æį® index æĽ´æĸ° package ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit Package Info ( projectId : ĠString , Ġrepo Name : ĠString , ĠuserId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhelm Index Yaml Metadata Ġ= Ġinit Index Yaml ( projectId , Ġrepo Name , ĠuserId ) ĊĠĠĠĠĠĠĠ Ġhelm Index Yaml Metadata ?. entries ?. forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . value . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Version ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrepo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchart Info Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĽ´æĸ° remote ä»ĵåºĵ index . yaml æĸĩä»¶ ï¼Į å¹¶ åĪ·æĸ° å¯¹åºĶçļĦ package ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Package For Remote ( projectId : ĠString , Ġname : ĠString , ĠuserId : ĠString Ġ= ĠSecurity Utils . getUserId ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Will Ġstart Ġto Ġinit Ġpackage Ġinfo Ġfor Ġremote Ġrepo Ġ$ projectId |$ name ") ĊĠĠĠĠĠĠĠ Ġ// Ġ åħĪ åĪ¤æĸŃ æľ¬åľ° åŃĺåĤ¨ ä¸Ń æĺ¯åĲ¦ åŃĺåľ¨ index . yaml ï¼Į å¦Ĥ ä¸įåŃĺåľ¨ åĪĻ è®¤ä¸º æĺ¯ åĪļ åĪĽå»º çļĦ repo ĊĠĠĠĠĠĠĠ Ġval Ġold Node Detail Ġ= Ġget Original Index Node ( projectId , Ġname ) ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æľ¬åľ° index æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġval Ġold Index Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Original Index Yaml ( projectId , Ġname ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠHelm FileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHelm Utils . init Index Yaml Metadata () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ä¸ĭè½½ æľĢæĸ° index æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġval Ġnew Index Ġ= Ġinit Index Yaml ( projectId , Ġname , ĠuserId ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval ĠnewNode Detail Ġ= Ġget Original Index Node ( projectId , Ġname ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åħĪ æ¯Ķè¾ĥ æľ¬åľ° ä¸İ è¿ľç¨ĭ ä¸¤ä¸ª index æĸĩä»¶çļĦ checksum æĺ¯åĲ¦ ä¸Ģæł· ï¼Į ä¸Ģæł· åĪĻ è®¤ä¸º ä¸įéľĢè¦ģ æĽ´æĸ° ĊĠĠĠĠĠĠĠ Ġif Ġ( old Node Detail ?. sha 2 5 6 Ġ== ĠnewNode Detail !!. sha 2 5 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" the Ġindex . yaml Ġis Ġexactly Ġsame Ġwith Ġthe Ġold Ġone Ġin Ġrepo Ġ$ projectId |$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( deleted Set , Ġadded Set ) Ġ= ĠChart Parser Util . compare Index Yaml Metadata ( old Index . entries , Ġnew Index . entries ) ĊĠĠĠĠĠĠĠ Ġ// Ġå¯¹ æĸ°å¢ŀ çļĦ chart è¿Ľè¡Į æıĴåħ¥ ĊĠĠĠĠĠĠĠ Ġadded Set . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . value . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Version ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchart Info Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġå¯¹ éľĢè¦ģ åĪłéĻ¤ çļĦ chart è¿Ľè¡Į åĪłéĻ¤ ĊĠĠĠĠĠĠĠ Ġdeleted Set . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . value . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Version ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġit . version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Key Ġ= ĠPackage Keys . of Helm ( it . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Helm Operation Service :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ