-
Notifications
You must be signed in to change notification settings - Fork 270
Open
Description
I setup my mage target to build locally and it worked fine. Then I wanted to introduce ldflags to get build info embedded as well. The build target errors out.
Expected:
Build succeeds
Actual:
go: finding github.myorg.com/myrepo/heyo/version.BuildSha=4accbfe latest
go: finding github.myorg.com/myrepo/heyo/version.ReleaseType=localdev' latest
go: finding github.myorg.com/myrepo/heyo/version.BuildVersion=local latest
can't load package: package github.myorg.com/myrepo/heyo/version.BuildDate=20200505: no matching versions for query "latest"
can't load package: package -X: malformed module path "-X": leading dash
can't load package: package github.myorg.com/myrepo/heyo/version.BuildSha=4accbfe: no matching versions for query "latest"
can't load package: package github.myorg.com/myrepo/heyo/version.BuildVersion=local: no matching versions for query "latest"
can't load package: package github.myorg.com/myrepo/heyo/version.ReleaseType=localdev': no matching versions for query "latest"
can't load package: package -os: malformed module path "-os": leading dash
can't load package: package darwin: malformed module path "darwin": missing dot in first path element
can't load package: package -arch: malformed module path "-arch": leading dash
can't load package: package amd64: malformed module path "amd64": missing dot in first path element
can't load package: package -output: malformed module path "-output": leading dash
can't load package: package targets/ocs_heyo_darwin_amd64: malformed module path "targets/ocs_heyo_darwin_amd64": missing dot in first path element
Error: running "gox -ldflags '-X github.myorg.com/myrepo/heyo/version.BuildDate=20200505 -X github.myorg.com/myrepo/heyo/version.BuildSha=4accbfe -X github.myorg.com/myrepo/heyo/version.BuildVersion=local -X github.myorg.com/myrepo/heyo/version.ReleaseType=localdev' -os darwin -arch amd64 -output targets/ocs_heyo_darwin_amd64 github.myorg.com/myrepo/heyo/cmd" failed with exit code 1
Then as an experiment I simply copied the whole command that it says it ran in the last line.
gox -ldflags '-X github.myorg.com/myrepo/heyo/version.BuildDate=20200505 -X github.myorg.com/myrepo/heyo/version.BuildSha=4accbfe -X github.myorg.com/myrepo/heyo/version.BuildVersion=local -X github.myorg.com/myrepo/heyo/version.ReleaseType=localdev' -os darwin -arch amd64 -output targets/ocs_heyo_darwin_amd64 github.myorg.com/myrepo/heyo/cmd
And this worked perfectly. Got the build and it reflected all the build attrs correctly.
Build function is:
func build(b *BuildOpts) error {
if b == nil {
fmt.Println("No BuildOpts specified. Will use defaults.")
b = DefaultBuildOpts
}
if _, ok := Os2BuildArgsMap[b.Goos]; !ok {
return fmt.Errorf("your local machine os %s is not supported in builds. Add it in constants.go or see why the OS is not"+
"recognized", b.Goos)
}
var ldPrefixedArgs = strings.Split(PrepareLdFlagsFromBuildOpts(b), " ")
ldPrefixedArgs = append(ldPrefixedArgs, Os2BuildArgsMap[b.Goos]...)
fmt.Printf("%d --> %v", len(ldPrefixedArgs), ldPrefixedArgs)
//os.Exit(1)
out, err := sh.Output(Gox, ldPrefixedArgs...) // TODO looping to create all in a BuildAll target
if err != nil {
fmt.Println(out)
return err
}
return nil
}
func PrepareLdFlagsFromBuildOpts(b *BuildOpts) string {
var flags = []string{
fmt.Sprintf("-X github.myorg.com/myrepo/heyo/version.BuildDate=%v", b.Timestamp),
fmt.Sprintf("-X github.myorg.com/myrepo/heyo/version.BuildSha=%v", b.Sha),
fmt.Sprintf("-X github.myorg.com/myrepo/heyo/version.BuildVersion=%v", b.Version),
fmt.Sprintf("-X github.myorg.com/myrepo/heyo/version.ReleaseType=%v", b.Reltype),
}
return fmt.Sprintf("-ldflags '%s'", strings.Join(flags, " "))
}
Metadata
Metadata
Assignees
Labels
No labels