diff --git a/.travis.yml b/.travis.yml
index c93ef49..dda8574 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,35 +1,57 @@
sudo: false
language: scala
-scala:
- - 2.13.1
- - 2.12.10
-
jdk:
- openjdk11
-dist: xenial
-
before_install:
+ - git fetch --tags
- export PATH=${PATH}:./vendor/bundle
-install:
- - rvm use 2.6.0 --install --fuzzy
- - gem update --system
- - gem install sass
- - gem install jekyll -v 3.2.1
-
-script:
- - sbt ++$TRAVIS_SCALA_VERSION test
- - test $TRAVIS_SCALA_VERSION == "2.13.1" || sbt ++$TRAVIS_SCALA_VERSION mimaReportBinaryIssues
- - test $TRAVIS_SCALA_VERSION == "2.13.1" || sbt ++$TRAVIS_SCALA_VERSION docs/makeMicrosite
-
-after_success:
- - test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "master" && test $TRAVIS_REPO_SLUG == "ChristopherDavenport/circuit" && sbt ++$TRAVIS_SCALA_VERSION publish
- - test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "master" && test $TRAVIS_REPO_SLUG == "ChristopherDavenport/circuit" && test $TRAVIS_SCALA_VERSION == "2.12.10" && sbt docs/publishMicrosite
+stages:
+ - name: test
+ - name: release
+ if: ((branch = master AND type = push) OR (tag IS present)) AND NOT fork
+
+scala_version_213: &scala_version_213 "2.13.1"
+scala_version_212: &scala_version_212 "2.12.10"
+
+jobs:
+ include:
+ # stage="test" if no stage is specified
+ - name: test 2.13
+ scala: *scala_version_213
+ script: sbt ++$TRAVIS_SCALA_VERSION test
+ - name: test 2.12
+ scala: *scala_version_212
+ script: sbt ++$TRAVIS_SCALA_VERSION test
+ - name: mima
+ script: sbt +mimaReportBinaryIssues
+ - name: site
+ scala: *scala_version_212
+ install:
+ - rvm use 2.6.0 --install --fuzzy
+ - gem update --system
+ - gem install sass
+ - gem install jekyll -v 3.2.1
+ script: sbt ++$TRAVIS_SCALA_VERSION docs/makeMicrosite
+ # run ci-release only if previous stages passed
+ - stage: release
+ name: release
+ script: sbt ci-release
+ - stage: release
+ name: microsite
+ scala: *scala_version_212
+ install:
+ - rvm use 2.6.0 --install --fuzzy
+ - gem update --system
+ - gem install sass
+ - gem install jekyll -v 3.2.1
+ script: sbt ++$TRAVIS_SCALA_VERSION docs/publishMicrosite
cache:
directories:
- $HOME/.ivy2/cache
- - $HOME/.coursier/cache
- - $HOME/.sbt
+ - $HOME/.coursier
+ - $HOME/.cache
+ - $HOME/.sbt
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 4b39d39..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# changelog
-
-This file summarizes **notable** changes for each release, but does not describe internal changes unless they are particularly exciting. This change log is ordered chronologically, so each release contains all changes described below it.
-
-----
-
-## Unreleased Changes
\ No newline at end of file
diff --git a/build.sbt b/build.sbt
index 8f655c6..98faf52 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,48 +1,82 @@
import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
+val scala213V = "2.13.1"
+val scala212V = "2.12.10"
+
+val catsV = "2.0.0"
+val catsEffectV = "2.0.0"
+val scalaTestV = "3.2.0-M1"
+
+val kindProjectorV = "0.11.0"
+val betterMonadicForV = "0.3.1"
+
lazy val `circuit` = project.in(file("."))
.disablePlugins(MimaPlugin)
- .settings(commonSettings, releaseSettings, skipOnPublishSettings)
+ .settings(publish / skip := true)
.aggregate(core)
lazy val core = project.in(file("core"))
- .settings(commonSettings, releaseSettings, mimaSettings)
+ .settings(commonSettings)
.settings(
name := "circuit"
)
lazy val docs = project.in(file("docs"))
- .settings(commonSettings, skipOnPublishSettings, micrositeSettings)
- .dependsOn(core)
+ .disablePlugins(MimaPlugin)
.enablePlugins(MicrositesPlugin)
.enablePlugins(TutPlugin)
-
-lazy val contributors = Seq(
- "ChristopherDavenport" -> "Christopher Davenport"
-)
-
-val catsV = "2.0.0"
-val catsEffectV = "2.0.0"
-val scalaTestV = "3.2.0-M1"
-
-val kindProjectorV = "0.10.3"
-val betterMonadicForV = "0.3.1"
-
+ .dependsOn(core)
+ .settings(publish / skip := true)
+ .settings(commonSettings)
+ .settings(crossScalaVersions := Seq(scala212V))
+ .settings{
+ import microsites._
+ Seq(
+ micrositeName := "circuit",
+ micrositeDescription := "Circuit Breaker for Scala",
+ micrositeAuthor := "Christopher Davenport",
+ micrositeGithubOwner := "ChristopherDavenport",
+ micrositeGithubRepo := "circuit",
+ micrositeBaseUrl := "/circuit",
+ micrositeDocumentationUrl := "https://www.javadoc.io/doc/io.chrisdavenport/circuit_2.12",
+ micrositeFooterText := None,
+ micrositeHighlightTheme := "atom-one-light",
+ micrositePalette := Map(
+ "brand-primary" -> "#3e5b95",
+ "brand-secondary" -> "#294066",
+ "brand-tertiary" -> "#2d5799",
+ "gray-dark" -> "#49494B",
+ "gray" -> "#7B7B7E",
+ "gray-light" -> "#E5E5E6",
+ "gray-lighter" -> "#F4F3F4",
+ "white-color" -> "#FFFFFF"
+ ),
+ fork in tut := true,
+ scalacOptions in Tut --= Seq(
+ "-Xfatal-warnings",
+ "-Ywarn-unused-import",
+ "-Ywarn-numeric-widen",
+ "-Ywarn-dead-code",
+ "-Ywarn-unused:imports",
+ "-Xlint:-missing-interpolator,_"
+ ),
+ libraryDependencies += "com.47deg" %% "github4s" % "0.20.1",
+ micrositePushSiteWith := GitHub4s,
+ micrositeGithubToken := sys.env.get("GITHUB_TOKEN"),
+ micrositeExtraMdFiles := Map(
+ file("CODE_OF_CONDUCT.md") -> ExtraMdFileConfig("code-of-conduct.md", "page", Map("title" -> "code of conduct", "section" -> "code of conduct", "position" -> "101")),
+ file("LICENSE") -> ExtraMdFileConfig("license.md", "page", Map("title" -> "license", "section" -> "license", "position" -> "102"))
+ )
+ )
+ }
// General Settings
lazy val commonSettings = Seq(
- organization := "io.chrisdavenport",
- scalaVersion := "2.13.1",
- crossScalaVersions := Seq( scalaVersion.value, "2.12.10"),
-
- scalacOptions in (Compile, doc) ++= Seq(
- "-groups",
- "-sourcepath", (baseDirectory in LocalRootProject).value.getAbsolutePath,
- "-doc-source-url", "https://github.com/ChristopherDavenport/circuit/blob/v" + version.value + "€{FILE_PATH}.scala"
- ),
+ scalaVersion := scala213V,
+ crossScalaVersions := Seq(scalaVersion.value, scala212V),
- addCompilerPlugin("org.typelevel" % "kind-projector" % kindProjectorV cross CrossVersion.binary),
+ addCompilerPlugin("org.typelevel" %% "kind-projector" % kindProjectorV cross CrossVersion.full),
addCompilerPlugin("com.olegpy" %% "better-monadic-for" % betterMonadicForV),
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % catsV,
@@ -51,173 +85,17 @@ lazy val commonSettings = Seq(
)
)
-lazy val releaseSettings = {
- import ReleaseTransformations._
- Seq(
- releaseCrossBuild := true,
- releaseProcess := Seq[ReleaseStep](
- checkSnapshotDependencies,
- inquireVersions,
- runClean,
- runTest,
- setReleaseVersion,
- commitReleaseVersion,
- tagRelease,
- // For non cross-build projects, use releaseStepCommand("publishSigned")
- releaseStepCommandAndRemaining("+publishSigned"),
- setNextVersion,
- commitNextVersion,
- releaseStepCommand("sonatypeReleaseAll"),
- pushChanges
- ),
- publishTo := {
- val nexus = "https://oss.sonatype.org/"
- if (isSnapshot.value)
- Some("snapshots" at nexus + "content/repositories/snapshots")
- else
- Some("releases" at nexus + "service/local/staging/deploy/maven2")
- },
- credentials ++= (
- for {
- username <- Option(System.getenv().get("SONATYPE_USERNAME"))
- password <- Option(System.getenv().get("SONATYPE_PASSWORD"))
- } yield
- Credentials(
- "Sonatype Nexus Repository Manager",
- "oss.sonatype.org",
- username,
- password
- )
- ).toSeq,
- publishArtifact in Test := false,
- releasePublishArtifactsAction := PgpKeys.publishSigned.value,
- scmInfo := Some(
- ScmInfo(
- url("https://github.com/ChristopherDavenport/circuit"),
- "git@github.com:ChristopherDavenport/circuit.git"
- )
- ),
- homepage := Some(url("https://github.com/ChristopherDavenport/circuit")),
- licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.html")),
- publishMavenStyle := true,
- pomIncludeRepository := { _ =>
- false
- },
- pomExtra := {
-
- {for ((username, name) <- contributors) yield
-
- {username}
- {name}
- http://github.com/{username}
-
- }
-
- }
- )
-}
-
-lazy val mimaSettings = {
- import sbtrelease.Version
-
- def semverBinCompatVersions(major: Int, minor: Int, patch: Int): Set[(Int, Int, Int)] = {
- val majorVersions: List[Int] =
- if (major == 0 && minor == 0) List.empty[Int] // If 0.0.x do not check MiMa
- else List(major)
- val minorVersions : List[Int] =
- if (major >= 1) Range(0, minor).inclusive.toList
- else List(minor)
- def patchVersions(currentMinVersion: Int): List[Int] =
- if (minor == 0 && patch == 0) List.empty[Int]
- else if (currentMinVersion != minor) List(0)
- else Range(0, patch - 1).inclusive.toList
-
- val versions = for {
- maj <- majorVersions
- min <- minorVersions
- pat <- patchVersions(min)
- } yield (maj, min, pat)
- versions.toSet
- }
-
- def mimaVersions(version: String): Set[String] = {
- Version(version) match {
- case Some(Version(major, Seq(minor, patch), _)) =>
- semverBinCompatVersions(major.toInt, minor.toInt, patch.toInt)
- .map{case (maj, min, pat) => maj.toString + "." + min.toString + "." + pat.toString}
- case _ =>
- Set.empty[String]
- }
- }
- // Safety Net For Exclusions
- lazy val excludedVersions: Set[String] = Set()
-
- // Safety Net for Inclusions
- lazy val extraVersions: Set[String] = Set()
-
- Seq(
- mimaFailOnNoPrevious := false,
- mimaFailOnProblem := mimaVersions(version.value).toList.headOption.isDefined,
- mimaPreviousArtifacts := (mimaVersions(version.value) ++ extraVersions)
- .filterNot(excludedVersions.contains(_))
- .map{v =>
- val moduleN = moduleName.value + "_" + scalaBinaryVersion.value.toString
- organization.value % moduleN % v
- },
- mimaBinaryIssueFilters ++= {
- import com.typesafe.tools.mima.core._
- import com.typesafe.tools.mima.core.ProblemFilters._
- Seq()
- }
- )
-}
-
-lazy val micrositeSettings = {
- import microsites._
- Seq(
- micrositeName := "circuit",
- micrositeDescription := "Circuit Breaker for Scala",
- micrositeAuthor := "Christopher Davenport",
- micrositeGithubOwner := "ChristopherDavenport",
- micrositeGithubRepo := "circuit",
- micrositeBaseUrl := "/circuit",
- micrositeDocumentationUrl := "https://www.javadoc.io/doc/io.chrisdavenport/circuit_2.12",
- micrositeFooterText := None,
- micrositeHighlightTheme := "atom-one-light",
- micrositePalette := Map(
- "brand-primary" -> "#3e5b95",
- "brand-secondary" -> "#294066",
- "brand-tertiary" -> "#2d5799",
- "gray-dark" -> "#49494B",
- "gray" -> "#7B7B7E",
- "gray-light" -> "#E5E5E6",
- "gray-lighter" -> "#F4F3F4",
- "white-color" -> "#FFFFFF"
- ),
- fork in tut := true,
- scalacOptions in Tut --= Seq(
- "-Xfatal-warnings",
- "-Ywarn-unused-import",
- "-Ywarn-numeric-widen",
- "-Ywarn-dead-code",
- "-Ywarn-unused:imports",
- "-Xlint:-missing-interpolator,_"
- ),
- libraryDependencies += "com.47deg" %% "github4s" % "0.20.0",
- micrositePushSiteWith := GitHub4s,
- micrositeGithubToken := sys.env.get("GITHUB_TOKEN"),
- micrositeExtraMdFiles := Map(
- file("CHANGELOG.md") -> ExtraMdFileConfig("changelog.md", "page", Map("title" -> "changelog", "section" -> "changelog", "position" -> "100")),
- file("CODE_OF_CONDUCT.md") -> ExtraMdFileConfig("code-of-conduct.md", "page", Map("title" -> "code of conduct", "section" -> "code of conduct", "position" -> "101")),
- file("LICENSE") -> ExtraMdFileConfig("license.md", "page", Map("title" -> "license", "section" -> "license", "position" -> "102"))
- )
- )
-}
-
-lazy val skipOnPublishSettings = Seq(
- skip in publish := true,
- publish := (()),
- publishLocal := (()),
- publishArtifact := false,
- publishTo := None
-)
+inThisBuild(List(
+ organization := "io.chrisdavenport",
+ developers := List(
+ Developer("ChristopherDavenport", "Christopher Davenport", "chris@christopherdavenport.tech", url("https://github.com/ChristopherDavenport"))
+ ),
+ homepage := Some(url("https://github.com/ChristopherDavenport/circuit")),
+ licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.html")),
+ pomIncludeRepository := { _ => false },
+ scalacOptions in (Compile, doc) ++= Seq(
+ "-groups",
+ "-sourcepath", (baseDirectory in LocalRootProject).value.getAbsolutePath,
+ "-doc-source-url", "https://github.com/ChristopherDavenport/circuit/blob/v" + version.value + "€{FILE_PATH}.scala"
+ ),
+))
diff --git a/project/plugins.sbt b/project/plugins.sbt
index ccc6540..2d22e6b 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1,15 +1,10 @@
-addSbtPlugin("com.dwijnand" % "sbt-travisci" % "1.2.0")
-addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
-addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.0.0")
addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.1.8")
-addSbtPlugin("org.lyranthe.sbt" % "partial-unification" % "1.1.2")
-addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.11")
-addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.8")
-addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.6.1")
-addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.6.13")
-addSbtPlugin("com.47deg" % "sbt-microsites" % "0.9.7")
-addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.6.3")
-addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.3.7")
+
addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.6.1")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.29")
-addSbtPlugin("org.typelevel" % "sbt-catalysts" % "0.29")
\ No newline at end of file
+
+addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.3.2")
+addSbtPlugin("io.chrisdavenport" % "sbt-mima-version-check" % "0.1.2")
+
+addSbtPlugin("com.47deg" % "sbt-microsites" % "0.9.6")
+addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.6.13")
\ No newline at end of file
diff --git a/version.sbt b/version.sbt
deleted file mode 100644
index 87c01ed..0000000
--- a/version.sbt
+++ /dev/null
@@ -1 +0,0 @@
-version in ThisBuild := "0.3.0-SNAPSHOT"