Build Logs
tegonal/scala-commons • 3.8.0-RC4:2025-12-22
Errors
104
Warnings
8
Total Lines
317
1##################################
2Clonning https://github.com/tegonal/scala-commons.git into /build/repo using revision v0.2.0
3##################################
4Note: switching to 'd35aee7d54e2cf6b11be16bb03e15cb17c5d732d'.
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
21----
22Preparing build for 3.8.0-RC4
23Scala binary version found: 3.8
24Implicitly using source version 3.8
25Scala binary version found: 3.8
26Implicitly using source version 3.8
27Would try to apply common scalacOption (best-effort, sbt/mill only):
28Append: ,REQUIRE:-source:3.8
29Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
30----
31Starting build for 3.8.0-RC4
32Execute tests: true
33sbt project found:
34Sbt version 1.9.9 is not supported, minimal supported version is 1.11.5
35Enforcing usage of sbt in version 1.11.5
36No prepare script found for project tegonal/scala-commons
37##################################
38Scala version: 3.8.0-RC4
39Targets: com.tegonal%scala-commons
40Project projectConfig: {"tests":null}
41##################################
42Using extra scalacOptions: ,REQUIRE:-source:3.8
43Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
44[sbt_options] declare -a sbt_options=()
45[process_args] java_version = '17'
46[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
47# Executing command line:
48java
49-Dfile.encoding=UTF-8
50-Dcommunitybuild.scala=3.8.0-RC4
51-Dcommunitybuild.project.dependencies.add=
52-Xmx7G
53-Xms4G
54-Xss8M
55-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
56-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
57-jar
58/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
59"setCrossScalaVersions 3.8.0-RC4"
60"++3.8.0-RC4 -v"
61"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
62"set every credentials := Nil"
63"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
64"removeScalacOptionsStartingWith -P:wartremover"
65
66moduleMappings
67"runBuild 3.8.0-RC4 """{"tests":null}""" com.tegonal%scala-commons"
68
69[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 17.0.8)
70[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
71[info] loading project definition from /build/repo/project
72[info] compiling 2 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
73[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
74[info] Compilation completed in 8.185s.
75[info] done compiling
76[info] loading settings for project root from build.sbt...
77[info] set current project to scala-commons (in build file:/build/repo/)
78Execute setCrossScalaVersions: 3.8.0-RC4
79OpenCB::Changing crossVersion 3.4.1 -> 3.8.0-RC4 in root/crossScalaVersions
80[info] set current project to scala-commons (in build file:/build/repo/)
81[info] Setting Scala version to 3.8.0-RC4 on 1 projects.
82[info] Switching Scala version on:
83[info] * root (3.8.0-RC4)
84[info] Excluding projects:
85[info] Reapplying settings...
86[info] set current project to scala-commons (in build file:/build/repo/)
87Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
88[info] Reapplying settings...
89[info] set current project to scala-commons (in build file:/build/repo/)
90[info] Defining Global / credentials, credentials
91[info] The new values will be used by Compile / scalafmtOnly, Global / pgpSelectPassphrase and 6 others.
92[info] Run `last` for details.
93[info] Reapplying settings...
94[info] set current project to scala-commons (in build file:/build/repo/)
95Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
96[info] Reapplying settings...
97OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
98
99 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
100 Did you mean allExcludeDependencies ?
101 , retry without global scopes
102[info] Reapplying settings...
103[info] set current project to scala-commons (in build file:/build/repo/)
104Execute removeScalacOptionsStartingWith: -P:wartremover
105[info] Reapplying settings...
106[info] set current project to scala-commons (in build file:/build/repo/)
107[success] Total time: 0 s, completed Dec 22, 2025, 6:49:32 PM
108Build config: {"tests":null}
109Parsed config: Failure(sjsonnew.DeserializationException: Expected String as JString, but got JNull)
110Starting build...
111Projects: Set(root)
112Starting build for ProjectRef(file:/build/repo/,root) (scala-commons)... [0/1]
113OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
114[error] lmcoursier.internal.shaded.coursier.error.FetchError$DownloadingArtifacts: Error fetching artifacts:
115[error] https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar: download error: Caught java.io.IOException (Server returned HTTP response code: 502 for URL: https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar) while downloading https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar
116[error]
117[error] at lmcoursier.internal.shaded.coursier.Artifacts$.$anonfun$fetchArtifacts$9(Artifacts.scala:365)
118[error] at lmcoursier.internal.shaded.coursier.util.Task$.$anonfun$flatMap$extension$1(Task.scala:14)
119[error] at lmcoursier.internal.shaded.coursier.util.Task$.$anonfun$flatMap$extension$1$adapted(Task.scala:14)
120[error] at lmcoursier.internal.shaded.coursier.util.Task$.wrap(Task.scala:82)
121[error] at lmcoursier.internal.shaded.coursier.util.Task$.$anonfun$flatMap$2(Task.scala:14)
122[error] at scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:307)
123[error] at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:51)
124[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:74)
125[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
126[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
127[error] at java.base/java.lang.Thread.run(Thread.java:833)
128[error] Caused by: lmcoursier.internal.shaded.coursier.cache.ArtifactError$DownloadError: download error: Caught java.io.IOException (Server returned HTTP response code: 502 for URL: https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar) while downloading https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar
129[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.$anonfun$downloading$1(Downloader.scala:808)
130[error] at lmcoursier.internal.shaded.coursier.cache.internal.Retry.loop$1(Retry.scala:23)
131[error] at lmcoursier.internal.shaded.coursier.cache.internal.Retry.retryOpt(Retry.scala:39)
132[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.coursier$cache$internal$Downloader$$downloading(Downloader.scala:812)
133[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.remote(Downloader.scala:428)
134[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader.$anonfun$remote$6(Downloader.scala:546)
135[error] at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
136[error] at scala.util.Success.$anonfun$map$1(Try.scala:255)
137[error] at scala.util.Success.map(Try.scala:213)
138[error] at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
139[error] at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:42)
140[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:74)
141[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
142[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
143[error] at java.base/java.lang.Thread.run(Thread.java:833)
144[error] Caused by: java.io.IOException: Server returned HTTP response code: 502 for URL: https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar
145[error] at java.base/jdk.internal.reflect.GeneratedConstructorAccessor16.newInstance(Unknown Source)
146[error] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
147[error] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
148[error] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
149[error] at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2057)
150[error] at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2052)
151[error] at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
152[error] at java.base/sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:2051)
153[error] at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1609)
154[error] at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
155[error] at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224)
156[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.doDownload(Downloader.scala:266)
157[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.$anonfun$remote$2(Downloader.scala:423)
158[error] at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.loop$1(CacheLocks.scala:94)
159[error] at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.withLockOr(CacheLocks.scala:117)
160[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.$anonfun$remote$1(Downloader.scala:426)
161[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.$anonfun$downloading$2(Downloader.scala:776)
162[error] at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.withUrlLock(CacheLocks.scala:136)
163[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.$anonfun$downloading$1(Downloader.scala:776)
164[error] at lmcoursier.internal.shaded.coursier.cache.internal.Retry.loop$1(Retry.scala:23)
165[error] at lmcoursier.internal.shaded.coursier.cache.internal.Retry.retryOpt(Retry.scala:39)
166[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.coursier$cache$internal$Downloader$$downloading(Downloader.scala:812)
167[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.remote(Downloader.scala:428)
168[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader.$anonfun$remote$6(Downloader.scala:546)
169[error] at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
170[error] at scala.util.Success.$anonfun$map$1(Try.scala:255)
171[error] at scala.util.Success.map(Try.scala:213)
172[error] at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
173[error] at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:42)
174[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:74)
175[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
176[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
177[error] at java.base/java.lang.Thread.run(Thread.java:833)
178[error] Caused by: java.io.IOException: Server returned HTTP response code: 502 for URL: https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar
179[error] at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2000)
180[error] at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
181[error] at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:529)
182[error] at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
183[error] at lmcoursier.internal.shaded.coursier.cache.CacheUrl$.redirectTo(CacheUrl.scala:178)
184[error] at lmcoursier.internal.shaded.coursier.cache.CacheUrl$.redirect(CacheUrl.scala:193)
185[error] at lmcoursier.internal.shaded.coursier.cache.CacheUrl$.urlConnectionMaybePartial(CacheUrl.scala:349)
186[error] at lmcoursier.internal.shaded.coursier.cache.ConnectionBuilder.connectionMaybePartial(ConnectionBuilder.scala:50)
187[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.doDownload(Downloader.scala:232)
188[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.$anonfun$remote$2(Downloader.scala:423)
189[error] at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.loop$1(CacheLocks.scala:94)
190[error] at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.withLockOr(CacheLocks.scala:117)
191[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.$anonfun$remote$1(Downloader.scala:426)
192[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.$anonfun$downloading$2(Downloader.scala:776)
193[error] at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.withUrlLock(CacheLocks.scala:136)
194[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.$anonfun$downloading$1(Downloader.scala:776)
195[error] at lmcoursier.internal.shaded.coursier.cache.internal.Retry.loop$1(Retry.scala:23)
196[error] at lmcoursier.internal.shaded.coursier.cache.internal.Retry.retryOpt(Retry.scala:39)
197[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$.coursier$cache$internal$Downloader$$downloading(Downloader.scala:812)
198[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader$Blocking$.remote(Downloader.scala:428)
199[error] at lmcoursier.internal.shaded.coursier.cache.internal.Downloader.$anonfun$remote$6(Downloader.scala:546)
200[error] at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
201[error] at scala.util.Success.$anonfun$map$1(Try.scala:255)
202[error] at scala.util.Success.map(Try.scala:213)
203[error] at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
204[error] at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:42)
205[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:74)
206[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
207[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
208[error] at java.base/java.lang.Thread.run(Thread.java:833)
209[error] (update) lmcoursier.internal.shaded.coursier.error.FetchError$DownloadingArtifacts: Error fetching artifacts:
210[error] https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar: download error: Caught java.io.IOException (Server returned HTTP response code: 502 for URL: https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar) while downloading https://repo.scala-lang.org/artifactory/maven-nightlies/org/scala-lang/scala-library/3.8.0-RC4/scala-library-3.8.0-RC4.jar
211Compile scalacOptions:
212[info] compiling 7 Scala sources to /build/repo/target/scala-3.8.0-RC4/classes ...
213[warn] -- [E194] Potential Issue Warning: /build/repo/src/main/scala/com/tegonal/scala/commons/charSequenceExtensions.scala:19:6
214[warn] 19 | def isEmpty: Boolean = self.length() == 0
215[warn] | ^
216[warn] |Extension method isEmpty will never be selected from type CharSequence
217[warn] |because CharSequence already has a member with the same name and compatible parameter types.
218[warn] |
219[warn] | longer explanation available when compiling with `-explain`
220[warn] one warning found
221[info] done compiling
222[info] compiling 8 Scala sources to /build/repo/target/scala-3.8.0-RC4/test-classes ...
223[info] done compiling
224com.tegonal.scala.commons.BooleanExtensionsTest:
225 + false not is true 0.009s
226 + true not is false 0.001s
227com.tegonal.scala.commons.AsTest:
228 + shows receiver object in error message 0.008s
229 + cast null to reference type doesn't throw 0.0s
230 + no conversion from Integer to Double, fails with ClassCastException 0.001s
231 + no conversion from Byte to Double, fails with ClassCastException 0.0s
232 + no conversion from Short to Double, fails with ClassCastException 0.001s
233 + no conversion from Long to Double, fails with ClassCastException 0.0s
234 + no conversion from Float to Double, fails with ClassCastException 0.0s
235 + doesn't throw from Double to Double 0.001s
236 + no unboxing from null to primitive type, fails with ClassCastException 0.001s
237com.tegonal.scala.commons.AnyOperationsTest:
238 + pipe 0.009s
239 + tap 0.006s
240com.tegonal.scala.commons.CharSequenceExtensionsTest:
241 + isEmpty on empty returns true 0.009s
242 + isEmpty on space returns false 0.001s
243 + isEmpty on tab returns false 0.002s
244 + isEmpty on newline returns false 0.0s
245 + isEmpty on not only spaces returns false 0.0s
246 + isEmpty on not only whitespaces returns false 0.002s
247 + isEmpty on text returns false 0.001s
248 + nonEmpty on empty returns false 0.001s
249 + nonEmpty on space returns true 0.001s
250 + nonEmpty on tab returns true 0.0s
251 + nonEmpty on newline returns true 0.001s
252 + nonEmpty on not only spaces returns true 0.0s
253 + nonEmpty on not only whitespaces returns true 0.0s
254 + nonEmpty on text returns true 0.0s
255 + isBlank on empty returns true 0.0s
256 + isBlank on space returns true 0.004s
257 + isBlank on tab returns true 0.0s
258 + isBlank on newline returns true 0.0s
259 + isBlank on not only spaces returns false 0.001s
260 + isBlank on not only whitespaces returns false 0.0s
261 + isBlank on text returns false 0.0s
262 + nonBlank on empty returns false 0.001s
263 + nonBlank on space returns false 0.0s
264 + nonBlank on tab returns false 0.001s
265 + nonBlank on newline returns false 0.0s
266 + nonBlank on not only spaces returns true 0.0s
267 + nonBlank on not only whitespaces returns true 0.0s
268 + nonBlank on text returns true 0.001s
269com.tegonal.scala.commons.CheckUtilsTest:
270 + failIf throws if predicate is true 0.001s
271 + failIf doesn't throw and neither evaluate message if predicate is false 0.0s
272 + check throws if predicate is false 0.001s
273 + check doesn't throw and neither evaluate message if predicate is true 0.0s
274 + check throws if predicate is false-1 0.001s
275 + check doesn't throw and neither evaluate message if predicate is true-1 0.0s
276com.tegonal.scala.commons.TryExtensionsTest:
277 + mapFailure maps only over failure case of Success 0.007s
278 + mapFailure returns mapped result in case of Failure 0.0s
279com.tegonal.scala.commons.BlankToNoneTest:
280 + string: null 0.0s
281 + string: empty 0.001s
282 + string: space 0.0s
283 + string: tab 0.0s
284 + string: newline 0.001s
285 + string: not only spaces 0.001s
286 + string: not only whitespaces 0.001s
287 + string: text 0.0s
288 + charsequence: null 0.001s
289 + charsequence: empty 0.0s
290 + charsequence: space 0.0s
291 + charsequence: tab 0.001s
292 + charsequence: newline 0.0s
293 + charsequence: not only spaces 0.001s
294 + charsequence: not only whitespaces 0.001s
295 + charsequence: text 0.0s
296
297************************
298Build summary:
299[{
300 "module": "scala-commons",
301 "compile": {"status": "ok", "tookMs": 9112, "warnings": 1, "errors": 0},
302 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
303 "test-compile": {"status": "ok", "tookMs": 2083, "warnings": 0, "errors": 0},
304 "test": {"status": "ok", "tookMs": 465, "passed": 65, "failed": 0, "ignored": 0, "skipped": 0, "total": 65, "byFramework": [{"framework": "munit", "stats": {"passed": 65, "failed": 0, "ignored": 0, "skipped": 0, "total": 65}}]},
305 "publish": {"status": "skipped", "tookMs": 0},
306 "metadata": {
307 "crossScalaVersions": ["3.4.1"]
308}
309}]
310************************
311[success] Total time: 24 s, completed Dec 22, 2025, 6:49:56 PM
312[0JChecking patch project/plugins.sbt...
313Checking patch project/build.properties...
314Checking patch build.sbt...
315Applied patch project/plugins.sbt cleanly.
316Applied patch project/build.properties cleanly.
317Applied patch build.sbt cleanly.