/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . gradle . gradle build . profiling . build scan Ċ Ċ import Ġcom . gradle . scan . plugin . Build Scan Extension Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . internal . Gradle Internal Ċ import Ġorg . gradle . api . plugins . quality . Check style Ċ import Ġorg . gradle . api . plugins . quality . Code N arc Ċ import Ġorg . gradle . api . reporting . Reporting Ċ import Ġorg . gradle . api . tasks . compile . Abstract Compile Ċ import Ġorg . gradle . build . Classpath Manifest Ċ import Ġorg . gradle . gradle build . Build Environment . is Ci Server Ċ import Ġorg . gradle . gradle build . Build Environment . is J enkins Ċ import Ġorg . gradle . gradle build . Build Environment . is Tr avis Ċ import Ġorg . gradle . kotlin . dsl .* Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . parser . Parser Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġkotlin . collections . component 1 Ċ import Ġkotlin . collections . component 2 ĊĊ Ċ const Ġval Ġserver Url Ġ= Ġ" https :// e . gr dev . net " ĊĊ Ċ private Ċ const Ġval Ġgit Commit Name Ġ= Ġ" Git ĠCommit ĠID " ĊĊ Ċ private Ċ const Ġval Ġci Build TypeName Ġ= Ġ" CI ĠBuild ĠType " ĊĊ Ċ private Ċ const Ġval Ġwatch FileSystem Name Ġ= Ġ" watch FileSystem " ĊĊ Ċ @ Suppress (" unused ") Ġ// Ġconsumed Ġas Ġplugin Ġgradle build . build scan Ċ open Ġclass ĠBuild Scan Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġlateinit Ġvar Ġbuild Scan : ĠBuild Scan Extension ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġval Ġcache Miss Tagged Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ): ĠUnit Ġ= Ġproject . run Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Scan Ġ= Ġthe () ĊĊĠĠĠĠĠĠĠ Ġextract Ci Or Local Data () ĊĠĠĠĠĠĠĠ Ġextract V cs Data () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Ci Server ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Upload In Background () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Tr avis Ġ&& Ġ! is J enkins ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract All Reports From CI () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonitor Unexpected Cache Mis ses () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġextract Check style And Cod en arc Data () ĊĠĠĠĠĠĠĠ Ġextract Build Cache Data () ĊĠĠĠĠĠĠĠ Ġextract V fs Retention Data () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( project . gradle Ġas ĠGradle Internal ). build Type Ġ!= ĠGradle Internal . Build Type . TASK S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . tag (" SYNC ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . monitor Unexpected Cache Mis ses () Ġ{ ĊĠĠĠĠĠĠĠ Ġgradle . task Graph . after Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Cache Enabled () Ġ&& Ġis Cache Miss () Ġ&& Ġis Not Tagged Y et ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . tag (" CACHE _ MIS S ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . build Cache Enabled () Ġ= Ġgradle . start Parameter . is Build Cache Enabled ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġis Not Tagged Y et () Ġ= Ġcache Miss Tagged . compare AndSet ( false , Ġtrue ) ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Cache Miss () Ġ= Ġ! state . skipped Ġ&& Ġ( is Compile Cache Miss () Ġ|| Ġis Asc i ido ctor Cache Miss ()) ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Compile Cache Miss () Ġ= Ġis Mon itored Compile Task () Ġ&& Ġ! is Expected Compile Cache Miss () ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Asc i ido ctor Cache Miss () Ġ= Ġis Mon itored Asc i ido ctor Task () Ġ&& Ġ! is Expected Asc i ido ctor Cache Miss () ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Mon itored Compile Task () Ġ= Ġthis Ġis ĠAbstract Compile Ġ|| Ġthis Ġis ĠClass path Manifest ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Mon itored Asc i ido ctor Task () Ġ= Ġfalse Ġ// ĠNo Ġasci ido ctor Ġtasks Ġare Ġcache able Ġfor Ġnow ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Expected Asc i ido ctor Cache Miss () Ġ= ĊĠĠĠ Ġ// ĠExpected Ġcache - miss Ġfor Ġasci ido ctor Ġtask : ĊĠĠĠ Ġ// Ġ 1 . ĠCompile All Ġis Ġthe Ġseed Ġbuild Ġfor Ġdocs : dist Docs ĊĠĠĠ Ġ// Ġ 2 . ĠGradle _ Check _ Build Dist ributions Ġis Ġthe Ġseed Ġbuild Ġfor Ġother Ġasci ido ctor Ġtasks ĊĠĠĠ Ġ// Ġ 3 . Ġbuild Scan Performance Ġtest , Ġwhich Ġdoesn 't Ġdepend Ġon Ġcompile All ĊĠĠĠ Ġ// Ġ 4 . Ġbuild Scan Performance Ġtest , Ġwhich Ġdoesn 't Ġdepend Ġon Ġcompile All ĊĠĠĠĠĠĠĠ ĠisIn Build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Gradle _ Check _ Compile All ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Gradle _ Check _ Build Dist ributions ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enterprise _ Master _ Components _ Gradle Build Sc ans Plugin _ Performance _ Performance Linux ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enterprise _ Release _ Components _ Build Sc ans Plugin _ Performance _ Performance Linux " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . is Expected Compile Cache Miss () Ġ= ĊĠĠĠ Ġ// ĠExpected Ġcache - miss : ĊĠĠĠ Ġ// Ġ 1 . ĠCompile All Ġis Ġthe Ġseed Ġbuild ĊĠĠĠ Ġ// Ġ 2 . ĠGradle ception Ġwhich Ġre - builds ĠGradle Ġwith Ġa Ġnew ĠGradle Ġversion ĊĠĠĠ Ġ// Ġ 3 . Ġbuild Scan Performance Ġtest , Ġwhich Ġdoesn 't Ġdepend Ġon Ġcompile All ĊĠĠĠ Ġ// Ġ 4 . Ġbuild Scan Performance Ġtest , Ġwhich Ġdoesn 't Ġdepend Ġon Ġcompile All ĊĠĠĠĠĠĠĠ ĠisIn Build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Gradle _ Check _ Compile All ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enterprise _ Master _ Components _ Gradle Build Sc ans Plugin _ Performance _ Performance Linux ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enterprise _ Release _ Components _ Build Sc ans Plugin _ Performance _ Performance Linux ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Gradle _ Check _ Gradle ception " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠTask . isIn Build ( var arg Ġbuild Type Ids : ĠString ) Ġ= ĠSystem . getenv (" BUILD _ TYPE _ ID ") Ġin Ġbuild Type Ids ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . extract Check style And Cod en arc Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġgradle . task Graph . after Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . failure Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠCheck style Ġ&& Ġreports . xml . destination . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck style Ġ= ĠJ soup . parse ( reports . xml . destination . read Text (), Ġ"", ĠParser . xml Parser ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġcheck style . getElementsBy Tag (" file "). flatMap Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . getElementsBy Tag (" error "). map Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġroot Project . relative Path ( file . attr (" name ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ filePath :${ error . attr (" line ") }:${ error . attr (" column ")} Ġ\ u 2 1 9 2 Ġ${ error . attr (" message ") }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . forEach Ġ{ Ġbuild Scan . value (" Check style ĠIssue ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠCode N arc Ġ&& Ġreports . xml . destination . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcod en arc Ġ= ĠJ soup . parse ( reports . xml . destination . read Text (), Ġ"", ĠParser . xml Parser ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġcod en arc . getElementsBy Tag (" Package "). flatMap Ġ{ Ġcod en arc Package Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcod en arc Package . getElementsBy Tag (" File "). flatMap Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . getElementsBy Tag (" Violation "). map Ġ{ Ġviolation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġroot Project . relative Path ( file . attr (" name ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġviolation . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Elements By Tag (" Message "). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġget Elements By Tag (" Source Line "). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ filePath :${ violation . attr (" line Number ")} Ġ\ u 2 1 9 2 Ġ${ message . text () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . forEach Ġ{ Ġbuild Scan . value (" Code N arc ĠIssue ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġis Ec 2 Agent () Ġ= Ġjava . net . Inet Address . getLocal Host (). host Name . startsWith (" ip - ") ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . extract Ci Or Local Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ci Server ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag (" CI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ec 2 Agent ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag (" EC 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Tr avis Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink (" Tr avis ĠBuild ", ĠSystem . getenv (" TR AV IS _ BUILD _ WEB _ URL ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue (" Build ĠID ", ĠSystem . getenv (" TR AV IS _ BUILD _ ID ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Commit Id ( System . getenv (" TR AV IS _ COMMIT ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis J enkins Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink (" J enkins ĠBuild ", ĠSystem . getenv (" BUILD _ URL ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue (" Build ĠID ", ĠSystem . getenv (" BUILD _ ID ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Commit Id ( System . getenv (" GIT _ COMMIT ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink (" Team City ĠBuild ", ĠSystem . getenv (" BUILD _ URL ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue (" Build ĠID ", ĠSystem . getenv (" BUILD _ ID ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Commit Id ( System . getenv (" BUILD _ V CS _ NUMBER ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Env IsSet (" BUILD _ TYPE _ ID ") Ġ{ Ġbuild Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ( ci Build TypeName , Ġbuild Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink (" Build ĠType ĠSc ans ", Ġcustom Value Search Url ( map Of ( ci Build TypeName Ġto Ġbuild Type ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . tag (" LOCAL ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( listOf (" idea . registered ", Ġ" idea . active ", Ġ" idea . paths . selector "). map ( System :: getProperty ). filter NotNull (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . tag (" IDE A ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . getProperty (" idea . paths . selector ") ?. let Ġ{ Ġidea Version Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . value (" IDE A Ġversion ", Ġidea Version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠBuild Scan Extension . when Env IsSet ( env Name : ĠString , Ġaction : ĠBuild Scan Extension .( env Value : ĠString ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenv Value : ĠString ? Ġ= ĠSystem . getenv ( env Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! env Value . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( env Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . extract V cs Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Scan Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Ci Server ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Commit Id ( exec AndGet Stdout (" git ", Ġ" rev - parse ", Ġ"-- verify ", Ġ" HEAD ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec AndGet Stdout (" git ", Ġ" status ", Ġ"-- por cel ain "). take If Ġ{ Ġit . isNotEmpty () Ġ} ?. let Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag (" dirty ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue (" Git ĠStatus ", Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec AndGet Stdout (" git ", Ġ" rev - parse ", Ġ"-- abbrev - ref ", Ġ" HEAD "). take If Ġ{ Ġit . isNotEmpty () Ġ&& Ġit Ġ!= Ġ" HEAD " Ġ} ?. let Ġ{ Ġbranch Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag ( branch Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue (" Git ĠBranch ĠName ", Ġbranch Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . extract Build Cache Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( gradle . start Parameter . is Build Cache Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . tag (" C ACHED ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . extract V fs Retention Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwatch FileSystem Ġ= Ġproject . gradle . start Parameter . is Watch FileSystem ĊĠĠĠĠĠĠĠ Ġbuild Scan . value ( watch FileSystem Name , Ġwatch FileSystem . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . extract All Reports From CI () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcaptured Reporting Types Ġ= ĠlistOf (" html ") Ġ// Ġcan Ġadd Ġxml , Ġtext , Ġjunit Xml Ġif Ġwanted ĊĠĠĠĠĠĠĠ Ġval ĠbasePath Ġ= Ġ"${ System . getenv (" BUILD _ SERVER _ URL ") }/ repository / download /${ System . getenv (" BUILD _ TYPE _ ID ") }/${ System . getenv (" BUILD _ ID ") }: id " ĊĊĠĠĠĠĠĠĠ Ġgradle . task Graph . after Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . failure Ġ!= Ġnull Ġ&& Ġthis Ġis ĠReporting <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . reports . filter Ġ{ Ġit . name Ġin Ġcaptured Reporting Types Ġ&& Ġit . isEnabled Ġ&& Ġit . destination . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġreport Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Name Ġ= Ġ"${ this :: class . java . simple Name . split ("_ ")[ 0 ]} ĠReport Ġ($ path )" Ġ// ĠStrip Ġoff Ġ'_ Decorated ' Ġaddition Ġto Ġclass Ġnames ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsee : Ġci Reporting . gradle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreport Path Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( report . destination . isDirectory ) Ġ" report -${ project . name }-${ report . destination . name }. zip " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" report -${ project . name }-${ report . destination . parent File . name }-${ report . destination . name }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreport Link Ġ= Ġ"$ basePath /$ report Path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Scan . link ( link Name , Ġreport Link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠBuild Scan Extension . set Commit Id ( commit Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue ( git Commit Name , Ġcommit Id ) ĊĠĠĠĠĠĠĠ Ġlink (" Source ", Ġ" https :// github . com / gradle / gradle / commit /$ commit Id ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Tr avis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink (" Git ĠCommit ĠSc ans ", Ġcustom Value Search Url ( map Of ( git Commit Name Ġto Ġcommit Id ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink (" CI ĠCompile All ĠScan ", Ġcustom Value Search Url ( map Of ( git Commit Name Ġto Ġcommit Id )) Ġ+ Ġ"& search . tags = Compile All ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . do Not Upload In Background () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Scan . is Upload In Background Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġinline Ġfun Ġbuild Scan ( configure : ĠBuild Scan Extension . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Scan . apply ( configure ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ċ fun Ġcustom Value Search Url ( search : ĠMap < String , ĠString >): ĠString Ġ{ ĊĠĠĠ Ġval Ġquery Ġ= Ġsearch . map Ġ{ Ġ( name , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠ Ġ" search . names =${ name . url Encode ()} & search . values =${ value . url Encode () }" ĊĠĠĠ Ġ}. join ToString ("& ") ĊĊĠĠĠ Ġreturn Ġ"$ server Url / sc ans ?$ query " Ċ } ĊĊ Ċ private Ċ fun ĠString . url Encode () Ġ= ĠURL Encoder . encode ( this , ĠChar sets . UTF _ 8 . name ()) Ċ