Build Logs
hagay3/skuber • 3.8.0-RC6:2026-01-08
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.914s.
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::Changing crossVersion 3.7.4 -> 3.7.4 in examples/crossScalaVersions
102OpenCB::Limitting incorrect crossVersions List() -> List(2.13.12) in skuber-project/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 Jan 8, 2026, 1:52:21 AM
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/json/TolerantListJsonFormatters.scala]
175[info] [patched file /build/repo/client/src/main/scala/skuber/autoscaling/v2beta1/HorizontalPodAutoscaler.scala]
176[info] [patched file /build/repo/client/src/main/scala/skuber/api/Configuration.scala]
177[info] [patched file /build/repo/client/src/main/scala/skuber/CustomResource.scala]
178[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/exec/PodExecImpl.scala]
179[info] [patched file /build/repo/client/src/main/scala/skuber/autoscaling/v2/HorizontalPodAutoscaler.scala]
180[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/package.scala]
181[info] [patched file /build/repo/client/src/main/scala/skuber/annotation/NodeAffinity.scala]
182[info] [patched file /build/repo/client/src/main/scala/skuber/ext/ReplicaSet.scala]
183[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/KubernetesClient.scala]
184[info] [patched file /build/repo/client/src/main/scala/skuber/api/watch/Watch.scala]
185[info] [patched file /build/repo/client/src/main/scala/skuber/json/package.scala]
186[info] [patched file /build/repo/client/src/main/scala/skuber/Resource.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/apps/v1/ReplicaSet.scala]
189[info] [patched file /build/repo/client/src/main/scala/skuber/Pod.scala]
190[info] [patched file /build/repo/client/src/main/scala/skuber/api/client/impl/KubernetesClientImpl.scala]
191[info] [patched file /build/repo/client/src/main/scala/skuber/json/PlayJsonSupportForPekkoHttp.scala]
192[info] [patched file /build/repo/client/src/main/scala/skuber/api/watch/BytesToWatchEventSource.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/autoscaling/v2/HorizontalPodAutoscalerSpec.scala]
382[info] [patched file /build/repo/client/src/test/scala/skuber/json/PodFormatSpec.scala]
383[info] [patched file /build/repo/client/src/test/scala/skuber/api/BytesToWatchEventSourceSpec.scala]
384[info] [patched file /build/repo/client/src/test/scala/skuber/policy/v1beta1/PodDisruptionBudgetSpec.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/api/ListQueryParamSpec.scala]
387[info] [patched file /build/repo/client/src/test/scala/skuber/model/LabelSelectorSpec.scala]
388[info] [patched file /build/repo/client/src/test/scala/skuber/json/NamespaceFormatSpec.scala]
389[info] [patched file /build/repo/client/src/test/scala/skuber/apps/v1/StatefulSetSpec.scala]
390[info] [patched file /build/repo/client/src/test/scala/skuber/apps/DeploymentSpec.scala]
391[info] [patched file /build/repo/client/src/test/scala/skuber/autoscaling/v2beta1/HorizontalPodAutoscalerSpec.scala]
392[info] [patched file /build/repo/client/src/test/scala/skuber/ext/DeploymentSpec.scala]
393[info] [patched file /build/repo/client/src/test/scala/skuber/apps/StatefulSetSpec.scala]
394[info] [patched file /build/repo/client/src/test/scala/skuber/json/EnumTest.scala]
395[info] [patched file /build/repo/client/src/test/scala/skuber/apps/v1/DeploymentSpec.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/patch/PatchExamples.scala]
429[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/deployment/DeploymentExamples.scala]
430[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/scale/ScaleExamples.scala]
431[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/customresources/v1beta1/CreateCRD.scala]
432[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/argo/EventBusExample.scala]
433[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/ingress/NginxIngress.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/auth/AwsAuthExample.scala]
437[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/auth/InClusterConfigurationExample.scala]
438[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/job/PrintPiJob.scala]
439[info] [patched file /build/repo/examples/src/main/scala/skuber/examples/guestbook/GuestbookActor.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": 39478, "warnings": 4, "errors": 0, "sourceVersion": "3.7-migration"},
453 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
454 "test-compile": {"status": "ok", "tookMs": 19448, "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": 2404, "warnings": 0, "errors": 0, "sourceVersion": "3.7-migration"},
463 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
464 "test-compile": {"status": "ok", "tookMs": 2336, "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: 72 s (0:01:12.0), completed Jan 8, 2026, 1:53:33 AM
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 50c85f4] 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-RC6
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-RC6"
497Successfully applied pattern 'val scala3Version = "3.3.1"' in build.sbt
498----
499Starting build for 3.8.0-RC6
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-RC6
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-RC6
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-RC6"
528"++3.8.0-RC6 -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-RC6 """{"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-RC6
556OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in skuber/crossScalaVersions
557OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 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-RC6 on 2 projects.
561[info] Switching Scala version on:
562[info] skuber (2.12.13, 2.13.12, 3.8.0-RC6)
563[info] examples (2.12.13, 2.13.12, 3.8.0-RC6)
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 Jan 8, 2026, 1:53:48 AM
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-RC6/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-RC6/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] LabelSelectorSpec:
788[info] label selector tests
789[info] - A label selector can be constructed1
790[info] - A label selector can be constructed2
791[info] - A label selector can be constructed3
792[info] - A label selector can be constructed4
793[info] - A label selector can be constructed5
794[info] - A label selector can be constructed6
795[info] - A label selector can be constructed7
796[info] ReplicaSetSpec
797[info] This is a unit specification for the skuber ReplicaSet class. + A ReplicaSet object properly writes with zero replicas
798[info] Total for specification ReplicaSetSpec
799[info] Finished in 174 ms
800[info] 1 example, 0 failure, 0 error
801[info] IngressSpec
802[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
803[info] + An Ingress object with empty Path can be read directly from a JSON string
804[info] Total for specification IngressSpec
805[info] Finished in 193 ms
806[info] 2 examples, 0 failure, 0 error
807[info] HorizontalPodAutoscalerSpec
808[info] A HorizontalPodAutoscaler can
809[info] + decoded from json
810[info] + encode to json
811[info] Total for specification HorizontalPodAutoscalerSpec
812[info] Finished in 168 ms
813[info] 2 examples, 0 failure, 0 error
814[info] EndpointsFormatSpec
815[info] This is a unit specification for the skuber Endpoint related json formatter.
816[info] An Endpoints can be symmetrically written to json and the same value read back in
817[info] + this can be done for a Endpoints with just a single IP address/port
818[info] + this can be done for an Endpoints with a single subset containing two addresses
819[info] + this can be done for a more complex endppoints mapping
820[info] + an endpoints can be read from Json
821[info] Total for specification EndpointsFormatSpec
822[info] Finished in 254 ms
823[info] 4 examples, 0 failure, 0 error
824[info] PodDisruptionBudgetSpec
825[info] A PodDisruptionBudget can
826[info] + decoded from json
827[info] + encode to json
828[info] Total for specification PodDisruptionBudgetSpec
829[info] Finished in 57 ms
830[info] 2 examples, 0 failure, 0 error
831[info] ServiceReadsWritesSpec
832[info] This is a unit specification for the skuber Service related json formatter.
833[info] A Service can be symmetrically written to json and the same value read back in
834[info] + this can be done for a simple Service with just a name
835[info] + this can be done for a simple Service with just a name and namespace set
836[info] + this can be done for a Service with a simple, single port spec
837[info] + this can be done for a Service with a more complex spec
838[info] + a service can be read from Json
839[info] Total for specification ServiceReadsWritesSpec
840[info] Finished in 126 ms
841[info] 5 examples, 0 failure, 0 error
842{"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"}}}}
843[info] NodeAffinitySpec
844[info] This is a unit specification for the skuber formatter for k8s NodeAffinity.
845[info] + An Operator can be written to json and back in
846[info]
847[info] + A MatchExpression can be written to json and back in
848[info]
849[info] + A MatchExpressions can be written to json and back in
850[info]
851[info] + A NodeSelectorTerm can be written to json and back in
852[info]
853[info] + A NodeSelectorTerms can be written to json and back in
854[info]
855[info] + A RequiredDuringSchedulingIgnoredDuringExecution can be written to json and back in
856[info]
857[info] + A PreferredDuringSchedulingIgnoredDuringExecution can be written to json and back in
858[info]
859[info] Total for specification NodeAffinitySpec
860[info] Finished in 180 ms
861[info] 7 examples, 0 failure, 0 error
862[info] DaemonSetSpec
863[info] + A DaemonSet Object can be written to Json and then read back again successfully
864[info] Total for specification DaemonSetSpec
865[info] Finished in 37 ms
866[info] 1 example, 0 failure, 0 error
867[info] DeploymentSpec
868[info] This is a unit specification for the skuber Deployment class. + A Deployment object can be constructed from a name and pod template spec
869[info] + A Deployment object can be written to Json and then read back again successfully
870[info] + A Deployment object properly writes with zero replicas
871[info] + A Deployment object can be read directly from a JSON string
872[info] Total for specification DeploymentSpec
873[info] Finished in 94 ms
874[info] 4 examples, 0 failure, 0 error
875[info] ListQueryParamSpec
876[info] + LabelSelector string representations equate to the associated labelSelector query param values
877[info] Total for specification ListQueryParamSpec
878[info] Finished in 31 ms
879[info] 1 example, 0 failure, 0 error
880[info] StatefulSetSpec
881[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
882[info] + A StatefulSet object can be written to Json and then read back again successfully
883[info] + A StatefulSet object properly writes with zero replicas
884[info] + A StatefulSet object can be read directly from a JSON string
885[info] Total for specification StatefulSetSpec
886[info] Finished in 85 ms
887[info] 4 examples, 0 failure, 0 error
888[info] ScaleSpec
889[info] This is a unit specification for the skuber Scale class. + A Scale object can be constructed from a name and replica count
890[info] + A scale object can be written to Json and then read back again successfully
891[info] + A scale object can be read directly from a JSON string
892[info] + A scale object can contain NO replicas
893[info] + A scale json with single key->value in status selector
894[info] + A scale json with wrong spec status string should not produce errors
895[info] Total for specification ScaleSpec
896[info] Finished in 128 ms
897[info] 6 examples, 0 failure, 0 error
898[info] StatefulSetSpec
899[info] This is a unit specification for the skuber StatefulSet class. + A StatefulSet object can be constructed from a name and pod template spec
900[info] + A StatefulSet object can be written to Json and then read back again successfully
901[info] + A StatefulSet object properly writes with zero replicas
902[info] + A StatefulSet object can be read directly from a JSON string
903[info] Total for specification StatefulSetSpec
904[info] Finished in 77 ms
905[info] 4 examples, 0 failure, 0 error
906[info] EnumTest
907[info] Test enum formatters
908[info] Test enum formatters suite
909[info] + Convert json to enum object
910[info] + Test default enum formatter
911[info] + Test enum formatter with json path
912[info] + Test enum formatter with none value and also default value
913[info] + Test enum formatter with wrong enum value -> fallback to None
914[info] Total for specification EnumTest
915[info] Finished in 118 ms
916[info] 5 examples, 0 failure, 0 error
917[info] PodPresetFormatSpec
918[info] This is a unit specification for the skuber PodPreset related json formatter.
919[info] + a podpreset can be read and written as json successfully
920[info] Total for specification PodPresetFormatSpec
921[info] Finished in 46 ms
922[info] 1 example, 0 failure, 0 error
923[info] VolumeReadWriteSpec
924[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.
925[info] A PersistentVolumeClaim spec can be symmetrically written to json and the same value read back in
926[info] + this can be done for the emptydir type source spec
927[info] + A PersistentVolume spec can be symmetrically written to json and the same value read back in
928[info]
929[info] + A PersistentVolume with unsupported volume type can be read as json using GenericVolumeSource
930[info] A Volume spec can be symmetrically written to json and the same value read back in
931[info] + this can be done for the emptydir type source spec
932[info] + this can be done for the a hostpath type source
933[info] + this can be done for the a secret type source spec
934[info] + this can be done in a generic way for unsupported source specs
935[info] + this can be done for the a git repo source spec
936[info] + this can be done for the DownwardAPIVolumeSource spec
937[info] + this can be done for the DownwardAPIVolumeSource spec with field selector apiVersion left at default
938[info] + this can be done for the a GCE Persistent Disk source spec
939[info] + this can be done for the a AWS EBS source spec
940[info] + this can be done for the a serialised RDB source spec
941[info] + a RDB volume spec can be deserialised straight from a JSON string
942[info] + an NFS volume spec can be written and read back in
943[info] + a Glusterfs volume spec can be written and read back in
944[info] + an ISCSI volume spec can be written and read back in
945[info] + a persistent claim spec can be written and read back in
946[info] Total for specification VolumeReadWriteSpec
947[info] Finished in 288 ms
948[info] 18 examples, 0 failure, 0 error
949[info] HPASSpec
950[info] This is a unit specification for the skuber HorizontalPodAutoscaler class. A HPAS object can be constructed from the object it scales
951[info] + A HPAS can be constructed from a replication controller
952[info] + A HPAS object properly writes with zero minReplicas
953[info] Total for specification HPASSpec
954[info] Finished in 24 ms
955[info] 2 examples, 0 failure, 0 error
956[info] AuthSpec
957[info] This is a unit specification for the auth data model. + Auth toString works when empty
958[info] + CertAuth toString masks cert, key but not user
959[info] + CertAuth toString doesn't mask username, certPath, keyPath
960[info] + TokenAuth toString masks token
961[info] + GcpAuth toString masks accessToken
962[info] + OidcAuth toString masks idToken
963[info] Total for specification AuthSpec
964[info] Finished in 147 ms
965[info] 6 examples, 0 failure, 0 error
966None[INFO] [01/08/2026 01:54:41.275] [pool-19-thread-1-ScalaTest-running-ConfigurationSpec] [skuber.api] Using following context for connecting to Kubernetes cluster: Context(Cluster(v1,https://horse.org:4443,false,Some(Right([B@1c8473fb)),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))
967[info] IngressSpec
968[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
969[info] + An Ingress object with empty Path can be read directly from a JSON string
970[info] Total for specification IngressSpec
971[info] Finished in 34 ms
972[info] 2 examples, 0 failure, 0 error
973[info] EnvVarSpec
974[info] This is a unit specification for the skuber formatter for env vars.
975[ERROR] [01/08/2026 01:54:41.393] [specs2-1] [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"}]}}
976[ERROR] [01/08/2026 01:54:41.395] [specs2-1] [skuber.api] Details: /metadata: error.path.missing
977[info] An EnvVar can be read from json
978[info] + this can be done for an env var with a field ref with a field path
979[info] Total for specification EnvVarSpec
980[info] Finished in 37 ms
981[info] 1 example, 0 failure, 0 error
982[info] PodFormatSpec
983[info] This is a unit specification for the skuber Pod related json formatter.
984[info] A Pod can be symmetrically written to json and the same value read back in
985[info] + this can be done for a simple Pod with just a name
986[info] + this can be done for a simple Pod with just a name and namespace set
987[info] + this can be done for a Pod with a simple, single container spec
988[info] + this can be done for a Pod with a more complex spec
989[info] + a quite complex pod can be read from json
990[info] + a pod with nodeAffinity can be read and written as json
991[info] + a pod with unsupported volume type can be read as json using GenericVolumeSource
992[info] + NodeSelectorTerm be properly read and written as json
993[info] + NodeSelectorTerm with no matchExpressions be properly read and written as json
994[info] + NodeSelectorTerm with no matchFields be properly read and written as json
995[info] + NodeSelectorTerm with empty be properly read and written as json
996[info] + NodeAffinity be properly read and written as json
997[info] + NodeAffinity without preferences be properly read and written as json
998[info] + NodeAffinity without requirements be properly read and written as json
999[info] + PodAffinity can be properly read and written as json
1000[info] + a complex podlist can be read and written as json
1001[info] + Pod SecurityContext with RuntimeDefault seccomp profile can be properly read and written as json
1002[info] + Pod SecurityContext with Localhost seccomp profile can be properly read and written as json
1003[info] + Pod SecurityContext with Unknown seccomp profile can be properly read and written as json
1004[info] + a statefulset with pod affinity/anti-affinity can be read and written as json successfully
1005[info] + a pod with a spec that sets many optional fields can be read and written as json successfully
1006[info] + read probe json - GRPC
1007[info] + a complex podlist can be read in case single element in the pod list is failed to parse
1008[info] Total for specification PodFormatSpec
1009[info] Finished in 739 ms
1010[info] 23 examples, 0 failure, 0 error
1011[info] ProbeFormatSpec
1012[info] This is a unit specification for the skuber Prob related json formatter.
1013[info] + read probe json - GRPC
1014[info] + read probe json - ExecCommand
1015[info] + read probe json - ExecCommand
1016[info] + read probe json - HTTPGetAction with integer port
1017[info] + read probe json - TCPSocketAction
1018[info] + read probe json - UnknownHandler fallback
1019[info] Total for specification ProbeFormatSpec
1020[info] Finished in 76 ms
1021[info] 6 examples, 0 failure, 0 error
1022[info] NodeFormatSpec
1023[info] This is a unit specification for the skuber Node related json formatter.
1024[info] A Node can be symmetrically written to json and the same value read back in
1025[info] + this can be done for a simple Service with just a name
1026[info] + this can be done for a simple Node with just a name and namespace set
1027[info] + this can be done for a Node with a simple Spec
1028[info] + this can be done for a Node with a more complex spec
1029[info] + an example json formatted node can be read
1030[info] + an example json formatted nodelist can be read
1031[info] + a Kubernetes v1.8 minikube node can be read and written as json
1032[info] Total for specification NodeFormatSpec
1033[info] Finished in 90 ms
1034[info] 7 examples, 0 failure, 0 error
1035[info] SecretSpec
1036[info] + A Secret containing a byte array can symmetrically be written to json and the same value read back in
1037[info] + this can be done with an empty data map
1038[info] + this can be done with immutable defined
1039[info] + this can be done without immutable defined
1040[info] + this can be done with the type member defined
1041[info] Total for specification SecretSpec
1042[info] Finished in 93 ms
1043[info] 5 examples, 0 failure, 0 error
1044[info] JobSpec
1045[info] This is a unit specification for the skuber Job class. + A Job object can be constructed from a name and a pod template
1046[info] + A Job object can be constructed with fluent API
1047[info] + A Job object can be written to Json and then read back again successfully
1048[info] + A Job object can be read directly from a JSON string
1049[info] Total for specification JobSpec
1050[info] Finished in 49 ms
1051[info] 4 examples, 0 failure, 0 error
1052[info] FileTokenAuthRefreshableSpec
1053[info] This is a specification for the 'FileTokenAuthRefreshable' classFileTokenAuthRefreshable should
1054[info] + Retrieve the token if none provided
1055[info] + Don't Refresh the token before the refresh interval
1056[info] + Refresh the token after the refresh interval
1057[info] Total for specification FileTokenAuthRefreshableSpec
1058[info] Finished in 1 second, 28 ms
1059[info] 3 examples, 0 failure, 0 error
1060[info] DeploymentSpec
1061[info] This is a unit specification for the skuber Deployment class. + A Deployment object can be constructed from a name and pod template spec
1062[info] + A Deployment object can be written to Json and then read back again successfully
1063[info] + A Deployment object properly writes with zero replicas
1064[info] + A Deployment object can be read directly from a JSON string
1065[info] Total for specification DeploymentSpec
1066[info] Finished in 53 ms
1067[info] 4 examples, 0 failure, 0 error
1068[info] FormatMaybeSpec
1069[info] + formatMaybeEmptyInt squashes zero but nothing else
1070[info] Total for specification FormatMaybeSpec
1071[info] Finished in 24 ms
1072[info] 1 example, 0 failure, 0 error
1073[info] NamespaceFormatSpec
1074[info] This is a unit specification for the skuber formatter for k8s namespaces.
1075[info] A Namespace can be symmetrically written to json and the same value read back in
1076[info] + this can be done for the default namespace
1077[info] + this can be done for a simple non-default namespace
1078[info] + this can be done for a more complex non-default namespace with a Spec and Status
1079[info] + namespace spec allows finalizers to be optional
1080[info] + we can read a namespace from a direct JSON string
1081[info] Total for specification NamespaceFormatSpec
1082[info] Finished in 77 ms
1083[info] 5 examples, 0 failure, 0 error
1084[info] SkuberConfigSpec
1085[info] This is a specification for the 'SkuberConfigSpec' classSkuberConfig should
1086[info] in-cluster should
1087[info] + refresh token interval defaults to 5 min if no configuration provided
1088[info] + refresh token interval value provided by the configuration
1089[info] watch-continuously should
1090[info] + defaults are provided
1091[info] Total for specification SkuberConfigSpec
1092[info] Finished in 53 ms
1093[info] 3 examples, 0 failure, 0 error
1094[info] BytesToWatchEventSourceSpec
1095[info] + A single chunk containing a single Watch event can be read correctly
1096[info] + A single chunk containing two Watch events can be enumerated correctly
1097[info] + Two chunks containing two Watch events with one split across the chunks can be enumerated correctly
1098[info] + Two chunks containing four Watch events, with a middle event split across the chunks, can be enumerated correctly
1099[info] + Four chunks, each containing a Watch event terminated by a line feed, can be enumerated
1100[info] Total for specification BytesToWatchEventSourceSpec
1101[info] Finished in 87 ms
1102[info] 5 examples, 0 failure, 0 error
1103[info] ModelSpec
1104[info] This is a unit specification for the skuber data model. A Pods type can be constructed from lists of Pods
1105[info] + where an empty list of pods can be used
1106[info] + where a list with a single pod can be used
1107[info] A ReplicationControllers type can be constructed from a list of ReplicationController (a.k.a. RC)
1108[info] + where an empty list of RCs can be used
1109[info] + where a list with a single RC can be used
1110[info] Total for specification ModelSpec
1111[info] Finished in 108 ms
1112[info] 4 examples, 0 failure, 0 error
1113[INFO] [01/08/2026 01:54:42.150] [pool-19-thread-1-ScalaTest-running-ConfigurationSpec] [skuber.api] Using following context for connecting to Kubernetes cluster: Context(Cluster(v1,https://horse.org:4443,false,Some(Right([B@2e71707f)),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))
1114[INFO] [01/08/2026 01:54:42.183] [pool-19-thread-1-ScalaTest-running-ConfigurationSpec] [skuber.api] Using following context for connecting to Kubernetes cluster: Context(Cluster(v1,https://horse.org:4443,false,Some(Right([B@6243b104)),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))
1115[info] ReplicationControllerFormatSpec
1116[info] This is a unit specification for the skuber Service related json formatter.
1117[info] A Replication Controller can be symmetrically written to json and the same value read back in
1118[info] + this can be done for a simple controller with just a name
1119[info] + this can be done for a simple controller with just a name and namespace set
1120[info] + this can be done for a controller with a spec for replicating a pod with a single container
1121[info] + a replication controller can be read from Json
1122[info] Total for specification ReplicationControllerFormatSpec
1123[info] Finished in 76 ms
1124[info] 4 examples, 0 failure, 0 error
1125[info] NetworkPolicySpec
1126[info] This is a unit specification for the skuber NetworkPolicy class. + A NetworkPolicy object can be written to Json and read back again
1127[info] Total for specification NetworkPolicySpec
1128[info] Finished in 14 ms
1129[info] 1 example, 0 failure, 0 error
1130[info] DeploymentSpec
1131[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
1132[info] + A Deployment object can be written to Json and then read back again successfully
1133[info] + A Deployment object properly writes with zero replicas
1134[info] + A Deployment object can be read directly from a JSON string
1135[info] Total for specification DeploymentSpec
1136[info] Finished in 27 ms
1137[info] 4 examples, 0 failure, 0 error
1138....10Ei = 11529215046068469760
1139[info] ResourceSpec
1140[info] This is a unit specification for the skuber Resource model. A resource quantity can be constructed from decimal SI values
1141[info] + where a value of 100m equates to 0.1
1142[info] + where a value of 100k equates to 100000
1143[info] + where a value of 100M equates to 100000000
1144[info] + where a value of 100G equates to 100E+9
1145[info] + where a value of 100T equates to 100E+12
1146[info] + where a value of 100P equates to 100E+15
1147[info] + where a value of 100E equates to 100E+18
1148[info] A resource quantity can be constructed from values with scientific E notation
1149[info] + where a value of 0.01E+5 equates to 1000
1150[info] + where a value of 10010.56E-3 equates to 10.01056
1151[info] + where a value of 55.67e+6 equates to 55670000
1152[info] + where a value of 5e+3 equates to 5000
1153[info] + where a value of 67700e-33 equates to 67.700
1154[info] A resource quantity can be constructed from binary SI values
1155[info] + where a value of 100Ki equates to 102400
1156[info] + where a value of 10Mi equates to 10485760
1157[info] + where a value of 10Ti equates to 10 *(2 ^ 40)
1158[info] + where a value of 10Pi equates to 10 *(2 ^ 50)
1159[info] + where a value of 10Ei equates to 10 *(2 ^ 60)
1160[info] A resource quantity can be constructed for plain integer and decimal values with no suffixes
1161[info] + where a value of 10 is valid
1162[info] + where a value of -10 is valid
1163[info] + where a value of 10.55 is valid
1164[info] + where a value of -10.55 is valid
1165[info] A resource quantity will reject bad values
1166[info] + where constructing from a value of 10Zi results in an exception
1167[info] A resource quantity json formatter
1168[info] + where quantity json formatter should accpet different types
1169[info] Total for specification ResourceSpec
1170[info] Finished in 247 ms
1171[info] 23 examples, 0 failure, 0 error
1172[info] ConfigurationSpec:
1173[info] Test kube config
1174[info] - An example kubeconfig file can be parsed correctly
1175[info] - Parse EC private keys from kubeconfig file
1176[info] - Parse RSA private keys from kubeconfig file
1177[info] - Parse PKCS#8 private keys from kubeconfig file
1178[info] - If kubeconfig is not found at expected path then a Failure is returned
1179[info] - if a relative path and directory are specified, then the parsed config must contain the fully expanded paths
1180[info] - Parse exec kubeconfig file
1181[info] HorizontalPodAutoscalerSpec
1182[info] A HorizontalPodAutoscaler can
1183[info] + decoded from json
1184[info] + encode to json
1185[info] Total for specification HorizontalPodAutoscalerSpec
1186[info] Finished in 19 ms
1187[info] 2 examples, 0 failure, 0 error
1188[info] LongPollingPoolSpec
1189[info] LongPollingPool should
1190[info] + create a http pool
1191[info] + create a https pool
1192[info] + handle unsupported scheme
1193[info] Total for specification LongPollingPoolSpec
1194[info] Finished in 774 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-RC6/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": 38415, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1208 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1209 "test-compile": {"status": "ok", "tookMs": 8339, "warnings": 35, "errors": 0, "sourceVersion": "3.8"},
1210 "test": {"status": "ok", "tookMs": 4224, "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": 3029, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1218 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1219 "test-compile": {"status": "ok", "tookMs": 192, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1220 "test": {"status": "ok", "tookMs": 171, "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: 59 s, completed Jan 8, 2026, 1:54:47 AM
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.