Build Information
Successful build of nostr-kit, reference 0.5.0 (f60503), with Swift 6.4 for Linux on 19 Sep 2026 09:07:11 UTC.
Swift 6 data race errors: 0
Build Command
bash -c docker run --pull=always --rm -v "checkouts-53886769-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:basic-6.4-latest swift build --triple x86_64-unknown-linux-gnu 2>&1Build Log
========================================
RunAll
========================================
Builder version: 5.1.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/tannerdsilva/nostr-kit.git
Reference: 0.5.0
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
From https://github.com/tannerdsilva/nostr-kit
* tag 0.5.0 -> FETCH_HEAD
HEAD is now at f60503e release v0.5.0
Cloned https://github.com/tannerdsilva/nostr-kit.git
Revision (git rev-parse @):
f60503e2ac73b41fd0bfa03ed8eb279c5d417113
SUCCESS checkout https://github.com/tannerdsilva/nostr-kit.git at 0.5.0
========================================
Build
========================================
Selected platform: linux
Swift version: 6.4
Building package at path: $PWD
https://github.com/tannerdsilva/nostr-kit.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-53886769-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:basic-6.4-latest swift build --triple x86_64-unknown-linux-gnu 2>&1
basic-6.4-latest: Pulling from saguaro1/spi-images
Digest: sha256:c77fcce225e223ac0fafed844619173fc6de8d62dd560eeb28db3182af6a282b
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:basic-6.4-latest
Fetching https://github.com/tannerdsilva/rawdog.git
Fetching https://github.com/apple/swift-crypto.git
Fetching https://github.com/apple/swift-system.git
Fetching https://github.com/apple/swift-log.git
Fetching https://github.com/GigaBitcoin/secp256k1.swift
Fetching https://github.com/tannerdsilva/QuickJSON.git
[1/8096] Fetching swift-log
[568/26638] Fetching swift-log, swift-crypto
[4097/27156] Fetching swift-log, swift-crypto, quickjson
[10470/34054] Fetching swift-log, swift-crypto, quickjson, swift-system
[17140/36243] Fetching swift-log, swift-crypto, quickjson, swift-system, rawdog
Fetched https://github.com/tannerdsilva/rawdog.git (0.71s)
Fetching https://github.com/swift-extras/swift-extras-base64.git
[19221/34054] Fetching swift-log, swift-crypto, quickjson, swift-system
[22930/45141] Fetching swift-log, swift-crypto, quickjson, swift-system, secp256k1.swift
[39821/46095] Fetching swift-log, swift-crypto, quickjson, swift-system, secp256k1.swift, swift-extras-base64
Fetched https://github.com/swift-extras/swift-extras-base64.git (0.49s)
[41926/45141] Fetching swift-log, swift-crypto, quickjson, swift-system, secp256k1.swift
Fetching https://github.com/apple/swift-nio-ssl.git
Fetched https://github.com/apple/swift-system.git (1.21s)
Fetched https://github.com/apple/swift-log.git (1.21s)
Fetching https://github.com/apple/swift-nio.git
Fetching https://github.com/apple/swift-argument-parser.git
[27043/30147] Fetching swift-crypto, quickjson, secp256k1.swift
Fetched https://github.com/GigaBitcoin/secp256k1.swift (1.52s)
[1/16065] Fetching swift-nio-ssl
[2893/34983] Fetching swift-nio-ssl, swift-argument-parser
Fetched https://github.com/apple/swift-argument-parser.git (0.81s)
[1/86073] Fetching swift-nio
Fetched https://github.com/tannerdsilva/QuickJSON.git (2.21s)
Fetched https://github.com/apple/swift-nio-ssl.git (1.01s)
Fetched https://github.com/apple/swift-crypto.git (2.23s)
Fetched https://github.com/apple/swift-nio.git (3.38s)
Computing version for https://github.com/GigaBitcoin/secp256k1.swift
Computed https://github.com/GigaBitcoin/secp256k1.swift at 0.7.0 (5.67s)
Computing version for https://github.com/tannerdsilva/rawdog.git
Computed https://github.com/tannerdsilva/rawdog.git at 0.0.7 (0.14s)
Computing version for https://github.com/tannerdsilva/QuickJSON.git
Computed https://github.com/tannerdsilva/QuickJSON.git at 0.1.1 (0.18s)
Fetching https://github.com/ibireme/yyjson.git
[1/4899] Fetching yyjson
Fetched https://github.com/ibireme/yyjson.git (0.95s)
Computing version for https://github.com/ibireme/yyjson.git
Computed https://github.com/ibireme/yyjson.git at 0.7.0 (1.14s)
Computing version for https://github.com/apple/swift-crypto.git
Computed https://github.com/apple/swift-crypto.git at 2.6.0 (0.20s)
Computing version for https://github.com/swift-extras/swift-extras-base64.git
Computed https://github.com/swift-extras/swift-extras-base64.git at 0.7.0 (0.17s)
Computing version for https://github.com/apple/swift-argument-parser.git
Computed https://github.com/apple/swift-argument-parser.git at 1.8.2 (0.19s)
Computing version for https://github.com/apple/swift-system.git
Computed https://github.com/apple/swift-system.git at 1.8.1 (0.20s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.15.1 (0.18s)
Computing version for https://github.com/apple/swift-nio-ssl.git
Computed https://github.com/apple/swift-nio-ssl.git at 2.37.5 (0.21s)
Computing version for https://github.com/apple/swift-nio.git
Computed https://github.com/apple/swift-nio.git at 2.103.0 (0.33s)
Fetching https://github.com/apple/swift-atomics.git
Fetching https://github.com/apple/swift-collections.git
[1/1875] Fetching swift-atomics
[1876/29227] Fetching swift-atomics, swift-collections
Fetched https://github.com/apple/swift-atomics.git (1.20s)
Fetched https://github.com/apple/swift-collections.git (1.21s)
Computing version for https://github.com/apple/swift-atomics.git
Computed https://github.com/apple/swift-atomics.git at 1.3.1 (1.39s)
Computing version for https://github.com/apple/swift-collections.git
Computed https://github.com/apple/swift-collections.git at 1.6.0 (0.28s)
Creating working copy for https://github.com/apple/swift-atomics.git
Working copy of https://github.com/apple/swift-atomics.git resolved at 1.3.1
Creating working copy for https://github.com/apple/swift-collections.git
Working copy of https://github.com/apple/swift-collections.git resolved at 1.6.0
Creating working copy for https://github.com/tannerdsilva/QuickJSON.git
Working copy of https://github.com/tannerdsilva/QuickJSON.git resolved at 0.1.1
Creating working copy for https://github.com/GigaBitcoin/secp256k1.swift
Working copy of https://github.com/GigaBitcoin/secp256k1.swift resolved at 0.7.0
Creating working copy for https://github.com/ibireme/yyjson.git
Working copy of https://github.com/ibireme/yyjson.git resolved at 0.7.0
Creating working copy for https://github.com/apple/swift-system.git
Working copy of https://github.com/apple/swift-system.git resolved at 1.8.1
Creating working copy for https://github.com/apple/swift-crypto.git
Working copy of https://github.com/apple/swift-crypto.git resolved at 2.6.0
Creating working copy for https://github.com/apple/swift-argument-parser.git
Working copy of https://github.com/apple/swift-argument-parser.git resolved at 1.8.2
Creating working copy for https://github.com/apple/swift-nio.git
Working copy of https://github.com/apple/swift-nio.git resolved at 2.103.0
Creating working copy for https://github.com/tannerdsilva/rawdog.git
Working copy of https://github.com/tannerdsilva/rawdog.git resolved at 0.0.7
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.15.1
Creating working copy for https://github.com/swift-extras/swift-extras-base64.git
Working copy of https://github.com/swift-extras/swift-extras-base64.git resolved at 0.7.0
Creating working copy for https://github.com/apple/swift-nio-ssl.git
Working copy of https://github.com/apple/swift-nio-ssl.git resolved at 2.37.5
Building for debugging...
[Computing dependencies]
[Constructing description]
[Pre-planning 1 / 1466]
[Planning 1295 / 1466]
[Planning deferred tasks]
[Constructing 2000 / 3902]
[Starting]
[258 / 1304] cnostr
[264 / 1328] SystemPackage
[264 / 1328] secp256k1_bindings
[266 / 1328] _NIODataStructures
[278 / 1328] secp256k1_implementation
[279 / 1328] yyjson
[282 / 1328] secp256k1_implementation
[283 / 1328] secp256k1_implementation
[284 / 1328] secp256k1_implementation
[300 / 1328] SystemPackage-product
[302 / 1329] _NIODataStructures
[304 / 1329] _NIODataStructures
[310 / 1331] _NIOBase64
[319 / 1340] _AtomicsShims
[326 / 1377] RAW
[335 / 1377] CSystem
[336 / 1380] QuickJSON
[346 / 1380] QuickJSON
[353 / 1380] NIOConcurrencyHelpers
[370 / 1381] InternalCollectionsUtilities
[374 / 1381] QuickJSON
[376 / 1381] QuickJSON
[383 / 1381] NIOConcurrencyHelpers-product
[390 / 1382] QuickJSON
[392 / 1382] QuickJSON
[393 / 1382] NIOConcurrencyHelpers
[398 / 1382] InternalCollectionsUtilities
[403 / 1383] NIOConcurrencyHelpers
[405 / 1383] Logging
[408 / 1383] ExtrasBase64-product
[409 / 1383] ExtrasBase64-product
[411 / 1384] Logging
[418 / 1389] ArgumentParserToolInfo
[425 / 1401] secp256k1
[444 / 1402] ArgumentParserToolInfo
[458 / 1403] Atomics
[461 / 1403] ArgumentParser
[463 / 1403] CNIOLLHTTP
[473 / 1403] CNIOBoringSSL
[475 / 1404] CNIOBoringSSL
[476 / 1405] CNIOBoringSSL
[479 / 1406] CNIOBoringSSL
[481 / 1406] CNIOBoringSSL
[481 / 1406] Atomics
[483 / 1406] Atomics
[494 / 1406] CNIOBoringSSL
[498 / 1406] CNIOBoringSSL
[499 / 1406] Atomics
[501 / 1407] CNIOBoringSSL
[502 / 1407] CNIOBoringSSL
[507 / 1407] CNIOBoringSSL
[508 / 1407] CNIOBoringSSL
[510 / 1407] CNIOBoringSSL
[514 / 1407] CNIOBoringSSL
[515 / 1407] CNIOBoringSSL
[520 / 1407] CNIOBoringSSL
[528 / 1407] CNIOBoringSSL
[531 / 1407] CNIOBoringSSL
[533 / 1407] CNIOBoringSSL
[536 / 1407] CNIOBoringSSL
[539 / 1407] CNIOBoringSSL
[541 / 1407] CNIOBoringSSL
[544 / 1407] CNIOBoringSSL
[547 / 1407] CNIOBoringSSL
[551 / 1407] CNIOBoringSSL
[552 / 1407] CNIOBoringSSL
[558 / 1407] CNIOBoringSSL
[561 / 1407] CNIOBoringSSL
[563 / 1407] CNIOBoringSSL
[565 / 1407] CNIOBoringSSL
[567 / 1407] CNIOBoringSSL
[571 / 1407] CNIOBoringSSL
[574 / 1407] CNIOBoringSSL
[576 / 1407] CNIOBoringSSL
[578 / 1407] CNIOBoringSSL
[581 / 1407] CNIOBoringSSL
[582 / 1407] CNIOBoringSSL
[585 / 1407] CNIOBoringSSL
[587 / 1407] CNIOBoringSSL
[588 / 1407] CNIOBoringSSL
[589 / 1407] CNIOBoringSSL
[591 / 1407] CNIOBoringSSL
[592 / 1407] CNIOBoringSSL
[595 / 1407] CNIOBoringSSL
[597 / 1407] CNIOBoringSSL
[603 / 1407] CNIOBoringSSL
[616 / 1407] CNIOBoringSSL
[629 / 1407] CNIOBoringSSL
[633 / 1407] CNIOBoringSSL
[637 / 1407] CNIOBoringSSL
[639 / 1407] CNIOBoringSSL
[642 / 1407] CNIOBoringSSL
[645 / 1407] CNIOBoringSSL
[647 / 1407] CNIOBoringSSL
[650 / 1407] CNIOBoringSSL
[655 / 1407] CNIOBoringSSL
[656 / 1407] CNIOBoringSSL
[660 / 1407] CNIOBoringSSL
[664 / 1407] CNIOBoringSSL
[667 / 1407] CNIOBoringSSL
[669 / 1407] CNIOBoringSSL
[675 / 1407] CNIOBoringSSL
[676 / 1407] CNIOBoringSSL
[678 / 1407] CNIOBoringSSL
[686 / 1407] CNIOBoringSSL
[694 / 1407] CNIOBoringSSL
[695 / 1407] CNIOBoringSSL
[701 / 1407] CNIOBoringSSL
[704 / 1407] CNIOBoringSSL
[708 / 1407] CNIOBoringSSL
[711 / 1407] CNIOBoringSSL
[714 / 1407] CNIOBoringSSL
[725 / 1407] CNIOBoringSSL
[734 / 1407] CNIOBoringSSL
[740 / 1407] CNIOBoringSSL
[743 / 1407] CNIOBoringSSL
[746 / 1407] CNIOBoringSSL
[749 / 1407] CNIOBoringSSL
[753 / 1407] CNIOBoringSSL
[756 / 1407] CNIOBoringSSL
[758 / 1407] CNIOBoringSSL
[760 / 1407] CNIOBoringSSL
[764 / 1407] CNIOBoringSSL
[766 / 1407] CNIOBoringSSL
[770 / 1407] CNIOBoringSSL
[772 / 1407] CNIOBoringSSL
[774 / 1407] CNIOBoringSSL
[776 / 1407] CNIOBoringSSL
[779 / 1407] CNIOBoringSSL
[781 / 1407] CNIOBoringSSL
[784 / 1407] CNIOBoringSSL
[787 / 1407] CNIOBoringSSL
[792 / 1407] CNIOBoringSSL
[796 / 1407] CNIOBoringSSL
[807 / 1407] CNIOBoringSSL
[816 / 1407] CNIOBoringSSL
[822 / 1407] CNIOBoringSSL
[823 / 1407] CNIOBoringSSL
[828 / 1407] CNIOBoringSSL
[831 / 1407] CNIOBoringSSL
[836 / 1407] CNIOBoringSSL
[847 / 1407] CNIOBoringSSL
[855 / 1407] CNIOBoringSSL
[860 / 1407] CNIOBoringSSL
[862 / 1407] CNIOBoringSSL
[863 / 1407] CNIOBoringSSL
[867 / 1407] CNIOBoringSSL
[868 / 1407] CNIOBoringSSL
[870 / 1407] CNIOBoringSSL
[873 / 1407] CNIOBoringSSL
[876 / 1407] secp256k1_implementation
[888 / 1407] ArgumentParserToolInfo
[891 / 1407] CCryptoBoringSSLShims
[899 / 1407] CCryptoBoringSSL
[905 / 1407] CCryptoBoringSSL
[913 / 1407] CNIOAtomics
[920 / 1407] CCryptoBoringSSL
[926 / 1407] CCryptoBoringSSL
[938 / 1407] CCryptoBoringSSL
[949 / 1407] CCryptoBoringSSL
[957 / 1407] CCryptoBoringSSL
[966 / 1407] CCryptoBoringSSL
[983 / 1407] CCryptoBoringSSL
[992 / 1407] CCryptoBoringSSL
[1011 / 1407] CCryptoBoringSSL
[1033 / 1407] CCryptoBoringSSL
[1047 / 1407] CCryptoBoringSSL
[1058 / 1407] CCryptoBoringSSL
[1068 / 1407] CCryptoBoringSSL
[1080 / 1407] CCryptoBoringSSL
[1097 / 1407] CCryptoBoringSSL
[1108 / 1407] CCryptoBoringSSL
[1122 / 1407] CCryptoBoringSSL
[1142 / 1407] CCryptoBoringSSL
[1158 / 1407] CCryptoBoringSSL
[1173 / 1407] CCryptoBoringSSL
[1186 / 1407] CCryptoBoringSSL
[1199 / 1407] CCryptoBoringSSL
[1211 / 1407] CCryptoBoringSSL
[1226 / 1407] CCryptoBoringSSL
[1243 / 1407] CCryptoBoringSSL
[1260 / 1407] CCryptoBoringSSL
[1279 / 1407] CCryptoBoringSSL
[1294 / 1407] CCryptoBoringSSL
[1307 / 1409] RAW
[1321 / 1437] Crypto
[1333 / 1437] Crypto-product
[1334 / 1437] Crypto-product
[1335 / 1437] Crypto-product
[1339 / 1437] ContainersPreview
[1346 / 1437] ContainersPreview
[1348 / 1437] ContainersPreview
[1352 / 1438] ArgumentParser
[1352 / 1438] Crypto
[1354 / 1438] ArgumentParser-product
[1358 / 1439] ContainersPreview
[1364 / 1449] DequeModule
[1365 / 1449] ArgumentParser
[1368 / 1449] DequeModule
[1370 / 1449] DequeModule
[1370 / 1449] CCryptoBoringSSLShims
[1372 / 1449] ArgumentParser
[1372 / 1449] DequeModule
[1372 / 1449] ArgumentParser
[1375 / 1450] DequeModule
[1375 / 1451] DequeModule
[1393 / 1461] NIOCore
[1393 / 1461] DequeModule
[1393 / 1461] NIOCore
[1393 / 1462] NIOCore
[1411 / 1477] NIOPosix
[1412 / 1477] NIOPosix
[1413 / 1477] NIOEmbedded
[1415 / 1477] NIOEmbedded
[1420 / 1477] NIOPosix
[1421 / 1478] NIOEmbedded
[1424 / 1478] NIOPosix
[1437 / 1481] NIO
[1444 / 1499] NIOHTTP1
[1447 / 1499] NIOTLS
[1452 / 1499] NIOPosix
[1454 / 1499] NIOTLS-product
[1457 / 1500] NIOTLS
[1461 / 1500] NIOHTTP1
[1466 / 1500] NIOHTTP1
[1474 / 1520] NIOWebSocket
[1475 / 1520] NIOHTTP1
[1478 / 1521] NIOWebSocket
[1480 / 1521] NIOWebSocket
[1482 / 1521] NIOWebSocket
[1487 / 1521] NIOWebSocket-product
[1491 / 1521] NIOSSL
[1492 / 1522] NIOWebSocket
[1499 / 1522] NIOSSL-product
[1500 / 1523] NIOSSL-product
[1504 / 1523] NIOHTTP1
[1509 / 1524] NIOTLS
[1510 / 1524] NIOSSL
[1518 / 1533] nostr
/host/spi-builder-workspace/Sources/nostr/Protocols/NOSTR_event.swift:75:19: [1;33mwarning: [1;39mno calls to throwing functions occur within 'try' expression[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/unnecessary-effect-marker\UnnecessaryEffectMarker]8;;\]
[0;36m73 |[0;0m }
[0;36m74 |[0;0m public func encode(to encoder:Swift.Encoder) throws {
[0;36m75 |[0;0m var container = try encoder.container(keyedBy: nostr.Event.CodingKeys.self)
[0;36m|[0;0m `- [1;33mwarning: [1;39mno calls to throwing functions occur within 'try' expression[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/unnecessary-effect-marker\UnnecessaryEffectMarker]8;;\]
[0;36m76 |[0;0m try container.encode(self.uid, forKey:.uid)
[0;36m77 |[0;0m try container.encode(self.sig, forKey:.sig)
[#UnnecessaryEffectMarker]: <https://docs.swift.org/compiler/documentation/diagnostics/unnecessary-effect-marker>
[1519 / 1534] nostr
/host/spi-builder-workspace/Sources/nostr/Protocols/TAG/Instance/Name/NOSTR_tag_name_generic.swift:22:1: [1;33mwarning: [1;39mextension declares a conformance of imported type 'Character' to imported protocol 'ExpressibleByStringLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m20 |[0;0m }
[0;36m21 |[0;0m
[0;36m22 |[0;0m extension Character:NOSTR_tag_name_generic {
[0;36m|[0;0m |- [1;33mwarning: [1;39mextension declares a conformance of imported type 'Character' to imported protocol 'ExpressibleByStringLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39madd '@retroactive' to silence this warning[0;0m
[0;36m23 |[0;0m public var NOSTR_tag_name_generic:Character {
[0;36m24 |[0;0m return self
[1520 / 1534] NIOSSL
/host/spi-builder-workspace/Sources/nostr/Protocols/TAG/Instance/Name/NOSTR_tag_name_generic.swift:22:1: [1;33mwarning: [1;39mextension declares a conformance of imported type 'Character' to imported protocol 'ExpressibleByStringLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m20 |[0;0m }
[0;36m21 |[0;0m
[0;36m22 |[0;0m extension Character:NOSTR_tag_name_generic {
[0;36m|[0;0m |- [1;33mwarning: [1;39mextension declares a conformance of imported type 'Character' to imported protocol 'ExpressibleByStringLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39madd '@retroactive' to silence this warning[0;0m
[0;36m23 |[0;0m public var NOSTR_tag_name_generic:Character {
[0;36m24 |[0;0m return self
/host/spi-builder-workspace/Sources/nostr/Utils/Extensions/ByteBuffer.swift:5:1: [1;33mwarning: [1;39mextension declares a conformance of imported type 'UnsafeRawBufferPointer' to imported protocol 'RAW_encodable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m3 |[0;0m import RAW
[0;36m4 |[0;0m
[0;36m5 |[0;0m extension UnsafeRawBufferPointer:RAW_encodable {
[0;36m|[0;0m |- [1;33mwarning: [1;39mextension declares a conformance of imported type 'UnsafeRawBufferPointer' to imported protocol 'RAW_encodable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39madd '@retroactive' to silence this warning[0;0m
[0;36m6 |[0;0m public func asRAW_val<R>(_ valFunc: (inout RAW.RAW_val) throws -> R) rethrows -> R {
[0;36m7 |[0;0m var raw = RAW_val(mv_size:self.count, mv_data:UnsafeMutableRawPointer(mutating:self.baseAddress))
[1528 / 1535] nostr-cc-product
/host/spi-builder-workspace/Sources/nostr/Utils/Extensions/ByteBuffer.swift:5:1: [1;33mwarning: [1;39mextension declares a conformance of imported type 'UnsafeRawBufferPointer' to imported protocol 'RAW_encodable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m3 |[0;0m import RAW
[0;36m4 |[0;0m
[0;36m5 |[0;0m extension UnsafeRawBufferPointer:RAW_encodable {
[0;36m|[0;0m |- [1;33mwarning: [1;39mextension declares a conformance of imported type 'UnsafeRawBufferPointer' to imported protocol 'RAW_encodable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39madd '@retroactive' to silence this warning[0;0m
[0;36m6 |[0;0m public func asRAW_val<R>(_ valFunc: (inout RAW.RAW_val) throws -> R) rethrows -> R {
[0;36m7 |[0;0m var raw = RAW_val(mv_size:self.count, mv_data:UnsafeMutableRawPointer(mutating:self.baseAddress))
[1532 / 1544] nostr-cc-product
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/Relay + Catcher.swift:57:21: [1;33mwarning: [1;39mimmutable value 'subID' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m55 |[0;0m case .event(let context):
[0;36m56 |[0;0m switch context {
[0;36m57 |[0;0m case .sub(let subID, let event):
[0;36m|[0;0m `- [1;33mwarning: [1;39mimmutable value 'subID' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m58 |[0;0m #if DEBUG
[0;36m59 |[0;0m self.logger.trace("got write event.")
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/Relay + Catcher.swift:57:32: [1;33mwarning: [1;39mimmutable value 'event' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m55 |[0;0m case .event(let context):
[0;36m56 |[0;0m switch context {
[0;36m57 |[0;0m case .sub(let subID, let event):
[0;36m|[0;0m `- [1;33mwarning: [1;39mimmutable value 'event' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m58 |[0;0m #if DEBUG
[0;36m59 |[0;0m self.logger.trace("got write event.")
[#NoUsage]: <https://docs.swift.org/compiler/documentation/diagnostics/no-usage>
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/WebSockets/HTTP2WSUpgrade/WebSocket + Upgrader.swift:127:30: [1;33mwarning: [1;39m'init(base64Encoding:)' is deprecated: This API was unintentionally made public.[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration\DeprecatedDeclaration]8;;\]
[0;36m125 |[0;0m hasher.update(string: self.requestKey)
[0;36m126 |[0;0m hasher.update(string: magicWebSocketGUID)
[0;36m127 |[0;0m let expectedAcceptValue = String(base64Encoding: hasher.finish())
[0;36m|[0;0m `- [1;33mwarning: [1;39m'init(base64Encoding:)' is deprecated: This API was unintentionally made public.[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration\DeprecatedDeclaration]8;;\]
[0;36m128 |[0;0m
[0;36m129 |[0;0m #if DEBUG
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/WebSockets/HTTP2WSUpgrade/WebSocket + Upgrader.swift:147:74: [1;33mwarning: [1;39mconformance of 'WebSocketFrameEncoder' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode[0;0m
[0;36m145 |[0;0m useHandlers.append(WebSocketProtocolErrorHandler())
[0;36m146 |[0;0m }
[0;36m147 |[0;0m let upgradeFuture:EventLoopFuture<Void> = context.pipeline.addHandler(WebSocketFrameEncoder()).flatMap { [uh = useHandlers, chan = context.channel, upR = upgradeResponse, upI = self.upgradeInitiator] in
[0;36m|[0;0m `- [1;33mwarning: [1;39mconformance of 'WebSocketFrameEncoder' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode[0;0m
[0;36m148 |[0;0m context.pipeline.addHandlers(uh).flatMap { [ch = chan, ur = upR, ui = upI] in
[0;36m149 |[0;0m ui(ch, ur)
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOWebSocket/WebSocketFrameEncoder.swift:127:1: [1;39mnote: [1;39mconformance of 'WebSocketFrameEncoder' to 'Sendable' has been explicitly marked unavailable here[0;0m
[0;36m125 |[0;0m
[0;36m126 |[0;0m @available(*, unavailable)
[0;36m127 |[0;0m extension WebSocketFrameEncoder: Sendable {}
[0;36m|[0;0m `- [1;39mnote: [1;39mconformance of 'WebSocketFrameEncoder' to 'Sendable' has been explicitly marked unavailable here[0;0m
[0;36m128 |[0;0m
[0;36m129 |[0;0m extension ByteBuffer {
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/WebSockets/WebSocket.swift:99:35: [1;33mwarning: [1;39mtype 'WebSocket.InitialRequestWriter' does not conform to the 'Sendable' protocol[0;0m
[0;36m97 |[0;0m timeoutTask.cancel()
[0;36m98 |[0;0m // the upgrade succeeded. remove the initial request writer.
[0;36m99 |[0;0m channel.pipeline.removeHandler(initialRequestWriter, promise:nil)
[0;36m|[0;0m `- [1;33mwarning: [1;39mtype 'WebSocket.InitialRequestWriter' does not conform to the 'Sendable' protocol[0;0m
[0;36m100 |[0;0m
[0;36m101 |[0;0m })
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/WebSockets/HTTP2WSUpgrade/RelayInitialHTTPRequestWriter.swift:9:23: [1;39mnote: [1;39mclass 'InitialRequestWriter' does not conform to the 'Sendable' protocol[0;0m
[0;36m7 |[0;0m
[0;36m8 |[0;0m /// writes the initial HTTP request to the channel. this is a channel handler that is removed after the request is written.
[0;36m9 |[0;0m internal final class InitialRequestWriter: ChannelInboundHandler, RemovableChannelHandler {
[0;36m|[0;0m `- [1;39mnote: [1;39mclass 'InitialRequestWriter' does not conform to the 'Sendable' protocol[0;0m
[0;36m10 |[0;0m typealias InboundIn = HTTPClientResponsePart
[0;36m11 |[0;0m typealias OutboundOut = HTTPClientRequestPart
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[1535 / 1544] nostr-cc-product
[1538 / 1544] nostr-cc-product
/host/spi-builder-workspace/Sources/nostr-cc/Extensions/KeyPair.swift:22:16: [1;33mwarning: [1;39mstring interpolation produces a debug description for a function value; did you mean to make this explicit?[0;0m
[0;36m20 |[0;0m switch hex {
[0;36m21 |[0;0m case true:
[0;36m22 |[0;0m print(" \([4;39msecretKey.hexEncodedString[0;0m)")
[0;36m|[0;0m | `- [1;39mnote: [1;39muse 'String(describing:)' to silence this warning[0;0m
[0;36m|[0;0m `- [1;33mwarning: [1;39mstring interpolation produces a debug description for a function value; did you mean to make this explicit?[0;0m
[0;36m23 |[0;0m case false:
[0;36m24 |[0;0m print(" \(secretKey.nsecString())")
/host/spi-builder-workspace/Sources/nostr-cc/CLI/CLI + Relay.swift:34:9: [1;33mwarning: [1;39minitialization of immutable value 'relayConn' was never used; consider replacing with assignment to '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m32 |[0;0m let readKey = try nostr.KeyPair.fromJSONEncodedPath(baseURL)
[0;36m33 |[0;0m let buildConf = nostr.Relay.Client.Configuration(authenticationKey:readKey)
[0;36m34 |[0;0m let relayConn = try nostr.Relay.connect(url:nostr.Relay.URL(url), configuration: buildConf, on:mainEventLoop.next()).wait()
[0;36m|[0;0m `- [1;33mwarning: [1;39minitialization of immutable value 'relayConn' was never used; consider replacing with assignment to '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m35 |[0;0m
[0;36m36 |[0;0m sleep(512)
/host/spi-builder-workspace/Sources/nostr-cc/CLI/CLI + Relay.swift:65:128: [1;33mwarning: [1;39mtype 'Relay' does not conform to the 'Sendable' protocol[0;0m
[0;36m63 |[0;0m let readKey = try nostr.KeyPair.fromJSONEncodedPath(baseURL)
[0;36m64 |[0;0m let buildConf = nostr.Relay.Client.Configuration(authenticationKey:readKey)
[0;36m65 |[0;0m let relayConn = try await nostr.Relay.connect(url:nostr.Relay.URL(url), configuration: buildConf, on:mainEventLoop.next()).get()
[0;36m|[0;0m `- [1;33mwarning: [1;39mtype 'Relay' does not conform to the 'Sendable' protocol[0;0m
[0;36m66 |[0;0m
[0;36m67 |[0;0m var unsignedEvent = nostr.Event.Unsigned(kind:nostr.Event.Kind.text_note)
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/Relay.swift:9:15: [1;39mnote: [1;39mstruct 'Relay' does not conform to the 'Sendable' protocol[0;0m
[0;36m7 |[0;0m import var NIOPosix.TCP_NODELAY
[0;36m8 |[0;0m
[0;36m9 |[0;0m public struct Relay {
[0;36m|[0;0m `- [1;39mnote: [1;39mstruct 'Relay' does not conform to the 'Sendable' protocol[0;0m
[0;36m10 |[0;0m
[0;36m11 |[0;0m #if DEBUG
/host/spi-builder-workspace/Sources/nostr-cc/CLI/CLI + Relay.swift:3:1: [1;33mwarning: [1;39madd '@preconcurrency' to suppress 'Sendable'-related warnings from module 'nostr'[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/add-preconcurrency-import\AddPreconcurrencyImport]8;;\]
[0;36m1 |[0;0m import ArgumentParser
[0;36m2 |[0;0m import NIO
[0;36m3 |[0;0m import nostr
[0;36m|[0;0m `- [1;33mwarning: [1;39madd '@preconcurrency' to suppress 'Sendable'-related warnings from module 'nostr'[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/add-preconcurrency-import\AddPreconcurrencyImport]8;;\]
[0;36m4 |[0;0m import struct Foundation.URL
[0;36m5 |[0;0m import class Foundation.FileManager
/host/spi-builder-workspace/Sources/nostr-cc/CLI/CLI + Relay.swift:71:60: [1;33mwarning: [1;39mtype 'Relay.Publishing' does not conform to the 'Sendable' protocol[0;0m
[0;36m69 |[0;0m let newEvent = try unsignedEvent.sign(to:nostr.Event.Signed.self, as:readKey)
[0;36m70 |[0;0m CLI.logger.info("posting event: \(newEvent.uid.description.prefix(8))")
[0;36m71 |[0;0m let result = try await relayConn.write(event:newEvent).get()
[0;36m|[0;0m `- [1;33mwarning: [1;39mtype 'Relay.Publishing' does not conform to the 'Sendable' protocol[0;0m
[0;36m72 |[0;0m result.promise.futureResult.whenComplete { getResult in
[0;36m73 |[0;0m switch getResult {
/host/spi-builder-workspace/Sources/nostr/Network/NIO/Relay/Relay + Publishing.swift:9:16: [1;39mnote: [1;39mstruct 'Publishing' does not conform to the 'Sendable' protocol[0;0m
[0;36m7 |[0;0m /// used to track track the OK response from a relay when publishing an event.
[0;36m8 |[0;0m /// - see nostr nip-20 for more details.
[0;36m9 |[0;0m public struct Publishing {
[0;36m|[0;0m `- [1;39mnote: [1;39mstruct 'Publishing' does not conform to the 'Sendable' protocol[0;0m
[0;36m10 |[0;0m /// represents a direct response from the relay explaining the circumstances of the failed publish.
[0;36m11 |[0;0m public struct Failure:Swift.Error {
/host/spi-builder-workspace/Sources/nostr-cc/CLI/CLI + Relay.swift:74:25: [1;33mwarning: [1;39mimmutable value 'event' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m72 |[0;0m result.promise.futureResult.whenComplete { getResult in
[0;36m73 |[0;0m switch getResult {
[0;36m74 |[0;0m case .success(let event):
[0;36m|[0;0m `- [1;33mwarning: [1;39mimmutable value 'event' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m75 |[0;0m CLI.logger.info("successfully posted event: \(newEvent.uid.description.prefix(8))")
[0;36m76 |[0;0m case .failure(let error):
/host/spi-builder-workspace/Sources/nostr-cc/CLI/CLI + Relay.swift:75:54: [1;33mwarning: [1;39mcapture of 'newEvent' with non-Sendable type 'Event.Signed' in a '@Sendable' closure[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures\SendableClosureCaptures]8;;\]
[0;36m73 |[0;0m switch getResult {
[0;36m74 |[0;0m case .success(let event):
[0;36m75 |[0;0m CLI.logger.info("successfully posted event: \(newEvent.uid.description.prefix(8))")
[0;36m|[0;0m `- [1;33mwarning: [1;39mcapture of 'newEvent' with non-Sendable type 'Event.Signed' in a '@Sendable' closure[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures\SendableClosureCaptures]8;;\]
[0;36m76 |[0;0m case .failure(let error):
[0;36m77 |[0;0m print("event failed: \(error)")
/host/spi-builder-workspace/Sources/nostr/Event/Event.swift:27:16: [1;39mnote: [1;39mstruct 'Signed' does not conform to the 'Sendable' protocol[0;0m
[0;36m25 |[0;0m
[0;36m26 |[0;0m /// represents an event whose contents are immutable after signing
[0;36m27 |[0;0m public struct Signed:NOSTR_event_signed {
[0;36m|[0;0m `- [1;39mnote: [1;39mstruct 'Signed' does not conform to the 'Sendable' protocol[0;0m
[0;36m28 |[0;0m /// the unique identifier for the event
[0;36m29 |[0;0m public let uid:UID
[#AddPreconcurrencyImport]: <https://docs.swift.org/compiler/documentation/diagnostics/add-preconcurrency-import>
[#NoUsage]: <https://docs.swift.org/compiler/documentation/diagnostics/no-usage>
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[1544 / 1546] nostr
[1546 / 1546] nostr-cc-product
Build complete! (56.08 secs)
Build complete.
{
"dependencies" : [
{
"identity" : "swift-argument-parser",
"requirement" : {
"range" : [
{
"lower_bound" : "1.2.2",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-argument-parser.git"
},
{
"identity" : "swift-nio",
"requirement" : {
"range" : [
{
"lower_bound" : "2.32.1",
"upper_bound" : "3.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-nio.git"
},
{
"identity" : "swift-nio-ssl",
"requirement" : {
"range" : [
{
"lower_bound" : "2.5.0",
"upper_bound" : "3.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-nio-ssl.git"
},
{
"identity" : "swift-extras-base64",
"requirement" : {
"range" : [
{
"lower_bound" : "0.5.0",
"upper_bound" : "1.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/swift-extras/swift-extras-base64.git"
},
{
"identity" : "swift-log",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-log.git"
},
{
"identity" : "quickjson",
"requirement" : {
"range" : [
{
"lower_bound" : "0.1.1",
"upper_bound" : "1.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/tannerdsilva/QuickJSON.git"
},
{
"identity" : "rawdog",
"requirement" : {
"range" : [
{
"lower_bound" : "0.0.7",
"upper_bound" : "1.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/tannerdsilva/rawdog.git"
},
{
"identity" : "secp256k1.swift",
"requirement" : {
"range" : [
{
"lower_bound" : "0.7.0",
"upper_bound" : "0.8.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/GigaBitcoin/secp256k1.swift"
},
{
"identity" : "swift-crypto",
"requirement" : {
"range" : [
{
"lower_bound" : "2.5.0",
"upper_bound" : "3.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-crypto.git"
},
{
"identity" : "swift-system",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-system.git"
}
],
"manifest_display_name" : "nostr-kit",
"name" : "nostr-kit",
"path" : "/host/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "12.0"
},
{
"name" : "ios",
"version" : "16.0"
},
{
"name" : "watchos",
"version" : "8.0"
},
{
"name" : "tvos",
"version" : "15.0"
}
],
"products" : [
{
"name" : "nostr",
"targets" : [
"nostr"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "nostr-cc",
"targets" : [
"nostr-cc"
],
"type" : {
"executable" : null
}
}
],
"targets" : [
{
"c99name" : "nostr_kitTests",
"module_type" : "SwiftTarget",
"name" : "nostr-kitTests",
"path" : "Tests/nostr-kitTests",
"sources" : [
"Bech32Tests.swift",
"DateTests.swift",
"HexTests.swift",
"nostr_eventTests.swift",
"nostr_keyTests.swift",
"nostr_kitTests.swift"
],
"target_dependencies" : [
"nostr"
],
"type" : "test"
},
{
"c99name" : "nostr_cc",
"module_type" : "SwiftTarget",
"name" : "nostr-cc",
"path" : "Sources/nostr-cc",
"product_dependencies" : [
"ArgumentParser"
],
"product_memberships" : [
"nostr-cc"
],
"sources" : [
"CLI/CLI + KeyPair.swift",
"CLI/CLI + Relay.swift",
"CLI/CLI.swift",
"Colors.swift",
"Extensions/KeyPair.swift",
"Extensions/String.swift",
"Profile.swift",
"nostr-cc.swift"
],
"target_dependencies" : [
"nostr"
],
"type" : "executable"
},
{
"c99name" : "nostr",
"module_type" : "SwiftTarget",
"name" : "nostr",
"path" : "Sources/nostr",
"product_dependencies" : [
"ExtrasBase64",
"NIOSSL",
"NIO",
"NIOWebSocket",
"Logging",
"QuickJSON",
"secp256k1",
"RAW",
"Crypto",
"SystemPackage"
],
"product_memberships" : [
"nostr",
"nostr-cc"
],
"sources" : [
"Errors.swift",
"Event/Event + Commitment.swift",
"Event/Event + Kind.swift",
"Event/Event + NIP42.swift",
"Event/Event.swift",
"Event/Tags/Event + Tag + Name.swift",
"Event/Tags/Event + Tag.swift",
"Event/Tags/Event + Tags.swift",
"Filter/Filter.swift",
"Frozen Structs/Date.swift",
"Frozen Structs/Event + Signature.swift",
"Frozen Structs/Event + UID.swift",
"Frozen Structs/Key/KeyPair.swift",
"Frozen Structs/Key/PublicKey.swift",
"Frozen Structs/Key/SecretKey.swift",
"Hex.swift",
"Message/Message.swift",
"Network/NIO/Relay/Configurations/ClientConfiguration.swift",
"Network/NIO/Relay/Relay + Catcher.swift",
"Network/NIO/Relay/Relay + Consumable.swift",
"Network/NIO/Relay/Relay + Error.swift",
"Network/NIO/Relay/Relay + Handler.swift",
"Network/NIO/Relay/Relay + Publishing.swift",
"Network/NIO/Relay/Relay.swift",
"Network/NIO/Relay/URL/RelayURL + NOSTR_tag_infofield.swift",
"Network/NIO/Relay/URL/RelayURL + Parser.swift",
"Network/NIO/Relay/URL/RelayURL + Split.swift",
"Network/NIO/Relay/URL/RelayURL.swift",
"Network/NIO/Relay/URL/RelayURLParameters.swift",
"Network/NIO/Relay/WebSockets/HTTP2WSUpgrade/RelayInitialHTTPRequestWriter.swift",
"Network/NIO/Relay/WebSockets/HTTP2WSUpgrade/WebSocket + Upgrader.swift",
"Network/NIO/Relay/WebSockets/WebSocket + FrameSequence.swift",
"Network/NIO/Relay/WebSockets/WebSocket + Handler.swift",
"Network/NIO/Relay/WebSockets/WebSocket.swift",
"Protocols/BECH32.swift",
"Protocols/HEX/HEX_convertible.swift",
"Protocols/HEX/HEX_decodable.swift",
"Protocols/HEX/HEX_encodable.swift",
"Protocols/NOSTR_date.swift",
"Protocols/NOSTR_event.swift",
"Protocols/NOSTR_filter.swift",
"Protocols/NOSTR_kind.swift",
"Protocols/NOSTR_message.swift",
"Protocols/TAG/Instance/Additional/NOSTR_tag_addlfield.swift",
"Protocols/TAG/Instance/Index/NOSTR_tag_infofield.swift",
"Protocols/TAG/Instance/NOSTR_tag.swift",
"Protocols/TAG/Instance/Name/NOSTR_tag_name.swift",
"Protocols/TAG/Instance/Name/NOSTR_tag_name_generic.swift",
"Protocols/TAG/NOSTR_tagged.swift",
"Utils/Extensions/ByteBuffer.swift",
"Utils/FlatDictionary.swift",
"Utils/RandomBytes.swift",
"Utils/SHA1.swift",
"Utils/SHA256.swift",
"bech32.swift",
"nostr.swift"
],
"target_dependencies" : [
"cnostr"
],
"type" : "library"
},
{
"c99name" : "cnostr",
"module_type" : "ClangTarget",
"name" : "cnostr",
"path" : "Sources/cnostr",
"product_memberships" : [
"nostr",
"nostr-cc"
],
"sources" : [
"cnostr.c"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
basic-6.4-latest: Pulling from saguaro1/spi-images
Digest: sha256:c77fcce225e223ac0fafed844619173fc6de8d62dd560eeb28db3182af6a282b
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:basic-6.4-latest
Done.