Skip to content

Commit b435d1a

Browse files
Merge pull request #687 from armanbilge/feature/native
Cross-build for Native
2 parents 240a0b4 + 9f9c5f6 commit b435d1a

File tree

5 files changed

+91
-33
lines changed

5 files changed

+91
-33
lines changed

.github/workflows/ci.yml

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,16 @@ jobs:
3030
os: [ubuntu-latest]
3131
scala: [2.13.8, 2.12.16, 3.1.3]
3232
java: [temurin@8, temurin@11]
33-
project: [rootJS, rootJVM]
33+
project: [rootJS, rootJVM, rootNative]
3434
exclude:
3535
- scala: 2.12.16
3636
java: temurin@11
3737
- scala: 3.1.3
3838
java: temurin@11
3939
- project: rootJS
4040
java: temurin@11
41+
- project: rootNative
42+
java: temurin@11
4143
runs-on: ${{ matrix.os }}
4244
steps:
4345
- name: Checkout current branch (full)
@@ -100,6 +102,10 @@ jobs:
100102
if: matrix.project == 'rootJS'
101103
run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' Test/scalaJSLinkerResult
102104

105+
- name: nativeLink
106+
if: matrix.project == 'rootNative'
107+
run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' Test/nativeLink
108+
103109
- name: Test
104110
run: sbt 'project ${{ matrix.project }}' '++${{ matrix.scala }}' test
105111

@@ -113,11 +119,11 @@ jobs:
113119

114120
- name: Make target directories
115121
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
116-
run: mkdir -p testing/jvm/target noop/jvm/target target .js/target site/target core/js/target testing/js/target noop/js/target core/jvm/target .jvm/target .native/target slf4j/target project/target
122+
run: mkdir -p testing/jvm/target noop/jvm/target target .js/target core/native/target site/target testing/native/target noop/native/target core/js/target testing/js/target noop/js/target core/jvm/target .jvm/target .native/target slf4j/target project/target
117123

118124
- name: Compress target directories
119125
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
120-
run: tar cf targets.tar testing/jvm/target noop/jvm/target target .js/target site/target core/js/target testing/js/target noop/js/target core/jvm/target .jvm/target .native/target slf4j/target project/target
126+
run: tar cf targets.tar testing/jvm/target noop/jvm/target target .js/target core/native/target site/target testing/native/target noop/native/target core/js/target testing/js/target noop/js/target core/jvm/target .jvm/target .native/target slf4j/target project/target
121127

122128
- name: Upload target directories
123129
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
@@ -206,6 +212,16 @@ jobs:
206212
tar xf targets.tar
207213
rm targets.tar
208214
215+
- name: Download target directories (2.13.8, rootNative)
216+
uses: actions/download-artifact@v2
217+
with:
218+
name: target-${{ matrix.os }}-${{ matrix.java }}-2.13.8-rootNative
219+
220+
- name: Inflate target directories (2.13.8, rootNative)
221+
run: |
222+
tar xf targets.tar
223+
rm targets.tar
224+
209225
- name: Download target directories (2.12.16, rootJS)
210226
uses: actions/download-artifact@v2
211227
with:
@@ -226,6 +242,16 @@ jobs:
226242
tar xf targets.tar
227243
rm targets.tar
228244
245+
- name: Download target directories (2.12.16, rootNative)
246+
uses: actions/download-artifact@v2
247+
with:
248+
name: target-${{ matrix.os }}-${{ matrix.java }}-2.12.16-rootNative
249+
250+
- name: Inflate target directories (2.12.16, rootNative)
251+
run: |
252+
tar xf targets.tar
253+
rm targets.tar
254+
229255
- name: Download target directories (3.1.3, rootJS)
230256
uses: actions/download-artifact@v2
231257
with:
@@ -246,6 +272,16 @@ jobs:
246272
tar xf targets.tar
247273
rm targets.tar
248274
275+
- name: Download target directories (3.1.3, rootNative)
276+
uses: actions/download-artifact@v2
277+
with:
278+
name: target-${{ matrix.os }}-${{ matrix.java }}-3.1.3-rootNative
279+
280+
- name: Inflate target directories (3.1.3, rootNative)
281+
run: |
282+
tar xf targets.tar
283+
rm targets.tar
284+
249285
- name: Import signing key
250286
if: env.PGP_SECRET != '' && env.PGP_PASSPHRASE == ''
251287
run: echo $PGP_SECRET | base64 -di | gpg --import

build.sbt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ val Scala213 = "2.13.8"
44
val Scala212 = "2.12.16"
55
val Scala3 = "3.1.3"
66

