@@ -4,27 +4,53 @@ VERSION=$(shell git describe --exact-match --tags $(CUR_SHA) 2>/dev/null || echo
4
4
CTN: =$(shell which podman 2>&1 1>/dev/null && echo "podman" || echo "docker")
5
5
PREFIX =~/.local
6
6
7
+ GOVERSION =1.22
7
8
GO =container
8
9
OUT =katenary
9
- BLD_CMD =go build -ldflags="-X 'main .Version=$(VERSION ) '" -o $(OUT ) ./cmd/katenary/*.go
10
+ BLD_CMD =go build -ldflags="-X 'katenary/generator .Version=$(VERSION ) '" -o $(OUT ) ./cmd/katenary
10
11
GOOS =linux
11
12
GOARCH =amd64
13
+ SIGNER =metal3d@gmail.com
14
+
15
+ BUILD_IMAGE =docker.io/golang:$(GOVERSION ) -alpine
16
+ # SHELL=/bin/bash
17
+
18
+ # List of source files
19
+ SOURCES =$(wildcard ./* .go ./* /* .go ./* /* /* .go)
20
+ # List of binaries to build and sign
21
+ BINARIES =dist/katenary-linux-amd64 dist/katenary-linux-arm64 dist/katenary.exe dist/katenary-darwin-amd64 dist/katenary-freebsd-amd64 dist/katenary-freebsd-arm64
22
+ # List of signatures to build
23
+ ASC_BINARIES =$(patsubst % ,% .asc,$(BINARIES ) )
24
+
25
+ # defaults
26
+ BROWSER =$(shell command -v epiphany || echo xdg-open)
27
+ SHELL := bash
28
+ # strict mode
29
+ .SHELLFLAGS := -eu -o pipefail -c
30
+ # One session per target
31
+ .ONESHELL :
32
+ .DELETE_ON_ERROR :
33
+ MAKEFLAGS += --warn-undefined-variables
34
+ MAKEFLAGS += --no-builtin-rules
35
+ .PHONY : help clean build install tests test
12
36
13
- BUILD_IMAGE =docker.io/golang:1.18-alpine
37
+ all : build
14
38
15
- .PHONY : help clean build
16
39
17
- .ONESHELL :
18
40
help :
19
- @cat << EOF
41
+ @cat << EOF | fold -s -w 80
20
42
=== HELP ===
21
43
To avoid you to install Go, the build is made by podman or docker.
22
44
23
- You can use:
45
+ Installinf (you can use local Go by setting GO=local)):
46
+ # use podman or docker to build
24
47
$$ make install
48
+ # or use local Go
49
+ $$ make install GO=local
25
50
This will build and install katenary inside the PREFIX(/bin) value (default is $( PREFIX) )
26
51
27
- To change the PREFIX to somewhere where only root or sudo users can save the binary, it is recommended to build before install:
52
+
53
+ To change the PREFIX to somewhere where only root or sudo users can save the binary, it is recommended to build before install, one more time you can use local Go by setting GO=local:
28
54
$$ make build
29
55
$$ sudo make install PREFIX=/usr/local
30
56
@@ -47,29 +73,47 @@ help:
47
73
$$ make build-all
48
74
EOF
49
75
50
- build : pull katenary
51
76
52
- build-all :
53
- rm -f dist/*
54
- $(MAKE ) _build-all
55
-
56
- _build-all : pull dist dist/katenary-linux-amd64 dist/katenary-linux-arm64 dist/katenary.exe dist/katenary-darwin-amd64 dist/katenary-freebsd-amd64 dist/katenary-freebsd-arm64
77
+ # # Standard build
78
+ build : pull katenary
57
79
58
80
pull :
59
81
ifneq ($(GO ) ,local)
60
82
@echo -e "\033[1;32mPulling $(BUILD_IMAGE) docker image\033[0m"
61
83
@$(CTN) pull $(BUILD_IMAGE)
62
84
endif
63
85
64
- dist :
86
+ katenary : $(SOURCES ) Makefile go.mod go.sum
87
+ ifeq ($(GO ) ,local)
88
+ @echo "=> Build on host using go"
89
+ else
90
+ @echo "=> Build in container using" $(CTN)
91
+ endif
92
+ echo $(BLD_CMD)
93
+ ifeq ($(GO ) ,local)
94
+ $(BLD_CMD)
95
+ else ifeq ($(CTN),podman)
96
+ @podman run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \
97
+ --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --userns keep-id -it $(BUILD_IMAGE) $(BLD_CMD)
98
+ else
99
+ @docker run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \
100
+ --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --user $(shell id -u):$(shell id -g) -e HOME=/tmp -it $(BUILD_IMAGE) $(BLD_CMD)
101
+ endif
102
+ echo "=> Stripping if possible"
103
+ strip $(OUT) 2>/dev/null || echo "=> No strip available"
104
+
105
+
106
+ # # Release build
107
+ dist : prepare $(BINARIES ) $(ASC_BINARIES )
108
+
109
+ prepare : pull
65
110
mkdir -p dist
66
111
67
112
dist/katenary-linux-amd64 :
68
113
@echo
69
114
@echo -e " \033[1;32mBuilding katenary $( VERSION) for linux-amd64...\033[0m"
70
115
$(MAKE ) katenary GOOS=linux GOARCH=amd64 OUT=$@
71
116
72
-
73
117
dist/katenary-linux-arm64 :
74
118
@echo
75
119
@echo -e " \033[1;32mBuilding katenary $( VERSION) for linux-arm...\033[0m"
@@ -94,30 +138,16 @@ dist/katenary-freebsd-arm64:
94
138
@echo
95
139
@echo -e " \033[1;32mBuilding katenary $( VERSION) for freebsd-arm64...\033[0m"
96
140
$(MAKE ) katenary GOOS=freebsd GOARCH=arm64 OUT=$@
97
-
98
- katenary : $(wildcard * /* .go Makefile go.mod go.sum)
99
- ifeq ($(GO ) ,local)
100
- @echo "=> Build in host using go"
101
- else
102
- @echo "=> Build in container using" $(CTN)
103
- endif
104
- echo $(BLD_CMD)
105
- ifeq ($(GO ) ,local)
106
- $(BLD_CMD)
107
- else ifeq ($(CTN),podman)
108
- @podman run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \
109
- --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --userns keep-id -it $(BUILD_IMAGE) $(BLD_CMD)
110
- else
111
- @docker run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \
112
- --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --user $(shell id -u):$(shell id -g) -e HOME=/tmp -it $(BUILD_IMAGE) $(BLD_CMD)
113
- endif
114
- echo "=> Stripping if possible"
115
- strip $(OUT) 2>/dev/null || echo "=> No strip available"
116
141
142
+ gpg-sign :
143
+ rm -f dist/* .asc
144
+ $(MAKE ) $(ASC_BINARIES )
117
145
146
+ dist/% .asc : dist/%
147
+ gpg --armor --detach-sign --default-key $(SIGNER ) $< & > /dev/null || exit 1
118
148
119
149
install : build
120
- cp katenary $(PREFIX ) /bin/katenary
150
+ install -Dm755 katenary $(PREFIX ) /bin/katenary
121
151
122
152
uninstall :
123
153
rm -f $(PREFIX ) /bin/katenary
@@ -126,13 +156,27 @@ clean:
126
156
rm -rf katenary dist/* release.id
127
157
128
158
159
+ serve-doc : __label_doc
160
+ @cd doc && \
161
+ [ -d venv ] || python -m venv venv; \
162
+ source venv/bin/activate && \
163
+ echo " ==> Installing requirements in the virtual env..."
164
+ pip install -qq -r requirements.txt && \
165
+ echo " ==> Serving doc with mkdocs..." && \
166
+ mkdocs serve
167
+
129
168
tests : test
130
169
test :
131
170
@echo -e " \033[1;33mTesting katenary $( VERSION) ...\033[0m"
132
- go test -v ./...
171
+ go test -coverprofile=cover.out ./...
172
+ go tool cover -func=cover.out | grep " total:"
173
+ go tool cover -html=cover.out -o cover.html
174
+ if [ " $( BROWSER) " = " xdg-open" ]; then
175
+ xdg-open cover.html
176
+ else
177
+ $(BROWSER ) -i --new-window cover.html
178
+ fi
133
179
134
-
135
- .ONESHELL :
136
180
push-release : build-all
137
181
@rm -f release.id
138
182
# read personal access token from .git-credentials
@@ -154,3 +198,29 @@ push-release: build-all
154
198
https://uploads.github.com/repos/metal3d/katenary/releases/$$(cat release.id ) /assets? name=$$(basename $$i)
155
199
done
156
200
@rm -f release.id
201
+
202
+
203
+ __label_doc :
204
+ @command -v gomarkdoc || (echo " ==> We need to install gomarkdoc..." && \
205
+ go install github.com/princjef/gomarkdoc/cmd/gomarkdoc@latest)
206
+ @echo " => Generating labels doc..."
207
+ # short label doc
208
+ go run ./cmd/katenary help-labels -m | \
209
+ sed -i '
210
+ /START_LABEL_DOC/,/STOP_LABEL_DOC/{/< ! --/! d};
211
+ /START_LABEL_DOC/,/STOP_LABEL_DOC/r/dev/stdin
212
+ ' doc/docs/labels.md
213
+ # detailed label doc
214
+ go run ./cmd/katenary help-labels -am | sed ' s/^##/###/' | \
215
+ sed -i '
216
+ /START_DETAILED_DOC/,/STOP_DETAILED_DOC/{/< ! --/! d};
217
+ /START_DETAILED_DOC/,/STOP_DETAILED_DOC/r/dev/stdin
218
+ ' doc/docs/labels.md
219
+
220
+ echo " => Generating Code documentation..."
221
+ PACKAGES=$$(for f in $$(find . -name "*.go" -type f ) ; do dirname $$f; done | sort -u )
222
+ for pack in $$ PACKAGES; do
223
+ echo " -> Generating doc for $$ pack"
224
+ gomarkdoc --repository.default-branch $(shell git branch --show-current) -o doc/docs/packages/$$ pack.md $$ pack
225
+ sed -i ' /^## Index/,/^##/ { /## Index/d; /^##/! d }' doc/docs/packages/$$ pack.md
226
+ done
0 commit comments