Build Logs

guardian/panda-hmac • 3.8.0-RC6:2026-01-08

Errors

3

Warnings

4

Total Lines

325

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