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
1 change: 1 addition & 0 deletions .github/workflows/dependency-graph.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: sbt/setup-sbt@v1
- uses: scalacenter/sbt-dependency-submission@v2
12 changes: 7 additions & 5 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '17'
java-version: '21'
distribution: 'corretto'
cache: 'sbt'
- name: Install sbt
uses: sbt/setup-sbt@v1
- name: Run tests
run: sbt test lambda/Universal/packageBin

Expand All @@ -25,11 +27,11 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Set up frontend toolchain
uses: actions/setup-node@v4.0.1
uses: actions/setup-node@v4
with:
node-version: 20.x
node-version: 22.x
- name: Install project dependencies
run: npm install
run: npm ci
working-directory: frontend
- name: Test frontend
run: npm run test
Expand Down
2 changes: 2 additions & 0 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
version = 3.8.3
runner.dialect = scala3
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ $ npm run start

#### API

You will need a JDK installed (pokerdot uses 17, but others should
You will need a JDK installed (pokerdot uses 21, but others should
work fine) and `sbt`.

```bash
Expand Down
86 changes: 54 additions & 32 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,71 +1,82 @@
import scala.concurrent.duration.DurationInt

ThisBuild / scalaVersion := "2.13.12"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "io.adamnfish"
ThisBuild / scalaVersion := "3.3.4"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "io.adamnfish"
ThisBuild / organizationName := "adamnfish"

ThisBuild / scalacOptions ++= Seq(
"-Xfatal-warnings",
"-encoding", "UTF-8",
"-Ywarn-dead-code",
"-encoding",
"UTF-8",
"-deprecation",
"-explaintypes",
"-java-output-version",
"21",
// avoid a scanamo derivation error message
"-Xmax-inlines",
"64"
)


val circeVersion = "0.14.5"
val scanamoVersion = "1.0-M14"
val awsJavaSdkVersion = "2.20.68"
val circeVersion = "0.14.10"
val scanamoVersion = "3.0.0"
val awsJavaSdkVersion = "2.29.43"
val commonDeps = Seq(
"org.scalatest" %% "scalatest" % "3.2.15" % Test,
"org.scalacheck" %% "scalacheck" % "1.17.0" % Test,
"org.scalatestplus" %% "scalacheck-1-14" % "3.2.2.0" % Test,
"org.scalatest" %% "scalatest" % "3.2.19" % Test,
"org.scalameta" %% "munit" % "1.0.3" % Test,
"org.scalameta" %% "munit-scalacheck" % "1.0.0" % Test,
"org.typelevel" %% "scalacheck-effect-munit" % "1.0.4" % Test,
"org.typelevel" %% "munit-cats-effect" % "2.0.0" % Test,
"org.scalacheck" %% "scalacheck" % "1.18.1" % Test,
"org.scalatestplus" %% "scalacheck-1-18" % "3.2.19.0" % Test
)
val loggingDeps = Seq(
"ch.qos.logback" % "logback-classic" % "1.4.7",
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.5",
"org.typelevel" %% "log4cats-slf4j" % "2.7.0",
"ch.qos.logback" % "logback-classic" % "1.5.15",
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.5"
)

// https://aws.amazon.com/blogs/developer/tuning-the-aws-java-sdk-2-x-to-reduce-startup-time/
// url-connection-client is included in modules that make AWS API calls (lambda, devserver and integration)
// some other jars are also filtered out of the Lambda in its native packager settings
ThisBuild / excludeDependencies ++= Seq(
ExclusionRule("software.amazon.awssdk", "netty-nio-client"),
ExclusionRule("software.amazon.awssdk", "apache-client"),
ExclusionRule("software.amazon.awssdk", "apache-client")
)

lazy val root = (project in file("."))
.settings(
name := "pokerdot",
libraryDependencies ++= commonDeps,
libraryDependencies ++= commonDeps
)
.aggregate(core, lambda, devServer, integration)

lazy val core = (project in file("core"))
.settings(
name := "core",
libraryDependencies ++= Seq(
"dev.zio" %% "zio" % "2.0.13",
"org.typelevel" %% "cats-core" % "2.12.0",
"org.typelevel" %% "cats-effect" % "3.5.7",
"io.circe" %% "circe-core" % circeVersion,
"io.circe" %% "circe-generic" % circeVersion,
"io.circe" %% "circe-parser" % circeVersion,
"org.scanamo" %% "scanamo" % scanamoVersion,
"software.amazon.awssdk" % "dynamodb" % awsJavaSdkVersion,
) ++ commonDeps,
"org.scanamo" %% "scanamo" % scanamoVersion,
"org.scanamo" %% "scanamo-cats-effect" % scanamoVersion
) ++ commonDeps
)

lazy val lambda = (project in file("lambda"))
.enablePlugins(JavaAppPackaging)
.settings(
name := "lambda",
libraryDependencies ++= Seq(
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.5",
"com.amazonaws" % "aws-lambda-java-core" % "1.2.2",
"com.amazonaws" % "aws-lambda-java-events" % "3.11.1",
"com.amazonaws" % "aws-xray-recorder-sdk-core" % "2.15.0",
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"com.amazonaws" % "aws-lambda-java-events" % "3.14.0",
"com.amazonaws" % "aws-xray-recorder-sdk-core" % "2.18.2",
"software.amazon.awssdk" % "apigatewaymanagementapi" % awsJavaSdkVersion,
// TODO: use the async crt version for everything
"software.amazon.awssdk" % "url-connection-client" % awsJavaSdkVersion,
"software.amazon.awssdk" % "aws-crt-client" % awsJavaSdkVersion
) ++ commonDeps ++ loggingDeps,
// native-packager
Universal / topLevelDirectory := None,
Expand All @@ -76,8 +87,8 @@ lazy val lambda = (project in file("lambda"))
// these are only used at compile time to generate code, I think?
// !path.contains("org.scala-lang.scala-compiler") && // required :-(
// !path.contains("org.scala-lang.scala-reflect") && // required :-(
!path.contains("net.java.dev.jna.jna") &&
!path.contains("org.jline.jline")
!path.contains("net.java.dev.jna.jna") &&
!path.contains("org.jline.jline")
}
)
.dependsOn(core)
Expand All @@ -86,29 +97,40 @@ lazy val integration = (project in file("integration"))
.settings(
name := "integration",
libraryDependencies ++= Seq(
"org.scanamo" %% "scanamo-testkit" % scanamoVersion % Test,
"org.typelevel" %% "cats-effect-testing-scalatest" % "1.6.0" % Test,
// TODO: use the async crt version for everything
"software.amazon.awssdk" % "url-connection-client" % awsJavaSdkVersion % Test,
"software.amazon.awssdk" % "aws-crt-client" % awsJavaSdkVersion % Test,
"software.amazon.awssdk" % "dynamodb" % awsJavaSdkVersion % Test,
"org.scanamo" %% "scanamo-testkit" % scanamoVersion % Test
) ++ commonDeps ++ loggingDeps,
scalacOptions ++= Seq(
"-source",
"future"
),
// start DynamoDB for tests
dynamoDBLocalDownloadDir := file(".dynamodb-local"),
dynamoDBLocalPort := 8042,
dynamoDBLocalDownloadIfOlderThan := 14.days,
startDynamoDBLocal := startDynamoDBLocal.dependsOn(Test / compile).value,
Test / test := (Test / test).dependsOn(startDynamoDBLocal).value,
Test / testOnly := (Test / testOnly).dependsOn(startDynamoDBLocal).evaluated,
Test / testOptions += dynamoDBLocalTestCleanup.value,
Test / testOnly := (Test / testOnly)
.dependsOn(startDynamoDBLocal)
.evaluated,
Test / testOptions += dynamoDBLocalTestCleanup.value
)
.dependsOn(core % "compile->compile;test->test")

lazy val devServer = (project in file("devserver"))
.settings(
name := "devserver",
libraryDependencies ++= Seq(
"io.javalin" % "javalin" % "5.6.3",
"org.scanamo" %% "scanamo-testkit" % scanamoVersion,
"io.javalin" % "javalin" % "5.6.3", // TODO: v6 is now out
"software.amazon.awssdk" % "dynamodb" % awsJavaSdkVersion,
// TODO: use the async crt version for everything
"software.amazon.awssdk" % "url-connection-client" % awsJavaSdkVersion,
"software.amazon.awssdk" % "aws-crt-client" % awsJavaSdkVersion,
"org.scanamo" %% "scanamo-testkit" % scanamoVersion
) ++ commonDeps ++ loggingDeps,
// console logging and ctrl-c to kill support
run / fork := true,
Expand All @@ -121,6 +143,6 @@ lazy val devServer = (project in file("devserver"))
startDynamoDBLocal := startDynamoDBLocal.dependsOn(Compile / compile).value,
Compile / run := (Compile / run).dependsOn(startDynamoDBLocal).evaluated,
// allows browsing DB from http://localhost:8042/shell/
dynamoDBLocalSharedDB := true,
dynamoDBLocalSharedDB := true
)
.dependsOn(core)
6 changes: 3 additions & 3 deletions buildspec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ env:
phases:
install:
runtime-versions:
nodejs: 20
java: corretto17
nodejs: 22
java: corretto21

pre_build:
commands:
Expand All @@ -27,7 +27,7 @@ phases:

# Install software for frontend build
- cd frontend
- npm install
- npm ci
- cd ..

- echo "[STATUS] pre build step finished"
Expand Down
2 changes: 1 addition & 1 deletion cloudformation/pokerdot.template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ Resources:
Handler: "io.adamnfish.pokerdot.Lambda::handleRequest"
Timeout: 20
MemorySize: 1024
Runtime: java17
Runtime: java21
Tracing: Active
Environment:
Variables:
Expand Down
Loading
Loading