Skipping Travis CI builds for snapshot release commits with sbt-release
#
If you use sbt-release with the MAJOR.MINOR.PATCH
and MAJOR.MINOR.PATCH+1-SNAPSHOT
style of release versioning, this creates two commits when you run sbt release
that differ only in the contents of the version.sbt
file.
Unfortunately, if you’re using a continuous integration system like Travis CI, those two commits both trigger full builds. There’s really no point for that, since there’s no difference in the code. Fortunately, Travis CI (and other systems) support marking a commit with [ci skip]
to skip the build.
You can customize the commit message by changing the releaseCommitMessage
setting. However, releaseCommitMessage
is used for both the commitReleaseVersion
and commitNextVersion
actions, so some conditional logic is needed.
The default value looks like this:
releaseCommitMessage := s"Setting version to ${if (releaseUseGlobalVersion.value) (version in ThisBuild).value else version.value}"
Change releaseCommitMessage
so that if the version ends with “-SNAPSHOT” then " [ci skip]" is appended to the message:
releaseCommitMessage := "Setting version to " + s"${if (releaseUseGlobalVersion.value) (version in ThisBuild).value else version.value}" + s"${if (if (releaseUseGlobalVersion.value) (version in ThisBuild) else version).value.endsWith("-SNAPSHOT")) " [ci skip]" else ""}"
Now you’ll end up with release commits that look like “Setting version to 1.2.3” and snapshot commits that look like “Setting version to 1.2.4-SNAPSHOT [ci skip]”.