diff --git a/bun.lock b/bun.lock
index c05ff745..fc130ffb 100644
--- a/bun.lock
+++ b/bun.lock
@@ -6,14 +6,14 @@
"dependencies": {
"@docusaurus/core": "3.8.0",
"@docusaurus/preset-classic": "3.8.0",
- "@mdx-js/react": "^3.1.1",
- "caniuse-lite": "^1.0.30001756",
- "clsx": "^2.1.1",
- "docusaurus-plugin-openapi-docs": "^4.5.1",
- "docusaurus-theme-openapi-docs": "^4.5.1",
- "prism-react-renderer": "^2.4.1",
- "react": "^19.2.0",
- "react-dom": "^19.2.0",
+ "@easyops-cn/docusaurus-search-local": "^0.50.0",
+ "@mdx-js/react": "^3.0.0",
+ "clsx": "^2.0.0",
+ "docusaurus-plugin-openapi-docs": "^4.4.0",
+ "docusaurus-theme-openapi-docs": "^4.4.0",
+ "prism-react-renderer": "^2.3.0",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.0",
@@ -414,6 +414,16 @@
"@docusaurus/utils-validation": ["@docusaurus/utils-validation@3.8.0", "", { "dependencies": { "@docusaurus/logger": "3.8.0", "@docusaurus/utils": "3.8.0", "@docusaurus/utils-common": "3.8.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "tslib": "^2.6.0" } }, "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg=="],
+ "@easyops-cn/autocomplete.js": ["@easyops-cn/autocomplete.js@0.38.1", "", { "dependencies": { "cssesc": "^3.0.0", "immediate": "^3.2.3" } }, "sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q=="],
+
+ "@easyops-cn/docusaurus-search-local": ["@easyops-cn/docusaurus-search-local@0.50.0", "", { "dependencies": { "@docusaurus/plugin-content-docs": "^2 || ^3", "@docusaurus/theme-translations": "^2 || ^3", "@docusaurus/utils": "^2 || ^3", "@docusaurus/utils-common": "^2 || ^3", "@docusaurus/utils-validation": "^2 || ^3", "@easyops-cn/autocomplete.js": "^0.38.1", "@node-rs/jieba": "^1.6.0", "cheerio": "^1.0.0", "clsx": "^2.1.1", "comlink": "^4.4.2", "debug": "^4.2.0", "fs-extra": "^10.0.0", "klaw-sync": "^6.0.0", "lunr": "^2.3.9", "lunr-languages": "^1.4.0", "mark.js": "^8.11.1", "tslib": "^2.4.0" }, "peerDependencies": { "@docusaurus/theme-common": "^2 || ^3", "react": "^16.14.0 || ^17 || ^18 || ^19", "react-dom": "^16.14.0 || 17 || ^18 || ^19" } }, "sha512-wJQNa1jc1bGy8hLTnCynIjpAmldYEcwWVqqSQfKhBlIu0Px9Fw3i1PIbnbG5D1Da4Ep+FkOdWWsqFZqkiBah1Q=="],
+
+ "@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" } }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="],
+
+ "@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="],
+
+ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="],
+
"@exodus/schemasafe": ["@exodus/schemasafe@1.3.0", "", {}, "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw=="],
"@faker-js/faker": ["@faker-js/faker@5.5.3", "", {}, "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw=="],
@@ -450,6 +460,38 @@
"@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="],
+ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.10", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.9.0" } }, "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ=="],
+
+ "@node-rs/jieba": ["@node-rs/jieba@1.10.4", "", { "optionalDependencies": { "@node-rs/jieba-android-arm-eabi": "1.10.4", "@node-rs/jieba-android-arm64": "1.10.4", "@node-rs/jieba-darwin-arm64": "1.10.4", "@node-rs/jieba-darwin-x64": "1.10.4", "@node-rs/jieba-freebsd-x64": "1.10.4", "@node-rs/jieba-linux-arm-gnueabihf": "1.10.4", "@node-rs/jieba-linux-arm64-gnu": "1.10.4", "@node-rs/jieba-linux-arm64-musl": "1.10.4", "@node-rs/jieba-linux-x64-gnu": "1.10.4", "@node-rs/jieba-linux-x64-musl": "1.10.4", "@node-rs/jieba-wasm32-wasi": "1.10.4", "@node-rs/jieba-win32-arm64-msvc": "1.10.4", "@node-rs/jieba-win32-ia32-msvc": "1.10.4", "@node-rs/jieba-win32-x64-msvc": "1.10.4" } }, "sha512-GvDgi8MnBiyWd6tksojej8anIx18244NmIOc1ovEw8WKNUejcccLfyu8vj66LWSuoZuKILVtNsOy4jvg3aoxIw=="],
+
+ "@node-rs/jieba-android-arm-eabi": ["@node-rs/jieba-android-arm-eabi@1.10.4", "", { "os": "android", "cpu": "arm" }, "sha512-MhyvW5N3Fwcp385d0rxbCWH42kqDBatQTyP8XbnYbju2+0BO/eTeCCLYj7Agws4pwxn2LtdldXRSKavT7WdzNA=="],
+
+ "@node-rs/jieba-android-arm64": ["@node-rs/jieba-android-arm64@1.10.4", "", { "os": "android", "cpu": "arm64" }, "sha512-XyDwq5+rQ+Tk55A+FGi6PtJbzf974oqnpyCcCPzwU3QVXJCa2Rr4Lci+fx8oOpU4plT3GuD+chXMYLsXipMgJA=="],
+
+ "@node-rs/jieba-darwin-arm64": ["@node-rs/jieba-darwin-arm64@1.10.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-G++RYEJ2jo0rxF9626KUy90wp06TRUjAsvY/BrIzEOX/ingQYV/HjwQzNPRR1P1o32a6/U8RGo7zEBhfdybL6w=="],
+
+ "@node-rs/jieba-darwin-x64": ["@node-rs/jieba-darwin-x64@1.10.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-MmDNeOb2TXIZCPyWCi2upQnZpPjAxw5ZGEj6R8kNsPXVFALHIKMa6ZZ15LCOkSTsKXVC17j2t4h+hSuyYb6qfQ=="],
+
+ "@node-rs/jieba-freebsd-x64": ["@node-rs/jieba-freebsd-x64@1.10.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-/x7aVQ8nqUWhpXU92RZqd333cq639i/olNpd9Z5hdlyyV5/B65LLy+Je2B2bfs62PVVm5QXRpeBcZqaHelp/bg=="],
+
+ "@node-rs/jieba-linux-arm-gnueabihf": ["@node-rs/jieba-linux-arm-gnueabihf@1.10.4", "", { "os": "linux", "cpu": "arm" }, "sha512-crd2M35oJBRLkoESs0O6QO3BBbhpv+tqXuKsqhIG94B1d02RVxtRIvSDwO33QurxqSdvN9IeSnVpHbDGkuXm3g=="],
+
+ "@node-rs/jieba-linux-arm64-gnu": ["@node-rs/jieba-linux-arm64-gnu@1.10.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-omIzNX1psUzPcsdnUhGU6oHeOaTCuCjUgOA/v/DGkvWC1jLcnfXe4vdYbtXMh4XOCuIgS1UCcvZEc8vQLXFbXQ=="],
+
+ "@node-rs/jieba-linux-arm64-musl": ["@node-rs/jieba-linux-arm64-musl@1.10.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y/tiJ1+HeS5nnmLbZOE+66LbsPOHZ/PUckAYVeLlQfpygLEpLYdlh0aPpS5uiaWMjAXYZYdFkpZHhxDmSLpwpw=="],
+
+ "@node-rs/jieba-linux-x64-gnu": ["@node-rs/jieba-linux-x64-gnu@1.10.4", "", { "os": "linux", "cpu": "x64" }, "sha512-WZO8ykRJpWGE9MHuZpy1lu3nJluPoeB+fIJJn5CWZ9YTVhNDWoCF4i/7nxz1ntulINYGQ8VVuCU9LD86Mek97g=="],
+
+ "@node-rs/jieba-linux-x64-musl": ["@node-rs/jieba-linux-x64-musl@1.10.4", "", { "os": "linux", "cpu": "x64" }, "sha512-uBBD4S1rGKcgCyAk6VCKatEVQb6EDD5I40v/DxODi5CuZVCANi9m5oee/MQbAoaX7RydA2f0OSCE9/tcwXEwUg=="],
+
+ "@node-rs/jieba-wasm32-wasi": ["@node-rs/jieba-wasm32-wasi@1.10.4", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.3" }, "cpu": "none" }, "sha512-Y2umiKHjuIJy0uulNDz9SDYHdfq5Hmy7jY5nORO99B4pySKkcrMjpeVrmWXJLIsEKLJwcCXHxz8tjwU5/uhz0A=="],
+
+ "@node-rs/jieba-win32-arm64-msvc": ["@node-rs/jieba-win32-arm64-msvc@1.10.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-nwMtViFm4hjqhz1it/juQnxpXgqlGltCuWJ02bw70YUDMDlbyTy3grCJPpQQpueeETcALUnTxda8pZuVrLRcBA=="],
+
+ "@node-rs/jieba-win32-ia32-msvc": ["@node-rs/jieba-win32-ia32-msvc@1.10.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCAvLx7Z+W4z5oKS+7vUowAJr0uw9JBw8x1Y23Xs/xMA4Em+OOSiaF5/tCJqZUCJ8uC4QeImmgDFiBqGNwxlyA=="],
+
+ "@node-rs/jieba-win32-x64-msvc": ["@node-rs/jieba-win32-x64-msvc@1.10.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+sqemSfS1jjb+Tt7InNbNzrRh1Ua3vProVvC4BZRPg010/leCbGFFiQHpzcPRfpxAXZrzG5Y0YBTsPzN/I4yHQ=="],
+
"@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
@@ -546,6 +588,8 @@
"@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="],
+ "@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="],
+
"@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="],
"@types/bonjour": ["@types/bonjour@3.5.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ=="],
@@ -818,7 +862,7 @@
"charset": ["charset@1.0.1", "", {}, "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg=="],
- "cheerio": ["cheerio@1.0.0-rc.12", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q=="],
+ "cheerio": ["cheerio@1.0.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "encoding-sniffer": "^0.2.0", "htmlparser2": "^9.1.0", "parse5": "^7.1.2", "parse5-htmlparser2-tree-adapter": "^7.0.0", "parse5-parser-stream": "^7.1.2", "undici": "^6.19.5", "whatwg-mimetype": "^4.0.0" } }, "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww=="],
"cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="],
@@ -854,6 +898,8 @@
"combine-promises": ["combine-promises@1.2.0", "", {}, "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ=="],
+ "comlink": ["comlink@4.4.2", "", {}, "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g=="],
+
"comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
"commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="],
@@ -920,7 +966,7 @@
"css-prefers-color-scheme": ["css-prefers-color-scheme@10.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ=="],
- "css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="],
+ "css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="],
"css-tree": ["css-tree@2.3.1", "", { "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" } }, "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw=="],
@@ -1026,6 +1072,8 @@
"encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="],
+ "encoding-sniffer": ["encoding-sniffer@0.2.0", "", { "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" } }, "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg=="],
+
"enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="],
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
@@ -1248,7 +1296,7 @@
"html-webpack-plugin": ["html-webpack-plugin@5.6.3", "", { "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg=="],
- "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="],
+ "htmlparser2": ["htmlparser2@9.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "entities": "^4.5.0" } }, "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ=="],
"http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="],
@@ -1282,6 +1330,8 @@
"image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="],
+ "immediate": ["immediate@3.3.0", "", {}, "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="],
+
"immer": ["immer@9.0.21", "", {}, "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA=="],
"immutable": ["immutable@5.1.2", "", {}, "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ=="],
@@ -1408,6 +1458,8 @@
"kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="],
+ "klaw-sync": ["klaw-sync@6.0.0", "", { "dependencies": { "graceful-fs": "^4.1.11" } }, "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ=="],
+
"kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
"latest-version": ["latest-version@7.0.0", "", { "dependencies": { "package-json": "^8.1.0" } }, "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg=="],
@@ -1446,6 +1498,12 @@
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
+ "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="],
+
+ "lunr-languages": ["lunr-languages@1.14.0", "", {}, "sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA=="],
+
+ "mark.js": ["mark.js@8.11.1", "", {}, "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="],
+
"markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="],
"markdown-table": ["markdown-table@2.0.0", "", { "dependencies": { "repeat-string": "^1.0.0" } }, "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A=="],
@@ -1726,6 +1784,8 @@
"parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="],
+ "parse5-parser-stream": ["parse5-parser-stream@7.1.2", "", { "dependencies": { "parse5": "^7.0.0" } }, "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow=="],
+
"parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="],
"pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="],
@@ -2260,6 +2320,8 @@
"typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="],
+ "undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="],
+
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
"unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="],
@@ -2370,6 +2432,10 @@
"websocket-extensions": ["websocket-extensions@0.1.4", "", {}, "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="],
+ "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="],
+
+ "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="],
+
"whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
@@ -2430,7 +2496,9 @@
"@docusaurus/mdx-loader/remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="],
- "@docusaurus/theme-classic/@mdx-js/react": ["@mdx-js/react@3.1.0", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ=="],
+ "@docusaurus/plugin-content-blog/cheerio": ["cheerio@1.0.0-rc.12", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q=="],
+
+ "@easyops-cn/docusaurus-search-local/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="],
"@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="],
@@ -2458,12 +2526,6 @@
"body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="],
- "browserslist/caniuse-lite": ["caniuse-lite@1.0.30001720", "", {}, "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g=="],
-
- "caniuse-api/caniuse-lite": ["caniuse-lite@1.0.30001720", "", {}, "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g=="],
-
- "cheerio-select/css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="],
-
"clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
"cli-table3/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
@@ -2488,10 +2550,6 @@
"css-minimizer-webpack-plugin/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="],
- "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
-
- "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="],
-
"csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="],
"decompress-response/mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
@@ -2822,6 +2880,8 @@
"remark-stringify/@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
+ "renderkid/css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="],
+
"renderkid/htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="],
"renderkid/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
@@ -2864,8 +2924,6 @@
"svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="],
- "svgo/css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="],
-
"terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
"unified/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
@@ -2924,6 +2982,8 @@
"@docusaurus/mdx-loader/remark-gfm/micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="],
+ "@docusaurus/plugin-content-blog/cheerio/htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="],
+
"@redocly/openapi-core/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
"ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
@@ -2946,8 +3006,6 @@
"css-minimizer-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
- "css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
-
"csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="],
"express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
@@ -3132,6 +3190,10 @@
"remark-stringify/@types/mdast/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
+ "renderkid/css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
+
+ "renderkid/css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="],
+
"renderkid/htmlparser2/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
"renderkid/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="],
@@ -3222,8 +3284,6 @@
"cli-table3/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
- "css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
-
"file-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
"mdast-util-gfm-footnote/mdast-util-to-markdown/mdast-util-phrasing/unist-util-is": ["unist-util-is@5.2.1", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw=="],
@@ -3308,6 +3368,8 @@
"remark-gfm/unified/vfile/vfile-message": ["vfile-message@3.1.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" } }, "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw=="],
+ "renderkid/css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
+
"renderkid/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
"sucrase/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
@@ -3370,6 +3432,8 @@
"react-markdown/remark-rehype/mdast-util-to-hast/micromark-util-sanitize-uri/micromark-util-encode": ["micromark-util-encode@1.1.0", "", {}, "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw=="],
+ "renderkid/css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
+
"@docusaurus/mdx-loader/rehype-raw/hast-util-raw/hast-util-from-parse5/hastscript/hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="],
"@docusaurus/mdx-loader/remark-gfm/mdast-util-gfm/mdast-util-gfm-autolink-literal/micromark-util-character/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="],
diff --git a/docs/Components/Iglu Builder.md b/docs/Components/Iglu Builder.md
index 0343576a..112f1554 100644
--- a/docs/Components/Iglu Builder.md
+++ b/docs/Components/Iglu Builder.md
@@ -8,7 +8,7 @@ sidebar_position: 1
The **Iglu Builder** is the component of the Iglu Project that can build [nix derivations](https://nix.dev/manual/nix/2.25/language/derivations) and push it to [cachix](https://www.cachix.org/) compatible nix caches like our [Iglu Cache](/docs/Components/Iglu%20Cache).
## Websocket
-This is the documentation to the [`/api/v1/build` Websocket](/docs/API/Iglu%20Builder/build)
+This is the documentation of the [`/api/v1/build` Websocket](/docs/Developer/API/Iglu%20Builder/build)
:::info
This Endpoint accepts only **one** connection simultaneously!
@@ -23,53 +23,79 @@ To start a build job you have to send a json with this schema:
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
- "git": {
+ "git_config": {
"type": "object",
"properties": {
"repository": { "type": "string" },
+ "builder_id": { "type": "number" },
+ "id": {"type": "number"},
"branch": { "type": "string" },
- "gitUsername": { "type": "string" },
- "gitKey": { "type": "string" },
- "requiresAuth": { "type": "boolean" },
- "noClone": { "type": "boolean" }
+ "gitusername": { "type": "string" },
+ "gitkey": { "type": "string" },
+ "requiresauth": { "type": "boolean" },
+ "noclone": { "type": "boolean" }
},
- "required": ["noClone"],
+ "required": ["noclone"],
"additionalProperties": false
},
- "buildOptions": {
+ "builder" : {
"type": "object",
"properties": {
+ "id": {"type": "number"},
+ "cache_id": {"type": "number"},
+ "name":{"type": "string"},
+ "description": {"type": "string"},
+ "enabled": {"type": "boolean"},
+ "trigger": {"type": "string"},
+ "cron": {"type": "string"},
+ "arch": {"type": "string"},
+ "webhookurl": {"type": "string"}
+ },
+ "additionalProperties": false
+ },
+ "cachix_config": {
+ "type": "object",
+ "properties": {
+ "id":{"type": "number"},
+ "builder_id":{"type": "number"},
+ "push":{"type": "boolean"},
+ "target": {"type": "string"},
+ "apikey": {"type": "string"},
+ "signingkey": {"type": "string"},
+ "buildoutputdir": {"type": "string"}
+ },
+ "additionalProperties": false
+ },
+ "build_options": {
+ "type": "object",
+ "properties": {
+ "id": {"type": "number"},
+ "builder_id": {"type": "number"},
"cores": { "type": "number" },
- "maxJobs": { "type": "number" },
+ "maxjobs": { "type": "number" },
"keep_going": { "type": "boolean" },
- "extraArgs": { "type": "string" },
+ "extraargs": { "type": "string" },
"substituters": {
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "object",
+ "properties":{
+ "url": {"type": "string"},
+ "public_signing_keys": {
+ "type": "array",
+ "items": {"type": "string"}
+ }
+ } }
},
- "trustedPublicKeys": {
- "type": "array",
- "items": { "type": "string" }
- },
- "command": { "type": "string" },
- "cachix": {
- "type": "object",
- "properties": {
- "push": { "type": "boolean" },
- "target": { "type": "string" },
- "apiKey": { "type": "string" },
- "signingKey": { "type": "string" }
- },
- "required": ["push"],
- "additionalProperties": false
- }
+ "parallelbuilds": {"type": "boolean"},
+ "command": {"type": "string"}
},
- "required": ["command", "cachix"],
+ "required": ["command"],
"additionalProperties": false
}
},
- "required": ["git", "buildOptions"],
- "additionalProperties": true
+ "required": ["git_config", "build_options", "cachix_config"],
+ "additionalProperties": true
}
```
@@ -79,18 +105,27 @@ For example:
This will clone `https://github.com/iglu-sh/builder` and build the derivation `iglu-builder`. This derivation will be pushed to `https://cache.example.com/default`
```json
{
- "git": {
- "noClone": false
- "repository": "https://github.com/iglu-sh/builder"
+ "git_config": {
+ "noclone": false,
+ "repository": "https://github.com/Svenum/holynix.git"
+ },
+ "build_options": {
+ "command": "nix build .#nixosConfigurations.srv-raspi5.config.system.build.toplevel",
+ "substituters": [
+ {
+ "url": "https://nix-community.cachix.org",
+ "public_signing_keys": [
+ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
+ ]
+ }
+ ]
},
- "buildOptions": {
- "command": "nix build .#iglu-builder",
- "cachix": {
- "push": true,
- "target": "http://cache.example.com/default",
- "apiKey": "0197178f-b4f3-7000-acai-fec951e85504",
- "signingKey": "SgykdnDTu9iRkZZQhaif81C22fUERBiagMvD2oeMBUaE/4yAPYL3PJHinFVWkuvwUwp1MhSSKQ7pVlO4FGGCSQ=="
- }
+ "cachix_config":{
+ "push": true,
+ "target": "https://example.com/default",
+ "apikey": "xxxxxxxx-xxxx-xxxx-xxxxxxxx",
+ "signingkey": "xxxx"
+
}
}
```
@@ -112,9 +147,10 @@ Every response has this schema:
"type": "string",
"enum": ["failed", "success", "starting", "running"]
},
- "childExitCode": { "type": "number" }
+ "childExitCode": { "type": "number" },
+ "timestamp": { "type": "number" }
}
- "required": [ "jobStatus" ],
+ "required": [ "jobStatus", "timestamp" ],
"additionalProperties": false
}
```
@@ -125,7 +161,8 @@ Every response has this schema:
```json
{
"error": "A build job is already running.",
- "jobStatus": "running"
+ "jobStatus": "running",
+ "timestamp": TIMESTAMP
}
```
@@ -135,7 +172,8 @@ Every response has this schema:
```json
{
"msg": "Start Building",
- "jobStatus": "starting"
+ "jobStatus": "starting",
+ "timestamp": TIMESTAMP
}
```
@@ -145,7 +183,8 @@ Every response has this schema:
```json
{
"stdout": "SOME_OUTPUT",
- "jobStatus": "running"
+ "jobStatus": "running",
+ "timestamp": TIMESTAMP
}
```
@@ -156,7 +195,8 @@ Every response has this schema:
{
"error": "Invalid command: 'YOUR_COMMAND'",
"buildExitCode": 2,
- "jobStatus": "failed"
+ "jobStatus": "failed",
+ "timestamp": TIMESTAMP
}
```
@@ -167,7 +207,8 @@ Every response has this schema:
{
"error": "Something went wrong while building. Builder exited with error code CHILD_EXIT_CODE",
"buildExitCode": CHILD_EXIT_CODE,
- "jobStatus": "failed"
+ "jobStatus": "failed",
+ "timestamp": TIMESTAMP
}
```
@@ -178,7 +219,8 @@ Every response has this schema:
{
"msg": "Build was successfull",
"buildExitCode": 0,
- "jobStatus": "success"
+ "jobStatus": "success",
+ "timestamp": TIMESTAMP
}
```
@@ -188,7 +230,8 @@ Every response has this schema:
```json
{
"error": "JSON schema is not valid.",
- "jobStatus": "failed"
+ "jobStatus": "failed",
+ "timestamp": TIMESTAMP
}
```
@@ -198,7 +241,8 @@ Every response has this schema:
```json
{
"error": "Not a valid JSON",
- "jobStatus": "failed"
+ "jobStatus": "failed",
+ "timestamp": TIMESTAMP
}
```
diff --git a/docs/Components/Iglu Cache.md b/docs/Components/Iglu Cache.md
index 58f85f85..2e8f615d 100644
--- a/docs/Components/Iglu Cache.md
+++ b/docs/Components/Iglu Cache.md
@@ -7,3 +7,14 @@ sidebar_position: 2
## Introduction
The **Iglu Cache** is the component of the Iglu Project that stores [nix derivations](https://nix.dev/manual/nix/2.25/language/derivations). This Cache is compatible with the [cachix](https://www.cachix.org/) client.
+
+## Metrics
+The **Iglu Cache** has its own [Prometheus](https://prometheus.io/) endpoint (default: `http://localhost:9464/metrics`).
+This endpoint can be disabled by setting the env `PROM_ENABLE` to `false`.
+
+It provides the following metrics **per** cache:
+|name|description|example|
+|-|-|-|
+|`iglu_cache_derivation_count`|Number of derivations in the cache|`iglu_cache_derivation_count{cache="test",uri="http://localhost:3000"} 6`|
+|`iglu_cache_size`|Size of the cache in byte|`iglu_cache_size{cache="default",uri="http://localhost:3000"} 11640438`|
+|`iglu_cache_requests_total`|Request count per cache|`iglu_cache_requests_total{cache="default",uri="http://localhost:3000"} 6`|
diff --git a/docs/Developer/API/Iglu Builder/build.api.mdx b/docs/Developer/API/Iglu Builder/build.api.mdx
new file mode 100644
index 00000000..42a5a32f
--- /dev/null
+++ b/docs/Developer/API/Iglu Builder/build.api.mdx
@@ -0,0 +1,65 @@
+---
+id: build
+title: "/api/v1/build"
+description: "Create a websocket to start a build job."
+sidebar_label: "/api/v1/build"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNWOtu2zYUfhVCw4B2iHzZuqALsB+Oe0vStFnTrFuzIKCkY4mJRKq8JE6CAHuHvcKeob/6L2+yJ9k5lKxYtls7wTYMMRCbIr+P5/A7F/EqSMDEWpRWKBlsBEMN3ALj7Bwio+JTsMwqZizXFgcjJ/KEnaiow36Tu0oDE3KkdMFpNeORcjg9A/auWXyhHIu5ZCMhE3aYgYajB91ExaY7VEWpJEhrultp7r7+trdJ6KC/alY/DNYCVYL28FsJbs9vAEc1GFxswAQbV0G/16d/bUP2z4WNMyFTtqeVVbHKDfvr9z9oa/vV1s6FThh3oxQi7mwHUcdhYzUBFmAMT4G+GpDJPMf2/utX7NIVbJ/8A5KBkGCYtyPcVpEh0FhJfOQBeVnmIvbWdE8MQVwF9qJEhkBFJxBbb9kHJzQg22GQCnuMy0cixQfe9GPluQ3hcjRvPHl+tBaUmnxlReWUqbVLWKSKczyIeQgNpTLCKn0xBWGsRqciRNsVz4Vlb5r57ODNS5wCY16UOa3KrC3NRreLu8pc1IlV0XUGdJcoOjgYXNcGgj4WyRSddEUEeo5u6wnDAfR9CtnNRy1SdH4tHzNN3EfcVfCeojzBWcRhHlozNCjc8f5zlf5mYSPNZZyt5plNP5e94gW03FJwIcl09AC5Q9Lz1QBBOntZrWCjm0+aDRwGnrRiJC4FaOfX3RI16BXZKSw80iqUcaTkxpwrnSzknmMyJs7ym0/GQE74tbYMBtW0eyKlcuByAWSEqUWuMRXNQzPQuCk8D4ybjAljp60a8dwAEk4EvJzrZ9AZnTQms4QbtkPLpFdSo13S/hwHkvAkEYTC872pIPGP1wIrrHczumdYxdytnheFXzvO7ijQWuco1FlJUkqAe8fPkFbPRc9qmiRle8RFQRigxxIX+xpRPyf/tBCWEWzir0yDiEgUnyV6wV1pa79XYXFLTZQgeZRDckdVEtjE6fzUijNBApoRo9WOtIi7T9PWoX/GoLfVxPDtRVntNJmksJkMIR3PaQhPkrJ1M4ClKlPqlCqBRsSj6/rLUuYhzgqfjksMUUNH4tlTKHOOharaQturPdZj39AfuZDrVZLeewF5OMCpwsKpdbqFN368frz+KMyFdGOCrC1xOv9iUnJazPG8q5ZSvanswMSIMtaYLTBWUCvQyttNHapHfCGaOHLlKJ/ScLsI/9ORPvTo7TK0IOz/rcJZOrNKAh80IbGHCxC63vei6OA6rXqrJRL1AFVGCuer5kXoM52XYynuXcxqlsHeFttBDEQzIpW4+t6I+9V6gqvkOJzs058Rtsels4lYIT1gpboEVLEUpha2bypfe4R2eHbPuO7mIupGVeiurOPK/pmC1XSYS7pGjBxMRcl813ifaha+rkj/Q3HH+PZilkMO5CXPcl8CUNhnoM/xTcB/2HDvINzBtorEWQgpCkrQ/SmaR0hT8DG+Lq1AtMvHouA5sJqx5JrnOeRITG8Sn+N4jBynAOVxqkhGy6P1mdLWAPaOkkUg2DPIkKKVJCdtFYyt5hiwZoV078zNn/aSmrTJiQ506grs5dqhG4bowkgZHxPGRQa16Cwdzy0H15pfzFG8xHoL7IxaCCE5vmL40GL70xjY61soFkq3rdH7lBoqMaSuGcb52uJzU0eKsTIdpX1klS5C3xzX6eUY88tdDL75OBqhJ713JZvKMYssboy53djMhsL+xvqr4Yvkyfc//PLou77qpe8uymhXDw7enEbb/fX3e7s/PXtuyvjJfnby64+YT65vc8aU9T7RTGRa5567VItG4Qt6jrpeTJLMUgEOnLl0mCexRZRNuxZuwgjl3fIFeqG6xbhjua8T1BdW0ZZvF3kODNzKexpiEGew4JYCNAZEOJAW6wndIJwLoNsEfB1cYy9Vapgic6oo7RAYwRVgM0XXIVRM6QzoRSvoTi5HjAfFLR3WSl/Y9mDl7J71g2tM4HSJ431cb57uY5qOF8vjfPOaYVnCD931JCr2gV51J2rkB2cROswvmYzg15JulOrZh346OpOC9ejBgssCgRNCkz2kCxWyrdpGr9Pr9H18KWNRKGRD9b4S1OY1Ppl52WguZf5/F1610C2m3y725NUFQZ2wqpM+rK/B8OQyNJwGrq4ibuBA59fXNPzBAV3aHOJXbA4EvfTQr2npPH/6FuX0N3haBL4=
+sidebar_class_name: "get api-method"
+info_path: docs/Developer/API/Iglu Builder/iglu-builder-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+
+
+
+
+
+
+
+
+
+
+Create a websocket to start a build job.
+More information about the Websocket can be found [here](/docs/Components/Iglu%20Builder#Websocket)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/API/Iglu Builder/healthcheck.api.mdx b/docs/Developer/API/Iglu Builder/healthcheck.api.mdx
similarity index 62%
rename from docs/API/Iglu Builder/healthcheck.api.mdx
rename to docs/Developer/API/Iglu Builder/healthcheck.api.mdx
index 9af78ed5..ef44a00f 100644
--- a/docs/API/Iglu Builder/healthcheck.api.mdx
+++ b/docs/Developer/API/Iglu Builder/healthcheck.api.mdx
@@ -1,13 +1,13 @@
---
id: healthcheck
-title: "healthcheck"
+title: "/api/v1/healthcheck"
description: "Endpoint to check the service health of the Builder"
-sidebar_label: "healthcheck"
+sidebar_label: "/api/v1/healthcheck"
hide_title: true
hide_table_of_contents: true
-api: eJylUsFu3CAQ/RU6p1Si603VXrhtpSjaQ6sc0tPKBxZPDA0GCmM3K4t/r8DrNru5tSfEMG/e472ZocOkoglkvAMBd64L3jhi5JnSqJ4ZaWQJ42QUMo3Skmb+qVa/jMZ2GIGDDxhlmbDvQMDSVdHAIWIK3iVMIGb4uN2W44pzwngibVzPTGJxdM64Hjgo7wgdFQDhCzXBSuPKLSmNg6z1U0AQkCguEHyRQ7D4Z2iZmRCHdJZ+egc558zh0/bzWyFfkbTvkDmjNDGMVo5H+l8hy1D2zRPbWet/YVclZA5DfQEBPRaWIEmDgObSvmI9xgTiMMMYbbGXKCTRNGeKjfJDI4NpplvILQfjnnxVZKjy73s7rlGx3cMe+NWvH7VJxfgSaefVOKCjGuaa8/WEDauQtWISCzLS2n2o7Q/R/0BF7c2qtjekx2MVa3o7fkj6/QY4lL8tMrab7eYWMofgEw2y+uvkgG8W6kL9/Decf9zdc3Kvgs18cXo+R3K4ENBy0D5RKc/zUSb8Hm3OpfxzxHgCcWg5TDIaeSz+H9rMC76QlQyf8QQCdkphKKFP0o7X9O2r1bi/e4ScfwOQ1EGl
+api: eJylUsGO0zAQ/RXjE0glCQguvRVphXoA7WE5VT24zmxt1rGNPQ5bRf13ZtwEtuUGUaTYk5k3b96bSfaQdbIRbfByLe98H4P1KDAIbUA/CTQgMqTRahAGlEMjwmONfirW9ZDkSoYISTHCtieMS1atpn8Jcgw+Q5brSb7vOv7c9BwhndBYfxQ2i1S8pyNV6uARPHIBwjO20Snr+ZYJe1A1fopACBnTpQSe1RAd/AZlzAww5Jn66ZU807OSH7qPfxP5AmhCD8JbbVBAcqoc8H+JXEDF14Bi41z4CX2lQByG+odSjsBdokJDl/ZaPpYeEom3m2RJjuVFjHndtnOLRoehVdG24zt53q+k9Y+hMrJY+2+PrixWic39ljCvp34wpDq9bGkfdBlo1Grm4vMtQiNqyRKhY1QJl+xdTb9P4Tto3L9e2B4tmnKoZC0lvM3mTUNUeLYLja7pGpqAdAgZB1X19WrgEebxbpS5mmL6Y9I/7vDs4AuDiUtVfJqt2V1tNkltiCmHp+mgMnxL7nzm8I9Cq0dxOo4qWXVgH3Z7gqN6bsZePgGlyI3WENn8Ubly237/YkU+3z3Q2vwCVuNEEw==
sidebar_class_name: "get api-method"
-info_path: docs/API/Iglu Builder/iglu-builder-api
+info_path: docs/Developer/API/Iglu Builder/iglu-builder-api
custom_edit_url: null
hide_send_button: true
---
@@ -23,7 +23,7 @@ import Heading from "@theme/Heading";
diff --git a/docs/API/Iglu Builder/iglu-builder-api.info.mdx b/docs/Developer/API/Iglu Builder/iglu-builder-api.info.mdx
similarity index 100%
rename from docs/API/Iglu Builder/iglu-builder-api.info.mdx
rename to docs/Developer/API/Iglu Builder/iglu-builder-api.info.mdx
diff --git a/docs/API/Iglu Builder/sidebar.ts b/docs/Developer/API/Iglu Builder/sidebar.ts
similarity index 65%
rename from docs/API/Iglu Builder/sidebar.ts
rename to docs/Developer/API/Iglu Builder/sidebar.ts
index 5b57c787..b3147266 100644
--- a/docs/API/Iglu Builder/sidebar.ts
+++ b/docs/Developer/API/Iglu Builder/sidebar.ts
@@ -4,7 +4,7 @@ const sidebar: SidebarsConfig = {
apisidebar: [
{
type: "doc",
- id: "API/Iglu Builder/iglu-builder-api",
+ id: "Developer/API/Iglu Builder/iglu-builder-api",
},
{
type: "category",
@@ -12,14 +12,14 @@ const sidebar: SidebarsConfig = {
items: [
{
type: "doc",
- id: "API/Iglu Builder/build",
- label: "Start build websocket",
+ id: "Developer/API/Iglu Builder/build",
+ label: "/api/v1/build",
className: "api-method get",
},
{
type: "doc",
- id: "API/Iglu Builder/healthcheck",
- label: "healthcheck",
+ id: "Developer/API/Iglu Builder/healthcheck",
+ label: "/api/v1/healthcheck",
className: "api-method get",
},
],
diff --git a/docs/API/Iglu Builder/build.api.mdx b/docs/Development/API/Iglu Builder/build.api.mdx
similarity index 64%
rename from docs/API/Iglu Builder/build.api.mdx
rename to docs/Development/API/Iglu Builder/build.api.mdx
index 6d47b3b9..04940593 100644
--- a/docs/API/Iglu Builder/build.api.mdx
+++ b/docs/Development/API/Iglu Builder/build.api.mdx
@@ -1,13 +1,13 @@
---
id: build
-title: "Start build websocket"
+title: "/api/v1/build"
description: "Create a websocket to start a build job."
-sidebar_label: "Start build websocket"
+sidebar_label: "/api/v1/build"
hide_title: true
hide_table_of_contents: true
-api: eJzNVdtu4zYQ/RViigK7gGIlffRbGrRFsm03QHbRB69RUNJEYlbicGeGsV3DwP5D/7BfsiB9iesoCPrWJwnkzOE5M8PDNTQoNbugjjxM4YrRKhprFlgJ1Z9RjZIRtazGmiq6vjEPVE3MJ/8bMRrn74kHm7KNrSiq0Q7NH4fkFUVTW2/unW/MrEPG+ZuyoVrKKxoCefQq5XXbx+9/OP8xoSN/d8h+CwVQQM7w1w1MIROAAhglkBcUmK7h4vwiff4t5G7htO6cb80tk1JNvZh/vv6dqN1tqS0cN8bG+xYrG3UCBSzPDqoT4IAitsX0K+ib52fc3L3/3fwVB3OX6oPeoPMoJus4u6FKEmhNXtFnQBtC7+qspnyQBLEGXQWEKVD1gLVCAYGTYnVbaa3T14MYA4lT4tVRrCg738KmgIqtr7vRrdbpR0H2dsCX9t/hOCrjl+gY5TLqMXZF1KP1KcLTVU8exzaf8huYzg6R88Q2Fe99rrC8Lr0mxuMwH4cKOZ0+2GXqwOjeZ8TwZ0tJyShzXCrbS25lVLnEStRpVOTjAMtsV1CAUxzGEjcFKEdRbG5j1bv6Ha7+Y3pNw2C3c/iMVG3rzi1fL1iI8kK71HKLOgpug3tpDMS13vl2fPukzfns+enqXtVBw7OIdAlOBmNegDrtcW8JN1TBZptXo3vEET9AfkQ+u/S6oHxXFw7TvdUohfmVWjHUIJufseuRJwkswQ2oHSXjSaUpINg07FDubUgyqMB0tobIPUyhUw0yLUtc2iH0OKlpKG1w5eMFbOYFJLvMhdqRT85ndr5nLm+voTih/aFzYpxkV22ojgN63bot3efFU4SJySn7FScmJO/eRc9y+C1TGo75mz3b1mkXq0zWtX08k+5tsq6kbUvjfHI+uUj9DiQ62OxcW9eA7H27l+HJPk90rJ9s8P/3xOymVnGpZeity9cht3O96/hs9/DMC+hINC2s15UV/Mj9ZpOWv0RM9jubF/Bo2dkqtXc2Px6hX376AJvNN+8Gl2I=
+api: eJzNVdtuG0cM/ZUBiwAJsNbafdSba7SFnbYx4AR9UIVidpbeHWd3OCE5llRBQP8hf5gvKWZ1iSKvYeStTxKG5JlzSM7ZNdQojn1UTwGmcMVoFY01C6yE3EdUo2RELauxpkq+q80DVRPzV/idGI0P98S9zdXGVpTUaIvmz0PxipJxNph7H2oza5Fx/rqsyUl5RX2kgEGlvG669OrH858yOvIPh+o3UABF5AH+uoYpDASgAEaJFAQFpmu4OL/IP98KuVt4da0PjbllUnLUifny7+dM7W5LbeG5NjbdN1jZpBMoYHl2UJ0BexSxDea/gqF+esfN3bs/zD+pN3e5PxgM+oBiBh1nN1RJBnUUFMMAaGPsvBvUlA+SIdagq4gwBaoe0CkUEDkrVr+V1nh9OYkxknglXh3lirIPDWwKqNgG146GGq8fBDnYHp+Lv8VxVMZPyTPKZdJj7IqoQxtyRqCrjgKOBb/W1zCdHTLnmW1u3ruhw/KydEeMx2kh9RVyvr23yzyB0dhHxPh3Q1nJKHNcKttLbmRUuaRK1GtS5OMEy2xXUIBX7McKNwUoJ1Gsb1PVefcWV99Z7qjv7XYPn5By1rV++XLDYpJnxqWWG9RRcBv9c2sgvgk+NOPhkzEPd89PT/eqDhqeZORHcLIY8wLUa4d7S7ihCjbbOof+EUf8APkR+ewy6IKGt7rwmN+tJinMb9SIoRrZ/IJthzzJYBmuR20pG09uTQHR5mWHcm9DMoAKTGdrSNzBFFrVKNOyxKXtY4cTR31poy8fL2AzLyDb5dCoHfnsfGbne+by9hqKE9rvWy/Gy+CqNbnUY9Ct29L9cHiKMDFDyf7Ei4nZu3fZsyH9likvx/z1nm3jtU3VQNY3XTqT9k22rqxtS+N8cj65yPOOJNrbwbm2rgE7eYeefMN//dX+/n+flt22Ki61jJ31wzMYxrjeTXq2++DMC2hJNB+s15UV/MDdZpOPPyXMtjubF/Bo2dsqj3U2P16dX39+D5vNf0T/k7s=
sidebar_class_name: "get api-method"
-info_path: docs/API/Iglu Builder/iglu-builder-api
+info_path: docs/Developer/API/Iglu Builder/iglu-builder-api
custom_edit_url: null
hide_send_button: true
---
@@ -23,7 +23,7 @@ import Heading from "@theme/Heading";
diff --git a/docs/Development/API/Iglu Builder/healthcheck.api.mdx b/docs/Development/API/Iglu Builder/healthcheck.api.mdx
new file mode 100644
index 00000000..ccc5725b
--- /dev/null
+++ b/docs/Development/API/Iglu Builder/healthcheck.api.mdx
@@ -0,0 +1,64 @@
+---
+id: healthcheck
+title: "/api/v1/healthcheck"
+description: "Endpoint to check the service health of the Builder"
+sidebar_label: "/api/v1/healthcheck"
+hide_title: true
+hide_table_of_contents: true
+api: eJylUsFu1DAQ/RUzpyKZZIvgktsiVdUeQD2UU5SD15nGpo5t7MnSVeR/R/Ym0E1vcIoynjfvzXszQ49RBu1JOwsN3NneO22JkWNSoXxmpJBFDCctkSkUhhRzT6X6ZdKmxwAcnMcg8oRDDw1cugoaOASM3tmIEZoZPu52+bPhPGE4k9J2YDqyMFmr7QAcpLOEljKA8IVqb4S2+S9KhaMo9bNHaCBSuEDwRYze4J+heWZEHOMi/fwOUkqJw6fd57dCviIp1yOzWipiGIyYjvS/Qi5D2TdHbG+M+4V9kZA4jOUFGhgws3hBChqor+3L1mOI0LQzTMFke4l8bOp6oaikG2vhdX26hdRx0PbJFUWaCv9hMNMaFds/HIBvtn5UOmbjc6S9k9OIlkqYa87bCRUrkLWiI/Mi0NrdlvaH4H6gpO5mVTtoUtOxiNWDmT5E9b4CDnm3i4xdtatuIXHwLtIoir9WjHmFZb2NM1dbzH9D+scbXhJ8FXDiF8fnJZr26rI7DspFyuV5PoqI34NJKZd/ThjO0LQdh5MIWhxzDm2XeMZnspzlM56hgb2U6HP4J2GmLX336kTu7x4hpd9W40QT
+sidebar_class_name: "get api-method"
+info_path: docs/Developer/API/Iglu Builder/iglu-builder-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+
+
+
+
+
+
+
+
+
+
+Endpoint to check the service health of the Builder
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Development/API/Iglu Builder/iglu-builder-api.info.mdx b/docs/Development/API/Iglu Builder/iglu-builder-api.info.mdx
new file mode 100644
index 00000000..f6577943
--- /dev/null
+++ b/docs/Development/API/Iglu Builder/iglu-builder-api.info.mdx
@@ -0,0 +1,35 @@
+---
+id: iglu-builder-api
+title: "Iglu Builder API"
+description: "This is the documentation of the Iglu Builder API. This Builder is part of the [Iglu Project](https://github.com/iglu-sh)."
+sidebar_label: Introduction
+sidebar_position: 0
+hide_title: true
+custom_edit_url: null
+---
+
+import ApiLogo from "@theme/ApiLogo";
+import Heading from "@theme/Heading";
+import SchemaTabs from "@theme/SchemaTabs";
+import TabItem from "@theme/TabItem";
+import Export from "@theme/ApiExplorer/Export";
+
+
+
+
+
+
+
+
+
+This is the documentation of the Iglu Builder API. This Builder is part of the [Iglu Project](https://github.com/iglu-sh).
+
+
+
\ No newline at end of file
diff --git a/docs/Development/API/Iglu Builder/sidebar.ts b/docs/Development/API/Iglu Builder/sidebar.ts
new file mode 100644
index 00000000..b3147266
--- /dev/null
+++ b/docs/Development/API/Iglu Builder/sidebar.ts
@@ -0,0 +1,30 @@
+import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
+
+const sidebar: SidebarsConfig = {
+ apisidebar: [
+ {
+ type: "doc",
+ id: "Developer/API/Iglu Builder/iglu-builder-api",
+ },
+ {
+ type: "category",
+ label: "UNTAGGED",
+ items: [
+ {
+ type: "doc",
+ id: "Developer/API/Iglu Builder/build",
+ label: "/api/v1/build",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "Developer/API/Iglu Builder/healthcheck",
+ label: "/api/v1/healthcheck",
+ className: "api-method get",
+ },
+ ],
+ },
+ ],
+};
+
+export default sidebar.apisidebar;
diff --git a/docs/Development/API/Iglu Cache/api-v-1-cache-cache.api.mdx b/docs/Development/API/Iglu Cache/api-v-1-cache-cache.api.mdx
new file mode 100644
index 00000000..d8b42569
--- /dev/null
+++ b/docs/Development/API/Iglu Cache/api-v-1-cache-cache.api.mdx
@@ -0,0 +1,72 @@
+---
+id: api-v-1-cache-cache
+title: "/api/v1/cache/{cache}"
+description: "Get settings of a {cache}"
+sidebar_label: "/api/v1/cache/{cache}"
+hide_title: true
+hide_table_of_contents: true
+api: eJylVcFu2zgQ/RViTi3AWk7XQbEC9hAEbjfobhDE6aWGD7Q0lphKJDOkXKuC/n1BUtrKiZMWiC+S6Hkzb8g3jx3kaDOSxkmtIIVP6JhF56QqLNM7JliXiazEHjgQWqOVRQtpB+/nc/84Rq8mSFciC1DgkGnlUDkPEMZUMhMekNxbj+rAZiXWwr+51iCkoLf3mDngYEgbJCdjzUK6stl+sUhK1DiJt46kKoADHkRtKr/UWCToOUh702wrmU2it1pXKNQ0fCcqiz2HX+fNcSeayvnUBqmW1srYxPOQWxR5iCfcIRHml7o2hAH5L7pS5y/jf1gX8aGRlSyUVMVnbO0EJohECxykw9r+Vgfp9Ye5/nvZtGf3qx9XX88Py6/5w+V+kSz+/Ly8xewhufnDVrj653B/9Rf0PYeG5MuZS+dMmiTDwizTdWxbapKunWBVU2+RptjFvA8/DotTwrrWLHbPbGyffcP2WFgODy4xlZCnJXWC7l2JhExapk5lZztNzJXSRhVzJvKcaYVs27LG+iC/Lg+sQIUkHL77hq0Rkv6fmLGfxdN+Ln0Eu9aOfdSNyl/byeN0Y+Xzp5Wj4ELsRVXp7/jq4icyxvrnp07ySjk/vhVbIe2R2JJI02spnE46CMoIEjU6JAvpugOfFYxwJYzjDqNNPVeq99730EjCHFJHDfLH8hQ1jp4XzgL6DYd6mG0oMHiZr5lCIoxM9mdJKJr8dFcbqEeODVXDONlxnvQwTxsOUu10ICld7L6omliWXdxcwWNyd17D0gZyuc6aGpUL/jsyPsbPWADEb2mZEeTGyHUIvSHt7XnzZiQYfdnzS2RRNe9s+XYGHHw7kcJ8Np+dBS/Q1tUinOuw989tx1EP3U95vHhDDcc2EVCwrcpniNu/BmGk53bmNTecexpfNhxKbZ0P6rqtsPiFqr73yw8NUgvpesNhL0iKrd/3dQe5tP49Hy6QF1i/uR0E9JY9FcszxEdrV97p9qJq/Bdw8NY3irbf9BxKFDlSYBT/u8gyNG6CenLrHunz0/IO+v4/RYm+Wg==
+sidebar_class_name: "get api-method"
+info_path: docs/Developer/API/Iglu Cache/iglu-cache-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+
+
+
+
+
+
+
+
+
+
+Get settings of a \{cache\}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Development/API/Iglu Cache/cache-nix-cache-info.api.mdx b/docs/Development/API/Iglu Cache/cache-nix-cache-info.api.mdx
new file mode 100644
index 00000000..e6e0f599
--- /dev/null
+++ b/docs/Development/API/Iglu Cache/cache-nix-cache-info.api.mdx
@@ -0,0 +1,72 @@
+---
+id: cache-nix-cache-info
+title: "/{cache}/nix-cache-info"
+description: "Get cache information"
+sidebar_label: "/{cache}/nix-cache-info"
+hide_title: true
+hide_table_of_contents: true
+api: eJytVE1T2zAQ/SuaPcGMEocWLrox/RoO0LTQ4RByUOxNrNaWzGpNyXj03zuS45IP0gs9WVpr9719+6QOCvQ5mYaNs6DgC7LIdV6iMHbpqNYpLoHQN8569KA6eDeZxM9u5tXLeeGWgkvsC4GE3FlGyzGH8ZmzptLGxp3PS6x1iq8bBAWeydgVSMBnXTdVDN2yI/xoSInMmufMx+2DvdeWr7X331qktRJnD3ZKxpHhtRLnkwcLIYQg4Xzy/pDph9TfjWMxbReVyd/K8KDegH3+L+zPrrXF/4Puyw3IF4fI18ilK9LZy6pyv/HN4K9U7PEvXvcHI1ldiVukJyTxicjRWym8XjT0NBpNukZG8qBmHcSq0GguQYLVdUwfDHoMKkTjP7aGsADF1KLca+pG1zi4Pc0CwlxCnYSJaM4zyB5UQdYlvBB9PErLUbxkET+x72m2VIGCkrnxKstSqw7HuatT6ZQQeRruBVhVbY8sLqdXsM/vrjReGJ/4FS5va7S8c0V388ciJfR740WjiYeTs3R0Su4n5jw/GQiuDJftIvLLzKpqR748HYOE2E5PYTKejM+iklGMWqfRbuQ/LshOF92LR46+T5u5bTkoyF7KbiP/DNQw7j24uYQyDkrNoOsW2uMPqkKI4cf4uoCazSU8aTJ6ETWfdVAYH9cFqKWu/L4rtvmefN/451QceuUI7U1Q23UUUldt3IGEX7j+69kwDxJK1AVSYtT/u8xzbHgra7vwtjGnX2/vIIQ/GioJ5g==
+sidebar_class_name: "post api-method"
+info_path: docs/Developer/API/Iglu Cache/iglu-cache-api
+custom_edit_url: null
+hide_send_button: true
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+
+
+
+
+
+
+
+
+
+
+Get cache information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Development/API/Iglu Cache/iglu-cache-api.info.mdx b/docs/Development/API/Iglu Cache/iglu-cache-api.info.mdx
new file mode 100644
index 00000000..a8f08a88
--- /dev/null
+++ b/docs/Development/API/Iglu Cache/iglu-cache-api.info.mdx
@@ -0,0 +1,35 @@
+---
+id: iglu-cache-api
+title: "Iglu Cache API"
+description: "This is the documentation of the Iglu Cache API. This Cache is part of the [Iglu Project](https://github.com/iglu-sh)."
+sidebar_label: Introduction
+sidebar_position: 0
+hide_title: true
+custom_edit_url: null
+---
+
+import ApiLogo from "@theme/ApiLogo";
+import Heading from "@theme/Heading";
+import SchemaTabs from "@theme/SchemaTabs";
+import TabItem from "@theme/TabItem";
+import Export from "@theme/ApiExplorer/Export";
+
+
+
+
+
+
+
+
+
+This is the documentation of the Iglu Cache API. This Cache is part of the [Iglu Project](https://github.com/iglu-sh).
+
+
+
\ No newline at end of file
diff --git a/docs/Development/API/Iglu Cache/sidebar.ts b/docs/Development/API/Iglu Cache/sidebar.ts
new file mode 100644
index 00000000..7167856d
--- /dev/null
+++ b/docs/Development/API/Iglu Cache/sidebar.ts
@@ -0,0 +1,30 @@
+import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
+
+const sidebar: SidebarsConfig = {
+ apisidebar: [
+ {
+ type: "doc",
+ id: "Developer/API/Iglu Cache/iglu-cache-api",
+ },
+ {
+ type: "category",
+ label: "UNTAGGED",
+ items: [
+ {
+ type: "doc",
+ id: "Developer/API/Iglu Cache/api-v-1-cache-cache",
+ label: "/api/v1/cache/{cache}",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "Developer/API/Iglu Cache/cache-nix-cache-info",
+ label: "/{cache}/nix-cache-info",
+ className: "api-method post",
+ },
+ ],
+ },
+ ],
+};
+
+export default sidebar.apisidebar;
diff --git a/docs/Getting started/Install with Docker compose.md b/docs/Getting started/Install with Docker compose.md
index e9540720..b46e9cc5 100644
--- a/docs/Getting started/Install with Docker compose.md
+++ b/docs/Getting started/Install with Docker compose.md
@@ -31,6 +31,8 @@ services:
POSTGRES_DB: cache
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
+ PROM_ENABLE: true
+ PROM_PORT: 9464
CACHE_FILESYSTEM_DIR: /tmp/cache #Should be mounted to an outside container if you want to persist files, else set to something in the container
volumes:
- ./cache/nar_files:/tmp/cache
diff --git a/docs/intro.md b/docs/intro.md
index a92bb09b..a93cbed8 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -38,6 +38,7 @@ Here are some comparison to other caches:
|cachix compatible |✅|✅|❌|✅|
|UI for configuration |✅|✅|❌|❌|
|free of charge |✅|❌|✅|✅|
+|Prometheus metrics |✅|❌|❌|❌|
|flexible storage backend|📅|❌|✅|✅|
|kubernetes support |📅|❌|❌|❌|
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 4928264f..35e413b7 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -49,21 +49,6 @@ const config: Config = {
'https://github.com/iglu-sh/docs/tree/main/',
docItemComponent: "@theme/ApiItem",
},
- blog: {
- showReadingTime: true,
- feedOptions: {
- type: ['rss', 'atom'],
- xslt: true,
- },
- // Please change this to your repo.
- // Remove this to remove the "edit this page" links.
- editUrl:
- 'https://github.com/iglu-sh/docs/tree/main/',
- // Useful options to enforce blogging best practices
- onInlineTags: 'warn',
- onInlineAuthors: 'warn',
- onUntruncatedBlogPosts: 'warn',
- },
theme: {
customCss: './src/css/custom.css',
},
@@ -79,7 +64,16 @@ const config: Config = {
config: {
builder: {
specPath: "static/api/builder.yml",
- outputDir: "docs/API/Iglu Builder",
+ outputDir: "docs/Developer/API/Iglu Builder",
+ sidebarOptions: {
+ groupPathsBy: "tag",
+ categoryLinkSource: "tag",
+ },
+ hideSendButton: true,
+ } satisfies OpenApiPlugin.Options,
+ cache: {
+ specPath: "static/api/cache.yml",
+ outputDir: "docs/Developer/API/Iglu Cache",
sidebarOptions: {
groupPathsBy: "tag",
categoryLinkSource: "tag",
@@ -90,7 +84,16 @@ const config: Config = {
},
]
],
- themes: ["docusaurus-theme-openapi-docs"],
+ themes: [
+ "docusaurus-theme-openapi-docs",
+ [
+ require.resolve("@easyops-cn/docusaurus-search-local"),
+ /** @type {import("@easyops-cn/docusaurus-search-local").PluginOptions} */
+ ({
+ hashed: true,
+ }),
+ ],
+ ],
themeConfig: {
// Replace with your project's social card
image: 'img/logo.jpeg',
diff --git a/package.json b/package.json
index cb94378c..2dbb1b8c 100644
--- a/package.json
+++ b/package.json
@@ -17,14 +17,14 @@
"dependencies": {
"@docusaurus/core": "3.8.0",
"@docusaurus/preset-classic": "3.8.0",
- "@mdx-js/react": "^3.1.1",
- "caniuse-lite": "^1.0.30001756",
- "clsx": "^2.1.1",
- "docusaurus-plugin-openapi-docs": "^4.5.1",
- "docusaurus-theme-openapi-docs": "^4.5.1",
- "prism-react-renderer": "^2.4.1",
- "react": "^19.2.0",
- "react-dom": "^19.2.0"
+ "@easyops-cn/docusaurus-search-local": "^0.50.0",
+ "@mdx-js/react": "^3.0.0",
+ "clsx": "^2.0.0",
+ "docusaurus-plugin-openapi-docs": "^4.4.0",
+ "docusaurus-theme-openapi-docs": "^4.4.0",
+ "prism-react-renderer": "^2.3.0",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.0",
diff --git a/static/api/builder.yml b/static/api/builder.yml
index 4f6cfc9e..aff70380 100644
--- a/static/api/builder.yml
+++ b/static/api/builder.yml
@@ -12,10 +12,10 @@ servers:
paths:
/build:
get:
- summary: Start build websocket
+ summary: /api/v1/build
description: |-
Create a websocket to start a build job.
- More information about the Websocket you can find [here](/docs/Components/Iglu%20Builder#Websocket)
+ More information about the Websocket can be found [here](/docs/Components/Iglu%20Builder#Websocket)
operationId: build
responses:
'101':
@@ -31,7 +31,7 @@ paths:
description: Server-Antworten wie Status, Logs oder Fehler.
/healthcheck:
get:
- summary: healthcheck
+ summary: /api/v1/healthcheck
description: Endpoint to check the service health of the Builder
operationId: healthcheck
responses:
@@ -55,62 +55,193 @@ components:
schemas:
buildJob:
type: object
+ required:
+ - git_config
+ - build_options
+ - cachix_config
properties:
- git:
- type: object
- properties:
- repository:
- type: string
- branch:
- type: string
- gitUsername:
- type: string
- gitKey:
- type: string
- requiresAuth:
- type: boolean
- noClone:
- type: boolean
- required:
- - noClone
- buildOptions:
- type: object
- properties:
- cores:
- type: number
- maxJobs:
- type: number
- keep_going:
- type: boolean
- extraArgs:
- type: string
- substituters:
- type: array
- items:
- type: string
- trustedPublicKeys:
- type: array
- items:
- type: string
- command:
- type: string
- cachix:
- type: object
- properties:
- push:
- type: boolean
- target:
- type: string
- apiKey:
- type: string
- signingKey:
- type: string
- required:
- - push
- required:
- - command
- - cachix
+ git_config:
+ $ref: '#/components/schemas/GitConfig'
+ builder:
+ $ref: '#/components/schemas/Builder'
+ cachix_config:
+ $ref: '#/components/schemas/CachixConfig'
+ build_options:
+ $ref: '#/components/schemas/BuildOptions'
+ additionalProperties: true
+
+ GitConfig:
+ type: object
+ required:
+ - noclone
+ properties:
+ repository:
+ type: string
+ description: Git repository URL
+ example: "https://github.com/user/repo.git"
+ builder_id:
+ type: number
+ description: ID of the associated builder
+ example: 1
+ id:
+ type: number
+ description: Unique ID of the Git configuration
+ example: 1
+ branch:
+ type: string
+ description: Git branch name
+ example: "main"
+ gitusername:
+ type: string
+ description: Git username for authentication
+ example: "username"
+ gitkey:
+ type: string
+ format: password
+ description: Git authentication key
+ requiresauth:
+ type: boolean
+ description: Indicates whether authentication is required
+ example: false
+ noclone:
+ type: boolean
+ description: Prevents cloning of the repository
+ example: false
+ additionalProperties: false
+
+ Builder:
+ type: object
+ properties:
+ id:
+ type: number
+ description: Unique builder ID
+ example: 1
+ cache_id:
+ type: number
+ description: ID of the associated cache
+ example: 1
+ name:
+ type: string
+ description: Name of the builder
+ example: "Production Builder"
+ description:
+ type: string
+ description: Description of the builder
+ example: "Main builder for production"
+ enabled:
+ type: boolean
+ description: Indicates whether the builder is enabled
+ example: true
+ trigger:
+ type: string
+ description: Trigger type for the build
+ example: "manual"
+ enum: ["manual", "webhook", "cron"]
+ cron:
+ type: string
+ description: Cron expression for scheduled builds
+ example: "0 0 * * *"
+ arch:
+ type: string
+ description: Target architecture
+ example: "x86_64-linux"
+ webhookurl:
+ type: string
+ format: uri
+ description: Webhook URL for notifications
+ example: "https://example.com/webhook"
+ additionalProperties: false
+
+ CachixConfig:
+ type: object
+ properties:
+ id:
+ type: number
+ description: Unique Cachix configuration ID
+ example: 1
+ builder_id:
+ type: number
+ description: ID of the associated builder
+ example: 1
+ push:
+ type: boolean
+ description: Enables push to Cachix
+ example: true
+ target:
+ type: string
+ description: Cachix cache name
+ example: "my-cache"
+ apikey:
+ type: string
+ format: password
+ description: Cachix API key
+ signingkey:
+ type: string
+ format: password
+ description: Signing key for cache
+ buildoutputdir:
+ type: string
+ description: Directory for build outputs
+ example: "/var/lib/builds"
+ additionalProperties: false
+
+ BuildOptions:
+ type: object
required:
- - git
- - buildOptions
+ - command
+ properties:
+ id:
+ type: number
+ description: Unique build options ID
+ example: 1
+ builder_id:
+ type: number
+ description: ID of the associated builder
+ example: 1
+ cores:
+ type: number
+ description: Number of CPU cores to use
+ minimum: 1
+ example: 4
+ maxjobs:
+ type: number
+ description: Maximum number of parallel jobs
+ minimum: 1
+ example: 8
+ keep_going:
+ type: boolean
+ description: Continue on errors
+ example: false
+ extraargs:
+ type: string
+ description: Additional build arguments
+ example: "--verbose"
+ substituters:
+ type: array
+ description: List of binary cache substituters
+ items:
+ $ref: '#/components/schemas/Substituter'
+ parallelbuilds:
+ type: boolean
+ description: Enables parallel builds
+ example: true
+ command:
+ type: string
+ description: Build command to execute
+ example: "nix build"
+ additionalProperties: false
+ Substituter:
+ type: object
+ properties:
+ url:
+ type: string
+ format: uri
+ description: URL of the substituter
+ example: "https://cache.nixos.org"
+ public_signing_keys:
+ type: array
+ description: List of public signing keys
+ items:
+ type: string
+ example: "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
diff --git a/static/api/cache.yml b/static/api/cache.yml
new file mode 100644
index 00000000..1791a9de
--- /dev/null
+++ b/static/api/cache.yml
@@ -0,0 +1,128 @@
+openapi: 3.0.4
+info:
+ title: Iglu Cache API
+ description: |-
+ This is the documentation of the Iglu Cache API. This Cache is part of the [Iglu Project](https://github.com/iglu-sh).
+ version: 0.0.1
+
+servers:
+ - url: https://example.com
+paths:
+ /api/v1/cache/{cache}:
+ parameters:
+ - $ref: "#/components/parameters/cache"
+ get:
+ summary: /api/v1/cache/{cache}
+ description: |-
+ Get settings of a {cache}
+ responses:
+ "404":
+ $ref: "#/components/responses/cacheNotFound"
+ "400":
+ description: No public signing key
+ content:
+ text/plain:
+ schema:
+ type: string
+ example: There is no public signing key for this cache, add one by using cachix generate-keypair {cache}
+ "200":
+ description: Settings of the cache
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ githubUsername:
+ type: string
+ example: user
+ isPublic:
+ type: boolean
+ example: false
+ name:
+ type: string
+ example: default
+ permission:
+ type: string
+ example: Read
+ preferredCompressionMethod:
+ type: string
+ example: zstd
+ publicSigningKeys:
+ type: array
+ items:
+ type: string
+ example: default:N70oHEuy1jSzIZ5xEZdqCv4/49KERecq/P3sleSLxjI=
+ uri:
+ type: string
+ example: http://example.com
+ priority:
+ type: number
+ example: 40
+ "405":
+ $ref: "#/components/responses/methodNotFound"
+ "500":
+ $ref: "#/components/responses/internalServerError"
+ /{cache}/nix-cache-info:
+ parameters:
+ - $ref: "#/components/parameters/cache"
+ post:
+ summary: /{cache}/nix-cache-info
+ description: |-
+ Get cache information
+ responses:
+ "200":
+ description: Information of the cache
+ content:
+ text/plain:
+ schema:
+ type: string
+ example: |
+ StoreDir: /nix/store
+ WantMassQuery: 1
+ Priority: 40
+ "404":
+ $ref: "#/components/responses/cacheNotFound"
+ "403":
+ description: Cache Not Public
+ content:
+ text/plain:
+ schema:
+ type: string
+ example: Cache Not Public
+ "405":
+ $ref: "#/components/responses/methodNotFound"
+ "500":
+ $ref: "#/components/responses/internalServerError"
+
+
+components:
+ responses:
+ "methodNotFound":
+ description: Method Not Allowed
+ content:
+ text/plain:
+ schema:
+ type: string
+ example: Method Not Allowed
+ "internalServerError":
+ description: Internal Server Error
+ content:
+ text/plain:
+ schema:
+ type: string
+ example: Internal Server Error
+ "cacheNotFound":
+ description: Cache Not Found
+ content:
+ text/plain:
+ schema:
+ type: string
+ example: Cache Not Found
+ parameters:
+ "cache":
+ in: path
+ name: cache
+ schema:
+ type: string
+ required: true
+ description: Name of the Cache