-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
283 lines (235 loc) · 9.37 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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
#
# Copyright SecureKey Technologies Inc. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Supported Targets:
# all : runs unit and integration tests
# depend: installs test dependencies
# unit-test: runs all the unit tests
# checks: runs all check conditions (license, spelling, linting)
# clean: stops docker conatainers used for integration testing
# populate: populates generated files (not included in git) - currently only vendor
# populate-vendor: populate the vendor directory based on the lock
# clean-populate: cleans up populated files (might become part of clean eventually)
# thirdparty-pin: pulls (and patches) pinned dependencies into the project under internal
#
# Tool commands (overridable)
GO_CMD ?= go
DOCKER_CMD ?= docker
# Fabric versions used in the Makefile
FABRIC_STABLE_VERSION := 1.4.2
FABRIC_STABLE_VERSION_MINOR := 1.4
FABRIC_STABLE_VERSION_MAJOR := 1
FABRIC_PRERELEASE_VERSION :=
FABRIC_PRERELEASE_VERSION_MINOR :=
FABRIC_PREV_VERSION := 1.3.0
FABRIC_PREV_VERSION_MINOR := 1.3
FABRIC_DEVSTABLE_VERSION_MINOR := 1.4
FABRIC_DEVSTABLE_VERSION_MAJOR := 1
# Build flags (overridable)
GO_LDFLAGS ?=
GO_TESTFLAGS ?=
GO_TESTFLAGS_UNIT ?= $(GO_TESTFLAGS)
GO_TESTFLAGS_INTEGRATION ?= $(GO_TESTFLAGS) -failfast
FABRIC_LIB_GO_EXT_EXPERIMENTAL ?= true
FABRIC_LIB_GO_EXT_EXTRA_GO_TAGS ?=
FABRIC_LIB_GO_EXT_TEST_CHANGED ?= false
FABRIC_LIB_GO_EXT_TESTRUN_ID ?= $(shell date +'%Y%m%d%H%M%S')
# Dev tool versions (overridable)
GOLANGCI_LINT_VER ?= v1.19.1
# Fabric tool versions (overridable)
FABRIC_TOOLS_VERSION ?= $(FABRIC_STABLE_VERSION)
# Fabric tools docker image (overridable)
FABRIC_TOOLS_IMAGE ?= hyperledger/fabric-tools
FABRIC_TOOLS_TAG ?= $(FABRIC_ARCH)-$(FABRIC_TOOLS_VERSION)
# Upstream fabric patching (overridable)
THIRDPARTY_FABRIC_BRANCH ?= master
THIRDPARTY_FABRIC_COMMIT ?= fedb583e7cb2998fef986a2a1a609f1f90beb983
# Force removal of images in cleanup (overridable)
FIXTURE_DOCKER_REMOVE_FORCE ?= false
# Options for exercising unit tests (overridable)
FABRIC_LIB_GO_EXT_DEPRECATED_UNITTEST ?= false
# Code levels
FABRIC_STABLE_CODELEVEL_TAG := stable
FABRIC_PREV_CODELEVEL_TAG := prev
FABRIC_PRERELEASE_CODELEVEL_TAG := prerelease
FABRIC_DEVSTABLE_CODELEVEL_TAG := devstable
FABRIC_CODELEVEL_TAG ?= $(FABRIC_STABLE_CODELEVEL_TAG)
# Code level version targets
FABRIC_STABLE_CODELEVEL_VER := v$(FABRIC_STABLE_VERSION_MINOR)
FABRIC_PREV_CODELEVEL_VER := v$(FABRIC_PREV_VERSION_MINOR)
FABRIC_PRERELEASE_CODELEVEL_VER := v$(FABRIC_PRERELEASE_VERSION_MINOR)
FABRIC_DEVSTABLE_CODELEVEL_VER := v$(FABRIC_DEVSTABLE_VERSION_MINOR)
FABRIC_CODELEVEL_VER ?= $(FABRIC_STABLE_CODELEVEL_VER)
FABRIC_CRYPTOCONFIG_VER ?= v$(FABRIC_STABLE_VERSION_MAJOR)
# Code level to exercise during unit tests
FABRIC_CODELEVEL_UNITTEST_TAG ?= $(FABRIC_STABLE_CODELEVEL_TAG)
FABRIC_CODELEVEL_UNITTEST_VER ?= $(FABRIC_STABLE_CODELEVEL_VER)
# Local variables used by makefile
PROJECT_NAME := fabric-lib-go-ext
ARCH := $(shell uname -m)
OS_NAME := $(shell uname -s)
MAKEFILE_THIS := $(lastword $(MAKEFILE_LIST))
THIS_PATH := $(patsubst %/,%,$(dir $(abspath $(MAKEFILE_THIS))))
TEST_SCRIPTS_PATH := test/scripts
ifneq ($(GO_LDFLAGS),)
GO_LDFLAGS_ARG := -ldflags=$(GO_LDFLAGS)
else
GO_LDFLAGS_ARG :=
endif
# Fabric tool docker tags at code levels
FABRIC_TOOLS_STABLE_TAG = $(FABRIC_ARCH)-$(FABRIC_STABLE_VERSION)
FABRIC_TOOLS_PREV_TAG = $(FABRIC_ARCH)-$(FABRIC_PREV_VERSION)
FABRIC_TOOLS_PRERELEASE_TAG = $(FABRIC_ARCH)-$(FABRIC_PRERELEASE_VERSION)
FABRIC_TOOLS_DEVSTABLE_TAG := stable
# Detect CI
# TODO introduce nightly and adjust verify
ifdef JENKINS_URL
export FABRIC_LIB_GO_EXT_DEPEND_INSTALL=true
FABRIC_LIB_GO_EXT_TEST_CHANGED := true
FABRIC_LIB_GO_EXT_DEPRECATED_UNITTEST := false
endif
# Determine if internal dependency calc should be used
# If so, disable GOCACHE
ifeq ($(FABRIC_LIB_GO_EXT_TEST_CHANGED),true)
ifeq (,$(findstring $(GO_TESTFLAGS_UNIT),-count=1))
GO_TESTFLAGS_UNIT += -count=1
endif
ifeq (,$(findstring $(GO_TESTFLAGS_INTEGRATION),-count=1))
GO_TESTFLAGS_INTEGRATION += -count=1
endif
endif
# Setup Go Tags
GO_TAGS := $(FABRIC_LIB_GO_EXT_EXTRA_GO_TAGS)
ifeq ($(FABRIC_LIB_GO_EXT_EXPERIMENTAL),true)
GO_TAGS += experimental
endif
FABRIC_ARCH := $(ARCH)
ifneq ($(ARCH),x86_64)
# DEVSTABLE images are currently only x86_64
FABRIC_DEVSTABLE_INTTEST := false
else
# Recent Fabric builds follow GOARCH (e.g., amd64)
FABRIC_ARCH := amd64
endif
# Global environment exported for scripts
export GO_CMD
export ARCH
export FABRIC_ARCH
export GO_LDFLAGS
export GO_MOCKGEN_COMMIT
export GO_TAGS
export DOCKER_CMD
export FABRIC_LIB_GO_EXT_TESTRUN_ID
export GO111MODULE=on
.PHONY: all
all: version depend-noforce license unit-test
.PHONY: version
version:
@$(TEST_SCRIPTS_PATH)/check_version.sh
.PHONY: depend
depend: version
@$(TEST_SCRIPTS_PATH)/dependencies.sh -f
.PHONY: depend-noforce
depend-noforce: version
ifeq ($(FABRIC_LIB_GO_EXT_DEPEND_INSTALL),true)
@$(TEST_SCRIPTS_PATH)/dependencies.sh
@$(TEST_SCRIPTS_PATH)/dependencies.sh -c
else
-@$(TEST_SCRIPTS_PATH)/dependencies.sh -c
endif
.PHONY: checks
checks: version depend-noforce license lint
.PHONY: license
license: version
@$(TEST_SCRIPTS_PATH)/check_license.sh
.PHONY: lint
lint: version populate-noforce lint-submodules
@MODULE="github.com/trustbloc/fabric-lib-go-ext" PKG_ROOT="./pkg" LINT_CHANGED_ONLY=true GOLANGCI_LINT_VER=$(GOLANGCI_LINT_VER) $(TEST_SCRIPTS_PATH)/check_lint.sh
.PHONY: lint-submodules
lint-submodules: version populate-noforce
.PHONY: lint-all
lint-all: version populate-noforce
@MODULE="github.com/trustbloc/fabric-lib-go-ext" PKG_ROOT="./pkg" GOLANGCI_LINT_VER=$(GOLANGCI_LINT_VER) $(TEST_SCRIPTS_PATH)/check_lint.sh
.PHONY: unit-test
unit-test: clean depend-noforce populate-noforce license lint-submodules
@TEST_CHANGED_ONLY=$(FABRIC_LIB_GO_EXT_TEST_CHANGED) TEST_WITH_LINTER=true FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_CODELEVEL_UNITTEST_TAG) FABRIC_LIB_GO_EXT_CODELEVEL_VER=$(FABRIC_CODELEVEL_UNITTEST_VER) \
GO_TESTFLAGS="$(GO_TESTFLAGS_UNIT)" \
GOLANGCI_LINT_VER="$(GOLANGCI_LINT_VER)" \
MODULE="github.com/trustbloc/fabric-lib-go-ext" \
PKG_ROOT="./pkg" \
$(TEST_SCRIPTS_PATH)/unit.sh
ifeq ($(FABRIC_LIB_GO_EXT_DEPRECATED_UNITTEST),true)
@GO_TAGS="$(GO_TAGS) deprecated" TEST_CHANGED_ONLY=$(FABRIC_LIB_GO_EXT_TEST_CHANGED) FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_CODELEVEL_UNITTEST_TAG) FABRIC_LIB_GO_EXT_CODELEVEL_VER=$(FABRIC_CODELEVEL_UNITTEST_VER) \
GOLANGCI_LINT_VER="$(GOLANGCI_LINT_VER)" \
MODULE="github.com/trustbloc/fabric-lib-go-ext" \
PKG_ROOT="./pkg" \
$(TEST_SCRIPTS_PATH)/unit.sh
endif
.PHONY: unit-tests
unit-tests: unit-test
.PHONY: crypto-gen
crypto-gen:
@echo "Generating crypto directory ..."
@$(DOCKER_CMD) run -i \
-v /$(abspath .):/opt/workspace/$(PROJECT_NAME) -u $(shell id -u):$(shell id -g) \
$(FABRIC_TOOLS_IMAGE):$(FABRIC_TOOLS_TAG) \
//bin/bash -c "FABRIC_VERSION_DIR=fabric/$(FABRIC_CRYPTOCONFIG_VER) /opt/workspace/${PROJECT_NAME}/test/scripts/generate_crypto.sh"
.PHONY: thirdparty-pin
thirdparty-pin:
@echo "Pinning third party packages ..."
@UPSTREAM_COMMIT=$(THIRDPARTY_FABRIC_COMMIT) UPSTREAM_BRANCH=$(THIRDPARTY_FABRIC_BRANCH) scripts/third_party_pins/apply_thirdparty_pins.sh
.PHONY: populate
populate: populate-vendor populate-fixtures-stable
.PHONY: populate-vendor
populate-vendor:
@go mod vendor
.PHONY: populate-fixtures-stable
populate-fixtures-stable:
@FABRIC_CRYPTOCONFIG_VERSION=$(FABRIC_CRYPTOCONFIG_VER) \
FABRIC_FIXTURE_VERSION=v$(FABRIC_STABLE_VERSION_MINOR) \
FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_STABLE_CODELEVEL_TAG) \
$(TEST_SCRIPTS_PATH)/populate-fixtures.sh -f
.PHONY: populate-noforce
populate-noforce: populate-fixtures-stable-noforce
.PHONY: populate-fixtures-stable-noforce
populate-fixtures-stable-noforce:
@FABRIC_CRYPTOCONFIG_VERSION=$(FABRIC_CRYPTOCONFIG_VER) \
FABRIC_FIXTURE_VERSION=v$(FABRIC_STABLE_VERSION_MINOR) \
FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_STABLE_CODELEVEL_TAG) \
$(TEST_SCRIPTS_PATH)/populate-fixtures.sh
.PHONY: populate-fixtures-prev-noforce
populate-fixtures-prev-noforce:
@FABRIC_CRYPTOCONFIG_VERSION=$(FABRIC_CRYPTOCONFIG_VER) \
FABRIC_FIXTURE_VERSION=v$(FABRIC_PREV_VERSION_MINOR) \
FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_PREV_CODELEVEL_TAG) \
$(TEST_SCRIPTS_PATH)/populate-fixtures.sh
.PHONY: populate-fixtures-prerelease-noforce
populate-fixtures-prerelease-noforce:
@FABRIC_CRYPTOCONFIG_VERSION=$(FABRIC_CRYPTOCONFIG_VER) \
FABRIC_FIXTURE_VERSION=v$(FABRIC_PRERELEASE_VERSION_MINOR) \
FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_PRERELEASE_CODELEVEL_TAG) \
$(TEST_SCRIPTS_PATH)/populate-fixtures.sh
.PHONY: populate-fixtures-devstable-noforce
populate-fixtures-devstable-noforce:
@FABRIC_CRYPTOCONFIG_VERSION=$(FABRIC_CRYPTOCONFIG_VER) \
FABRIC_FIXTURE_VERSION=v$(FABRIC_DEVSTABLE_VERSION_MINOR) \
FABRIC_LIB_GO_EXT_CODELEVEL_TAG=$(FABRIC_DEVSTABLE_CODELEVEL_TAG) \
$(TEST_SCRIPTS_PATH)/populate-fixtures.sh
.PHONY: clean
clean: clean-fixtures clean-cache clean-populate
.PHONY: clean-populate
clean-populate:
rm -Rf vendor
.PHONY: clean-cache
clean-cache:
ifeq ($(OS_NAME),Darwin)
rm -Rf ${HOME}/Library/Caches/fabric-lib-go-ext
else
rm -Rf ${HOME}/.cache/fabric-lib-go-ext
endif
.PHONY: clean-fixtures
clean-fixtures:
-rm -Rf test/fixtures/fabric/*/crypto-config
-rm -Rf test/fixtures/fabric/*/channel