Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 37 additions & 42 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,26 @@ jobs:
matrix:
os: [ubuntu-22.04]
scala: [2.12, 2.13, 3]
java: [temurin@8, temurin@17]
java: [temurin@17, temurin@8]
project: [rootJS, rootJVM, plugin]
exclude:
- scala: 2.13
java: temurin@17
java: temurin@8
- scala: 3
java: temurin@17
java: temurin@8
- project: rootJS
java: temurin@8
- project: rootJVM
java: temurin@17
scala: 3
- project: plugin
java: temurin@17
scala: 2.12
- project: plugin
scala: 2.13
- project: plugin
java: temurin@8
scala: 3
- project: plugin
scala: 2.13
runs-on: ${{ matrix.os }}
timeout-minutes: 60
steps:
Expand All @@ -55,37 +60,37 @@ jobs:
- name: Setup sbt
uses: sbt/setup-sbt@v1

- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
- name: Setup Java (temurin@17)
id: setup-java-temurin-17
if: matrix.java == 'temurin@17'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 8
java-version: 17
cache: sbt

- name: sbt update
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
if: matrix.java == 'temurin@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
run: sbt +update

- name: Setup Java (temurin@17)
id: setup-java-temurin-17
if: matrix.java == 'temurin@17'
- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
java-version: 8
cache: sbt

- name: sbt update
if: matrix.java == 'temurin@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
run: sbt +update

- name: Check that workflows are up to date
run: sbt githubWorkflowCheck

- name: Check formatting
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-22.04'
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' scalafmtCheckAll 'project /' scalafmtSbtCheck

- name: scalaJSLink
Expand All @@ -96,11 +101,11 @@ jobs:
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' test

- name: Check binary compatibility
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-22.04'
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' mimaReportBinaryIssues

- name: Generate API documentation
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-22.04'
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' doc

- name: Build manual
Expand Down Expand Up @@ -133,7 +138,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-22.04]
java: [temurin@8]
java: [temurin@17]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
Expand All @@ -144,30 +149,30 @@ jobs:
- name: Setup sbt
uses: sbt/setup-sbt@v1

- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
- name: Setup Java (temurin@17)
id: setup-java-temurin-17
if: matrix.java == 'temurin@17'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 8
java-version: 17
cache: sbt

- name: sbt update
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
if: matrix.java == 'temurin@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
run: sbt +update

- name: Setup Java (temurin@17)
id: setup-java-temurin-17
if: matrix.java == 'temurin@17'
- name: Setup Java (temurin@8)
id: setup-java-temurin-8
if: matrix.java == 'temurin@8'
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
java-version: 8
cache: sbt

- name: sbt update
if: matrix.java == 'temurin@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
run: sbt +update

- name: Download target directories (2.12, rootJS)
Expand All @@ -190,16 +195,6 @@ jobs:
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.12, plugin)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12-plugin

- name: Inflate target directories (2.12, plugin)
run: |
tar xf targets.tar
rm targets.tar

- name: Download target directories (2.13, rootJS)
uses: actions/download-artifact@v4
with:
Expand Down Expand Up @@ -230,12 +225,12 @@ jobs:
tar xf targets.tar
rm targets.tar

- name: Download target directories (3, rootJVM)
- name: Download target directories (3, plugin)
uses: actions/download-artifact@v4
with:
name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJVM
name: target-${{ matrix.os }}-${{ matrix.java }}-3-plugin

