Skip to content

Commit

Permalink
Switch to ci-release (#79)
Browse files Browse the repository at this point in the history
Switch to ci-release
  • Loading branch information
ChristopherDavenport committed Oct 8, 2019
2 parents 8cf92e0 + 9d92feb commit c5255ac
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 238 deletions.
66 changes: 44 additions & 22 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -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
7 changes: 0 additions & 7 deletions CHANGELOG.md

This file was deleted.

270 changes: 74 additions & 196 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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 := {
<developers>
{for ((username, name) <- contributors) yield
<developer>
<id>{username}</id>
<name>{name}</name>
<url>http://github.com/{username}</url>
</developer>
}
</developers>
}
)
}

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"
),
))
Loading

0 comments on commit c5255ac

Please sign in to comment.