in Sources/PackageRegistryTool/Tool.swift [56:104]
func run() throws {
let configuration = PackageRegistryClient.Configuration(url: self.packageRegistry)
let registryClient = PackageRegistryClient(httpClientProvider: .createNew, configuration: configuration)
defer { try! registryClient.syncShutdown() }
let archiveURL = URL(fileURLWithPath: self.archivePath)
let archiveData = try Data(contentsOf: archiveURL)
print("Archive size: \(archiveData.count)")
let promise = registryClient.httpClient.eventLoopGroup.next().makePromise(of: HTTPClient.Response.self)
Task.detached {
do {
let response: HTTPClient.Response
if let metadata = self.metadata {
response = try await registryClient.createPackageRelease(scope: self.scope,
name: self.name,
version: self.version,
sourceArchive: archiveData,
metadataJSON: metadata,
deadline: NIODeadline.now() + .seconds(5))
} else {
var metadata: Data?
if let metadataPath = self.metadataPath {
metadata = try Data(contentsOf: URL(fileURLWithPath: metadataPath))
}
response = try await registryClient.createPackageRelease(scope: self.scope,
name: self.name,
version: self.version,
sourceArchive: archiveData,
metadataJSON: metadata,
deadline: NIODeadline.now() + .seconds(5))
}
promise.succeed(response)
} catch {
promise.fail(error)
}
}
let response = try promise.futureResult.wait()
guard response.status == .created || response.status == .accepted else {
let responseBody = response.body
let responseData = responseBody.map { Data(buffer: $0) }
print("Publication failed with status \(response.status). \(String(describing: responseData.map { String(data: $0, encoding: .utf8) }))")
return
}
print("Success!")
}