Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f21b000
Update aws-lambda-java-core to 1.4.0
typelevel-steward[bot] Sep 3, 2025
2bf9188
Update circe-jawn, circe-literal, ... to 0.14.15
typelevel-steward[bot] Sep 30, 2025
d3c86bf
Update expecty to 0.17.0
typelevel-steward[bot] Nov 13, 2024
5d8956d
Update fs2-io to 3.12.2
typelevel-steward[bot] Sep 4, 2025
2637c0e
Update functions-framework-api to 1.1.4
typelevel-steward[bot] Nov 27, 2024
057570e
Update http4s-circe, http4s-client, ... to 0.23.32
typelevel-steward[bot] Sep 24, 2025
1882da2
Update ip4s-core to 3.7.0
typelevel-steward[bot] Apr 21, 2025
aa9828b
Update java-function-invoker to 1.3.3
typelevel-steward[bot] Nov 27, 2024
c5cd986
Update munit-cats-effect-3 to 2.1.0
typelevel-steward[bot] Mar 31, 2025
7401e86
Update munit-scalacheck to 1.2.0
typelevel-steward[bot] Sep 9, 2025
267176a
Update natchez-core, natchez-xray to 0.3.8
typelevel-steward[bot] May 2, 2025
f592570
Update natchez-http4s to 0.6.1
typelevel-steward[bot] Jan 16, 2025
5e2316e
Update sbt, scripted-plugin to 1.11.7
typelevel-steward[bot] Oct 5, 2025
0e8dbcb
Update sbt-buildinfo to 0.13.1
typelevel-steward[bot] Nov 9, 2024
d4381f6
Update sbt-scalajs, scalajs-compiler, ... to 1.18.2
typelevel-steward[bot] Jan 23, 2025
79ac970
Update sbt-typelevel, ... to 0.8.2
typelevel-steward[bot] Oct 10, 2025
4b96c75
Run prePR with sbt-typelevel
typelevel-steward[bot] Oct 10, 2025
6ad0f36
Update scala-library to 2.13.17
typelevel-steward[bot] Oct 7, 2025
6627985
Update scala3-library, ... to 3.3.6
typelevel-steward[bot] May 8, 2025
ac75bfe
Update scalafmt-core to 3.8.6
typelevel-steward[bot] Jan 23, 2025
dafb425
Reformat with scalafmt 3.8.6
typelevel-steward[bot] Jan 23, 2025
74b7c68
Add 'Reformat with scalafmt 3.8.6' to .git-blame-ignore-revs
typelevel-steward[bot] Jan 23, 2025
9f44ebe
Update scodec-bits to 1.2.4
typelevel-steward[bot] Jul 11, 2025
6295f91
Update scalajs to 1.20.1
bpholt Oct 14, 2025
c47bdbd
Run prePR
bpholt Oct 14, 2025
92501fc
Add 'Run prePR' to .git-blame-ignore-revs
bpholt Oct 14, 2025
5872a5a
Update cats-effect to 3.5.7
typelevel-steward[bot] Nov 27, 2024
72e9b9d
Update scalacheck-effect to 2.1.0-RC1
bpholt Oct 14, 2025
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
4 changes: 4 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Scala Steward: Reformat with scalafmt 3.8.6
dafb4253a1caafadc35472efab12e9d6e23671a9
# bpholt: run prePR after cherry-picking a bunch of otherwise failing update PRs
c47bdbdcabdb6bdeb67e75f777f35a32265cd7b5
18 changes: 9 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
timeout-minutes: 60
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0

Expand All @@ -60,7 +60,7 @@ jobs:
- name: Setup Java (corretto@11)
id: setup-java-corretto-11
if: matrix.java == 'corretto@11'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: corretto
java-version: 11
Expand All @@ -73,7 +73,7 @@ jobs:
- name: Setup Java (corretto@17)
id: setup-java-corretto-17
if: matrix.java == 'corretto@17'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: corretto
java-version: 17
Expand Down Expand Up @@ -141,7 +141,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0

Expand All @@ -151,7 +151,7 @@ jobs:
- name: Setup Java (corretto@11)
id: setup-java-corretto-11
if: matrix.java == 'corretto@11'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: corretto
java-version: 11
Expand All @@ -164,7 +164,7 @@ jobs:
- name: Setup Java (corretto@17)
id: setup-java-corretto-17
if: matrix.java == 'corretto@17'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: corretto
java-version: 17
Expand Down Expand Up @@ -258,7 +258,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0

