forked from k8sgpt-ai/k8sgpt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: the overall optimization and architecture design of the makefil…
…e are made (k8sgpt-ai#317) * feature(makefile): The overall optimization and architecture design of the Makefile are made Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> * feat: the overall optimization and architecture design of the makefile are made Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> --------- Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> Co-authored-by: Alex Jones <alexsimonjones@gmail.com>
- Loading branch information
1 parent
d0f7a11
commit 754bf91
Showing
2 changed files
with
140 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
k8sgpt* | ||
*.vscode | ||
dist/ | ||
|
||
bin/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,147 @@ | ||
.PHONY: docker-build | ||
# Copyright 2023 K8sgpt AI. All rights reserved. | ||
# Use of this source code is governed by a MIT style | ||
# license that can be found in the LICENSE file. | ||
|
||
# ============================================================================== | ||
# define the default goal | ||
# | ||
ROOT_PACKAGE=github.com/k8sgpt-ai/k8sgpt | ||
|
||
SHELL := /bin/bash | ||
DIRS=$(shell ls) | ||
GO=go | ||
|
||
.DEFAULT_GOAL := help | ||
|
||
# include the common makefile | ||
COMMON_SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) | ||
# ROOT_DIR: root directory of the code base | ||
ifeq ($(origin ROOT_DIR),undefined) | ||
ROOT_DIR := $(abspath $(shell cd $(COMMON_SELF_DIR)/. && pwd -P)) | ||
endif | ||
# OUTPUT_DIR: The directory where the build output is stored. | ||
ifeq ($(origin OUTPUT_DIR),undefined) | ||
OUTPUT_DIR := $(ROOT_DIR)/bin | ||
$(shell mkdir -p $(OUTPUT_DIR)) | ||
endif | ||
|
||
ifeq ($(origin VERSION), undefined) | ||
VERSION := $(shell git describe --abbrev=0 --dirty --always --tags | sed 's/-/./g') | ||
endif | ||
|
||
# Check if the tree is dirty. default to dirty(maybe u should commit?) | ||
GIT_TREE_STATE:="dirty" | ||
ifeq (, $(shell git status --porcelain 2>/dev/null)) | ||
GIT_TREE_STATE="clean" | ||
endif | ||
GIT_COMMIT:=$(shell git rev-parse HEAD) | ||
|
||
IMG ?= ghcr.io/k8sgpt-ai/k8sgpt:latest | ||
|
||
BUILDFILE = "./main.go" | ||
BUILDAPP = "$(OUTPUT_DIR)/k8sgpt" | ||
|
||
.PHONY: all | ||
all: tidy add-copyright lint cover build | ||
|
||
# ============================================================================== | ||
# Targets | ||
|
||
## build: Build binaries by default | ||
.PHONY: build | ||
build: | ||
@echo "$(shell go version)" | ||
@echo "===========> Building binary $(BUILDAPP) *[Git Info]: $(VERSION)-$(GIT_COMMIT)" | ||
@export CGO_ENABLED=0 && go build -o $(BUILDAPP) -ldflags '-s -w' $(BUILDFILE) | ||
|
||
## tidy: tidy go.mod | ||
.PHONY: tidy | ||
tidy: | ||
@$(GO) mod tidy | ||
|
||
## deploy: Deploy k8sgpt | ||
.PHONY: deploy | ||
deploy: | ||
@echo "===========> Deploying k8sgpt" | ||
@$(call funcsecret) | ||
|
||
## undeploy: Undeploy k8sgpt | ||
.PHONY: undeploy | ||
undeploy: | ||
@echo "===========> Undeploying k8sgpt" | ||
kubectl delete secret ai-backend-secret --namespace=k8sgpt | ||
kubectl delete -f container/manifests | ||
kubectl delete ns k8sgpt | ||
|
||
## docker-build: Build docker image | ||
.PHONY: docker-build | ||
docker-build: | ||
@echo "===========> Building docker image" | ||
docker buildx build --build-arg=VERSION="$$(git describe --tags --abbrev=0)" --build-arg=COMMIT="$$(git rev-parse --short HEAD)" --build-arg DATE="$$(date +%FT%TZ)" --platform="linux/amd64,linux/arm64" -t ${IMG} -f container/Dockerfile . --push | ||
|
||
|
||
## fmt: Run go fmt against code. | ||
.PHONY: fmt | ||
fmt: | ||
@$(GO) fmt ./... | ||
|
||
## vet: Run go vet against code. | ||
.PHONY: vet | ||
vet: | ||
@$(GO) vet ./... | ||
|
||
## lint: Run go lint against code. | ||
.PHONY: lint | ||
lint: | ||
@golangci-lint run -v ./... | ||
|
||
## style: Code style -> fmt,vet,lint | ||
.PHONY: style | ||
style: fmt vet lint | ||
|
||
## test: Run unit test | ||
.PHONY: test | ||
test: | ||
@echo "===========> Run unit test" | ||
@$(GO) test ./... | ||
|
||
## cover: Run unit test with coverage | ||
.PHONY: cover | ||
cover: test | ||
@$(GO) test -cover | ||
|
||
## go.clean: Clean all builds | ||
.PHONY: clean | ||
clean: | ||
@echo "===========> Cleaning all builds OUTPUT_DIR($(OUTPUT_DIR))" | ||
@-rm -vrf $(OUTPUT_DIR) | ||
@echo "===========> End clean..." | ||
|
||
## help: Show this help info. | ||
.PHONY: help | ||
help: Makefile | ||
@printf "\n\033[1mUsage: make <TARGETS> ...\033[0m\n\n\\033[1mTargets:\\033[0m\n\n" | ||
@sed -n 's/^##//p' $< | awk -F':' '{printf "\033[36m%-28s\033[0m %s\n", $$1, $$2}' | sed -e 's/^/ /' | ||
|
||
## copyright.verify: Validate boilerplate headers for assign files | ||
.PHONY: copyright.verify | ||
copyright.verify: tools.verify.addlicense | ||
@echo "===========> Validate boilerplate headers for assign files starting in the $(ROOT_DIR) directory" | ||
# @addlicense -v -check -ignore **/test/** -f $(LICENSE_TEMPLATE) $(CODE_DIRS) | ||
@echo "===========> End of boilerplate headers check..." | ||
|
||
## copyright.add: Add the boilerplate headers for all files | ||
.PHONY: copyright.add | ||
copyright.add: tools.verify.addlicense | ||
@echo "===========> Adding $(LICENSE_TEMPLATE) the boilerplate headers for all files" | ||
# @addlicense -y $(shell date +"%Y") -v -c "K8sgpt AI." -f $(LICENSE_TEMPLATE) $(CODE_DIRS) | ||
@echo "===========> End the copyright is added..." | ||
|
||
define funcsecret | ||
ifndef SECRET | ||
$(error SECRET environment variable is not set) | ||
endif | ||
kubectl create ns k8sgpt || true | ||
kubectl create secret generic ai-backend-secret --from-literal=secret-key=$(SECRET) --namespace=k8sgpt || true | ||
kubectl apply -f container/manifests | ||
undeploy: | ||
kubectl delete secret ai-backend-secret --namespace=k8sgpt | ||
kubectl delete -f container/manifests | ||
kubectl delete ns k8sgpt | ||
docker-build: | ||
docker buildx build --build-arg=VERSION="$$(git describe --tags --abbrev=0)" --build-arg=COMMIT="$$(git rev-parse --short HEAD)" --build-arg DATE="$$(date +%FT%TZ)" --platform="linux/amd64,linux/arm64" -t ${IMG} -f container/Dockerfile . --push | ||
endef |