diff --git a/package-lock.json b/package-lock.json index e6eb3ea..5496573 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@astrojs/react": "^4.2.7", "@types/react": "^19.1.4", "@types/react-dom": "^19.1.5", - "astro": "^5.15.9", + "astro": "^5.16.9", "bootstrap": "5.3", "react": "^19.1.0", "react-bootstrap-icons": "^1.11.6", @@ -116,9 +116,9 @@ } }, "node_modules/@astrojs/markdown-remark": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.9.tgz", - "integrity": "sha512-hX2cLC/KW74Io1zIbn92kI482j9J7LleBLGCVU9EP3BeH5MVrnFawOnqD0t/q6D1Z+ZNeQG2gNKMslCcO36wng==", + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.7.5", @@ -127,7 +127,7 @@ "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", @@ -135,8 +135,8 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", - "shiki": "^3.13.0", - "smol-toml": "^1.4.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", @@ -495,12 +495,12 @@ } }, "node_modules/@capsizecss/unpack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-3.0.1.tgz", - "integrity": "sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", "license": "MIT", "dependencies": { - "fontkit": "^2.0.2" + "fontkitten": "^1.0.0" }, "engines": { "node": ">=18" @@ -2083,60 +2083,60 @@ ] }, "node_modules/@shikijs/core": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.19.0.tgz", - "integrity": "sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz", + "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0", + "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.19.0.tgz", - "integrity": "sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz", + "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0", + "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.19.0.tgz", - "integrity": "sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", + "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0", + "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.19.0.tgz", - "integrity": "sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", + "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0" + "@shikijs/types": "3.21.0" } }, "node_modules/@shikijs/themes": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.19.0.tgz", - "integrity": "sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", + "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0" + "@shikijs/types": "3.21.0" } }, "node_modules/@shikijs/types": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.19.0.tgz", - "integrity": "sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", + "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -2149,15 +2149,6 @@ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "license": "MIT" }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2214,15 +2205,6 @@ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "license": "MIT" }, - "node_modules/@types/fontkit": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", - "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -2263,14 +2245,11 @@ "@types/unist": "*" } }, - "node_modules/@types/node": { - "version": "22.15.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", - "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "license": "MIT" }, "node_modules/@types/prismjs": { "version": "1.26.5", @@ -2711,16 +2690,16 @@ } }, "node_modules/astro": { - "version": "5.15.9", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.15.9.tgz", - "integrity": "sha512-XLDXxu0282cC/oYHswWZm3johGlRvk9rLRS7pWVWSne+HsZe9JgrpHI+vewAJSSNHBGd1aCyaQOElT5RNGe7IQ==", + "version": "5.16.9", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.9.tgz", + "integrity": "sha512-gJvoZv0v8xCcKBcsxz1ZfXqoJ7sJJcyoKP8bUTjkuD4vDShLe0N26em4LQxitVv/2HLOpldQg67bEHB/qGoxJA==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", - "@astrojs/markdown-remark": "6.3.9", + "@astrojs/markdown-remark": "6.3.10", "@astrojs/telemetry": "3.3.0", - "@capsizecss/unpack": "^3.0.1", + "@capsizecss/unpack": "^4.0.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "acorn": "^8.15.0", @@ -2730,11 +2709,11 @@ "ci-info": "^4.3.1", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", - "cookie": "^1.0.2", + "cookie": "^1.1.1", "cssesc": "^3.0.0", "debug": "^4.4.3", "deterministic-object-hash": "^2.0.2", - "devalue": "^5.5.0", + "devalue": "^5.6.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", @@ -2742,7 +2721,7 @@ "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", - "fontace": "~0.3.1", + "fontace": "~0.4.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", @@ -2754,21 +2733,22 @@ "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.1", - "package-manager-detector": "^1.5.0", - "picocolors": "^1.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.3", - "shiki": "^3.15.0", - "smol-toml": "^1.5.0", + "shiki": "^3.20.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", - "unifont": "~0.6.0", + "unifont": "~0.7.1", "unist-util-visit": "^5.0.0", - "unstorage": "^1.17.2", + "unstorage": "^1.17.3", "vfile": "^6.0.3", "vite": "^6.4.1", "vitefu": "^1.1.1", @@ -2776,7 +2756,7 @@ "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", - "zod-to-json-schema": "^3.24.6", + "zod-to-json-schema": "^3.25.1", "zod-to-ts": "^1.2.0" }, "bin": { @@ -2873,25 +2853,11 @@ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" }, "node_modules/bootstrap": { "version": "5.3.6", @@ -2957,15 +2923,6 @@ "node": ">=8" } }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } - }, "node_modules/browserslist": { "version": "4.24.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", @@ -3232,15 +3189,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -3278,6 +3226,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -3298,12 +3255,16 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cookie-es": { @@ -3336,6 +3297,22 @@ "uncrypto": "^0.1.3" } }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-tree": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", @@ -3349,6 +3326,18 @@ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3361,6 +3350,39 @@ "node": ">=4" } }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -3448,9 +3470,9 @@ } }, "node_modules/devalue": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", - "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.1.tgz", + "integrity": "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==", "license": "MIT" }, "node_modules/devlop": { @@ -3466,12 +3488,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "license": "MIT" - }, "node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", @@ -3487,6 +3503,73 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dset": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", @@ -4082,30 +4165,24 @@ } }, "node_modules/fontace": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.1.tgz", - "integrity": "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.0.tgz", + "integrity": "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==", "license": "MIT", "dependencies": { - "@types/fontkit": "^2.0.8", - "fontkit": "^2.0.4" + "fontkitten": "^1.0.0" } }, - "node_modules/fontkit": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", - "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "node_modules/fontkitten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.1.tgz", + "integrity": "sha512-m+/cO+/kAU9farlejecXLgQH20+UXyH0K6oosGtogAz7BWco+KTYE60epKwMt8eVxqlOE2Fs+GoHVlGDUbKOoA==", "license": "MIT", "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=24.12.0" } }, "node_modules/format": { @@ -5772,6 +5849,18 @@ "node": ">=0.10.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5927,12 +6016,6 @@ "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", "license": "MIT" }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "license": "MIT" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6027,6 +6110,12 @@ "node": ">=8" } }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6327,9 +6416,9 @@ } }, "node_modules/regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "license": "MIT", "dependencies": { "regex-utilities": "^2.3.0" @@ -6526,12 +6615,6 @@ "node": ">=4" } }, - "node_modules/restructure": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", - "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", - "license": "MIT" - }, "node_modules/retext": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", @@ -6683,6 +6766,15 @@ "suf-log": "^2.5.3" } }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/scheduler": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", @@ -6770,17 +6862,17 @@ } }, "node_modules/shiki": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.19.0.tgz", - "integrity": "sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz", + "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.19.0", - "@shikijs/engine-javascript": "3.19.0", - "@shikijs/engine-oniguruma": "3.19.0", - "@shikijs/langs": "3.19.0", - "@shikijs/themes": "3.19.0", - "@shikijs/types": "3.19.0", + "@shikijs/core": "3.21.0", + "@shikijs/engine-javascript": "3.21.0", + "@shikijs/engine-oniguruma": "3.21.0", + "@shikijs/langs": "3.21.0", + "@shikijs/themes": "3.21.0", + "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -6792,9 +6884,9 @@ "license": "MIT" }, "node_modules/smol-toml": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.5.2.tgz", - "integrity": "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", "license": "BSD-3-Clause", "engines": { "node": ">= 18" @@ -6904,6 +6996,31 @@ "node": ">=8" } }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, "node_modules/synckit": { "version": "0.11.6", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz", @@ -7020,7 +7137,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "optional": true }, "node_modules/type-check": { "version": "0.4.0", @@ -7094,32 +7212,6 @@ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", "license": "MIT" }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", @@ -7140,14 +7232,14 @@ } }, "node_modules/unifont": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.6.0.tgz", - "integrity": "sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.1.tgz", + "integrity": "sha512-0lg9M1cMYvXof8//wZBq6EDEfbwv4++t7+dYpXeS2ypaLuZJmUFYEwTm412/1ED/Wfo/wyzSu6kNZEr9hgRNfg==", "license": "MIT", "dependencies": { - "css-tree": "^3.0.0", - "ofetch": "^1.4.1", - "ohash": "^2.0.0" + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" } }, "node_modules/unist-util-find-after": { @@ -8109,9 +8201,9 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", - "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", "license": "ISC", "peerDependencies": { "zod": "^3.25 || ^4" diff --git a/package.json b/package.json index 5c818b0..a83ece5 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@astrojs/react": "^4.2.7", "@types/react": "^19.1.4", "@types/react-dom": "^19.1.5", - "astro": "^5.15.9", + "astro": "^5.16.9", "bootstrap": "5.3", "react": "^19.1.0", "react-bootstrap-icons": "^1.11.6", diff --git a/public/assets/workshops/lab-add-resources-to-vcluster.yaml b/public/assets/workshops/lab-add-resources-to-vcluster.yaml new file mode 100644 index 0000000..8610a0e --- /dev/null +++ b/public/assets/workshops/lab-add-resources-to-vcluster.yaml @@ -0,0 +1,120 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-add-resources-to-vcluster +spec: + description: Test of how to add resources to a virtual cluster. + session: + applications: + console: + enabled: true + editor: + enabled: true + files: + enabled: true + git: + enabled: true + terminal: + enabled: true + layout: split + vcluster: + enabled: true + objects: + - apiVersion: v1 + kind: Secret + metadata: + name: git-credentials-1 + namespace: default + stringData: + GIT_HOST: $(git_host) + GIT_PASSWORD: $(git_password) + GIT_PROTOCOL: $(git_protocol) + GIT_USERNAME: $(git_username) + namespaces: + budget: medium + security: + token: + enabled: false + objects: + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: kapp-controller + namespace: $(session_namespace)-vc + spec: + cluster: + kubeconfigSecretRef: + key: config + name: $(vcluster_secret) + namespace: default + deploy: + - kapp: {} + fetch: + - http: + url: https://github.com/carvel-dev/kapp-controller/releases/download/v0.59.1/release.yml + noopDelete: true + syncPeriod: 24h + template: + - ytt: {} + - apiVersion: v1 + kind: Secret + metadata: + name: credentials-data-values + namespace: $(session_namespace)-vc + stringData: + values.yaml: | + GIT_PROTOCOL: $(git_protocol) + GIT_HOST: $(git_host) + GIT_USERNAME: $(git_username) + GIT_PASSWORD: $(git_password) + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: git-credentials-2 + namespace: $(session_namespace)-vc + spec: + cluster: + kubeconfigSecretRef: + key: config + name: $(vcluster_secret) + namespace: default + deploy: + - kapp: {} + fetch: + - image: + url: ghcr.io/educates/labs-vcluster-testing/lab-setup-vcluster-files:2.0 + noopDelete: true + syncPeriod: 24h + template: + - ytt: + paths: + - templates/git-credentials-2.yaml + valuesFrom: + - secretRef: + name: credentials-data-values + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: git-credentials-3 + namespace: $(session_namespace)-vc + spec: + cluster: + kubeconfigSecretRef: + key: config + name: $(vcluster_secret) + namespace: default + deploy: + - kapp: {} + fetch: + - http: + url: $(session_url)/files/objects/git-credentials-3.yaml?token=$(services_password) + noopDelete: true + syncPeriod: 24h + template: + - ytt: {} + title: Test of adding resources to a virtual cluster + version: "2.0" + workshop: + files: + - image: + url: ghcr.io/educates/labs-vcluster-testing/lab-add-resources-to-vcluster-files:2.0 diff --git a/public/assets/workshops/lab-builtin-vcluster-all-features.yaml b/public/assets/workshops/lab-builtin-vcluster-all-features.yaml new file mode 100644 index 0000000..dc0a3f8 --- /dev/null +++ b/public/assets/workshops/lab-builtin-vcluster-all-features.yaml @@ -0,0 +1,54 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-builtin-vcluster-all-features +spec: + description: Test of using builtin support for creating a virtual cluster with all + features. + session: + applications: + console: + enabled: true + editor: + enabled: true + files: + enabled: true + terminal: + enabled: true + layout: split + vcluster: + enabled: true + ingress: + enabled: true + subdomains: + - default + objects: + - apiVersion: v1 + data: + INGRESS_DOMAIN: $(ingress_domain) + SESSION_NAMESPACE: $(session_namespace) + kind: ConfigMap + metadata: + name: session-details + namespace: default + resources: + syncer: + memory: 2Gi + services: + fromHost: + - from: kyverno/kyverno-svc-metrics + to: default/kyverno-svc-metrics + fromVirtual: + - from: default/nginx + to: my-internal-nginx-svc + namespaces: + budget: x-large + security: + token: + enabled: false + title: Test of builtin virtual cluster with all features + version: "2.0" + workshop: + files: + - image: + url: ghcr.io/educates/labs-vcluster-testing/lab-builtin-vcluster-all-features-files:2.0 diff --git a/public/assets/workshops/lab-builtin-vcluster.yaml b/public/assets/workshops/lab-builtin-vcluster.yaml new file mode 100644 index 0000000..390e57c --- /dev/null +++ b/public/assets/workshops/lab-builtin-vcluster.yaml @@ -0,0 +1,30 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-builtin-vcluster +spec: + description: Test of using builtin support for creating a virtual cluster. + session: + applications: + console: + enabled: true + editor: + enabled: true + files: + enabled: true + terminal: + enabled: true + layout: split + vcluster: + enabled: true + namespaces: + budget: medium + security: + token: + enabled: false + title: Test of builtin virtual cluster + version: "2.0" + workshop: + files: + - image: + url: ghcr.io/educates/labs-vcluster-testing/lab-builtin-vcluster-files:2.0 diff --git a/public/assets/workshops/lab-command-nested-vcluster.yaml b/public/assets/workshops/lab-command-nested-vcluster.yaml new file mode 100644 index 0000000..e3a1517 --- /dev/null +++ b/public/assets/workshops/lab-command-nested-vcluster.yaml @@ -0,0 +1,38 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-command-nested-vcluster +spec: + description: Test of creating a virtual cluster inside Educates builtin vCluster + using the vCluster CLI + session: + applications: + console: + enabled: false + editor: + enabled: true + files: + enabled: true + terminal: + enabled: true + layout: split + vcluster: + enabled: true + namespaces: + budget: large + security: + policy: baseline + token: + enabled: false + title: Test of creating nested vCluster + version: "2.0" + workshop: + files: + - image: + url: ghcr.io/educates/labs-vcluster-testing/lab-command-nested-vcluster-files:2.0 + packages: + - files: + - image: + url: ghcr.io/educates/educates-extension-packages/vcluster:v0.30.3 + path: . + name: vcluster diff --git a/public/assets/workshops/lab-command-vcluster.yaml b/public/assets/workshops/lab-command-vcluster.yaml new file mode 100644 index 0000000..1a51e53 --- /dev/null +++ b/public/assets/workshops/lab-command-vcluster.yaml @@ -0,0 +1,58 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-command-vcluster +spec: + description: Test of creating a virtual cluster using the vcluster CLI + session: + applications: + console: + enabled: false + editor: + enabled: true + files: + enabled: true + terminal: + enabled: true + layout: split + vcluster: + enabled: false + namespaces: + budget: large + security: + policy: baseline + objects: + - apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: $(session_name)-vc + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: edit + subjects: + - kind: ServiceAccount + name: $(service_account) + namespace: $(session_namespace) + - apiVersion: v1 + kind: ServiceAccount + metadata: + annotations: + meta.helm.sh/release-name: $(session_name) + meta.helm.sh/release-namespace: $(session_namespace) + labels: + app.kubernetes.io/managed-by: Helm + name: $(service_account) + namespace: $(session_namespace) + title: Test of using the vCluster CLI + version: "2.0" + workshop: + files: + - image: + url: ghcr.io/educates/labs-vcluster-testing/lab-command-vcluster-files:2.0 + packages: + - files: + - image: + url: ghcr.io/educates/educates-extension-packages/vcluster:v0.30.3 + path: . + name: vcluster diff --git a/public/assets/workshops/lab-educates-workshop.yaml b/public/assets/workshops/lab-educates-workshop.yaml new file mode 100644 index 0000000..eca2eae --- /dev/null +++ b/public/assets/workshops/lab-educates-workshop.yaml @@ -0,0 +1,89 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-educates-workshop +spec: + description: Learn how to author workshops on Educates + session: + applications: + console: + enabled: false + docker: + compose: + services: + registry: + image: registry:2.8.3 + ports: + - 0.0.0.0:5001:5000 + enabled: true + socket: + enabled: false + editor: + enabled: true + registry: + enabled: false + terminal: + enabled: true + layout: split + vcluster: + enabled: true + services: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + dashboards: + - name: Docs + url: https://docs.educates.dev/ + namespaces: + budget: x-large + security: + policy: baseline + token: + enabled: false + objects: + - apiVersion: v1 + kind: Service + metadata: + name: registry-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: registry + port: 80 + protocol: TCP + targetPort: 5001 + selector: + deployment: $(session_name) + type: ClusterIP + - apiVersion: v1 + kind: Service + metadata: + name: localhost-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: renderer + port: 10081 + protocol: TCP + targetPort: 10081 + selector: + deployment: $(session_name) + type: ClusterIP + title: Educates Workshop + version: "1.0" + workshop: + files: + - image: + url: ghcr.io/educates/educates/lab-educates-workshop-files:1.0 + includePaths: + - /workshop/** + - /exercises/** + - /README.md + packages: + - files: + - image: + url: ghcr.io/educates/educates-extension-packages/educates:v3.5.1 + path: . + name: educates diff --git a/src/content/extension-packages/educates-cli.yaml b/src/content/extension-packages/educates-cli.yaml index c8ba97a..7994897 100644 --- a/src/content/extension-packages/educates-cli.yaml +++ b/src/content/extension-packages/educates-cli.yaml @@ -6,7 +6,7 @@ date_created: 2025-05-26 labels: - educates - cli -version: 3.3.2 +version: 3.5.1 repo_url: https://github.com/educates/educates-extension-packages -oci_image: ghcr.io/educates/educates-extension-packages/educates:v3.3.2 -release_notes: Initial release with latest versions of the Educates CLI. \ No newline at end of file +oci_image: ghcr.io/educates/educates-extension-packages/educates:v3.5.1 +release_notes: Latest versions of the Educates CLI. \ No newline at end of file diff --git a/src/content/workshops/lab-add-resources-to-vcluster.yaml b/src/content/workshops/lab-add-resources-to-vcluster.yaml new file mode 100644 index 0000000..e9591b1 --- /dev/null +++ b/src/content/workshops/lab-add-resources-to-vcluster.yaml @@ -0,0 +1,18 @@ +title: Add Resources to Virtual Cluster +slug: lab-add-resources-to-vcluster +description: A workshop demonstrating how to prepopulate a virtual cluster with resources, including installation of kapp-controller in that virtual cluster. +author: Educates Team +image: educates_vcluster +repository: + org: educates + name: labs-vcluster-testing + ref: "2.0" + path: workshops/lab-add-resources-to-vcluster/resources/workshop.yaml +install_url: https://github.com/educates/labs-vcluster-testing/releases/download/2.0/lab-add-resources-to-vcluster.yaml +labels: + - educates-showcase + - vcluster + - virtual-cluster + - workshop + - resources + - kapp-controller diff --git a/src/content/workshops/lab-builtin-vcluster-all-features.yaml b/src/content/workshops/lab-builtin-vcluster-all-features.yaml new file mode 100644 index 0000000..eb38e4c --- /dev/null +++ b/src/content/workshops/lab-builtin-vcluster-all-features.yaml @@ -0,0 +1,17 @@ +title: Builtin Virtual Cluster - All Features +slug: lab-builtin-vcluster-all-features +description: A workshop demonstrating creation of a virtual cluster with all the potential vcluster configuration per workshop session using the builtin support provided by Educates. +author: Educates Team +image: educates_vcluster +repository: + org: educates + name: labs-vcluster-testing + ref: "2.0" + path: workshops/lab-builtin-vcluster-all-features/resources/workshop.yaml +install_url: https://github.com/educates/labs-vcluster-testing/releases/download/2.0/lab-builtin-vcluster-all-features.yaml +labels: + - educates-showcase + - vcluster + - virtual-cluster + - workshop + - advanced diff --git a/src/content/workshops/lab-builtin-vcluster.yaml b/src/content/workshops/lab-builtin-vcluster.yaml new file mode 100644 index 0000000..57452e8 --- /dev/null +++ b/src/content/workshops/lab-builtin-vcluster.yaml @@ -0,0 +1,15 @@ +title: Builtin Virtual Cluster +slug: lab-builtin-vcluster +description: A workshop demonstrating creation of a virtual cluster per workshop session using the builtin support provided by Educates. +author: Educates Team +image: educates_vcluster +repository: + org: educates + name: labs-vcluster-testing + ref: "2.0" + path: workshops/lab-builtin-vcluster/resources/workshop.yaml +install_url: https://github.com/educates/labs-vcluster-testing/releases/download/2.0/lab-builtin-vcluster.yaml +labels: + - educates-showcase + - vcluster + - virtual-cluster diff --git a/src/content/workshops/lab-command-nested-vcluster.yaml b/src/content/workshops/lab-command-nested-vcluster.yaml new file mode 100644 index 0000000..cb77e83 --- /dev/null +++ b/src/content/workshops/lab-command-nested-vcluster.yaml @@ -0,0 +1,18 @@ +title: Command Nested Virtual Cluster +slug: lab-command-nested-vcluster +description: A workshop demonstrating creation of a virtual cluster inside a builtin virtual cluster provided by Educates using the vcluster CLI. +author: Educates Team +image: educates_vcluster +repository: + org: educates + name: labs-vcluster-testing + ref: "2.0" + path: workshops/lab-command-nested-vcluster/resources/workshop.yaml +install_url: https://github.com/educates/labs-vcluster-testing/releases/download/2.0/lab-command-nested-vcluster.yaml +labels: + - educates-showcase + - vcluster + - virtual-cluster + - workshop + - nested + - cli diff --git a/src/content/workshops/lab-command-vcluster.yaml b/src/content/workshops/lab-command-vcluster.yaml new file mode 100644 index 0000000..800d683 --- /dev/null +++ b/src/content/workshops/lab-command-vcluster.yaml @@ -0,0 +1,16 @@ +title: Command Virtual Cluster +slug: lab-command-vcluster +description: A workshop demonstrating creation of a virtual cluster using the vcluster CLI. +author: Educates Team +image: educates_vcluster +repository: + org: educates + name: labs-vcluster-testing + ref: "2.0" + path: workshops/lab-command-vcluster/resources/workshop.yaml +install_url: https://github.com/educates/labs-vcluster-testing/releases/download/2.0/lab-command-vcluster.yaml +labels: + - educates-showcase + - vcluster + - virtual-cluster + - extension-package diff --git a/src/content/workshops/lab-educates-workshop.yaml b/src/content/workshops/lab-educates-workshop.yaml new file mode 100644 index 0000000..e240aa8 --- /dev/null +++ b/src/content/workshops/lab-educates-workshop.yaml @@ -0,0 +1,16 @@ +title: Creating Educates Workshops +slug: lab-educates-workshop +description: How to create an Educates Workshop using the Educates CLI. +author: Educates Team +image: educates +repository: + org: educates + name: lab-educates-workshop + ref: "1.0" + path: resources/workshop.yaml +install_url: https://github.com/educates/lab-educates-workshop/releases/download/1.0/workshop.yaml +labels: + - educates-showcase + - workshop + - vcluster + - extension-package