From c32f61eb2138a26c2bf85ab977b5432f6d1953ac Mon Sep 17 00:00:00 2001 From: Alex Guretzki Date: Wed, 30 Apr 2025 11:48:32 +0200 Subject: [PATCH] Adding logging to Shell + switching to macos for reference packages --- Package.resolved | 5 +++++ Package.swift | 1 + ReferencePackages/.DS_Store | Bin 6148 -> 6148 bytes .../ReferencePackage/Package.swift | 2 +- .../UpdatedPackage/Package.swift | 2 +- .../ReferencePackage/ReferencePackage.swift | 8 ++++++++ .../SwiftPackageFileAnalyzer.swift | 4 ++-- .../PADProjectBuilder/ProjectBuilder.swift | 4 ++-- .../ProjectSetup/ProjectSetupHelper.swift | 3 ++- .../SwiftInterfaceProducer/XcodeTools.swift | 4 ++-- .../Shared/Package/ShellModule/Shell.swift | 11 ++++++++++- .../SwiftInterfaceFileLocator.swift | 2 +- .../ReferencePackageTests.swift | 17 +++++++++++------ ...ference-changes-swift-interface-private.md | 18 ++++++++++++++++++ ...eference-changes-swift-interface-public.md | 18 ++++++++++++++++++ .../SwiftPackageFileAnalyzerTests.swift | 2 ++ 16 files changed, 84 insertions(+), 17 deletions(-) diff --git a/Package.resolved b/Package.resolved index 7e368e4..96db320 100644 --- a/Package.resolved +++ b/Package.resolved @@ -50,8 +50,13 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/SimplyDanny/SwiftLintPlugins", "state" : { +<<<<<<< Updated upstream "revision" : "7a3d77f3dd9f91d5cea138e52c20cfceabf352de", "version" : "0.58.2" +======= + "revision" : "8545ddf4de043e6f2051c5cf204f39ef778ebf6b", + "version" : "0.59.1" +>>>>>>> Stashed changes } } ], diff --git a/Package.swift b/Package.swift index d3b84f1..b4d7f2b 100644 --- a/Package.swift +++ b/Package.swift @@ -124,6 +124,7 @@ let package = Package( ), .target( name: "ShellModule", + dependencies: ["PADLogging"], path: "Sources/Shared/Package/ShellModule" ), .target( diff --git a/ReferencePackages/.DS_Store b/ReferencePackages/.DS_Store index 699f56d84a89cbc25ae2841b04b9d97e72ad0037..564b2fd2460b8d4f59ec3ef1dabd613a23c22ea2 100644 GIT binary patch delta 293 zcmZoMXfc=|#>B!ku~2NHo+2aH#(>?7iw`g}F>+0IU{aZEz;vZPsl2!#DJMUPfq`L1 zQbA5;afyM!HAW_87FITP4t5T1j@aOg{PN(E#FEltr^KRY5HBP@KPL&sPD~2ROf8QW z5OL1WD@n}EODzIx$V^EEDv1ft%uC5Hcgio#ODP8H4TeZ?aB^_Q3rJMER-0Oy=qMPQ z8`kP5R9hNa>L{3)S=QEaa)>JHTL;Bw=j7()cL5y-1dNOjnt>Ne!>I1bHOvZ=S(sN( ze$FJzQx;s5my@5D4$`r)(3^2HI|n}pFc3CxWd6=PnP0?_185EtNblwdku}T!+y_qX delta 74 zcmZoMXfc=|#>B)qu~2NHo+2a1#(>?7j2x34SX3q(uw0q^f_3#~Q4S%Ni4AU>**W+* dfGRf&a(ri=%rD}|!2kq|3=AxrBSh9P0|4}n5?=rS diff --git a/ReferencePackages/ReferencePackage/Package.swift b/ReferencePackages/ReferencePackage/Package.swift index 95768bb..56bdf92 100644 --- a/ReferencePackages/ReferencePackage/Package.swift +++ b/ReferencePackages/ReferencePackage/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "ReferencePackage", - platforms: [.iOS(.v17)], + platforms: [.macOS(.v14)], products: [ // Products define the executables and libraries a package produces, making them visible to other packages. .library( diff --git a/ReferencePackages/UpdatedPackage/Package.swift b/ReferencePackages/UpdatedPackage/Package.swift index 2f90abe..db0833f 100644 --- a/ReferencePackages/UpdatedPackage/Package.swift +++ b/ReferencePackages/UpdatedPackage/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "ReferencePackage", - platforms: [.iOS(.v17)], + platforms: [.macOS(.v14)], products: [ // Products define the executables and libraries a package produces, making them visible to other packages. .library( diff --git a/ReferencePackages/UpdatedPackage/Sources/ReferencePackage/ReferencePackage.swift b/ReferencePackages/UpdatedPackage/Sources/ReferencePackage/ReferencePackage.swift index 2625144..a276621 100644 --- a/ReferencePackages/UpdatedPackage/Sources/ReferencePackage/ReferencePackage.swift +++ b/ReferencePackages/UpdatedPackage/Sources/ReferencePackage/ReferencePackage.swift @@ -224,3 +224,11 @@ public extension CustomEnum where T == String { return nil } } + +@available(macOS 14, *) +public enum NewEnumAvailableInVersion17: String, Codable, Equatable { + case case1 = "Case 1" + + @available(macOS 15, *) + public func laterAvailableFunction(){} +} diff --git a/Sources/PublicModules/PADPackageFileAnalyzer/SwiftPackageFileAnalyzer.swift b/Sources/PublicModules/PADPackageFileAnalyzer/SwiftPackageFileAnalyzer.swift index 07f4e8b..7837ccc 100644 --- a/Sources/PublicModules/PADPackageFileAnalyzer/SwiftPackageFileAnalyzer.swift +++ b/Sources/PublicModules/PADPackageFileAnalyzer/SwiftPackageFileAnalyzer.swift @@ -30,14 +30,14 @@ public struct SwiftPackageFileAnalyzer: SwiftPackageFileAnalyzing { public init(logger: (any Logging)? = nil) { self.init( fileHandler: FileManager.default, - shell: Shell(), + shell: Shell(logger: logger), logger: logger ) } package init( fileHandler: FileHandling = FileManager.default, - shell: ShellHandling = Shell(), + shell: ShellHandling, logger: (any Logging)? = nil ) { self.fileHandler = fileHandler diff --git a/Sources/PublicModules/PADProjectBuilder/ProjectBuilder.swift b/Sources/PublicModules/PADProjectBuilder/ProjectBuilder.swift index 4de7a1f..fe4fb58 100644 --- a/Sources/PublicModules/PADProjectBuilder/ProjectBuilder.swift +++ b/Sources/PublicModules/PADProjectBuilder/ProjectBuilder.swift @@ -50,7 +50,7 @@ public struct ProjectBuilder { platform: platform, swiftInterfaceType: swiftInterfaceType, fileHandler: FileManager.default, - shell: Shell(), + shell: Shell(logger: logger), logger: logger ) } @@ -60,7 +60,7 @@ public struct ProjectBuilder { platform: ProjectPlatform, swiftInterfaceType: SwiftInterfaceType, fileHandler: any FileHandling = FileManager.default, - shell: any ShellHandling = Shell(), + shell: any ShellHandling, logger: (any Logging)? ) { self.projectType = projectType diff --git a/Sources/PublicModules/PADProjectBuilder/ProjectSetup/ProjectSetupHelper.swift b/Sources/PublicModules/PADProjectBuilder/ProjectSetup/ProjectSetupHelper.swift index df8c9b0..895c556 100644 --- a/Sources/PublicModules/PADProjectBuilder/ProjectSetup/ProjectSetupHelper.swift +++ b/Sources/PublicModules/PADProjectBuilder/ProjectSetup/ProjectSetupHelper.swift @@ -26,7 +26,7 @@ struct ProjectSetupHelper: ProjectSetupHelping { init( workingDirectoryPath: String, randomStringGenerator: any RandomStringGenerating = RandomStringGenerator(), - shell: any ShellHandling = Shell(), + shell: any ShellHandling, fileHandler: any FileHandling = FileManager.default, logger: (any Logging)? ) { @@ -75,6 +75,7 @@ extension ProjectSetupHelper { ) async throws -> (old: URL, new: URL) { let projectSetupHelper = ProjectSetupHelper( workingDirectoryPath: workingDirectoryPath, + shell: Shell(logger: logger), logger: logger ) diff --git a/Sources/PublicModules/PADProjectBuilder/SwiftInterfaceProducer/XcodeTools.swift b/Sources/PublicModules/PADProjectBuilder/SwiftInterfaceProducer/XcodeTools.swift index 20325a2..e2405e3 100644 --- a/Sources/PublicModules/PADProjectBuilder/SwiftInterfaceProducer/XcodeTools.swift +++ b/Sources/PublicModules/PADProjectBuilder/SwiftInterfaceProducer/XcodeTools.swift @@ -31,7 +31,7 @@ struct XcodeTools { private let logger: Logging? init( - shell: ShellHandling = Shell(), + shell: ShellHandling, fileHandler: FileHandling = FileManager.default, logger: Logging? ) { @@ -81,7 +81,7 @@ struct XcodeTools { } let command = commandComponents.joined(separator: " ") - + return try await Task { logger?.log("📦 Archiving \(scheme) from \(projectDirectoryPath)", from: String(describing: Self.self)) diff --git a/Sources/Shared/Package/ShellModule/Shell.swift b/Sources/Shared/Package/ShellModule/Shell.swift index b45d16c..0af8d51 100644 --- a/Sources/Shared/Package/ShellModule/Shell.swift +++ b/Sources/Shared/Package/ShellModule/Shell.swift @@ -5,6 +5,7 @@ // import Foundation +import PADLogging package protocol ShellHandling { @@ -14,7 +15,13 @@ package protocol ShellHandling { package struct Shell: ShellHandling { - package init() {} + private let logger: Logging? + + package init( + logger: Logging? + ) { + self.logger = logger + } @discardableResult package func execute(_ command: String) -> String { @@ -29,6 +36,8 @@ package struct Shell: ShellHandling { task.standardInput = nil task.launch() + logger?.debug("👾 \(command)", from: String(describing: Self.self)) + let data = pipe.fileHandleForReading.readDataToEndOfFile() return String(data: data, encoding: .utf8) ?? "" } diff --git a/Sources/Shared/Public/PADSwiftInterfaceFileLocator/SwiftInterfaceFileLocator.swift b/Sources/Shared/Public/PADSwiftInterfaceFileLocator/SwiftInterfaceFileLocator.swift index 47cd512..b8d098e 100644 --- a/Sources/Shared/Public/PADSwiftInterfaceFileLocator/SwiftInterfaceFileLocator.swift +++ b/Sources/Shared/Public/PADSwiftInterfaceFileLocator/SwiftInterfaceFileLocator.swift @@ -32,7 +32,7 @@ public struct SwiftInterfaceFileLocator { ) { self.init( fileHandler: FileManager.default, - shell: Shell(), + shell: Shell(logger: logger), logger: logger ) } diff --git a/Tests/IntegrationTests/ReferencePackageTests.swift b/Tests/IntegrationTests/ReferencePackageTests.swift index daeacf4..6287fff 100644 --- a/Tests/IntegrationTests/ReferencePackageTests.swift +++ b/Tests/IntegrationTests/ReferencePackageTests.swift @@ -8,6 +8,8 @@ @testable import PADOutputGenerator @testable import PADProjectBuilder @testable import PADSwiftInterfaceDiff +@testable import PADLogging +import ShellModule import XCTest class ReferencePackageTests: XCTestCase { @@ -24,19 +26,22 @@ class ReferencePackageTests: XCTestCase { return // Nothing to build } - let xcodeTools = XcodeTools(logger: nil) + let xcodeTools = XcodeTools( + shell: Shell(logger: nil), + logger: nil + ) _ = try await xcodeTools.archive( projectDirectoryPath: oldReferencePackageDirectory.path(), scheme: "ReferencePackage", projectType: .swiftPackage, - platform: .iOS + platform: .macOS ) _ = try await xcodeTools.archive( projectDirectoryPath: newReferencePackageDirectory.path(), scheme: "ReferencePackage", projectType: .swiftPackage, - platform: .iOS + platform: .macOS ) } @@ -64,7 +69,7 @@ class ReferencePackageTests: XCTestCase { newVersionName: "new_public", warnings: [] ) - + let expectedLines = sanitizeOutput(expectedOutput).components(separatedBy: "\n") let markdownOutputLines = sanitizeOutput(markdownOutput).components(separatedBy: "\n") @@ -131,9 +136,9 @@ private extension ReferencePackageTests { var interfaceFilePath: String { switch self { case .public: - "\(XcodeTools.Constants.derivedDataPath)/Build/Products/Debug-iphoneos/ReferencePackage.swiftmodule/arm64-apple-ios.swiftinterface" + "\(XcodeTools.Constants.derivedDataPath)/Build/Products/Debug/ReferencePackage.swiftmodule/arm64-apple-macos.swiftinterface" case .private: - "\(XcodeTools.Constants.derivedDataPath)/Build/Products/Debug-iphoneos/ReferencePackage.swiftmodule/arm64-apple-ios.private.swiftinterface" + "\(XcodeTools.Constants.derivedDataPath)/Build/Products/Debug/ReferencePackage.swiftmodule/arm64-apple-macos.private.swiftinterface" } } } diff --git a/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-private.md b/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-private.md index 3c7b0d0..2cdc0cb 100644 --- a/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-private.md +++ b/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-private.md @@ -1,11 +1,29 @@ +<<<<<<< Updated upstream # ⚠️ 56 public changes detected ⚠️ _Comparing `new_private` to `old_private`_
❇️32 Additions
🔀22 Modifications
2 Removals
+======= +# ⚠️ 58 public changes detected ⚠️ +_Comparing `new_private` to `old_private`_ +
❇️34 Additions
🔀22 Modifications
2 Removals
+>>>>>>> Stashed changes --- ## `ReferencePackage` #### ❇️ Added ```javascript +@available(macOS 14, *) +public enum NewEnumAvailableInVersion17: Swift.Codable, Swift.Equatable, Swift.Hashable, Swift.RawRepresentable, Swift.String { + @available(macOS 14, *) + public typealias RawValue = Swift.String + @available(macOS 15, *) + public func laterAvailableFunction() -> Swift.Void + case case1 + public init?(rawValue: Swift.String) + public var rawValue: Swift.String { get } +} +``` +```javascript @resultBuilder public struct SomeResultBuilder { public static func buildBlock(_ components: Swift.String) -> Swift.String diff --git a/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-public.md b/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-public.md index 5ae3577..2ae911c 100644 --- a/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-public.md +++ b/Tests/IntegrationTests/Resources/expected-reference-changes-swift-interface-public.md @@ -1,11 +1,29 @@ +<<<<<<< Updated upstream # ⚠️ 47 public changes detected ⚠️ _Comparing `new_public` to `old_public`_
❇️29 Additions
🔀16 Modifications
2 Removals
+======= +# ⚠️ 49 public changes detected ⚠️ +_Comparing `new_public` to `old_public`_ +
❇️31 Additions
🔀16 Modifications
2 Removals
+>>>>>>> Stashed changes --- ## `ReferencePackage` #### ❇️ Added ```javascript +@available(macOS 14, *) +public enum NewEnumAvailableInVersion17: Swift.Codable, Swift.Equatable, Swift.Hashable, Swift.RawRepresentable, Swift.String { + @available(macOS 14, *) + public typealias RawValue = Swift.String + @available(macOS 15, *) + public func laterAvailableFunction() -> Swift.Void + case case1 + public init?(rawValue: Swift.String) + public var rawValue: Swift.String { get } +} +``` +```javascript @resultBuilder public struct SomeResultBuilder { public static func buildBlock(_ components: Swift.String) -> Swift.String diff --git a/Tests/UnitTests/SwiftPackageFileAnalyzerTests.swift b/Tests/UnitTests/SwiftPackageFileAnalyzerTests.swift index 08d7f0d..6d6224c 100644 --- a/Tests/UnitTests/SwiftPackageFileAnalyzerTests.swift +++ b/Tests/UnitTests/SwiftPackageFileAnalyzerTests.swift @@ -7,6 +7,7 @@ @testable import PADCore @testable import PADPackageFileAnalyzer @testable import PADProjectBuilder +import ShellModule @testable import SwiftPackageFileHelperModule @@ -261,6 +262,7 @@ class SwiftPackageFileAnalyzerTests: XCTestCase { } let projectAnalyzer = SwiftPackageFileAnalyzer( fileHandler: fileHandler, + shell: Shell(logger: nil), logger: nil )