@ -53,41 +53,20 @@ func PluginBinaryDir() string {
return tempPluginBinaryPath . path
}
type PluginBuildConfig struct {
version * version . Version
}
func NewPluginBuildConfig ( versionStr string ) * PluginBuildConfig {
return & PluginBuildConfig {
version . Must ( version . NewVersion ( versionStr ) ) ,
}
}
// Version is the core version string of the test plugin.
//
// If the version isn't set, it'll default to 1.0.0
func ( pc PluginBuildConfig ) Version ( ) string {
return pc . version . Core ( ) . String ( )
}
func ( pc PluginBuildConfig ) PreRelease ( ) string {
return pc . version . Prerelease ( )
}
func ( pc PluginBuildConfig ) Metadata ( ) string {
return pc . version . Metadata ( )
func NewPluginBuildConfig ( versionStr string ) * version . Version {
return version . Must ( version . NewVersion ( versionStr ) )
}
// LDFlags compiles the ldflags for the plugin to compile based on the information provided.
func ( pc PluginBuildConfig ) LDFlags ( ) string {
func LDFlags ( version * version . Version ) string {
pluginPackage := "github.com/hashicorp/packer-plugin-tester"
ldflagsArg := fmt . Sprintf ( "-X %s/version.Version=%s" , pluginPackage , pc. Version ( ) )
if pc. PreR elease( ) != "" {
ldflagsArg = fmt . Sprintf ( "%s -X %s/version.VersionPrerelease=%s" , ldflagsArg , pluginPackage , pc. PreR elease( ) )
ldflagsArg := fmt . Sprintf ( "-X %s/version.Version=%s" , pluginPackage , version . Core ( ) )
if version . Prerelease ( ) != "" {
ldflagsArg = fmt . Sprintf ( "%s -X %s/version.VersionPrerelease=%s" , ldflagsArg , pluginPackage , version . Prerelease ( ) )
}
if pc . Metadata ( ) != "" {
ldflagsArg = fmt . Sprintf ( "%s -X %s/version.VersionMetadata=%s" , ldflagsArg , pluginPackage , pc . Metadata ( ) )
if version . Metadata ( ) != "" {
ldflagsArg = fmt . Sprintf ( "%s -X %s/version.VersionMetadata=%s" , ldflagsArg , pluginPackage , version . Metadata ( ) )
}
return ldflagsArg
@ -96,13 +75,13 @@ func (pc PluginBuildConfig) LDFlags() string {
// BinaryName is the raw name of the plugin binary to produce
//
// It's expected to be in the "mini-plugin_<version>[-<prerelease>][+<metadata>]" format
func ( pc PluginBuildConfig ) BinaryName ( ) string {
retStr := fmt . Sprintf ( "mini-plugin_%s" , pc. Version ( ) )
if pc. PreR elease( ) != "" {
retStr = fmt . Sprintf ( "%s-%s" , retStr , pc. PreR elease( ) )
func BinaryName ( version * version . Version ) string {
retStr := fmt . Sprintf ( "mini-plugin_%s" , version. Core ( ) )
if version. Prer elease( ) != "" {
retStr = fmt . Sprintf ( "%s-%s" , retStr , version. Prer elease( ) )
}
if pc . Metadata ( ) != "" {
retStr = fmt . Sprintf ( "%s+%s" , retStr , pc . Metadata ( ) )
if version . Metadata ( ) != "" {
retStr = fmt . Sprintf ( "%s+%s" , retStr , version . Metadata ( ) )
}
return retStr
@ -120,8 +99,8 @@ func (pc PluginBuildConfig) BinaryName() string {
//
// The path to the plugin is returned, it won't be removed automatically
// though, deletion is the caller's responsibility.
func BuildSimplePlugin ( config * PluginBuildConfig , t * testing . T ) {
t . Logf ( "Building plugin in version %v" , config. version)
func BuildSimplePlugin ( version * version . Version , t * testing . T ) {
t . Logf ( "Building plugin in version %v" , version)
testDir , err := currentDir ( )
if err != nil {
@ -129,15 +108,15 @@ func BuildSimplePlugin(config *PluginBuildConfig, t *testing.T) {
}
miniPluginDir := filepath . Join ( testDir , "mini_plugin" )
outBin := filepath . Join ( PluginBinaryDir ( ) , config . BinaryName ( ) )
outBin := filepath . Join ( PluginBinaryDir ( ) , BinaryName ( version ) )
compileCommand := exec . Command ( "go" , "build" , "-C" , miniPluginDir , "-o" , outBin , "-ldflags" , config . LDFlags ( ) , "." )
compileCommand := exec . Command ( "go" , "build" , "-C" , miniPluginDir , "-o" , outBin , "-ldflags" , LDFlags ( version ) , "." )
logs , err := compileCommand . CombinedOutput ( )
if err != nil {
t . Fatalf ( "failed to compile plugin binary: %s\ncompiler logs: %s" , err , logs )
}
StorePluginVersion ( config. version. String ( ) , outBin )
StorePluginVersion ( version. String ( ) , outBin )
}
// currentDir returns the directory in which the current file is located.