From b5f0d0d4f76b7e33d4fd4a4681d189fe5334a1eb Mon Sep 17 00:00:00 2001 From: Gil Raphaelli Date: Thu, 13 Sep 2018 15:30:43 -0400 Subject: [PATCH 1/3] allow external beat version qualifier using the BEAT_VERSION_QUALIFIER environment variable --- dev-tools/mage/build.go | 4 ++++ dev-tools/mage/settings.go | 47 +++++++++++++++++++++++++++----------- libbeat/version/helper.go | 6 ++++- libbeat/version/version.go | 2 +- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/dev-tools/mage/build.go b/dev-tools/mage/build.go index 86bd420930c..a227a473504 100644 --- a/dev-tools/mage/build.go +++ b/dev-tools/mage/build.go @@ -53,6 +53,10 @@ func DefaultBuildArgs() BuildArgs { }, } + if versionQualified { + args.Vars["github.com/elastic/beats/libbeat/version.qualifier"] = "{{ .Qualifier }}" + } + repo, err := GetProjectRepoInfo() if err != nil { panic(errors.Wrap(err, "failed to determine project repo info")) diff --git a/dev-tools/mage/settings.go b/dev-tools/mage/settings.go index 6b98f1076a2..da90053861c 100644 --- a/dev-tools/mage/settings.go +++ b/dev-tools/mage/settings.go @@ -65,9 +65,12 @@ var ( Snapshot bool + versionQualified bool + versionQualifier string + FuncMap = map[string]interface{}{ "beat_doc_branch": BeatDocBranch, - "beat_version": BeatVersion, + "beat_version": BeatQualifiedVersion, "commit": CommitHash, "date": BuildDate, "elastic_beats_dir": ElasticBeatsDir, @@ -98,6 +101,8 @@ func init() { if err != nil { panic(errors.Errorf("failed to parse SNAPSHOT env value", err)) } + + versionQualifier, versionQualified = os.LookupEnv("BEAT_VERSION_QUALIFIER") } // EnvMap returns map containing the common settings variables and all variables @@ -130,6 +135,7 @@ func varMap(args ...map[string]interface{}) map[string]interface{} { "BeatLicense": BeatLicense, "BeatURL": BeatURL, "Snapshot": Snapshot, + "Qualifier": versionQualifier, } // Add the extra args to the map. @@ -145,18 +151,19 @@ func varMap(args ...map[string]interface{}) map[string]interface{} { func dumpVariables() (string, error) { var dumpTemplate = `## Variables -GOOS = {{.GOOS}} -GOARCH = {{.GOARCH}} -GOARM = {{.GOARM}} -Platform = {{.Platform}} -BinaryExt = {{.BinaryExt}} -BeatName = {{.BeatName}} -BeatServiceName = {{.BeatServiceName}} -BeatIndexPrefix = {{.BeatIndexPrefix}} -BeatDescription = {{.BeatDescription}} -BeatVendor = {{.BeatVendor}} -BeatLicense = {{.BeatLicense}} -BeatURL = {{.BeatURL}} +GOOS = {{.GOOS}} +GOARCH = {{.GOARCH}} +GOARM = {{.GOARM}} +Platform = {{.Platform}} +BinaryExt = {{.BinaryExt}} +BeatName = {{.BeatName}} +BeatServiceName = {{.BeatServiceName}} +BeatIndexPrefix = {{.BeatIndexPrefix}} +BeatDescription = {{.BeatDescription}} +BeatVendor = {{.BeatVendor}} +BeatLicense = {{.BeatLicense}} +BeatURL = {{.BeatURL}} +VersionQualifier = {{.Qualifier}} ## Functions @@ -310,6 +317,20 @@ var ( beatVersionOnce sync.Once ) +// BeatQualifiedVersion returns the Beat's qualified version. The value can be overwritten by +// setting BEAT_VERSION_QUALIFIER in the environment. +func BeatQualifiedVersion() (string, error) { + version, err := BeatVersion() + if err != nil { + return "", err + } + // version qualifier can intentionally be set to "" to override build time var + if !versionQualified || versionQualifier == "" { + return version, nil + } + return version + "-" + versionQualifier, nil +} + // BeatVersion returns the Beat's version. The value can be overridden by // setting BEAT_VERSION in the environment. func BeatVersion() (string, error) { diff --git a/libbeat/version/helper.go b/libbeat/version/helper.go index 13e4be0c505..b301d0b1639 100644 --- a/libbeat/version/helper.go +++ b/libbeat/version/helper.go @@ -22,12 +22,16 @@ import "time" // GetDefaultVersion returns the current libbeat version. // This method is in a separate file as the version.go file is auto generated func GetDefaultVersion() string { - return defaultBeatVersion + if qualifier == "" { + return defaultBeatVersion + } + return defaultBeatVersion + "-" + qualifier } var ( buildTime = "unknown" commit = "unknown" + qualifier = "alpha1" ) // BuildTime exposes the compile-time build time information. diff --git a/libbeat/version/version.go b/libbeat/version/version.go index 63e1c2020b7..78230c7ca7e 100644 --- a/libbeat/version/version.go +++ b/libbeat/version/version.go @@ -18,4 +18,4 @@ // Code generated by dev-tools/set_version package version -const defaultBeatVersion = "7.0.0-alpha1" +const defaultBeatVersion = "7.0.0" From 021a9e0b2126ba61362be8b01c66a29121c76326 Mon Sep 17 00:00:00 2001 From: Gil Raphaelli Date: Thu, 13 Sep 2018 16:40:49 -0400 Subject: [PATCH 2/3] set BEAT_VERSION_QUALIFIER in build container if needed --- dev-tools/mage/crossbuild.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev-tools/mage/crossbuild.go b/dev-tools/mage/crossbuild.go index 4ce927b409b..3e06fba5a15 100644 --- a/dev-tools/mage/crossbuild.go +++ b/dev-tools/mage/crossbuild.go @@ -223,6 +223,9 @@ func (b GolangCrossBuilder) Build() error { "--env", "EXEC_GID="+strconv.Itoa(os.Getgid()), ) } + if versionQualified { + args = append(args, "--env", "BEAT_VERSION_QUALIFIER="+versionQualifier) + } args = append(args, "--rm", "--env", "MAGEFILE_VERBOSE="+verbose, From c6d799be719a20d16ad58e6aae1752d191ab736f Mon Sep 17 00:00:00 2001 From: Gil Raphaelli Date: Mon, 17 Sep 2018 14:34:28 -0400 Subject: [PATCH 3/3] document BEAT_VERSION_QUALIFIER per review feedback. --- auditbeat/magefile.go | 1 + filebeat/magefile.go | 1 + heartbeat/magefile.go | 1 + metricbeat/magefile.go | 1 + packetbeat/magefile.go | 1 + winlogbeat/magefile.go | 1 + 6 files changed, 6 insertions(+) diff --git a/auditbeat/magefile.go b/auditbeat/magefile.go index d92682d671c..f755fef8a0c 100644 --- a/auditbeat/magefile.go +++ b/auditbeat/magefile.go @@ -75,6 +75,7 @@ func Clean() error { // Package packages the Beat for distribution. // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. +// Use BEAT_VERSION_QUALIFIER to control the version qualifier. func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() diff --git a/filebeat/magefile.go b/filebeat/magefile.go index 260c8263c51..184107d5068 100644 --- a/filebeat/magefile.go +++ b/filebeat/magefile.go @@ -75,6 +75,7 @@ func Clean() error { // Package packages the Beat for distribution. // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. +// Use BEAT_VERSION_QUALIFIER to control the version qualifier. func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() diff --git a/heartbeat/magefile.go b/heartbeat/magefile.go index 3c751e3effb..314e74cd9c3 100644 --- a/heartbeat/magefile.go +++ b/heartbeat/magefile.go @@ -75,6 +75,7 @@ func Clean() error { // Package packages the Beat for distribution. // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. +// Use BEAT_VERSION_QUALIFIER to control the version qualifier. func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() diff --git a/metricbeat/magefile.go b/metricbeat/magefile.go index 047f97e04bc..535d4ae33ad 100644 --- a/metricbeat/magefile.go +++ b/metricbeat/magefile.go @@ -75,6 +75,7 @@ func Clean() error { // Package packages the Beat for distribution. // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. +// Use BEAT_VERSION_QUALIFIER to control the version qualifier. func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() diff --git a/packetbeat/magefile.go b/packetbeat/magefile.go index 0ac9bd19b26..e577033b818 100644 --- a/packetbeat/magefile.go +++ b/packetbeat/magefile.go @@ -113,6 +113,7 @@ func Clean() error { // Package packages the Beat for distribution. // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. +// Use BEAT_VERSION_QUALIFIER to control the version qualifier. func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() diff --git a/winlogbeat/magefile.go b/winlogbeat/magefile.go index d9f2ecd9f9a..bc0c349eaf8 100644 --- a/winlogbeat/magefile.go +++ b/winlogbeat/magefile.go @@ -75,6 +75,7 @@ func Clean() error { // Package packages the Beat for distribution. // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. +// Use BEAT_VERSION_QUALIFIER to control the version qualifier. func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }()