1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.technical
21 
22 import akka.http.scaladsl.server.Route
23 import buildinfo.BuildInfo
24 import io.circe.{Encoder, Json}
25 import io.circe.generic.semiauto.deriveEncoder
26 import io.circe.syntax._
27 import org.make.api.technical.MakeDirectives.MakeDirectivesDependencies
28 
29 import scala.util.Using
30 
31 trait BuildInfoRoutes extends MakeDirectives {
32   this: MakeDirectivesDependencies =>
33 
34   val buildRoutes: Route = buildInfo
35 
36   private lazy val legacyJsonVersion = BuildInformation().asJson
37   private val jsonVersion: Json = Using(scala.io.Source.fromFile("/opt/docker/version")) { source =>
38     io.circe.parser.parse(source.mkString).toTry
39   }.flatten.getOrElse(legacyJsonVersion)
40 
41   def buildInfo: Route = get {
42     path("version") {
43       makeOperation("version") { _ =>
44         complete(jsonVersion)
45       }
46     }
47   }
48 }
49 
50 final case class BuildInformation(
51   name: String = BuildInfo.name,
52   version: String = BuildInfo.version,
53   gitHeadCommit: String = BuildInfo.gitHeadCommit.getOrElse("no commit information"),
54   gitBranch: String = BuildInfo.gitCurrentBranch,
55   buildTime: String = BuildInfo.buildTime
56 )
57 
58 object BuildInformation {
59   implicit val encoder: Encoder[BuildInformation] = deriveEncoder
60 }
Line Stmt Id Pos Tree Symbol Tests Code
34 31634 1158 - 1167 Select org.make.api.technical.BuildInfoRoutes.buildInfo BuildInfoRoutes.this.buildInfo
37 44407 1299 - 1320 Literal <nosymbol> "/opt/docker/version"
37 40532 1274 - 1321 ApplyToImplicitArgs scala.io.Source.fromFile scala.io.Source.fromFile("/opt/docker/version")(io.this.Codec.fallbackSystemCodec)
37 50948 1323 - 1323 Select scala.util.Using.Releasable.AutoCloseableIsReleasable Using.this.Releasable.AutoCloseableIsReleasable
38 32113 1361 - 1376 Select scala.collection.IterableOnceOps.mkString source.mkString
38 45430 1378 - 1378 TypeApply scala.<:<.refl scala.this.<:<.refl[io.circe.ParsingFailure]
38 38176 1339 - 1383 ApplyToImplicitArgs scala.util.Either.toTry io.circe.parser.`package`.parse(source.mkString).toTry(scala.this.<:<.refl[io.circe.ParsingFailure])
39 38659 1268 - 1424 Apply scala.util.Try.getOrElse scala.util.Using.apply[scala.io.BufferedSource, scala.util.Try[io.circe.Json]](scala.io.Source.fromFile("/opt/docker/version")(io.this.Codec.fallbackSystemCodec))(((source: scala.io.BufferedSource) => io.circe.parser.`package`.parse(source.mkString).toTry(scala.this.<:<.refl[io.circe.ParsingFailure])))(Using.this.Releasable.AutoCloseableIsReleasable).flatten[io.circe.Json](scala.this.<:<.refl[scala.util.Try[io.circe.Json]]).getOrElse[io.circe.Json](BuildInfoRoutes.this.legacyJsonVersion)
39 47045 1388 - 1388 TypeApply scala.<:<.refl scala.this.<:<.refl[scala.util.Try[io.circe.Json]]
41 46311 1451 - 1564 Apply scala.Function1.apply server.this.Directive.addByNameNullaryApply(BuildInfoRoutes.this.get).apply(server.this.Directive.addByNameNullaryApply(BuildInfoRoutes.this.path[Unit](BuildInfoRoutes.this._segmentStringToPathMatcher("version"))).apply(server.this.Directive.addDirectiveApply[(org.make.core.RequestContext,)](BuildInfoRoutes.this.makeOperation("version", BuildInfoRoutes.this.makeOperation$default$2, BuildInfoRoutes.this.makeOperation$default$3))(util.this.ApplyConverter.hac1[org.make.core.RequestContext]).apply(((x$1: org.make.core.RequestContext) => BuildInfoRoutes.this.complete(marshalling.this.ToResponseMarshallable.apply[io.circe.Json](BuildInfoRoutes.this.jsonVersion)(marshalling.this.Marshaller.liftMarshaller[io.circe.Json](BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1))))))))
41 31047 1451 - 1454 Select akka.http.scaladsl.server.directives.MethodDirectives.get BuildInfoRoutes.this.get
42 44443 1466 - 1475 ApplyImplicitView akka.http.scaladsl.server.ImplicitPathMatcherConstruction._segmentStringToPathMatcher BuildInfoRoutes.this._segmentStringToPathMatcher("version")
42 50134 1461 - 1560 Apply scala.Function1.apply server.this.Directive.addByNameNullaryApply(BuildInfoRoutes.this.path[Unit](BuildInfoRoutes.this._segmentStringToPathMatcher("version"))).apply(server.this.Directive.addDirectiveApply[(org.make.core.RequestContext,)](BuildInfoRoutes.this.makeOperation("version", BuildInfoRoutes.this.makeOperation$default$2, BuildInfoRoutes.this.makeOperation$default$3))(util.this.ApplyConverter.hac1[org.make.core.RequestContext]).apply(((x$1: org.make.core.RequestContext) => BuildInfoRoutes.this.complete(marshalling.this.ToResponseMarshallable.apply[io.circe.Json](BuildInfoRoutes.this.jsonVersion)(marshalling.this.Marshaller.liftMarshaller[io.circe.Json](BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1)))))))
42 36606 1461 - 1476 Apply akka.http.scaladsl.server.directives.PathDirectives.path BuildInfoRoutes.this.path[Unit](BuildInfoRoutes.this._segmentStringToPathMatcher("version"))
43 37070 1485 - 1485 Select org.make.api.technical.MakeDirectives.makeOperation$default$3 BuildInfoRoutes.this.makeOperation$default$3
43 32150 1499 - 1508 Literal <nosymbol> "version"
43 37105 1485 - 1554 Apply scala.Function1.apply server.this.Directive.addDirectiveApply[(org.make.core.RequestContext,)](BuildInfoRoutes.this.makeOperation("version", BuildInfoRoutes.this.makeOperation$default$2, BuildInfoRoutes.this.makeOperation$default$3))(util.this.ApplyConverter.hac1[org.make.core.RequestContext]).apply(((x$1: org.make.core.RequestContext) => BuildInfoRoutes.this.complete(marshalling.this.ToResponseMarshallable.apply[io.circe.Json](BuildInfoRoutes.this.jsonVersion)(marshalling.this.Marshaller.liftMarshaller[io.circe.Json](BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1))))))
43 46800 1498 - 1498 TypeApply akka.http.scaladsl.server.util.ApplyConverterInstances.hac1 util.this.ApplyConverter.hac1[org.make.core.RequestContext]
43 50984 1485 - 1509 Apply org.make.api.technical.MakeDirectives.makeOperation BuildInfoRoutes.this.makeOperation("version", BuildInfoRoutes.this.makeOperation$default$2, BuildInfoRoutes.this.makeOperation$default$3)
43 45179 1485 - 1485 Select org.make.api.technical.MakeDirectives.makeOperation$default$2 BuildInfoRoutes.this.makeOperation$default$2
44 30801 1534 - 1534 Select de.heikoseeberger.akkahttpcirce.BaseCirceSupport.jsonMarshaller$default$1 BuildInfoRoutes.this.jsonMarshaller$default$1
44 36644 1534 - 1534 ApplyToImplicitArgs akka.http.scaladsl.marshalling.LowPriorityToResponseMarshallerImplicits.liftMarshaller marshalling.this.Marshaller.liftMarshaller[io.circe.Json](BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1))
44 31907 1534 - 1545 ApplyToImplicitArgs akka.http.scaladsl.marshalling.ToResponseMarshallable.apply marshalling.this.ToResponseMarshallable.apply[io.circe.Json](BuildInfoRoutes.this.jsonVersion)(marshalling.this.Marshaller.liftMarshaller[io.circe.Json](BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1)))
44 45212 1525 - 1546 Apply akka.http.scaladsl.server.directives.RouteDirectives.complete BuildInfoRoutes.this.complete(marshalling.this.ToResponseMarshallable.apply[io.circe.Json](BuildInfoRoutes.this.jsonVersion)(marshalling.this.Marshaller.liftMarshaller[io.circe.Json](BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1))))
44 43594 1534 - 1534 ApplyToImplicitArgs de.heikoseeberger.akkahttpcirce.BaseCirceSupport.jsonMarshaller BuildInfoRoutes.this.jsonMarshaller(BuildInfoRoutes.this.jsonMarshaller$default$1)
44 38695 1534 - 1545 Select org.make.api.technical.BuildInfoRoutes.jsonVersion BuildInfoRoutes.this.jsonVersion
59 38451 1934 - 1947 ApplyToImplicitArgs io.circe.generic.semiauto.deriveEncoder io.circe.generic.semiauto.deriveEncoder[org.make.api.technical.BuildInformation]({ val inst$macro$24: io.circe.generic.encoding.DerivedAsObjectEncoder[org.make.api.technical.BuildInformation] = { final class anon$lazy$macro$23 extends AnyRef with Serializable { def <init>(): anon$lazy$macro$23 = { anon$lazy$macro$23.super.<init>(); () }; <stable> <accessor> lazy val inst$macro$1: io.circe.generic.encoding.DerivedAsObjectEncoder[org.make.api.technical.BuildInformation] = encoding.this.DerivedAsObjectEncoder.deriveEncoder[org.make.api.technical.BuildInformation, shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](shapeless.this.LabelledGeneric.materializeProduct[org.make.api.technical.BuildInformation, (Symbol @@ String("name")) :: (Symbol @@ String("version")) :: (Symbol @@ String("gitHeadCommit")) :: (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil, String :: String :: String :: String :: String :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](DefaultSymbolicLabelling.instance[org.make.api.technical.BuildInformation, (Symbol @@ String("name")) :: (Symbol @@ String("version")) :: (Symbol @@ String("gitHeadCommit")) :: (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil](::.apply[Symbol @@ String("name"), (Symbol @@ String("version")) :: (Symbol @@ String("gitHeadCommit")) :: (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil.type](scala.Symbol.apply("name").asInstanceOf[Symbol @@ String("name")], ::.apply[Symbol @@ String("version"), (Symbol @@ String("gitHeadCommit")) :: (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil.type](scala.Symbol.apply("version").asInstanceOf[Symbol @@ String("version")], ::.apply[Symbol @@ String("gitHeadCommit"), (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil.type](scala.Symbol.apply("gitHeadCommit").asInstanceOf[Symbol @@ String("gitHeadCommit")], ::.apply[Symbol @@ String("gitBranch"), (Symbol @@ String("buildTime")) :: shapeless.HNil.type](scala.Symbol.apply("gitBranch").asInstanceOf[Symbol @@ String("gitBranch")], ::.apply[Symbol @@ String("buildTime"), shapeless.HNil.type](scala.Symbol.apply("buildTime").asInstanceOf[Symbol @@ String("buildTime")], HNil)))))), Generic.instance[org.make.api.technical.BuildInformation, String :: String :: String :: String :: String :: shapeless.HNil](((x0$3: org.make.api.technical.BuildInformation) => x0$3 match { case (name: String, version: String, gitHeadCommit: String, gitBranch: String, buildTime: String): org.make.api.technical.BuildInformation((name$macro$17 @ _), (version$macro$18 @ _), (gitHeadCommit$macro$19 @ _), (gitBranch$macro$20 @ _), (buildTime$macro$21 @ _)) => ::.apply[String, String :: String :: String :: String :: shapeless.HNil.type](name$macro$17, ::.apply[String, String :: String :: String :: shapeless.HNil.type](version$macro$18, ::.apply[String, String :: String :: shapeless.HNil.type](gitHeadCommit$macro$19, ::.apply[String, String :: shapeless.HNil.type](gitBranch$macro$20, ::.apply[String, shapeless.HNil.type](buildTime$macro$21, HNil))))).asInstanceOf[String :: String :: String :: String :: String :: shapeless.HNil] }), ((x0$4: String :: String :: String :: String :: String :: shapeless.HNil) => x0$4 match { case (head: String, tail: String :: String :: String :: String :: shapeless.HNil): String :: String :: String :: String :: String :: shapeless.HNil((name$macro$12 @ _), (head: String, tail: String :: String :: String :: shapeless.HNil): String :: String :: String :: String :: shapeless.HNil((version$macro$13 @ _), (head: String, tail: String :: String :: shapeless.HNil): String :: String :: String :: shapeless.HNil((gitHeadCommit$macro$14 @ _), (head: String, tail: String :: shapeless.HNil): String :: String :: shapeless.HNil((gitBranch$macro$15 @ _), (head: String, tail: shapeless.HNil): String :: shapeless.HNil((buildTime$macro$16 @ _), HNil))))) => technical.this.BuildInformation.apply(name$macro$12, version$macro$13, gitHeadCommit$macro$14, gitBranch$macro$15, buildTime$macro$16) })), hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("name"), String, (Symbol @@ String("version")) :: (Symbol @@ String("gitHeadCommit")) :: (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil, String :: String :: String :: String :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("version"), String, (Symbol @@ String("gitHeadCommit")) :: (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil, String :: String :: String :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("gitHeadCommit"), String, (Symbol @@ String("gitBranch")) :: (Symbol @@ String("buildTime")) :: shapeless.HNil, String :: String :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("gitBranch"), String, (Symbol @@ String("buildTime")) :: shapeless.HNil, String :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("buildTime"), String, shapeless.HNil, shapeless.HNil, shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hnilZipWithKeys, Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("buildTime")]](scala.Symbol.apply("buildTime").asInstanceOf[Symbol @@ String("buildTime")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("buildTime")]])), Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("gitBranch")]](scala.Symbol.apply("gitBranch").asInstanceOf[Symbol @@ String("gitBranch")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("gitBranch")]])), Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("gitHeadCommit")]](scala.Symbol.apply("gitHeadCommit").asInstanceOf[Symbol @@ String("gitHeadCommit")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("gitHeadCommit")]])), Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("version")]](scala.Symbol.apply("version").asInstanceOf[Symbol @@ String("version")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("version")]])), Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("name")]](scala.Symbol.apply("name").asInstanceOf[Symbol @@ String("name")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("name")]])), scala.this.<:<.refl[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]), shapeless.Lazy.apply[io.circe.generic.encoding.ReprAsObjectEncoder[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]](anon$lazy$macro$23.this.inst$macro$22)).asInstanceOf[io.circe.generic.encoding.DerivedAsObjectEncoder[org.make.api.technical.BuildInformation]]; <stable> <accessor> lazy val inst$macro$22: io.circe.generic.encoding.ReprAsObjectEncoder[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out] = ({ final class $anon extends io.circe.generic.encoding.ReprAsObjectEncoder[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out] { def <init>(): <$anon: io.circe.generic.encoding.ReprAsObjectEncoder[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]> = { $anon.super.<init>(); () }; private[this] val circeGenericEncoderForbuildTime: io.circe.Encoder[String] = circe.this.Encoder.encodeString; final def encodeObject(a: shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): io.circe.JsonObject = a match { case (head: shapeless.labelled.FieldType[Symbol @@ String("name"),String], tail: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForname @ _), (head: shapeless.labelled.FieldType[Symbol @@ String("version"),String], tail: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForversion @ _), (head: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String], tail: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForgitHeadCommit @ _), (head: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String], tail: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForgitBranch @ _), (head: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String], tail: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForbuildTime @ _), shapeless.HNil))))) => io.circe.JsonObject.fromIterable(scala.collection.immutable.Vector.apply[(String, io.circe.Json)](scala.Tuple2.apply[String, io.circe.Json]("name", $anon.this.circeGenericEncoderForbuildTime.apply(circeGenericHListBindingForname)), scala.Tuple2.apply[String, io.circe.Json]("version", $anon.this.circeGenericEncoderForbuildTime.apply(circeGenericHListBindingForversion)), scala.Tuple2.apply[String, io.circe.Json]("gitHeadCommit", $anon.this.circeGenericEncoderForbuildTime.apply(circeGenericHListBindingForgitHeadCommit)), scala.Tuple2.apply[String, io.circe.Json]("gitBranch", $anon.this.circeGenericEncoderForbuildTime.apply(circeGenericHListBindingForgitBranch)), scala.Tuple2.apply[String, io.circe.Json]("buildTime", $anon.this.circeGenericEncoderForbuildTime.apply(circeGenericHListBindingForbuildTime)))) } }; new $anon() }: io.circe.generic.encoding.ReprAsObjectEncoder[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]).asInstanceOf[io.circe.generic.encoding.ReprAsObjectEncoder[shapeless.labelled.FieldType[Symbol @@ String("name"),String] :: shapeless.labelled.FieldType[Symbol @@ String("version"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitHeadCommit"),String] :: shapeless.labelled.FieldType[Symbol @@ String("gitBranch"),String] :: shapeless.labelled.FieldType[Symbol @@ String("buildTime"),String] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]] }; new anon$lazy$macro$23().inst$macro$1 }; shapeless.Lazy.apply[io.circe.generic.encoding.DerivedAsObjectEncoder[org.make.api.technical.BuildInformation]](inst$macro$24) })