diff --git a/.golangci.yml b/.golangci.yml index f36b7edb8..62139929a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -44,96 +44,25 @@ linters: warn-unused: true -linters-settings: - depguard: - rules: - Main: - deny: - - pkg: github.com/hashicorp/go-multierror - desc: "use errors instead" - - pkg: github.com/pkg/errors - desc: "use errors instead" - - dupl: - threshold: 400 - - gomodguard: - blocked: - modules: - - github.com/evanphx/json-patch: - recommendations: - - github.com/evanphx/json-patch/v5 - -run: - timeout: 10m - -version: "2"formatters: - enable: - - gofmt - - goimports - - exclusions: - generated: lax - settings: - gofmt: - simplify: true - - goimports: - local-prefixes: - - helm.sh/helm/v4 - -linters: - default: none - - enable: - - depguard - - dupl - - gomodguard - - govet - - ineffassign - - misspell - - nakedret - - revive - - staticcheck - - thelper - - unused - - usestdlibvars - - exclusions: - generated: lax - - presets: - - comments - - common-false-positives - - legacy - - std-error-handling - - rules: [] - - warn-unused: true - -linters-settings: - depguard: - rules: - Main: - deny: - - pkg: github.com/hashicorp/go-multierror - desc: "use errors instead" - - pkg: github.com/pkg/errors - desc: "use errors instead" - - dupl: - threshold: 400 - - gomodguard: - blocked: - modules: - - github.com/evanphx/json-patch: - recommendations: - - github.com/evanphx/json-patch/v5 + depguard: + rules: + Main: + deny: + - pkg: github.com/hashicorp/go-multierror + desc: "use errors instead" + - pkg: github.com/pkg/errors + desc: "use errors instead" + + dupl: + threshold: 400 + + gomodguard: + blocked: + modules: + - github.com/evanphx/json-patch: + recommendations: + - github.com/evanphx/json-patch/v5 run: timeout: 10m - -version: "2" \ No newline at end of file diff --git a/Makefile b/Makefile index cc27c2b45..899cf01dc 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ GOLANGCI_LINT = $(GOBIN)/golangci-lint ARCH = $(shell go env GOARCH) ACCEPTANCE_DIR:=../acceptance-testing +# To specify the subset of acceptance tests to run. '.' means all tests ACCEPTANCE_RUN_TESTS=. # go option @@ -41,7 +42,7 @@ ifdef VERSION BINARY_VERSION = $(VERSION) endif BINARY_VERSION ?= ${GIT_TAG} - +# Only set Version if building a tag or VERSION is set ifneq ($(BINARY_VERSION),) LDFLAGS += -X helm.sh/helm/v4/internal/version.version=${BINARY_VERSION} endif @@ -55,7 +56,7 @@ LDFLAGS += -X helm.sh/helm/v4/internal/version.metadata=${VERSION_METADATA} LDFLAGS += -X helm.sh/helm/v4/internal/version.gitCommit=${GIT_COMMIT} LDFLAGS += -X helm.sh/helm/v4/internal/version.gitTreeState=${GIT_DIRTY} LDFLAGS += $(EXT_LDFLAGS) - +# Define constants based on the client-go version K8S_MODULES_VER=$(subst ., ,$(subst v,,$(shell go list -f '{{.Version}}' -m k8s.io/client-go))) K8S_MODULES_MAJOR_VER=$(shell echo $$(($(firstword $(K8S_MODULES_VER)) + 1))) K8S_MODULES_MINOR_VER=$(word 2,$(K8S_MODULES_VER)) @@ -68,16 +69,25 @@ LDFLAGS += -X helm.sh/helm/v4/pkg/chart/v2/util.k8sVersionMinor=$(K8S_MODULES_MI .PHONY: all all: build +# ------------------------------------------------------------------------------ +# build + .PHONY: build build: $(BINDIR)/$(BINNAME) $(BINDIR)/$(BINNAME): $(SRC) CGO_ENABLED=$(CGO_ENABLED) go build $(GOFLAGS) -trimpath -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o '$(BINDIR)'/$(BINNAME) ./cmd/helm +# ------------------------------------------------------------------------------ +# install + .PHONY: install install: build @install "$(BINDIR)/$(BINNAME)" "$(INSTALL_PATH)/$(BINNAME)" +# ------------------------------------------------------------------------------ +# test + .PHONY: test test: build ifeq ($(ARCH),s390x) @@ -95,6 +105,11 @@ test-unit: go test $(GOFLAGS) -run $(TESTS) $(PKG) $(TESTFLAGS) @echo @echo "==> Running unit test(s) with ldflags <==" + # Test to check the deprecation warnings on Kubernetes templates created by `helm create` against the current Kubernetes +# version. Note: The version details are set in var LDFLAGS. To avoid the ldflags impact on other unit tests that are +# based on older versions, this is run separately. When run without the ldflags in the unit test (above) or coverage +# test, it still passes with a false-positive result as the resources shouldn’t be deprecated in the older Kubernetes +# version if it only starts failing with the latest. go test $(GOFLAGS) -run ^TestHelmCreateChart_CheckDeprecatedWarnings$$ ./pkg/lint/ $(TESTFLAGS) -ldflags '$(LDFLAGS)' .PHONY: test-coverage @@ -135,12 +150,20 @@ coverage: format: $(GOIMPORTS) go list -f '{{.Dir}}' ./... | xargs $(GOIMPORTS) -w -local helm.sh/helm +# Generate golden files used in unit tests .PHONY: gen-test-golden gen-test-golden: gen-test-golden: PKG = ./pkg/cmd ./pkg/action gen-test-golden: TESTFLAGS = -update gen-test-golden: test-unit +# ------------------------------------------------------------------------------ +# dependencies + +# If go install is run from inside the project directory it will add the +# dependencies to the go.mod file. To avoid that we change to a directory +# without a go.mod file when downloading the following dependencies + $(GOX): (cd /; go install github.com/mitchellh/gox@v1.0.2-0.20220701044238-9f712387e2d2) @@ -150,6 +173,9 @@ $(GOIMPORTS): $(GOLANGCI_LINT): (cd /; go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2) +# ------------------------------------------------------------------------------ +# release + .PHONY: build-cross build-cross: LDFLAGS += -extldflags "-static" build-cross: $(GOX) @@ -179,6 +205,14 @@ sign: gpg --armor --detach-sign $${f} ; \ done +# The contents of the .sha256sum file are compatible with tools like +# shasum. For example, using the following command will verify +# the file helm-3.1.0-rc.1-darwin-amd64.tar.gz: +# shasum -a 256 -c helm-3.1.0-rc.1-darwin-amd64.tar.gz.sha256sum +# The .sha256 files hold only the hash and are not compatible with +# verification tools like shasum or sha256sum. This method and file can be +# removed in Helm v4. + .PHONY: checksum checksum: for f in $$(ls _dist/*.{gz,zip} 2>/dev/null) ; do \ @@ -186,6 +220,8 @@ checksum: shasum -a 256 "$${f}" | awk '{print $$1}' > "$${f}.sha256" ; \ done +# ------------------------------------------------------------------------------ + .PHONY: clean clean: @rm -rf '$(BINDIR)' ./_dist