@bluedynamics/cdk8s-plone 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -3
- package/CLAUDE.md +352 -0
- package/README.md +55 -179
- package/documentation/Makefile +357 -0
- package/documentation/README.md +284 -0
- package/documentation/mx.ini +3 -0
- package/documentation/sources/_static/brand-theme.css +685 -0
- package/documentation/sources/_static/custom-icons.css +123 -0
- package/documentation/sources/_static/fonts/hack/Hack-Regular.woff2 +0 -0
- package/documentation/sources/_static/fonts/orbitron/Orbitron-Black.woff2 +11 -0
- package/documentation/sources/_static/fonts/orbitron/Orbitron-Bold.woff2 +11 -0
- package/documentation/sources/_static/fonts/orbitron/Orbitron-Regular.woff2 +0 -0
- package/documentation/sources/_static/fonts/rajdhani/Rajdhani-Bold.woff2 +11 -0
- package/documentation/sources/_static/fonts/rajdhani/Rajdhani-Medium.woff2 +11 -0
- package/documentation/sources/_static/fonts/rajdhani/Rajdhani-Regular.woff2 +11 -0
- package/documentation/sources/_static/fonts/rajdhani/Rajdhani-SemiBold.woff2 +11 -0
- package/documentation/sources/_static/kup6s-icon-explanation.svg +32 -0
- package/documentation/sources/_static/kup6s-icon-howto.svg +34 -0
- package/documentation/sources/_static/kup6s-icon-plone.svg +79 -0
- package/documentation/sources/_static/kup6s-icon-reference.svg +34 -0
- package/documentation/sources/_static/kup6s-icon-tutorials.svg +30 -0
- package/documentation/sources/_static/logo-fix.js +12 -0
- package/documentation/sources/conf.py +105 -0
- package/documentation/sources/explanation/architecture.md +311 -0
- package/documentation/sources/explanation/features.md +353 -0
- package/documentation/sources/explanation/index.md +51 -0
- package/documentation/sources/how-to/index.md +56 -0
- package/documentation/sources/how-to/setup-prerequisites.md +354 -0
- package/documentation/sources/index.md +108 -0
- package/documentation/sources/reference/api/.gitkeep +1 -0
- package/documentation/sources/reference/configuration-options.md +370 -0
- package/documentation/sources/reference/index.md +59 -0
- package/documentation/sources/tutorials/01-quick-start.md +157 -0
- package/documentation/sources/tutorials/index.md +48 -0
- package/lib/httpcache.js +1 -1
- package/lib/plone.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# THIS FILE IS GENERATED BY MXMAKE
|
|
3
|
+
#
|
|
4
|
+
# DOMAINS:
|
|
5
|
+
#: core.base
|
|
6
|
+
#: core.mxenv
|
|
7
|
+
#: docs.sphinx
|
|
8
|
+
#
|
|
9
|
+
# SETTINGS (ALL CHANGES MADE BELOW SETTINGS WILL BE LOST)
|
|
10
|
+
##############################################################################
|
|
11
|
+
|
|
12
|
+
## core.base
|
|
13
|
+
|
|
14
|
+
# `deploy` target dependencies.
|
|
15
|
+
# No default value.
|
|
16
|
+
DEPLOY_TARGETS?=
|
|
17
|
+
|
|
18
|
+
# target to be executed when calling `make run`
|
|
19
|
+
# No default value.
|
|
20
|
+
RUN_TARGET?=
|
|
21
|
+
|
|
22
|
+
# Additional files and folders to remove when running clean target
|
|
23
|
+
# No default value.
|
|
24
|
+
CLEAN_FS?=
|
|
25
|
+
|
|
26
|
+
# Optional makefile to include before default targets. This can
|
|
27
|
+
# be used to provide custom targets or hook up to existing targets.
|
|
28
|
+
# Default: include.mk
|
|
29
|
+
INCLUDE_MAKEFILE?=include.mk
|
|
30
|
+
|
|
31
|
+
# Optional additional directories to be added to PATH in format
|
|
32
|
+
# `/path/to/dir/:/path/to/other/dir`. Gets inserted first, thus gets searched
|
|
33
|
+
# first.
|
|
34
|
+
# No default value.
|
|
35
|
+
EXTRA_PATH?=
|
|
36
|
+
|
|
37
|
+
# Path to Python project relative to Makefile (repository root).
|
|
38
|
+
# Leave empty if Python project is in the same directory as Makefile.
|
|
39
|
+
# For monorepo setups, set to subdirectory name (e.g., `backend`).
|
|
40
|
+
# Future-proofed for multi-language monorepos (e.g., PROJECT_PATH_NODEJS).
|
|
41
|
+
# No default value.
|
|
42
|
+
PROJECT_PATH_PYTHON?=
|
|
43
|
+
|
|
44
|
+
## core.mxenv
|
|
45
|
+
|
|
46
|
+
# Primary Python interpreter to use. It is used to create the
|
|
47
|
+
# virtual environment if `VENV_ENABLED` and `VENV_CREATE` are set to `true`.
|
|
48
|
+
# If global `uv` is used, this value is passed as `--python VALUE` to the venv creation.
|
|
49
|
+
# uv then downloads the Python interpreter if it is not available.
|
|
50
|
+
# for more on this feature read the [uv python documentation](https://docs.astral.sh/uv/concepts/python-versions/)
|
|
51
|
+
# Default: python3
|
|
52
|
+
PRIMARY_PYTHON?=3.13
|
|
53
|
+
|
|
54
|
+
# Minimum required Python version.
|
|
55
|
+
# Default: 3.10
|
|
56
|
+
PYTHON_MIN_VERSION?=3.13
|
|
57
|
+
|
|
58
|
+
# Install packages using the given package installer method.
|
|
59
|
+
# Supported are `pip` and `uv`. When `uv` is selected, a global installation
|
|
60
|
+
# is auto-detected and used if available. Otherwise, uv is installed in the
|
|
61
|
+
# virtual environment or using `PRIMARY_PYTHON`, depending on the
|
|
62
|
+
# `VENV_ENABLED` setting.
|
|
63
|
+
# Default: pip
|
|
64
|
+
PYTHON_PACKAGE_INSTALLER?=uv
|
|
65
|
+
|
|
66
|
+
# Python version for UV to install/use when creating virtual
|
|
67
|
+
# environments with global UV. Passed to `uv venv -p VALUE`. Supports version
|
|
68
|
+
# specs like `3.11`, `3.14`, `cpython@3.14`. Defaults to PRIMARY_PYTHON value
|
|
69
|
+
# for backward compatibility.
|
|
70
|
+
# Default: $(PRIMARY_PYTHON)
|
|
71
|
+
UV_PYTHON?=$(PRIMARY_PYTHON)
|
|
72
|
+
|
|
73
|
+
# Flag whether to use virtual environment. If `false`, the
|
|
74
|
+
# interpreter according to `PRIMARY_PYTHON` found in `PATH` is used.
|
|
75
|
+
# Default: true
|
|
76
|
+
VENV_ENABLED?=true
|
|
77
|
+
|
|
78
|
+
# Flag whether to create a virtual environment. If set to `false`
|
|
79
|
+
# and `VENV_ENABLED` is `true`, `VENV_FOLDER` is expected to point to an
|
|
80
|
+
# existing virtual environment.
|
|
81
|
+
# Default: true
|
|
82
|
+
VENV_CREATE?=true
|
|
83
|
+
|
|
84
|
+
# The folder of the virtual environment.
|
|
85
|
+
# If `VENV_ENABLED` is `true` and `VENV_CREATE` is true it is used as the
|
|
86
|
+
# target folder for the virtual environment. If `VENV_ENABLED` is `true` and
|
|
87
|
+
# `VENV_CREATE` is false it is expected to point to an existing virtual
|
|
88
|
+
# environment. If `VENV_ENABLED` is `false` it is ignored.
|
|
89
|
+
# Default: .venv
|
|
90
|
+
VENV_FOLDER?=.venv
|
|
91
|
+
|
|
92
|
+
# mxdev to install in virtual environment.
|
|
93
|
+
# Default: mxdev
|
|
94
|
+
MXDEV?=mxdev
|
|
95
|
+
|
|
96
|
+
# mxmake to install in virtual environment.
|
|
97
|
+
# Default: mxmake
|
|
98
|
+
MXMAKE?=mxmake
|
|
99
|
+
|
|
100
|
+
## docs.sphinx
|
|
101
|
+
|
|
102
|
+
# Documentation source folder.
|
|
103
|
+
# Default: docs/source
|
|
104
|
+
DOCS_SOURCE_FOLDER?=sources
|
|
105
|
+
|
|
106
|
+
# Documentation generation target folder.
|
|
107
|
+
# Default: docs/html
|
|
108
|
+
DOCS_TARGET_FOLDER?=html
|
|
109
|
+
|
|
110
|
+
# Documentation linkcheck output folder.
|
|
111
|
+
# Default: docs/linkcheck
|
|
112
|
+
DOCS_LINKCHECK_FOLDER?=docs/linkcheck
|
|
113
|
+
|
|
114
|
+
# Documentation Python requirements to be installed (via pip).
|
|
115
|
+
# No default value.
|
|
116
|
+
DOCS_REQUIREMENTS?=myst_parser sphinxcontrib.mermaid shibuya sphinx-design sphinx-copybutton
|
|
117
|
+
|
|
118
|
+
##############################################################################
|
|
119
|
+
# END SETTINGS - DO NOT EDIT BELOW THIS LINE
|
|
120
|
+
##############################################################################
|
|
121
|
+
|
|
122
|
+
INSTALL_TARGETS?=
|
|
123
|
+
DIRTY_TARGETS?=
|
|
124
|
+
CLEAN_TARGETS?=
|
|
125
|
+
PURGE_TARGETS?=
|
|
126
|
+
|
|
127
|
+
export PATH:=$(if $(EXTRA_PATH),$(EXTRA_PATH):,)$(PATH)
|
|
128
|
+
|
|
129
|
+
# Helper variable: adds trailing slash to PROJECT_PATH_PYTHON only if non-empty
|
|
130
|
+
PYTHON_PROJECT_PREFIX=$(if $(PROJECT_PATH_PYTHON),$(PROJECT_PATH_PYTHON)/,)
|
|
131
|
+
|
|
132
|
+
# Defensive settings for make: https://tech.davis-hansson.com/p/make/
|
|
133
|
+
SHELL:=bash
|
|
134
|
+
.ONESHELL:
|
|
135
|
+
# for Makefile debugging purposes add -x to the .SHELLFLAGS
|
|
136
|
+
.SHELLFLAGS:=-eu -o pipefail -O inherit_errexit -c
|
|
137
|
+
.SILENT:
|
|
138
|
+
.DELETE_ON_ERROR:
|
|
139
|
+
MAKEFLAGS+=--warn-undefined-variables
|
|
140
|
+
MAKEFLAGS+=--no-builtin-rules
|
|
141
|
+
|
|
142
|
+
# mxmake folder
|
|
143
|
+
MXMAKE_FOLDER?=.mxmake
|
|
144
|
+
|
|
145
|
+
# Sentinel files
|
|
146
|
+
SENTINEL_FOLDER?=$(MXMAKE_FOLDER)/sentinels
|
|
147
|
+
SENTINEL?=$(SENTINEL_FOLDER)/about.txt
|
|
148
|
+
$(SENTINEL): $(firstword $(MAKEFILE_LIST))
|
|
149
|
+
@mkdir -p $(SENTINEL_FOLDER)
|
|
150
|
+
@echo "Sentinels for the Makefile process." > $(SENTINEL)
|
|
151
|
+
|
|
152
|
+
##############################################################################
|
|
153
|
+
# mxenv
|
|
154
|
+
##############################################################################
|
|
155
|
+
|
|
156
|
+
OS?=
|
|
157
|
+
|
|
158
|
+
# Determine the executable path
|
|
159
|
+
ifeq ("$(VENV_ENABLED)", "true")
|
|
160
|
+
export VIRTUAL_ENV=$(abspath $(VENV_FOLDER))
|
|
161
|
+
ifeq ("$(OS)", "Windows_NT")
|
|
162
|
+
VENV_EXECUTABLE_FOLDER=$(VIRTUAL_ENV)/Scripts
|
|
163
|
+
else
|
|
164
|
+
VENV_EXECUTABLE_FOLDER=$(VIRTUAL_ENV)/bin
|
|
165
|
+
endif
|
|
166
|
+
export PATH:=$(VENV_EXECUTABLE_FOLDER):$(PATH)
|
|
167
|
+
MXENV_PYTHON=python
|
|
168
|
+
else
|
|
169
|
+
MXENV_PYTHON=$(PRIMARY_PYTHON)
|
|
170
|
+
endif
|
|
171
|
+
|
|
172
|
+
# Determine the package installer with non-interactive flags
|
|
173
|
+
ifeq ("$(PYTHON_PACKAGE_INSTALLER)","uv")
|
|
174
|
+
PYTHON_PACKAGE_COMMAND=uv pip --no-progress
|
|
175
|
+
else
|
|
176
|
+
PYTHON_PACKAGE_COMMAND=$(MXENV_PYTHON) -m pip
|
|
177
|
+
endif
|
|
178
|
+
|
|
179
|
+
# Auto-detect global uv availability (simple existence check)
|
|
180
|
+
ifeq ("$(PYTHON_PACKAGE_INSTALLER)","uv")
|
|
181
|
+
UV_AVAILABLE:=$(shell command -v uv >/dev/null 2>&1 && echo "true" || echo "false")
|
|
182
|
+
else
|
|
183
|
+
UV_AVAILABLE:=false
|
|
184
|
+
endif
|
|
185
|
+
|
|
186
|
+
# Determine installation strategy
|
|
187
|
+
# depending on the PYTHON_PACKAGE_INSTALLER and UV_AVAILABLE
|
|
188
|
+
# - both vars can be false or
|
|
189
|
+
# - one of them can be true,
|
|
190
|
+
# - but never boths.
|
|
191
|
+
USE_GLOBAL_UV:=$(shell [[ "$(PYTHON_PACKAGE_INSTALLER)" == "uv" && "$(UV_AVAILABLE)" == "true" ]] && echo "true" || echo "false")
|
|
192
|
+
USE_LOCAL_UV:=$(shell [[ "$(PYTHON_PACKAGE_INSTALLER)" == "uv" && "$(UV_AVAILABLE)" == "false" ]] && echo "true" || echo "false")
|
|
193
|
+
|
|
194
|
+
# Check if global UV is outdated (non-blocking warning)
|
|
195
|
+
ifeq ("$(USE_GLOBAL_UV)","true")
|
|
196
|
+
UV_OUTDATED:=$(shell uv self update --dry-run 2>&1 | grep -q "Would update" && echo "true" || echo "false")
|
|
197
|
+
else
|
|
198
|
+
UV_OUTDATED:=false
|
|
199
|
+
endif
|
|
200
|
+
|
|
201
|
+
MXENV_TARGET:=$(SENTINEL_FOLDER)/mxenv.sentinel
|
|
202
|
+
$(MXENV_TARGET): $(SENTINEL)
|
|
203
|
+
# Validation: Check Python version if not using global uv
|
|
204
|
+
ifneq ("$(USE_GLOBAL_UV)","true")
|
|
205
|
+
@$(PRIMARY_PYTHON) -c "import sys; vi = sys.version_info; sys.exit(1 if (int(vi[0]), int(vi[1])) >= tuple(map(int, '$(PYTHON_MIN_VERSION)'.split('.'))) else 0)" \
|
|
206
|
+
&& echo "Need Python >= $(PYTHON_MIN_VERSION)" && exit 1 || :
|
|
207
|
+
else
|
|
208
|
+
@echo "Using global uv for Python $(UV_PYTHON)"
|
|
209
|
+
endif
|
|
210
|
+
# Validation: Check VENV_FOLDER is set if venv enabled
|
|
211
|
+
@[[ "$(VENV_ENABLED)" == "true" && "$(VENV_FOLDER)" == "" ]] \
|
|
212
|
+
&& echo "VENV_FOLDER must be configured if VENV_ENABLED is true" && exit 1 || :
|
|
213
|
+
# Validation: Check uv not used with system Python
|
|
214
|
+
@[[ "$(VENV_ENABLED)" == "false" && "$(PYTHON_PACKAGE_INSTALLER)" == "uv" ]] \
|
|
215
|
+
&& echo "Package installer uv does not work with a global Python interpreter." && exit 1 || :
|
|
216
|
+
# Warning: Notify if global UV is outdated
|
|
217
|
+
ifeq ("$(UV_OUTDATED)","true")
|
|
218
|
+
@echo "WARNING: A newer version of uv is available. Run 'uv self update' to upgrade."
|
|
219
|
+
endif
|
|
220
|
+
|
|
221
|
+
# Create virtual environment
|
|
222
|
+
ifeq ("$(VENV_ENABLED)", "true")
|
|
223
|
+
ifeq ("$(VENV_CREATE)", "true")
|
|
224
|
+
ifeq ("$(USE_GLOBAL_UV)","true")
|
|
225
|
+
@echo "Setup Python Virtual Environment using global uv at '$(VENV_FOLDER)'"
|
|
226
|
+
@uv venv --allow-existing --no-progress -p $(UV_PYTHON) --seed $(VENV_FOLDER)
|
|
227
|
+
else
|
|
228
|
+
@echo "Setup Python Virtual Environment using module 'venv' at '$(VENV_FOLDER)'"
|
|
229
|
+
@$(PRIMARY_PYTHON) -m venv $(VENV_FOLDER)
|
|
230
|
+
@$(MXENV_PYTHON) -m ensurepip -U
|
|
231
|
+
endif
|
|
232
|
+
endif
|
|
233
|
+
else
|
|
234
|
+
@echo "Using system Python interpreter"
|
|
235
|
+
endif
|
|
236
|
+
|
|
237
|
+
# Install uv locally if needed
|
|
238
|
+
ifeq ("$(USE_LOCAL_UV)","true")
|
|
239
|
+
@echo "Install uv in virtual environment"
|
|
240
|
+
@$(MXENV_PYTHON) -m pip install uv
|
|
241
|
+
endif
|
|
242
|
+
|
|
243
|
+
# Install/upgrade core packages
|
|
244
|
+
@$(PYTHON_PACKAGE_COMMAND) install -U pip setuptools wheel
|
|
245
|
+
@echo "Install/Update MXStack Python packages"
|
|
246
|
+
@$(PYTHON_PACKAGE_COMMAND) install -U $(MXDEV) $(MXMAKE)
|
|
247
|
+
@touch $(MXENV_TARGET)
|
|
248
|
+
|
|
249
|
+
.PHONY: mxenv
|
|
250
|
+
mxenv: $(MXENV_TARGET)
|
|
251
|
+
|
|
252
|
+
.PHONY: mxenv-dirty
|
|
253
|
+
mxenv-dirty:
|
|
254
|
+
@rm -f $(MXENV_TARGET)
|
|
255
|
+
|
|
256
|
+
.PHONY: mxenv-clean
|
|
257
|
+
mxenv-clean: mxenv-dirty
|
|
258
|
+
ifeq ("$(VENV_ENABLED)", "true")
|
|
259
|
+
ifeq ("$(VENV_CREATE)", "true")
|
|
260
|
+
@rm -rf $(VENV_FOLDER)
|
|
261
|
+
endif
|
|
262
|
+
else
|
|
263
|
+
@$(PYTHON_PACKAGE_COMMAND) uninstall -y $(MXDEV)
|
|
264
|
+
@$(PYTHON_PACKAGE_COMMAND) uninstall -y $(MXMAKE)
|
|
265
|
+
endif
|
|
266
|
+
|
|
267
|
+
INSTALL_TARGETS+=mxenv
|
|
268
|
+
DIRTY_TARGETS+=mxenv-dirty
|
|
269
|
+
CLEAN_TARGETS+=mxenv-clean
|
|
270
|
+
|
|
271
|
+
##############################################################################
|
|
272
|
+
# sphinx
|
|
273
|
+
##############################################################################
|
|
274
|
+
|
|
275
|
+
# additional targets required for building docs.
|
|
276
|
+
DOCS_TARGETS+=
|
|
277
|
+
|
|
278
|
+
SPHINX_BIN=sphinx-build
|
|
279
|
+
SPHINX_AUTOBUILD_BIN=sphinx-autobuild
|
|
280
|
+
|
|
281
|
+
DOCS_TARGET:=$(SENTINEL_FOLDER)/sphinx.sentinel
|
|
282
|
+
$(DOCS_TARGET): $(MXENV_TARGET)
|
|
283
|
+
@echo "Install Sphinx"
|
|
284
|
+
@$(PYTHON_PACKAGE_COMMAND) install -U sphinx sphinx-autobuild $(DOCS_REQUIREMENTS)
|
|
285
|
+
@touch $(DOCS_TARGET)
|
|
286
|
+
|
|
287
|
+
.PHONY: docs
|
|
288
|
+
docs: $(DOCS_TARGET) $(DOCS_TARGETS)
|
|
289
|
+
@echo "Build sphinx docs"
|
|
290
|
+
@$(SPHINX_BIN) $(DOCS_SOURCE_FOLDER) $(DOCS_TARGET_FOLDER)
|
|
291
|
+
|
|
292
|
+
.PHONY: docs-live
|
|
293
|
+
docs-live: $(DOCS_TARGET) $(DOCS_TARGETS)
|
|
294
|
+
@echo "Rebuild Sphinx documentation on changes, with live-reload in the browser"
|
|
295
|
+
@$(SPHINX_AUTOBUILD_BIN) $(DOCS_SOURCE_FOLDER) $(DOCS_TARGET_FOLDER)
|
|
296
|
+
|
|
297
|
+
.PHONY: docs-linkcheck
|
|
298
|
+
docs-linkcheck: $(DOCS_TARGET) $(DOCS_TARGETS)
|
|
299
|
+
@echo "Run Sphinx linkcheck"
|
|
300
|
+
@$(SPHINX_BIN) -b linkcheck $(DOCS_SOURCE_FOLDER) $(DOCS_LINKCHECK_FOLDER)
|
|
301
|
+
|
|
302
|
+
.PHONY: docs-dirty
|
|
303
|
+
docs-dirty:
|
|
304
|
+
@rm -f $(DOCS_TARGET)
|
|
305
|
+
|
|
306
|
+
.PHONY: docs-clean
|
|
307
|
+
docs-clean: docs-dirty
|
|
308
|
+
@test -e $(MXENV_PYTHON) && $(MXENV_PYTHON) -m pip uninstall -y \
|
|
309
|
+
sphinx sphinx-autobuild $(DOCS_REQUIREMENTS) || :
|
|
310
|
+
@rm -rf $(DOCS_TARGET_FOLDER)
|
|
311
|
+
|
|
312
|
+
INSTALL_TARGETS+=$(DOCS_TARGET)
|
|
313
|
+
DIRTY_TARGETS+=docs-dirty
|
|
314
|
+
CLEAN_TARGETS+=docs-clean
|
|
315
|
+
|
|
316
|
+
##############################################################################
|
|
317
|
+
# Custom includes
|
|
318
|
+
##############################################################################
|
|
319
|
+
|
|
320
|
+
-include $(INCLUDE_MAKEFILE)
|
|
321
|
+
|
|
322
|
+
##############################################################################
|
|
323
|
+
# Default targets
|
|
324
|
+
##############################################################################
|
|
325
|
+
|
|
326
|
+
INSTALL_TARGET:=$(SENTINEL_FOLDER)/install.sentinel
|
|
327
|
+
$(INSTALL_TARGET): $(INSTALL_TARGETS)
|
|
328
|
+
@touch $(INSTALL_TARGET)
|
|
329
|
+
|
|
330
|
+
.PHONY: install
|
|
331
|
+
install: $(INSTALL_TARGET)
|
|
332
|
+
@touch $(INSTALL_TARGET)
|
|
333
|
+
|
|
334
|
+
.PHONY: run
|
|
335
|
+
run: $(RUN_TARGET)
|
|
336
|
+
|
|
337
|
+
.PHONY: deploy
|
|
338
|
+
deploy: $(DEPLOY_TARGETS)
|
|
339
|
+
|
|
340
|
+
.PHONY: dirty
|
|
341
|
+
dirty: $(DIRTY_TARGETS)
|
|
342
|
+
@rm -f $(INSTALL_TARGET)
|
|
343
|
+
|
|
344
|
+
.PHONY: clean
|
|
345
|
+
clean: dirty $(CLEAN_TARGETS)
|
|
346
|
+
@rm -rf $(CLEAN_TARGETS) $(MXMAKE_FOLDER) $(CLEAN_FS)
|
|
347
|
+
|
|
348
|
+
.PHONY: purge
|
|
349
|
+
purge: clean $(PURGE_TARGETS)
|
|
350
|
+
|
|
351
|
+
.PHONY: runtime-clean
|
|
352
|
+
runtime-clean:
|
|
353
|
+
@echo "Remove runtime artifacts, like byte-code and caches."
|
|
354
|
+
@find . -name '*.py[c|o]' -delete
|
|
355
|
+
@find . -name '*~' -exec rm -f {} +
|
|
356
|
+
@find . -name '__pycache__' -exec rm -fr {} +
|
|
357
|
+
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# cdk8s-plone Documentation
|
|
2
|
+
|
|
3
|
+
This directory contains the complete documentation for cdk8s-plone, built using [Sphinx](https://www.sphinx-doc.org/) with [MyST Parser](https://myst-parser.readthedocs.io/) and following the [Diátaxis framework](https://diataxis.fr/).
|
|
4
|
+
|
|
5
|
+
## 📚 View Documentation
|
|
6
|
+
|
|
7
|
+
**Published documentation:** https://bluedynamics.github.io/cdk8s-plone/
|
|
8
|
+
|
|
9
|
+
## 🏗️ Building Documentation Locally
|
|
10
|
+
|
|
11
|
+
### Prerequisites
|
|
12
|
+
|
|
13
|
+
- Python 3.13+ (or Python 3.9+ with manual configuration)
|
|
14
|
+
- `make` command
|
|
15
|
+
- `uv` (fast Python package installer) - optional but recommended
|
|
16
|
+
|
|
17
|
+
### Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Navigate to documentation directory
|
|
21
|
+
cd documentation
|
|
22
|
+
|
|
23
|
+
# Build HTML documentation
|
|
24
|
+
make docs
|
|
25
|
+
|
|
26
|
+
# Open in browser
|
|
27
|
+
open html/index.html # macOS
|
|
28
|
+
xdg-open html/index.html # Linux
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The first build will:
|
|
32
|
+
1. Create a Python virtual environment (.venv)
|
|
33
|
+
2. Install Sphinx and required extensions
|
|
34
|
+
3. Generate HTML documentation
|
|
35
|
+
|
|
36
|
+
Subsequent builds will reuse the virtual environment and be much faster.
|
|
37
|
+
|
|
38
|
+
### Development with Live Reload
|
|
39
|
+
|
|
40
|
+
For documentation writing, use the live-reload server:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
cd documentation
|
|
44
|
+
make docs-live
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
This starts a development server at http://localhost:8000 that automatically rebuilds and refreshes when you save changes.
|
|
48
|
+
|
|
49
|
+
### Clean Build
|
|
50
|
+
|
|
51
|
+
To remove generated files and rebuild from scratch:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
make clean
|
|
55
|
+
make docs
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 📝 Documentation Structure
|
|
59
|
+
|
|
60
|
+
The documentation follows the [Diátaxis framework](https://diataxis.fr/), organizing content into four categories:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
sources/
|
|
64
|
+
├── index.md # Main landing page
|
|
65
|
+
├── tutorials/ # Learning-oriented (step-by-step lessons)
|
|
66
|
+
│ └── index.md
|
|
67
|
+
├── how-to/ # Goal-oriented (solve specific problems)
|
|
68
|
+
│ └── index.md
|
|
69
|
+
├── reference/ # Information-oriented (technical specs)
|
|
70
|
+
│ ├── index.md
|
|
71
|
+
│ └── api/ # API documentation
|
|
72
|
+
├── explanation/ # Understanding-oriented (concepts)
|
|
73
|
+
│ └── index.md
|
|
74
|
+
└── _static/ # Static assets (CSS, images, fonts)
|
|
75
|
+
├── brand-theme.css # Cyberpunk theme styling
|
|
76
|
+
├── custom-icons.css # Icon styling
|
|
77
|
+
├── logo-fix.js # Logo link fixes
|
|
78
|
+
├── plone-logo.svg # Project logo (placeholder)
|
|
79
|
+
├── kup6s-icon-*.svg # Category icons
|
|
80
|
+
└── fonts/ # Web fonts (Rajdhani, Orbitron, Hack)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Content Guidelines
|
|
84
|
+
|
|
85
|
+
#### Tutorials (Learning-Oriented)
|
|
86
|
+
- Step-by-step lessons for building skills
|
|
87
|
+
- Complete, reproducible examples
|
|
88
|
+
- Learning goals clearly stated
|
|
89
|
+
- Assumes beginner knowledge
|
|
90
|
+
|
|
91
|
+
#### How-To Guides (Goal-Oriented)
|
|
92
|
+
- Solutions to specific problems
|
|
93
|
+
- Assumes some knowledge
|
|
94
|
+
- Focus on accomplishing a task
|
|
95
|
+
- Recipe-style format
|
|
96
|
+
|
|
97
|
+
#### Reference (Information-Oriented)
|
|
98
|
+
- Technical specifications
|
|
99
|
+
- API documentation
|
|
100
|
+
- Configuration options
|
|
101
|
+
- Dry, factual descriptions
|
|
102
|
+
|
|
103
|
+
#### Explanation (Understanding-Oriented)
|
|
104
|
+
- Conceptual discussion
|
|
105
|
+
- Architecture and design decisions
|
|
106
|
+
- The "why" behind choices
|
|
107
|
+
- Broaden understanding
|
|
108
|
+
|
|
109
|
+
## 🎨 Theme and Styling
|
|
110
|
+
|
|
111
|
+
The documentation uses:
|
|
112
|
+
- **Theme:** [Shibuya](https://shibuya.lepture.com/) - Modern, responsive Sphinx theme
|
|
113
|
+
- **Parser:** [MyST](https://myst-parser.readthedocs.io/) - Markdown with extensions
|
|
114
|
+
- **Style:** Cyberpunk-inspired (cyan #00d4ff, dark background)
|
|
115
|
+
- **Fonts:**
|
|
116
|
+
- Rajdhani (headings) - geometric, futuristic
|
|
117
|
+
- Hack (body/code) - monospace, highly legible
|
|
118
|
+
- Orbitron (special emphasis) - geometric, bold
|
|
119
|
+
|
|
120
|
+
## 🔧 Configuration
|
|
121
|
+
|
|
122
|
+
Key configuration files:
|
|
123
|
+
|
|
124
|
+
- **`Makefile`** - Build automation (generated by mxmake)
|
|
125
|
+
- **`mx.ini`** - mxmake settings
|
|
126
|
+
- **`sources/conf.py`** - Sphinx configuration
|
|
127
|
+
- **`.gitignore`** - Excludes build artifacts
|
|
128
|
+
|
|
129
|
+
### Sphinx Extensions
|
|
130
|
+
|
|
131
|
+
- `myst_parser` - Markdown support
|
|
132
|
+
- `sphinxcontrib.mermaid` - Diagram support (```mermaid)
|
|
133
|
+
- `sphinx_design` - Grid and card directives
|
|
134
|
+
- `sphinx_copybutton` - Copy button for code blocks
|
|
135
|
+
|
|
136
|
+
### MyST Extensions
|
|
137
|
+
|
|
138
|
+
- `deflist` - Definition lists
|
|
139
|
+
- `colon_fence` - ::: directive syntax for grids/cards
|
|
140
|
+
- Mermaid fence as directive
|
|
141
|
+
|
|
142
|
+
## 📖 Writing Documentation
|
|
143
|
+
|
|
144
|
+
### Markdown Format
|
|
145
|
+
|
|
146
|
+
All documentation is written in Markdown with MyST extensions.
|
|
147
|
+
|
|
148
|
+
**Example:**
|
|
149
|
+
|
|
150
|
+
```markdown
|
|
151
|
+
# Page Title
|
|
152
|
+
|
|
153
|
+
## Section
|
|
154
|
+
|
|
155
|
+
Regular Markdown content with **bold**, *italic*, and `code`.
|
|
156
|
+
|
|
157
|
+
### Code Blocks
|
|
158
|
+
|
|
159
|
+
\```python
|
|
160
|
+
import example
|
|
161
|
+
print("Hello, world!")
|
|
162
|
+
\```
|
|
163
|
+
|
|
164
|
+
### Grid Cards (Diátaxis Landing Pages)
|
|
165
|
+
|
|
166
|
+
::::{grid} 2
|
|
167
|
+
:gutter: 3
|
|
168
|
+
|
|
169
|
+
:::{grid-item-card} Card Title
|
|
170
|
+
:img-top: _static/icon.svg
|
|
171
|
+
:link: path/to/page
|
|
172
|
+
:link-type: doc
|
|
173
|
+
|
|
174
|
+
Card description
|
|
175
|
+
:::
|
|
176
|
+
|
|
177
|
+
::::
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Internal Links
|
|
181
|
+
|
|
182
|
+
```markdown
|
|
183
|
+
[Link text](path/to/file.md)
|
|
184
|
+
[Link to section](file.md#section-heading)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Images
|
|
188
|
+
|
|
189
|
+
```markdown
|
|
190
|
+

|
|
191
|
+
|
|
192
|
+
# Or with MyST directive:
|
|
193
|
+
\```{image} path/to/image.png
|
|
194
|
+
:width: 200px
|
|
195
|
+
:align: center
|
|
196
|
+
\```
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Tables
|
|
200
|
+
|
|
201
|
+
```markdown
|
|
202
|
+
| Column 1 | Column 2 |
|
|
203
|
+
|----------|----------|
|
|
204
|
+
| Value 1 | Value 2 |
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Diagrams
|
|
208
|
+
|
|
209
|
+
Use Mermaid for diagrams:
|
|
210
|
+
|
|
211
|
+
````markdown
|
|
212
|
+
```mermaid
|
|
213
|
+
graph LR
|
|
214
|
+
A[Start] --> B[Process]
|
|
215
|
+
B --> C[End]
|
|
216
|
+
```
|
|
217
|
+
````
|
|
218
|
+
|
|
219
|
+
## 🚀 Deployment
|
|
220
|
+
|
|
221
|
+
Documentation will be automatically deployed to GitHub Pages via GitHub Actions:
|
|
222
|
+
|
|
223
|
+
1. **Trigger:** Push to `main` branch or manual workflow dispatch
|
|
224
|
+
2. **Build:** Ubuntu runner builds documentation with Sphinx
|
|
225
|
+
3. **Deploy:** Artifacts uploaded to GitHub Pages
|
|
226
|
+
4. **URL:** https://bluedynamics.github.io/cdk8s-plone/
|
|
227
|
+
|
|
228
|
+
## 📦 Dependencies
|
|
229
|
+
|
|
230
|
+
Documentation dependencies (installed automatically by `make docs`):
|
|
231
|
+
|
|
232
|
+
- sphinx - Documentation generator
|
|
233
|
+
- sphinx-autobuild - Live-reload server
|
|
234
|
+
- myst_parser - Markdown parser
|
|
235
|
+
- sphinxcontrib.mermaid - Mermaid diagram support
|
|
236
|
+
- shibuya - Sphinx theme
|
|
237
|
+
- sphinx-design - Grid/card directives
|
|
238
|
+
- sphinx-copybutton - Code block copy button
|
|
239
|
+
|
|
240
|
+
## 🤝 Contributing
|
|
241
|
+
|
|
242
|
+
When contributing to documentation:
|
|
243
|
+
|
|
244
|
+
1. **Follow Diátaxis categories** - Put content in the right section
|
|
245
|
+
2. **Use clear headings** - H1 for page title, H2 for sections
|
|
246
|
+
3. **Test locally** - Always build and preview before committing
|
|
247
|
+
4. **Check links** - Ensure all internal links work
|
|
248
|
+
5. **Use consistent style** - Follow existing formatting patterns
|
|
249
|
+
6. **Add images to _static/** - Keep static assets organized
|
|
250
|
+
|
|
251
|
+
## 🔍 Troubleshooting
|
|
252
|
+
|
|
253
|
+
### Build Errors
|
|
254
|
+
|
|
255
|
+
**Error: `sphinx-build: command not found`**
|
|
256
|
+
- Solution: Run `make clean` then `make docs` to reinstall dependencies
|
|
257
|
+
|
|
258
|
+
**Error: Unknown directive type "grid"**
|
|
259
|
+
- Solution: Ensure `sphinx_design` is installed: `pip install sphinx-design`
|
|
260
|
+
|
|
261
|
+
**Error: "Cannot find reference" warnings**
|
|
262
|
+
- Solution: Check that linked files exist and paths are correct
|
|
263
|
+
|
|
264
|
+
### Theme Issues
|
|
265
|
+
|
|
266
|
+
**Fonts not loading**
|
|
267
|
+
- Check that font files exist in `_static/fonts/`
|
|
268
|
+
- Verify paths in `brand-theme.css`
|
|
269
|
+
|
|
270
|
+
**Logo not displaying**
|
|
271
|
+
- Ensure `_static/plone-logo.svg` exists
|
|
272
|
+
- Check `html_logo` setting in `conf.py`
|
|
273
|
+
|
|
274
|
+
## 📚 Resources
|
|
275
|
+
|
|
276
|
+
- [Diátaxis Framework](https://diataxis.fr/) - Documentation organization philosophy
|
|
277
|
+
- [MyST Parser Documentation](https://myst-parser.readthedocs.io/) - Markdown syntax reference
|
|
278
|
+
- [Sphinx Documentation](https://www.sphinx-doc.org/) - Sphinx features and configuration
|
|
279
|
+
- [Shibuya Theme](https://shibuya.lepture.com/) - Theme documentation
|
|
280
|
+
- [Mermaid Diagrams](https://mermaid.js.org/) - Diagram syntax
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
**Questions?** Open an issue on GitHub or ask in the project discussions.
|