- name: Inflate target directories (3, rootJVM)
- name: Inflate target directories (3, plugin)
run: |
tar xf targets.tar
rm targets.tar
Expand Down
62 changes: 53 additions & 9 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,24 @@ inThisBuild(
scalaVersion := versions.scala2_12,
developers := List(Developer("jenshalm", "Jens Halm", "", url("http://planet42.org"))),
tlCiHeaderCheck := false,
tlCiDependencyGraphJob := false,
githubWorkflowJavaVersions += JavaSpec.temurin("17"),
tlCiDependencyGraphJob := false,
githubWorkflowJavaVersions := Seq(JavaSpec.temurin("17"), JavaSpec.temurin("8")),
githubWorkflowBuildMatrixAdditions ~= { matrix =>
matrix + ("project" -> (matrix("project") :+ "plugin"))
},
githubWorkflowBuildMatrixExclusions ++= {
MatrixExclude(Map("project" -> "plugin", "java" -> JavaSpec.temurin("17").render)) ::
List("2.13", "3").map(scala => MatrixExclude(Map("project" -> "plugin", "scala" -> scala)))
List(
MatrixExclude(
Map("project" -> "rootJVM", "java" -> JavaSpec.temurin("17").render, "scala" -> "3")
),
MatrixExclude(
Map("project" -> "plugin", "java" -> JavaSpec.temurin("17").render, "scala" -> "2.12")
),
MatrixExclude(
Map("project" -> "plugin", "java" -> JavaSpec.temurin("8").render, "scala" -> "3")
),
MatrixExclude(Map("project" -> "plugin", "scala" -> "2.13"))
)
},
githubWorkflowBuild ++= Seq(
WorkflowStep.Sbt(
Expand Down Expand Up @@ -188,22 +198,56 @@ lazy val plugin = project.in(file("sbt"))
.dependsOn(core.jvm, io, pdf, preview)
.enablePlugins(SbtPlugin)
.settings(
name := "laika-sbt",
sbtPlugin := true,
crossScalaVersions := Seq(versions.scala2_12),
name := "laika-sbt",
sbtPlugin := true,
addSbtPlugin("com.github.sbt" % "sbt2-compat" % versions.sbt2Compat),
crossScalaVersions := Seq(versions.scala2_12, versions.scala3Sbt),
pluginCrossBuild / sbtVersion := {
scalaBinaryVersion.value match {
case "2.12" => versions.sbt1
case _ => versions.sbt2
}
},
scriptedSbt := {
scalaBinaryVersion.value match {
case "2.12" => versions.sbt1
case _ => versions.sbt2
}
},
// sbt 2.x is built with Scala 3.8, which requires Java 17 classfiles.
// https://github.com/typelevel/sbt-typelevel/issues/851
tlJdkRelease := {
if (scalaBinaryVersion.value == "3") Some(17)
else Some(8)
},
// Scaladoc 3 cannot currently resolve some TASTy from sbt 2 transitive dependencies.
// https://github.com/scala/scala3/issues/18487
// https://github.com/scala/scala3/issues/22447
Compile / doc / sources := {
if (scalaVersion.value.startsWith("3.")) Seq.empty
else (Compile / doc / sources).value
},
scriptedLaunchOpts ++= Seq(
"-Xmx1024M",
"-Dplugin.version=" + version.value,
"-Duser.language=en",
"-Duser.country=GB"
),
scriptedBufferLog := false,
scripted := scripted.dependsOn(
scriptedBufferLog := false,
scripted := scripted.dependsOn(
core.jvm / publishLocal,
io / publishLocal,
pdf / publishLocal,
preview / publishLocal
).evaluated,
// TODO: Re-enable MiMa for sbt 2 once a previous sbt 2 plugin artifact exists.
// The sbt 2 / Scala 3 plugin artifact did not exist in previous Laika releases,
// so MiMa cannot compare against a missing baseline.
mimaPreviousArtifacts := {
val artifacts = mimaPreviousArtifacts.value
if (scalaBinaryVersion.value == "3") Set.empty
else artifacts
},
mimaBinaryIssueFilters ++= Seq(
ProblemFilters.exclude[MissingClassProblem]("laika.sbt.Tasks$OutputFormat"),
ProblemFilters.exclude[MissingClassProblem]("laika.sbt.Tasks$OutputFormat$"),
Expand Down
10 changes: 7 additions & 3 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ object Dependencies {

object versions {

val scala2_12 = "2.12.20"
val scala2_13 = "2.13.16"
val scala3 = "3.3.6"
val scala2_12 = "2.12.20"
val scala2_13 = "2.13.16"
val scala3 = "3.3.6"
val scala3Sbt = "3.8.4"
val sbt1 = "1.12.13"
val sbt2 = "2.0.1"
val sbt2Compat = "0.1.0"

val catsCore = "2.13.0"
val catsEffect = "3.5.7"
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.11.6
sbt.version=1.12.13
2 changes: 0 additions & 2 deletions sbt/src/main/scala/laika/sbt/LaikaConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,4 @@ object LaikaConfig {
logLevel = MessageFilter.Warning
)

private def unapply(conf: LaikaConfig) = conf

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unused, removed for suppress warning in Scala3.


}
77 changes: 43 additions & 34 deletions sbt/src/main/scala/laika/sbt/LaikaPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import laika.io.config.RendererConfig
import laika.theme.ThemeProvider
import sbt.Keys.*
import sbt.*
import scala.annotation.nowarn

/** Plugin that adapts the features of the Laika library for use from within sbt.
*
Expand Down Expand Up @@ -155,39 +156,47 @@ object LaikaPlugin extends AutoPlugin {

import autoImport._

override def projectSettings: Seq[Setting[_]] = Seq(
Laika / sourceDirectories := Seq(sourceDirectory.value / "docs"),
Laika / excludeFilter := HiddenFileFilter,
laikaInputs := Settings.defaultInputs.value,
Laika / target := target.value / "docs",
laikaSite / target := (Laika / target).value / "site",
laikaExtensions := Nil,
laikaRenderers := Settings.rendererConfigs.value,
laikaConfig := LaikaConfig.defaults,
laikaPreviewConfig := LaikaPreviewConfig.defaults,
laikaTheme := Helium.defaults.build,
laikaTreeProcessors := Nil,
laikaDescribe := Tasks.describe.value,
laikaIncludeAPI := false,
laikaIncludeEPUB := Settings.validated(
Settings.parserConfig.value.baseConfig.get[Boolean]("helium.site.includeEPUB", false)
),
laikaIncludePDF := Settings.validated(
Settings.parserConfig.value.baseConfig.get[Boolean]("helium.site.includePDF", false)
),
laikaSite := Tasks.site.value,
laikaGenerate := Tasks.generate.evaluated,
laikaGenerateAPI := Tasks.generateAPI.value,
laikaGenerateAPI / mappings := (Compile / packageDoc / mappings).value,
laikaHTML := Tasks.generate.toTask(" html").value,
laikaXSLFO := Tasks.generate.toTask(" xslfo").value,
laikaEPUB := Tasks.generate.toTask(" epub").value,
laikaPDF := Tasks.generate.toTask(" pdf").value,
laikaAST := Tasks.generate.toTask(" ast").value,
laikaPackageSite := Tasks.packageSite.value,
laikaPreview := Tasks.startPreviewServer.value,
Laika / clean := Tasks.clean.value,
laikaSite / mappings := Def.sequential(Tasks.site, Tasks.mappings).value
) :+ (cleanFiles += (Laika / target).value)
@nowarn("msg=unused import")

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For sbtcompat.PluginCompat.* in Scala3.

override def projectSettings: Seq[Setting[?]] = {
import sbtcompat.PluginCompat.*

Seq(
Laika / sourceDirectories := Seq(sourceDirectory.value / "docs"),
Laika / excludeFilter := HiddenFileFilter,
laikaInputs := Def.uncached(Settings.defaultInputs.value),
Laika / target := target.value / "docs",
laikaSite / target := (Laika / target).value / "site",
laikaExtensions := Def.uncached(Nil),
laikaRenderers := Def.uncached(Settings.rendererConfigs.value),
laikaConfig := Def.uncached(LaikaConfig.defaults),
laikaPreviewConfig := Def.uncached(LaikaPreviewConfig.defaults),
laikaTheme := Def.uncached(Helium.defaults.build),
laikaTreeProcessors := Def.uncached(Nil),
laikaDescribe := Def.uncached(Tasks.describe.value),
laikaIncludeAPI := false,
laikaIncludeEPUB := Settings.validated(
Settings.parserConfig.value.baseConfig.get[Boolean]("helium.site.includeEPUB", false)
),
laikaIncludePDF := Settings.validated(
Settings.parserConfig.value.baseConfig.get[Boolean]("helium.site.includePDF", false)
),
laikaSite := Def.uncached(Tasks.site.value),
laikaGenerate := Def.uncached(Tasks.generate.evaluated),
laikaGenerateAPI := Def.uncached(Tasks.generateAPI.value),
laikaGenerateAPI / mappings := (Compile / packageDoc / mappings).value,
laikaHTML := Def.uncached(Tasks.generate.toTask(" html").value),
laikaXSLFO := Def.uncached(Tasks.generate.toTask(" xslfo").value),
laikaEPUB := Def.uncached(Tasks.generate.toTask(" epub").value),
laikaPDF := Def.uncached(Tasks.generate.toTask(" pdf").value),
laikaAST := Def.uncached(Tasks.generate.toTask(" ast").value),
laikaPackageSite := Def.uncached(Tasks.packageSite.value),
laikaPreview := Def.uncached(Tasks.startPreviewServer.value),
Laika / clean := Def.uncached(Tasks.clean.value),
laikaSite / mappings := Def.uncached {
val _ = laikaSite.value
Tasks.mappings.value
}
) :+ (cleanFiles += (Laika / target).value)
}

}
2 changes: 1 addition & 1 deletion sbt/src/main/scala/laika/sbt/Settings.scala
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ object Settings {
InputTree
.apply[IO](asLaikaFileFilter((Laika / excludeFilter).value))
.addDirectories((Laika / sourceDirectories).value.map(FilePath.fromJavaFile))(
laikaConfig.value.encoding
using laikaConfig.value.encoding
)
}

Expand Down
Loading
Loading