Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sbt/sbt-buildinfo
I know this because build.sbt knows this.
https://github.com/sbt/sbt-buildinfo
code-generator sbt sbt-plugin
Last synced: 3 days ago
JSON representation
I know this because build.sbt knows this.
- Host: GitHub
- URL: https://github.com/sbt/sbt-buildinfo
- Owner: sbt
- License: mit
- Created: 2012-03-03T14:47:30.000Z (almost 13 years ago)
- Default Branch: develop
- Last Pushed: 2024-12-26T21:54:52.000Z (26 days ago)
- Last Synced: 2025-01-12T03:33:38.432Z (10 days ago)
- Topics: code-generator, sbt, sbt-plugin
- Language: Scala
- Homepage:
- Size: 409 KB
- Stars: 554
- Watchers: 23
- Forks: 90
- Open Issues: 12
-
Metadata Files:
- Readme: README.markdown
- License: LICENSE
Awesome Lists containing this project
- awesome-sbt-plugins - sbt-buildinfo - I know this because build.sbt knows this. (SOURCE)
README
sbt-buildinfo
=============*I know this because build.sbt knows this.*
sbt-buildinfo generates Scala source from your build definitions.
Latest Stable
-------------For sbt 1.x add sbt-buildinfo as a dependency in `project/plugins.sbt`:
[![sbt-buildinfo Scala version support](https://index.scala-lang.org/sbt/sbt-buildinfo/sbt-buildinfo/latest-by-scala-version.svg?targetType=Sbt)](https://index.scala-lang.org/sbt/sbt-buildinfo/sbt-buildinfo)
```scala
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "x.y.z")
```- For `sbt >= 0.13.6`, see [0.11.0](https://github.com/sbt/sbt-buildinfo/tree/v0.11.0).
- For `sbt < 0.13.6`, see [0.3.2](https://github.com/sbt/sbt-buildinfo/tree/0.3.2).Usage
-----Add the following in your `build.sbt`:
```scala
lazy val root = (project in file(".")).
enablePlugins(BuildInfoPlugin).
settings(
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoPackage := "hello"
)
```When you reload the settings and compile, this generates the following:
```scala
package hello/** This object was generated by sbt-buildinfo. */
case object BuildInfo {
/** The value is "helloworld". */
val name: String = "helloworld"
/** The value is "0.1-SNAPSHOT". */
val version: String = "0.1-SNAPSHOT"
/** The value is "2.10.3". */
val scalaVersion: String = "2.10.3"
/** The value is "0.13.2". */
val sbtVersion: String = "0.13.2"
override val toString: String = "name: %s, version: %s, scalaVersion: %s, sbtVersion: %s".format(name, version, scalaVersion, sbtVersion)
}
```As this is generated source it will be found under `target`, specifically for a Scala 2.11 project under `target/scala-2.11/src_managed/main/sbt-buildinfo`
Customize `buildInfoKeys` by adding whatever keys you want to have in `BuildInfo`. You can use `BuildInfoKey.map` to change the generated field name and value, add new fields with tuples, or add new fields with values computed at build-time. Note: `BuildInfoKey.map` can handle both `SettingKey[T]` and `TaskKey[T]` types as arguments:
```scala
buildInfoKeys ++= Seq[BuildInfoKey](
resolvers,
Test / libraryDependencies,
BuildInfoKey.map(name) { case (k, v) => "project" + k.capitalize -> v.capitalize },
"custom" -> 1234, // computed at project load time
BuildInfoKey.action("buildTime") {
System.currentTimeMillis
} // re-computed each time at compile
)
```This generates:
```scala
/** The value is Seq("Sonatype Public: https://oss.sonatype.org/content/groups/public"). */
val resolvers: Seq[String] = Seq("Sonatype Public: https://oss.sonatype.org/content/groups/public")
/** The value is Seq("org.scala-lang:scala-library:2.9.1", ...). */
val test_libraryDependencies: Seq[String] = Seq("org.scala-lang:scala-library:2.9.1", ...)
/** The value is "Helloworld". */
val projectName = "Helloworld"
/** The value is 1234. */
val custom = 1234
/** The value is 1346906092160L. */
val buildTime = 1346906092160L
```Tasks can be added only if they do not depend on `sourceGenerators`. Otherwise, it will cause an infinite loop.
Here's how to change the generated object name:
```scala
buildInfoObject := "Info"
```This changes the generated object name to `object Info`. Changing the object name is optional, but to avoid name clash with other jars, package name should be unique. Use `buildInfoPackage` key for this.
```scala
buildInfoPackage := "hello"
```### build number
A build number can be generated as follows. Note that cross building against multiple Scala would each generate a new number.
```scala
buildInfoKeys += buildInfoBuildNumber
```### BuildInfoOption.ToMap
Add the following option
```scala
buildInfoOptions += BuildInfoOption.ToMap
```to generate `toMap` method:
```scala
val toMap = Map[String, Any](
"name" -> name,
"version" -> version,
"scalaVersion" -> scalaVersion,
"sbtVersion" -> sbtVersion)
```### BuildInfoOption.ToJson
Add the following option
```scala
buildInfoOptions += BuildInfoOption.ToJson
```to generate `toJson` method.
### BuildInfoOption.Traits
Add the following option
```scala
buildInfoOptions += BuildInfoOption.Traits("TestTrait1", "TestTrait2")
```to mixin traits to the generated object.
### BuildInfoOption.BuildTime
Add the following option
```scala
buildInfoOptions += BuildInfoOption.BuildTime
```to add timestamp values:
```scala
/** The value is "2015-07-30 03:30:16.849-0700". */
val builtAtString: String = "2015-07-30 03:30:16.849-0700"
/** The value is 1438227016849L. */
val builtAtMillis: Long = 1438227016849L
```### BuildInfoOption.PackagePrivate
Set the package using `buildInfoPackage` and use the option `BuildInfoOption.PackagePrivate`
```scala
buildInfoPackage := "hello"
buildInfoOptions += BuildInfoOption.PackagePrivate
```to make the generated `BuildInfo` object package private:
```scala
/** This object was generated by sbt-buildinfo. */
private[hello] case object BuildInfo {
...
}
```### BuildInfoOption.ConstantValue
Add the following option
```scala
buildInfoOptions += BuildInfoOption.ConstantValue
```
to have all vals in the `BuildInfo` object declared `final` and without an explicit type annotation:```scala
/** This object was generated by sbt-buildinfo. */
case object BuildInfo {
/** The value is "helloworld". */
final val name = "helloworld"
...
}
```This is particular useful if the values must be constants – e.g., if you need to assign them to annotation arguments.
### BuildInfoOption.ImportScalaPredef
Add the following option
```scala
buildInfoOptions += BuildInfoOption.ImportScalaPredef
```to explicitly import `scala.Predef._` in the generated code.
```scala
package helloimport scala.Predef._
/** This object was generated by sbt-buildinfo. */
case object BuildInfo {
...
}
```This import is necessary only when using compiler option `-Yno-imports`. Please note, the generated import is not compatible when compiling with Scala 3 compiler option `-source:future` because import wildcards must be `*`.
License
-------MIT License