1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import ArgumentParser
@_spi(SwiftPMInternal)
import Basics
import CoreCommands
import Foundation
import PackageModel
import class Workspace.Workspace
import var TSCBasic.stdoutStream
struct InstallSwiftSDK: SwiftSDKSubcommand {
static let configuration = CommandConfiguration(
commandName: "install",
abstract: """
Installs a given Swift SDK bundle to a location discoverable by SwiftPM. If the artifact bundle \
is at a remote location, it's downloaded to local filesystem first.
"""
)
@OptionGroup(visibility: .hidden)
var locations: LocationOptions
@Argument(help: "A local filesystem path or a URL of a Swift SDK bundle to install.")
var bundlePathOrURL: String
@Option(help: "The checksum of the bundle generated with `swift package compute-checksum`.")
var checksum: String? = nil
func run(
hostTriple: Triple,
_ swiftSDKsDirectory: AbsolutePath,
_ observabilityScope: ObservabilityScope
) async throws {
let cancellator = Cancellator(observabilityScope: observabilityScope)
cancellator.installSignalHandlers()
let store = SwiftSDKBundleStore(
swiftSDKsDirectory: swiftSDKsDirectory,
fileSystem: self.fileSystem,
observabilityScope: observabilityScope,
outputHandler: { print($0.description) },
downloadProgressAnimation: ProgressAnimation
.percent(stream: stdoutStream, verbose: false, header: "Downloading")
.throttled(interval: .milliseconds(300))
)
try await store.install(
bundlePathOrURL: bundlePathOrURL,
checksum: self.checksum,
UniversalArchiver(self.fileSystem, cancellator),
HTTPClient(),
hasher: {
try Workspace.BinaryArtifactsManager.checksum(
forBinaryArtifactAt: $0,
fileSystem: self.fileSystem
)
}
)
}
}
|