Skip to content

Commit f9f8226

Browse files
committed
improved logging
1 parent 7d793f0 commit f9f8226

5 files changed

Lines changed: 30 additions & 15 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ quickpkg ~/Downloads/Firefox.dmg --sign "Developer ID Installer: Your Name"
146146

147147
### Verbosity
148148

149-
#### `-v`, `-vv`, `-vvv`
149+
#### `-v`, `-vv`
150150

151-
Increase verbosity. Use `-v` for basic info, `-vv` for more detail, `-vvv` for full command output including all shell commands.
151+
Increase verbosity. Use `-v` for basic info, `-vv` for more detail, including all shell commands.
152152

153153
## Background
154154

Sources/quickpkg/ArchiveExtractor.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct ArchiveExtractor: Sendable {
1616

1717
let command: FilePath = "/usr/bin/unzip"
1818
let arguments: Arguments = ["-q", archivePath.path, "-d", destinationDir.path]
19-
logger.log("Executing: \(command) \(arguments)", level: 3)
19+
logger.log("Executing: \(command) \(arguments)", level: 2)
2020

2121
let result = try await Subprocess.run(
2222
.path(command),
@@ -28,6 +28,7 @@ struct ArchiveExtractor: Sendable {
2828
guard result.terminationStatus.isSuccess else {
2929
throw QuickPkgError.archiveExtractionFailed(result.standardError ?? "unzip failed")
3030
}
31+
logger.log("Zip extraction completed", level: 2)
3132
}
3233

3334
/// Extract a xip archive to the specified directory
@@ -36,7 +37,7 @@ struct ArchiveExtractor: Sendable {
3637

3738
let command: FilePath = "/usr/bin/xip"
3839
let arguments: Arguments = ["--expand", archivePath.path]
39-
logger.log("Executing: \(command) \(arguments)", level: 3)
40+
logger.log("Executing: \(command) \(arguments)", level: 2)
4041

4142
// xip --expand extracts to the current directory, so we need to run it from the destination
4243
let result = try await Subprocess.run(
@@ -50,5 +51,6 @@ struct ArchiveExtractor: Sendable {
5051
guard result.terminationStatus.isSuccess else {
5152
throw QuickPkgError.archiveExtractionFailed(result.standardError ?? "xip failed")
5253
}
54+
logger.log("Xip extraction completed", level: 2)
5355
}
5456
}

Sources/quickpkg/DMGManager.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ actor DMGManager {
2020
func hasSLA(at path: URL) async throws -> Bool {
2121
let command: FilePath = "/usr/bin/hdiutil"
2222
let arguments: Arguments = ["imageinfo", path.path, "-plist"]
23-
logger.log("Executing: \(command) \(arguments)", level: 3)
23+
logger.log("Executing: \(command) \(arguments)", level: 2)
2424

2525
let result = try await Subprocess.run(
2626
.path(command),
@@ -45,7 +45,7 @@ actor DMGManager {
4545
func existingMountPoints(for dmgPath: URL) async throws -> [URL]? {
4646
let command: FilePath = "/usr/bin/hdiutil"
4747
let arguments: Arguments = ["info", "-plist"]
48-
logger.log("Executing: \(command) \(arguments)", level: 3)
48+
logger.log("Executing: \(command) \(arguments)", level: 2)
4949

5050
let result = try await Subprocess.run(
5151
.path(command),
@@ -120,7 +120,7 @@ actor DMGManager {
120120
]
121121
let input: InputProtocol = sla ? .string("Y\n") : .none
122122

123-
logger.log("Executing: \(command) \(arguments)", level: 3)
123+
logger.log("Executing: \(command) \(arguments)", level: 2)
124124

125125
let result = try await Subprocess.run(
126126
.path(command),
@@ -162,15 +162,15 @@ actor DMGManager {
162162
func detach(_ mountPoint: URL) async throws {
163163
// Don't detach if it was already mounted before we started
164164
if wasMounted[mountPoint] == true {
165-
logger.log("Skipping detach for pre-mounted volume: \(mountPoint.path)", level: 2)
165+
logger.log("Skipping detach for pre-mounted volume: \(mountPoint.path)", level: 1)
166166
return
167167
}
168168

169169
guard mountPoint.fileExists else { return }
170170

171171
let command: FilePath = "/usr/bin/hdiutil"
172172
let arguments: Arguments = ["detach", mountPoint.path]
173-
logger.log("Executing: \(command) \(arguments)", level: 3)
173+
logger.log("Executing: \(command) \(arguments)", level: 2)
174174

175175
let result = try await Subprocess.run(
176176
.path(command),
@@ -182,7 +182,7 @@ actor DMGManager {
182182
if !result.terminationStatus.isSuccess {
183183
logger.log("Warning: Failed to detach \(mountPoint.path): \(result.standardError ?? "")", level: 1)
184184
} else {
185-
logger.log("Detached: \(mountPoint.path)", level: 2)
185+
logger.log("Detached: \(mountPoint.path)", level: 1)
186186
}
187187

188188
mountedVolumes.removeAll { $0 == mountPoint }

Sources/quickpkg/PackageBuilder.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ struct PackageBuilder: Sendable {
2828
outputPlist.path
2929
]
3030

31-
logger.log("Executing: \(command) \(arguments)", level: 3)
31+
logger.log("Executing: \(command) \(arguments)", level: 2)
3232

3333
let result = try await Subprocess.run(
3434
.path(command),
@@ -40,6 +40,7 @@ struct PackageBuilder: Sendable {
4040
guard result.terminationStatus.isSuccess else {
4141
throw QuickPkgError.pkgbuildFailed(result.standardError ?? "pkgbuild --analyze failed")
4242
}
43+
logger.log("Component plist analysis completed", level: 2)
4344
}
4445

4546
/// Build the package
@@ -74,13 +75,14 @@ struct PackageBuilder: Sendable {
7475
// Modify relocatable setting if needed
7576
if !relocatable {
7677
try PlistHandler.setRelocatable(false, in: componentPlist)
78+
logger.log("Setting package as non-relocatable", level: 1)
7779
}
7880

7981
// Remove quarantine extended attributes from payload
8082
logger.log("Removing quarantine attributes from payload", level: 1)
8183
let xattrCommand: FilePath = "/usr/bin/xattr"
8284
let xattrArgs: Arguments = ["-dr", "com.apple.quarantine", payloadDir.path]
83-
logger.log("Executing: \(xattrCommand) \(xattrArgs)", level: 3)
85+
logger.log("Executing: \(xattrCommand) \(xattrArgs)", level: 2)
8486
_ = try await Subprocess.run(
8587
.path(xattrCommand),
8688
arguments: xattrArgs,
@@ -113,9 +115,11 @@ struct PackageBuilder: Sendable {
113115

114116
if let ownership = ownership {
115117
pkgbuildArgs += ["--ownership", ownership.rawValue]
118+
logger.log("Ownership: \(ownership.rawValue)", level: 1)
116119
}
117120

118121
pkgbuildArgs += ["--compression", compression.rawValue]
122+
logger.log("Compression: \(compression.rawValue)", level: 1)
119123

120124
if let minOSVersion = minOSVersion {
121125
pkgbuildArgs += ["--min-os-version", minOSVersion]
@@ -126,6 +130,7 @@ struct PackageBuilder: Sendable {
126130
if packageType == .component {
127131
if let sign = sign {
128132
pkgbuildArgs += ["--sign", sign]
133+
logger.log("Signing identity: \(sign)", level: 1)
129134
}
130135

131136
if let keychain = keychain {
@@ -141,7 +146,7 @@ struct PackageBuilder: Sendable {
141146

142147
logger.log("Building component package: \(pkgbuildOutput)", level: 1)
143148
let arguments = Arguments(pkgbuildArgs)
144-
logger.log("Executing: \(pkgbuildCommand) \(arguments)", level: 3)
149+
logger.log("Executing: \(pkgbuildCommand) \(arguments)", level: 2)
145150

146151
let result = try await Subprocess.run(
147152
.path(pkgbuildCommand),
@@ -153,6 +158,7 @@ struct PackageBuilder: Sendable {
153158
guard result.terminationStatus.isSuccess else {
154159
throw QuickPkgError.pkgbuildFailed(result.standardError ?? "pkgbuild failed")
155160
}
161+
logger.log("Component package built successfully", level: 2)
156162

157163
// For distribution packages, run productbuild
158164
if packageType == .distribution {
@@ -201,7 +207,7 @@ struct PackageBuilder: Sendable {
201207

202208
logger.log("Building distribution package: \(outputPath)", level: 1)
203209
let arguments = Arguments(productbuildArgs)
204-
logger.log("Executing: \(command) \(arguments)", level: 3)
210+
logger.log("Executing: \(command) \(arguments)", level: 2)
205211

206212
let result = try await Subprocess.run(
207213
.path(command),
@@ -213,5 +219,6 @@ struct PackageBuilder: Sendable {
213219
guard result.terminationStatus.isSuccess else {
214220
throw QuickPkgError.pkgbuildFailed(result.standardError ?? "productbuild failed")
215221
}
222+
logger.log("Distribution package built successfully", level: 2)
216223
}
217224
}

Sources/quickpkg/QuickPkg.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ struct QuickPkg: AsyncParsableCommand {
7979

8080
// MARK: - Verbosity
8181

82-
@Flag(name: .shortAndLong, help: "Increase verbosity (-v, -vv, or -vvv)")
82+
@Flag(name: .shortAndLong, help: "Increase verbosity (-v, -vv)")
8383
var verbose: Int
8484

8585
// MARK: - Run
@@ -99,8 +99,10 @@ struct QuickPkg: AsyncParsableCommand {
9999

100100
// Create temp directory for working files
101101
let tempDir = try TempDirectory()
102+
logger.log("Created temp directory: \(tempDir.path.path)", level: 2)
102103
defer {
103104
if clean {
105+
logger.log("Cleaning up temp directory", level: 2)
104106
tempDir.cleanup()
105107
}
106108
}
@@ -132,6 +134,7 @@ struct QuickPkg: AsyncParsableCommand {
132134
let payloadDir = tempDir.path.appendingPathComponent("payload")
133135
try FileManager.default.createDirectory(at: payloadDir, withIntermediateDirectories: true)
134136
let payloadAppURL = payloadDir.appendingPathComponent(appURL.lastPathComponent)
137+
logger.log("Copying app to payload: \(payloadAppURL.path)", level: 2)
135138
try FileManager.default.copyItem(at: appURL, to: payloadAppURL)
136139

137140
// Detach DMG now that we've copied the app
@@ -148,13 +151,15 @@ struct QuickPkg: AsyncParsableCommand {
148151
let scriptsDir = try prepareScripts(tempDir: tempDir, logger: logger)
149152

150153
// Build the package
154+
logger.log("Package type: \(packageType == .distribution ? "distribution" : "component")", level: 1)
151155
let packageBuilder = PackageBuilder(logger: logger)
152156
let outputPath = determineOutputPath(
153157
output: output,
154158
name: metadata.name,
155159
version: metadata.version,
156160
identifier: metadata.identifier
157161
)
162+
logger.log("Output path: \(outputPath)", level: 1)
158163

159164
try await packageBuilder.build(
160165
payloadDir: payloadDir,
@@ -268,6 +273,7 @@ struct QuickPkg: AsyncParsableCommand {
268273
throw QuickPkgError.scriptNotFound(scriptsPath)
269274
}
270275
scriptsDir = scriptsURL
276+
logger.log("Using scripts from: \(scriptsPath)", level: 1)
271277
}
272278

273279
guard preinstall != nil || postinstall != nil else {

0 commit comments

Comments
 (0)