Skip to content

Commit

Permalink
Start on scala3 (#9)
Browse files Browse the repository at this point in the history
* Compile some modules on Scala3
* Setup matrix build
* Reformat with new scalafmt version
* Run CI only on pull requests
  • Loading branch information
keynmol committed Sep 18, 2021
1 parent d14323e commit 00f5afc
Show file tree
Hide file tree
Showing 30 changed files with 444 additions and 435 deletions.
33 changes: 23 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,44 @@
name: CI
on:
push:
branches: ["*"]
pull_request:
branches: ["*"]

jobs:
build:
name: CI ${{ matrix.java }} ${{matrix.scalaVersion}} (${{matrix.scalaPlatform}})
strategy:
fail-fast: false
runs-on: ubuntu-latest
matrix:
os: [ubuntu-latest]
java: [adopt@1.8, adopt@1.11, 17]
scalaVersion: ["2_12", "2_13", "3_0"]
scalaPlatform: ["jvm", "js", "native"]
exclude:
- scalaVersion: "3_0"
scalaPlatform: "native"
runs-on: ${{ matrix.os }}
env:
BUILD_KEY: ${{matrix.scalaVersion}}-${{matrix.scalaPlatform}}
steps:
- uses: actions/checkout@v1
- uses: coursier/cache-action@v3
- uses: olafurpg/setup-scala@v10
- uses: olafurpg/setup-scala@v13
with:
java-version: adopt@1.8

- name: Setup Scala Native environment
run: |
sudo apt-get update
sudo apt install clang
if: matrix.scalaPlatform == 'native'

- name: Test
run: sbt ci
env:
JAVA_OPTS: "-XX:MaxMetaspaceSize=1g -Xms1g -Xmx4g -Xss2M -XX:+UseG1GC"
JVM_OPTS: "-XX:MaxMetaspaceSize=1g -Xms1g -Xmx4g -Xss2M -XX:+UseG1GC"
# - name: Native link
# run: sbt nativeLink
run: sbt test-$BUILD_KEY codeQuality-$BUILD_KEY

- name: SBT Plugin test
run: sbt pluginTests-$BUILD_KEY
if: matrix.scalaPlatform == 'jvm' && matrix.scalaVersion == '2_12'

- name: Check site build
run: sbt buildSite
if: matrix.scalaPlatform == 'jvm' && matrix.scalaVersion == '2_13'
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version = "2.6.4"
version = "3.0.4"

align.preset = "more"

Expand Down
111 changes: 76 additions & 35 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ val Ver = new {
val upickle = "1.4.0"
val fansi = "0.2.14"
val weaver = "0.6.4"
val munit = "0.7.26"
val munit = "0.7.29"

val Scala = new {
val `2_12` = "2.12.13"
val `2_13` = "2.13.5"
val `3` = "3.0.1"
val `3` = "3.0.2"

val only_2 = Seq(`2_12`, `2_13`)
val only_2_13 = Seq(`2_13`)
Expand Down Expand Up @@ -70,7 +70,7 @@ lazy val builders =
.in(file("builders"))
.dependsOn(core, searchIndex, searchFrontendPack, searchRetrieve)
.settings(
name := "subatomic-builders",
name := "subatomic-builders",
libraryDependencies += "com.lihaoyi" %% "scalatags" % Ver.scalatags,
libraryDependencies += "com.github.japgolly.scalacss" %% "core" % Ver.scalacss,
libraryDependencies += "com.monovore" %% "decline" % Ver.decline
Expand Down Expand Up @@ -117,7 +117,7 @@ lazy val searchFrontend =
.settings(name := "subatomic-search-frontend")
.settings(
libraryDependencies += "com.raquo" %%% "laminar" % Ver.laminar,
scalaJSUseMainModuleInitializer := true
scalaJSUseMainModuleInitializer := true
)
.jsPlatform(Ver.Scala.only_2_13)
.settings(testSettings)
Expand All @@ -129,7 +129,7 @@ lazy val searchCli =
.in(file("search/cli"))
.dependsOn(searchIndex, searchRetrieve)
.settings(
name := "subatomic-search-cli",
name := "subatomic-search-cli",
libraryDependencies += "com.lihaoyi" %%% "os-lib" % Ver.osLib,
scalacOptions += "-Wconf:cat=unused-imports:wv",
scalacOptions += "-Wconf:cat=unused-imports&site=subatomic.search.cli.SearchCLI:s,any:wv",
Expand All @@ -146,9 +146,9 @@ lazy val searchIndex =
.in(file("search/indexer"))
.dependsOn(searchShared)
.settings(name := "subatomic-search-indexer")
.jvmPlatform(Ver.Scala.only_2)
.jsPlatform(Ver.Scala.only_2_13, batchModeOnCI)
.nativePlatform(Ver.Scala.only_2_13)
.jvmPlatform(Ver.Scala.all)
.jsPlatform(Ver.Scala.all, batchModeOnCI)
.nativePlatform(Ver.Scala.only_2)
.settings(munitTestSettings)
.settings(buildInfoSettings)

Expand All @@ -159,22 +159,22 @@ lazy val searchRetrieve =
.settings(
name := "subatomic-search-retrieve"
)
.jvmPlatform(Ver.Scala.only_2)
.jsPlatform(Ver.Scala.only_2_13, batchModeOnCI)
.nativePlatform(Ver.Scala.only_2_13)
.jvmPlatform(Ver.Scala.all)
.jsPlatform(Ver.Scala.all, batchModeOnCI)
.nativePlatform(Ver.Scala.only_2)
.settings(munitTestSettings)
.settings(buildInfoSettings)

lazy val searchShared =
projectMatrix
.in(file("search/shared"))
.settings(
name := "subatomic-search-shared",
name := "subatomic-search-shared",
libraryDependencies += "com.lihaoyi" %%% "upickle" % Ver.upickle
)
.jvmPlatform(Ver.Scala.only_2)
.jsPlatform(Ver.Scala.only_2_13, batchModeOnCI)
.nativePlatform(Ver.Scala.only_2_13)
.jvmPlatform(Ver.Scala.all)
.jsPlatform(Ver.Scala.all, batchModeOnCI)
.nativePlatform(Ver.Scala.only_2)
.settings(munitTestSettings)
.settings(buildInfoSettings)
.enablePlugins(BuildInfoPlugin)
Expand All @@ -187,7 +187,7 @@ lazy val docs = project
.dependsOn(builders.jvm(Ver.Scala.`2_12`), plugin.jvm(Ver.Scala.`2_12`), searchIndex.jvm(Ver.Scala.`2_12`))
.enablePlugins(SubatomicPlugin)
.settings(
scalaVersion := Ver.Scala.`2_12`,
scalaVersion := Ver.Scala.`2_12`,
skip in publish := true,
// To react to asset changes
watchSources += WatchSource(
Expand All @@ -200,16 +200,16 @@ lazy val docs = project
unmanagedSourceDirectories in Compile +=
(baseDirectory in ThisBuild).value / "docs",
libraryDependencies += "com.lihaoyi" %% "fansi" % Ver.fansi,
subatomicBuildersDependency := false,
subatomicCoreDependency := false,
subatomicInheritClasspath := true
subatomicBuildersDependency := false,
subatomicCoreDependency := false,
subatomicInheritClasspath := true
)

lazy val plugin = projectMatrix
.in(file("sbt-plugin"))
.withId("plugin")
.settings(
sbtPlugin := true,
sbtPlugin := true,
sbtVersion in pluginCrossBuild := "1.4.4"
)
.jvmPlatform(scalaVersions = Seq(Ver.Scala.`2_12`))
Expand Down Expand Up @@ -259,17 +259,17 @@ lazy val testSettings =
libraryDependencies ++= ifNot(
virtualAxes.value.contains(VirtualAxis.native),
Seq(
"com.disneystreaming" %%% "weaver-cats" % "0.6.4" % Test,
"com.disneystreaming" %%% "weaver-scalacheck" % "0.6.4" % Test
"com.disneystreaming" %%% "weaver-cats" % Ver.weaver % Test,
"com.disneystreaming" %%% "weaver-scalacheck" % Ver.weaver % Test
)
),
testFrameworks += new TestFramework("weaver.framework.CatsEffect"),
scalacOptions.in(Test) ~= filterConsoleScalacOptions
)

lazy val munitTestSettings = Seq(
libraryDependencies += "org.scalameta" %%% "munit" % "0.7.26" % Test,
libraryDependencies += "org.scalameta" %%% "munit-scalacheck" % "0.7.26" % Test,
libraryDependencies += "org.scalameta" %%% "munit" % Ver.munit % Test,
libraryDependencies += "org.scalameta" %%% "munit-scalacheck" % Ver.munit % Test,
testFrameworks += new TestFramework("munit.Framework"),
Test / scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.CommonJSModule) }
)
Expand Down Expand Up @@ -307,15 +307,15 @@ lazy val buildInfoSettings = {

inThisBuild(
List(
scalaVersion := Ver.Scala.`2_13`,
scalaVersion := Ver.Scala.`2_13`,
scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.5.0",
semanticdbEnabled := true,
semanticdbVersion := scalafixSemanticdb.revision,
scalafixScalaBinaryVersion := scalaBinaryVersion.value,
organization := "com.indoorvivants",
organizationName := "Anton Sviridov",
homepage := Some(url("https://github.com/indoorvivants/subatomic")),
startYear := Some(2020),
semanticdbEnabled := true,
semanticdbVersion := scalafixSemanticdb.revision,
scalafixScalaBinaryVersion := scalaBinaryVersion.value,
organization := "com.indoorvivants",
organizationName := "Anton Sviridov",
homepage := Some(url("https://github.com/indoorvivants/subatomic")),
startYear := Some(2020),
licenses := List(
"Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")
),
Expand Down Expand Up @@ -363,6 +363,47 @@ ThisBuild / commands += Command.command("ci") { st =>

addCommandAlias("buildSite", "docs/run build")

ThisBuild / concurrentRestrictions ++= {
if (sys.env.contains("CI")) Seq(Tags.limitAll(4)) else Seq.empty
}
import commandmatrix._

inThisBuild(
Seq(
commands ++=
CrossCommand.single(
"test",
matrices =
Seq(core, searchShared, searchIndex, searchRetrieve, builders, searchCli, searchFrontend, searchFrontendPack),
dimensions = Seq(
Dimension.scala("2.13", fullFor3 = false),
Dimension.platform()
),
stubMissing = true
),
commands ++=
CrossCommand.composite(
"codeQuality",
Seq("scalafmtCheckAll", s"scalafix --check $scalafixRules", "headerCheck"),
matrices =
Seq(core, searchShared, searchIndex, searchRetrieve, builders, searchCli, searchFrontend, searchFrontendPack),
dimensions = Seq(
Dimension.scala("2.13", fullFor3 = false),
Dimension.platform()
),
filter = axes => CrossCommand.filter.notScala3(axes),
stubMissing = true
),
commands ++=
CrossCommand.composite(
"pluginTests",
Seq("scripted"),
matrices = Seq(plugin),
dimensions = Seq(
Dimension.scala("2.12", fullFor3 = false), // "2.12" is the default one
Dimension.platform()
),
filter = axes =>
CrossCommand.filter.isScalaBinary(2, Some(12))(axes) &&
CrossCommand.filter.onlyJvm(axes),
stubMissing = true
)
)
)

0 comments on commit 00f5afc

Please sign in to comment.