From aa02d6acb81dd72d03ba4d74cb0e0c2e8c0b57c9 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 18:55:06 -0500 Subject: [PATCH 01/19] Change test dependency to Weaver 0.11.3 --- build.sbt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/build.sbt b/build.sbt index 565880b..539c379 100644 --- a/build.sbt +++ b/build.sbt @@ -40,8 +40,7 @@ lazy val toolkitTest = crossProject(JVMPlatform, JSPlatform, NativePlatform) libraryDependencies ++= Seq( "org.typelevel" %%% "cats-core" % "2.11.0", "org.typelevel" %%% "cats-effect-testkit" % "3.6.1", - "org.scalameta" %%% "munit" % "1.0.0", // not % Test, on purpose :) - "org.typelevel" %%% "munit-cats-effect" % "2.0.0" + "org.typelevel" %%% "weaver-cats" % "0.11.3", // not % Test, on purpose :) ), mimaPreviousArtifacts := Set() ) @@ -51,7 +50,7 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) .settings( name := "tests", libraryDependencies ++= Seq( - "org.typelevel" %%% "munit-cats-effect" % "2.0.0" % Test, + "org.typelevel" %%% "weaver-cats" % "0.11.3" % Test, "co.fs2" %%% "fs2-io" % "3.11.0" % Test, "org.virtuslab.scala-cli" %% "cli" % "1.5.4" cross (CrossVersion.for2_13Use3) ), @@ -117,8 +116,8 @@ lazy val docs = project "Cats Effect" ), TextLink.external( - "https://github.com/typelevel/munit-cats-effect", - "Munit Cats Effect" + "https://github.com/typelevel/weaver-test", + "Weaver Test" ) ) ) From da1bea17546ef837f31845cb3872bda6c25a7f60 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 20:35:16 -0500 Subject: [PATCH 02/19] Update documentation It now replaces MUnit with Weaver --- README.md | 6 +++--- docs/index.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9928166..7a1953c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A toolkit of great libraries to get started building Typelevel apps on JVM, Node.js, and Native! Our very own flavour of the [Scala Toolkit]. -```scala +```scala 3 //> using toolkit typelevel:default import cats.effect.* @@ -28,7 +28,7 @@ scala-cli --power new typelevel/toolkit.g8 * [http4s Ember client] * [Circe] and http4s integration * [Decline Effect] -* [Munit Cats Effect] +* [Weaver Test] [Scala Toolkit]: https://docs.scala-lang.org/toolkit/introduction.html [Cats]: https://typelevel.org/cats @@ -39,4 +39,4 @@ scala-cli --power new typelevel/toolkit.g8 [http4s Ember Client]: https://http4s.org/v0.23/docs/client.html [Circe]: https://circe.github.io/circe/ [Decline Effect]: https://ben.kirw.in/decline/effect.html -[Munit Cats Effect]: https://github.com/typelevel/munit-cats-effect +[Weaver Test]: https://github.com/typelevel/weaver-test diff --git a/docs/index.md b/docs/index.md index 10beb69..9c7208c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,7 +20,7 @@ Typelevel toolkit is a meta library that currently includes these libraries: - [Http4s Ember client] - [Circe] and http4s integration - [Decline Effect] -- [Munit Cats Effect] +- [Weaver Test] and it's published for Scala 2.13 and 3.3+. @@ -121,7 +121,7 @@ Enumerations in your codebase, see [this comment] for more info. [Http4s Ember Client]: https://http4s.org/v0.23/docs/client.html [Circe]: https://circe.github.io/circe/ [Decline Effect]: https://ben.kirw.in/decline/effect.html -[Munit Cats Effect]: https://github.com/typelevel/munit-cats-effect +[Weaver Test]: https://github.com/typelevel/weaver-test [this Enumeration method]: https://github.com/scala/scala/blob/v2.13.8/src/library/scala/Enumeration.scala#L190-L215= [this comment]: https://github.com/typelevel/cats-effect/issues/3051#issuecomment-1167026949 From 30584d79118009b94beb330890a8d2dd4b1f2a02 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 21:58:10 -0500 Subject: [PATCH 03/19] Change base TL version since it's a breaking change --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 539c379..3d38d77 100644 --- a/build.sbt +++ b/build.sbt @@ -2,7 +2,7 @@ import laika.helium.config._ import laika.config.{ChoiceConfig, Selections, SelectionConfig} import java.io.File -ThisBuild / tlBaseVersion := "0.1" +ThisBuild / tlBaseVersion := "0.2" ThisBuild / startYear := Some(2023) ThisBuild / tlSitePublishBranch := Some("main") ThisBuild / githubWorkflowJavaVersions := Seq(JavaSpec.temurin("17")) From 82dcafc3793b213689eb5e7b7ed72f5ff99f05a2 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 22:21:51 -0500 Subject: [PATCH 04/19] Update suite to accommodate the Weaver test style --- .../toolkit/ToolkitCompilationTest.scala | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala index 252c284..157b105 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala @@ -16,17 +16,18 @@ package org.typelevel.toolkit -import munit.{CatsEffectSuite, TestOptions} +import cats.effect.IO import buildinfo.BuildInfo.scala3 -import scala.concurrent.duration._ +import weaver.* +import scala.concurrent.duration.* -class ToolkitCompilationTest extends CatsEffectSuite { +object ToolkitCompilationTest extends SimpleIOSuite { // 2 minutes may seem a lot, but consider that the first test for // each (scalaVersion, platform) will have to download the compiler // (if it's not the default), compile (that for native takes awhile) // and then finally run the code. - override def munitIOTimeout: Duration = 2.minute + private val TestTimeout: Duration = 2.minute testRun("Toolkit should run a simple Hello Cats Effect") { if (scala3) @@ -67,26 +68,36 @@ class ToolkitCompilationTest extends CatsEffectSuite { |}""" } - testTest("Toolkit should execute a simple munit suite") { + testTest("Toolkit should execute a simple weaver suite") { if (scala3) - """|import cats.effect.* - |import munit.* + """|import cats.effect.IO + |import weaver.* | - |class Test extends CatsEffectSuite: - | test("test")(IO.unit)""" + |object Test extends SimpleIOSuite: + | test("test")(IO.pure(success))""" else - """|import cats.effect._ - |import munit._ + """|import cats.effect.IO + |import weaver._ | - |class Test extends CatsEffectSuite { - | test("test")(IO.unit) + |object Test extends SimpleIOSuite { + | test("test")(IO.pure(success)) |}""" } - def testRun(testName: TestOptions)(scriptBody: String): Unit = - test(testName)(ScalaCliProcess.run(scriptBody)) + private def withTimeout(test: IO[Expectations]): IO[Expectations] = + test.timeoutTo( + TestTimeout, + IO.pure(failure(s"Test exceeded timeout of $TestTimeout")) + ) + + def testRun(testName: String)(scriptBody: String): Unit = + test(testName) { + withTimeout(ScalaCliProcess.run(scriptBody)) + } - def testTest(testName: TestOptions)(scriptBody: String): Unit = - test(testName)(ScalaCliProcess.test(scriptBody)) + def testTest(testName: String)(scriptBody: String): Unit = + test(testName) { + withTimeout(ScalaCliProcess.test(scriptBody)) + } } From b51b4755def8cdd259aec34e2347f1b649a74d92 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 22:24:06 -0500 Subject: [PATCH 05/19] Change the CLI process to use Expectations instead of the old MUnit fail. --- .../typelevel/toolkit/ScalaCliProcess.scala | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala index 835c325..8db6b31 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala @@ -18,19 +18,22 @@ package org.typelevel.toolkit import cats.effect.kernel.Resource import cats.effect.IO -import cats.syntax.parallel._ +import cats.syntax.parallel.* import buildinfo.BuildInfo import fs2.Stream import fs2.io.file.Files import fs2.io.process.ProcessBuilder -import munit.Assertions.fail +import weaver.{Expectations, SourceLocation} +import weaver.Expectations.Helpers.{failure, success} object ScalaCliProcess { private val ClassPath: String = BuildInfo.classPath private val JavaHome: String = BuildInfo.javaHome - private def scalaCli(args: List[String]): IO[Unit] = ProcessBuilder( + private def scalaCli(args: List[String])(implicit + loc: SourceLocation + ): IO[Expectations] = ProcessBuilder( s"$JavaHome/bin/java", args.prependedAll(List("-cp", ClassPath, "scala.cli.ScalaCli")) ).spawn[IO] @@ -40,7 +43,7 @@ object ScalaCliProcess { process.stdout.through(fs2.text.utf8.decode).compile.string, process.stderr.through(fs2.text.utf8.decode).compile.string ).parFlatMapN { - case (0, _, _) => IO.unit + case (0, _, _) => IO.pure(success) case (exitCode, stdout, stdErr) => val errorMessage: String = List( Option(stdout).filter(_.nonEmpty).map(s => s"[STDOUT]: $s"), @@ -52,7 +55,7 @@ object ScalaCliProcess { case (summary, None) => summary } - IO.delay(fail(errorMessage)) + IO.pure(failure(errorMessage)) } ) @@ -68,7 +71,7 @@ object ScalaCliProcess { ) .evalTap { path => val commonHeader = List( - s"//> using scala ${BuildInfo.scalaBinaryVersion}", + s"//> using scala ${BuildInfo.scalaVersion}", s"//> using toolkit typelevel:${BuildInfo.version}", s"//> using platform ${BuildInfo.platform}" ) @@ -86,12 +89,11 @@ object ScalaCliProcess { } .map(_.toString) - def command(args: List[String]): IO[Unit] = scalaCli(args) + def command(args: List[String])(implicit loc: SourceLocation): IO[Expectations] = scalaCli(args) - def run(body: String): IO[Unit] = + def run(body: String)(implicit loc: SourceLocation): IO[Expectations] = writeToFile(body)(false).use(f => scalaCli("run" :: f :: Nil)) - def test(body: String): IO[Unit] = + def test(body: String)(implicit loc: SourceLocation): IO[Expectations] = writeToFile(body)(true).use(f => scalaCli("test" :: f :: Nil)) - } From a9bdd3d7b660e13396d6bb421c7c12477a33e607 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 22:42:59 -0500 Subject: [PATCH 06/19] Format files before PR --- .../test/scala/org/typelevel/toolkit/ScalaCliProcess.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala index 8db6b31..04f0edb 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala @@ -89,7 +89,9 @@ object ScalaCliProcess { } .map(_.toString) - def command(args: List[String])(implicit loc: SourceLocation): IO[Expectations] = scalaCli(args) + def command(args: List[String])(implicit + loc: SourceLocation + ): IO[Expectations] = scalaCli(args) def run(body: String)(implicit loc: SourceLocation): IO[Expectations] = writeToFile(body)(false).use(f => scalaCli("run" :: f :: Nil)) From 4d702407e03e5f4a64ed69a4080bddf48dfcbd04 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 22:48:11 -0500 Subject: [PATCH 07/19] Address copilot suggestions --- .../src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala | 2 +- .../scala/org/typelevel/toolkit/ToolkitCompilationTest.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala index 04f0edb..3f3accd 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala @@ -71,7 +71,7 @@ object ScalaCliProcess { ) .evalTap { path => val commonHeader = List( - s"//> using scala ${BuildInfo.scalaVersion}", + s"//> using scala ${BuildInfo.scalaBinaryVersion}", s"//> using toolkit typelevel:${BuildInfo.version}", s"//> using platform ${BuildInfo.platform}" ) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala index 157b105..18cc6f5 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala @@ -27,7 +27,7 @@ object ToolkitCompilationTest extends SimpleIOSuite { // each (scalaVersion, platform) will have to download the compiler // (if it's not the default), compile (that for native takes awhile) // and then finally run the code. - private val TestTimeout: Duration = 2.minute + private val TestTimeout = 2.minute testRun("Toolkit should run a simple Hello Cats Effect") { if (scala3) From 2af1c19f953caadb6fe509940e084c59c8b5539f Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 22:49:07 -0500 Subject: [PATCH 08/19] Format build.sbt --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 3d38d77..7d27811 100644 --- a/build.sbt +++ b/build.sbt @@ -40,7 +40,7 @@ lazy val toolkitTest = crossProject(JVMPlatform, JSPlatform, NativePlatform) libraryDependencies ++= Seq( "org.typelevel" %%% "cats-core" % "2.11.0", "org.typelevel" %%% "cats-effect-testkit" % "3.6.1", - "org.typelevel" %%% "weaver-cats" % "0.11.3", // not % Test, on purpose :) + "org.typelevel" %%% "weaver-cats" % "0.11.3" // not % Test, on purpose :) ), mimaPreviousArtifacts := Set() ) From e48f01b9aeb02576796dadc24c2055f6ae8b7c80 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 22:52:36 -0500 Subject: [PATCH 09/19] Bump minimum Scala 2 version --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 7d27811..6d52ffb 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,7 @@ ThisBuild / mergifyStewardConfig ~= { _.map(_.withAuthor("typelevel-steward[bot]")) } -ThisBuild / crossScalaVersions := Seq("2.13.16", "3.3.5") +ThisBuild / crossScalaVersions := Seq("2.13.18", "3.3.5") lazy val root = tlCrossRootProject .aggregate(toolkit, toolkitTest, tests) From fa4a760d1018478274a54c443a11ec48522874e6 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 23:29:47 -0500 Subject: [PATCH 10/19] Bump sbt version, tl plugin and scala js To solve the kind projector dependency issue --- project/build.properties | 2 +- project/plugins.sbt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/project/build.properties b/project/build.properties index cc68b53..df061f4 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.10.11 +sbt.version=1.12.9 diff --git a/project/plugins.sbt b/project/plugins.sbt index 6469698..501b69b 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,7 +1,7 @@ -val sbtTlVersion = "0.7.7" +val sbtTlVersion = "0.8.5" addSbtPlugin("org.typelevel" % "sbt-typelevel" % sbtTlVersion) addSbtPlugin("org.typelevel" % "sbt-typelevel-mergify" % sbtTlVersion) addSbtPlugin("org.typelevel" % "sbt-typelevel-site" % sbtTlVersion) -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.20.1") addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.17") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1") From 7ccf425dd0742a860bc1863a96cd1e6002750ec4 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 23:31:59 -0500 Subject: [PATCH 11/19] Change to scala version key to solve Bloop bride problem --- build.sbt | 1 + .../src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 6d52ffb..19ce379 100644 --- a/build.sbt +++ b/build.sbt @@ -55,6 +55,7 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) "org.virtuslab.scala-cli" %% "cli" % "1.5.4" cross (CrossVersion.for2_13Use3) ), buildInfoKeys += scalaBinaryVersion, + buildInfoKeys += scalaVersion, buildInfoKeys += "nativeVersion" -> nativeVersion, buildInfoKeys += BuildInfoKey.map(Compile / dependencyClasspath) { case (_, v) => diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala index 3f3accd..04f0edb 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala @@ -71,7 +71,7 @@ object ScalaCliProcess { ) .evalTap { path => val commonHeader = List( - s"//> using scala ${BuildInfo.scalaBinaryVersion}", + s"//> using scala ${BuildInfo.scalaVersion}", s"//> using toolkit typelevel:${BuildInfo.version}", s"//> using platform ${BuildInfo.platform}" ) From 6c917ea52839d07d5856a84cefb5d7c32111eda3 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 23:35:26 -0500 Subject: [PATCH 12/19] Update workflow to lastest version --- .github/workflows/ci.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4922456..f5444ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,7 @@ jobs: timeout-minutes: 60 steps: - name: Checkout current branch (full) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -45,7 +45,7 @@ jobs: - name: Setup Java (temurin@17) id: setup-java-temurin-17 if: matrix.java == 'temurin@17' - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 17 @@ -91,7 +91,7 @@ jobs: - name: Upload target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: target-${{ matrix.os }}-${{ matrix.java }}-${{ matrix.scala }}-${{ matrix.project }} path: targets.tar @@ -107,7 +107,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout current branch (full) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -117,7 +117,7 @@ jobs: - name: Setup Java (temurin@17) id: setup-java-temurin-17 if: matrix.java == 'temurin@17' - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 17 @@ -128,7 +128,7 @@ jobs: run: sbt +update - name: Download target directories (2.13, rootJS) - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootJS @@ -138,7 +138,7 @@ jobs: rm targets.tar - name: Download target directories (2.13, rootJVM) - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootJVM @@ -148,7 +148,7 @@ jobs: rm targets.tar - name: Download target directories (2.13, rootNative) - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: target-${{ matrix.os }}-${{ matrix.java }}-2.13-rootNative @@ -158,7 +158,7 @@ jobs: rm targets.tar - name: Download target directories (3, rootJS) - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJS @@ -168,7 +168,7 @@ jobs: rm targets.tar - name: Download target directories (3, rootJVM) - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootJVM @@ -178,7 +178,7 @@ jobs: rm targets.tar - name: Download target directories (3, rootNative) - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: name: target-${{ matrix.os }}-${{ matrix.java }}-3-rootNative @@ -221,7 +221,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout current branch (full) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -231,7 +231,7 @@ jobs: - name: Setup Java (temurin@17) id: setup-java-temurin-17 if: matrix.java == 'temurin@17' - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 17 @@ -256,7 +256,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout current branch (full) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -266,7 +266,7 @@ jobs: - name: Setup Java (temurin@17) id: setup-java-temurin-17 if: matrix.java == 'temurin@17' - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 17 From e6683fdfb8402abf5df3d97a90516560d877dddc Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Tue, 14 Apr 2026 23:50:29 -0500 Subject: [PATCH 13/19] Use platform version for each of the headers on the tests --- build.sbt | 8 +++++--- .../scala/org/typelevel/toolkit/ScalaCliProcess.scala | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/build.sbt b/build.sbt index 19ce379..255e09e 100644 --- a/build.sbt +++ b/build.sbt @@ -56,7 +56,6 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) ), buildInfoKeys += scalaBinaryVersion, buildInfoKeys += scalaVersion, - buildInfoKeys += "nativeVersion" -> nativeVersion, buildInfoKeys += BuildInfoKey.map(Compile / dependencyClasspath) { case (_, v) => "classPath" -> v.seq @@ -76,13 +75,15 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) Test / test := (Test / test) .dependsOn(toolkit.jvm / publishLocal, toolkitTest.jvm / publishLocal) .value, - buildInfoKeys += "platform" -> "jvm" + buildInfoKeys += "platform" -> "jvm", + buildInfoKeys += "platformVersion" -> "" ) .jsSettings( Test / test := (Test / test) .dependsOn(toolkit.js / publishLocal, toolkitTest.js / publishLocal) .value, buildInfoKeys += "platform" -> "js", + buildInfoKeys += "platformVersion" -> scalaJSVersion, scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.CommonJSModule) } ) .nativeSettings( @@ -92,7 +93,8 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) toolkitTest.native / publishLocal ) .value, - buildInfoKeys += "platform" -> "native" + buildInfoKeys += "platform" -> "native", + buildInfoKeys += "platformVersion" -> nativeVersion ) .enablePlugins(BuildInfoPlugin, NoPublishPlugin) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala index 04f0edb..79dd074 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala @@ -77,10 +77,12 @@ object ScalaCliProcess { ) val header = BuildInfo.platform match { case "jvm" => commonHeader - case "js" => commonHeader + case "js" => + commonHeader :+ + s"//> using jsVersion ${BuildInfo.platformVersion}" case "native" => commonHeader :+ - s"//> using nativeVersion ${BuildInfo.nativeVersion}" + s"//> using nativeVersion ${BuildInfo.platformVersion}" } Stream(header.mkString("", "\n", "\n"), scriptBody.stripMargin) .through(Files[IO].writeUtf8(path)) From 1faf06743ccf0d98b88ad3b35bc79ab08fdc04f1 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Wed, 15 Apr 2026 00:01:54 -0500 Subject: [PATCH 14/19] Bump scala-cli version --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 255e09e..8913552 100644 --- a/build.sbt +++ b/build.sbt @@ -52,7 +52,7 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) libraryDependencies ++= Seq( "org.typelevel" %%% "weaver-cats" % "0.11.3" % Test, "co.fs2" %%% "fs2-io" % "3.11.0" % Test, - "org.virtuslab.scala-cli" %% "cli" % "1.5.4" cross (CrossVersion.for2_13Use3) + "org.virtuslab.scala-cli" %% "cli" % "1.12.5" cross (CrossVersion.for2_13Use3) ), buildInfoKeys += scalaBinaryVersion, buildInfoKeys += scalaVersion, From f828714edbe4a4dc1d01351b866ad5b0c40c85f8 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Wed, 15 Apr 2026 13:48:00 -0500 Subject: [PATCH 15/19] Update Weaver to 0.12.0 --- build.sbt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index d7cc48d..c83daef 100644 --- a/build.sbt +++ b/build.sbt @@ -40,7 +40,7 @@ lazy val toolkitTest = crossProject(JVMPlatform, JSPlatform, NativePlatform) libraryDependencies ++= Seq( "org.typelevel" %%% "cats-core" % "2.13.0", "org.typelevel" %%% "cats-effect-testkit" % "3.7.0", - "org.typelevel" %%% "weaver-cats" % "0.11.3" // not % Test, on purpose :) + "org.typelevel" %%% "weaver-cats" % "0.12.0" // not % Test, on purpose :) ), libraryDependencySchemes += "org.scala-native" %% "test-interface_native0.5" % VersionScheme.Always, mimaPreviousArtifacts := Set() @@ -51,7 +51,7 @@ lazy val tests = crossProject(JVMPlatform, JSPlatform, NativePlatform) .settings( name := "tests", libraryDependencies ++= Seq( - "org.typelevel" %%% "weaver-cats" % "0.11.3" % Test, + "org.typelevel" %%% "weaver-cats" % "0.12.0" % Test, "co.fs2" %%% "fs2-io" % "3.13.0" % Test, "org.virtuslab.scala-cli" %% "cli" % "1.13.0" cross (CrossVersion.for2_13Use3) ), @@ -100,7 +100,7 @@ lazy val docs = project .enablePlugins(TypelevelSitePlugin) .dependsOn(toolkit.jvm) .settings( - scalaVersion := "3.3.5", + scalaVersion := "3.3.7", tlSiteHelium ~= { _.site.mainNavigation( appendLinks = List( From 1d37ff1ded321db9881368e1dcd3191e69a43c3e Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Wed, 15 Apr 2026 13:48:32 -0500 Subject: [PATCH 16/19] Format files before PR --- .../src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala index 4192701..6c52c0a 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ScalaCliProcess.scala @@ -43,7 +43,7 @@ object ScalaCliProcess { process.stdout.through(fs2.text.utf8.decode).compile.string, process.stderr.through(fs2.text.utf8.decode).compile.string ).parFlatMapN { - case (0, _, _) => IO.pure(success) + case (0, _, _) => IO.pure(success) case (exitCode, stdout, stdErr) => val errorMessage: String = List( Option(stdout).filter(_.nonEmpty).map(s => s"[STDOUT]: $s"), From b75e3763093fe8519367d50886a60a11a3e4f403 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Wed, 15 Apr 2026 14:12:56 -0500 Subject: [PATCH 17/19] Update Site to Navite 0.5 --- build.sbt | 2 +- docs/index.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.sbt b/build.sbt index c83daef..6bd67a1 100644 --- a/build.sbt +++ b/build.sbt @@ -100,7 +100,7 @@ lazy val docs = project .enablePlugins(TypelevelSitePlugin) .dependsOn(toolkit.jvm) .settings( - scalaVersion := "3.3.7", + scalaVersion := "3.3.5", tlSiteHelium ~= { _.site.mainNavigation( appendLinks = List( diff --git a/docs/index.md b/docs/index.md index 1b50b39..f6c153c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -71,14 +71,14 @@ object Hello extends IOApp.Simple { ### Scala Native usage -Since the native flavour of most of the **Typelevel libraries** is, at the moment, built against Scala Native 0.4.15, when using [Scala CLI] you have to declare the Scala native's version, i.e. +Since the native flavour of most of the **Typelevel libraries** is, at the moment, built against Scala Native 0.5.11, when using [Scala CLI] you have to declare the Scala native's version, i.e. @:select(scala-version) @:choice(scala-3) ```scala mdoc:reset:silent //> using toolkit typelevel:default //> using platform native -//> using nativeVersion 0.4.15 +//> using nativeVersion 0.5.11 import cats.effect.* @@ -89,7 +89,7 @@ object Hello extends IOApp.Simple: ```scala mdoc:reset:silent //> using toolkit typelevel:default //> using platform native -//> using nativeVersion 0.4.17 +//> using nativeVersion 0.5.11 import cats.effect._ From 8f537f19d82e288e49ee5e6695629cdb3e5b8b98 Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Wed, 15 Apr 2026 14:13:21 -0500 Subject: [PATCH 18/19] Increate test execution time --- .../scala/org/typelevel/toolkit/ToolkitCompilationTest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala index 18cc6f5..c413b23 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala @@ -27,7 +27,7 @@ object ToolkitCompilationTest extends SimpleIOSuite { // each (scalaVersion, platform) will have to download the compiler // (if it's not the default), compile (that for native takes awhile) // and then finally run the code. - private val TestTimeout = 2.minute + private val TestTimeout = 4.minutes testRun("Toolkit should run a simple Hello Cats Effect") { if (scala3) From b12f70c5980a978c514e6487d97b89a00193ec8d Mon Sep 17 00:00:00 2001 From: Gabriel Santana Paredes Date: Wed, 15 Apr 2026 17:41:09 -0500 Subject: [PATCH 19/19] Decrease parallelism --- .../scala/org/typelevel/toolkit/ToolkitCompilationTest.scala | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala index c413b23..1597da5 100644 --- a/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala +++ b/tests/shared/src/test/scala/org/typelevel/toolkit/ToolkitCompilationTest.scala @@ -28,6 +28,9 @@ object ToolkitCompilationTest extends SimpleIOSuite { // (if it's not the default), compile (that for native takes awhile) // and then finally run the code. private val TestTimeout = 4.minutes + + // This helps improve times on Native, more investigation is needed to understand why. + override val maxParallelism = 1 testRun("Toolkit should run a simple Hello Cats Effect") { if (scala3)