From b574d0abd15de416f09e1c052ca827c3a298fce6 Mon Sep 17 00:00:00 2001 From: Sertac Ozercan Date: Fri, 11 Aug 2023 20:59:57 +0000 Subject: [PATCH 1/2] refactor: use buildinfo to get opa and frameworks version Signed-off-by: Sertac Ozercan --- Dockerfile | 2 +- Makefile | 10 +++------- Tiltfile | 15 ++++++++------- cmd/gator/gator.go | 14 +++----------- gator.Dockerfile | 2 +- main.go | 3 ++- pkg/version/version.go | 31 ++++++++++++++++++++++++++++--- 7 files changed, 46 insertions(+), 31 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1230aa06b4a..80a3b0948e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,7 @@ ENV GO111MODULE=on \ WORKDIR /go/src/github.com/open-policy-agent/gatekeeper COPY . . -RUN go build -mod vendor -a -ldflags "${LDFLAGS:--X github.com/open-policy-agent/gatekeeper/pkg/version.Version=latest}" -o manager +RUN go build -mod vendor -a -ldflags "${LDFLAGS}" -o manager FROM $BASEIMAGE diff --git a/Makefile b/Makefile index 9bf75f7b056..c7480e8c916 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,6 @@ BATS_TESTS_FILE ?= test/bats/test.bats HELM_VERSION ?= 3.7.2 NODE_VERSION ?= 16-bullseye-slim YQ_VERSION ?= 4.30.6 -FRAMEWORKS_VERSION ?= $(shell go list -f '{{ .Version }}' -m github.com/open-policy-agent/frameworks/constraint) -OPA_VERSION ?= $(shell go list -f '{{ .Version }}' -m github.com/open-policy-agent/opa) HELM_ARGS ?= GATEKEEPER_NAMESPACE ?= gatekeeper-system @@ -45,9 +43,7 @@ FAKE_SUBSCRIBER_IMAGE ?= fake-subscriber:latest ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) BIN_DIR := $(abspath $(ROOT_DIR)/bin) -LDFLAGS := "-X github.com/open-policy-agent/gatekeeper/pkg/version.Version=$(VERSION) \ - -X main.frameworksVersion=$(FRAMEWORKS_VERSION) \ - -X main.opaVersion=$(OPA_VERSION)" +LDFLAGS := "-X github.com/open-policy-agent/gatekeeper/v3/pkg/version.Version=$(VERSION)" PLATFORM ?= linux/amd64 OUTPUT_TYPE ?= type=docker @@ -284,11 +280,11 @@ e2e-publisher-deploy: # Build manager binary manager: generate - GO111MODULE=on go build -mod vendor -o bin/manager -ldflags $(LDFLAGS) main.go + GO111MODULE=on go build -mod vendor -o bin/manager -ldflags $(LDFLAGS) # Build manager binary manager-osx: generate - GO111MODULE=on go build -mod vendor -o bin/manager GOOS=darwin -ldflags $(LDFLAGS) main.go + GO111MODULE=on go build -mod vendor -o bin/manager GOOS=darwin -ldflags $(LDFLAGS) # Run against the configured Kubernetes cluster in ~/.kube/config run: generate manifests diff --git a/Tiltfile b/Tiltfile index be94dfe20e0..88262e866e7 100644 --- a/Tiltfile +++ b/Tiltfile @@ -16,8 +16,6 @@ allow_k8s_contexts(settings.get("allowed_contexts", [])) if settings.get("trigger_mode", "auto").lower() == "manual": trigger_mode(TRIGGER_MODE_MANUAL) -LDFLAGS = "-X github.com/open-policy-agent/gatekeeper/pkg/version.Version=latest" - TILT_DOCKERFILE = """ FROM golang:1.20-bullseye as tilt-helper # Support live reloading with Tilt @@ -36,8 +34,7 @@ COPY bin/manager . def build_manager(): cmd = [ "make tilt-prepare", - "GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod vendor -a -ldflags \"" + - LDFLAGS + "\" -o .tiltbuild/bin/manager", + "GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod vendor -a -o .tiltbuild/bin/manager", ] local_resource( "manager", @@ -90,7 +87,8 @@ def deploy_gatekeeper(): name="gatekeeper", namespace="gatekeeper-system", values=[".tiltbuild/charts/gatekeeper/values.yaml"], - set=["{}={}".format(k, str(v).lower()) for k, v in helm_values.items()], + set=["{}={}".format(k, str(v).lower()) + for k, v in helm_values.items()], )) # add label to resources @@ -102,16 +100,19 @@ def deploy_gatekeeper(): port = int(helm_values["audit.metricsPort"]) k8s_resource( workload="gatekeeper-audit", - port_forwards=[port_forward(port, name="View metrics", link_path="/metrics")], + port_forwards=[port_forward( + port, name="View metrics", link_path="/metrics")], ) if "controllerManager.metricsPort" in helm_values: port = int(helm_values["controllerManager.metricsPort"]) k8s_resource( workload="gatekeeper-controller-manager", - port_forwards=[port_forward(port, name="View metrics", link_path="/metrics")], + port_forwards=[port_forward( + port, name="View metrics", link_path="/metrics")], ) + build_manager() build_crds() diff --git a/cmd/gator/gator.go b/cmd/gator/gator.go index efd7aae8e09..be611a9713c 100644 --- a/cmd/gator/gator.go +++ b/cmd/gator/gator.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "os" "github.com/open-policy-agent/gatekeeper/v3/cmd/gator/expand" @@ -12,13 +11,6 @@ import ( k8sVersion "sigs.k8s.io/release-utils/version" ) -const state = "beta" - -var ( - frameworksVersion string - opaVersion string -) - var commands = []*cobra.Command{ verify.Cmd, test.Cmd, @@ -28,12 +20,12 @@ var commands = []*cobra.Command{ func init() { rootCmd.AddCommand(commands...) + rootCmd.Version = version.GetUserAgent("gator") } var rootCmd = &cobra.Command{ - Use: "gator subcommand", - Short: "gator is a suite of authorship tools for Gatekeeper", - Version: fmt.Sprintf("%s (Feature State: %s), OPA version: %s, Framework version: %s", version.Version, state, opaVersion, frameworksVersion), + Use: "gator subcommand", + Short: "gator is a suite of authorship tools for Gatekeeper", } func main() { diff --git a/gator.Dockerfile b/gator.Dockerfile index 1fd5b3dc722..0da745f86ac 100644 --- a/gator.Dockerfile +++ b/gator.Dockerfile @@ -21,7 +21,7 @@ ENV GO111MODULE=on \ COPY . /go/src/github.com/open-policy-agent/gatekeeper WORKDIR /go/src/github.com/open-policy-agent/gatekeeper/cmd/gator -RUN go build -mod vendor -a -ldflags "${LDFLAGS:--X github.com/open-policy-agent/gatekeeper/pkg/version.Version=latest -X main.frameworksVersion=latest -X main.opaVersion=latest}" -o /gator +RUN go build -mod vendor -a -ldflags "${LDFLAGS}" -o /gator FROM --platform=$BUILDPLATFORM $BASEIMAGE as build USER 65532:65532 diff --git a/main.go b/main.go index 7669e5aec66..e2f3859dbe6 100644 --- a/main.go +++ b/main.go @@ -204,7 +204,8 @@ func innerMain() int { } config := ctrl.GetConfigOrDie() - config.UserAgent = version.GetUserAgent() + config.UserAgent = version.GetUserAgent("gatekeeper") + setupLog.Info("setting up manager", "user agent", config.UserAgent) var webhooks []rotator.WebhookInfo webhooks = webhook.AppendValidationWebhookIfEnabled(webhooks) diff --git a/pkg/version/version.go b/pkg/version/version.go index 414cc8fd40b..b19d010f8f9 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -6,14 +6,18 @@ import ( "runtime/debug" ) +const gatorState = "beta" + // Version is the gatekeeper version. var Version string -// GetUserAgent returns a user agent of the format: gatekeeper/ (/) <-vcsdirty>/. -func GetUserAgent() string { +// GetUserAgent returns Gatekeeper and Gator version information. +func GetUserAgent(name string) string { vcsrevision := "unknown" vcstimestamp := "unknown" vcsdirty := "" + opaVersion := "unknown" + frameworksVersion := "unknown" if info, ok := debug.ReadBuildInfo(); ok { for _, v := range info.Settings { @@ -28,7 +32,28 @@ func GetUserAgent() string { vcstimestamp = v.Value } } + + for _, v := range info.Deps { + switch v.Path { + case "github.com/open-policy-agent/opa": + opaVersion = v.Version + case "github.com/open-policy-agent/frameworks/constraint": + frameworksVersion = v.Version + } + } + } + + // OPA and Frameworks version used by Gatekeeper and Gator + opaFrameworksVersion := fmt.Sprintf("opa/%s, frameworks/%s", opaVersion, frameworksVersion) + + // if LDFLAGS are not set, use revision info + if Version == "" { + Version = fmt.Sprintf("devel (%s)", vcsrevision) + } + + if name == "gator" { + return fmt.Sprintf("%s (Feature State: %s), %s", Version, gatorState, opaFrameworksVersion) } - return fmt.Sprintf("gatekeeper/%s (%s/%s) %s%s/%s", Version, runtime.GOOS, runtime.GOARCH, vcsrevision, vcsdirty, vcstimestamp) + return fmt.Sprintf("%s/%s (%s/%s) %s%s/%s, %s", name, Version, runtime.GOOS, runtime.GOARCH, vcsrevision, vcsdirty, vcstimestamp, opaFrameworksVersion) } From 1fe0d7929c16e5312a6450c144b7f8f27bece811 Mon Sep 17 00:00:00 2001 From: Sertac Ozercan Date: Fri, 11 Aug 2023 21:24:55 +0000 Subject: [PATCH 2/2] fix lint Signed-off-by: Sertac Ozercan --- pkg/version/version.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pkg/version/version.go b/pkg/version/version.go index b19d010f8f9..4907d50cb9b 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -6,18 +6,21 @@ import ( "runtime/debug" ) -const gatorState = "beta" +const ( + gatorState = "beta" + unknown = "unknown" +) // Version is the gatekeeper version. var Version string // GetUserAgent returns Gatekeeper and Gator version information. func GetUserAgent(name string) string { - vcsrevision := "unknown" - vcstimestamp := "unknown" + vcsrevision := unknown + vcstimestamp := unknown vcsdirty := "" - opaVersion := "unknown" - frameworksVersion := "unknown" + opaVersion := unknown + frameworksVersion := unknown if info, ok := debug.ReadBuildInfo(); ok { for _, v := range info.Settings {