From 5dec54f798b36f4cf36b8aa3077b0840282b8781 Mon Sep 17 00:00:00 2001 From: giginet Date: Tue, 17 Mar 2026 11:51:56 +0900 Subject: [PATCH] Propagate underlying error in Runner.Error.invalidPackage When DescriptionPackage initialization fails, the original error was discarded and replaced with a generic invalidPackage error containing only the package directory path. This made it impossible to diagnose the root cause of failures such as package resolution or manifest parsing errors. Add a Swift.Error associated value to the invalidPackage case so the underlying error details are preserved and displayed to the user. Co-Authored-By: Claude Opus 4.6 (1M context) --- Sources/ScipioKit/Runner.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index 06af5a17..1c940efc 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -13,7 +13,7 @@ public struct Runner { } public enum Error: Swift.Error, LocalizedError { - case invalidPackage(URL) + case invalidPackage(URL, Swift.Error) case platformNotSpecified case compilerError(Swift.Error) @@ -21,8 +21,8 @@ public struct Runner { switch self { case .platformNotSpecified: return "Any platforms are not spcified in Package.swift" - case .invalidPackage(let path): - return "Invalid package. \(path.path)" + case .invalidPackage(let path, let underlyingError): + return "Invalid package. \(path.path)\n\(underlyingError.localizedDescription)" case .compilerError(let error): return "\(error.localizedDescription)" } @@ -63,7 +63,7 @@ public struct Runner { onlyUseVersionsFromResolvedFile: options.shouldOnlyUseVersionsFromResolvedFile ) } catch { - throw Error.invalidPackage(packageDirectory) + throw Error.invalidPackage(packageDirectory, error) } let buildOptions = try options.buildOptionsContainer.makeBuildOptions(descriptionPackage: descriptionPackage)