diff --git a/.circleci/config.yml b/.circleci/config.yml index 7952b27d5d0da..28379f1b516cb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -129,6 +129,11 @@ commands: - check-changed-files-or-halt - attach_workspace: at: '/go' + - when: + condition: + equal: [ windows, << parameters.type >> ] + steps: + - run: make versioninfo - when: condition: << parameters.nightly >> steps: diff --git a/.gitignore b/.gitignore index 614809d0681e1..ec7f96954a8ed 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ process.yml /.vscode /*.toml /*.conf +resource.syso +versioninfo.json diff --git a/Makefile b/Makefile index 5e9ff1c5e79f1..8988a902f89c1 100644 --- a/Makefile +++ b/Makefile @@ -99,6 +99,16 @@ help: deps: go mod download -x +.PHONY: version +version: + @echo $(version)-$(commit) + +.PHONY: versioninfo +versioninfo: + go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@v1.4.0; \ + go run scripts/generate_versioninfo/main.go; \ + go generate cmd/telegraf/telegraf_windows.go; \ + .PHONY: telegraf telegraf: go build -ldflags "$(LDFLAGS)" ./cmd/telegraf @@ -235,6 +245,7 @@ install: $(buildbin) # the bin between deb/rpm/tar packages over building directly into the package # directory. $(buildbin): + echo $(GOOS) @mkdir -pv $(dir $@) go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf diff --git a/assets/tiger.ico b/assets/tiger.ico new file mode 100644 index 0000000000000..a1b190cafe6b0 Binary files /dev/null and b/assets/tiger.ico differ diff --git a/cmd/telegraf/telegraf_windows.go b/cmd/telegraf/telegraf_windows.go index 8e2a6be1925d5..13ce661b6ad01 100644 --- a/cmd/telegraf/telegraf_windows.go +++ b/cmd/telegraf/telegraf_windows.go @@ -1,6 +1,8 @@ //go:build windows // +build windows +//go:generate goversioninfo -icon=../../assets/tiger.ico + package main import ( diff --git a/scripts/generate_versioninfo/main.go b/scripts/generate_versioninfo/main.go new file mode 100644 index 0000000000000..0cd551c4d3651 --- /dev/null +++ b/scripts/generate_versioninfo/main.go @@ -0,0 +1,46 @@ +// Generate the versioninfo.json with the current build version from the makefile +// The file versioninfo.json is used by the goversioninfo package to add version info into a windows binary +package main + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "log" //nolint:revive + "os/exec" + "strings" +) + +type VersionInfo struct { + StringFileInfo StringFileInfo +} + +type StringFileInfo struct { + ProductName string + ProductVersion string +} + +func main() { + e := exec.Command("make", "version") + var out bytes.Buffer + e.Stdout = &out + if err := e.Run(); err != nil { + log.Fatalf("Failed to get version from makefile: %v", err) + } + version := strings.TrimSuffix(out.String(), "\n") + + v := VersionInfo{ + StringFileInfo: StringFileInfo{ + ProductName: "Telegraf", + ProductVersion: version, + }, + } + + file, err := json.MarshalIndent(v, "", " ") + if err != nil { + log.Fatalf("Failed to marshal json: %v", err) + } + if err := ioutil.WriteFile("cmd/telegraf/versioninfo.json", file, 0644); err != nil { + log.Fatalf("Failed to write versioninfo.json: %v", err) + } +}