Skip to content

Add createBuildDescription command to the service console #518

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,24 @@ import Foundation
import SWBProtocol
import SWBUtil

typealias ExecuteOperation = (_ startInfo: SwiftBuildMessage.BuildStartedInfo, _ session: SWBBuildServiceSession, _ sessionCreationDiagnostics: [SwiftBuildMessage.DiagnosticInfo], _ request: SWBBuildRequest) async -> SWBCommandResult

class SWBServiceConsoleCreateBuildDescriptionCommand: SWBServiceConsoleCommand {
static let name = "createBuildDescription"

static func usage() -> String {
return name + " [options] <container-path>"
}

static func validate(invocation: SWBServiceConsoleCommandInvocation) -> SWBServiceConsoleError? {
return nil
}

static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await SWBServiceConsoleBuildCommand.perform(invocation: invocation, operationFunc: generateBuildDescription)
}
}

class SWBServiceConsoleBuildCommand: SWBServiceConsoleCommand {
static let name = "build"

Expand All @@ -27,6 +45,10 @@ class SWBServiceConsoleBuildCommand: SWBServiceConsoleCommand {
}

static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await Self.perform(invocation: invocation, operationFunc: doBuildOperation)
}

static func perform(invocation: SWBServiceConsoleCommandInvocation, operationFunc: ExecuteOperation) async -> SWBCommandResult {
// Parse the arguments.
var positionalArgs = [String]()
var configuredTargetNames = [String]()
Expand Down Expand Up @@ -187,7 +209,7 @@ class SWBServiceConsoleBuildCommand: SWBServiceConsoleCommand {
return .failure(.failedCommandError(description: error.localizedDescription))
}

return await doBuildOperation(startInfo: .init(baseDirectory: baseDirectory, derivedDataPath: absoluteDerivedDataPath), session: session, sessionCreationDiagnostics: diagnostics, request: request)
return await operationFunc(.init(baseDirectory: baseDirectory, derivedDataPath: absoluteDerivedDataPath), session, diagnostics, request)
}
}
}
Expand Down Expand Up @@ -370,7 +392,19 @@ extension SWBBuildService {
}
}

fileprivate func generateBuildDescription(startInfo: SwiftBuildMessage.BuildStartedInfo, session: SWBBuildServiceSession, sessionCreationDiagnostics: [SwiftBuildMessage.DiagnosticInfo], request: SWBBuildRequest) async -> SWBCommandResult {
await runBuildOperation(startInfo: startInfo, session: session, sessionCreationDiagnostics: sessionCreationDiagnostics, request: request) {
return try await session.createBuildOperationForBuildDescriptionOnly(request: request, delegate: PlanningOperationDelegate())
}
}

fileprivate func doBuildOperation(startInfo: SwiftBuildMessage.BuildStartedInfo, session: SWBBuildServiceSession, sessionCreationDiagnostics: [SwiftBuildMessage.DiagnosticInfo], request: SWBBuildRequest) async -> SWBCommandResult {
await runBuildOperation(startInfo: startInfo, session: session, sessionCreationDiagnostics: sessionCreationDiagnostics, request: request) {
return try await session.createBuildOperation(request: request, delegate: PlanningOperationDelegate())
}
}

fileprivate func runBuildOperation(startInfo: SwiftBuildMessage.BuildStartedInfo, session: SWBBuildServiceSession, sessionCreationDiagnostics: [SwiftBuildMessage.DiagnosticInfo], request: SWBBuildRequest, createOperation: () async throws -> SWBBuildOperation) async -> SWBCommandResult {
let systemInfo: SWBSystemInfo
do {
systemInfo = try .default()
Expand Down Expand Up @@ -409,7 +443,7 @@ fileprivate func doBuildOperation(startInfo: SwiftBuildMessage.BuildStartedInfo,

// Start a build operation. We set ourself as the delegate, so we will hear about output and completion.
do {
let operation = try await session.createBuildOperation(request: request, delegate: PlanningOperationDelegate())
let operation = try await createOperation()
for try await event in try await operation.start() {
switch event {
case .buildStarted:
Expand Down Expand Up @@ -463,7 +497,8 @@ private final class PlanningOperationDelegate: SWBPlanningOperationDelegate, Sen
func registerBuildCommands() {
for commandClass in ([
SWBServiceConsoleBuildCommand.self,
SWBServiceConsolePrepareForIndexCommand.self
SWBServiceConsolePrepareForIndexCommand.self,
SWBServiceConsoleCreateBuildDescriptionCommand.self,
] as [any SWBServiceConsoleCommand.Type]) { SWBServiceConsoleCommandRegistry.registerCommandClass(commandClass) }
}

Expand Down
Loading