Merge pull request #1085 from tuist/cloud-config

Add cloudURL attribute to Config
This commit is contained in:
Pedro Piñera Buendía 2020-03-11 16:02:18 +01:00 committed by GitHub
commit 06368544b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 59 additions and 11 deletions

View File

@ -12,11 +12,14 @@ Please, check out guidelines: https://keepachangelog.com/en/1.0.0/
### Added ### Added
- `tuist lint` command https://github.com/tuist/tuist/pull/1043 by @pepibumur. - `tuist lint` command https://github.com/tuist/tuist/pull/1043 by @pepibumur.
- Add `--verbose` https://github.com/tuist/tuist/pull/1027 by @ollieatkinson. - Add `--verbose` https://github.com/tuist/tuist/pull/1027 by @ollieatkinson.
- `TuistInsights` target https://github.com/tuist/tuist/pull/1084 by @pepibumur. - `TuistInsights` target https://github.com/tuist/tuist/pull/1084 by @pepibumur.
- Add `cloudURL` attribute to `Config` https://github.com/tuist/tuist/pull/1085 by @pepibumur.
- Add `--verbose` https://github.com/tuist/tuist/pull/1027 by @ollieatkinson.
### Changed ### Changed
- Rename `TuistConfig.swift` to `Config.swift` https://github.com/tuist/tuist/pull/1083 by @pepibumur.
- Rename `TuistConfig.swift` to `Config.swift` https://github.com/tuist/tuist/pull/1083 by @pepibumur.
## 1.3.0 ## 1.3.0

View File

@ -17,15 +17,21 @@ public struct Config: Codable, Equatable {
/// List of Xcode versions that the project supports. /// List of Xcode versions that the project supports.
public let compatibleXcodeVersions: CompatibleXcodeVersions public let compatibleXcodeVersions: CompatibleXcodeVersions
/// URL to the server that caching and insights will interact with.
public let cloudURL: String?
/// Initializes the tuist cofiguration. /// Initializes the tuist cofiguration.
/// ///
/// - Parameters: /// - Parameters:
/// - compatibleXcodeVersions: . /// - compatibleXcodeVersions: List of Xcode versions the project is compatible with.
/// - cloudURL: URL to the server that caching and insights will interact with.
/// - generationOptions: List of Xcode versions that the project supports. An empty list means that /// - generationOptions: List of Xcode versions that the project supports. An empty list means that
public init(compatibleXcodeVersions: CompatibleXcodeVersions = .all, public init(compatibleXcodeVersions: CompatibleXcodeVersions = .all,
cloudURL: String? = nil,
generationOptions: [GenerationOptions]) { generationOptions: [GenerationOptions]) {
self.generationOptions = generationOptions
self.compatibleXcodeVersions = compatibleXcodeVersions self.compatibleXcodeVersions = compatibleXcodeVersions
self.generationOptions = generationOptions
self.cloudURL = cloudURL
dumpIfNeeded(self) dumpIfNeeded(self)
} }
} }

View File

@ -17,19 +17,25 @@ public struct Config: Equatable, Hashable {
/// List of Xcode versions the project or set of projects is compatible with. /// List of Xcode versions the project or set of projects is compatible with.
public let compatibleXcodeVersions: CompatibleXcodeVersions public let compatibleXcodeVersions: CompatibleXcodeVersions
/// URL to the server that caching and insights will interact with.
public let cloudURL: URL?
/// Returns the default Tuist configuration. /// Returns the default Tuist configuration.
public static var `default`: Config { public static var `default`: Config {
Config(compatibleXcodeVersions: .all, generationOptions: []) Config(compatibleXcodeVersions: .all, cloudURL: nil, generationOptions: [])
} }
/// Initializes the tuist cofiguration. /// Initializes the tuist cofiguration.
/// ///
/// - Parameters: /// - Parameters:
/// - compatibleXcodeVersions: List of Xcode versions the project or set of projects is compatible with. /// - compatibleXcodeVersions: List of Xcode versions the project or set of projects is compatible with.
/// - cloudURL: URL to the server that caching and insights will interact with.
/// - generationOptions: Generation options. /// - generationOptions: Generation options.
public init(compatibleXcodeVersions: CompatibleXcodeVersions, public init(compatibleXcodeVersions: CompatibleXcodeVersions,
cloudURL: URL?,
generationOptions: [GenerationOption]) { generationOptions: [GenerationOption]) {
self.compatibleXcodeVersions = compatibleXcodeVersions self.compatibleXcodeVersions = compatibleXcodeVersions
self.cloudURL = cloudURL
self.generationOptions = generationOptions self.generationOptions = generationOptions
} }
@ -37,5 +43,7 @@ public struct Config: Equatable, Hashable {
public func hash(into hasher: inout Hasher) { public func hash(into hasher: inout Hasher) {
hasher.combine(generationOptions) hasher.combine(generationOptions)
hasher.combine(cloudURL)
hasher.combine(compatibleXcodeVersions)
} }
} }

