Build Logs

guardian/panda-hmac • 3.8.0-RC3:2025-12-04

Errors

3

Warnings

4

Total Lines

328

1##################################
2Clonning https://github.com/guardian/pan-domain-authentication.git into /build/repo using revision v13.0.0
3##################################
4Note: switching to '0937e08b0904db18c32f492be3fc2fd900c62d26'.
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-RC3
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-RC3
32Execute tests: true
33sbt project found:
34Sbt version 1.10.5 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 guardian/panda-hmac
37##################################
38Scala version: 3.8.0-RC3
39Targets: com.gu%panda-hmac-core com.gu%panda-hmac-play_2-9 com.gu%panda-hmac-play_3-0
40Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[]}
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-RC3
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-RC3"
60"++3.8.0-RC3 -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-RC3 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[]}""" com.gu%panda-hmac-core com.gu%panda-hmac-play_2-9 com.gu%panda-hmac-play_3-0"
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, settings.sbt...
71[info] loading project definition from /build/repo/project
72[info] compiling 3 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.846s.
75[info] done compiling
76[info] loading settings for project pan-domain-auth-root from build.sbt, version.sbt...
77[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
78Execute setCrossScalaVersions: 3.8.0-RC3
79OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in panda-hmac-play_2-9/crossScalaVersions
80OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in pan-domain-auth-play_2-9/crossScalaVersions
81OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in pan-domain-auth-example/crossScalaVersions
82OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in panda-hmac-core/crossScalaVersions
83OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in panda-hmac-play_3-0/crossScalaVersions
84OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in pan-domain-auth-play_3-0/crossScalaVersions
85OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in pan-domain-auth-verification/crossScalaVersions
86OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in pan-domain-auth-core/crossScalaVersions
87OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in key-rotation/crossScalaVersions
88OpenCB::Changing crossVersion 3.3.5 -> 3.8.0-RC3 in pan-domain-auth-root/crossScalaVersions
89[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
90[info] Setting Scala version to 3.8.0-RC3 on 10 projects.
91[info] Switching Scala version on:
92[info] panda-hmac-play_2-9 (3.8.0-RC3, 2.13.16)
93[info] pan-domain-auth-example (3.8.0-RC3, 2.13.16)
94[info] panda-hmac-core (3.8.0-RC3, 2.13.16)
95[info] pan-domain-auth-verification (3.8.0-RC3, 2.13.16)
96[info] pan-domain-auth-play_2-9 (3.8.0-RC3, 2.13.16)
97[info] * pan-domain-auth-root (3.8.0-RC3)
98[info] panda-hmac-play_3-0 (3.8.0-RC3, 2.13.16)
99[info] key-rotation (3.8.0-RC3)
100[info] pan-domain-auth-core (3.8.0-RC3, 2.13.16)
101[info] pan-domain-auth-play_3-0 (3.8.0-RC3, 2.13.16)
102[info] Excluding projects:
103[info] Reapplying settings...
104[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
105Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
106[info] Reapplying settings...
107[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
108[info] Defining Global / credentials, credentials and 8 others.
109[info] The new values will be used by allCredentials, credentials and 47 others.
110[info] Run `last` for details.
111[info] Reapplying settings...
112[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
113Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
114[info] Reapplying settings...
115OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
116
117 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
118 Did you mean pan-domain-auth-play_3-0 / allExcludeDependencies ?
119 , retry without global scopes
120[info] Reapplying settings...
121[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
122Execute removeScalacOptionsStartingWith: -P:wartremover
123[info] Reapplying settings...
124[info] set current project to pan-domain-auth-root (in build file:/build/repo/)
125[success] Total time: 0 s, completed Dec 4, 2025, 12:49:29 PM
126Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[]}
127Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
128Starting build...
129Projects: Set(panda-hmac-play_2-9, panda-hmac-core, pan-domain-auth-verification, pan-domain-auth-play_2-9, panda-hmac-play_3-0, pan-domain-auth-core, pan-domain-auth-play_3-0)
130Starting build for ProjectRef(file:/build/repo/,pan-domain-auth-play_3-0) (pan-domain-auth-play_3-0)... [0/7]
131OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
132OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
133Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
134[info] compiling 16 Scala sources to /build/repo/pan-domain-auth-verification/target/scala-3.8.0-RC3/classes ...
135[warn] there was 1 deprecation warning; re-run with -deprecation for details
136[warn] one warning found
137[info] done compiling
138[info] compiling 3 Scala sources to /build/repo/pan-domain-auth-core/target/scala-3.8.0-RC3/classes ...
139[info] done compiling
140[info] compiling 3 Scala sources to /build/repo/pan-domain-auth-play_3-0/target/scala-3.8.0-RC3/classes ...
141[info] done compiling
142Starting build for ProjectRef(file:/build/repo/,panda-hmac-play_2-9) (panda-hmac-play_2-9)... [1/7]
143Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
144[info] compiling 3 Scala sources to /build/repo/hmac/core/target/scala-3.8.0-RC3/classes ...
145[info] compiling 3 Scala sources to /build/repo/pan-domain-auth-play_2-9/target/scala-3.8.0-RC3/classes ...
146[warn] there were 2 deprecation warnings; re-run with -deprecation for details
147[warn] one warning found
148[info] done compiling
149[info] done compiling
150[info] compiling 1 Scala source to /build/repo/hmac/play/play_2-9/target/scala-3.8.0-RC3/classes ...
151[info] done compiling
152Starting build for ProjectRef(file:/build/repo/,panda-hmac-play_3-0) (panda-hmac-play_3-0)... [2/7]
153Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
154[info] compiling 1 Scala source to /build/repo/hmac/play/play_3-0/target/scala-3.8.0-RC3/classes ...
155[info] done compiling
156Starting build for ProjectRef(file:/build/repo/,panda-hmac-core) (panda-hmac-core)... [3/7]
157Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
158[info] compiling 1 Scala source to /build/repo/hmac/core/target/scala-3.8.0-RC3/test-classes ...
159[info] done compiling
160[info] HMACHeadersTest:
161[info] HMACSecrets
162[info] when validateHMACHeaders
163[info] - should throw an exception if called without secret or secretKeys set
164[info] - should return true if a valid secret is set
165[info] - should return true if any valid secret is in secretKeys
166[info] - should preferentially use secretKeys over secret if both are provided
167Starting build for ProjectRef(file:/build/repo/,pan-domain-auth-play_2-9) (pan-domain-auth-play_2-9)... [4/7]
168Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
169Starting build for ProjectRef(file:/build/repo/,pan-domain-auth-verification) (pan-domain-auth-verification)... [5/7]
170Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
171[info] compiling 8 Scala sources to /build/repo/pan-domain-auth-verification/target/scala-3.8.0-RC3/test-classes ...
172[info] done compiling
173alsoAcceptedKeys: ['povb6'] (added ['povb6'], removed [])
174Active key changed from 'tudwv' to 'povb6'. alsoAcceptedKeys: ['tudwv'] (added ['tudwv'], removed ['povb6'])
175alsoAcceptedKeys: [] (added [], removed ['tudwv'])
176Active key changed from 'tudwv' to 'povb6' (FAILED transition criteria: TolerateOldKey). alsoAcceptedKeys: [] (added [], removed ['povb6'])
177Active key changed from 'tudwv' to 'povb6' (FAILED transition criteria: PreAcceptNewKey). alsoAcceptedKeys: ['tudwv'] (added ['tudwv'], removed [])
178[info] CryptoConfTest:
179[info] loading crypto configuration
180[info] - follow a safe set of transition steps
181[info] - have transitions that are reported as safe
182[info] - report a bad transition if the old active key is not still tolerated
183[info] - report a bad transition if the new active key wasn't already accepted by the old config
184[info] CryptoConf.SettingsReader
185[info] - returns an error if the key looks invalid
186[info] - returns the key if it is valid
187[info] CryptoConf.SettingsReader activePublicKey
188[info] - will get a public key from a valid settings map
189[info] - will reject a key that is not correctly formatted
190[info] - will fail if the key is not present in the settings
191[info] KeyHashIdTest:
192[info] key hash ids
193[info] - should be stable so that we can use them as a simple text identifier for public keys
194[info] PublicSettingsTest:
195[info] extractSettings
196[info] - extracts properties from a valid body
197[info] CookiePayloadTest:
198[info] CookiePayload
199[info] - round-trip from payload text to CookiePayload if matching public-private keys are used
200[info] - not return payload text if a rogue key was used
201[info] - reject cookie text that does not contain a .
202[info] - reject cookie text that does not contain valid BASE64 text
203[info] - round-trip from correctly-formatted cookie-text to CookiePayload instance and back again
204[info] CryptoTest:
205[info] - a valid signature can be successfully verified
206[info] - an invalid signature will not be verified
207[info] - a valid signature created with the wrong key will not be verified
208SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
209SLF4J: Defaulting to no-operation (NOP) logger implementation
210SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
211[info] CookieUtilsTest:
212[info] generateCookieData
213[info] - generates a base64-encoded 'data.signature' cookie value
214[info] parseCookieData
215[info] - can extract an authenticatedUser from real cookie data
216[info] - fails to extract invalid data with a SignatureNotValid
217[info] - fails to extract incorrectly signed data with a CookieSignatureInvalidException
218[info] - fails to extract completely incorrect cookie data with a CookieParseException
219[info] - serialize/deserialize preserves data
220[info] PanDomainTest:
221[info] authStatus
222[info] - returns `Authenticated` for valid cookie data that passes the validation check
223[info] - gives back the provided auth user if successful
224[info] - returns `InvalidCookie` if the cookie is not valid
225[info] - returns `InvalidCookie` if the cookie fails its signature check
226[info] - returns `Expired` if the cookie has expired and is outside the default grace period
227[info] - returns `Expired` if the cookie has expired and is outside a custom grace period
228[info] - returns `GracePeriod` if the cookie has expired but is within the default grace period
229[info] - returns `GracePeriod` if the cookie has expired but is within a custom grace period
230[info] - returns `Expired` if cookie has not expired, but forceExpiry is set
231[info] - returns `NotAuthorized` if the cookie does not pass the verification check
232[info] correctly handles the verification check
233[info] without cache validation,
234[info] - returns `NotAuthorized` if the user fails the validation check
235[info] - returns `Authenticated` if the user passes the validation check
236[info] when validation is cached
237[info] - returns `NotAuthorized` if the user is not authorized in this system
238[info] - returns Authenticated if the user was authenticated in this system, even if they would fail the validation check
239[info] - does not call the validateUser function if caching is enabled
240[info] guardianValidation
241[info] - returns true for a multi-factor user with a Guardian email address
242[info] - returns false for a multi-factor user without a guardian email address
243[info] - returns false for a guardian email address that is not authenticated with multi-factor-auth
244[info] - returns false for something that looks a bit like a guardian domain
245Starting build for ProjectRef(file:/build/repo/,pan-domain-auth-core) (pan-domain-auth-core)... [6/7]
246Compile scalacOptions: --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
247
248************************
249Build summary:
250[{
251 "module": "pan-domain-auth-play_3-0",
252 "compile": {"status": "ok", "tookMs": 15114, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
253 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
254 "test-compile": {"status": "ok", "tookMs": 363, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
255 "test": {"status": "ok", "tookMs": 218, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
256 "publish": {"status": "skipped", "tookMs": 0},
257 "metadata": {
258 "crossScalaVersions": ["3.3.5", "2.13.16"]
259}
260},{
261 "module": "panda-hmac-play_2-9",
262 "compile": {"status": "ok", "tookMs": 3127, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
263 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
264 "test-compile": {"status": "ok", "tookMs": 285, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
265 "test": {"status": "ok", "tookMs": 266, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
266 "publish": {"status": "skipped", "tookMs": 0},
267 "metadata": {
268 "crossScalaVersions": ["3.3.5", "2.13.16"]
269}
270},{
271 "module": "panda-hmac-play_3-0",
272 "compile": {"status": "ok", "tookMs": 680, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
273 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
274 "test-compile": {"status": "ok", "tookMs": 265, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
275 "test": {"status": "ok", "tookMs": 276, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
276 "publish": {"status": "skipped", "tookMs": 0},
277 "metadata": {
278 "crossScalaVersions": ["3.3.5", "2.13.16"]
279}
280},{
281 "module": "panda-hmac-core",
282 "compile": {"status": "ok", "tookMs": 32, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
283 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
284 "test-compile": {"status": "ok", "tookMs": 1080, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
285 "test": {"status": "ok", "tookMs": 545, "passed": 4, "failed": 0, "ignored": 0, "skipped": 0, "total": 4, "byFramework": [{"framework": "unknown", "stats": {"passed": 4, "failed": 0, "ignored": 0, "skipped": 0, "total": 4}}]},
286 "publish": {"status": "skipped", "tookMs": 0},
287 "metadata": {
288 "crossScalaVersions": ["3.3.5", "2.13.16"]
289}
290},{
291 "module": "pan-domain-auth-play_2-9",
292 "compile": {"status": "ok", "tookMs": 136, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
293 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
294 "test-compile": {"status": "ok", "tookMs": 183, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
295 "test": {"status": "ok", "tookMs": 174, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
296 "publish": {"status": "skipped", "tookMs": 0},
297 "metadata": {
298 "crossScalaVersions": ["3.3.5", "2.13.16"]
299}
300},{
301 "module": "pan-domain-auth-verification",
302 "compile": {"status": "ok", "tookMs": 47, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
303 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
304 "test-compile": {"status": "ok", "tookMs": 2742, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
305 "test": {"status": "ok", "tookMs": 1005, "passed": 44, "failed": 0, "ignored": 0, "skipped": 0, "total": 44, "byFramework": [{"framework": "unknown", "stats": {"passed": 44, "failed": 0, "ignored": 0, "skipped": 0, "total": 44}}]},
306 "publish": {"status": "skipped", "tookMs": 0},
307 "metadata": {
308 "crossScalaVersions": ["3.3.5", "2.13.16"]
309}
310},{
311 "module": "pan-domain-auth-core",
312 "compile": {"status": "ok", "tookMs": 76, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
313 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
314 "test-compile": {"status": "ok", "tookMs": 139, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
315 "test": {"status": "ok", "tookMs": 137, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
316 "publish": {"status": "skipped", "tookMs": 0},
317 "metadata": {
318 "crossScalaVersions": ["3.3.5", "2.13.16"]
319}
320}]
321************************
322[success] Total time: 98 s (0:01:38.0), completed Dec 4, 2025, 12:51:07 PM
323[0JChecking patch project/plugins.sbt...
324Checking patch project/build.properties...
325Checking patch build.sbt...
326Applied patch project/plugins.sbt cleanly.
327Applied patch project/build.properties cleanly.
328Applied patch build.sbt cleanly.