github.com/Azure/aad-pod-identity@v1.8.17/Makefile (about) 1 ORG_PATH=github.com/Azure 2 PROJECT_NAME := aad-pod-identity 3 REPO_PATH="$(ORG_PATH)/$(PROJECT_NAME)" 4 NMI_BINARY_NAME := nmi 5 MIC_BINARY_NAME := mic 6 DEMO_BINARY_NAME := demo 7 SIMPLE_CMD_BINARY_NAME := simple 8 GOOS ?= linux 9 TEST_GOOS ?= linux 10 IDENTITY_VALIDATOR_BINARY_NAME := identityvalidator 11 12 DEFAULT_VERSION := v0.0.0-dev 13 IMAGE_VERSION ?= $(DEFAULT_VERSION) 14 15 NMI_VERSION_VAR := $(REPO_PATH)/version.NMIVersion 16 MIC_VERSION_VAR := $(REPO_PATH)/version.MICVersion 17 GIT_VAR := $(REPO_PATH)/version.GitCommit 18 BUILD_DATE_VAR := $(REPO_PATH)/version.BuildDate 19 BUILD_DATE := $$(date +%Y-%m-%d-%H:%M) 20 GIT_HASH := $$(git rev-parse --short HEAD) 21 22 ifeq ($(OS),Windows_NT) 23 GO_BUILD_MODE = default 24 else 25 UNAME_S := $(shell uname -s) 26 ifeq ($(UNAME_S), Linux) 27 GO_BUILD_MODE = pie 28 endif 29 ifeq ($(UNAME_S), Darwin) 30 GO_BUILD_MODE = default 31 endif 32 endif 33 34 GO_BUILD_OPTIONS := --tags "netgo osusergo" -ldflags "-s -X $(NMI_VERSION_VAR)=$(IMAGE_VERSION) -X $(MIC_VERSION_VAR)=$(IMAGE_VERSION) -X $(GIT_VAR)=$(GIT_HASH) -X $(BUILD_DATE_VAR)=$(BUILD_DATE) -extldflags '-static'" 35 E2E_TEST_OPTIONS := -count=1 -v -timeout 24h -ginkgo.progress $(E2E_TEST_OPTIONS_EXTRA) 36 37 # useful for other docker repos 38 REGISTRY_NAME ?= upstreamk8sci 39 REPO_PREFIX ?= k8s/aad-pod-identity 40 REGISTRY ?= $(REGISTRY_NAME).azurecr.io/$(REPO_PREFIX) 41 NMI_IMAGE := $(NMI_BINARY_NAME):$(IMAGE_VERSION) 42 MIC_IMAGE := $(MIC_BINARY_NAME):$(IMAGE_VERSION) 43 DEMO_IMAGE := $(DEMO_BINARY_NAME):$(IMAGE_VERSION) 44 IDENTITY_VALIDATOR_IMAGE := $(IDENTITY_VALIDATOR_BINARY_NAME):$(IMAGE_VERSION) 45 ALL_DOCS := $(shell find . -name '*.md' -type f | sort | grep -vE "website/(themes|node_modules)") 46 TOOLS_MOD_DIR := ./tools 47 TOOLS_DIR := $(abspath ./.tools) 48 49 # docker env var 50 DOCKER_BUILDKIT = 1 51 DOCKER_CLI_EXPERIMENTAL = enabled 52 export DOCKER_BUILDKIT DOCKER_CLI_EXPERIMENTAL 53 BUILD_PLATFORMS ?= linux/amd64,linux/arm64 54 # Output type of docker buildx build 55 OUTPUT_TYPE ?= registry 56 QEMU_VERSION ?= 5.2.0-2 57 BUILDX_BUILDER_NAME ?= container-builder 58 59 CONTROLLER_GEN := $(TOOLS_DIR)/controller-gen 60 GOLANGCI_LINT := $(TOOLS_DIR)/golangci-lint 61 KUSTOMIZE := $(TOOLS_DIR)/kustomize 62 MISSPELL := $(TOOLS_DIR)/misspell 63 64 $(CONTROLLER_GEN): $(TOOLS_MOD_DIR)/go.mod $(TOOLS_MOD_DIR)/go.sum $(TOOLS_MOD_DIR)/tools.go 65 cd $(TOOLS_MOD_DIR) && \ 66 go build -o $(TOOLS_DIR)/controller-gen sigs.k8s.io/controller-tools/cmd/controller-gen 67 68 $(GOLANGCI_LINT): $(TOOLS_MOD_DIR)/go.mod $(TOOLS_MOD_DIR)/go.sum $(TOOLS_MOD_DIR)/tools.go 69 cd $(TOOLS_MOD_DIR) && \ 70 go build -o $(TOOLS_DIR)/golangci-lint github.com/golangci/golangci-lint/cmd/golangci-lint 71 72 $(KUSTOMIZE): $(TOOLS_MOD_DIR)/go.mod $(TOOLS_MOD_DIR)/go.sum $(TOOLS_MOD_DIR)/tools.go 73 cd $(TOOLS_MOD_DIR) && \ 74 go build -o $(TOOLS_DIR)/kustomize sigs.k8s.io/kustomize/kustomize/v3 75 76 $(MISSPELL): $(TOOLS_MOD_DIR)/go.mod $(TOOLS_MOD_DIR)/go.sum $(TOOLS_MOD_DIR)/tools.go 77 cd $(TOOLS_MOD_DIR) && \ 78 go build -o $(TOOLS_DIR)/misspell github.com/client9/misspell/cmd/misspell 79 80 .PHONY: lint 81 lint: $(GOLANGCI_LINT) $(MISSPELL) 82 $(GOLANGCI_LINT) run --timeout=5m 83 $(MISSPELL) -w $(ALL_DOCS) 84 $(MAKE) check-mod 85 86 .PHONY: clean-nmi 87 clean-nmi: 88 rm -rf bin/$(PROJECT_NAME)/$(NMI_BINARY_NAME) 89 90 .PHONY: clean-mic 91 clean-mic: 92 rm -rf bin/$(PROJECT_NAME)/$(MIC_BINARY_NAME) 93 94 .PHONY: clean-demo 95 clean-demo: 96 rm -rf bin/$(PROJECT_NAME)/$(DEMO_BINARY_NAME) 97 98 .PHONY: clean-identity-validator 99 clean-identity-validator: 100 rm -rf bin/$(PROJECT_NAME)/$(IDENTITY_VALIDATOR_BINARY_NAME) 101 102 .PHONY: clean-simple 103 clean-simple: 104 rm -rf bin/$(PROJECT_NAME)/$(SIMPLE_CMD_BINARY_NAME) 105 106 .PHONY: clean 107 clean: 108 rm -rf bin/$(PROJECT_NAME) 109 110 .PHONY: build-nmi 111 build-nmi: clean-nmi 112 CGO_ENABLED=0 PKG_NAME=github.com/Azure/$(PROJECT_NAME)/cmd/$(NMI_BINARY_NAME) $(MAKE) bin/$(PROJECT_NAME)/$(NMI_BINARY_NAME) 113 114 .PHONY: build-mic 115 build-mic: clean-mic 116 CGO_ENABLED=0 PKG_NAME=github.com/Azure/$(PROJECT_NAME)/cmd/$(MIC_BINARY_NAME) $(MAKE) bin/$(PROJECT_NAME)/$(MIC_BINARY_NAME) 117 118 .PHONY: build-simple 119 build-simple: 120 CGO_ENABLED=0 PKG_NAME=github.com/Azure/$(PROJECT_NAME)/cmd/$(SIMPLE_CMD_BINARY_NAME) $(MAKE) bin/$(PROJECT_NAME)/$(SIMPLE_CMD_BINARY_NAME) 121 122 .PHONY: build-demo 123 build-demo: build_tags := netgo osusergo 124 build-demo: clean-demo 125 PKG_NAME=github.com/Azure/$(PROJECT_NAME)/cmd/$(DEMO_BINARY_NAME) ${MAKE} bin/$(PROJECT_NAME)/$(DEMO_BINARY_NAME) 126 127 bin/%: 128 GOOS=$(GOOS) go build $(GO_BUILD_OPTIONS) -o "$(@)" "$(PKG_NAME)" 129 130 .PHONY: build-identity-validator 131 build-identity-validator: clean-identity-validator 132 PKG_NAME=github.com/Azure/$(PROJECT_NAME)/test/image/$(IDENTITY_VALIDATOR_BINARY_NAME) $(MAKE) bin/$(PROJECT_NAME)/$(IDENTITY_VALIDATOR_BINARY_NAME) 133 134 .PHONY: build 135 build: clean build-nmi build-mic build-demo build-identity-validator 136 137 .PHONY: precommit 138 precommit: build unit-test lint 139 140 .PHONY: deepcopy-gen 141 deepcopy-gen: 142 deepcopy-gen -i ./pkg/apis/aadpodidentity/v1/ -o . -O aadpodidentity_deepcopy_generated -p aadpodidentity 143 144 .PHONY: docker-buildx-builder 145 docker-buildx-builder: 146 if ! docker buildx ls | grep -q $(BUILDX_BUILDER_NAME); then \ 147 docker run --rm --privileged multiarch/qemu-user-static:$(QEMU_VERSION) --reset -p yes; \ 148 DOCKER_CLI_EXPERIMENTAL=enabled docker buildx create --name $(BUILDX_BUILDER_NAME) --use; \ 149 docker buildx inspect $(BUILDX_BUILDER_NAME) --bootstrap; \ 150 fi 151 152 .PHONY: image-nmi 153 image-nmi: 154 docker buildx build \ 155 --target nmi \ 156 --no-cache \ 157 --build-arg IMAGE_VERSION=$(IMAGE_VERSION) \ 158 --platform "$(BUILD_PLATFORMS)" \ 159 --output=type=$(OUTPUT_TYPE) \ 160 -t $(REGISTRY)/$(NMI_IMAGE) . 161 162 .PHONY: image-mic 163 image-mic: 164 docker buildx build \ 165 --target mic \ 166 --no-cache \ 167 --build-arg IMAGE_VERSION=$(IMAGE_VERSION) \ 168 --platform "$(BUILD_PLATFORMS)" \ 169 --output=type=$(OUTPUT_TYPE) \ 170 -t "$(REGISTRY)/$(MIC_IMAGE)" . 171 172 .PHONY: image-demo 173 image-demo: 174 docker buildx build \ 175 --target demo \ 176 --no-cache \ 177 --build-arg IMAGE_VERSION=$(IMAGE_VERSION) \ 178 --platform "$(BUILD_PLATFORMS)" \ 179 --output=type=$(OUTPUT_TYPE) \ 180 -t "$(REGISTRY)/$(DEMO_IMAGE)" . 181 182 .PHONY: image-identity-validator 183 image-identity-validator: 184 docker buildx build \ 185 --target identityvalidator \ 186 --no-cache \ 187 --build-arg IMAGE_VERSION=$(IMAGE_VERSION) \ 188 --platform "$(BUILD_PLATFORMS)" \ 189 --output=type=$(OUTPUT_TYPE) \ 190 -t "$(REGISTRY)/$(IDENTITY_VALIDATOR_IMAGE)" . 191 192 .PHONY: images 193 images: image-nmi image-mic image-demo image-identity-validator 194 195 .PHONY: push-nmi 196 push-nmi: validate-version 197 az acr repository show --name $(REGISTRY_NAME) --image $(NMI_IMAGE) > /dev/null 2>&1; if [ $$? -eq 0 ]; then echo "$(NMI_IMAGE) already exists" && exit 0; fi 198 docker push $(REGISTRY)/$(NMI_IMAGE) 199 200 .PHONY: push-mic 201 push-mic: validate-version 202 az acr repository show --name $(REGISTRY_NAME) --image $(MIC_IMAGE) > /dev/null 2>&1; if [ $$? -eq 0 ]; then echo "$(MIC_IMAGE) already exists" && exit 0; fi 203 docker push $(REGISTRY)/$(MIC_IMAGE) 204 205 .PHONY: push-demo 206 push-demo: validate-version 207 az acr repository show --name $(REGISTRY_NAME) --image $(DEMO_IMAGE) > /dev/null 2>&1; if [ $$? -eq 0 ]; then echo "$(DEMO_IMAGE) already exists" && exit 0; fi 208 docker push $(REGISTRY)/$(DEMO_IMAGE) 209 210 .PHONY: push-identity-validator 211 push-identity-validator: validate-version 212 az acr repository show --name $(REGISTRY_NAME) --image $(IDENTITY_VALIDATOR_IMAGE) > /dev/null 2>&1; if [ $$? -eq 0 ]; then echo "$(IDENTITY_VALIDATOR_IMAGE) already exists" && exit 0; fi 213 docker push $(REGISTRY)/$(IDENTITY_VALIDATOR_IMAGE) 214 215 .PHONY: push 216 push: push-nmi push-mic push-demo push-identity-validator 217 218 .PHONY: e2e 219 e2e: 220 make -C test/e2e/ run 221 222 .PHONY: unit-test 223 unit-test: 224 GOOS=$(TEST_GOOS) CGO_ENABLED=1 go test -race -coverprofile=coverage.txt -covermode=atomic -count=1 $(shell go list ./... | grep -v /test/e2e) -v 225 226 .PHONY: validate-version 227 validate-version: 228 @DEFAULT_VERSION=$(DEFAULT_VERSION) CHECK_VERSION="$(IMAGE_VERSION)" scripts/validate_version.sh 229 230 .PHONY: mod 231 mod: 232 @go mod tidy 233 234 .PHONY: check-mod 235 check-mod: mod 236 @git diff --exit-code go.mod go.sum 237 238 .PHONY: helm-lint 239 helm-lint: 240 # Download and install Helm 241 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash 242 # run lint on helm charts 243 helm lint --strict manifest_staging/charts/aad-pod-identity 244 245 .PHONY: generate-crds 246 generate-crds: $(CONTROLLER_GEN) $(KUSTOMIZE) 247 $(CONTROLLER_GEN) crd:trivialVersions=true paths=./pkg/apis/aadpodidentity/v1/... 248 $(KUSTOMIZE) build config/crd > config/crd/aadpodidentity.k8s.io.yaml 249 rm -rf config/crd/aadpodidentity.k8s.io_* 250 251 .PHONY: promote-staging-manifest 252 promote-staging-manifest: 253 @sed -i "s/version: .*/version: ${NEW_CHART_VERSION}/g" manifest_staging/charts/aad-pod-identity/Chart.yaml 254 @sed -i "s/appVersion: .*/appVersion: ${NEW_APP_VERSION}/g" manifest_staging/charts/aad-pod-identity/Chart.yaml 255 @sed -i "s/tag: .*/tag: v${NEW_APP_VERSION}/g" manifest_staging/charts/aad-pod-identity/values.yaml 256 @rm -rf deploy charts/aad-pod-identity 257 @cp -r manifest_staging/deploy . 258 @cp -r manifest_staging/charts . 259 @mkdir -p ./charts/tmp 260 @helm package ./charts/aad-pod-identity -d ./charts/tmp/ 261 @helm repo index ./charts/tmp --url https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts --merge ./charts/index.yaml 262 @mv ./charts/tmp/* ./charts 263 @rm -rf ./charts/tmp