https://github.com/softwaremill/sbt-softwaremill
A sane set of default build settings
https://github.com/softwaremill/sbt-softwaremill
Last synced: 9 months ago
JSON representation
A sane set of default build settings
- Host: GitHub
- URL: https://github.com/softwaremill/sbt-softwaremill
- Owner: softwaremill
- License: apache-2.0
- Created: 2018-01-27T15:05:29.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2025-04-18T07:41:13.000Z (9 months ago)
- Last Synced: 2025-04-18T21:10:39.399Z (9 months ago)
- Language: Scala
- Size: 584 KB
- Stars: 73
- Watchers: 26
- Forks: 11
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# sbt-softwaremill
[](https://travis-ci.org/softwaremill/sbt-softwaremill)
[](https://maven-badges.herokuapp.com/maven-central/com.softwaremill.sbt-softwaremill/sbt-softwaremill-common)
A sane set of common build settings.
## Usage
For each project where you'd like to use the build settings, add some or all of the following your `project/plugins.sbt`
file:
````scala
addSbtPlugin("com.softwaremill.sbt-softwaremill" % "sbt-softwaremill-common" % "2.0.25")
addSbtPlugin("com.softwaremill.sbt-softwaremill" % "sbt-softwaremill-publish" % "2.0.25")
addSbtPlugin("com.softwaremill.sbt-softwaremill" % "sbt-softwaremill-extra" % "2.0.25")
addSbtPlugin("com.softwaremill.sbt-softwaremill" % "sbt-softwaremill-browser-test-js" % "2.0.25")
````
Now you can add the appropriate settings in your `build.sbt`, e.g.:
````scala
import com.softwaremill.SbtSoftwareMillCommon.commonSmlBuildSettings
lazy val commonSettings = commonSmlBuildSettings ++ Seq(
// your settings, which can override some of commonSmlBuildSettings
)
````
Each dependency provides a choice of settings:
````scala
// common - compiler flags
import com.softwaremill.SbtSoftwareMillCommon.commonSmlBuildSettings
commonSmlBuildSettings
// publish
import com.softwaremill.Publish.ossPublishSettings
ossPublishSettings
// extra - use all or choose
lazy val extraSmlBuildSettings =
dependencyUpdatesSettings ++ // check dependency updates on startup (max once per 12h)
dependencyCheckSettings
// downloads the appropriate chrome/gecko driver for testing scala.js using scalajs-env-selenium and sets the jsenv
import com.softwaremill.SbtSoftwareMillBrowserTestJS.{browserChromeTestSettings, browserGeckoTestSettings}
browserChromeTestSettings
browserGeckoTestSettings
````
`sbt-softwaremill-common` comes with:
- [sbt-scalafmt](https://scalameta.org/scalafmt/docs/installation.html)
- [sbt-tpolecat](https://github.com/DavidGregory084/sbt-tpolecat)
`sbt-softwaremill-publish` comes with:
- [sbt-ci-release](https://github.com/olafurpg/sbt-ci-release)
`sbt-softwaremill-extra` comes with:
- [sbt-updates](https://github.com/rtimush/sbt-updates)
- [sbt-dependency-check](https://github.com/albuch/sbt-dependency-check)
## Sonatype setup
By default, the plugins use the new `s01.oss.sonatype.org` host for releasing to Sonatype. If your project isn't yet
[migrated](https://central.sonatype.org/news/20210223_new-users-on-s01/), you'll need to add the following to your
root project settings:
```scala
sonatypeCredentialHost := "oss.sonatype.org"
```
## Releasing your library
`sbt-softwaremill-publish` exposes a default configuration suitable for releasing open source libraries.
The release process is broken into two steps:
1. *local*: `sbt release`. This sbt command prepares the next release: asks about the version, updates the version
in the docs & readme, commits the changes and finally asks the user to push the changes. Your `README.md`,
`docs` and `doc` directory will be parsed for `"[organization]" %(%) "artifactId" % "someVersion"` and that
version value will be bumped.
2. *remote*: `sbt ci-release`. This sbt command should be run on GH actions, triggered when a new tag is pushed. It
publishes the artifacts to sonatype, and invokes repository release.
To setup the remote part, follow the guide on [sbt-ci-release](https://github.com/olafurpg/sbt-ci-release). You can
also take a look at this project's `.github/workflows/ci.yml`.
You might need to explicitly set the sonatype profile name:
```scala
val commonSettings = ossPublishSettings ++ Seq(
sonatypeProfileName := "com.example"
)
```
## Releasing sbt-softwaremill
sbt-softwaremill release process is setup on GH Actions. This plugin uses itself to publish binaries to oss-sonatype.
## Note for migrating from sbt-softwaremill 1.x series
You should remove `version.sbt` file as it's no longer used, and it may disrupt the release process. In the 2.x series the version is deduced from git tags and the current state using [https://github.com/dwijnand/sbt-dynver](https://github.com/dwijnand/sbt-dynver).
Moreover, a number of bundled plugins are removed, which aren't available for Scala3 and would cause build problems