forked from kanidm/kanidm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
391 lines (331 loc) · 12.5 KB
/
Copy pathMakefile
File metadata and controls
391 lines (331 loc) · 12.5 KB
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
# Makefile for Kanidm
CONTAINER_TOOL ?= docker
CONTAINER_TOOL_ARGS ?=
CONTAINER_BUILD_ARGS ?=
CONTAINER_IMAGE_BASE ?= kanidm
CONTAINER_IMAGE_VERSION ?= devel
CONTAINER_IMAGE_EXT_VERSION ?= $(shell cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "daemon") | .version')
# CONTAINER_BUILDX_ACTION is used to specify the action for buildx, e.g., --push or --load
CONTAINER_BUILDX_ACTION ?= --push
# CONTAINER_IMAGE_ARCH is used to specify the architectures for multi-arch docker builds
CONTAINER_IMAGE_ARCH ?= "linux/amd64,linux/arm64"
BUILDKIT_PROGRESS ?= plain
KANIDM_FEATURES ?= ""
# MARKDOWN_FORMAT_ARGS is used to specify additional arguments for markdown formatting
MARKDOWN_FORMAT_ARGS ?=
BOOK_VERSION ?= master
GIT_COMMIT := $(shell git rev-parse HEAD)
.DEFAULT: help
.PHONY: help
help:
@grep -E -h '\s##\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
.PHONY: config
config: ## Show makefile config things
config:
@echo "CONTAINER_IMAGE_BASE: $(CONTAINER_IMAGE_BASE)"
@echo "CONTAINER_IMAGE_VERSION: $(CONTAINER_IMAGE_VERSION)"
@echo "CONTAINER_IMAGE_EXT_VERSION: $(CONTAINER_IMAGE_EXT_VERSION)"
@echo "CONTAINER_TOOL: $(CONTAINER_TOOL)"
@echo "CONTAINER_TOOL_ARGS: $(CONTAINER_TOOL_ARGS)"
@echo "CONTAINER_BUILDX_ACTION: $(CONTAINER_BUILDX_ACTION)"
@echo "CONTAINER_IMAGE_ARCH: $(CONTAINER_IMAGE_ARCH)"
@echo "CONTAINER_BUILD_ARGS: $(CONTAINER_BUILD_ARGS)"
@echo "MARKDOWN_FORMAT_ARGS: $(MARKDOWN_FORMAT_ARGS)"
@echo "BUILDKIT_PROGRESS: $(BUILDKIT_PROGRESS)"
@echo "BOOK_VERSION: $(BOOK_VERSION)"
@echo "GIT_COMMIT: $(GIT_COMMIT)"
.PHONY: run
run: ## Run the test/dev server
run:
cd server/daemon && ./run_insecure_dev_server.sh
.PHONY: run_htmx
run_htmx: ## Run in HTMX mode
run_htmx:
cd server/daemon && KANI_CARGO_OPTS="--features kanidmd_core/ui_htmx" ./run_insecure_dev_server.sh
.PHONY: buildx/kanidmd
buildx/kanidmd: ## Build multiarch kanidm server images and push to docker hub
buildx/kanidmd:
@$(CONTAINER_TOOL) buildx build $(CONTAINER_TOOL_ARGS) \
--pull $(CONTAINER_BUILDX_ACTION) --platform $(CONTAINER_IMAGE_ARCH) \
-f server/Dockerfile \
-t $(CONTAINER_IMAGE_BASE)/server:$(CONTAINER_IMAGE_VERSION) \
-t $(CONTAINER_IMAGE_BASE)/server:$(CONTAINER_IMAGE_EXT_VERSION) \
--progress $(BUILDKIT_PROGRESS) \
--build-arg "KANIDM_BUILD_PROFILE=container_generic" \
--build-arg "KANIDM_FEATURES=$(KANIDM_FEATURES)" \
--compress \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
$(CONTAINER_BUILD_ARGS) .
.PHONY: buildx/kanidm_tools
buildx/kanidm_tools: ## Build multiarch kanidm tool images and push to docker hub
buildx/kanidm_tools:
@$(CONTAINER_TOOL) buildx build $(CONTAINER_TOOL_ARGS) \
--pull $(CONTAINER_BUILDX_ACTION) --platform $(CONTAINER_IMAGE_ARCH) \
-f tools/Dockerfile \
-t $(CONTAINER_IMAGE_BASE)/tools:$(CONTAINER_IMAGE_VERSION) \
-t $(CONTAINER_IMAGE_BASE)/tools:$(CONTAINER_IMAGE_EXT_VERSION) \
--progress $(BUILDKIT_PROGRESS) \
--build-arg "KANIDM_BUILD_PROFILE=container_generic" \
--build-arg "KANIDM_FEATURES=$(KANIDM_FEATURES)" \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
$(CONTAINER_BUILD_ARGS) .
.PHONY: buildx/radiusd
buildx/radiusd: ## Build multi-arch radius docker images and push to docker hub
buildx/radiusd:
@$(CONTAINER_TOOL) buildx build $(CONTAINER_TOOL_ARGS) \
--pull $(CONTAINER_BUILDX_ACTION) --platform $(CONTAINER_IMAGE_ARCH) \
-f rlm_python/Dockerfile \
--progress $(BUILDKIT_PROGRESS) \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
-t $(CONTAINER_IMAGE_BASE)/radius:$(CONTAINER_IMAGE_VERSION) \
-t $(CONTAINER_IMAGE_BASE)/radius:$(CONTAINER_IMAGE_EXT_VERSION) .
.PHONY: buildx
buildx: buildx/kanidmd buildx/kanidm_tools buildx/radiusd
.PHONY: build/kanidmd
build/kanidmd: ## Build the kanidmd docker image locally
build/kanidmd:
@$(CONTAINER_TOOL) build $(CONTAINER_TOOL_ARGS) -f server/Dockerfile \
-t $(CONTAINER_IMAGE_BASE)/server:$(CONTAINER_IMAGE_VERSION) \
--build-arg "KANIDM_BUILD_PROFILE=container_generic" \
--build-arg "KANIDM_FEATURES=" \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
$(CONTAINER_BUILD_ARGS) .
.PHONY: build/orca
build/orca: ## Build the orca docker image locally
build/orca:
@$(CONTAINER_TOOL) build $(CONTAINER_TOOL_ARGS) -f tools/orca/Dockerfile \
-t $(CONTAINER_IMAGE_BASE)/orca:$(CONTAINER_IMAGE_VERSION) \
--build-arg "KANIDM_BUILD_PROFILE=container_generic" \
--build-arg "KANIDM_FEATURES=$(KANIDM_FEATURES)" \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
$(CONTAINER_BUILD_ARGS) .
.PHONY: build/radiusd
build/radiusd: ## Build the radiusd docker image locally
build/radiusd:
@$(CONTAINER_TOOL) build $(CONTAINER_TOOL_ARGS) \
-f rlm_python/Dockerfile \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
-t $(CONTAINER_IMAGE_BASE)/radius:$(CONTAINER_IMAGE_VERSION) .
.PHONY: build
build: build/kanidmd build/radiusd
.PHONY: test/kanidmd
test/kanidmd: ## Run cargo test in docker
test/kanidmd:
@$(CONTAINER_TOOL) build \
$(CONTAINER_TOOL_ARGS) -f server/Dockerfile \
--target builder \
-t $(CONTAINER_IMAGE_BASE)/server:$(CONTAINER_IMAGE_VERSION)-builder \
--label "com.kanidm.git-commit=$(GIT_COMMIT)" \
--label "com.kanidm.version=$(CONTAINER_IMAGE_EXT_VERSION)" \
$(CONTAINER_BUILD_ARGS) .
@$(CONTAINER_TOOL) run --rm $(CONTAINER_IMAGE_BASE)/server:$(CONTAINER_IMAGE_VERSION)-builder cargo test
.PHONY: test/radiusd
test/radiusd: ## Run a test radius server
test/radiusd: build/radiusd
cd rlm_python && \
./run_radius_container.sh
.PHONY: test
test:
cargo test
.PHONY: precommit
precommit: ## all the usual test things
precommit: test codespell test/pykanidm doc/format
.PHONY: vendor
vendor: ## Vendor required crates
vendor:
cargo vendor > cargo_vendor_config
.PHONY: vendor-prep
vendor-prep: vendor
tar -cJf vendor.tar.xz vendor
.PHONY: install-tools
install-tools: ## install kanidm_tools in your local environment
install-tools:
cargo install --path tools/cli --force
.PHONY: codespell
codespell: ## spell-check things.
codespell:
codespell -c \
-D .codespell_dictionary \
--ignore-words .codespell_ignore \
--skip='./target,./pykanidm/.venv,./pykanidm/.mypy_cache,./.mypy_cache,./pykanidm/uv.lock' \
--skip='./book/*.js' \
--skip='./book/book/*' \
--skip='./book/src/images/*' \
--skip='./docs/*,./.git' \
--skip='*.svg' \
--skip='*.br' \
--skip='./rlm_python/mods-available/eap' \
--skip='./server/lib/src/constants/system_config.rs' \
--skip='./pykanidm/site'
.PHONY: test/pykanidm/pytest
test/pykanidm/pytest: ## python library testing
cd pykanidm && \
uv run pytest -vv
.PHONY: test/pykanidm/lint
test/pykanidm/lint: ## python library linting
cd pykanidm && \
uv run ruff check tests kanidm
.PHONY: test/pykanidm/mypy
test/pykanidm/mypy: ## python library type checking
cd pykanidm && \
uv run mypy --strict tests kanidm && \
uv run ty check tests kanidm \
--ignore unused-type-ignore-comment
.PHONY: test/pykanidm
test/pykanidm: ## run the kanidm python module test suite (mypy/lint/pytest)
test/pykanidm: test/pykanidm/pytest test/pykanidm/mypy test/pykanidm/lint
.PHONY: test/pykanidm/coverage
test/pykanidm/coverage: ## run the Kanidm Python module test suite with coverage
cd pykanidm && \
uv run coverage run -m pytest && \
uv run coverage html
########################################################################
.PHONY: doc
doc: ## Build the rust documentation locally
doc:
cargo doc --document-private-items
.PHONY: doc/find
doc/find: ## Find all markdown files for docs
@find . -type f \
-not -path './target/*' \
-not -path './docs/*' \
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' -not -path './vendor/*'\
-not -path '*/.*/*' \
-name '*.md'
.PHONY: doc/format
doc/format: ## Format docs and the Kanidm book
make doc/find | xargs deno fmt --check $(MARKDOWN_FORMAT_ARGS)
.PHONY: doc/format/fix
doc/format/fix: ## Fix docs and the Kanidm book
make doc/find | xargs deno fmt $(MARKDOWN_FORMAT_ARGS)
.PHONY: book
book: ## Build the Kanidm book
book:
echo "Building rust docs"
cargo doc --no-deps --quiet
mdbook build book
rm -rf ./docs/
mv ./book/book/ ./docs/
mkdir -p $(PWD)/docs/rustdoc/${BOOK_VERSION}/
rsync -a --delete $(PWD)/target/doc/ $(PWD)/docs/rustdoc/${BOOK_VERSION}/
.PHONY: book_versioned
book_versioned:
echo "Book version: ${BOOK_VERSION}"
rm -rf ./target/doc
git switch -c "${BOOK_VERSION}"
git pull origin "${BOOK_VERSION}"
cargo doc --no-deps --quiet
mdbook build book
rm -rf ./docs/
mkdir -p ./docs
mv ./book/book/ ./docs/${BOOK_VERSION}/
mkdir -p ./docs/${BOOK_VERSION}/rustdoc/
mv ./target/doc/* ./docs/${BOOK_VERSION}/rustdoc/
git switch master
.PHONY: clean_book
clean_book:
rm -rf ./docs
.PHONY: docs/pykanidm/build
docs/pykanidm/build: ## Build the mkdocs
docs/pykanidm/build:
cd pykanidm && \
uv run --group docs mkdocs build
.PHONY: docs/pykanidm/serve
docs/pykanidm/serve: ## Run the local mkdocs server
docs/pykanidm/serve:
cd pykanidm && \
uv run --group docs mkdocs serve
########################################################################
.PHONY: release/prep
prep:
cargo outdated -R
cargo audit
.PHONY: release/kanidm
release/kanidm: ## Build the Kanidm CLI - ensure you include the environment variable KANIDM_BUILD_PROFILE
cargo build -p kanidm_tools --bin kanidm --release
.PHONY: release/kanidmd
release/kanidmd: ## Build the Kanidm daemon - ensure you include the environment variable KANIDM_BUILD_PROFILE
cargo build -p daemon --bin kanidmd --release
.PHONY: release/kanidm-ssh
release/kanidm-ssh: ## Build the Kanidm SSH tools - ensure you include the environment variable KANIDM_BUILD_PROFILE
cargo build --release \
--bin kanidm_ssh_authorizedkeys \
--bin kanidm_ssh_authorizedkeys_direct
.PHONY: release/kanidm-unixd
release/kanidm-unixd: ## Build the Kanidm UNIX tools - ensure you include the environment variable KANIDM_BUILD_PROFILE
release/kanidm-unixd:
cargo build -p pam_kanidm --release
cargo build -p nss_kanidm --release
cargo build --features unix -p kanidm_unix_int --release \
--bin kanidm_unixd \
--bin kanidm_unixd_tasks \
--bin kanidm-unix
# cert things
.PHONY: cert/clean
cert/clean: ## clean out the insecure cert bits
cert/clean:
rm -f /tmp/kanidm/*.pem
rm -f /tmp/kanidm/*.cnf
rm -f /tmp/kanidm/*.csr
rm -f /tmp/kanidm/ca.txt*
rm -f /tmp/kanidm/ca.{cnf,srl,srl.old}
.PHONY: coverage
coverage: ## Run the coverage tests using cargo-tarpaulin
cargo tarpaulin --out Html
@echo "Coverage file at file://$(PWD)/tarpaulin-report.html"
.PHONY: coveralls
coveralls: ## Run cargo tarpaulin and upload to coveralls
coveralls:
cargo tarpaulin --coveralls $(COVERALLS_REPO_TOKEN)
@echo "Coveralls repo information is at https://coveralls.io/github/kanidm/kanidm"
.PHONY: eslint
eslint: ## Run eslint on the UI javascript things
eslint: eslint/setup
@echo "################################"
@echo " Running eslint..."
@echo "################################"
cd server/core && find ./static -name '*js' -not -path '*/external/*' -exec eslint "{}" \;
@echo "################################"
@echo "Done!"
.PHONY: eslint/setup
eslint/setup: ## Install eslint for the UI javascript things
cd server/core && npm ci
.PHONY: prettier
prettier: ## Run prettier on the UI javascript things
prettier: eslint/setup
@echo " Running prettier..."
cd server/core && npm run prettier
@echo "Done!"
.PHONY: prettier/fix
prettier/fix: ## Run prettier on the UI javascript things and write back changes
prettier/fix: eslint/setup
@echo " Running prettier..."
cd server/core && npm run prettier:fix
@echo "Done!"
.PHONY: publish
publish: ## Publish to crates.io
publish:
cargo publish -p sketching
cargo publish -p scim_proto
cargo publish -p kanidm_build_profiles
cargo publish -p kanidm_proto
cargo publish -p kanidm_utils_users
cargo publish -p kanidm_lib_file_permissions
cargo publish -p kanidm_lib_crypto
cargo publish -p kanidm_client
cargo publish -p kanidm_tools
.PHONY: rust_container
rust_container: # Build and run a container based on the Linux rust base container, with our requirements included
rust_container:
docker build --pull -t kanidm_rust -f scripts/Dockerfile.devcontainer .
docker run \
--rm -it \
--name kanidm \
--mount type=bind,source=$(PWD),target=/kanidm -w /kanidm kanidm_rust:latest