From b3fecc189c49e8679e5519d2d791fdb0cd9244c3 Mon Sep 17 00:00:00 2001 From: Xavier Renaut Date: Fri, 24 Apr 2026 18:25:27 -0400 Subject: [PATCH] Restore in-Docker Go build and add docker-build target Restore multi-stage Docker build so Go compilation happens inside the container for better isolation and reproducibility. Bump builder image from golang:1.19 to golang:1.23 to address known CVEs. Add `docker-build` Makefile target that builds the Docker image directly from the repo root, bypassing goreleaser's limited build context. Update deprecated goreleaser `--rm-dist` flag to `--clean`. Fix missing error check after ClientConfig() in kubeclient.go and remove stray blank line in logging.go. Fixes #288 --- Dockerfile | 2 +- Makefile | 9 ++++++--- README.md | 4 ++-- pkg/sloop/common/logging.go | 1 - pkg/sloop/ingress/kubeclient.go | 4 ++++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index c4d98454..5e1e090b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19 as build +FROM golang:1.23 AS build RUN apt-get update && apt-get install -y curl make # https://github.com/kubernetes-sigs/aws-iam-authenticator/releases diff --git a/Makefile b/Makefile index 8290481c..5a0695e1 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY:all run linux docker generate tidy protobuf cover docker-push +.PHONY:all run linux docker docker-build generate tidy protobuf cover docker-push all: go get ./pkg/... @@ -19,10 +19,13 @@ goreleaser: fi docker-snapshot: goreleaser - $(GOPATH)/bin/goreleaser release --snapshot --rm-dist + $(GOPATH)/bin/goreleaser release --snapshot --clean + +docker-build: + docker build -t salesforce/sloop:latest . docker: goreleaser - $(GOPATH)/bin/goreleaser release --rm-dist --skip-publish + $(GOPATH)/bin/goreleaser release --clean --skip-publish generate: go generate ./pkg/... diff --git a/README.md b/README.md index 5a451c6e..4719d7d9 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,8 @@ Other makefile targets: To run from Docker you need to host mount your kubeconfig: ```shell script -make docker-snapshot -docker run --rm -it -p 8080:8080 -v ~/.kube/:/kube/ -e KUBECONFIG=/kube/config sloop +make docker-build +docker run --rm -it -p 8080:8080 -v ~/.kube/:/kube/ -e KUBECONFIG=/kube/config salesforce/sloop:latest ``` In this mode, data is written to a memory-backed volume and is discarded after each run. To preserve the data, you can host-mount /data with something like `-v /data/:/some_path_on_host/` diff --git a/pkg/sloop/common/logging.go b/pkg/sloop/common/logging.go index 7eb42fa8..48ef2201 100644 --- a/pkg/sloop/common/logging.go +++ b/pkg/sloop/common/logging.go @@ -1,4 +1,3 @@ - package common import "github.com/golang/glog" diff --git a/pkg/sloop/ingress/kubeclient.go b/pkg/sloop/ingress/kubeclient.go index 7eee066b..a99bb90f 100644 --- a/pkg/sloop/ingress/kubeclient.go +++ b/pkg/sloop/ingress/kubeclient.go @@ -54,6 +54,10 @@ func MakeKubernetesClient(masterURL string, kubeContext string, privilegedAccess if privilegedAccess { clientConfig := getConfig(masterURL, kubeContext) config, err = ClientConfig(clientConfig) + if err != nil { + glog.Errorf("Cannot create config from client config: %v", err) + return nil, err + } glog.Infof("Building k8sclient with context=%v, masterURL=%v, configFile=%v.", kubeContext, config.Host, clientConfig.ConfigAccess().GetLoadingPrecedence()) } else { glog.Infof("Creating Config using BuildConfigFromFlags")