Build Logs
hagay3/skuber • 3.8.0-RC2:2025-11-28
Errors
3
Warnings
451
Total Lines
1233
1##################################
2Clonning https://github.com/hagay3/skuber.git into /build/repo using revision v4.0.11
3##################################
4Note: switching to '87cbdf6896b178771fe40e1f306a4997529895c2'.
5
6You are in 'detached HEAD' state. You can look around, make experimental
7changes and commit them, and you can discard any commits you make in this
8state without impacting any branches by switching back to a branch.
9
10If you want to create a new branch to retain commits you create, you may
11do so (now or later) by using -c with the switch command. Example:
12
13 git switch -c <new-branch-name>
14
15Or undo this operation with:
16
17 git switch -
18
19Turn off this advice by setting config variable advice.detachedHead to false
20
21Would override fixed Scala version: 3.3.1
22Using target Scala version for migration: 3.7.4
23Migrating project for -source:3.7 using Scala 3.7.4
24----
25Preparing build for 3.7.4
26Would try to apply common scalacOption (best-effort, sbt/mill only):
27Append: -rewrite,REQUIRE:-source:3.7-migration
28Remove: -indent,-no-indent,-new-syntax,,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
29
30Try apply source patch:
31Path: build.sbt
32Pattern: val scala3Version = "3.3.1"
33Replacement: val scala3Version = "3.7.4"
34Starting compilation server
35Compiling project (Scala 3.7.3, JVM (17))
36Compiled project (Scala 3.7.3, JVM (17))
37Successfully applied pattern 'val scala3Version = "3.3.1"' in build.sbt
38----
39Starting build for 3.7.4
40Execute tests: false
41sbt project found:
42Sbt version 1.9.2 is not supported, minimal supported version is 1.11.5
43Enforcing usage of sbt in version 1.11.5
44No prepare script found for project hagay3/skuber
45##################################
46Scala version: 3.7.4
47Targets: io.github.hagay3%skuber io.github.hagay3%skuber-examples
48Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.7"],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.3.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}
49##################################
50Using extra scalacOptions: -rewrite,REQUIRE:-source:3.7-migration
51Filtering out scalacOptions: -indent,-no-indent,-new-syntax,,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
52[sbt_options] declare -a sbt_options=()
53[process_args] java_version = '17'
54[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
55# Executing command line:
56java
57-Dfile.encoding=UTF-8
58-Dcommunitybuild.scala=3.7.4
59-Dcommunitybuild.project.dependencies.add=
60-Xmx7G
61-Xms4G
62-Xss8M
63-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
64-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
65-jar
66/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
67"setCrossScalaVersions 3.7.4"
68"++3.7.4 -v"
69"mapScalacOptions "-rewrite,REQUIRE:-source:3.7-migration,-Wconf:msg=can be rewritten automatically under:s" "-indent,-no-indent,-new-syntax,,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
70"set every credentials := Nil"
71"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
72"removeScalacOptionsStartingWith -P:wartremover"
73
74moduleMappings
75"runBuild 3.7.4 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.7"],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.3.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}""" io.github.hagay3%skuber io.github.hagay3%skuber-examples"
76
77[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 17.0.8)
78[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
79[info] loading project definition from /build/repo/project
80[info] compiling 2 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
81[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
82[info] Compilation completed in 8.199s.
83[info] done compiling
84/build/repo/build.sbt:197: warning: value IntegrationTest in trait LibraryManagementSyntax is deprecated (since 1.9.0): Create a separate subproject for testing instead
85 .configs(IntegrationTest)
86 ^
87/build/repo/build.sbt:202: warning: lazy value itSettings in object Defaults is deprecated (since 1.9.0): Create a separate subproject instead of using IntegrationTest and in addition avoid using itSettings
88 Defaults.itSettings,
89 ^
90[info] loading settings for project skuber-project from build.sbt, version.sbt...
91[info] set current project to skuber-project (in build file:/build/repo/)
92[warn] there's a key that's not used by any other settings/tasks:
93[warn]
94[warn] * ThisBuild / publishMavenStyle
95[warn] +- /build/repo/build.sbt:60
96[warn]
97[warn] note: a setting might still be used by a command; to exclude a key from this `lintUnused` check
98[warn] either append it to `Global / excludeLintKeys` or call .withRank(KeyRanks.Invisible) on the key
99Execute setCrossScalaVersions: 3.7.4
100OpenCB::Changing crossVersion 3.7.4 -> 3.7.4 in skuber/crossScalaVersions
101OpenCB::Limitting incorrect crossVersions List() -> List(2.13.12) in skuber-project/crossScalaVersions
102OpenCB::Changing crossVersion 3.7.4 -> 3.7.4 in examples/crossScalaVersions
103[info] set current project to skuber-project (in build file:/build/repo/)
104[info] Setting Scala version to 3.7.4 on 2 projects.
105[info] Switching Scala version on:
106[info] skuber (2.12.13, 2.13.12, 3.7.4)
107[info] examples (2.12.13, 2.13.12, 3.7.4)
108[info] Excluding projects:
109[info] * skuber-project (2.13.12)
110[info] Reapplying settings...
111[info] set current project to skuber-project (in build file:/build/repo/)
112Execute mapScalacOptions: -rewrite,REQUIRE:-source:3.7-migration,-Wconf:msg=can be rewritten automatically under:s -indent,-no-indent,-new-syntax,,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
113[info] Reapplying settings...
114[info] set current project to skuber-project (in build file:/build/repo/)
115[info] Defining Global / credentials, credentials and 1 others.
116[info] The new values will be used by Global / pgpSelectPassphrase, Global / pgpSigningKey and 14 others.
117[info] Run `last` for details.
118[info] Reapplying settings...
119[info] set current project to skuber-project (in build file:/build/repo/)
120Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
121[info] Reapplying settings...
122OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
123
124 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
125 Did you mean allExcludeDependencies ?
126 , retry without global scopes
127[info] Reapplying settings...
128[info] set current project to skuber-project (in build file:/build/repo/)
129Execute removeScalacOptionsStartingWith: -P:wartremover
130[info] Reapplying settings...
131[info] set current project to skuber-project (in build file:/build/repo/)
132[success] Total time: 0 s, completed Nov 28, 2025, 2:41:52 PM
133Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.7"],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.3.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}
134Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),CompileOnly,List()))
135Starting build...
136Projects: Set(skuber, examples)
137Starting build for ProjectRef(file:/build/repo/,skuber) (skuber)... [0/2]
138OpenCB::Exclude Scala3 specific scalacOption `-rewrite` in Scala 2.12.20 module Global
139OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.7-migration` in Scala 2.12.20 module Global
140Compile scalacOptions: -rewrite, -Wconf:msg=can be rewritten automatically under:s, -source:3.7-migration
141[info] compiling 111 Scala sources to /build/repo/client/target/scala-3.7.4/classes ...
142[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala:84:8
143[warn] 84 | case bm: ws.BinaryMessage.Strict if bm.data(0) == 1 =>
144[warn] | ^
145[warn] |match may not be exhaustive.
146[warn] |
147[warn] |It would fail on pattern case: _: org.apache.pekko.http.scaladsl.model.ws.Message
148[warn] |
149[warn] | longer explanation available when compiling with `-explain`
150[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala:91:8
151[warn] 91 | case bm: ws.BinaryMessage.Strict =>
152[warn] | ^
153[warn] |match may not be exhaustive.
154[warn] |
155[warn] |It would fail on pattern case: org.apache.pekko.http.scaladsl.model.ws.BinaryMessage.Streamed(_), org.apache.pekko.http.scaladsl.model.ws.TextMessage.Streamed(_), org.apache.pekko.http.scaladsl.model.ws.TextMessage.Strict(_)
156[warn] |
157[warn] | longer explanation available when compiling with `-explain`
158[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/watch/WatchSource.scala:62:10
159[warn] 62 | case (Success(HttpResponse(StatusCodes.OK, _, entity, _)), se) =>
160[warn] | ^
161[warn] | match may not be exhaustive.
162[warn] |
163[warn] | It would fail on pattern case: (scala.util.Success(_), Start(_))
164[warn] |
165[warn] | longer explanation available when compiling with `-explain`
166[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/json/package.scala:472:6
167[warn] 472 | handler match {
168[warn] | ^^^^^^^
169[warn] |match may not be exhaustive.
170[warn] |
171[warn] |It would fail on pattern case: skuber.GRPCAction(_, _), UnknownHandler
172[warn] |
173[warn] | longer explanation available when compiling with `-explain`
174[info] [patched file /build/repo/client/src/main/scala/skuber/Resource.scala]
175[info] [patched file /build/repo/client/src/main/scala/skuber/json/PlayJsonSupportForPekkoHttp.scala]
176[info] [patched file /build/repo/client/src/main/scala/skuber/ext/ReplicaSet.scala]
177[info] [patched file /build/repo/client/src/main/scala/skuber/autoscaling/v2beta1/HorizontalPodAutoscaler.scala]
178[info] [patched file /build/repo/client/src/main/scala/skuber/apps/v1/ReplicaSet.scala]
179[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/impl/KubernetesClientImpl.scala]
180[info] [patched file /build/repo/client/src/main/scala/skuber/annotation/NodeAffinity.scala]
181[info] [patched file /build/repo/client/src/main/scala/skuber/json/package.scala]
182[info] [patched file /build/repo/client/src/main/scala/skuber/autoscaling/v2/HorizontalPodAutoscaler.scala]
183[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala]
184[info] [patched file /build/repo/client/src/main/scala/skuber/api/Configuration.scala]
185[info] [patched file /build/repo/client/src/main/scala/skuber/api/watch/Watch.scala]
186[info] [patched file /build/repo/client/src/main/scala/skuber/json/TolerantListJsonFormatters.scala]
187[info] [patched file /build/repo/client/src/main/scala/skuber/networking/v1/Ingress.scala]
188[info] [patched file /build/repo/client/src/main/scala/skuber/api/watch/BytesToWatchEventSource.scala]
189[info] [patched file /build/repo/client/src/main/scala/skuber/CustomResource.scala]
190[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/package.scala]
191[info] [patched file /build/repo/client/src/main/scala/skuber/Pod.scala]
192[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/KubernetesClient.scala]
193[warn] there were 5 feature warnings; re-run with -feature for details
194[warn] there were 24 deprecation warnings; re-run with -deprecation for details
195[warn] 6 warnings found
196[info] done compiling
197[info] compiling 19 Scala sources to /build/repo/client/target/scala-3.7.4/classes ...
198[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala:84:8
199[warn] 84 | case bm: ws.BinaryMessage.Strict if bm.data(0) == 1 =>
200[warn] | ^
201[warn] |match may not be exhaustive.
202[warn] |
203[warn] |It would fail on pattern case: _: org.apache.pekko.http.scaladsl.model.ws.Message
204[warn] |
205[warn] | longer explanation available when compiling with `-explain`
206[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala:91:8
207[warn] 91 | case bm: ws.BinaryMessage.Strict =>
208[warn] | ^
209[warn] |match may not be exhaustive.
210[warn] |
211[warn] |It would fail on pattern case: org.apache.pekko.http.scaladsl.model.ws.BinaryMessage.Streamed(_), org.apache.pekko.http.scaladsl.model.ws.TextMessage.Streamed(_), org.apache.pekko.http.scaladsl.model.ws.TextMessage.Strict(_)
212[warn] |
213[warn] | longer explanation available when compiling with `-explain`
214[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/json/package.scala:472:6
215[warn] 472 | handler match {
216[warn] | ^^^^^^^
217[warn] |match may not be exhaustive.
218[warn] |
219[warn] |It would fail on pattern case: skuber.GRPCAction(_, _), UnknownHandler
220[warn] |
221[warn] | longer explanation available when compiling with `-explain`
222[warn] there were 3 feature warnings; re-run with -feature for details
223[warn] there were 2 deprecation warnings; re-run with -deprecation for details
224[warn] 5 warnings found
225[info] done compiling
226[info] compiling 4 Scala sources to /build/repo/client/target/scala-3.7.4/classes ...
227[warn] there were 2 deprecation warnings; re-run with -deprecation for details
228[warn] 6 warnings found
229[info] done compiling
230[info] compiling 41 Scala sources to /build/repo/client/target/scala-3.7.4/test-classes ...
231[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:26:0
232[warn] 26 |import Endpoints._
233[warn] |^
234[warn] |Line is indented too far to the left, or a `}` is missing
235[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:103:5
236[warn] 103 | val endps = Json.parse(epsJsonStr).as[Endpoints]
237[warn] | ^
238[warn] | Line is indented too far to the left, or a `}` is missing
239[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:104:5
240[warn] 104 | endps.kind mustEqual "Endpoints"
241[warn] | ^
242[warn] | Line is indented too far to the left, or a `}` is missing
243[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:105:5
244[warn] 105 | endps.name mustEqual "kube-dns"
245[warn] | ^
246[warn] | Line is indented too far to the left, or a `}` is missing
247[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:106:5
248[warn] 106 | endps.metadata.labels.size mustEqual 3
249[warn] | ^
250[warn] | Line is indented too far to the left, or a `}` is missing
251[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:107:5
252[warn] 107 | endps.metadata.labels("kubernetes.io/name") mustEqual "KubeDNS"
253[warn] | ^
254[warn] | Line is indented too far to the left, or a `}` is missing
255[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:108:5
256[warn] 108 | endps.subsets.size mustEqual 1
257[warn] | ^
258[warn] | Line is indented too far to the left, or a `}` is missing
259[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:109:5
260[warn] 109 | endps.subsets(0).addresses.size mustEqual 1
261[warn] | ^
262[warn] | Line is indented too far to the left, or a `}` is missing
263[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:110:5
264[warn] 110 | endps.subsets(0).addresses(0).ip mustEqual("10.246.1.3")
265[warn] | ^
266[warn] | Line is indented too far to the left, or a `}` is missing
267[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:111:5
268[warn] 111 | val tgtRef = endps.subsets(0).addresses(0).targetRef.get
269[warn] | ^
270[warn] | Line is indented too far to the left, or a `}` is missing
271[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:112:5
272[warn] 112 | tgtRef.kind mustEqual "Pod"
273[warn] | ^
274[warn] | Line is indented too far to the left, or a `}` is missing
275[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:113:5
276[warn] 113 | tgtRef.name mustEqual "kube-dns-v3-fkelw"
277[warn] | ^
278[warn] | Line is indented too far to the left, or a `}` is missing
279[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:114:5
280[warn] 114 | val ports = endps.subsets(0).ports
281[warn] | ^
282[warn] | Line is indented too far to the left, or a `}` is missing
283[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:115:5
284[warn] 115 | ports.length mustEqual 2
285[warn] | ^
286[warn] | Line is indented too far to the left, or a `}` is missing
287[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:116:5
288[warn] 116 | ports(0).name mustEqual Some("dns-tcp")
289[warn] | ^
290[warn] | Line is indented too far to the left, or a `}` is missing
291[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:117:5
292[warn] 117 | ports(0).protocol mustEqual Protocol.TCP
293[warn] | ^
294[warn] | Line is indented too far to the left, or a `}` is missing
295[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:118:5
296[warn] 118 | ports(0).port mustEqual 53
297[warn] | ^
298[warn] | Line is indented too far to the left, or a `}` is missing
299[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:119:5
300[warn] 119 | ports(1).name mustEqual Some("dns")
301[warn] | ^
302[warn] | Line is indented too far to the left, or a `}` is missing
303[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:120:5
304[warn] 120 | ports(1).protocol mustEqual Protocol.UDP
305[warn] | ^
306[warn] | Line is indented too far to the left, or a `}` is missing
307[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:121:5
308[warn] 121 | ports(1).port mustEqual 53
309[warn] | ^
310[warn] | Line is indented too far to the left, or a `}` is missing
311[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EnumTest.scala:23:44 -
312[warn] 23 | """.stripMargin))(TestClassEnum.fmt.reads).get
313[warn] | ^^^^^^^^^^^^^^^^^^^^^^^
314[warn] |method reads is eta-expanded even though play.api.libs.json.Reads[skuber.json².TestClassEnum] does not have the @FunctionalInterface annotation.
315[warn] |
316[warn] |where: json is a package in package play.api.libs
317[warn] | json² is a package in package skuber
318[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EnumTest.scala:41:52 -
319[warn] 41 | """.stripMargin))(TestClassEnumNone.fmtNone.reads).get
320[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
321[warn] |method reads is eta-expanded even though play.api.libs.json.Reads[skuber.json².TestClassEnumNone] does not have the @FunctionalInterface annotation.
322[warn] |
323[warn] |where: json is a package in package play.api.libs
324[warn] | json² is a package in package skuber
325[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:24:0
326[warn] 24 |import Node._
327[warn] |^
328[warn] |Line is indented too far to the left, or a `}` is missing
329[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:275:10
330[warn] 275 | val myNodes= Json.parse(nodesJsonStr).as[NodeList]
331[warn] | ^
332[warn] | Line is indented too far to the left, or a `}` is missing
333[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:276:10
334[warn] 276 | myNodes.kind mustEqual "NodeList"
335[warn] | ^
336[warn] | Line is indented too far to the left, or a `}` is missing
337[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:277:10
338[warn] 277 | myNodes.items.length mustEqual 3 // 3 minion nodes
339[warn] | ^
340[warn] | Line is indented too far to the left, or a `}` is missing
341[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:279:10
342[warn] 279 | myNodes(0).name mustEqual "10.245.1.3"
343[warn] | ^
344[warn] | Line is indented too far to the left, or a `}` is missing
345[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:280:10
346[warn] 280 | myNodes(0).status.get.capacity("memory") mustEqual Resource.Quantity("1017552Ki")
347[warn] | ^
348[warn] | Line is indented too far to the left, or a `}` is missing
349[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:282:10
350[warn] 282 | myNodes(1).name mustEqual "10.245.1.4"
351[warn] | ^
352[warn] | Line is indented too far to the left, or a `}` is missing
353[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:283:10
354[warn] 283 | myNodes(1).status.get.capacity("cpu") mustEqual Resource.Quantity("2")
355[warn] | ^
356[warn] | Line is indented too far to the left, or a `}` is missing
357[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:285:10
358[warn] 285 | val readNodes = Json.fromJson[NodeList](Json.toJson(myNodes)).get
359[warn] | ^
360[warn] | Line is indented too far to the left, or a `}` is missing
361[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:286:10
362[warn] 286 | myNodes mustEqual readNodes
363[warn] | ^
364[warn] | Line is indented too far to the left, or a `}` is missing
365[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/ReplicationControllerFormatSpec.scala:26:0
366[warn] 26 |import ReplicationController._
367[warn] |^
368[warn] |Line is indented too far to the left, or a `}` is missing
369[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/ServiceFormatSpec.scala:26:0
370[warn] 26 |import Service._
371[warn] |^
372[warn] |Line is indented too far to the left, or a `}` is missing
373[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/test/scala/skuber/json/PodFormatSpec.scala:380:28
374[warn] 380 | cntrStatuses(2).state.get match {
375[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^^
376[warn] | match may not be exhaustive.
377[warn] |
378[warn] | It would fail on pattern case: _: skuber.Container.State
379[warn] |
380[warn] | longer explanation available when compiling with `-explain`
381[info] [patched file /build/repo/client/src/test/scala/skuber/api/BytesToWatchEventSourceSpec.scala]
382[info] [patched file /build/repo/client/src/test/scala/skuber/apps/StatefulSetSpec.scala]
383[info] [patched file /build/repo/client/src/test/scala/skuber/json/NamespaceFormatSpec.scala]
384[info] [patched file /build/repo/client/src/test/scala/skuber/json/PodFormatSpec.scala]
385[info] [patched file /build/repo/client/src/test/scala/skuber/network/NetworkPolicySpec.scala]
386[info] [patched file /build/repo/client/src/test/scala/skuber/autoscaling/v2/HorizontalPodAutoscalerSpec.scala]
387[info] [patched file /build/repo/client/src/test/scala/skuber/api/ListQueryParamSpec.scala]
388[info] [patched file /build/repo/client/src/test/scala/skuber/ext/DeploymentSpec.scala]
389[info] [patched file /build/repo/client/src/test/scala/skuber/json/EnumTest.scala]
390[info] [patched file /build/repo/client/src/test/scala/skuber/apps/v1/StatefulSetSpec.scala]
391[info] [patched file /build/repo/client/src/test/scala/skuber/policy/v1beta1/PodDisruptionBudgetSpec.scala]
392[info] [patched file /build/repo/client/src/test/scala/skuber/autoscaling/v2beta1/HorizontalPodAutoscalerSpec.scala]
393[info] [patched file /build/repo/client/src/test/scala/skuber/apps/v1/DeploymentSpec.scala]
394[info] [patched file /build/repo/client/src/test/scala/skuber/apps/DeploymentSpec.scala]
395[info] [patched file /build/repo/client/src/test/scala/skuber/model/LabelSelectorSpec.scala]
396[warn] there were 43 deprecation warnings; re-run with -deprecation for details
397[warn] 36 warnings found
398[info] done compiling
399[info] compiling 15 Scala sources to /build/repo/client/target/scala-3.7.4/test-classes ...
400[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EnumTest.scala:23:50 -
401[warn] 23 | """.stripMargin))(using TestClassEnum.fmt.reads).get
402[warn] | ^^^^^^^^^^^^^^^^^^^^^^^
403[warn] |method reads is eta-expanded even though play.api.libs.json.Reads[skuber.json².TestClassEnum] does not have the @FunctionalInterface annotation.
404[warn] |
405[warn] |where: json is a package in package play.api.libs
406[warn] | json² is a package in package skuber
407[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EnumTest.scala:41:58 -
408[warn] 41 | """.stripMargin))(using TestClassEnumNone.fmtNone.reads).get
409[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
410[warn] |method reads is eta-expanded even though play.api.libs.json.Reads[skuber.json².TestClassEnumNone] does not have the @FunctionalInterface annotation.
411[warn] |
412[warn] |where: json is a package in package play.api.libs
413[warn] | json² is a package in package skuber
414[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/test/scala/skuber/json/PodFormatSpec.scala:380:28
415[warn] 380 | cntrStatuses(2).state.get match {
416[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^^
417[warn] | match may not be exhaustive.
418[warn] |
419[warn] | It would fail on pattern case: _: skuber.Container.State
420[warn] |
421[warn] | longer explanation available when compiling with `-explain`
422[warn] there were 41 deprecation warnings; re-run with -deprecation for details
423[warn] four warnings found
424[info] done compiling
425Starting build for ProjectRef(file:/build/repo/,examples) (skuber-examples)... [1/2]
426Compile scalacOptions: -rewrite, -Wconf:msg=can be rewritten automatically under:s, -source:3.7-migration
427[info] compiling 22 Scala sources to /build/repo/examples/target/scala-3.7.4/classes ...
428[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/auth/AwsAuthExample.scala]
429[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/guestbook/GuestbookActor.scala]
430[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/job/PrintPiJob.scala]
431[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/ingress/NginxIngress.scala]
432[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/deployment/DeploymentExamples.scala]
433[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/customresources/v1beta1/CreateCRD.scala]
434[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/guestbook/KubernetesProxyActor.scala]
435[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/fluent/FluentExamples.scala]
436[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/argo/EventBusExample.scala]
437[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/scale/ScaleExamples.scala]
438[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/auth/InClusterConfigurationExample.scala]
439[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/patch/PatchExamples.scala]
440[warn] there were 18 deprecation warnings; re-run with -deprecation for details
441[warn] one warning found
442[info] done compiling
443[info] compiling 22 Scala sources to /build/repo/examples/target/scala-3.7.4/classes ...
444[warn] there were 18 deprecation warnings; re-run with -deprecation for details
445[warn] one warning found
446[info] done compiling
447
448************************
449Build summary:
450[{
451 "module": "skuber",
452 "compile": {"status": "ok", "tookMs": 37390, "warnings": 4, "errors": 0, "sourceVersion": "3.7-migration"},
453 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
454 "test-compile": {"status": "ok", "tookMs": 19057, "warnings": 35, "errors": 0, "sourceVersion": "3.7-migration"},
455 "test": {"status": "skipped", "tookMs": 0, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
456 "publish": {"status": "skipped", "tookMs": 0},
457 "metadata": {
458 "crossScalaVersions": ["2.12.13", "2.13.12", "3.3.1"]
459}
460},{
461 "module": "skuber-examples",
462 "compile": {"status": "ok", "tookMs": 2226, "warnings": 0, "errors": 0, "sourceVersion": "3.7-migration"},
463 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
464 "test-compile": {"status": "ok", "tookMs": 1961, "warnings": 0, "errors": 0, "sourceVersion": "3.7-migration"},
465 "test": {"status": "skipped", "tookMs": 0, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
466 "publish": {"status": "skipped", "tookMs": 0},
467 "metadata": {
468 "crossScalaVersions": ["2.12.13", "2.13.12", "3.3.1"]
469}
470}]
471************************
472[success] Total time: 100 s (0:01:40.0), completed Nov 28, 2025, 2:43:32 PM
473[0JChecking patch project/plugins.sbt...
474Checking patch project/build.properties...
475Checking patch build.sbt...
476Applied patch project/plugins.sbt cleanly.
477Applied patch project/build.properties cleanly.
478Applied patch build.sbt cleanly.
479Commit migration rewrites
480Switched to a new branch 'opencb/migrate-source-3.7'
481[opencb/migrate-source-3.7 7b5a2d3] Apply Scala compiler rewrites using -source:3.7-migration using Scala 3.7.4
482 46 files changed, 202 insertions(+), 202 deletions(-)
483----
484Preparing build for 3.8.0-RC2
485Scala binary version found: 3.8
486Implicitly using source version 3.8
487Scala binary version found: 3.8
488Implicitly using source version 3.8
489Would try to apply common scalacOption (best-effort, sbt/mill only):
490Append: ,REQUIRE:-source:3.8
491Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
492
493Try apply source patch:
494Path: build.sbt
495Pattern: val scala3Version = "3.3.1"
496Replacement: val scala3Version = "3.8.0-RC2"
497Successfully applied pattern 'val scala3Version = "3.3.1"' in build.sbt
498----
499Starting build for 3.8.0-RC2
500Execute tests: true
501sbt project found:
502Sbt version 1.9.2 is not supported, minimal supported version is 1.11.5
503Enforcing usage of sbt in version 1.11.5
504No prepare script found for project hagay3/skuber
505##################################
506Scala version: 3.8.0-RC2
507Targets: io.github.hagay3%skuber io.github.hagay3%skuber-examples
508Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":["3.7"],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.3.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}
509##################################
510Using extra scalacOptions: ,REQUIRE:-source:3.8
511Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
512[sbt_options] declare -a sbt_options=()
513[process_args] java_version = '17'
514[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
515# Executing command line:
516java
517-Dfile.encoding=UTF-8
518-Dcommunitybuild.scala=3.8.0-RC2
519-Dcommunitybuild.project.dependencies.add=
520-Xmx7G
521-Xms4G
522-Xss8M
523-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
524-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
525-jar
526/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
527"setCrossScalaVersions 3.8.0-RC2"
528"++3.8.0-RC2 -v"
529"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
530"set every credentials := Nil"
531"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
532"removeScalacOptionsStartingWith -P:wartremover"
533
534moduleMappings
535"runBuild 3.8.0-RC2 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":["3.7"],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.3.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}""" io.github.hagay3%skuber io.github.hagay3%skuber-examples"
536
537[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 17.0.8)
538[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
539[info] loading project definition from /build/repo/project
540/build/repo/build.sbt:197: warning: value IntegrationTest in trait LibraryManagementSyntax is deprecated (since 1.9.0): Create a separate subproject for testing instead
541 .configs(IntegrationTest)
542 ^
543/build/repo/build.sbt:202: warning: lazy value itSettings in object Defaults is deprecated (since 1.9.0): Create a separate subproject instead of using IntegrationTest and in addition avoid using itSettings
544 Defaults.itSettings,
545 ^
546[info] loading settings for project skuber-project from build.sbt, version.sbt...
547[info] set current project to skuber-project (in build file:/build/repo/)
548[warn] there's a key that's not used by any other settings/tasks:
549[warn]
550[warn] * ThisBuild / publishMavenStyle
551[warn] +- /build/repo/build.sbt:60
552[warn]
553[warn] note: a setting might still be used by a command; to exclude a key from this `lintUnused` check
554[warn] either append it to `Global / excludeLintKeys` or call .withRank(KeyRanks.Invisible) on the key
555Execute setCrossScalaVersions: 3.8.0-RC2
556OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in skuber/crossScalaVersions
557OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in examples/crossScalaVersions
558OpenCB::Limitting incorrect crossVersions List() -> List(2.13.12) in skuber-project/crossScalaVersions
559[info] set current project to skuber-project (in build file:/build/repo/)
560[info] Setting Scala version to 3.8.0-RC2 on 2 projects.
561[info] Switching Scala version on:
562[info] skuber (2.12.13, 2.13.12, 3.8.0-RC2)
563[info] examples (2.12.13, 2.13.12, 3.8.0-RC2)
564[info] Excluding projects:
565[info] * skuber-project (2.13.12)
566[info] Reapplying settings...
567[info] set current project to skuber-project (in build file:/build/repo/)
568Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
569[info] Reapplying settings...
570[info] set current project to skuber-project (in build file:/build/repo/)
571[info] Defining Global / credentials, credentials and 1 others.
572[info] The new values will be used by Global / pgpSelectPassphrase, Global / pgpSigningKey and 14 others.
573[info] Run `last` for details.
574[info] Reapplying settings...
575[info] set current project to skuber-project (in build file:/build/repo/)
576Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
577[info] Reapplying settings...
578OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
579
580 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
581 Did you mean allExcludeDependencies ?
582 , retry without global scopes
583[info] Reapplying settings...
584[info] set current project to skuber-project (in build file:/build/repo/)
585Execute removeScalacOptionsStartingWith: -P:wartremover
586[info] Reapplying settings...
587[info] set current project to skuber-project (in build file:/build/repo/)
588[success] Total time: 0 s, completed Nov 28, 2025, 2:43:47 PM
589Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":["3.7"],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.3.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}
590Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
591Starting build...
592Projects: Set(skuber, examples)
593Starting build for ProjectRef(file:/build/repo/,skuber) (skuber)... [0/2]
594OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
595Compile scalacOptions: -Wconf:msg=can be rewritten automatically under:s, -source:3.8
596[info] compiling 111 Scala sources to /build/repo/client/target/scala-3.8.0-RC2/classes ...
597[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala:84:8
598[warn] 84 | case bm: ws.BinaryMessage.Strict if bm.data(0) == 1 =>
599[warn] | ^
600[warn] |match may not be exhaustive.
601[warn] |
602[warn] |It would fail on pattern case: _: org.apache.pekko.http.scaladsl.model.ws.Message
603[warn] |
604[warn] | longer explanation available when compiling with `-explain`
605[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala:91:8
606[warn] 91 | case bm: ws.BinaryMessage.Strict =>
607[warn] | ^
608[warn] |match may not be exhaustive.
609[warn] |
610[warn] |It would fail on pattern case: org.apache.pekko.http.scaladsl.model.ws.BinaryMessage.Streamed(_), org.apache.pekko.http.scaladsl.model.ws.TextMessage.Streamed(_), org.apache.pekko.http.scaladsl.model.ws.TextMessage.Strict(_)
611[warn] |
612[warn] | longer explanation available when compiling with `-explain`
613[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/api/watch/WatchSource.scala:62:10
614[warn] 62 | case (Success(HttpResponse(StatusCodes.OK, _, entity, _)), se) =>
615[warn] | ^
616[warn] | match may not be exhaustive.
617[warn] |
618[warn] | It would fail on pattern case: (scala.util.Success(_), Start(_))
619[warn] |
620[warn] | longer explanation available when compiling with `-explain`
621[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/main/scala/skuber/json/package.scala:472:6
622[warn] 472 | handler match {
623[warn] | ^^^^^^^
624[warn] |match may not be exhaustive.
625[warn] |
626[warn] |It would fail on pattern case: skuber.GRPCAction(_, _), UnknownHandler
627[warn] |
628[warn] | longer explanation available when compiling with `-explain`
629[warn] there were 5 feature warnings; re-run with -feature for details
630[warn] there were 24 deprecation warnings; re-run with -deprecation for details
631[warn] 6 warnings found
632[info] done compiling
633[info] compiling 41 Scala sources to /build/repo/client/target/scala-3.8.0-RC2/test-classes ...
634[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:26:0
635[warn] 26 |import Endpoints._
636[warn] |^
637[warn] |Line is indented too far to the left, or a `}` is missing
638[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:103:5
639[warn] 103 | val endps = Json.parse(epsJsonStr).as[Endpoints]
640[warn] | ^
641[warn] | Line is indented too far to the left, or a `}` is missing
642[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:104:5
643[warn] 104 | endps.kind mustEqual "Endpoints"
644[warn] | ^
645[warn] | Line is indented too far to the left, or a `}` is missing
646[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:105:5
647[warn] 105 | endps.name mustEqual "kube-dns"
648[warn] | ^
649[warn] | Line is indented too far to the left, or a `}` is missing
650[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:106:5
651[warn] 106 | endps.metadata.labels.size mustEqual 3
652[warn] | ^
653[warn] | Line is indented too far to the left, or a `}` is missing
654[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:107:5
655[warn] 107 | endps.metadata.labels("kubernetes.io/name") mustEqual "KubeDNS"
656[warn] | ^
657[warn] | Line is indented too far to the left, or a `}` is missing
658[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:108:5
659[warn] 108 | endps.subsets.size mustEqual 1
660[warn] | ^
661[warn] | Line is indented too far to the left, or a `}` is missing
662[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:109:5
663[warn] 109 | endps.subsets(0).addresses.size mustEqual 1
664[warn] | ^
665[warn] | Line is indented too far to the left, or a `}` is missing
666[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:110:5
667[warn] 110 | endps.subsets(0).addresses(0).ip mustEqual("10.246.1.3")
668[warn] | ^
669[warn] | Line is indented too far to the left, or a `}` is missing
670[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:111:5
671[warn] 111 | val tgtRef = endps.subsets(0).addresses(0).targetRef.get
672[warn] | ^
673[warn] | Line is indented too far to the left, or a `}` is missing
674[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:112:5
675[warn] 112 | tgtRef.kind mustEqual "Pod"
676[warn] | ^
677[warn] | Line is indented too far to the left, or a `}` is missing
678[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:113:5
679[warn] 113 | tgtRef.name mustEqual "kube-dns-v3-fkelw"
680[warn] | ^
681[warn] | Line is indented too far to the left, or a `}` is missing
682[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:114:5
683[warn] 114 | val ports = endps.subsets(0).ports
684[warn] | ^
685[warn] | Line is indented too far to the left, or a `}` is missing
686[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:115:5
687[warn] 115 | ports.length mustEqual 2
688[warn] | ^
689[warn] | Line is indented too far to the left, or a `}` is missing
690[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:116:5
691[warn] 116 | ports(0).name mustEqual Some("dns-tcp")
692[warn] | ^
693[warn] | Line is indented too far to the left, or a `}` is missing
694[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:117:5
695[warn] 117 | ports(0).protocol mustEqual Protocol.TCP
696[warn] | ^
697[warn] | Line is indented too far to the left, or a `}` is missing
698[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:118:5
699[warn] 118 | ports(0).port mustEqual 53
700[warn] | ^
701[warn] | Line is indented too far to the left, or a `}` is missing
702[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:119:5
703[warn] 119 | ports(1).name mustEqual Some("dns")
704[warn] | ^
705[warn] | Line is indented too far to the left, or a `}` is missing
706[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:120:5
707[warn] 120 | ports(1).protocol mustEqual Protocol.UDP
708[warn] | ^
709[warn] | Line is indented too far to the left, or a `}` is missing
710[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EndpointsFormatSpec.scala:121:5
711[warn] 121 | ports(1).port mustEqual 53
712[warn] | ^
713[warn] | Line is indented too far to the left, or a `}` is missing
714[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EnumTest.scala:23:50 -
715[warn] 23 | """.stripMargin))(using TestClassEnum.fmt.reads).get
716[warn] | ^^^^^^^^^^^^^^^^^^^^^^^
717[warn] |method reads is eta-expanded even though play.api.libs.json.Reads[skuber.json².TestClassEnum] does not have the @FunctionalInterface annotation.
718[warn] |
719[warn] |where: json is a package in package play.api.libs
720[warn] | json² is a package in package skuber
721[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/EnumTest.scala:41:58 -
722[warn] 41 | """.stripMargin))(using TestClassEnumNone.fmtNone.reads).get
723[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
724[warn] |method reads is eta-expanded even though play.api.libs.json.Reads[skuber.json².TestClassEnumNone] does not have the @FunctionalInterface annotation.
725[warn] |
726[warn] |where: json is a package in package play.api.libs
727[warn] | json² is a package in package skuber
728[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:24:0
729[warn] 24 |import Node._
730[warn] |^
731[warn] |Line is indented too far to the left, or a `}` is missing
732[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:275:10
733[warn] 275 | val myNodes= Json.parse(nodesJsonStr).as[NodeList]
734[warn] | ^
735[warn] | Line is indented too far to the left, or a `}` is missing
736[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:276:10
737[warn] 276 | myNodes.kind mustEqual "NodeList"
738[warn] | ^
739[warn] | Line is indented too far to the left, or a `}` is missing
740[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:277:10
741[warn] 277 | myNodes.items.length mustEqual 3 // 3 minion nodes
742[warn] | ^
743[warn] | Line is indented too far to the left, or a `}` is missing
744[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:279:10
745[warn] 279 | myNodes(0).name mustEqual "10.245.1.3"
746[warn] | ^
747[warn] | Line is indented too far to the left, or a `}` is missing
748[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:280:10
749[warn] 280 | myNodes(0).status.get.capacity("memory") mustEqual Resource.Quantity("1017552Ki")
750[warn] | ^
751[warn] | Line is indented too far to the left, or a `}` is missing
752[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:282:10
753[warn] 282 | myNodes(1).name mustEqual "10.245.1.4"
754[warn] | ^
755[warn] | Line is indented too far to the left, or a `}` is missing
756[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:283:10
757[warn] 283 | myNodes(1).status.get.capacity("cpu") mustEqual Resource.Quantity("2")
758[warn] | ^
759[warn] | Line is indented too far to the left, or a `}` is missing
760[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:285:10
761[warn] 285 | val readNodes = Json.fromJson[NodeList](Json.toJson(myNodes)).get
762[warn] | ^
763[warn] | Line is indented too far to the left, or a `}` is missing
764[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/NodeFormatSpec.scala:286:10
765[warn] 286 | myNodes mustEqual readNodes
766[warn] | ^
767[warn] | Line is indented too far to the left, or a `}` is missing
768[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/ReplicationControllerFormatSpec.scala:26:0
769[warn] 26 |import ReplicationController._
770[warn] |^
771[warn] |Line is indented too far to the left, or a `}` is missing
772[warn] -- Warning: /build/repo/client/src/test/scala/skuber/json/ServiceFormatSpec.scala:26:0
773[warn] 26 |import Service._
774[warn] |^
775[warn] |Line is indented too far to the left, or a `}` is missing
776[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/client/src/test/scala/skuber/json/PodFormatSpec.scala:380:28
777[warn] 380 | cntrStatuses(2).state.get match {
778[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^^
779[warn] | match may not be exhaustive.
780[warn] |
781[warn] | It would fail on pattern case: _: skuber.Container.State
782[warn] |
783[warn] | longer explanation available when compiling with `-explain`
784[warn] there were 43 deprecation warnings; re-run with -deprecation for details
785[warn] 36 warnings found
786[info] done compiling
787[info] EnvVarSpec
788[info] This is a unit specification for the skuber formatter for env vars.
789[info] An EnvVar can be read from json
790[info] + this can be done for an env var with a field ref with a field path
791[info] Total for specification EnvVarSpec
792[info] Finished in 152 ms
793[info] 1 example, 0 failure, 0 error
794[info] NetworkPolicySpec
795[info] This is a unit specification for the skuber NetworkPolicy class. + A NetworkPolicy object can be written to Json and read back again
796[info] Total for specification NetworkPolicySpec
797[info] Finished in 137 ms
798[info] 1 example, 0 failure, 0 error
799[info] NodeFormatSpec
800[info] This is a unit specification for the skuber Node related json formatter.
801[info] A Node can be symmetrically written to json and the same value read back in
802[info] + this can be done for a simple Service with just a name
803[info] + this can be done for a simple Node with just a name and namespace set
804[info] + this can be done for a Node with a simple Spec
805[info] + this can be done for a Node with a more complex spec
806[info] + an example json formatted node can be read
807[info] + an example json formatted nodelist can be read
808[info] + a Kubernetes v1.8 minikube node can be read and written as json
809[info] Total for specification NodeFormatSpec
810[info] Finished in 323 ms
811[info] 7 examples, 0 failure, 0 error
812[info] ProbeFormatSpec
813[info] This is a unit specification for the skuber Prob related json formatter.
814[info] + read probe json - GRPC
815[info] + read probe json - ExecCommand
816[info] + read probe json - ExecCommand
817[info] + read probe json - HTTPGetAction with integer port
818[info] + read probe json - TCPSocketAction
819[info] + read probe json - UnknownHandler fallback
820[info] Total for specification ProbeFormatSpec
821[info] Finished in 121 ms
822[info] 6 examples, 0 failure, 0 error
823[info] NamespaceFormatSpec
824[info] This is a unit specification for the skuber formatter for k8s namespaces.
825[info] A Namespace can be symmetrically written to json and the same value read back in
826[info] + this can be done for the default namespace
827[info] + this can be done for a simple non-default namespace
828[info] + this can be done for a more complex non-default namespace with a Spec and Status
829[info] + namespace spec allows finalizers to be optional
830[info] + we can read a namespace from a direct JSON string
831[info] Total for specification NamespaceFormatSpec
832[info] Finished in 158 ms
833[info] 5 examples, 0 failure, 0 error
834[info] EnumTest
835[info] Test enum formatters
836[info] Test enum formatters suite
837[info] + Convert json to enum object
838[info] + Test default enum formatter
839[info] + Test enum formatter with json path
840[info] + Test enum formatter with none value and also default value
841[info] + Test enum formatter with wrong enum value -> fallback to None
842[info] Total for specification EnumTest
843[info] Finished in 108 ms
844[info] 5 examples, 0 failure, 0 error
845[info] IngressSpec
846[info] This is a unit specification for the skuber Ingress class. + An Ingress object can be written to Json and then read back again successfully
847[info] + An Ingress object with empty Path can be read directly from a JSON string
848[info] Total for specification IngressSpec
849[info] Finished in 233 ms
850[info] 2 examples, 0 failure, 0 error
851[info] AuthSpec
852[info] This is a unit specification for the auth data model. + Auth toString works when empty
853[info] + CertAuth toString masks cert, key but not user
854[info] + CertAuth toString doesn't mask username, certPath, keyPath
855[info] + TokenAuth toString masks token
856[info] + GcpAuth toString masks accessToken
857[info] + OidcAuth toString masks idToken
858[info] Total for specification AuthSpec
859[info] Finished in 279 ms
860[info] 6 examples, 0 failure, 0 error
861[info] HorizontalPodAutoscalerSpec
862[info] A HorizontalPodAutoscaler can
863[info] + decoded from json
864[info] + encode to json
865[info] Total for specification HorizontalPodAutoscalerSpec
866[info] Finished in 78 ms
867[info] 2 examples, 0 failure, 0 error
868[info] StatefulSetSpec
869[info] This is a unit specification for the skuber StatefulSet class. + A StatefulSet object can be constructed from a name and pod template spec
870[info] + A StatefulSet object can be written to Json and then read back again successfully
871[info] + A StatefulSet object properly writes with zero replicas
872[info] + A StatefulSet object can be read directly from a JSON string
873[info] Total for specification StatefulSetSpec
874[info] Finished in 75 ms
875[info] 4 examples, 0 failure, 0 error
876[info] DeploymentSpec
877[info] This is a unit specification for the skuber apps/v1 Deployment class. + A Deployment object can be constructed from a name and pod template spec
878[info] + A Deployment object can be written to Json and then read back again successfully
879[info] + A Deployment object properly writes with zero replicas
880[info] + A Deployment object can be read directly from a JSON string
881[info] Total for specification DeploymentSpec
882[info] Finished in 81 ms
883[info] 4 examples, 0 failure, 0 error
884[info] PodDisruptionBudgetSpec
885[info] A PodDisruptionBudget can
886[info] + decoded from json
887[info] + encode to json
888[info] Total for specification PodDisruptionBudgetSpec
889[info] Finished in 42 ms
890[info] 2 examples, 0 failure, 0 error
891[info] SecretSpec
892[info] + A Secret containing a byte array can symmetrically be written to json and the same value read back in
893[info] + this can be done with an empty data map
894[info] + this can be done with immutable defined
895[info] + this can be done without immutable defined
896[info] + this can be done with the type member defined
897[info] Total for specification SecretSpec
898[info] Finished in 60 ms
899[info] 5 examples, 0 failure, 0 error
900[info] ReplicaSetSpec
901[info] This is a unit specification for the skuber ReplicaSet class. + A ReplicaSet object properly writes with zero replicas
902[info] Total for specification ReplicaSetSpec
903[info] Finished in 65 ms
904[info] 1 example, 0 failure, 0 error
905[info] HPASSpec
906[info] This is a unit specification for the skuber HorizontalPodAutoscaler class. A HPAS object can be constructed from the object it scales
907[info] + A HPAS can be constructed from a replication controller
908[info] + A HPAS object properly writes with zero minReplicas
909[info] Total for specification HPASSpec
910[info] Finished in 57 ms
911[info] 2 examples, 0 failure, 0 error
912[INFO] [11/28/2025 14:44:50.664] [pool-19-thread-5-ScalaTest-running-ConfigurationSpec] [skuber.api] Using following context for connecting to Kubernetes cluster: Context(Cluster(v1,https://horse.org:4443,false,Some(Right([B@75e96d6f)),Some(horse-cluster),None),CertAuth(clientCertificate=<PEM masked> clientKey=<PEM masked> userName= ),Namespace(Namespace,v1,ObjectMeta(chisel-ns,,,,,,None,None,None,Map(),Map(),List(),0,None,None),None,None))
913[info] JobSpec
914[info] This is a unit specification for the skuber Job class. + A Job object can be constructed from a name and a pod template
915[info] + A Job object can be constructed with fluent API
916[info] + A Job object can be written to Json and then read back again successfully
917[info] + A Job object can be read directly from a JSON string
918[info] Total for specification JobSpec
919[info] Finished in 132 ms
920[info] 4 examples, 0 failure, 0 error
921[info] ScaleSpec
922[info] This is a unit specification for the skuber Scale class. + A Scale object can be constructed from a name and replica count
923[info] + A scale object can be written to Json and then read back again successfully
924[info] + A scale object can be read directly from a JSON string
925[info] + A scale object can contain NO replicas
926[info] + A scale json with single key->value in status selector
927[info] + A scale json with wrong spec status string should not produce errors
928[info] Total for specification ScaleSpec
929[info] Finished in 60 ms
930[info] 6 examples, 0 failure, 0 error
931[info] DeploymentSpec
932[info] This is a unit specification for the skuber Deployment class. + A Deployment object can be constructed from a name and pod template spec
933[info] + A Deployment object can be written to Json and then read back again successfully
934[info] + A Deployment object properly writes with zero replicas
935[info] + A Deployment object can be read directly from a JSON string
936[info] Total for specification DeploymentSpec
937[info] Finished in 63 ms
938[info] 4 examples, 0 failure, 0 error
939[info] PodPresetFormatSpec
940[info] This is a unit specification for the skuber PodPreset related json formatter.
941[info] + a podpreset can be read and written as json successfully
942[info] Total for specification PodPresetFormatSpec
943[info] Finished in 37 ms
944[info] 1 example, 0 failure, 0 error
945[info] IngressSpec
946[info] This is a unit specification for the skuber Ingress class from v1 api version. + An Ingress object can be written to Json and then read back again successfully
947[info] + An Ingress object with empty Path can be read directly from a JSON string
948[info] Total for specification IngressSpec
949[info] Finished in 34 ms
950[info] 2 examples, 0 failure, 0 error
951[info] LongPollingPoolSpec
952[info] LongPollingPool should
953[info] + create a http pool
954[info] + create a https pool
955[info] + handle unsupported scheme
956[info] Total for specification LongPollingPoolSpec
957[info] Finished in 1 second, 220 ms
958[info] 3 examples, 0 failure, 0 error
959None[INFO] [11/28/2025 14:44:51.395] [pool-19-thread-5-ScalaTest-running-ConfigurationSpec] [skuber.api] Using following context for connecting to Kubernetes cluster: Context(Cluster(v1,https://horse.org:4443,false,Some(Right([B@2def7481)),Some(horse-cluster),None),CertAuth(clientCertificate=<PEM masked> clientKey=<PEM masked> userName= ),Namespace(Namespace,v1,ObjectMeta(chisel-ns,,,,,,None,None,None,Map(),Map(),List(),0,None,None),None,None))
960[INFO] [11/28/2025 14:44:51.428] [pool-19-thread-5-ScalaTest-running-ConfigurationSpec] [skuber.api] Using following context for connecting to Kubernetes cluster: Context(Cluster(v1,https://horse.org:4443,false,Some(Right([B@18710d33)),Some(horse-cluster),None),CertAuth(clientCertificate=<PEM masked> clientKey=<PEM masked> userName= ),Namespace(Namespace,v1,ObjectMeta(chisel-ns,,,,,,None,None,None,Map(),Map(),List(),0,None,None),None,None))
961[ERROR] [11/28/2025 14:44:51.457] [specs2-3] [skuber.api] [JSON Parse Error] Failed to parse element: {"metadata_not_parsable_error_for_tests":{"name":"etcd-server-kubernetes-master","namespace":"kube-system","selfLink":"/api/v1/namespaces/kube-system/pods/etcd-server-kubernetes-master","uid":"5cc1fb77-48be-11e5-8b41-42010af0eb07","resourceVersion":"361","creationTimestamp":"2015-08-22T11:10:14Z","annotations":{"kubernetes.io/config.mirror":"mirror","kubernetes.io/config.seen":"2015-08-22T11:10:03.099745385Z","kubernetes.io/config.source":"file"}},"spec":{"volumes":[{"name":"varetcd","hostPath":{"path":"/mnt/master-pd/var/etcd"}},{"name":"varlogetcd","hostPath":{"path":"/var/log/etcd.log"}}],"containers":[{"name":"etcd-container","image":"gcr.io/google_containers/etcd:2.0.12","command":["/bin/sh","-c","/usr/local/bin/etcd --addr 127.0.0.1:4001 --bind-addr 127.0.0.1:4001 --data-dir /var/etcd/data 1>>/var/log/etcd.log 2>&1"],"ports":[{"name":"serverport","hostPort":2380,"containerPort":2380,"protocol":"TCP"},{"name":"clientport","hostPort":4001,"containerPort":4001,"protocol":"TCP"}],"resources":{"limits":{"cpu":"200m"}},"volumeMounts":[{"name":"varetcd","mountPath":"/var/etcd"},{"name":"varlogetcd","mountPath":"/var/log/etcd.log"}],"terminationMessagePath":"/dev/termination-log","imagePullPolicy":"IfNotPresent"}],"restartPolicy":"Always","dnsPolicy":"ClusterFirst","nodeName":"kubernetes-master","hostNetwork":true},"status":{"phase":"Running","conditions":[{"type":"Ready","status":"True"}],"hostIP":"10.240.235.7","podIP":"10.240.235.7","startTime":"2015-08-22T11:10:47Z","containerStatuses":[{"name":"etcd-container","state":{"running":{"startedAt":"2015-08-22T11:10:37Z"}},"lastState":{"terminated":{"exitCode":0,"startedAt":"2015-08-22T11:10:04Z","finishedAt":"2015-08-22T11:10:33Z","containerID":"docker://b74a594e7dc54499a7173f2ec5e5c0f73b8b9977f78aa2b0e78ade3a8f3dd78a"}},"ready":true,"restartCount":1,"image":"gcr.io/google_containers/etcd:2.0.12","imageID":"docker://fafe4735269937ef7ba1fa0badb66d7fd70736619862e3982144c59289fddb11","containerID":"docker://f76ec79bf5221ccc99be3dff6bf7cf8c75fedca5e18210c6150fff95d518620d"}]}}
962[ERROR] [11/28/2025 14:44:51.458] [specs2-3] [skuber.api] Details: /metadata: error.path.missing
963[info] PodFormatSpec
964[info] This is a unit specification for the skuber Pod related json formatter.
965[info] A Pod can be symmetrically written to json and the same value read back in
966[info] + this can be done for a simple Pod with just a name
967[info] + this can be done for a simple Pod with just a name and namespace set
968[info] + this can be done for a Pod with a simple, single container spec
969[info] + this can be done for a Pod with a more complex spec
970[info] + a quite complex pod can be read from json
971[info] + a pod with nodeAffinity can be read and written as json
972[info] + a pod with unsupported volume type can be read as json using GenericVolumeSource
973[info] + NodeSelectorTerm be properly read and written as json
974[info] + NodeSelectorTerm with no matchExpressions be properly read and written as json
975[info] + NodeSelectorTerm with no matchFields be properly read and written as json
976[info] + NodeSelectorTerm with empty be properly read and written as json
977[info] + NodeAffinity be properly read and written as json
978[info] + NodeAffinity without preferences be properly read and written as json
979[info] + NodeAffinity without requirements be properly read and written as json
980[info] + PodAffinity can be properly read and written as json
981[info] + a complex podlist can be read and written as json
982[info] + Pod SecurityContext with RuntimeDefault seccomp profile can be properly read and written as json
983[info] + Pod SecurityContext with Localhost seccomp profile can be properly read and written as json
984[info] + Pod SecurityContext with Unknown seccomp profile can be properly read and written as json
985[info] + a statefulset with pod affinity/anti-affinity can be read and written as json successfully
986[info] + a pod with a spec that sets many optional fields can be read and written as json successfully
987[info] + read probe json - GRPC
988[info] + a complex podlist can be read in case single element in the pod list is failed to parse
989[info] Total for specification PodFormatSpec
990[info] Finished in 840 ms
991[info] 23 examples, 0 failure, 0 error
992[info] SkuberConfigSpec
993[info] This is a specification for the 'SkuberConfigSpec' classSkuberConfig should
994[info] in-cluster should
995[info] + refresh token interval defaults to 5 min if no configuration provided
996[info] + refresh token interval value provided by the configuration
997[info] watch-continuously should
998[info] + defaults are provided
999[info] Total for specification SkuberConfigSpec
1000[info] Finished in 64 ms
1001[info] 3 examples, 0 failure, 0 error
1002{"kind":"DaemonSet","apiVersion":"extensions/v1beta1","metadata":{"name":"example"},"spec":{"selector":{"matchLabels":{"tier":"cache"},"matchExpressions":[{"key":"live","operator":"DoesNotExist"},{"key":"env","operator":"NotIn","values":["dev","test"]}]},"template":{"metadata":{"name":"example"},"spec":{"containers":[{"name":"example","image":"example"}],"restartPolicy":"Always","dnsPolicy":"ClusterFirst"}}}}
1003[info] DaemonSetSpec
1004[info] + A DaemonSet Object can be written to Json and then read back again successfully
1005[info] Total for specification DaemonSetSpec
1006[info] Finished in 19 ms
1007[info] 1 example, 0 failure, 0 error
1008[info] ListQueryParamSpec
1009[info] + LabelSelector string representations equate to the associated labelSelector query param values
1010[info] Total for specification ListQueryParamSpec
1011[info] Finished in 10 ms
1012[info] 1 example, 0 failure, 0 error
1013[info] ReplicationControllerFormatSpec
1014[info] This is a unit specification for the skuber Service related json formatter.
1015[info] A Replication Controller can be symmetrically written to json and the same value read back in
1016[info] + this can be done for a simple controller with just a name
1017[info] + this can be done for a simple controller with just a name and namespace set
1018[info] + this can be done for a controller with a spec for replicating a pod with a single container
1019[info] + a replication controller can be read from Json
1020[info] Total for specification ReplicationControllerFormatSpec
1021[info] Finished in 38 ms
1022[info] 4 examples, 0 failure, 0 error
1023[info] LabelSelectorSpec:
1024[info] label selector tests
1025[info] - A label selector can be constructed1
1026[info] - A label selector can be constructed2
1027[info] - A label selector can be constructed3
1028[info] - A label selector can be constructed4
1029[info] - A label selector can be constructed5
1030[info] - A label selector can be constructed6
1031[info] - A label selector can be constructed7
1032[info] ConfigurationSpec:
1033[info] Test kube config
1034[info] - An example kubeconfig file can be parsed correctly
1035[info] - Parse EC private keys from kubeconfig file
1036[info] - Parse RSA private keys from kubeconfig file
1037[info] - Parse PKCS#8 private keys from kubeconfig file
1038[info] - If kubeconfig is not found at expected path then a Failure is returned
1039[info] - if a relative path and directory are specified, then the parsed config must contain the fully expanded paths
1040[info] - Parse exec kubeconfig file
1041[info] BytesToWatchEventSourceSpec
1042[info] + A single chunk containing a single Watch event can be read correctly
1043[info] + A single chunk containing two Watch events can be enumerated correctly
1044[info] + Two chunks containing two Watch events with one split across the chunks can be enumerated correctly
1045[info] + Two chunks containing four Watch events, with a middle event split across the chunks, can be enumerated correctly
1046[info] + Four chunks, each containing a Watch event terminated by a line feed, can be enumerated
1047[info] Total for specification BytesToWatchEventSourceSpec
1048[info] Finished in 40 ms
1049[info] 5 examples, 0 failure, 0 error
1050[info] DeploymentSpec
1051[info] This is a unit specification for the skuber Deployment class. + A Deployment object can be constructed from a name and pod template spec
1052[info] + A Deployment object can be written to Json and then read back again successfully
1053[info] + A Deployment object properly writes with zero replicas
1054[info] + A Deployment object can be read directly from a JSON string
1055[info] Total for specification DeploymentSpec
1056[info] Finished in 44 ms
1057[info] 4 examples, 0 failure, 0 error
1058[info] NodeAffinitySpec
1059[info] This is a unit specification for the skuber formatter for k8s NodeAffinity.
1060[info] + An Operator can be written to json and back in
1061[info]
1062[info] + A MatchExpression can be written to json and back in
1063[info]
1064[info] + A MatchExpressions can be written to json and back in
1065[info]
1066[info] + A NodeSelectorTerm can be written to json and back in
1067[info]
1068[info] + A NodeSelectorTerms can be written to json and back in
1069[info]
1070[info] + A RequiredDuringSchedulingIgnoredDuringExecution can be written to json and back in
1071[info]
1072[info] + A PreferredDuringSchedulingIgnoredDuringExecution can be written to json and back in
1073[info]
1074[info] Total for specification NodeAffinitySpec
1075[info] Finished in 80 ms
1076[info] 7 examples, 0 failure, 0 error
1077[info] VolumeReadWriteSpec
1078[info] This is a unit specification for the skuber json readers and writers for types that have multiple choices e.g. Volumes have multiple choices of Source type.
1079[info] A PersistentVolumeClaim spec can be symmetrically written to json and the same value read back in
1080[info] + this can be done for the emptydir type source spec
1081[info] + A PersistentVolume spec can be symmetrically written to json and the same value read back in
1082[info]
1083[info] + A PersistentVolume with unsupported volume type can be read as json using GenericVolumeSource
1084[info] A Volume spec can be symmetrically written to json and the same value read back in
1085[info] + this can be done for the emptydir type source spec
1086[info] + this can be done for the a hostpath type source
1087[info] + this can be done for the a secret type source spec
1088[info] + this can be done in a generic way for unsupported source specs
1089[info] + this can be done for the a git repo source spec
1090[info] + this can be done for the DownwardAPIVolumeSource spec
1091[info] + this can be done for the DownwardAPIVolumeSource spec with field selector apiVersion left at default
1092[info] + this can be done for the a GCE Persistent Disk source spec
1093[info] + this can be done for the a AWS EBS source spec
1094[info] + this can be done for the a serialised RDB source spec
1095[info] + a RDB volume spec can be deserialised straight from a JSON string
1096[info] + an NFS volume spec can be written and read back in
1097[info] + a Glusterfs volume spec can be written and read back in
1098[info] + an ISCSI volume spec can be written and read back in
1099[info] + a persistent claim spec can be written and read back in
1100[info] Total for specification VolumeReadWriteSpec
1101[info] Finished in 232 ms
1102[info] 18 examples, 0 failure, 0 error
1103[info] EndpointsFormatSpec
1104[info] This is a unit specification for the skuber Endpoint related json formatter.
1105[info] An Endpoints can be symmetrically written to json and the same value read back in
1106[info] + this can be done for a Endpoints with just a single IP address/port
1107[info] + this can be done for an Endpoints with a single subset containing two addresses
1108[info] + this can be done for a more complex endppoints mapping
1109[info] + an endpoints can be read from Json
1110[info] Total for specification EndpointsFormatSpec
1111[info] Finished in 33 ms
1112[info] 4 examples, 0 failure, 0 error
1113....10Ei = 11529215046068469760
1114[info] ModelSpec
1115[info] This is a unit specification for the skuber data model. A Pods type can be constructed from lists of Pods
1116[info] + where an empty list of pods can be used
1117[info] + where a list with a single pod can be used
1118[info] A ReplicationControllers type can be constructed from a list of ReplicationController (a.k.a. RC)
1119[info] + where an empty list of RCs can be used
1120[info] + where a list with a single RC can be used
1121[info] Total for specification ModelSpec
1122[info] Finished in 58 ms
1123[info] 4 examples, 0 failure, 0 error
1124[info] FormatMaybeSpec
1125[info] + formatMaybeEmptyInt squashes zero but nothing else
1126[info] Total for specification FormatMaybeSpec
1127[info] Finished in 7 ms
1128[info] 1 example, 0 failure, 0 error
1129[info] HorizontalPodAutoscalerSpec
1130[info] A HorizontalPodAutoscaler can
1131[info] + decoded from json
1132[info] + encode to json
1133[info] Total for specification HorizontalPodAutoscalerSpec
1134[info] Finished in 26 ms
1135[info] 2 examples, 0 failure, 0 error
1136[info] ResourceSpec
1137[info] This is a unit specification for the skuber Resource model. A resource quantity can be constructed from decimal SI values
1138[info] + where a value of 100m equates to 0.1
1139[info] + where a value of 100k equates to 100000
1140[info] + where a value of 100M equates to 100000000
1141[info] + where a value of 100G equates to 100E+9
1142[info] + where a value of 100T equates to 100E+12
1143[info] + where a value of 100P equates to 100E+15
1144[info] + where a value of 100E equates to 100E+18
1145[info] A resource quantity can be constructed from values with scientific E notation
1146[info] + where a value of 0.01E+5 equates to 1000
1147[info] + where a value of 10010.56E-3 equates to 10.01056
1148[info] + where a value of 55.67e+6 equates to 55670000
1149[info] + where a value of 5e+3 equates to 5000
1150[info] + where a value of 67700e-33 equates to 67.700
1151[info] A resource quantity can be constructed from binary SI values
1152[info] + where a value of 100Ki equates to 102400
1153[info] + where a value of 10Mi equates to 10485760
1154[info] + where a value of 10Ti equates to 10 *(2 ^ 40)
1155[info] + where a value of 10Pi equates to 10 *(2 ^ 50)
1156[info] + where a value of 10Ei equates to 10 *(2 ^ 60)
1157[info] A resource quantity can be constructed for plain integer and decimal values with no suffixes
1158[info] + where a value of 10 is valid
1159[info] + where a value of -10 is valid
1160[info] + where a value of 10.55 is valid
1161[info] + where a value of -10.55 is valid
1162[info] A resource quantity will reject bad values
1163[info] + where constructing from a value of 10Zi results in an exception
1164[info] A resource quantity json formatter
1165[info] + where quantity json formatter should accpet different types
1166[info] Total for specification ResourceSpec
1167[info] Finished in 208 ms
1168[info] 23 examples, 0 failure, 0 error
1169[info] ServiceReadsWritesSpec
1170[info] This is a unit specification for the skuber Service related json formatter.
1171[info] A Service can be symmetrically written to json and the same value read back in
1172[info] + this can be done for a simple Service with just a name
1173[info] + this can be done for a simple Service with just a name and namespace set
1174[info] + this can be done for a Service with a simple, single port spec
1175[info] + this can be done for a Service with a more complex spec
1176[info] + a service can be read from Json
1177[info] Total for specification ServiceReadsWritesSpec
1178[info] Finished in 72 ms
1179[info] 5 examples, 0 failure, 0 error
1180[info] StatefulSetSpec
1181[info] This is a unit specification for the skuber apps/v1 StatefulSet class. + A StatefulSet object can be constructed from a name and pod template spec
1182[info] + A StatefulSet object can be written to Json and then read back again successfully
1183[info] + A StatefulSet object properly writes with zero replicas
1184[info] + A StatefulSet object can be read directly from a JSON string
1185[info] Total for specification StatefulSetSpec
1186[info] Finished in 24 ms
1187[info] 4 examples, 0 failure, 0 error
1188[info] FileTokenAuthRefreshableSpec
1189[info] This is a specification for the 'FileTokenAuthRefreshable' classFileTokenAuthRefreshable should
1190[info] + Retrieve the token if none provided
1191[info] + Don't Refresh the token before the refresh interval
1192[info] + Refresh the token after the refresh interval
1193[info] Total for specification FileTokenAuthRefreshableSpec
1194[info] Finished in 987 ms
1195[info] 3 examples, 0 failure, 0 error
1196Starting build for ProjectRef(file:/build/repo/,examples) (skuber-examples)... [1/2]
1197Compile scalacOptions: -Wconf:msg=can be rewritten automatically under:s, -source:3.8
1198[info] compiling 22 Scala sources to /build/repo/examples/target/scala-3.8.0-RC2/classes ...
1199[warn] there were 35 deprecation warnings; re-run with -deprecation for details
1200[warn] one warning found
1201[info] done compiling
1202
1203************************
1204Build summary:
1205[{
1206 "module": "skuber",
1207 "compile": {"status": "ok", "tookMs": 40310, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1208 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1209 "test-compile": {"status": "ok", "tookMs": 8550, "warnings": 35, "errors": 0, "sourceVersion": "3.8"},
1210 "test": {"status": "ok", "tookMs": 4244, "passed": 199, "failed": 0, "ignored": 0, "skipped": 0, "total": 199, "byFramework": [{"framework": "specs2", "stats": {"passed": 185, "failed": 0, "ignored": 0, "skipped": 0, "total": 185}},{"framework": "unknown", "stats": {"passed": 14, "failed": 0, "ignored": 0, "skipped": 0, "total": 14}}]},
1211 "publish": {"status": "skipped", "tookMs": 0},
1212 "metadata": {
1213 "crossScalaVersions": ["2.12.13", "2.13.12", "3.3.1"]
1214}
1215},{
1216 "module": "skuber-examples",
1217 "compile": {"status": "ok", "tookMs": 2727, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1218 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1219 "test-compile": {"status": "ok", "tookMs": 163, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1220 "test": {"status": "ok", "tookMs": 142, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
1221 "publish": {"status": "skipped", "tookMs": 0},
1222 "metadata": {
1223 "crossScalaVersions": ["2.12.13", "2.13.12", "3.3.1"]
1224}
1225}]
1226************************
1227[success] Total time: 70 s (0:01:10.0), completed Nov 28, 2025, 2:44:56 PM
1228[0JChecking patch project/plugins.sbt...
1229Checking patch project/build.properties...
1230Checking patch build.sbt...
1231Applied patch project/plugins.sbt cleanly.
1232Applied patch project/build.properties cleanly.
1233Applied patch build.sbt cleanly.