forked from chaosblade-io/chaosblade
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
163 lines (124 loc) · 5 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# Copyright 1999-2025 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
.PHONY: build clean
export BLADE_VERSION=0.0.0
ALLOWGITVERSION=1.8.5
GITVERSION:=$(shell git --version | grep ^git | sed 's/^.* //g')
ifneq ($(strip $(firstword $(sort $(GITVERSION), $(ALLOWGITVERSION)))),$(ALLOWGITVERSION))
ALERTMSG="please update git to >= $(ALLOWGITVERSION)"
endif
BLADE_BIN=blade
BLADE_EXPORT=chaosblade-$(BLADE_VERSION).tgz
BLADE_SRC_ROOT=$(shell pwd)
GO_ENV=CGO_ENABLED=1
GO_MODULE=GO111MODULE=on
VERSION_PKG=github.com/spencercjh/chaosblade/v2/version
CRI_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-cri/version
OS_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-os/version
JVM_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-jvm/version
K8S_BLADE_VERSION=github.com/chaosblade-io/chaosblade-operator/version
IS_DIRTY:=$(shell git diff --quiet || echo "dirty")
GO_X_FLAGS=-X '${VERSION_PKG}.Ver=$(BLADE_VERSION)' -X '${VERSION_PKG}.Env=`uname -mv`' -X '${VERSION_PKG}.BuildTime=`date`' -X '${VERSION_PKG}.Commit=`git rev-parse HEAD`-$(IS_DIRTY)'
GO_FLAGS=-ldflags="$(GO_X_FLAGS) -s -w"
GO=env $(GO_ENV) $(GO_MODULE) go
BUILD_TARGET=target
BUILD_TARGET_DIR_NAME=chaosblade-$(BLADE_VERSION)
BUILD_TARGET_PKG_DIR=$(BUILD_TARGET)/chaosblade-$(BLADE_VERSION)
BUILD_TARGET_PKG_NAME=$(BUILD_TARGET)/chaosblade-$(BLADE_VERSION).tar.gz
BUILD_TARGET_BIN=$(BUILD_TARGET_PKG_DIR)/bin
BUILD_TARGET_YAML=$(BUILD_TARGET_PKG_DIR)/yaml
BUILD_TARGET_TAR_NAME=$(BUILD_TARGET_DIR_NAME).tar.gz
BUILD_TARGET_PKG_FILE_PATH=$(BUILD_TARGET)/$(BUILD_TARGET_TAR_NAME)
BUILD_IMAGE_PATH=build/image/blade
BUILD_ARM_IMAGE_PATH=build/image/blade_arm
ifeq ($(GOOS), linux)
GO_FLAGS=-ldflags="-linkmode external -extldflags -static $(GO_X_FLAGS) -s -w"
endif
CC:=/usr/local/musl/bin/musl-gcc
.PHONY: build
build: pre_build cli nsexec os cloud middleware cri cplus java kubernetes package
pre_build:
rm -rf $(BUILD_TARGET_PKG_DIR) $(BUILD_TARGET_PKG_FILE_PATH)
mkdir -p $(BUILD_TARGET_BIN) $(BUILD_TARGET_YAML)
cli: cmd/cli/main.go
$(GO) build $(GO_FLAGS) -o $(BUILD_TARGET_PKG_DIR)/blade $<
nsexec: cmd/nsexec/nsexec.c
$(CC) -static $< -o $(BUILD_TARGET_BIN)/nsexec
.PHONY: os
os: chaos_os os_spec
cp cmd/strace $(BUILD_TARGET_BIN)
chaos_os: cmd/os/main.go
$(GO) build $(GO_FLAGS) -o $(BUILD_TARGET_BIN)/chaos_os $<
os_spec: cmd/os/spec/spec.go
$(GO) run $< $(BUILD_TARGET_YAML)/chaosblade-os-spec-$(BLADE_VERSION).yaml
.PHONY: middleware
middleware: chaos_middleware middleware_spec
chaos_middleware: cmd/middleware/main.go
$(GO) build $(GO_FLAGS) -o $(BUILD_TARGET_BIN)/chaos_middleware $<
middleware_spec: cmd/middleware/spec/spec.go
$(GO) run $< $(BUILD_TARGET_YAML)/chaosblade-middleware-spec-$(BLADE_VERSION).yaml
.PHONY: cloud
cloud: chaos_cloud cloud_spec
chaos_cloud: cmd/cloud/main.go
$(GO) build $(GO_FLAGS) -o $(BUILD_TARGET_BIN)/chaos_cloud $<
cloud_spec: cmd/cloud/spec/spec.go
$(GO) run $< $(BUILD_TARGET_YAML)/chaosblade-cloud-spec-$(BLADE_VERSION).yaml
chaos_spec: cmd/cloud/spec/spec.go
$(GO) run $< $(BUILD_TARGET_YAML)/chaosblade-cloud-spec-$(BLADE_VERSION).yaml
# TODO: chaosblade-operator
.PHONY: kubernetes
kubernetes: kubernetes_spec
kubernetes_spec: cmd/kubernetes/spec/spec.go
$(GO) run $< $(BUILD_TARGET_YAML)/chaosblade-k8s-spec-$(BLADE_VERSION).yaml
cri: cmd/cri/spec/spec.go
# TODO: run with chaosblade-exec-jvm spec
$(GO) run $< $(BUILD_TARGET_YAML)/chaosblade-cri-spec-$(BLADE_VERSION).yaml cri
# TODO: chaosblade-exec-java
.PHONY: java
java:
echo "TODO: chaosblade-exec-java"
# TODO: chaosblade-exec-cplus
.PHONY: cplus
cplus:
echo "TODO: chaosblade-exec-cplus"
.PHONY: clean
test:
$(GO) test -race -coverprofile=coverage.txt -covermode=atomic ./...
.PHONY: clean
clean:
$(GO) clean ./...
rm -rf $(BUILD_TARGET)
rm -rf $(BUILD_TARGET_PKG_DIR) $(BUILD_TARGET_PKG_FILE_PATH)
rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
.PHONY: package
package:
tar zcvf $(BUILD_TARGET_PKG_FILE_PATH) -C $(BUILD_TARGET) $(BUILD_TARGET_DIR_NAME)
.PHONY: format
format:
go mod tidy
go install github.com/NonLogicalDev/gofancyimports/cmd/[email protected]
find . -name '*.go' -exec gofancyimports fix --group-nodot --group-effect --local=github.com/spencercjh/chaosblade/v2 -w {} \;
.PHONY: license
license: install-hawkeye alibaba individual
.PHONY: install-hawkeye
install-hawkeye:
if ! command -v hawkeye &> /dev/null; then \
cargo install hawkeye; \
fi
.PHONY: alibaba
alibaba:
hawkeye format --config alibaba-licenserc.toml
.PHONY: individual
individual:
hawkeye format --config individual-licenserc.toml