feat: Begin working on configuration client.

This commit is contained in:
2024-12-22 23:30:25 -05:00
parent 9c62c06ebe
commit d716348088
24 changed files with 958 additions and 409 deletions

View File

@@ -0,0 +1,75 @@
import Foundation
public struct Configuration: Codable, Sendable {
public let target: Target?
public let strategy: VersionStrategy?
public init(
target: Target? = nil,
strategy: VersionStrategy? = .semvar()
) {
self.target = target
self.strategy = strategy
}
}
public extension Configuration {
enum VersionStrategy: Codable, Equatable, Sendable {
case branch(Branch = .init())
case semvar(SemVar = .init())
public struct Branch: Codable, Equatable, Sendable {
let includeCommitSha: Bool
public init(includeCommitSha: Bool = true) {
self.includeCommitSha = includeCommitSha
}
}
public enum PreReleaseStrategy: Codable, Equatable, Sendable {
/// Use output of tag, with branch and commit sha.
case branch(Branch = .init())
/// Provide a custom pre-release tag.
indirect case custom(String, PreReleaseStrategy? = nil)
/// Use the output of `git describe --tags`
case gitTag
}
public struct SemVar: Codable, Equatable, Sendable {
let preReleaseStrategy: PreReleaseStrategy?
let requireExistingFile: Bool
let requireExistingSemVar: Bool
public init(
preReleaseStrategy: PreReleaseStrategy? = nil,
requireExistingFile: Bool = true,
requireExistingSemVar: Bool = true
) {
self.preReleaseStrategy = preReleaseStrategy
self.requireExistingFile = requireExistingFile
self.requireExistingSemVar = requireExistingSemVar
}
}
}
enum Target: Codable, Equatable, Sendable {
case path(String)
case module(Module)
public struct Module: Codable, Equatable, Sendable {
public let name: String
public let fileName: String
public init(
_ name: String,
fileName: String = "Version.swift"
) {
self.name = name
self.fileName = fileName
}
}
}
}