Expand All @@ -268,7 +268,7 @@ jobs:
- name: Setup Java (corretto@11)
id: setup-java-corretto-11
if: matrix.java == 'corretto@11'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: corretto
java-version: 11
Expand All @@ -281,7 +281,7 @@ jobs:
- name: Setup Java (corretto@17)
id: setup-java-corretto-17
if: matrix.java == 'corretto@17'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: corretto
java-version: 17
Expand Down
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version = 3.8.3
version = 3.8.6

runner.dialect = Scala213Source3
fileOverride {
Expand Down
40 changes: 20 additions & 20 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -46,18 +46,18 @@ ThisBuild / githubWorkflowBuildPreamble +=
)

val Scala212 = "2.12.20"
val Scala213 = "2.13.16"
val Scala3 = "3.3.4"
val Scala213 = "2.13.17"
val Scala3 = "3.3.6"
ThisBuild / crossScalaVersions := Seq(Scala212, Scala3, Scala213)

val catsEffectVersion = "3.5.4"
val circeVersion = "0.14.10"
val fs2Version = "3.11.0"
val http4sVersion = "0.23.28"
val natchezVersion = "0.3.6"
val munitVersion = "0.7.29"
val munitCEVersion = "1.0.7"
val scalacheckEffectVersion = "1.0.4"
val catsEffectVersion = "3.5.7"
val circeVersion = "0.14.15"
val fs2Version = "3.12.2"
val http4sVersion = "0.23.32"
val natchezVersion = "0.3.8"
val munitVersion = "1.2.0"
val munitCEVersion = "2.1.0"
val scalacheckEffectVersion = "2.1.0-RC1"

