From f446334bd9b6a282f886e077aefef38f4fa472d3 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 14 Oct 2025 11:46:50 -0400 Subject: [PATCH 1/2] Work around unable to read all of the bytes error --- Package.swift | 1 + .../BuildSwiftlyRelease.swift | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index c550ffd5..7d806433 100644 --- a/Package.swift +++ b/Package.swift @@ -137,6 +137,7 @@ let package = Package( .target(name: "LinuxPlatform", condition: .when(platforms: [.linux])), .target(name: "MacOSPlatform", condition: .when(platforms: [.macOS])), .product(name: "ArgumentParser", package: "swift-argument-parser"), + .product(name: "_NIOFileSystem", package: "swift-nio"), ], path: "Tools/build-swiftly-release" ), diff --git a/Tools/build-swiftly-release/BuildSwiftlyRelease.swift b/Tools/build-swiftly-release/BuildSwiftlyRelease.swift index a9257483..f8bfa7aa 100644 --- a/Tools/build-swiftly-release/BuildSwiftlyRelease.swift +++ b/Tools/build-swiftly-release/BuildSwiftlyRelease.swift @@ -3,6 +3,7 @@ import AsyncHTTPClient import Foundation import SwiftlyCore import SystemPackage +import NIOFileSystem #if os(macOS) import MacOSPlatform @@ -16,7 +17,7 @@ let currentPlatform = MacOS() let currentPlatform = Linux() #endif -typealias fs = FileSystem +typealias fs = SwiftlyCore.FileSystem typealias sys = SystemCommand extension Runnable { @@ -156,12 +157,14 @@ struct BuildSwiftlyRelease: AsyncParsableCommand { guard libarchiveResponse.status == .ok else { throw Error(message: "Download failed with status: \(libarchiveResponse.status)") } - let buf = try await libarchiveResponse.body.collect(upTo: 20 * 1024 * 1024) - guard let contents = buf.getBytes(at: 0, length: buf.readableBytes) else { - throw Error(message: "Unable to read all of the bytes") + + try await NIOFileSystem.FileSystem.shared.withFileHandle(forWritingAt: buildCheckoutsDir / "libarchive-\(libArchiveVersion).tar.gz", options: .newFile(replaceExisting: true)) { fileHandle in + var pos: Int64 = 0 + + for try await buffer in libarchiveResponse.body { + pos += try await fileHandle.write(contentsOf: buffer, toAbsoluteOffset: pos) + } } - let data = Data(contents) - try data.write(to: buildCheckoutsDir / "libarchive-\(libArchiveVersion).tar.gz") let libArchiveTarShaActual = try await sys.sha256sum(files: buildCheckoutsDir / "libarchive-\(libArchiveVersion).tar.gz").output(currentPlatform) guard let libArchiveTarShaActual, libArchiveTarShaActual.starts(with: libArchiveTarSha) else { From bc852feda19eeff4b7addd2de3d5a82daad8e4c1 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Tue, 14 Oct 2025 11:57:55 -0400 Subject: [PATCH 2/2] Fix formatting error --- Tools/build-swiftly-release/BuildSwiftlyRelease.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/build-swiftly-release/BuildSwiftlyRelease.swift b/Tools/build-swiftly-release/BuildSwiftlyRelease.swift index f8bfa7aa..07216d8b 100644 --- a/Tools/build-swiftly-release/BuildSwiftlyRelease.swift +++ b/Tools/build-swiftly-release/BuildSwiftlyRelease.swift @@ -1,9 +1,9 @@ import ArgumentParser import AsyncHTTPClient import Foundation +import NIOFileSystem import SwiftlyCore import SystemPackage -import NIOFileSystem #if os(macOS) import MacOSPlatform