feat: Better checks on if semvar has changes prior to writing to a file.
All checks were successful
CI / Ubuntu (push) Successful in 2m51s
All checks were successful
CI / Ubuntu (push) Successful in 2m51s
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"target" : {
|
||||
"module" : { "name" : "cli-version" }
|
||||
"module" : { "name" : "bump-version" }
|
||||
},
|
||||
"strategy" : {
|
||||
"semvar" : {
|
||||
"preRelease" : { "strategy": { "gitTag" : {} } },
|
||||
"strategy" : { "gitTag": { "exactMatch": false } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public extension CliClient.SharedOptions {
|
||||
try await fileClient.write(string: string, to: url)
|
||||
} else {
|
||||
logger.debug("Skipping, due to dry-run being passed.")
|
||||
logger.debug("\n\(string)\n")
|
||||
logger.info("\n\(string)\n")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,19 +108,19 @@ public struct CurrentVersionContainer: Sendable {
|
||||
var usesOptionalType: Bool {
|
||||
switch version {
|
||||
case .string: return false
|
||||
case let .semvar(_, usesOptionalType): return usesOptionalType
|
||||
case let .semvar(_, usesOptionalType, _): return usesOptionalType
|
||||
}
|
||||
}
|
||||
|
||||
public enum Version: Sendable {
|
||||
case string(String)
|
||||
case semvar(SemVar, usesOptionalType: Bool = true)
|
||||
case semvar(SemVar, usesOptionalType: Bool = true, hasChanges: Bool)
|
||||
|
||||
func string(allowPreReleaseTag: Bool) throws -> String {
|
||||
switch self {
|
||||
case let .string(string):
|
||||
return string
|
||||
case let .semvar(semvar, usesOptionalType: _):
|
||||
case let .semvar(semvar, usesOptionalType: _, hasChanges: _):
|
||||
return semvar.versionString(withPreReleaseTag: allowPreReleaseTag)
|
||||
}
|
||||
}
|
||||
@@ -149,14 +149,17 @@ extension CliClient.SharedOptions {
|
||||
logger.debug("Failed to parse semvar, but got current version string.")
|
||||
try await write(container)
|
||||
|
||||
case let .semvar(semvar, usesOptionalType: usesOptionalType):
|
||||
case let .semvar(semvar, usesOptionalType: usesOptionalType, hasChanges: hasChanges):
|
||||
logger.debug("Semvar prior to bumping: \(semvar)")
|
||||
let bumped = semvar.bump(type)
|
||||
let version = bumped.versionString(withPreReleaseTag: allowPreReleaseTag)
|
||||
guard bumped != semvar else {
|
||||
|
||||
// TODO: This doesn't work as expected w/o checking what the loaded semvar in the file is / was.
|
||||
guard bumped != semvar || hasChanges else {
|
||||
logger.debug("No change, skipping.")
|
||||
return
|
||||
}
|
||||
|
||||
logger.debug("Bumped version: \(version)")
|
||||
let template = usesOptionalType ? Template.optional(version) : Template.build(version)
|
||||
try await write(template, to: container.targetUrl)
|
||||
|
||||
@@ -169,9 +169,12 @@ public extension Configuration.SemVar {
|
||||
|
||||
// We parsed a semvar from the existing file, use it.
|
||||
if semVar != nil {
|
||||
return try await .semvar(
|
||||
applyingPreRelease(semVar!, gitDirectory),
|
||||
usesOptionalType: usesOptionalType ?? false
|
||||
let semvarWithPreRelease = try await applyingPreRelease(semVar!, gitDirectory)
|
||||
|
||||
return .semvar(
|
||||
semvarWithPreRelease,
|
||||
usesOptionalType: usesOptionalType ?? false,
|
||||
hasChanges: semvarWithPreRelease != semVar
|
||||
)
|
||||
}
|
||||
|
||||
@@ -189,9 +192,11 @@ public extension Configuration.SemVar {
|
||||
)).semVar
|
||||
|
||||
if semVar != nil {
|
||||
return try await .semvar(
|
||||
applyingPreRelease(semVar!, gitDirectory),
|
||||
usesOptionalType: usesOptionalType ?? false
|
||||
let semvarWithPreRelease = try await applyingPreRelease(semVar!, gitDirectory)
|
||||
return .semvar(
|
||||
semvarWithPreRelease,
|
||||
usesOptionalType: usesOptionalType ?? false,
|
||||
hasChanges: semvarWithPreRelease != semVar
|
||||
)
|
||||
}
|
||||
|
||||
@@ -204,7 +209,8 @@ public extension Configuration.SemVar {
|
||||
logger.trace("Generating new semvar.")
|
||||
return try await .semvar(
|
||||
applyingPreRelease(.init(), gitDirectory),
|
||||
usesOptionalType: usesOptionalType ?? false
|
||||
usesOptionalType: usesOptionalType ?? false,
|
||||
hasChanges: true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ public struct Template: Sendable {
|
||||
return """
|
||||
// Do not set this variable, it is set during the build process.
|
||||
let VERSION: \(type.rawValue) = \(versionString)
|
||||
|
||||
"""
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ public extension Logger.Level {
|
||||
switch verbose {
|
||||
case 1: self = .debug
|
||||
case 2...: self = .trace
|
||||
default: self = .warning
|
||||
default: self = .info
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,14 +5,18 @@ import Dependencies
|
||||
import Foundation
|
||||
import ShellClient
|
||||
|
||||
struct GenerateCommand: AsyncParsableCommand {
|
||||
struct GenerateCommand: CommandRepresentable {
|
||||
static let commandName = "generate"
|
||||
|
||||
static let configuration: CommandConfiguration = .init(
|
||||
commandName: Self.commandName,
|
||||
abstract: Abstract.default("Generates a version file in your project.").render(),
|
||||
abstract: Abstract.default("Generates a version file in your project."),
|
||||
usage: Usage.default(commandName: Self.commandName),
|
||||
discussion: Discussion {
|
||||
discussion: Discussion.default(
|
||||
examples: [
|
||||
makeExample(label: "Basic usage.", example: "")
|
||||
]
|
||||
) {
|
||||
"This command can be interacted with directly, outside of the plugin usage context."
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/*
|
||||
This file contains helpers for generating the documentation for the commands.
|
||||
|
||||
*/
|
||||
import ArgumentParser
|
||||
import CliDoc
|
||||
import Rainbow
|
||||
|
||||
Reference in New Issue
Block a user