lazy val commonSettings = Seq(
crossScalaVersions := Seq(Scala3, Scala213)
Expand Down Expand Up @@ -92,10 +92,10 @@ lazy val lambda = crossProject(JSPlatform, JVMPlatform)
"org.tpolecat" %%% "natchez-core" % natchezVersion,
"io.circe" %%% "circe-scodec" % circeVersion,
"io.circe" %%% "circe-jawn" % circeVersion,
"com.comcast" %%% "ip4s-core" % "3.6.0",
"org.scodec" %%% "scodec-bits" % "1.2.1",
"com.comcast" %%% "ip4s-core" % "3.7.0",
"org.scodec" %%% "scodec-bits" % "1.2.4",
"org.scalameta" %%% "munit-scalacheck" % munitVersion % Test,
"org.typelevel" %%% "munit-cats-effect-3" % munitCEVersion % Test,
"org.typelevel" %%% "munit-cats-effect" % munitCEVersion % Test,
"io.circe" %%% "circe-literal" % circeVersion % Test
),
mimaBinaryIssueFilters ++= Seq(
Expand All @@ -113,7 +113,7 @@ lazy val lambda = crossProject(JSPlatform, JVMPlatform)
.jvmSettings(
Test / fork := true,
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"com.amazonaws" % "aws-lambda-java-core" % "1.4.0",
"co.fs2" %%% "fs2-io" % fs2Version
)
)
Expand Down Expand Up @@ -165,10 +165,10 @@ lazy val lambdaCloudFormationCustomResource = crossProject(JSPlatform, JVMPlatfo
"org.http4s" %%% "http4s-circe" % http4sVersion,
"org.http4s" %%% "http4s-dsl" % http4sVersion % Test,
"org.scalameta" %%% "munit-scalacheck" % munitVersion % Test,
"org.typelevel" %%% "munit-cats-effect-3" % munitCEVersion % Test,
"org.typelevel" %%% "munit-cats-effect" % munitCEVersion % Test,
"org.typelevel" %%% "scalacheck-effect" % scalacheckEffectVersion % Test,
"org.typelevel" %%% "scalacheck-effect-munit" % scalacheckEffectVersion % Test,
"com.eed3si9n.expecty" %%% "expecty" % "0.16.0" % Test,
"com.eed3si9n.expecty" %%% "expecty" % "0.17.0" % Test,
"io.circe" %%% "circe-testing" % circeVersion % Test
)
)
Expand All @@ -182,7 +182,7 @@ lazy val examples = crossProject(JSPlatform, JVMPlatform)
"org.http4s" %%% "http4s-dsl" % http4sVersion,
"org.http4s" %%% "http4s-ember-client" % http4sVersion,
"org.tpolecat" %%% "natchez-xray" % natchezVersion,
"org.tpolecat" %%% "natchez-http4s" % "0.6.0",
"org.tpolecat" %%% "natchez-http4s" % "0.6.1",
"org.tpolecat" %%% "skunk-core" % "0.6.4"
)
)
Expand All @@ -195,7 +195,7 @@ lazy val examples = crossProject(JSPlatform, JVMPlatform)
)
.jvmSettings(
libraryDependencies ++= Seq(
"com.google.cloud.functions.invoker" % "java-function-invoker" % "1.3.1"
"com.google.cloud.functions.invoker" % "java-function-invoker" % "1.3.3"
)
)
.enablePlugins(NoPublishPlugin)
Expand Down Expand Up @@ -248,7 +248,7 @@ lazy val googleCloudHttp4s = crossProject(JSPlatform, JVMPlatform)
"org.scodec" %%% "scodec-bits" % "1.2.0",
"org.http4s" %%% "http4s-server" % http4sVersion,
"org.scalameta" %%% "munit-scalacheck" % munitVersion % Test,
"org.typelevel" %%% "munit-cats-effect-3" % munitCEVersion % Test
"org.typelevel" %%% "munit-cats-effect" % munitCEVersion % Test
),
tlVersionIntroduced := List("2.13", "3").map(_ -> "0.3.1").toMap
)
Expand All @@ -261,7 +261,7 @@ lazy val googleCloudHttp4s = crossProject(JSPlatform, JVMPlatform)
.jvmSettings(
Test / fork := true,
libraryDependencies ++= Seq(
"com.google.cloud.functions" % "functions-framework-api" % "1.1.0" % Provided,
"com.google.cloud.functions" % "functions-framework-api" % "1.1.4" % Provided,
"co.fs2" %%% "fs2-io" % fs2Version
)
)
49 changes: 23 additions & 26 deletions lambda/js/src/main/scala/feral/lambda/ContextPlatform.scala
Original file line number Diff line number Diff line change
Expand Up @@ -36,32 +36,29 @@ private[lambda] trait ContextCompanionPlatform {
context.identity.toOption.map { identity =>
CognitoIdentity(identity.cognitoIdentityId, identity.cognitoIdentityPoolId)
},
context
.clientContext
.toOption
.map { clientContext =>
ClientContext(
ClientContextClient(
clientContext.client.installationId,
clientContext.client.appTitle,
clientContext.client.appVersionName,
clientContext.client.appVersionCode,
clientContext.client.appPackageName
),
ClientContextEnv(
clientContext.env.platformVersion,
clientContext.env.platform,
clientContext.env.make,
clientContext.env.model,
clientContext.env.locale
),
clientContext
.custom
.toOption
.flatMap(decodeJs[JsonObject](_).toOption)
.getOrElse(JsonObject.empty)
)
},
context.clientContext.toOption.map { clientContext =>
ClientContext(
ClientContextClient(
clientContext.client.installationId,
clientContext.client.appTitle,
clientContext.client.appVersionName,
clientContext.client.appVersionCode,
clientContext.client.appPackageName
),
ClientContextEnv(
clientContext.env.platformVersion,
clientContext.env.platform,
clientContext.env.make,
clientContext.env.model,
clientContext.env.locale
),
clientContext
.custom
.toOption
.flatMap(decodeJs[JsonObject](_).toOption)
.getOrElse(JsonObject.empty)
)
},
Sync[F].delay(context.getRemainingTimeInMillis().millis)
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,18 @@ class KafkaEventSuite extends FunSuite {

def selfManagedKafkaResult: KafkaEvent = KafkaEvent(
records = Map(
TopicPartition("mytopic", 0) -> List(KafkaRecord(
topic = "mytopic",
partition = 0,
offset = 15,
timestamp = Instant.ofEpochMilli(1545084650987L),
timestampType = CreateTime,
headers =
List(("headerKey", ByteVector(104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101))),
key = ByteVector.fromBase64("abcDEFghiJKLmnoPQRstuVWXyz1234==").get,
value = ByteVector.fromBase64("SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==").get
))),
TopicPartition("mytopic", 0) -> List(
KafkaRecord(
topic = "mytopic",
partition = 0,
offset = 15,
timestamp = Instant.ofEpochMilli(1545084650987L),
timestampType = CreateTime,
headers =
List(("headerKey", ByteVector(104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101))),
key = ByteVector.fromBase64("abcDEFghiJKLmnoPQRstuVWXyz1234==").get,
value = ByteVector.fromBase64("SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==").get
))),
bootstrapServers = List(
SocketAddress
.fromString("b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092")
Expand Down Expand Up @@ -149,17 +150,18 @@ class KafkaEventSuite extends FunSuite {

def MSKResult: MskEvent = MskEvent(
records = Map(
TopicPartition("mytopic", 0) -> List(KafkaRecord(
topic = "mytopic",
partition = 0,
offset = 15,
timestamp = Instant.ofEpochMilli(1545084650987L),
timestampType = CreateTime,
headers =
List(("headerKey", ByteVector(104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101))),
key = ByteVector.fromBase64("abcDEFghiJKLmnoPQRstuVWXyz1234==").get,
value = ByteVector.fromBase64("SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==").get
))),
TopicPartition("mytopic", 0) -> List(
KafkaRecord(
topic = "mytopic",
partition = 0,
offset = 15,
timestamp = Instant.ofEpochMilli(1545084650987L),
timestampType = CreateTime,
headers =
List(("headerKey", ByteVector(104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101))),
key = ByteVector.fromBase64("abcDEFghiJKLmnoPQRstuVWXyz1234==").get,
value = ByteVector.fromBase64("SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==").get
))),
eventSourceArn =
"arn:aws:kafka:us-east-1:123456789012:cluster/vpc-2priv-2pub/751d2973-a626-431c-9d4e-d7975eb44dd7-2",
bootstrapServers = List(
Expand Down
64 changes: 33 additions & 31 deletions lambda/shared/src/test/scala/feral/lambda/events/S3EventSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -70,37 +70,39 @@ class S3EventSuite extends FunSuite {
}
"""

def result = S3Event(records = List(
S3EventRecord(
eventVersion = "2.1",
eventSource = "aws:s3",
awsRegion = "us-west-2",
eventTime = Instant.ofEpochSecond(0),
eventName = "ObjectCreated:Put",
userIdentity = S3UserIdentity("AIDAJDPLRKLG7UEXAMPLE"),
requestParameters = S3RequestParameters(ip"127.0.0.1"),
responseElements = S3ResponseElements(
"C3D13FE58DE4C810",
"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
),
s3 = S3(
s3SchemaVersion = "1.0",
configurationId = "testConfigRule": String,
bucket = S3Bucket(
name = "mybucket",
ownerIdentity = S3UserIdentity("A3NL1KOZZKExample"),
arn = "arn:aws:s3:::mybucket"
),
`object` = S3Object(
key = "HappyFace.jpg",
size = 1024L,
eTag = "d41d8cd98f00b204e9800998ecf8427e",
versionId = Option("096fKKXTRTtl3on89fVO.nfljtsv6qko"),
sequencer = "0055AED6DCD90281E5"
def result =
S3Event(records =
List(
S3EventRecord(
eventVersion = "2.1",
eventSource = "aws:s3",
awsRegion = "us-west-2",
eventTime = Instant.ofEpochSecond(0),
eventName = "ObjectCreated:Put",
userIdentity = S3UserIdentity("AIDAJDPLRKLG7UEXAMPLE"),
requestParameters = S3RequestParameters(ip"127.0.0.1"),
responseElements = S3ResponseElements(
"C3D13FE58DE4C810",
"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
),
s3 = S3(
s3SchemaVersion = "1.0",
configurationId = "testConfigRule": String,
bucket = S3Bucket(
name = "mybucket",
ownerIdentity = S3UserIdentity("A3NL1KOZZKExample"),
arn = "arn:aws:s3:::mybucket"
),
`object` = S3Object(
key = "HappyFace.jpg",
size = 1024L,
eTag = "d41d8cd98f00b204e9800998ecf8427e",
versionId = Option("096fKKXTRTtl3on89fVO.nfljtsv6qko"),
sequencer = "0055AED6DCD90281E5"
)
),
glacierEventData = None
)
),
glacierEventData = None
)
))
))

}
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.2
sbt.version=1.11.7
6 changes: 3 additions & 3 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
val sbtlTlV = "0.8.0"
val sbtlTlV = "0.8.2"
addSbtPlugin("org.typelevel" % "sbt-typelevel" % sbtlTlV)
addSbtPlugin("org.typelevel" % "sbt-typelevel-scalafix" % sbtlTlV)
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.16.0")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.20.1")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1")
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
scalaVersion := "2.13.16"
scalaVersion := "2.13.17"
enablePlugins(LambdaJSPlugin)
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.11.2
sbt.version=1.11.7