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, " "))
}
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:
Then as an experiment I simply copied the whole command that it says it ran in the last line.
And this worked perfectly. Got the build and it reflected all the build attrs correctly.
Build function is: