mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 10:15:22 +00:00
350 lines
11 KiB
Makefile
350 lines
11 KiB
Makefile
# Copyright 2019 The Kubernetes Authors.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Makefile for kustomize CLI and API.
|
|
|
|
SHELL := /usr/bin/env bash
|
|
GOOS = $(shell go env GOOS)
|
|
GOARCH = $(shell go env GOARCH)
|
|
MYGOBIN = $(shell go env GOBIN)
|
|
ifeq ($(MYGOBIN),)
|
|
MYGOBIN = $(shell go env GOPATH)/bin
|
|
endif
|
|
export PATH := $(MYGOBIN):$(PATH)
|
|
MODULES := '"cmd/config" "api/" "kustomize/" "kyaml/"'
|
|
LATEST_V4_RELEASE=v4.4.1
|
|
|
|
# Provide defaults for REPO_OWNER and REPO_NAME if not present.
|
|
# Typically these values would be provided by Prow.
|
|
ifndef REPO_OWNER
|
|
REPO_OWNER := "kubernetes-sigs"
|
|
endif
|
|
|
|
ifndef REPO_NAME
|
|
REPO_NAME := "kustomize"
|
|
endif
|
|
|
|
.PHONY: all
|
|
all: install-tools verify-kustomize
|
|
|
|
.PHONY: verify-kustomize
|
|
verify-kustomize: \
|
|
lint-kustomize \
|
|
test-unit-kustomize-all \
|
|
test-examples-kustomize-against-HEAD \
|
|
test-examples-kustomize-against-v4-release
|
|
|
|
# The following target referenced by a file in
|
|
# https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-sigs/kustomize
|
|
.PHONY: prow-presubmit-check
|
|
prow-presubmit-check: \
|
|
install-tools \
|
|
lint-kustomize \
|
|
test-unit-kustomize-all \
|
|
test-unit-cmd-all \
|
|
test-go-mod \
|
|
test-examples-kustomize-against-HEAD \
|
|
test-examples-kustomize-against-v4-release
|
|
|
|
.PHONY: verify-kustomize-e2e
|
|
verify-kustomize-e2e: test-examples-e2e-kustomize
|
|
|
|
# Other builds in this repo might want a different linter version.
|
|
# Without one Makefile to rule them all, the different makes
|
|
# cannot assume that golanci-lint is at the version they want.
|
|
# This installs what kustomize wants to use.
|
|
$(MYGOBIN)/golangci-lint-kustomize:
|
|
rm -f $(CURDIR)/hack/golangci-lint
|
|
GOBIN=$(CURDIR)/hack go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.23.8
|
|
mv $(CURDIR)/hack/golangci-lint $(MYGOBIN)/golangci-lint-kustomize
|
|
|
|
$(MYGOBIN)/mdrip:
|
|
go install github.com/monopole/mdrip@v1.0.2
|
|
|
|
$(MYGOBIN)/stringer:
|
|
go get golang.org/x/tools/cmd/stringer
|
|
|
|
$(MYGOBIN)/goimports:
|
|
go get golang.org/x/tools/cmd/goimports
|
|
|
|
# Build from local source.
|
|
$(MYGOBIN)/gorepomod:
|
|
cd cmd/gorepomod; \
|
|
go install .
|
|
|
|
# Build from local source.
|
|
$(MYGOBIN)/k8scopy:
|
|
cd cmd/k8scopy; \
|
|
go install .
|
|
|
|
# Build from local source.
|
|
$(MYGOBIN)/pluginator:
|
|
cd cmd/pluginator; \
|
|
go install .
|
|
|
|
# Build from local source.
|
|
$(MYGOBIN)/kustomize: build-kustomize-api
|
|
cd kustomize; \
|
|
go install .
|
|
|
|
.PHONY: install-tools
|
|
install-tools: \
|
|
$(MYGOBIN)/goimports \
|
|
$(MYGOBIN)/golangci-lint-kustomize \
|
|
$(MYGOBIN)/gorepomod \
|
|
$(MYGOBIN)/helmV3 \
|
|
$(MYGOBIN)/k8scopy \
|
|
$(MYGOBIN)/mdrip \
|
|
$(MYGOBIN)/pluginator \
|
|
$(MYGOBIN)/stringer
|
|
|
|
### Begin kustomize plugin rules.
|
|
#
|
|
# The rules to deal with builtin plugins are a bit
|
|
# complicated because
|
|
#
|
|
# - Every builtin plugin is a Go plugin -
|
|
# meaning it gets its own module directory
|
|
# (outside of the api module) with Go
|
|
# code in a 'main' package per Go plugin rules.
|
|
# - kustomize locates plugins using the
|
|
# 'apiVersion' and 'kind' fields from the
|
|
# plugin config file.
|
|
# - k8s wants CamelCase in 'kind' fields.
|
|
# - The module name (the last name in the path)
|
|
# must be the lowercased 'kind' of the
|
|
# plugin because Go and related tools
|
|
# demand lowercase in import paths, but
|
|
# allow CamelCase in file names.
|
|
# - the generated code must live in the api
|
|
# module (it's linked into the api).
|
|
|
|
# Where all generated builtin plugin code should go.
|
|
pGen=api/internal/builtins
|
|
# Where the builtin Go plugin modules live.
|
|
pSrc=plugin/builtin
|
|
|
|
_builtinplugins = \
|
|
AnnotationsTransformer.go \
|
|
ConfigMapGenerator.go \
|
|
IAMPolicyGenerator.go \
|
|
HashTransformer.go \
|
|
ImageTagTransformer.go \
|
|
LabelTransformer.go \
|
|
LegacyOrderTransformer.go \
|
|
NamespaceTransformer.go \
|
|
PatchJson6902Transformer.go \
|
|
PatchStrategicMergeTransformer.go \
|
|
PatchTransformer.go \
|
|
PrefixSuffixTransformer.go \
|
|
ReplacementTransformer.go \
|
|
ReplicaCountTransformer.go \
|
|
SecretGenerator.go \
|
|
ValueAddTransformer.go \
|
|
HelmChartInflationGenerator.go
|
|
|
|
# Maintaining this explicit list of generated files, and
|
|
# adding it as a dependency to a few targets, to assure
|
|
# they get recreated if deleted. The rules below on how
|
|
# to make them don't, by themselves, assure they will be
|
|
# recreated if deleted.
|
|
builtinplugins = $(patsubst %,$(pGen)/%,$(_builtinplugins))
|
|
|
|
# These rules are verbose, but assure that if a source file
|
|
# is modified, the corresponding generated file, and only
|
|
# that file, will be recreated.
|
|
$(pGen)/AnnotationsTransformer.go: $(pSrc)/annotationstransformer/AnnotationsTransformer.go
|
|
$(pGen)/ConfigMapGenerator.go: $(pSrc)/configmapgenerator/ConfigMapGenerator.go
|
|
$(pGen)/GkeSaGenerator.go: $(pSrc)/gkesagenerator/GkeSaGenerator.go
|
|
$(pGen)/HashTransformer.go: $(pSrc)/hashtransformer/HashTransformer.go
|
|
$(pGen)/ImageTagTransformer.go: $(pSrc)/imagetagtransformer/ImageTagTransformer.go
|
|
$(pGen)/LabelTransformer.go: $(pSrc)/labeltransformer/LabelTransformer.go
|
|
$(pGen)/LegacyOrderTransformer.go: $(pSrc)/legacyordertransformer/LegacyOrderTransformer.go
|
|
$(pGen)/NamespaceTransformer.go: $(pSrc)/namespacetransformer/NamespaceTransformer.go
|
|
$(pGen)/PatchJson6902Transformer.go: $(pSrc)/patchjson6902transformer/PatchJson6902Transformer.go
|
|
$(pGen)/PatchStrategicMergeTransformer.go: $(pSrc)/patchstrategicmergetransformer/PatchStrategicMergeTransformer.go
|
|
$(pGen)/PatchTransformer.go: $(pSrc)/patchtransformer/PatchTransformer.go
|
|
$(pGen)/PrefixSuffixTransformer.go: $(pSrc)/prefixsuffixtransformer/PrefixSuffixTransformer.go
|
|
$(pGen)/ReplacementTransformer.go: $(pSrc)/replacementtransformer/ReplacementTransformer.go
|
|
$(pGen)/ReplicaCountTransformer.go: $(pSrc)/replicacounttransformer/ReplicaCountTransformer.go
|
|
$(pGen)/SecretGenerator.go: $(pSrc)/secretgenerator/SecretGenerator.go
|
|
$(pGen)/ValueAddTransformer.go: $(pSrc)/valueaddtransformer/ValueAddTransformer.go
|
|
$(pGen)/HelmChartInflationGenerator.go: $(pSrc)/helmchartinflationgenerator/HelmChartInflationGenerator.go
|
|
|
|
# The (verbose but portable) Makefile way to convert to lowercase.
|
|
toLowerCase = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))
|
|
|
|
$(pGen)/%.go: $(MYGOBIN)/pluginator
|
|
@echo "generating $*"
|
|
( \
|
|
set -e; \
|
|
cd $(pSrc)/$(call toLowerCase,$*); \
|
|
go generate .; \
|
|
cd ../../../$(pGen); \
|
|
$(MYGOBIN)/goimports -w $*.go \
|
|
)
|
|
|
|
# Target is for debugging.
|
|
.PHONY: generate-kustomize-builtin-plugins
|
|
generate-kustomize-builtin-plugins: $(builtinplugins)
|
|
|
|
.PHONY: build-kustomize-external-go-plugin
|
|
build-kustomize-external-go-plugin:
|
|
./hack/buildExternalGoPlugins.sh ./plugin
|
|
|
|
.PHONY: clean-kustomize-external-go-plugin
|
|
clean-kustomize-external-go-plugin:
|
|
./hack/buildExternalGoPlugins.sh ./plugin clean
|
|
|
|
### End kustomize plugin rules.
|
|
|
|
.PHONY: lint-kustomize
|
|
lint-kustomize: $(MYGOBIN)/golangci-lint-kustomize $(builtinplugins)
|
|
cd api; $(MYGOBIN)/golangci-lint-kustomize \
|
|
-c ../.golangci-kustomize.yml \
|
|
run ./...
|
|
cd kustomize; $(MYGOBIN)/golangci-lint-kustomize \
|
|
-c ../.golangci-kustomize.yml \
|
|
run ./...
|
|
cd cmd/pluginator; $(MYGOBIN)/golangci-lint-kustomize \
|
|
-c ../../.golangci-kustomize.yml \
|
|
run ./...
|
|
|
|
# Used to add non-default compilation flags when experimenting with
|
|
# plugin-to-api compatibility checks.
|
|
.PHONY: build-kustomize-api
|
|
build-kustomize-api: $(builtinplugins)
|
|
cd api; go build ./...
|
|
|
|
.PHONY: generate-kustomize-api
|
|
generate-kustomize-api: $(MYGOBIN)/k8scopy
|
|
cd api; go generate ./...
|
|
|
|
.PHONY: test-unit-kustomize-api
|
|
test-unit-kustomize-api: build-kustomize-api
|
|
cd api; go test ./... -ldflags "-X sigs.k8s.io/kustomize/api/provenance.version=v444.333.222"; \
|
|
cd krusty; OPENAPI_TEST=true go test -run TestCustomOpenAPIFieldFromComponentWithOverlays
|
|
|
|
.PHONY: test-unit-kustomize-plugins
|
|
test-unit-kustomize-plugins:
|
|
./hack/testUnitKustomizePlugins.sh
|
|
|
|
.PHONY: test-unit-kustomize-cli
|
|
test-unit-kustomize-cli:
|
|
cd kustomize; go test ./...
|
|
|
|
.PHONY: test-unit-kustomize-all
|
|
test-unit-kustomize-all: \
|
|
test-unit-kustomize-api \
|
|
test-unit-kustomize-cli \
|
|
test-unit-kustomize-plugins
|
|
|
|
test-unit-cmd-all:
|
|
./hack/kyaml-pre-commit.sh
|
|
|
|
test-go-mod:
|
|
./hack/check-go-mod.sh
|
|
|
|
.PHONY:
|
|
test-examples-e2e-kustomize: $(MYGOBIN)/mdrip $(MYGOBIN)/kind
|
|
( \
|
|
set -e; \
|
|
/bin/rm -f $(MYGOBIN)/kustomize; \
|
|
echo "Installing kustomize from ."; \
|
|
cd kustomize; go install .; cd ..; \
|
|
./hack/testExamplesE2EAgainstKustomize.sh .; \
|
|
)
|
|
|
|
.PHONY:
|
|
test-examples-kustomize-against-HEAD: $(MYGOBIN)/kustomize $(MYGOBIN)/mdrip
|
|
./hack/testExamplesAgainstKustomize.sh HEAD
|
|
|
|
.PHONY:
|
|
test-examples-kustomize-against-v4-release: $(MYGOBIN)/mdrip
|
|
./hack/testExamplesAgainstKustomize.sh v4@$(LATEST_V4_RELEASE)
|
|
|
|
# linux only.
|
|
# This is for testing an example plugin that
|
|
# uses kubeval for validation.
|
|
# Don't want to add a hard dependence in go.mod file
|
|
# to github.com/instrumenta/kubeval.
|
|
# Instead, download the binary.
|
|
$(MYGOBIN)/kubeval:
|
|
( \
|
|
set -e; \
|
|
d=$(shell mktemp -d); cd $$d; \
|
|
wget https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-$(GOOS)-$(GOARCH).tar.gz; \
|
|
tar xf kubeval-$(GOOS)-$(GOARCH).tar.gz; \
|
|
mv kubeval $(MYGOBIN); \
|
|
rm -rf $$d; \
|
|
)
|
|
|
|
# linux only.
|
|
# This is for testing an example plugin that uses helm to inflate a chart
|
|
# for subsequent kustomization.
|
|
# Don't want to add a hard dependence in go.mod file to helm.
|
|
# Instead, download the binaries.
|
|
$(MYGOBIN)/helmV2:
|
|
( \
|
|
set -e; \
|
|
d=$(shell mktemp -d); cd $$d; \
|
|
tgzFile=helm-v2.13.1-$(GOOS)-$(GOARCH).tar.gz; \
|
|
wget https://storage.googleapis.com/kubernetes-helm/$$tgzFile; \
|
|
tar -xvzf $$tgzFile; \
|
|
mv $(GOOS)-$(GOARCH)/helm $(MYGOBIN)/helmV2; \
|
|
rm -rf $$d \
|
|
)
|
|
|
|
# Helm V3 differs from helm V2; downloading it to provide coverage for the
|
|
# chart inflator plugin under helm v3.
|
|
$(MYGOBIN)/helmV3:
|
|
( \
|
|
set -e; \
|
|
d=$(shell mktemp -d); cd $$d; \
|
|
tgzFile=helm-v3.6.3-$(GOOS)-$(GOARCH).tar.gz; \
|
|
wget https://get.helm.sh/$$tgzFile; \
|
|
tar -xvzf $$tgzFile; \
|
|
mv $(GOOS)-$(GOARCH)/helm $(MYGOBIN)/helmV3; \
|
|
rm -rf $$d \
|
|
)
|
|
|
|
$(MYGOBIN)/kind:
|
|
( \
|
|
set -e; \
|
|
d=$(shell mktemp -d); cd $$d; \
|
|
wget -O ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(GOOS)-$(GOARCH); \
|
|
chmod +x ./kind; \
|
|
mv ./kind $(MYGOBIN); \
|
|
rm -rf $$d; \
|
|
)
|
|
|
|
# linux only.
|
|
$(MYGOBIN)/gh:
|
|
( \
|
|
set -e; \
|
|
d=$(shell mktemp -d); cd $$d; \
|
|
tgzFile=gh_1.0.0_$(GOOS)_$(GOARCH).tar.gz; \
|
|
wget https://github.com/cli/cli/releases/download/v1.0.0/$$tgzFile; \
|
|
tar -xvzf $$tgzFile; \
|
|
mv gh_1.0.0_$(GOOS)_$(GOARCH)/bin/gh $(MYGOBIN)/gh; \
|
|
rm -rf $$d \
|
|
)
|
|
|
|
.PHONY: clean
|
|
clean: clean-kustomize-external-go-plugin
|
|
go clean --cache
|
|
rm -f $(builtinplugins)
|
|
rm -f $(MYGOBIN)/goimports
|
|
rm -f $(MYGOBIN)/golangci-lint-kustomize
|
|
rm -f $(MYGOBIN)/kustomize
|
|
rm -f $(MYGOBIN)/mdrip
|
|
rm -f $(MYGOBIN)/stringer
|
|
|
|
# Handle pluginator manually.
|
|
# rm -f $(MYGOBIN)/pluginator
|
|
|
|
# Nuke the site from orbit. It's the only way to be sure.
|
|
.PHONY: nuke
|
|
nuke: clean
|
|
go clean --modcache
|