The purpose of this plugin is to enforce the use of Conventional Commit in an sbt-based Scala project.
In the project/plugins.sbt file add the plugin:
addSbtPlugin("it.nicolasfarabegoli" % "sbt-conventional-commits" % <version>)In order to run the task as soon as the project is loaded you should configure the build.sbt as follows:
lazy val startupTransition: State => State = "conventionalCommits" :: _
lazy val root = project
.in(file("."))
.settings(
// Other settings...
Global / onLoad ~= (_ andThen ("conventionalCommits" :: _))
)If you want to manually run the task the command is:
sbt> conventionalCommitsThe task creates a git hooks file that enforces that each commit is compliant with the Conventional Commit convention:
> git commit -m "message"
The commit message does not meet the Conventional Commit standard
An example of a valid message is:
feat(login): add the 'remember me' button
More details at: https://www.conventionalcommits.org/en/v1.0.0/#summary
> git commit -m "feat: we love conventional commit!"
Conventional Commit standards...You can configure the available types for your commits by setting the ThisBuild / conventionalCommits / types key.
The default commit types are build, chore, ci, docs, feat, fix, perf, refactor, revert, style, and test.
ThisBuild / conventionalCommits / types := Seq("feat", "fix") // Allow only feat and fix commits
ThisBuild / conventionalCommits / types ++= Seq("some", "other") // Allow "some" and "other" in addition to the default typesIn the same way, you can restrict the available scopes by setting the ThisBuild / conventionalCommits / scopes key.
By default, all scopes are allowed.
ThisBuild / conventionalCommits / scopes := Seq() // Allow all scopes
ThisBuild / conventionalCommits / scopes := Seq("scope1", "scope2") // Allow only scope1 and scope2You can also configure the success and failure messages displayed when committing, respectively by changing the
ThisBuild / conventionalCommits / successMessage and ThisBuild / conventionalCommits / failureMessage keys.
You can freely use color codes and newlines in the provided message.
ThisBuild / conventionalCommits / successMessage = None // Won't display a success message
ThisBuild / conventionalCommits / successMessage = Some("\\e[32mCongratulations!\\e[0m") // Shows "Congratulations" in green| Key | Description | Default |
|---|---|---|
warningIfNoGitRoot |
A warning is raised if no .git root is found walking up until the / from the project folder. |
true |
types |
List of admitted types in the commit message. | build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test |
scopes |
List of admitted scopes in the commit message. An empty list means that all scopes are admitted | emptyList |
successMessage |
A message printed if the commit meets conventional commit. If null is set, no message is printed. |
"Commit message meets Conventional Commit standards..." |
failureMessage |
A message printed if the commit not meets conventional commit. If null is set no message is printed. |
"The commit message does not meet the Conventional Commit standard" |