View File

@ -4,8 +4,10 @@ import Foundation
public extension Config { public extension Config {
static func test(compatibleXcodeVersions: CompatibleXcodeVersions = .all, static func test(compatibleXcodeVersions: CompatibleXcodeVersions = .all,
cloudURL: URL? = nil,
generationOptions: [GenerationOption] = []) -> Config { generationOptions: [GenerationOption] = []) -> Config {
Config(compatibleXcodeVersions: compatibleXcodeVersions, Config(compatibleXcodeVersions: compatibleXcodeVersions,
cloudURL: cloudURL,
generationOptions: generationOptions) generationOptions: generationOptions)
} }
} }

View File

@ -4,6 +4,26 @@ import ProjectDescription
import TuistCore import TuistCore
import TuistSupport import TuistSupport
enum ConfigManifestMapperError: FatalError {
/// Thrown when the cloud URL is invalid.
case invalidCloudURL(String)
/// Error type.
var type: ErrorType {
switch self {
case .invalidCloudURL: return .abort
}
}
/// Error description.
var description: String {
switch self {
case let .invalidCloudURL(url):
return "The cloud URL '\(url)' is not a valid URL"
}
}
}
extension TuistCore.Config { extension TuistCore.Config {
/// Maps a ProjectDescription.Config instance into a TuistCore.Config model. /// Maps a ProjectDescription.Config instance into a TuistCore.Config model.
/// - Parameters: /// - Parameters:
@ -12,7 +32,15 @@ extension TuistCore.Config {
static func from(manifest: ProjectDescription.Config) throws -> TuistCore.Config { static func from(manifest: ProjectDescription.Config) throws -> TuistCore.Config {
let generationOptions = try manifest.generationOptions.map { try TuistCore.Config.GenerationOption.from(manifest: $0) } let generationOptions = try manifest.generationOptions.map { try TuistCore.Config.GenerationOption.from(manifest: $0) }
let compatibleXcodeVersions = TuistCore.CompatibleXcodeVersions.from(manifest: manifest.compatibleXcodeVersions) let compatibleXcodeVersions = TuistCore.CompatibleXcodeVersions.from(manifest: manifest.compatibleXcodeVersions)
return TuistCore.Config(compatibleXcodeVersions: compatibleXcodeVersions, generationOptions: generationOptions) var cloudURL: URL?
if let manifestCloudURL = manifest.cloudURL {
if let manifestCloudURL = URL(string: manifestCloudURL) {
cloudURL = manifestCloudURL
} else {
throw ConfigManifestMapperError.invalidCloudURL(manifestCloudURL)
}
}
return TuistCore.Config(compatibleXcodeVersions: compatibleXcodeVersions, cloudURL: cloudURL, generationOptions: generationOptions)
} }
} }

View File

@ -4,8 +4,9 @@ import XCTest
final class ConfigTests: XCTestCase { final class ConfigTests: XCTestCase {
func test_config_toJSON() throws { func test_config_toJSON() throws {
let config = Config(generationOptions: let config = Config(cloudURL: "https://tuist.io",
[.xcodeProjectName("someprefix-\(.projectName)")]) generationOptions:
[.xcodeProjectName("someprefix-\(.projectName)")])
XCTAssertCodable(config) XCTAssertCodable(config)
} }

View File

@ -1 +1 @@
import Foundation import Foundation

View File

@ -324,7 +324,7 @@ final class MultipleConfigurationsIntegrationTests: TuistUnitTestCase {
} }
private func createConfig() -> Config { private func createConfig() -> Config {
Config(compatibleXcodeVersions: .all, generationOptions: []) Config(compatibleXcodeVersions: .all, cloudURL: nil, generationOptions: [])
} }
private func createWorkspace(projects: [String]) throws -> Workspace { private func createWorkspace(projects: [String]) throws -> Workspace {

View File

@ -128,7 +128,7 @@ final class StableXcodeProjIntegrationTests: TuistUnitTestCase {
} }
private func createConfig() -> Config { private func createConfig() -> Config {
Config(compatibleXcodeVersions: .all, generationOptions: []) Config(compatibleXcodeVersions: .all, cloudURL: nil, generationOptions: [])
} }
private func createWorkspace(projects: [String]) throws -> Workspace { private func createWorkspace(projects: [String]) throws -> Workspace {