package Ġcom . lif tric . oct opus deploy . task Ċ Ċ import Ġcom . lif tric . oct opus deploy . shell Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġorg . gradle . kotlin . dsl . property Ċ Ċ open Ġclass ĠProm ote Release Task Ġ: ĠDefault Task () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" oct opus " ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Prom otes Ġa Ġrelease ." ĊĠĠĠĠĠĠĠ Ġoutputs . up ToDate When Ġ{ Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġval Ġoct opus Url Ġ= Ġproject . objects . property ( String :: class . java ) ĊĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġval ĠapiKey Ġ= Ġproject . objects . property ( String :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTarget Ġoct opus Ġproject Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġval ĠprojectName Ġ= Ġproject . objects . property ( String :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSource Ġoct opus Ġenvironment Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġval Ġfrom Ġ= Ġproject . objects . property ( String :: class . java ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTarget Ġoct opus Ġenvironment Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġval Ġto Ġ= Ġproject . objects . property ( String :: class . java ) ĊĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval ĠwaitFor Release Deployments : ĠProperty < Boolean > Ġ= Ġproject . objects . property () ĊĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġwait Timeout Seconds : ĠProperty < Long > Ġ= Ġproject . objects . property () ĊĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġdelay Between Checks Seconds : ĠProperty < Long > Ġ= Ġproject . objects . property () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ures Ġthe Ġhttp Ġlogging Ġof Ġthe Ġunderlying Ġokhttp Ġclient Ġused Ġfor Ġoct opus Ġapi Ġrequests ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġhttp LogLevel : ĠProperty < Http Logging Interceptor . Level > Ġ= Ġproject . objects . property () ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġawait Releases Ġ= ĠwaitFor Release Deployments . getOrElse ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġoct opus Url Value Ġ= Ġoct opus Url . get () ĊĠĠĠĠĠĠĠ Ġval Ġapi KeyValue Ġ= ĠapiKey . get () ĊĠĠĠĠĠĠĠ Ġval ĠprojectName Value Ġ= ĠprojectName . get () ĊĠĠĠĠĠĠĠ Ġval Ġfrom Value Ġ= Ġfrom . get () ĊĠĠĠĠĠĠĠ Ġval Ġto Value Ġ= Ġto . get () ĊĠĠĠĠĠĠĠ Ġval Ġ( exit Code , Ġinput Text , Ġerror Text ) Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" oct o ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" prom ote - release ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- server =$ oct opus Url Value ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- apiKey =$ api KeyValue ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- project =$ projectName Value ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- from =$ from Value ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- to =$ to Value " ĊĠĠĠĠĠĠĠ Ġ). join ToString (" Ġ"). let Ġ{ Ġshell ( it , Ġlogger ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( exit Code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( input Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( error Text ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" oct o Ġpromote - release Ġreturned Ġnon - zero Ġexit Code : Ġ$ exit Code ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( input Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( error Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" oct o Ġpromote - release Ġexit Code : Ġ$ exit Code ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( await Releases . not ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġawait Release Logic ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoct opus Url Value Ġ= Ġoct opus Url Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi KeyValue Ġ= Ġapi KeyValue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwait Timeout Seconds Ġ= Ġwait Timeout Seconds . getOrElse ( 6 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Between Checks Seconds Ġ= Ġdelay Between Checks Seconds . getOrElse ( 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi LogLevel Ġ= Ġhttp LogLevel . getOrElse ( Http Logging Interceptor . Level . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Logic Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetermin Any O ngo ing Task ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectName Ġ= ĠprojectName Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Env Ġ= Ġfrom Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Env Ġ= Ġto Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