Skip to content

Commit c5aa2c9

Browse files
authored
Merge pull request #404 from kevin-lee/issue/397/0.24-servlet4
2 parents 2dfdec3 + d0ab5eb commit c5aa2c9

File tree

14 files changed

+1108
-148
lines changed

14 files changed

+1108
-148
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
name: "Continuous Integration (Testing with Jetty)"
2+
3+
on:
4+
pull_request:
5+
branches: ['**', '!update/**', '!pr/**']
6+
push:
7+
branches: ['**', '!update/**', '!pr/**']
8+
tags: [v*]
9+
10+
env:
11+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
12+
13+
14+
concurrency:
15+
group: ${{ github.workflow }} @ ${{ github.ref }}
16+
cancel-in-progress: true
17+
18+
jobs:
19+
build:
20+
name: Test
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
os: [ubuntu-22.04]
25+
scala: [2.12, 2.13, 3]
26+
java: [temurin@17]
27+
project: [servletTesting]
28+
runs-on: ${{ matrix.os }}
29+
timeout-minutes: 60
30+
steps:
31+
- name: Checkout current branch (full)
32+
uses: actions/checkout@v4
33+
with:
34+
fetch-depth: 0
35+
36+
- name: Setup sbt
37+
uses: sbt/setup-sbt@v1
38+
39+
- name: Setup Java (temurin@17)
40+
id: setup-java-temurin-17
41+
if: matrix.java == 'temurin@17'
42+
uses: actions/setup-java@v4
43+
with:
44+
distribution: temurin
45+
java-version: 17
46+
cache: sbt
47+
48+
- name: sbt update
49+
if: matrix.java == 'temurin@17' && steps.setup-java-temurin-17.outputs.cache-hit == 'false'
50+
run: sbt +update
51+
52+
- name: Check headers and formatting
53+
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-22.04'
54+
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' headerCheckAll scalafmtCheckAll 'project /' scalafmtSbtCheck
55+
56+
- name: Test
57+
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' test
58+
59+
- name: Check binary compatibility
60+
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-22.04'
61+
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' mimaReportBinaryIssues
62+
63+
- name: Generate API documentation
64+
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-22.04'
65+
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' doc
66+
67+
- name: Check scalafix lints
68+
if: matrix.java == 'temurin@17' && !startsWith(matrix.scala, '3')
69+
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' 'scalafixAll --check'
70+
71+
- name: Check unused compile dependencies
72+
if: matrix.java == 'temurin@17'
73+
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' unusedCompileDependenciesTest

.github/workflows/ci.yml

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,15 @@ jobs:
3030
matrix:
3131
os: [ubuntu-22.04]
3232
scala: [2.12, 2.13, 3]
33-
java: [temurin@11, temurin@17]
33+
java: [temurin@8, temurin@11, temurin@17]
3434
project: [rootJVM]
3535
exclude:
36+
- scala: 2.12
37+
java: temurin@11
3638
- scala: 2.12
3739
java: temurin@17
40+
- scala: 3
41+
java: temurin@11
3842
- scala: 3
3943
java: temurin@17
4044
runs-on: ${{ matrix.os }}
@@ -48,6 +52,19 @@ jobs:
4852
- name: Setup sbt
4953
uses: sbt/setup-sbt@v1
5054

55+
- name: Setup Java (temurin@8)
56+
id: setup-java-temurin-8
57+
if: matrix.java == 'temurin@8'
58+
uses: actions/setup-java@v4
59+
with:
60+
distribution: temurin
61+
java-version: 8
62+
cache: sbt
63+
64+
- name: sbt update
65+
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
66+
run: sbt +update
67+
5168
- name: Setup Java (temurin@11)
5269
id: setup-java-temurin-11
5370
if: matrix.java == 'temurin@11'
@@ -78,26 +95,26 @@ jobs:
7895
run: sbt githubWorkflowCheck
7996

8097
- name: Check headers and formatting
81-
if: matrix.java == 'temurin@11' && matrix.os == 'ubuntu-22.04'
98+
if: matrix.java == 'temurin@8' && matrix.os == 'ubuntu-22.04'
8299
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' headerCheckAll scalafmtCheckAll 'project /' scalafmtSbtCheck
83100

84101
- name: Test
85102
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' test
86103

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

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

95112
- name: Check scalafix lints
96-
if: matrix.java == 'temurin@11' && !startsWith(matrix.scala, '3')
113+
if: matrix.java == 'temurin@8' && !startsWith(matrix.scala, '3')
97114
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' 'scalafixAll --check'
98115

