diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1dcc437..3749e4b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,14 @@ -name: Build All +name: Build-All + +on: + push: + branches: + - "**" + + pull_request: + branches: + - main -on: [push] jobs: @@ -10,12 +18,16 @@ jobs: strategy: matrix: scala: - - { version: "2.10.7", binary-version: "2.10" } - - { version: "2.11.12", binary-version: "2.11" } - - { version: "2.12.10", binary-version: "2.12" } + - { version: "2.11.12", binary-version: "2.11", java-version: "8" } + - { version: "2.12.12", binary-version: "2.12", java-version: "11" } + - { version: "2.13.3", binary-version: "2.13", java-version: "11" } + - { version: "0.26.0-RC1", binary-version: "0.26", java-version: "11" } steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.scala.java-version }} - name: Cache Coursier uses: actions/cache@v1 @@ -33,10 +45,27 @@ jobs: restore-keys: | ${{ runner.os }}-ivy-scala-${{ matrix.scala.binary-version }}- - - name: Build for Scala ${{ matrix.scala.version }} - run: .github/workflows/sbt-build-simple.sh core ${{ matrix.scala.version }} + - name: "[Push] Build All for Scala ${{ matrix.scala.version }}" + if: github.event_name == 'push' + env: + CURRENT_BRANCH_NAME: ${{ github.ref }} + run: | + echo "[BEFORE]CURRENT_BRANCH_NAME=${CURRENT_BRANCH_NAME}" + export CURRENT_BRANCH_NAME="${CURRENT_BRANCH_NAME#refs/heads/}" + echo " [AFTER]CURRENT_BRANCH_NAME=${CURRENT_BRANCH_NAME}" + java -version + .github/workflows/sbt-build-all.sh ${{ matrix.scala.version }} + + - name: "[PR] Build All for Scala ${{ matrix.scala.version }}" + if: github.event_name == 'pull_request' + env: + CURRENT_BRANCH_NAME: ${{ github.base_ref }} + run: | + echo "Rull request to the '${CURRENT_BRANCH_NAME}' branch" + java -version + .github/workflows/sbt-build-all.sh ${{ matrix.scala.version }} - build_scala2_13: + build_with_test_coverage: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 @@ -57,7 +86,22 @@ jobs: restore-keys: | ${{ runner.os }}-ivy-scala-2_13- - - name: Build for Scala 2.13 + - name: "[Push] Build with Test Coverage" + if: github.event_name == 'push' + env: + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} + CURRENT_BRANCH_NAME: ${{ github.ref }} + run: | + echo "[BEFORE]CURRENT_BRANCH_NAME=${CURRENT_BRANCH_NAME}" + export CURRENT_BRANCH_NAME="${CURRENT_BRANCH_NAME#refs/heads/}" + echo " [AFTER]CURRENT_BRANCH_NAME=${CURRENT_BRANCH_NAME}" + .github/workflows/sbt-build.sh core 2.13.3 + + - name: "[PR] Build with Test Coverage" + if: github.event_name == 'pull_request' env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} - run: .github/workflows/sbt-build.sh core 2.13.0 + CURRENT_BRANCH_NAME: ${{ github.base_ref }} + run: | + echo "Rull request to the '${CURRENT_BRANCH_NAME}' branch" + .github/workflows/sbt-build.sh core 2.13.3 diff --git a/.github/workflows/publish-github-pages.yml b/.github/workflows/publish-github-pages.yml index 31d9256..7731ba3 100644 --- a/.github/workflows/publish-github-pages.yml +++ b/.github/workflows/publish-github-pages.yml @@ -55,7 +55,10 @@ jobs: ALGOLIA_INDEX_NAME: ${{ secrets.ALGOLIA_INDEX_NAME }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - sbt clean \ + sbt \ + -J-Xmx2048m \ + ++${{ matrix.scala.version }}! \ + clean \ docs/mdoc \ docs/docusaurGenerateAlgoliaConfigFile \ docs/docusaurInstall \ diff --git a/.github/workflows/sbt-build-all.sh b/.github/workflows/sbt-build-all.sh new file mode 100755 index 0000000..7a749cf --- /dev/null +++ b/.github/workflows/sbt-build-all.sh @@ -0,0 +1,47 @@ +#!/bin/bash -e + +set -x + +if [ -z "$1" ] + then + echo "Missing parameters. Please enter the [Scala version]." + echo "sbt-build.sh 2.13.3" + exit 1 +else + : ${CURRENT_BRANCH_NAME:?"CURRENT_BRANCH_NAME is missing."} + + scala_version=$1 + echo "============================================" + echo "Build projects" + echo "--------------------------------------------" + echo "" + + if [[ "$CURRENT_BRANCH_NAME" == "main" || "$CURRENT_BRANCH_NAME" == "release" ]] + then +# sbt -J-Xmx2048m ++${scala_version}! -v clean; coverage; test; coverageReport; coverageAggregate +# sbt -J-Xmx2048m ++${scala_version}! -v coveralls +# sbt -J-Xmx2048m ++${scala_version}! -v clean; packagedArtifacts + sbt \ + -J-Xmx2048m \ + ++${scala_version}! \ + -v \ + clean \ + test \ + packagedArtifacts + else +# sbt -J-Xmx2048m ++${scala_version}! -v clean coverage test coverageReport coverageAggregate package +# sbt -J-Xmx2048m ++${scala_version}! -v coveralls + sbt \ + -J-Xmx2048m \ + ++${scala_version}! \ + -v \ + clean \ + test \ + package + fi + + + echo "============================================" + echo "Building projects: Done" + echo "============================================" +fi diff --git a/.github/workflows/sbt-build-simple.sh b/.github/workflows/sbt-build-simple.sh deleted file mode 100755 index 5a3ea12..0000000 --- a/.github/workflows/sbt-build-simple.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -e - -set -x - -if [ -z "$2" ] - then - echo "Missing parameters. Please enter the [project] and [Scala version]." - echo "sbt-build-simple.sh core 2.12.10" - exit 1 -else - project_name=$1 - scala_version=$2 - echo "============================================" - echo "Build projects (Simple)" - echo "--------------------------------------------" - echo "" - CURRENT_BRANCH_NAME="${GITHUB_REF#refs/heads/}" - if [[ "$CURRENT_BRANCH_NAME" == "main" || "$CURRENT_BRANCH_NAME" == "release" ]] - then - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}! -v; clean; test; packagedArtifacts" - else - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}! -v; clean; test; package" - fi - - echo "============================================" - echo "Building projects (Simple): Done" - echo "============================================" -fi diff --git a/.github/workflows/sbt-build.sh b/.github/workflows/sbt-build.sh index 48e1f85..be4f6ac 100755 --- a/.github/workflows/sbt-build.sh +++ b/.github/workflows/sbt-build.sh @@ -8,21 +8,22 @@ if [ -z "$2" ] echo "sbt-build.sh core 2.12.10" exit 1 else + : ${CURRENT_BRANCH_NAME:?"CURRENT_BRANCH_NAME is missing."} + export CI_BRANCH=$CURRENT_BRANCH_NAME project_name=$1 scala_version=$2 echo "============================================" echo "Build projects" echo "--------------------------------------------" echo "" - export CI_BRANCH="${GITHUB_REF#refs/heads/}" - if [[ "$CI_BRANCH" == "main" || "$CI_BRANCH" == "release" ]] + if [[ "$CURRENT_BRANCH_NAME" == "main" || "$CURRENT_BRANCH_NAME" == "release" ]] then - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}!; clean; coverage; test; coverageReport; coverageAggregate" - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}!; coveralls" - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}!; clean; packagedArtifacts" + sbt -J-Xmx2048m "project ${project_name}" ++${scala_version}! clean coverage test coverageReport coverageAggregate + sbt -J-Xmx2048m "project ${project_name}" ++${scala_version}! coveralls + sbt -J-Xmx2048m "project ${project_name}" ++${scala_version}! clean packagedArtifacts else - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}!; clean; coverage; test; coverageReport; coverageAggregate; package" - sbt -J-Xmx2048m "; project ${project_name}; ++ ${scala_version}!; coveralls" + sbt -J-Xmx2048m "project ${project_name}" ++${scala_version}! clean coverage test coverageReport coverageAggregate package + sbt -J-Xmx2048m "project ${project_name}" ++${scala_version}! coveralls fi diff --git a/README.md b/README.md index 50d1986..8b79cd5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # just-fp -[![Build Status](https://github.com/Kevin-Lee/just-fp/workflows/Build%20All/badge.svg)](https://github.com/Kevin-Lee/just-fp/actions?workflow=Build+All) +[![Build Status](https://github.com/Kevin-Lee/just-fp/workflows/Build-All/badge.svg)](https://github.com/Kevin-Lee/just-fp/actions?workflow=Build-All) [![Release Status](https://github.com/Kevin-Lee/just-fp/workflows/Release/badge.svg)](https://github.com/Kevin-Lee/just-fp/actions?workflow=Release) [![Coverage Status](https://coveralls.io/repos/github/Kevin-Lee/just-fp/badge.svg?branch=main)](https://coveralls.io/github/Kevin-Lee/just-fp?branch=main) diff --git a/build.sbt b/build.sbt index c344172..f20c1bd 100644 --- a/build.sbt +++ b/build.sbt @@ -4,8 +4,18 @@ import just.semver.SemVer import SemVer.{Major, Minor} import microsites.ConfigYml -val ProjectScalaVersion: String = "2.13.1" -val CrossScalaVersions: Seq[String] = Seq("2.10.7", "2.11.12", "2.12.11", ProjectScalaVersion) +val DottyVersion = "0.26.0-RC1" +val ProjectScalaVersion = DottyVersion + +val removeDottyIncompatible: ModuleID => Boolean = + m => + m.name == "wartremover" || + m.name == "ammonite" || + m.name == "kind-projector" || + m.name == "mdoc" + +//val ProjectScalaVersion: String = "2.13.1" +val CrossScalaVersions: Seq[String] = Seq("2.10.7", "2.11.12", "2.12.12", "2.13.3", ProjectScalaVersion).distinct val GitHubUsername = "Kevin-Lee" val RepoName = "just-fp" @@ -13,15 +23,17 @@ val ProjectName = RepoName def prefixedProjectName(name: String) = s"$ProjectName${if (name.isEmpty) "" else s"-$name"}" -lazy val noPublish = Seq( +lazy val noPublish: SettingsDefinition = Seq( publish := {}, publishLocal := {}, publishArtifact := false, + skip in sbt.Keys.`package` := true, + skip in packagedArtifacts := true, skip in publish := true ) val hedgehogVersionFor2_10 = "7bd29241fababd9a3e954fd38083ed280fc9e4e8" -val hedgehogVersion = "1bdfed24d9a58914fb78c1f4bea19bf8886d163f" +val hedgehogVersion = "0.4.2" val hedgehogRepo: MavenRepository = "bintray-scala-hedgehog" at "https://dl.bintray.com/hedgehogqa/scala-hedgehog" @@ -44,23 +56,55 @@ ThisBuild / scmInfo := , s"git@github.com:$GitHubUsername/$RepoName.git" )) +libraryDependencies := ( + if (isDotty.value) + libraryDependencies.value + .filterNot(removeDottyIncompatible) + else + libraryDependencies.value +) +libraryDependencies := libraryDependencies.value.map(_.withDottyCompat(scalaVersion.value)) + lazy val core = (project in file("core")) .enablePlugins(DevOopsGitReleasePlugin) +// .disablePlugins((if (isDotty.value) Seq(WartRemover) else Seq.empty[AutoPlugin]):_*) .settings( name := prefixedProjectName("core") , description := "Just FP Lib - Core" , crossScalaVersions := CrossScalaVersions , unmanagedSourceDirectories in Compile ++= { val sharedSourceDir = baseDirectory.value / "src/main" - if (scalaVersion.value.startsWith("2.13") || scalaVersion.value.startsWith("2.12")) - Seq(sharedSourceDir / "scala-2.12_2.13") - else + if (scalaVersion.value.startsWith("2.10") || scalaVersion.value.startsWith("2.11")) Seq(sharedSourceDir / "scala-2.10_2.11") + else + Seq(sharedSourceDir / "scala-2.12_2.13") } + , scalacOptions := + ( if (isDotty.value) + Seq( + "-source:3.0-migration", "-language:dynamics,existentials,higherKinds,reflectiveCalls,experimental.macros,implicitConversions", "-Ykind-projector" + ) + else + Nil + ) , resolvers ++= Seq( hedgehogRepo ) , addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.0" cross CrossVersion.full) + /* Ammonite-REPL { */ + , libraryDependencies ++= + (scalaBinaryVersion.value match { + case "2.10" => + Seq.empty[ModuleID] + case "2.11" => + Seq("com.lihaoyi" % "ammonite" % "1.6.7" % Test cross CrossVersion.full) + case "2.12" => + Seq("com.lihaoyi" % "ammonite" % "2.2.0" % Test cross CrossVersion.full) + case "2.13" => + Seq("com.lihaoyi" % "ammonite" % "2.2.0" % Test cross CrossVersion.full) + case _ => + Seq.empty[ModuleID] + }) , libraryDependencies := crossVersionProps(List.empty, SemVer.parseUnsafe(scalaVersion.value)) { case (Major(2), Minor(10)) => @@ -72,39 +116,36 @@ lazy val core = (project in file("core")) hedgehogLibs(hedgehogVersion) ++ libraryDependencies.value } - /* Ammonite-REPL { */ - , libraryDependencies ++= - (scalaBinaryVersion.value match { - case "2.10" => - Seq.empty[ModuleID] - case "2.11" => - Seq("com.lihaoyi" % "ammonite" % "1.6.7" % Test cross CrossVersion.full) - case "2.12" => - Seq.empty[ModuleID] // TODO: add ammonite when it supports Scala 2.12.11 - case _ => - Seq("com.lihaoyi" % "ammonite" % "2.0.4" % Test cross CrossVersion.full) - }) + , libraryDependencies := ( + if (isDotty.value) { + libraryDependencies.value + .filterNot(removeDottyIncompatible) + } + else + (libraryDependencies).value + ) + , libraryDependencies := libraryDependencies.value.map(_.withDottyCompat(scalaVersion.value)) , sourceGenerators in Test += (scalaBinaryVersion.value match { case "2.10" => task(Seq.empty[File]) - case "2.12" => - task(Seq.empty[File]) // TODO: add ammonite when it supports Scala 2.12.11 - case _ => + case "2.12" | "2.13" => task { val file = (sourceManaged in Test).value / "amm.scala" IO.write(file, """object amm extends App { ammonite.Main.main(args) }""") Seq(file) } + case _ => + task(Seq.empty[File]) }) /* } Ammonite-REPL */ // , wartremoverErrors in (Compile, compile) ++= commonWarts((scalaBinaryVersion in update).value) // , wartremoverErrors in (Test, compile) ++= commonWarts((scalaBinaryVersion in update).value) - , wartremoverErrors ++= commonWarts((scalaBinaryVersion in update).value) +// , wartremoverErrors ++= commonWarts((scalaBinaryVersion in update).value) // , wartremoverErrors ++= Warts.all - , Compile / console / wartremoverErrors := List.empty +// , Compile / console / wartremoverErrors := List.empty , Compile / console / scalacOptions := (console / scalacOptions).value.filterNot(_.contains("wartremover")) - , Test / console / wartremoverErrors := List.empty +// , Test / console / wartremoverErrors := List.empty , Test / console / scalacOptions := (console / scalacOptions).value.filterNot(_.contains("wartremover")) , testFrameworks ++= Seq(TestFramework("hedgehog.sbt.Framework")) /* Bintray { */ @@ -179,6 +220,15 @@ lazy val docs = (project in file("generated-docs")) , gitHubPagesOrgName := GitHubUsername , gitHubPagesRepoName := RepoName + + , libraryDependencies := ( + if (isDotty.value) + libraryDependencies.value + .filterNot(removeDottyIncompatible) + else + libraryDependencies.value + ) + , libraryDependencies := libraryDependencies.value.map(_.withDottyCompat(scalaVersion.value)) ) .settings(noPublish) .dependsOn(core) diff --git a/project/plugins.sbt b/project/plugins.sbt index a34c2cb..30ed0b6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,9 +2,9 @@ logLevel := sbt.Level.Warn addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.5") -addSbtPlugin("org.wartremover" % "sbt-wartremover" % "2.4.5") +addSbtPlugin("org.wartremover" % "sbt-wartremover" % "2.4.10") -addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0") +addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.2.7") @@ -13,3 +13,5 @@ addSbtPlugin("io.kevinlee" % "sbt-devoops" % "1.0.3") addSbtPlugin("com.47deg" % "sbt-microsites" % "1.1.4") addSbtPlugin("io.kevinlee" % "sbt-docusaur" % "0.1.3") + +addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.4.1")