- Notifications
You must be signed in to change notification settings - Fork17
sbt plugin for scala modules.
License
scala/sbt-scala-module
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is an sbt 1.x plugin for building Scala modules.
For historical reasons, these were originally part of the Scala standard library. They live on as modules since they are in thescala.
namespace and keeping them there preserves source compatibility with old source code that uses them. They are now community-maintained and largely frozen in design, though still open to minor improvements.
These modules are maintained by the Scala organization, with community input and participation. They have an especially close relationship with the Scala standard library (or, in the case of scala-async, the Scala 2 compiler).
Code that could become part of the standard library in the future.
Having a shared plugin reduces duplication between the aboverepositories. Reducing duplication makes maintenance easier andhelps ensure consistency.
A major feature of the plugin is automated tag-based publishing usingsbt-ci-release. A release is made by pushing a tag to GitHub.
The plugin also brings in
- sbt-dynver to set the
version
based on the git history - sbt-version-policy to check the versioning policy using MiMa
- sbt-header to automate copyright header maintenance
- sbt-osgi, if enabled with
scalaModuleOsgiSettings
Add the plugin to theproject/plugins.sbt
file:
addSbtPlugin("org.scala-lang.modules" % "sbt-scala-module" % <version>)
Then, in yourbuild.sbt
add:
// In a multi-project build, you might want to apply these settings only to the// main project (see e.g. scala-parallel-collections)ScalaModulePlugin.scalaModuleSettings// If making an OSGi bundleScalaModulePlugin.scalaModuleOsgiSettingsname := "<module name>"repoName := "<GitHub repo name>" // the repo under github.com/scala/, only required if different from nameorganization := "<org>" // only required if different from "org.scala-lang.modules"versionPolicyIntention := Compatibility.BinaryAndSourceCompatible // enables MiMa (`Compatibility.None` by default, which disables it)OsgiKeys.exportPackage := Seq(s"<exported package>;version=${version.value}")// Other settings
Cross-building with Scala.js and Scala Native is possible. See scala-xml or scala-parser-combinators for examples.
These additional settings are enabled byscalaModuleSettings
:
Compile / compile / scalacOptions ++= Seq("-feature", "-deprecation", "-unchecked", "-Xlint")
- A
projectName.properties
file is generated and packaged Test / fork := true
to work around some classpath clashes with scala-xml- POM metadata
The following settings are also available:
enableOptimizer
adds-opt-inline-from:<sources>
or-opt:l:project
or-optimize
toCompile / compile / scalacOptions
,depending on the Scala version
The instructions here are a summary of the readme inhttps://github.com/olafurpg/sbt-ci-release andhttps://github.com/scalacenter/sbt-version-policy
Create a fresh GPG key:
gpg --gen-key
- Real name: use "project-name bot"
- Email: "something@scala-lang.org"
- Passphrase: generate one yourself
Get the key
LONG_ID
from the output and setLONG_ID=6E8ED79B03AD527F1B281169D28FC818985732D9
. The output looks like this:pub rsa2048 2018-06-10 [SC] [expires: 2020-06-09] $LONG_ID
Copy the public key to a key server
gpg --armor --export $LONG_ID
- http://keyserver.ubuntu.com:11371/
In your repo's Actions settings, define four secret env vars
PGP_PASSPHRASE
the passphrase you chose abovePGP_SECRET
the secret key in base64- macOS:
gpg --armor --export-secret-keys $LONG_ID | base64
- ubuntu:
gpg --armor --export-secret-keys $LONG_ID | base64 -w0
- macOS:
SONATYPE_PASSWORD
: need that oneSONATYPE_USERNAME
: that one too
Run
versionCheck
in the publishing process:sbt versionCheck ci-release
About
sbt plugin for scala modules.