forked from cncf-tags/container-device-interface
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
130 lines (99 loc) · 2.89 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
# Copyright © The CDI Authors
# 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.
GO_CMD := go
GO_BUILD := $(GO_CMD) build
GO_TEST := $(GO_CMD) test -race -v -cover
GO_LINT := golint -set_exit_status
GO_FMT := gofmt
GO_VET := $(GO_CMD) vet
CDI_PKG := $(shell grep ^module go.mod | sed 's/^module *//g')
CMDS := $(patsubst ./cmd/%/,%,$(sort $(dir $(wildcard ./cmd/*/))))
BINARIES := $(patsubst %,bin/%,$(CMDS))
ifneq ($(V),1)
Q := @
endif
#
# top-level targets
#
all: build
build: $(BINARIES)
clean: clean-binaries clean-schema
test: test-gopkgs test-schema
#
# validation targets
#
pre-pr-checks pr-checks: test fmt lint vet
fmt format:
$(Q)$(GO_FMT) -s -d -w -e .
lint:
$(Q)$(GO_LINT) -set_exit_status ./...
vet:
$(Q)$(GO_VET) ./...
#
# build targets
#
$(BINARIES): bin/%:
$(Q)echo "Building $@..."
$(Q)(cd cmd/$(*) && $(GO_BUILD) -o $(abspath $@) .)
#
# go module tidy and verify targets
#
.PHONY: mod-tidy
.PHONY: mod-verify
mod-tidy:
$(Q)for mod in $$(find . -name go.mod); do \
echo "Tidying $$mod..."; ( \
cd $$(dirname $$mod) && go mod tidy \
) || exit 1; \
done
mod-verify:
$(Q)for mod in $$(find . -name go.mod); do \
echo "Verifying $$mod..."; ( \
cd $$(dirname $$mod) && go mod verify | sed 's/^/ /g' \
) || exit 1; \
done
#
# cleanup targets
#
# clean up binaries
clean-binaries:
$(Q) rm -f $(BINARIES)
# clean up schema validator
clean-schema:
$(Q)rm -f schema/validate
#
# test targets
#
# tests for go packages
test-gopkgs:
$(Q)$(GO_TEST) ./...
# tests for CDI Spec JSON schema
test-schema: bin/validate
$(Q)echo "Building in schema..."; \
$(MAKE) -C schema test
#
# dependencies
#
bin/validate: $(wildcard schema/*.json) $(wildcard cmd/validate/*.go cmd/validate/cmd/*.go) $(shell \
for dir in \
$$(cd ./cmd/validate; $(GO_CMD) list -f '{{ join .Deps "\n"}}' ./... | \
grep $(CDI_PKG)/pkg/ | \
sed 's:$(CDI_PKG):.:g'); do \
find $$dir -name \*.go; \
done | sort | uniq)
# quasi-automatic dependency for bin/cdi
bin/cdi: $(wildcard cmd/cdi/*.go cmd/cdi/cmd/*.go) $(shell \
for dir in \
$$(cd ./cmd/cdi; $(GO_CMD) list -f '{{ join .Deps "\n"}}' ./... | \
grep $(CDI_PKG)/pkg/ | \
sed 's:$(CDI_PKG):.:g'); do \
find $$dir -name \*.go; \
done | sort | uniq)