99116
- name: Check unused compile dependencies
100-
if: matrix.java == 'temurin@11'
117+
if: matrix.java == 'temurin@8'
101118
run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' unusedCompileDependenciesTest
102119

103120
- name: Make target directories
@@ -122,7 +139,7 @@ jobs:
122139
strategy:
123140
matrix:
124141
os: [ubuntu-22.04]
125-
java: [temurin@11]
142+
java: [temurin@8]
126143
runs-on: ${{ matrix.os }}
127144
steps:
128145
- name: Checkout current branch (full)
@@ -133,6 +150,19 @@ jobs:
133150
- name: Setup sbt
134151
uses: sbt/setup-sbt@v1
135152

153+
- name: Setup Java (temurin@8)
154+
id: setup-java-temurin-8
155+
if: matrix.java == 'temurin@8'
156+
uses: actions/setup-java@v4
157+
with:
158+
distribution: temurin
159+
java-version: 8
160+
cache: sbt
161+
162+
- name: sbt update
163+
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
164+
run: sbt +update
165+
136166
- name: Setup Java (temurin@11)
137167
id: setup-java-temurin-11
138168
if: matrix.java == 'temurin@11'
@@ -219,7 +249,7 @@ jobs:
219249
strategy:
220250
matrix:
221251
os: [ubuntu-22.04]
222-
java: [temurin@11]
252+
java: [temurin@8]
223253
runs-on: ${{ matrix.os }}
224254
steps:
225255
- name: Checkout current branch (full)
@@ -230,6 +260,19 @@ jobs:
230260
- name: Setup sbt
231261
uses: sbt/setup-sbt@v1
232262

263+
- name: Setup Java (temurin@8)
264+
id: setup-java-temurin-8
265+
if: matrix.java == 'temurin@8'
266+
uses: actions/setup-java@v4
267+
with:
268+
distribution: temurin
269+
java-version: 8
270+
cache: sbt
271+
272+
- name: sbt update
273+
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
274+
run: sbt +update
275+
233276
- name: Setup Java (temurin@11)
234277
id: setup-java-temurin-11
235278
if: matrix.java == 'temurin@11'
@@ -259,7 +302,7 @@ jobs:
259302
- name: Submit Dependencies
260303
uses: scalacenter/sbt-dependency-submission@v2
261304
with:
262-
modules-ignore: http4s-servlet-examples_2.12 http4s-servlet-examples_2.13 http4s-servlet-examples_3 rootjs_2.12 rootjs_2.13 rootjs_3 docs_2.12 docs_2.13 docs_3 rootjvm_2.12 rootjvm_2.13 rootjvm_3 rootnative_2.12 rootnative_2.13 rootnative_3 sbt-http4s-org-scalafix-internal_2.12 sbt-http4s-org-scalafix-internal_2.13 sbt-http4s-org-scalafix-internal_3
305+
modules-ignore: http4s-servlet-examples_2.12 http4s-servlet-examples_2.13 http4s-servlet-examples_3 http4s-servlet-testing_2.12 http4s-servlet-testing_2.13 http4s-servlet-testing_3 rootjs_2.12 rootjs_2.13 rootjs_3 docs_2.12 docs_2.13 docs_3 rootjvm_2.12 rootjvm_2.13 rootjvm_3 rootnative_2.12 rootnative_2.13 rootnative_3 sbt-http4s-org-scalafix-internal_2.12 sbt-http4s-org-scalafix-internal_2.13 sbt-http4s-org-scalafix-internal_3
263306
configs-ignore: test scala-tool scala-doc-tool test-internal
264307

265308
validate-steward:
@@ -303,6 +346,19 @@ jobs:
303346
- name: Setup sbt
304347
uses: sbt/setup-sbt@v1
305348

349+
- name: Setup Java (temurin@8)
350+
id: setup-java-temurin-8
351+
if: matrix.java == 'temurin@8'
352+
uses: actions/setup-java@v4
353+
with:
354+
distribution: temurin
355+
java-version: 8
356+
cache: sbt
357+
358+
- name: sbt update
359+
if: matrix.java == 'temurin@8' && steps.setup-java-temurin-8.outputs.cache-hit == 'false'
360+
run: sbt +update
361+
306362
- name: Setup Java (temurin@11)
307363
id: setup-java-temurin-11
308364
if: matrix.java == 'temurin@11'

build.sbt

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,62 @@ val Scala213 = "2.13.16"
1414
ThisBuild / crossScalaVersions := Seq("2.12.20", Scala213, "3.3.6")
1515
ThisBuild / scalaVersion := Scala213 // the default Scala
1616

