Build Logs
blackdoor/jose • 3.8.0-RC1:2025-11-14
Errors
12
Warnings
61
Total Lines
347
1##################################
2Clonning https://github.com/blackdoor/jose.git into /build/repo using revision 0.4.6
3##################################
4Note: switching to '03a7e7061761386b2f5aa348ea08c69ca6555875'.
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
21Using target Scala version for migration: 3.7.4-RC2
22Migrating project for -source:3.4 using Scala 3.7.4-RC2
23----
24Preparing build for 3.7.4-RC2
25Would try to apply common scalacOption (best-effort, sbt/mill only):
26Append: -rewrite,REQUIRE:-source:3.4-migration
27Remove: -indent,-no-indent,-new-syntax,,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
28----
29Starting build for 3.7.4-RC2
30Execute tests: false
31Mill project found:
32Found explicit mill version 0.9.8 in ./mill-version
33Detected mill version=0.9.8, binary version: 0.9
34No prepare script found for project blackdoor/jose
35No mill build directory found
36Apply scalafix rules to ./build.sc
37Successfully applied pattern 'package build\n' in /build/repo/MillCommunityBuild.sc
38Successfully applied pattern 'import CommunityBuildCore.' in /build/repo/MillCommunityBuild.sc
39Successfully applied pattern 'import MillVersionCompat.' in /build/repo/MillCommunityBuild.sc
40##################################
41Scala version: 3.7.4-RC2
42Targets: black.door%jose black.door%jose-json-circe
43Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.4"],"sourcePatches":[]}
44##################################
45 % Total % Received % Xferd Average Speed Time Time Time Current
46 Dload Upload Total Spent Left Speed
47
48 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
49 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
50 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
51
52 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
53
54 58 60.3M 58 35.3M 0 0 25.5M 0 0:00:02 0:00:01 0:00:01 25.5M
55100 60.3M 100 60.3M 0 0 37.7M 0 0:00:01 0:00:01 --:--:-- 114M
56Preparing Java 17.0.8 runtime; this may take a minute or two ...
57Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.0.0/upickle_2.13-3.0.0.pom
58Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.0.0/upickle_2.13-3.0.0.pom
59Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.0.0/upickle-implicits_2.13-3.0.0.pom
60Downloading https://repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.0.0/upack_2.13-3.0.0.pom
61Downloading https://repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.0.0/ujson_2.13-3.0.0.pom
62Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.0.0/upickle-implicits_2.13-3.0.0.pom
63Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.0.0/upack_2.13-3.0.0.pom
64Downloaded https://repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.0.0/ujson_2.13-3.0.0.pom
65Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.0.0/upickle-core_2.13-3.0.0.pom
66Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.0.0/upickle-core_2.13-3.0.0.pom
67Downloading https://repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.0.0/ujson_2.13-3.0.0.jar
68Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.0.0/upickle_2.13-3.0.0.jar
69Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.0.0/upickle-core_2.13-3.0.0.jar
70Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.0.0/upickle_2.13-3.0.0-sources.jar
71Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.0.0/upickle-core_2.13-3.0.0-sources.jar
72Downloading https://repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.0.0/ujson_2.13-3.0.0-sources.jar
73Downloaded https://repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.0.0/ujson_2.13-3.0.0.jar
74Downloading https://repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.0.0/upack_2.13-3.0.0.jar
75Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.0.0/upickle-core_2.13-3.0.0-sources.jar
76Downloading https://repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.0.0/upack_2.13-3.0.0-sources.jar
77Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.0.0/upickle_2.13-3.0.0-sources.jar
78Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.0.0/upickle-implicits_2.13-3.0.0.jar
79Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.0.0/upickle_2.13-3.0.0.jar
80Downloading https://repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.0.0/upickle-implicits_2.13-3.0.0-sources.jar
81Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.0.0/upack_2.13-3.0.0-sources.jar
82Downloaded https://repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.0.0/ujson_2.13-3.0.0-sources.jar
83Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.0.0/upickle-implicits_2.13-3.0.0-sources.jar
84Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.0.0/upack_2.13-3.0.0.jar
85Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.0.0/upickle-core_2.13-3.0.0.jar
86Downloaded https://repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.0.0/upickle-implicits_2.13-3.0.0.jar
87Compiling /build/repo/MillVersionCompat.sc
88Compiling /build/repo/CommunityBuildCore.sc
89Compiling /build/repo/MillCommunityBuild.sc
90Compiling /build/repo/build.sc
91[1/1] resolve
92Try build using ./mill
93Build config: {"projects":{"exclude":[],"overrides":{}},"java":{},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.4"],"sourcePatches":[]}
94Parsed config: ProjectBuildConfig(ProjectsConfig(List(),Map()),CompileOnly)
95OpenCB::Use cross-version 3.7.4-RC2 instead of 3.0.0
96
97Starting build for jose - [0/2]
98Failed to resolve scalaVersion, assume it's Scala 3 project
99OpenCB::Filter out '-Xfatal-warnings', matches setting pattern '^-?-Xfatal-warnings'
100OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
101OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
102[info] compiling 20 Scala sources to /build/repo/out/jose/3.7.4-RC2/compile/dest/classes ...
103[warn] -- Warning: /build/repo/jose/src/black/door/jose/jws/Jws.scala:44:38 -----------
104[warn] 44 | .andThen(encoder.encodeToString _)
105[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^
106[warn] |The syntax `<function> _` is no longer supported;
107[warn] |you can simply leave out the trailing ` _`
108[warn] |This construct can be rewritten automatically under -rewrite -source 3.4-migration.
109[warn] -- Warning: /build/repo/jose/src/black/door/jose/jwt/JwtValidator.scala:32:55 --
110[warn] 32 | validators.fold(fromSync(PartialFunction.empty))(_ orElse _)
111[warn] | ^^^^^^
112[warn] |Alphanumeric method orElse is not declared infix; it should not be used as infix operator.
113[warn] |Instead, use method syntax .orElse(...) or backticked identifier `orElse`.
114[warn] |The latter can be rewritten automatically under -rewrite -source 3.4-migration.
115[info] [patched file /build/repo/jose/src/black/door/jose/jwt/JwtValidator.scala]
116[info] [patched file /build/repo/jose/src/black/door/jose/jws/Jws.scala]
117[warn] two warnings found
118[info] done compiling
119Successfully evaluated jose[3.7.4-RC2].compile
120[info] compiling 20 Scala sources to /build/repo/out/jose/3.7.4-RC2/compile/dest/classes ...
121[info] done compiling
122Skipping unused scalacOptions: -source, -rewrite
123Flag -classpath set repeatedly
124-- Warning: jose/src/black/door/jose/adopted/DerTools.scala:22:6 ---------------
12522 | def transcodeSignatureToConcat(derSignature: Array[Byte], outputLength: Int): Array[Byte] = {
126 | ^
127 | Couldn't resolve a member for the given link query: SignatureException
128-- Warning: jose/src/black/door/jose/adopted/DerTools.scala:73:6 ---------------
12973 | def transcodeSignatureToDER(jwsSignature: Array[Byte]): Array[Byte] = {
130 | ^
131 | Couldn't resolve a member for the given link query: SignatureException
1323 warnings found
133Successfully evaluated jose[3.7.4-RC2].docJar
134[info] compiling 4 Scala sources to /build/repo/out/jose/3.7.4-RC2/test/compile/dest/classes ...
135[warn] -- Warning: /build/repo/jose/test/src/black/door/jose/JwtSpec.scala:38:64 ------
136[warn] 38 | val Array(headerC, payloadC, signatureC, _*) = compact.split('.')
137[warn] | ^^^^^^^^^^^^^^^^^^
138[warn] |pattern's type String* does not match the right hand side expression's type String
139[warn] |
140[warn] |If the narrowing is intentional, this can be communicated by adding `: @unchecked` after the expression,
141[warn] |which may result in a MatchError at runtime.
142[warn] |This patch can be rewritten automatically under -rewrite -source 3.2-migration.
143[info] [patched file /build/repo/jose/test/src/black/door/jose/JwtSpec.scala]
144[warn] there were 10 deprecation warnings; re-run with -deprecation for details
145[warn] two warnings found
146[info] done compiling
147Successfully evaluated jose[3.7.4-RC2].test.compile
148Failed to evaluated jose[3.7.4-RC2].publishLocal: Exception(java.util.NoSuchElementException,mill.api.Result$OuterStack@a52c680f)
149
150Starting build for jose-json-circe - [1/2]
151Failed to resolve scalaVersion, assume it's Scala 3 project
152[info] compiling 5 Scala sources to /build/repo/out/json/circe/3.7.4-RC2/compile/dest/classes ...
153[warn] -- Warning: /build/repo/json/circe/src/black/door/jose/json/circe/jwt/JwtJsonSupport.scala:15:25
154[warn] 15 | implicit private[this] val instantEncoder: Encoder[Instant] =
155[warn] | ^
156[warn] |Ignoring [this] qualifier.
157[warn] |This syntax will be deprecated in the future; it should be dropped.
158[warn] |See: https://docs.scala-lang.org/scala3/reference/dropped-features/this-qualifier.html
159[warn] |This construct can be rewritten automatically under -rewrite -source 3.4-migration.
160[warn] -- Warning: /build/repo/json/circe/src/black/door/jose/json/circe/jwt/JwtJsonSupport.scala:18:25
161[warn] 18 | implicit private[this] val instantDecoder: Decoder[Instant] =
162[warn] | ^
163[warn] |Ignoring [this] qualifier.
164[warn] |This syntax will be deprecated in the future; it should be dropped.
165[warn] |See: https://docs.scala-lang.org/scala3/reference/dropped-features/this-qualifier.html
166[warn] |This construct can be rewritten automatically under -rewrite -source 3.4-migration.
167[info] [patched file /build/repo/json/circe/src/black/door/jose/json/circe/jwt/JwtJsonSupport.scala]
168[warn] two warnings found
169[info] done compiling
170Successfully evaluated json.circe[3.7.4-RC2].compile
171[info] compiling 5 Scala sources to /build/repo/out/json/circe/3.7.4-RC2/compile/dest/classes ...
172[info] done compiling
173Skipping unused scalacOptions: -source, -rewrite
174Flag -classpath set repeatedly
1751 warning found
176Successfully evaluated json.circe[3.7.4-RC2].docJar
177[info] compiling 4 Scala sources to /build/repo/out/jose/3.7.4-RC2/test/compile/dest/classes ...
178[warn] there were 10 deprecation warnings; re-run with -deprecation for details
179[warn] one warning found
180[info] done compiling
181[info] compiling 3 Scala sources to /build/repo/out/json/circe/3.7.4-RC2/test/compile/dest/classes ...
182[warn] -- Warning: /build/repo/json/circe/test/src/black/door/jose/CirceJwkSpec.scala:11:38
183[warn] 11 | def jwkDeserializer = json => decode(json)(Decoder[Jwk]).left.map(_.toString)
184[warn] | ^^^^^^^^^^^^
185[warn] |Context bounds will map to context parameters.
186[warn] |A `using` clause is needed to pass explicit arguments to them.
187[warn] |This code can be rewritten automatically under -rewrite -source 3.4-migration.
188[info] [patched file /build/repo/json/circe/test/src/black/door/jose/CirceJwkSpec.scala]
189[warn] one warning found
190[info] done compiling
191Successfully evaluated json.circe[3.7.4-RC2].test.compile
192Failed to evaluated json.circe[3.7.4-RC2].publishLocal: Exception(java.util.NoSuchElementException,mill.api.Result$OuterStack@88244ec0)
193
194************************
195Build summary:
196[{
197 "module": "jose",
198 "compile": {"status": "ok", "tookMs": 14203, "warnings": 0, "errors": 0},
199 "doc": {"status": "ok", "tookMs": 15015, "files": 1, "totalSizeKb": 2820},
200 "test-compile": {"status": "ok", "tookMs": 9901, "warnings": 0, "errors": 0},
201 "test": {"status": "skipped", "tookMs": 0, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
202 "publish": {"status": "skipped", "failureContext": {"type": "buildError", "reasons": ["java.util.NoSuchElementException"]}, "tookMs": 340},
203 "metadata": {
204 "crossScalaVersions": ["2.12.13", "3.0.0", "2.13.5"]
205}
206},{
207 "module": "jose-json-circe",
208 "compile": {"status": "ok", "tookMs": 8580, "warnings": 0, "errors": 0},
209 "doc": {"status": "ok", "tookMs": 11224, "files": 1, "totalSizeKb": 2664},
210 "test-compile": {"status": "ok", "tookMs": 16867, "warnings": 0, "errors": 0},
211 "test": {"status": "skipped", "tookMs": 0, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
212 "publish": {"status": "skipped", "failureContext": {"type": "buildError", "reasons": ["java.util.NoSuchElementException"]}, "tookMs": 277},
213 "metadata": {
214 "crossScalaVersions": ["2.12.13", "3.0.0", "2.13.5"]
215}
216}]
217************************"
218
219Checking patch build.sc...
220Applied patch build.sc cleanly.
221Commit migration rewrites
222Switched to a new branch 'opencb/migrate-source-3.4'
223[opencb/migrate-source-3.4 76a0ec8] Apply Scala compiler rewrites using -source:3.4-migration using Scala 3.7.4-RC2
224 5 files changed, 6 insertions(+), 6 deletions(-)
225----
226Preparing build for 3.8.0-RC1
227Scala binary version found: 3.8
228Implicitly using source version 3.8
229Scala binary version found: 3.8
230Implicitly using source version 3.8
231Would try to apply common scalacOption (best-effort, sbt/mill only):
232Append: ,REQUIRE:-source:3.8
233Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
234----
235Starting build for 3.8.0-RC1
236Execute tests: false
237Mill project found:
238Found explicit mill version 0.9.8 in ./mill-version
239Force upgrade of millVersion 0.9.8 to 0.9.12
240Detected mill version=0.9.12, binary version: 0.9
241No prepare script found for project blackdoor/jose
242No mill build directory found
243Apply scalafix rules to ./build.sc
244Successfully applied pattern 'package build\n' in /build/repo/MillCommunityBuild.sc
245Successfully applied pattern 'import CommunityBuildCore.' in /build/repo/MillCommunityBuild.sc
246Successfully applied pattern 'import MillVersionCompat.' in /build/repo/MillCommunityBuild.sc
247##################################
248Scala version: 3.8.0-RC1
249Targets: black.door%jose black.door%jose-json-circe
250Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.4"],"sourcePatches":[]}
251##################################
252 % Total % Received % Xferd Average Speed Time Time Time Current
253 Dload Upload Total Spent Left Speed
254
255 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
256 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
257
258 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
259 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
260
261100 60.3M 100 60.3M 0 0 52.4M 0 0:00:01 0:00:01 --:--:-- 52.4M
262Compiling /build/repo/MillVersionCompat.sc
263Compiling /build/repo/CommunityBuildCore.sc
264Compiling /build/repo/MillCommunityBuild.sc
265Compiling /build/repo/build.sc
266[1/1] resolve
267Try build using ./mill
268Build config: {"projects":{"exclude":[],"overrides":{}},"java":{},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"compile-only","migrationVersions":["3.4"],"sourcePatches":[]}
269Parsed config: ProjectBuildConfig(ProjectsConfig(List(),Map()),CompileOnly)
270OpenCB::Use cross-version 3.8.0-RC1 instead of 3.0.0
271
272Starting build for jose - [0/2]
273Failed to resolve scalaVersion, assume it's Scala 3 project
274OpenCB::Filter out '-Xfatal-warnings', matches setting pattern '^-?-Xfatal-warnings'
275OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
276OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
277[info] compiling 20 Scala sources to /build/repo/out/jose/3.8.0-RC1/compile/dest/classes ...
278[warn] -- Warning: /build/repo/jose/src/black/door/jose/jwt/Jwt.scala:110:10 ----------
279[warn] 110 | payloadDeserializer,
280[warn] | ^^^^^^^^^^^^^^^^^^^
281[warn] |Implicit parameters should be provided with a `using` clause.
282[warn] |This code can be rewritten automatically under -rewrite -source 3.7-migration.
283[warn] |To disable the warning, please use the following option:
284[warn] | "-Wconf:msg=Implicit parameters should be provided with a `using` clause:s"
285[warn] one warning found
286[info] done compiling
287Successfully evaluated jose[3.8.0-RC1].compile
288Option -classpath was updated
289-- Warning: jose/src/black/door/jose/adopted/DerTools.scala:22:6 ---------------
29022 | def transcodeSignatureToConcat(derSignature: Array[Byte], outputLength: Int): Array[Byte] = {
291 | ^
292 | Couldn't resolve a member for the given link query: SignatureException
293-- Warning: jose/src/black/door/jose/adopted/DerTools.scala:73:6 ---------------
29473 | def transcodeSignatureToDER(jwsSignature: Array[Byte]): Array[Byte] = {
295 | ^
296 | Couldn't resolve a member for the given link query: SignatureException
2973 warnings found
298Successfully evaluated jose[3.8.0-RC1].docJar
299[info] compiling 4 Scala sources to /build/repo/out/jose/3.8.0-RC1/test/compile/dest/classes ...
300[warn] there were 10 deprecation warnings; re-run with -deprecation for details
301[warn] one warning found
302[info] done compiling
303Successfully evaluated jose[3.8.0-RC1].test.compile
304Failed to evaluated jose[3.8.0-RC1].publishLocal: Exception(java.util.NoSuchElementException,mill.api.Result$OuterStack@6257b7ef)
305
306Starting build for jose-json-circe - [1/2]
307Failed to resolve scalaVersion, assume it's Scala 3 project
308[info] compiling 5 Scala sources to /build/repo/out/json/circe/3.8.0-RC1/compile/dest/classes ...
309[info] done compiling
310Successfully evaluated json.circe[3.8.0-RC1].compile
311Option -classpath was updated
3121 warning found
313Successfully evaluated json.circe[3.8.0-RC1].docJar
314[info] compiling 3 Scala sources to /build/repo/out/json/circe/3.8.0-RC1/test/compile/dest/classes ...
315[info] done compiling
316Successfully evaluated json.circe[3.8.0-RC1].test.compile
317Failed to evaluated json.circe[3.8.0-RC1].publishLocal: Exception(java.util.NoSuchElementException,mill.api.Result$OuterStack@7e63f636)
318
319************************
320Build summary:
321[{
322 "module": "jose",
323 "compile": {"status": "ok", "tookMs": 13089, "warnings": 0, "errors": 0},
324 "doc": {"status": "ok", "tookMs": 6127, "files": 1, "totalSizeKb": 2821},
325 "test-compile": {"status": "ok", "tookMs": 8932, "warnings": 0, "errors": 0},
326 "test": {"status": "skipped", "tookMs": 0, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
327 "publish": {"status": "skipped", "failureContext": {"type": "buildError", "reasons": ["java.util.NoSuchElementException"]}, "tookMs": 338},
328 "metadata": {
329 "crossScalaVersions": ["2.12.13", "3.0.0", "2.13.5"]
330}
331},{
332 "module": "jose-json-circe",
333 "compile": {"status": "ok", "tookMs": 8156, "warnings": 0, "errors": 0},
334 "doc": {"status": "ok", "tookMs": 3383, "files": 1, "totalSizeKb": 2664},
335 "test-compile": {"status": "ok", "tookMs": 6851, "warnings": 0, "errors": 0},
336 "test": {"status": "skipped", "tookMs": 0, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
337 "publish": {"status": "skipped", "failureContext": {"type": "buildError", "reasons": ["java.util.NoSuchElementException"]}, "tookMs": 236},
338 "metadata": {
339 "crossScalaVersions": ["2.12.13", "3.0.0", "2.13.5"]
340}
341}]
342************************"
343
344Checking patch build.sc...
345Checking patch .mill-version...
346Applied patch build.sc cleanly.
347Applied patch .mill-version cleanly.