From db85ae28a054a31b506f670f2517b3bc77e2a822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Ma=C5=82ek?= Date: Fri, 13 Jan 2023 18:59:51 +0100 Subject: [PATCH 1/2] feat: add version command --- CHANGELOG.md | 2 ++ Dockerfile | 12 +++++----- Makefile | 39 +++++++++++++++++++++++++++------ internal/cmd/rootcmd/rootcmd.go | 26 ++++++++++++++++++++++ internal/manager/config.go | 14 ++++++------ 5 files changed, 73 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb4ec81e2d..06890bf2eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,8 @@ Adding a new version? You'll need three changes: if the controlled objects succeeded or failed to be translated to Kong configuration. [#3359](https://github.com/Kong/kubernetes-ingress-controller/pull/3359) +- Added `version` command + [#3379](https://github.com/Kong/kubernetes-ingress-controller/pull/3379) ### Fixed diff --git a/Dockerfile b/Dockerfile index 7d96b88bee..c76b9a7217 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,14 +22,14 @@ RUN go mod download COPY pkg/ pkg/ COPY internal/ internal/ +COPY Makefile . # Build ARG TAG ARG COMMIT ARG REPO_INFO -RUN CGO_ENABLED=0 GOOS=linux GOARCH="${TARGETARCH}" GO111MODULE=on go build -a -o manager -ldflags "-s -w -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Release=$TAG -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Commit=$COMMIT -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Repo=$REPO_INFO" ./internal/cmd/main.go - +RUN CGO_ENABLED=0 GOOS=linux GOARCH="${TARGETARCH}" GO111MODULE=on make _build ### FIPS 140-2 binary # Build the manager binary @@ -62,7 +62,7 @@ ARG TAG ARG COMMIT ARG REPO_INFO -RUN CGO_ENABLED=0 GOOS=linux GOARCH="${TARGETARCH}" GO111MODULE=on go build -a -o manager -ldflags "-s -w -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Release=$TAG -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Commit=$COMMIT -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Repo=$REPO_INFO" ./internal/cmd/fips/main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH="${TARGETARCH}" GO111MODULE=on make _build.fips # Build a manager binary with debug symbols and download Delve FROM builder as builder-delve @@ -71,7 +71,7 @@ ARG TARGETPLATFORM ARG TARGETOS ARG TARGETARCH -RUN CGO_ENABLED=0 GOOS=linux GOARCH="${TARGETARCH}" GO111MODULE=on go build -a -o manager-debug -gcflags=all="-N -l" -ldflags "-X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Release=$TAG -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Commit=$COMMIT -X github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata.Repo=$REPO_INFO" ./internal/cmd/main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH="${TARGETARCH}" GO111MODULE=on make _build.debug ### Debug # Create an image that runs a debug build with a Delve remote server on port 2345 @@ -105,7 +105,7 @@ LABEL name="Kong Ingress Controller" \ RUN groupadd --system kic && \ adduser --system kic -g kic -u 1000 -COPY --from=builder /workspace/manager . +COPY --from=builder /workspace/bin/manager . COPY LICENSE /licenses/ COPY LICENSES /licenses/ @@ -171,7 +171,7 @@ LABEL name="Kong Ingress Controller" \ description="Use Kong for Kubernetes Ingress. Configure plugins, health checking, load balancing and more in Kong for Kubernetes Services, all using Custom Resource Definitions (CRDs) and Kubernetes-native tooling." WORKDIR / -COPY --from=builder /workspace/manager . +COPY --from=builder /workspace/bin/manager . USER 65532:65532 ENTRYPOINT ["/manager"] diff --git a/Makefile b/Makefile index 76580968a8..898f11dbb6 100644 --- a/Makefile +++ b/Makefile @@ -104,11 +104,36 @@ clean: @rm -f coverage*.out .PHONY: build -build: generate fmt vet lint - go build -a -o bin/manager -ldflags "-s -w \ - -X $(REPO_URL)/v2/internal/metadata.Release=$(TAG) \ - -X $(REPO_URL)/v2/internal/metadata.Commit=$(COMMIT) \ - -X $(REPO_URL)/v2/internal/metadata.Repo=$(REPO_INFO)" internal/cmd/main.go +build: generate fmt vet lint _build + +.PHONY: build.fips +build.fips: generate fmt vet lint _build.fips + +.PHONY: _build +_build: + $(MAKE) _build.template MAIN=./internal/cmd/main.go + +.PHONY: _build.fips +_build.fips: + $(MAKE) _build.template MAIN=./internal/cmd/fips/main.go + +.PHONY: _build.template +_build.template: + go build -o bin/manager -ldflags "-s -w \ + -X $(REPO_URL)/v2/internal/manager/metadata.Release=$(TAG) \ + -X $(REPO_URL)/v2/internal/manager/metadata.Commit=$(COMMIT) \ + -X $(REPO_URL)/v2/internal/manager/metadata.Repo=$(REPO_INFO)" ${MAIN} + +.PHONY: _build.debug +_build.debug: + $(MAKE) _build.template.debug MAIN=./internal/cmd/main.go + +.PHONY: _build.template.debug +_build.template.debug: + go build -o bin/manager-debug -gcflags=all="-N -l" -ldflags " \ + -X $(REPO_URL)/v2/internal/manager/metadata.Release=$(TAG) \ + -X $(REPO_URL)/v2/internal/manager/metadata.Commit=$(COMMIT) \ + -X $(REPO_URL)/v2/internal/manager/metadata.Repo=$(REPO_INFO)" ${MAIN} .PHONY: fmt fmt: @@ -229,8 +254,8 @@ container: --build-arg REPO_INFO=${REPO_INFO} \ -t ${IMAGE}:${TAG} . -.PHONY: container -debug-container: +.PHONY: container.debug +container.debug: docker buildx build \ -f Dockerfile \ --target debug \ diff --git a/internal/cmd/rootcmd/rootcmd.go b/internal/cmd/rootcmd/rootcmd.go index b546b3e2be..dcc0a77d81 100644 --- a/internal/cmd/rootcmd/rootcmd.go +++ b/internal/cmd/rootcmd/rootcmd.go @@ -2,9 +2,13 @@ package rootcmd import ( + "encoding/json" + "fmt" + "github.com/spf13/cobra" "github.com/kong/kubernetes-ingress-controller/v2/internal/manager" + "github.com/kong/kubernetes-ingress-controller/v2/internal/manager/metadata" ) // Execute is the entry point to the controller manager. @@ -18,7 +22,29 @@ func Execute() { }, SilenceUsage: true, } + versionCmd = &cobra.Command{ + Use: "version", + Short: "Show JSON version information", + RunE: func(cmd *cobra.Command, args []string) error { + type Version struct { + Release string `json:"release"` + Repo string `json:"repo"` + Commit string `json:"commit"` + } + out, err := json.Marshal(Version{ + Release: metadata.Release, + Repo: metadata.Repo, + Commit: metadata.Commit, + }) + if err != nil { + return fmt.Errorf("failed to print version information: %w", err) + } + fmt.Printf("%s\n", out) + return nil + }, + } ) + rootCmd.AddCommand(versionCmd) rootCmd.Flags().AddFlagSet(cfg.FlagSet()) cobra.CheckErr(rootCmd.Execute()) } diff --git a/internal/manager/config.go b/internal/manager/config.go index fe20225794..dacb3380a3 100644 --- a/internal/manager/config.go +++ b/internal/manager/config.go @@ -161,15 +161,15 @@ func (c *Config) FlagSet() *pflag.FlagSet { flagSet.StringSliceVar(&c.FilterTags, "kong-admin-filter-tag", []string{"managed-by-ingress-controller"}, "The tag used to manage and filter entities in Kong. This flag can be specified multiple times to specify multiple tags. This setting will be silently ignored if the Kong instance has no tags support.") flagSet.IntVar(&c.Concurrency, "kong-admin-concurrency", 10, "Max number of concurrent requests sent to Kong's Admin API.") flagSet.StringSliceVar(&c.WatchNamespaces, "watch-namespace", nil, - `Namespace(s) to watch for Kubernetes resources. Defaults to all namespaces. To watch multiple namespaces, use - a comma-separated list of namespaces.`) + `Namespace(s) to watch for Kubernetes resources. Defaults to all namespaces.`+ + `To watch multiple namespaces, use a comma-separated list of namespaces.`) // Ingress status - flagSet.StringVar(&c.PublishService, "publish-service", "", `Service fronting Ingress resources in "namespace/name" - format. The controller will update Ingress status information with this Service's endpoints.`) - flagSet.StringSliceVar(&c.PublishStatusAddress, "publish-status-address", []string{}, `User-provided addresses in - comma-separated string format, for use in lieu of "publish-service" when that Service lacks useful address - information (for example, in bare-metal environments).`) + flagSet.StringVar(&c.PublishService, "publish-service", "", + `Service fronting Ingress resources in "namespace/name" format. The controller will update Ingress status information with this Service's endpoints.`) + flagSet.StringSliceVar(&c.PublishStatusAddress, "publish-status-address", []string{}, + `User-provided addresses in comma-separated string format, for use in lieu of "publish-service" `+ + `when that Service lacks useful address information (for example, in bare-metal environments).`) flagSet.BoolVar(&c.UpdateStatus, "update-status", true, `Indicates if the ingress controller should update the status of resources (e.g. IP/Hostname for v1.Ingress, e.t.c.)`) From 6819381a0bea52ed1951a3aaece092ca0e634789 Mon Sep 17 00:00:00 2001 From: Travis Raines <571832+rainest@users.noreply.github.com> Date: Fri, 13 Jan 2023 13:14:03 -0800 Subject: [PATCH 2/2] chore(ci) add make flag --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 898f11dbb6..4108ff7166 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ # Configuration - Repository # ------------------------------------------------------------------------------ +MAKEFLAGS += --no-print-directory REPO_URL ?= github.com/kong/kubernetes-ingress-controller REPO_INFO ?= $(shell git config --get remote.origin.url) TAG ?= $(shell git describe --tags)