17-
// Jetty 10+, for testing, requires Java 11.
18-
ThisBuild / githubWorkflowJavaVersions -= JavaSpec.temurin("8")
17+
// Undertow 2 for testing, requires Java 8 or higher
18+
//ThisBuild / githubWorkflowJavaVersions -= JavaSpec.temurin("8")
1919
ThisBuild / tlJdkRelease := Some(8)
2020
ThisBuild / startYear := Some(2013)
2121

2222
lazy val root = tlCrossRootProject.aggregate(servlet, examples)
2323

2424
val asyncHttpClientVersion = "2.12.3"
25-
val jettyVersion = "10.0.25"
25+
val jettyVersion = "12.0.23"
2626
val http4sVersion = "0.23.30"
2727
val munitCatsEffectVersion = "2.1.0"
28-
val servletApiVersion = "4.0.1"
28+
val servletApiVersion = "4.0.4"
29+
val undertowVersion = "2.2.37.Final"
2930

3031
lazy val servlet = project
3132
.in(file("servlet"))
3233
.settings(
3334
name := "http4s-servlet",
3435
description := "Portable servlet implementation for http4s servers",
36+
fork := true,
37+
Test / javaOptions ++= Seq(
38+
"-Dcats.effect.trackFiberContext=true",
39+
"-Dcats.effect.tracing.mode=full",
40+
"-Dcats.effect.tracing.buffer.size=1024",
41+
),
42+
libraryDependencies ++= Seq(
43+
"org.typelevel" %% "cats-core" % "2.13.0",
44+
"org.typelevel" %% "cats-effect" % "3.6.2",
45+
"jakarta.servlet" % "jakarta.servlet-api" % servletApiVersion % Provided,
46+
"io.undertow" % "undertow-core" % undertowVersion % Test,
47+
"io.undertow" % "undertow-servlet" % undertowVersion % Test,
48+
"org.http4s" %% "http4s-dsl" % http4sVersion % Test,
49+
"org.http4s" %% "http4s-server" % http4sVersion,
50+
"org.typelevel" %% "munit-cats-effect" % munitCatsEffectVersion % Test,
51+
"org.asynchttpclient" % "async-http-client" % asyncHttpClientVersion % Test,
52+
),
53+
)
54+
55+
lazy val servletTesting = project
56+
.in(file("servlet-testing"))
57+
.enablePlugins(NoPublishPlugin)
58+
.settings(
59+
name := "http4s-servlet-testing",
60+
description := "Portable servlet implementation for http4s servers",
61+
// Jetty 12+ for testing, requires Java 17 or higher.
62+
githubWorkflowJavaVersions --= Seq(JavaSpec.temurin("8"), JavaSpec.temurin("11")),
63+
Test / fork := true,
3564
libraryDependencies ++= Seq(
36-
"javax.servlet" % "javax.servlet-api" % servletApiVersion % Provided,
3765
"org.eclipse.jetty" % "jetty-client" % jettyVersion % Test,
3866
"org.eclipse.jetty" % "jetty-server" % jettyVersion % Test,
39-
"org.eclipse.jetty" % "jetty-servlet" % jettyVersion % Test,
67+
"org.eclipse.jetty.ee8" % "jetty-ee8-servlet" % jettyVersion % Test,
4068
"org.http4s" %% "http4s-dsl" % http4sVersion % Test,
41-
"org.http4s" %% "http4s-server" % http4sVersion,
4269
"org.typelevel" %% "munit-cats-effect" % munitCatsEffectVersion % Test,
4370
),
4471
)
72+
.dependsOn(servlet % "compile->compile;test->test")
4573

4674
lazy val examples = project
4775
.in(file("examples"))
@@ -50,11 +78,13 @@ lazy val examples = project
5078
.settings(
5179
name := "http4s-servlet-examples",
5280
description := "Examples for http4s-servlet",
81+
// Jetty 12+ for testing, requires Java 17 or higher.
82+
githubWorkflowJavaVersions --= Seq(JavaSpec.temurin("8"), JavaSpec.temurin("11")),
5383
startYear := Some(2013),
5484
fork := true,
55-
Jetty / containerLibs := List("org.eclipse.jetty" % "jetty-runner" % jettyVersion),
85+
Jetty / containerLibs := List("org.eclipse.jetty.ee8" % "jetty-ee8-runner" % jettyVersion),
5686
libraryDependencies ++= Seq(
57-
"javax.servlet" % "javax.servlet-api" % servletApiVersion % Provided
87+
"jakarta.servlet" % "jakarta.servlet-api" % servletApiVersion % Provided
5888
),
5989
)
6090
.dependsOn(servlet)

0 commit comments

Comments
 (0)