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