From 31ec7843233281fcb46c9dc4a3790574a736f83d Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Tue, 14 Mar 2023 18:49:37 -0400 Subject: [PATCH] wip --- Package.swift | 8 ++++++ .../GenerateVersionBuildPlugin.swift | 25 +++++++++++++++++++ Sources/GitVersion/SwiftBuild.swift | 4 +-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 Plugins/GenerateVersionBuildPlugin/GenerateVersionBuildPlugin.swift diff --git a/Package.swift b/Package.swift index 7bfbef3..87117c2 100644 --- a/Package.swift +++ b/Package.swift @@ -9,6 +9,7 @@ let package = Package( ], products: [ .library(name: "GitVersion", targets: ["GitVersion"]), + .plugin(name: "GenerateVersionBuildPlugin", targets: ["GenerateVersionBuildPlugin"]), .plugin(name: "GenerateVersionPlugin", targets: ["GenerateVersionPlugin"]), .plugin(name: "UpdateVersionPlugin", targets: ["UpdateVersionPlugin"]) ], @@ -35,6 +36,13 @@ let package = Package( name: "GitVersionTests", dependencies: ["GitVersion"] ), + .plugin( + name: "GenerateVersionBuildPlugin", + capability: .buildTool(), + dependencies: [ + "git-version" + ] + ), .plugin( name: "GenerateVersionPlugin", capability: .command( diff --git a/Plugins/GenerateVersionBuildPlugin/GenerateVersionBuildPlugin.swift b/Plugins/GenerateVersionBuildPlugin/GenerateVersionBuildPlugin.swift new file mode 100644 index 0000000..2f7fd63 --- /dev/null +++ b/Plugins/GenerateVersionBuildPlugin/GenerateVersionBuildPlugin.swift @@ -0,0 +1,25 @@ +import Foundation +import PackagePlugin + +@main +struct GenerateVersionBuildPlugin: BuildToolPlugin { + func createBuildCommands( + context: PackagePlugin.PluginContext, + target: PackagePlugin.Target + ) async throws -> [PackagePlugin.Command] { + guard let target = target as? SourceModuleTarget else { return [] } + let outputPath = context.pluginWorkDirectory + let tool = try context.tool(named: "git-version") + let outputFile = outputPath.appending(subpath: "Version.swift") + return [ + .buildCommand( + displayName: "Build With Version", + executable: tool.path, + arguments: ["generate", "\(target.name)"], + environment: [:], + inputFiles: target.sourceFiles.map(\.path), + outputFiles: [outputFile] + ) + ] + } +} diff --git a/Sources/GitVersion/SwiftBuild.swift b/Sources/GitVersion/SwiftBuild.swift index cf01c65..1558344 100644 --- a/Sources/GitVersion/SwiftBuild.swift +++ b/Sources/GitVersion/SwiftBuild.swift @@ -33,7 +33,7 @@ public struct SwiftBuild { /// The configuration for the build command. public let configuration: Configuration - /// Create a ``SwiftBuild`` instance for the ``Configuration/debug`` configuration. + /// Create a ``SwiftBuild`` instance for the ``SwiftBuild/Configuration/debug`` configuration. /// /// - Parameters: /// - arguments: The arguments for the `swift build` command. @@ -41,7 +41,7 @@ public struct SwiftBuild { .init(configuration: .debug, arguments: arguments) } - /// Create a ``SwiftBuild`` instance for the ``Configuration/release`` configuration. + /// Create a ``SwiftBuild`` instance for the ``SwiftBuild/Configuration/release`` configuration. /// /// - Parameters: /// - arguments: The arguments for the `swift build` command.