7-
ThisBuild / tlBaseVersion := "2.4"
7+
ThisBuild / tlBaseVersion := "2.5"
88
ThisBuild / crossScalaVersions := Seq(Scala213, Scala212, Scala3)
99
ThisBuild / scalaVersion := Scala213
1010
ThisBuild / startYear := Some(2018)
@@ -29,7 +29,7 @@ ThisBuild / tlVersionIntroduced := Map("3" -> "2.1.1")
2929
val catsV = "2.8.0"
3030
val catsEffectV = "3.3.14"
3131
val slf4jV = "1.7.36"
32-
val munitCatsEffectV = "1.0.7"
32+
val munitCatsEffectV = "2.0.0-M3"
3333
val logbackClassicV = "1.2.11"
3434

3535
Global / onChangedBuildSource := ReloadOnSourceChanges
@@ -41,25 +41,22 @@ lazy val docs = project
4141
.enablePlugins(TypelevelSitePlugin)
4242
.dependsOn(slf4j)
4343

44-
lazy val core = crossProject(JSPlatform, JVMPlatform)
44+
lazy val core = crossProject(JSPlatform, JVMPlatform, NativePlatform)
4545
.settings(commonSettings)
4646
.settings(
4747
name := "log4cats-core",
4848
libraryDependencies ++= Seq(
49-
"org.typelevel" %%% "cats-core" % catsV
49+
"org.typelevel" %%% "cats-core" % catsV,
50+
"org.typelevel" %%% "cats-effect-std" % catsEffectV
5051
),
5152
libraryDependencies ++= {
5253
if (tlIsScala3.value) Seq.empty
5354
else Seq("org.scala-lang" % "scala-reflect" % scalaVersion.value % Provided)
5455
}
5556
)
56-
.jsSettings(
57-
// https://www.scala-js.org/news/2022/04/04/announcing-scalajs-1.10.0#fixes-with-compatibility-concerns
58-
libraryDependencies += ("org.scala-js" %%% "scalajs-java-securerandom" % "1.0.0")
59-
.cross(CrossVersion.for3Use2_13)
60-
)
57+
.nativeSettings(commonNativeSettings)
6158

62-
lazy val testing = crossProject(JSPlatform, JVMPlatform)
59+
lazy val testing = crossProject(JSPlatform, JVMPlatform, NativePlatform)
6360
.settings(commonSettings)
6461
.dependsOn(core)
6562
.settings(
@@ -69,13 +66,15 @@ lazy val testing = crossProject(JSPlatform, JVMPlatform)
6966
"ch.qos.logback" % "logback-classic" % logbackClassicV % Test
7067
)
7168
)
69+
.nativeSettings(commonNativeSettings)
7270

73-
lazy val noop = crossProject(JSPlatform, JVMPlatform)
71+
lazy val noop = crossProject(JSPlatform, JVMPlatform, NativePlatform)
7472
.settings(commonSettings)
7573
.dependsOn(core)
7674
.settings(
7775
name := "log4cats-noop"
7876
)
77+
.nativeSettings(commonNativeSettings)
7978

8079
lazy val slf4j = project
8180
.settings(commonSettings)
@@ -95,6 +94,10 @@ lazy val slf4j = project
9594

9695
lazy val commonSettings = Seq(
9796
libraryDependencies ++= Seq(
98-
"org.typelevel" %%% "munit-cats-effect-3" % munitCatsEffectV % Test
97+
"org.typelevel" %%% "munit-cats-effect" % munitCatsEffectV % Test
9998
)
10099
)
100+
101+
lazy val commonNativeSettings = Seq(
102+
tlVersionIntroduced := List("2.12", "2.13", "3").map(_ -> "2.4.1").toMap
103+
)

core/shared/src/main/scala/org/typelevel/log4cats/PagingSelfAwareStructuredLogger.scala

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
package org.typelevel.log4cats
1818

1919
import cats._
20-
import cats.implicits._
20+
import cats.effect.std.UUIDGen
21+
import cats.syntax.all._
2122

2223
import java.io.{PrintWriter, StringWriter}
2324
import java.util.UUID
@@ -52,19 +53,35 @@ object PagingSelfAwareStructuredLogger {
5253
* @return
5354
* SelfAwareStructuredLogger with pagination.
5455
*/
56+
def paged[F[_]: Monad: UUIDGen](pageSizeK: Int = 64, maxPageNeeded: Int = 999)(
57+
logger: SelfAwareStructuredLogger[F]
58+
): SelfAwareStructuredLogger[F] =
59+
new PagingSelfAwareStructuredLogger[F](pageSizeK, maxPageNeeded, UUIDGen.randomUUID)(logger)
60+
61+
@deprecated("Use paged", "2.5.0")
5562
def withPaging[F[_]: Monad](pageSizeK: Int = 64, maxPageNeeded: Int = 999)(
5663
logger: SelfAwareStructuredLogger[F]
5764
): SelfAwareStructuredLogger[F] =
5865
new PagingSelfAwareStructuredLogger[F](pageSizeK, maxPageNeeded)(logger)
5966

60-
private class PagingSelfAwareStructuredLogger[F[_]: Monad](pageSizeK: Int, maxPageNeeded: Int)(
67+
private class PagingSelfAwareStructuredLogger[F[_]: Monad](
68+
pageSizeK: Int,
69+
maxPageNeeded: Int,
70+
randomUUID: F[UUID]
71+
)(
6172
sl: SelfAwareStructuredLogger[F]
6273
) extends SelfAwareStructuredLogger[F] {
6374
if (pageSizeK <= 0 || maxPageNeeded <= 0)
6475
throw new IllegalArgumentException(
6576
s"pageSizeK(=$pageSizeK) and maxPageNeeded(=$maxPageNeeded) must be positive numbers."
6677
)
6778

79+
@deprecated("Use constructor with randomUUID", "2.5.0")
80+
def this(pageSizeK: Int, maxPageNeeded: Int)(
81+
sl: SelfAwareStructuredLogger[F]
82+
) =
83+
this(pageSizeK, maxPageNeeded, Monad[F].unit.map(_ => UUID.randomUUID()))(sl)
84+
6885
private val pageIndices = (1 to maxPageNeeded).toList
6986
private val logSplitIdN = "log_split_id"
7087
private val pageSize = pageSizeK * 1024
@@ -100,16 +117,17 @@ object PagingSelfAwareStructuredLogger {
100117
private def addCtx(
101118
msg: => String,
102119
ctx: Map[String, String]
103-
): (String, Map[String, String]) = {
104-
val logSplitId = UUID.randomUUID().show
105-
(
106-
logSplitId,
107-
ctx
108-
.updated(logSplitIdN, logSplitId)
109-
.updated("page_size", s"${pageSizeK.show} Kib")
110-
.updated("log_size", s"${msg.length.show} Byte")
111-
)
112-
}
120+
): F[(String, Map[String, String])] =
121+
randomUUID.map { uuid =>
122+
val logSplitId = uuid.show
123+
(
124+
logSplitId,
125+
ctx
126+
.updated(logSplitIdN, logSplitId)
127+
.updated("page_size", s"${pageSizeK.show} Kib")
128+
.updated("log_size", s"${msg.length.show} Byte")
129+
)
130+
}
113131

114132
private def doLogging(
115133
loggingLevelChk: => F[Boolean],
@@ -118,8 +136,7 @@ object PagingSelfAwareStructuredLogger {
118136
ctx: Map[String, String] = Map()
119137
): F[Unit] = {
120138
loggingLevelChk.ifM(
121-
{
122-
val (logSplitId, newCtx) = addCtx(msg, ctx)
139+
addCtx(msg, ctx).flatMap { case (logSplitId, newCtx) =>
123140
pagedLogging(logOpWithCtx(newCtx), logSplitId, msg)
124141
},
125142
Applicative[F].unit

project/plugins.sbt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1")
2-
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3")
1+
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1")
2+
addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.7")
3+
addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.2.0")
4+
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3")
35
val sbtTypelevelVersion = "0.4.13"
46
addSbtPlugin("org.typelevel" % "sbt-typelevel" % sbtTypelevelVersion)
57
addSbtPlugin("org.typelevel" % "sbt-typelevel-site" % sbtTypelevelVersion)

testing/shared/src/test/scala/org/typelevel/log4cats/PagingSelfAwareStructuredLoggerTestRunner.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class PagingSelfAwareStructuredLoggerTestRunner extends CatsEffectSuite {
4444
val pageSize = pageSizeK * 1024
4545
val stl = StructuredTestingLogger.impl[IO]()
4646
val pagingStl: SelfAwareStructuredLogger[IO] =
47-
PagingSelfAwareStructuredLogger.withPaging[IO](pageSizeK, maxPageNeeded)(stl)
47+
PagingSelfAwareStructuredLogger.paged[IO](pageSizeK, maxPageNeeded)(stl)
4848
val logResult: IO[Unit] = logTest(pagingStl)
4949

5050
val test = logResult >> stl.logged
@@ -103,7 +103,7 @@ class PagingSelfAwareStructuredLoggerTestRunner extends CatsEffectSuite {
103103
): Unit = {
104104
val stl = StructuredTestingLogger.impl[IO]()
105105
try {
106-
PagingSelfAwareStructuredLogger.withPaging[IO](pageSizeK, maxPageNeeded)(stl)
106+
PagingSelfAwareStructuredLogger.paged[IO](pageSizeK, maxPageNeeded)(stl)
107107
fail(s"$suiteName $caseName: Expected exception not thrown")
108108
} catch {
109109
case thr: Throwable => assert(thr.isInstanceOf[IllegalArgumentException])

0 commit comments

Comments
 (0)