diff --git a/README.md b/README.md index 3949cb23c8..f97e647c6d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Lens Desktop Core ("OpenLens") [![Build Status](https://github.com/lensapp/lens/actions/workflows/test.yml/badge.svg)](https://github.com/lensapp/lens/actions/workflows/test.yml) -[![Chat on Slack](https://img.shields.io/badge/chat-on%20slack-blue.svg?logo=slack&longCache=true&style=flat)](https://k8slens.dev/slack.html) +[Explore our Forums](https://forums.k8slens.dev) ## The Repository -This repository is where Team Lens develops the core of the [Lens Desktop](https://k8slens.dev) product together with the community. +This repository is where Team Lens develops the core of the [Lens Desktop](https://k8slens.dev) product together with the community. The core is a library, powered by [Electron](https://www.electronjs.org/) and [React](https://reactjs.org/). Unlike generic Electron + React frameworks / boilerplates, it is very opinionated for creating Lens Desktop-like applications and has support for Lens Extensions. @@ -31,4 +31,4 @@ See [Contributing](https://docs.k8slens.dev/contributing/) page. ## License -See [License](LICENSE). \ No newline at end of file +See [License](LICENSE). diff --git a/docs/README.md b/docs/README.md index 67369f86fc..b22509eb16 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,15 +7,15 @@ To install your first extension you should goto the [extension page](lens://app/ This documentation describes: -* How to build, run, test, and publish an extension. -* How to take full advantage of the Lens Extension API. -* Where to find [guides](extensions/guides/README.md) and [code samples](https://github.com/lensapp/lens-extension-samples) to help get you started. +- How to build, run, test, and publish an extension. +- How to take full advantage of the Lens Extension API. +- Where to find [guides](extensions/guides/README.md) and [code samples](https://github.com/lensapp/lens-extension-samples) to help get you started. ## What Extensions Can Do Here are some examples of what you can achieve with the Extension API: -* Add custom components & views in the UI - Extending the Lens Workbench +- Add custom components & views in the UI - Extending the Lens Workbench For an overview of the Lens Extension API, refer to the [Common Capabilities](extensions/capabilities/common-capabilities.md) page. [Extension Guides Overview](extensions/guides/README.md) also includes a list of code samples and guides that illustrate various ways of using the Lens Extension API. @@ -23,11 +23,11 @@ For an overview of the Lens Extension API, refer to the [Common Capabilities](ex Here is what each section of the Lens Extension API docs can help you with: -* **Getting Started** teaches fundamental concepts for building extensions with the Hello World sample. -* **Extension Capabilities** dissects Lens's Extension API into smaller categories and points you to more detailed topics. -* **Extension Guides** includes guides and code samples that explain specific usages of Lens Extension API. -* **Testing and Publishing** includes in-depth guides on various extension development topics, such as testing and publishing extensions. -* **API Reference** contains exhaustive references for the Lens Extension API, Contribution Points, and many other topics. +- **Getting Started** teaches fundamental concepts for building extensions with the Hello World sample. +- **Extension Capabilities** dissects Lens's Extension API into smaller categories and points you to more detailed topics. +- **Extension Guides** includes guides and code samples that explain specific usages of Lens Extension API. +- **Testing and Publishing** includes in-depth guides on various extension development topics, such as testing and publishing extensions. +- **API Reference** contains exhaustive references for the Lens Extension API, Contribution Points, and many other topics. ## What's New @@ -45,7 +45,7 @@ See the [Lens v4 to v5 extension migration notes](extensions/extension-migration ## Looking for Help -If you have questions for extension development, try asking on the [Lens Dev Slack](http://k8slens.slack.com/). It's a public chatroom for Lens developers, where Lens team members chime in from time to time. +If you have questions for extension development, try asking on the [Lens Forums](http://forums.k8slens.dev/). It's a public chatroom for Lens developers, where Lens team members chime in from time to time. To provide feedback on the documentation or issues with the Lens Extension API, create new issues at [lensapp/lens](https://github.com/lensapp/lens/issues). Please use the labels `area/documentation` and/or `area/extension`. diff --git a/mkdocs.yml b/mkdocs.yml index b869a63ee9..e0f1568b87 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,33 +10,33 @@ edit_uri: "" nav: - Overview: README.md - Getting Started: - - Overview: extensions/get-started/overview.md - - Your First Extension: extensions/get-started/your-first-extension.md - - Extension Anatomy: extensions/get-started/anatomy.md - - Wrapping Up: extensions/get-started/wrapping-up.md + - Overview: extensions/get-started/overview.md + - Your First Extension: extensions/get-started/your-first-extension.md + - Extension Anatomy: extensions/get-started/anatomy.md + - Wrapping Up: extensions/get-started/wrapping-up.md - Extension Capabilities: - - Common Capabilities: extensions/capabilities/common-capabilities.md - - Styling: extensions/capabilities/styling.md + - Common Capabilities: extensions/capabilities/common-capabilities.md + - Styling: extensions/capabilities/styling.md - Extension Guides: - - Overview: extensions/guides/README.md - - Generator: extensions/guides/generator.md - - Main Extension: extensions/guides/main-extension.md - - Renderer Extension: extensions/guides/renderer-extension.md - - Catalog: extensions/guides/catalog.md - - Resource Stack: extensions/guides/resource-stack.md - - Extending KubernetesCluster: extensions/guides/extending-kubernetes-cluster.md - - Stores: extensions/guides/stores.md - - Working with MobX: extensions/guides/working-with-mobx.md - - Protocol Handlers: extensions/guides/protocol-handlers.md - - IPC: extensions/guides/ipc.md + - Overview: extensions/guides/README.md + - Generator: extensions/guides/generator.md + - Main Extension: extensions/guides/main-extension.md + - Renderer Extension: extensions/guides/renderer-extension.md + - Catalog: extensions/guides/catalog.md + - Resource Stack: extensions/guides/resource-stack.md + - Extending KubernetesCluster: extensions/guides/extending-kubernetes-cluster.md + - Stores: extensions/guides/stores.md + - Working with MobX: extensions/guides/working-with-mobx.md + - Protocol Handlers: extensions/guides/protocol-handlers.md + - IPC: extensions/guides/ipc.md - Testing and Publishing: - - Testing Extensions: extensions/testing-and-publishing/testing.md - - Publishing Extensions: extensions/testing-and-publishing/publishing.md + - Testing Extensions: extensions/testing-and-publishing/testing.md + - Publishing Extensions: extensions/testing-and-publishing/publishing.md - API Reference: extensions/api/README.md theme: - name: 'material' + name: "material" highlightjs: true - language: 'en' + language: "en" custom_dir: docs/custom_theme favicon: img/favicon.ico logo: img/lens-logo-icon.svg @@ -79,9 +79,9 @@ extra: - icon: fontawesome/brands/twitter link: https://twitter.com/k8slens name: Lens on Twitter - - icon: fontawesome/brands/slack - link: http://k8slens.slack.com/ - name: Lens on Slack + - icon: fontawesome/brands/discourse + link: https://forums.k8slens.dev/ + name: Lens Forums - icon: fontawesome/solid/link link: https://k8slens.dev/ name: Lens Website diff --git a/package-lock.json b/package-lock.json index 101e2ea4a7..a644ddcbb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3301,6 +3301,10 @@ "resolved": "packages/extension-api", "link": true }, + "node_modules/@k8slens/feature-core": { + "resolved": "packages/technical-features/feature-core", + "link": true + }, "node_modules/@k8slens/generate-tray-icons": { "resolved": "packages/generate-tray-icons", "link": true @@ -4651,55 +4655,55 @@ } }, "node_modules/@ogre-tools/fp": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ogre-tools/fp/-/fp-12.0.1.tgz", - "integrity": "sha512-BzMhkI4wPnuI+hXJDbtHUXQn/uBjJLx3W0oDaIFV+lLpkneUU0oW9D5uZFHNOouzCgf67/tnmUC6Ohevbr7/VA==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@ogre-tools/fp/-/fp-15.1.1.tgz", + "integrity": "sha512-WuLl0lBFjMHcy6o+HZLw2eN9zSUx6210DqLbhjo110PtpMvXqzQOIfmIiKv+awKxs7F2lIj1QUUJ6PpxCXVWSg==", "peerDependencies": { "lodash": "^4.17.21" } }, "node_modules/@ogre-tools/injectable": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ogre-tools/injectable/-/injectable-12.0.1.tgz", - "integrity": "sha512-uOx8STN2wSc9hknDSTGqViyR89Vwg7rGacwrVNchgyo48/QJsmZZz6cd1Aw3nT4vr7ekjTc2lh0Rz6zGIv47hg==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@ogre-tools/injectable/-/injectable-15.1.1.tgz", + "integrity": "sha512-koB4z1FkaRbTEW77ULK1viVORlBCDnUtxAhxYiZrUzQcCvd7Fi4izs/YzDWLPc2HHay+EdJw11CuNC1JfzhaaA==", "peerDependencies": { - "@ogre-tools/fp": "^12.0.0", + "@ogre-tools/fp": "*", "lodash": "^4.17.21" } }, "node_modules/@ogre-tools/injectable-extension-for-auto-registration": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-auto-registration/-/injectable-extension-for-auto-registration-12.0.1.tgz", - "integrity": "sha512-itKcxEJ/J8SKGD/Wwj0UYOA+/nqwnrwanhikY6qhlibj8guujX77Iip7vMBzJFc2nIrRaQRcpNV2eXe+tjQUdg==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-auto-registration/-/injectable-extension-for-auto-registration-15.1.1.tgz", + "integrity": "sha512-kByRoG1FTWnB412nkF4GnKzim1ldLbSd9H2PUR6UF0EmjPg3QstyZXSE341bWlWZMAi/1HPiagfZ9E1wOP609w==", "peerDependencies": { - "@ogre-tools/fp": "^12.0.0", - "@ogre-tools/injectable": "^12.0.0", + "@ogre-tools/fp": "*", + "@ogre-tools/injectable": "*", "lodash": "^4.17.21" } }, "node_modules/@ogre-tools/injectable-extension-for-mobx": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-mobx/-/injectable-extension-for-mobx-12.0.1.tgz", - "integrity": "sha512-M1penOpZfO3/rJMb6WN4IL86p9Lx9tOMCipiNkAyitNLGWfeDPG279JlCs9E3Uw8R9nkFPiw8Je2SLnwnM9o+A==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-mobx/-/injectable-extension-for-mobx-15.1.1.tgz", + "integrity": "sha512-ZdIZGG9Zr/okGktICQFY5PzENerjdNAlwvuP1Na8bmIHJAs7yEwi6KlSuoOkZ1oNvQcHAsi9V2WVBh8jGyHN8g==", "peerDependencies": { - "@ogre-tools/fp": "^12.0.0", - "@ogre-tools/injectable": "^12.0.0", + "@ogre-tools/fp": "*", + "@ogre-tools/injectable": "*", "lodash": "^4.17.21", "mobx": "^6.3.0" } }, "node_modules/@ogre-tools/injectable-react": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-react/-/injectable-react-12.0.1.tgz", - "integrity": "sha512-LAOh/EHKqk/pQcBRZUAz0VcJwgBeIPxHwlV/Apw0aEBBoMuYLsLZh47rES8sMYMV6N5x7oVfkjMscujY0DCgaQ==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-react/-/injectable-react-15.1.1.tgz", + "integrity": "sha512-nJ1mH3FsL+9WbiWoIbs955rKONf/0jkw4UmEM2dBdi5dQ7G6MCZu/lh4sTcPm5u3g6ZoV7o6rUZjkwkM1qUcZw==", "peerDependencies": { - "@ogre-tools/fp": "^12.0.0", - "@ogre-tools/injectable": "^12.0.0", + "@ogre-tools/fp": "*", + "@ogre-tools/injectable": "*", "lodash": "^4.17.21", "mobx": "^6.3.0", "mobx-react": "^7.2.0", - "react": "^17.0.0", - "react-dom": "^17.0.0" + "react": "^17 || ^18", + "react-dom": "^17 || ^18" } }, "node_modules/@parcel/watcher": { @@ -5851,6 +5855,16 @@ "@types/node": "*" } }, + "node_modules/@types/inquirer": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz", + "integrity": "sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==", + "dev": true, + "dependencies": { + "@types/through": "*", + "rxjs": "^7.2.0" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -5952,15 +5966,6 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, - "node_modules/@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -6377,6 +6382,15 @@ "@types/jest": "*" } }, + "node_modules/@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/tough-cookie": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", @@ -8834,8 +8848,7 @@ "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/chart.js": { "version": "2.9.4", @@ -9092,7 +9105,6 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, "engines": { "node": ">=6" }, @@ -9141,7 +9153,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, "engines": { "node": ">=0.8" } @@ -10515,7 +10526,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, "dependencies": { "clone": "^1.0.2" }, @@ -11074,6 +11084,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -13146,7 +13161,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -13160,7 +13174,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -21648,8 +21661,7 @@ "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nan": { "version": "2.17.0", @@ -25392,7 +25404,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -28090,6 +28101,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", + "dev": true, "bin": { "rimraf": "dist/cjs/src/bin.js" }, @@ -28122,7 +28134,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -28163,7 +28174,6 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -30263,7 +30273,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -31301,7 +31310,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, "dependencies": { "defaults": "^1.0.3" } @@ -32259,11 +32267,11 @@ "@k8slens/node-fetch": "^6.4.0-beta.13", "@kubernetes/client-node": "^0.18.1", "@material-ui/styles": "^4.11.5", - "@ogre-tools/fp": "^12.0.1", - "@ogre-tools/injectable": "^12.0.1", - "@ogre-tools/injectable-extension-for-auto-registration": "^12.0.1", - "@ogre-tools/injectable-extension-for-mobx": "^12.0.1", - "@ogre-tools/injectable-react": "^12.0.1", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1", + "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.1", + "@ogre-tools/injectable-extension-for-mobx": "^15.1.1", + "@ogre-tools/injectable-react": "^15.1.1", "@sentry/electron": "^3.0.8", "@sentry/integrations": "^6.19.3", "@side/jest-runtime": "^1.1.0", @@ -34290,11 +34298,11 @@ "@k8slens/core": "^6.4.0-beta.13", "@k8slens/ensure-binaries": "^6.4.0-beta.13", "@k8slens/generate-tray-icons": "^6.4.0-beta.13", - "@ogre-tools/fp": "^12.0.1", - "@ogre-tools/injectable": "^12.0.1", - "@ogre-tools/injectable-extension-for-auto-registration": "^12.0.1", - "@ogre-tools/injectable-extension-for-mobx": "^12.0.1", - "@ogre-tools/injectable-react": "^12.0.1", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1", + "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.1", + "@ogre-tools/injectable-extension-for-mobx": "^15.1.1", + "@ogre-tools/injectable-react": "^15.1.1", "mobx": "^6.8.0", "rimraf": "^4.1.2" }, @@ -34461,7 +34469,9 @@ "version": "6.4.0-beta.13", "license": "MIT", "dependencies": { - "rimraf": "^4.1.2" + "chalk": "^5.2.0", + "inquirer": "^9.1.4", + "semver": "^7.3.8" }, "bin": { "create-release-pr": "dist/index.js" @@ -34469,23 +34479,10 @@ "devDependencies": { "@swc/cli": "^0.1.61", "@swc/core": "^1.3.35", - "@types/command-line-args": "^5.2.0", - "@types/fs-extra": "^11.0.1", + "@types/inquirer": "^9.0.3", "@types/node": "^16.18.11", "@types/semver": "^7.3.13", - "command-line-args": "^5.2.1", - "fs-extra": "^11.1.0", - "semver": "^7.3.8" - } - }, - "packages/release-tool/node_modules/@types/fs-extra": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", - "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", - "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" + "rimraf": "^4.1.2" } }, "packages/release-tool/node_modules/@types/node": { @@ -34494,18 +34491,293 @@ "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, - "packages/release-tool/node_modules/fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dev": true, + "packages/release-tool/node_modules/ansi-escapes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.0.0.tgz", + "integrity": "sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "type-fest": "^3.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/release-tool/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/release-tool/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "packages/release-tool/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "packages/release-tool/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/release-tool/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/cli-width": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz", + "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", + "engines": { + "node": ">= 12" + } + }, + "packages/release-tool/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "packages/release-tool/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/inquirer": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.4.tgz", + "integrity": "sha512-9hiJxE5gkK/cM2d1mTEnuurGTAoHebbkX0BYl3h7iEg7FYfuNIom+nDfBCSWtvSnoSrWCeBxqqBZu26xdlJlXA==", + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.1.2", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.5.7", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/release-tool/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dependencies": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/release-tool/node_modules/type-fest": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.6.0.tgz", + "integrity": "sha512-RqTRtKTzvPpNdDUp1dVkKQRunlPITk4mXeqFlAZoJsS+fLRn8AdPK0TcQDumGayhU7fjlBfiBjsq3pe3rIfXZQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/release-tool/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "packages/semver": { @@ -34536,10 +34808,17 @@ "version": "6.4.0-beta.13", "license": "MIT", "peerDependencies": { - "@ogre-tools/fp": "^12.0.1", - "@ogre-tools/injectable": "^12.0.1", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1", "lodash": "^4.17.15" } + }, + "packages/technical-features/feature-core": { + "version": "0.0.1", + "license": "MIT", + "peerDependencies": { + "@ogre-tools/injectable": "^15.1.1" + } } } } diff --git a/packages/core/package.json b/packages/core/package.json index 75d135d913..958df49ec2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -57,7 +57,7 @@ "test:unit": "jest --testPathIgnorePatterns integration", "test:watch": "func() { jest ${1} --watch --testPathIgnorePatterns integration; }; func", "lint": "PROD=true eslint --ext js,ts,tsx --max-warnings=0 .", - "lint:fix": "npm run lint --fix" + "lint:fix": "npm run lint -- --fix" }, "config": { "k8sProxyVersion": "0.3.0", @@ -130,11 +130,11 @@ "@k8slens/node-fetch": "^6.4.0-beta.13", "@kubernetes/client-node": "^0.18.1", "@material-ui/styles": "^4.11.5", - "@ogre-tools/fp": "^12.0.1", - "@ogre-tools/injectable": "^12.0.1", - "@ogre-tools/injectable-extension-for-auto-registration": "^12.0.1", - "@ogre-tools/injectable-extension-for-mobx": "^12.0.1", - "@ogre-tools/injectable-react": "^12.0.1", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1", + "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.1", + "@ogre-tools/injectable-extension-for-mobx": "^15.1.1", + "@ogre-tools/injectable-react": "^15.1.1", "@sentry/electron": "^3.0.8", "@sentry/integrations": "^6.19.3", "@side/jest-runtime": "^1.1.0", diff --git a/packages/core/src/common/__tests__/cluster-store.test.ts b/packages/core/src/common/__tests__/cluster-store.test.ts index 2fb52df3ba..1f8a8ee425 100644 --- a/packages/core/src/common/__tests__/cluster-store.test.ts +++ b/packages/core/src/common/__tests__/cluster-store.test.ts @@ -74,8 +74,7 @@ describe("cluster-store", () => { di.override(kubectlBinaryNameInjectable, () => "kubectl"); di.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64"); di.override(normalizedPlatformInjectable, () => "darwin"); - createCluster = di.inject(createClusterInjectionToken); - getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable); + writeJsonSync = di.inject(writeJsonSyncInjectable); writeFileSync = di.inject(writeFileSyncInjectable); writeBufferSync = di.inject(writeBufferSyncInjectable); @@ -85,6 +84,9 @@ describe("cluster-store", () => { describe("empty config", () => { beforeEach(async () => { + createCluster = di.inject(createClusterInjectionToken); + getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable); + writeJsonSync("/some-directory-for-user-data/lens-cluster-store.json", {}); clusterStore = di.inject(clusterStoreInjectable); clusterStore.load(); @@ -198,6 +200,10 @@ describe("cluster-store", () => { }, ], }); + + createCluster = di.inject(createClusterInjectionToken); + getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable); + clusterStore = di.inject(clusterStoreInjectable); clusterStore.load(); }); @@ -249,6 +255,10 @@ describe("cluster-store", () => { }, ], }); + + createCluster = di.inject(createClusterInjectionToken); + getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable); + clusterStore = di.inject(clusterStoreInjectable); clusterStore.load(); }); @@ -262,6 +272,11 @@ describe("cluster-store", () => { describe("pre 3.6.0-beta.1 config with an existing cluster", () => { beforeEach(() => { + di.override(clusterStoreMigrationVersionInjectable, () => "3.6.0"); + + createCluster = di.inject(createClusterInjectionToken); + getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable); + writeJsonSync("/some-directory-for-user-data/lens-cluster-store.json", { __internal__: { migrations: { @@ -281,8 +296,6 @@ describe("cluster-store", () => { }); writeBufferSync("/some-directory-for-user-data/icon_path", testDataIcon); - di.override(clusterStoreMigrationVersionInjectable, () => "3.6.0"); - clusterStore = di.inject(clusterStoreInjectable); clusterStore.load(); }); diff --git a/packages/core/src/common/__tests__/create-resource-stack.test.ts b/packages/core/src/common/__tests__/create-resource-stack.test.ts new file mode 100644 index 0000000000..340e5c86ee --- /dev/null +++ b/packages/core/src/common/__tests__/create-resource-stack.test.ts @@ -0,0 +1,61 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { DiContainer } from "@ogre-tools/injectable"; +import kubectlApplyAllInjectable from "../../main/kubectl/kubectl-apply-all.injectable"; +import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; +import type { KubernetesCluster } from "../catalog-entities"; +import readDirectoryInjectable from "../fs/read-directory.injectable"; +import readFileInjectable from "../fs/read-file.injectable"; +import createResourceStackInjectable from "../k8s/create-resource-stack.injectable"; +import appPathsStateInjectable from "../app-paths/app-paths-state.injectable"; +import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; + +describe("create resource stack tests", () => { + let di: DiContainer; + let cluster: KubernetesCluster; + + beforeEach(async () => { + di = getDiForUnitTesting({ doGeneralOverrides: true }); + cluster = { + getId: () => "test-cluster", + } as any; + + di.override(readDirectoryInjectable, () => () => Promise.resolve(["file1"]) as any); + di.override(readFileInjectable, () => () => Promise.resolve("filecontents")); + di.override(appPathsStateInjectable, () => ({ + get: () => ({}), + })); + di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data"); + + }); + + describe("kubectlApplyFolder", () => { + it("returns response", async () => { + di.override(kubectlApplyAllInjectable, () => () => Promise.resolve({ + callWasSuccessful: true as const, + response: "success", + })); + + const createResourceStack = di.inject(createResourceStackInjectable); + const resourceStack = createResourceStack(cluster, "test"); + + const response = await resourceStack.kubectlApplyFolder("/foo/bar"); + + expect(response).toEqual("success"); + }); + + it("throws on error", async () => { + di.override(kubectlApplyAllInjectable, () => () => Promise.resolve({ + callWasSuccessful: false as const, + error: "No permissions", + })); + + const createResourceStack = di.inject(createResourceStackInjectable); + const resourceStack = createResourceStack(cluster, "test"); + + await expect(() => resourceStack.kubectlApplyFolder("/foo/bar")).rejects.toThrow("No permissions"); + }); + }); +}); diff --git a/packages/core/src/common/__tests__/user-store.test.ts b/packages/core/src/common/__tests__/user-store.test.ts index abd389d2cf..133511cb94 100644 --- a/packages/core/src/common/__tests__/user-store.test.ts +++ b/packages/core/src/common/__tests__/user-store.test.ts @@ -30,9 +30,9 @@ describe("user store tests", () => { get: () => "latest" as const, init: async () => {}, })); + await di.inject(defaultUpdateChannelInjectable).init(); - userStore = di.inject(userStoreInjectable); }); describe("for an empty config", () => { @@ -42,6 +42,8 @@ describe("user store tests", () => { writeJsonSync("/some-directory-for-user-data/lens-user-store.json", {}); writeJsonSync("/some-directory-for-user-data/kube_config", {}); + userStore = di.inject(userStoreInjectable); + userStore.load(); }); @@ -90,6 +92,8 @@ describe("user store tests", () => { di.override(userStoreMigrationVersionInjectable, () => "10.0.0"); + userStore = di.inject(userStoreInjectable); + userStore.load(); }); diff --git a/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts b/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts index 2e7e545f76..bec3cff646 100644 --- a/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts @@ -4,7 +4,6 @@ */ import type { DiContainer } from "@ogre-tools/injectable"; -import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../../renderer/cluster-frame-context/for-namespaced-resources.injectable"; import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable"; import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting"; @@ -18,6 +17,7 @@ import { KubeApi } from "../kube-api"; import { KubeObject } from "../kube-object"; import { KubeObjectStore } from "../kube-object.store"; import maybeKubeApiInjectable from "../maybe-kube-api.injectable"; +import { createClusterInjectionToken } from "../../cluster/create-cluster-injection-token"; // eslint-disable-next-line no-restricted-imports import { KubeApi as ExternalKubeApi } from "../../../extensions/common-api/k8s-api"; @@ -43,7 +43,7 @@ describe("ApiManager", () => { di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs"); di.override(storesAndApisCanBeCreatedInjectable, () => true); - const createCluster = di.inject(createClusterInjectable); + const createCluster = di.inject(createClusterInjectionToken); di.override(hostedClusterInjectable, () => createCluster({ contextName: "some-context-name", diff --git a/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts index dd65f58762..16c2ae0e04 100644 --- a/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts @@ -15,7 +15,6 @@ import setupAutoRegistrationInjectable from "../../../renderer/before-frame-star import { createMockResponseFromString } from "../../../test-utils/mock-responses"; import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; import directoryForUserDataInjectable from "../../app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable"; import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable"; import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import apiManagerInjectable from "../api-manager/manager.injectable"; @@ -23,6 +22,7 @@ import type { DiContainer } from "@ogre-tools/injectable"; import ingressApiInjectable from "../endpoints/ingress.api.injectable"; import loggerInjectable from "../../logger.injectable"; import maybeKubeApiInjectable from "../maybe-kube-api.injectable"; +import { createClusterInjectionToken } from "../../cluster/create-cluster-injection-token"; describe("KubeApi", () => { let fetchMock: AsyncFnMock; @@ -39,7 +39,7 @@ describe("KubeApi", () => { di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs"); di.override(storesAndApisCanBeCreatedInjectable, () => true); - const createCluster = di.inject(createClusterInjectable); + const createCluster = di.inject(createClusterInjectionToken); di.override(hostedClusterInjectable, () => createCluster({ contextName: "some-context-name", diff --git a/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts index 7bce8a3b7c..c5b0364da9 100644 --- a/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts @@ -24,7 +24,6 @@ import setupAutoRegistrationInjectable from "../../../renderer/before-frame-star import { createMockResponseFromStream, createMockResponseFromString } from "../../../test-utils/mock-responses"; import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; import directoryForUserDataInjectable from "../../app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable"; import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable"; import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable"; @@ -36,6 +35,7 @@ import namespaceApiInjectable from "../endpoints/namespace.api.injectable"; // NOTE: this is fine because we are testing something that only exported // eslint-disable-next-line no-restricted-imports import { PodsApi } from "../../../extensions/common-api/k8s-api"; +import { createClusterInjectionToken } from "../../cluster/create-cluster-injection-token"; describe("createKubeApiForRemoteCluster", () => { let createKubeApiForRemoteCluster: CreateKubeApiForRemoteCluster; @@ -48,7 +48,7 @@ describe("createKubeApiForRemoteCluster", () => { di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs"); di.override(storesAndApisCanBeCreatedInjectable, () => true); - const createCluster = di.inject(createClusterInjectable); + const createCluster = di.inject(createClusterInjectionToken); di.override(hostedClusterInjectable, () => createCluster({ contextName: "some-context-name", @@ -154,7 +154,7 @@ describe("KubeApi", () => { fetchMock = asyncFn(); di.override(fetchInjectable, () => fetchMock); - const createCluster = di.inject(createClusterInjectable); + const createCluster = di.inject(createClusterInjectionToken); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); di.override(hostedClusterInjectable, () => createCluster({ diff --git a/packages/core/src/common/k8s/resource-stack.ts b/packages/core/src/common/k8s/resource-stack.ts index 771b48b413..5bdafdc58d 100644 --- a/packages/core/src/common/k8s/resource-stack.ts +++ b/packages/core/src/common/k8s/resource-stack.ts @@ -51,7 +51,7 @@ export class ResourceStack { this.dependencies.logger.warn(`[RESOURCE-STACK]: failed to apply resources: ${result.error}`); - return ""; + throw new Error(result.error); } /** diff --git a/packages/core/src/common/logger.injectable.ts b/packages/core/src/common/logger.injectable.ts index 82ff682c46..8e9dd2a6a7 100644 --- a/packages/core/src/common/logger.injectable.ts +++ b/packages/core/src/common/logger.injectable.ts @@ -3,13 +3,20 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; +import { createLogger, format } from "winston"; import type { Logger } from "./logger"; -import winstonLoggerInjectable from "./winston-logger.injectable"; +import { loggerTransportInjectionToken } from "./logger/transports"; const loggerInjectable = getInjectable({ id: "logger", instantiate: (di): Logger => { - const baseLogger = di.inject(winstonLoggerInjectable); + const baseLogger = createLogger({ + format: format.combine( + format.splat(), + format.simple(), + ), + transports: di.injectMany(loggerTransportInjectionToken), + }); return { debug: (message, ...data) => baseLogger.debug(message, ...data), diff --git a/packages/core/src/common/utils/channel/channel.test.ts b/packages/core/src/common/utils/channel/channel.test.ts index 9a361b6770..72204d4fb6 100644 --- a/packages/core/src/common/utils/channel/channel.test.ts +++ b/packages/core/src/common/utils/channel/channel.test.ts @@ -19,7 +19,10 @@ import asyncFn from "@async-fn/jest"; import { getPromiseStatus } from "../../test-utils/get-promise-status"; import { runInAction } from "mobx"; import type { RequestChannelHandler } from "../../../main/utils/channel/channel-listeners/listener-tokens"; -import { getRequestChannelListenerInjectable } from "../../../main/utils/channel/channel-listeners/listener-tokens"; +import { + getRequestChannelListenerInjectable, + requestChannelListenerInjectionToken, +} from "../../../main/utils/channel/channel-listeners/listener-tokens"; type TestMessageChannel = MessageChannel; type TestRequestChannel = RequestChannel; @@ -199,21 +202,32 @@ describe("channel", () => { it("when registering multiple handlers for the same channel, throws", async () => { const applicationBuilder = getApplicationBuilder(); - const testChannelListenerInMainInjectable = getRequestChannelListenerInjectable({ - channel: testRequestChannel, - handler: () => () => "some-value", - }); - const testChannelListenerInMain2Injectable = getRequestChannelListenerInjectable({ - channel: testRequestChannel, - handler: () => () => "some-other-value", + const someChannelListenerInjectable = getInjectable({ + id: "some-channel-listener", + + instantiate: () => ({ + channel: testRequestChannel, + handler: () => () => "irrelevant", + }), + + injectionToken: requestChannelListenerInjectionToken, }); - testChannelListenerInMain2Injectable.id += "2"; + const someOtherChannelListenerInjectable = getInjectable({ + id: "some-other-channel-listener", + + instantiate: () => ({ + channel: testRequestChannel, + handler: () => () => "irrelevant", + }), + + injectionToken: requestChannelListenerInjectionToken, + }); applicationBuilder.beforeApplicationStart((mainDi) => { runInAction(() => { - mainDi.register(testChannelListenerInMainInjectable); - mainDi.register(testChannelListenerInMain2Injectable); + mainDi.register(someChannelListenerInjectable); + mainDi.register(someOtherChannelListenerInjectable); }); }); diff --git a/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts b/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts index 42e6cb9a61..2a005001da 100644 --- a/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts +++ b/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts @@ -19,7 +19,7 @@ const withOrphanPromiseInjectable = getInjectable({ toBeDecorated, withErrorLoggingFor(() => "Orphan promise rejection encountered"), withErrorSuppression, - ); + ) as ((...args: any[]) => any); decorated(...args); }; diff --git a/packages/core/src/common/vars.ts b/packages/core/src/common/vars.ts index 8f53d6354c..f4c19c16e6 100644 --- a/packages/core/src/common/vars.ts +++ b/packages/core/src/common/vars.ts @@ -18,6 +18,6 @@ export const apiKubePrefix = "/api-kube"; // k8s cluster apis // Links export const issuesTrackerUrl = "https://github.com/lensapp/lens/issues" as string; -export const slackUrl = "https://k8slens.dev/slack.html" as string; export const supportUrl = "https://docs.k8slens.dev/support/" as string; export const docsUrl = "https://docs.k8slens.dev" as string; +export const forumsUrl = "https://forums.k8slens.dev" as string; diff --git a/packages/core/src/common/winston-logger.injectable.ts b/packages/core/src/common/winston-logger.injectable.ts deleted file mode 100644 index ec3854d8b9..0000000000 --- a/packages/core/src/common/winston-logger.injectable.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectable } from "@ogre-tools/injectable"; -import { createLogger, format } from "winston"; -import { loggerTransportInjectionToken } from "./logger/transports"; - -const winstonLoggerInjectable = getInjectable({ - id: "winston-logger", - instantiate: (di) => createLogger({ - format: format.combine( - format.splat(), - format.simple(), - ), - transports: di.injectMany(loggerTransportInjectionToken), - }), -}); - -export default winstonLoggerInjectable; diff --git a/packages/core/src/extensions/common-api/app.ts b/packages/core/src/extensions/common-api/app.ts index dd9227cd0e..8c190b984b 100644 --- a/packages/core/src/extensions/common-api/app.ts +++ b/packages/core/src/extensions/common-api/app.ts @@ -11,7 +11,7 @@ import isWindowsInjectable from "../../common/vars/is-windows.injectable"; import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import getEnabledExtensionsInjectable from "./get-enabled-extensions/get-enabled-extensions.injectable"; -import { slackUrl, issuesTrackerUrl } from "../../common/vars"; +import { issuesTrackerUrl } from "../../common/vars"; import { buildVersionInjectionToken } from "../../common/vars/build-semantic-version.injectable"; import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; @@ -53,6 +53,9 @@ export const App = { return di.inject(isLinuxInjectable); }, - slackUrl, + /** + * @deprecated This value is now `""` and is left here for backwards compatability. + */ + slackUrl: "", issuesTrackerUrl, } as const; diff --git a/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap index 9c479f48cd..251643b88c 100644 --- a/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap +++ b/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap @@ -107,11 +107,11 @@ exports[`extension special characters in page registrations renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap b/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap index 63cbe79419..c1137050ae 100644 --- a/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap +++ b/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap @@ -107,11 +107,11 @@ exports[`navigate to extension page renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap b/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap index b8159b70b9..39d9ea86fc 100644 --- a/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap +++ b/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap @@ -107,11 +107,11 @@ exports[`add-cluster - navigation using application menu renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap b/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap index 462f4d69f5..62811682d0 100644 --- a/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap +++ b/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap @@ -108,11 +108,11 @@ exports[`installing update when started renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -413,11 +413,11 @@ exports[`installing update when started when user checks for updates renders 1`] If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -718,11 +718,11 @@ exports[`installing update when started when user checks for updates when new up If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1048,11 +1048,11 @@ exports[`installing update when started when user checks for updates when new up If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1378,11 +1378,11 @@ exports[`installing update when started when user checks for updates when new up If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1683,11 +1683,11 @@ exports[`installing update when started when user checks for updates when no new If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap index 20d1b6be8e..0c5fc35c57 100644 --- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap +++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap @@ -133,11 +133,11 @@ exports[`encourage user to update when sufficient time passed since update was d If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -438,11 +438,11 @@ exports[`encourage user to update when sufficient time passed since update was d If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap b/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap index c343d4dd5a..b12364cdb9 100644 --- a/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap +++ b/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap @@ -108,11 +108,11 @@ exports[`installing update using tray when started renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -413,11 +413,11 @@ exports[`installing update using tray when started when user checks for updates If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -718,11 +718,11 @@ exports[`installing update using tray when started when user checks for updates If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1048,11 +1048,11 @@ exports[`installing update using tray when started when user checks for updates If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1378,11 +1378,11 @@ exports[`installing update using tray when started when user checks for updates If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1683,11 +1683,11 @@ exports[`installing update using tray when started when user checks for updates If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap b/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap index 2628b888b9..ef787dfe15 100644 --- a/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap +++ b/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap @@ -133,11 +133,11 @@ exports[`force user to update when too long since update was downloaded when app If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -463,11 +463,11 @@ exports[`force user to update when too long since update was downloaded when app If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -840,11 +840,11 @@ exports[`force user to update when too long since update was downloaded when app If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap index f938ad9e49..a03ab8c9a3 100644 --- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap +++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap @@ -108,11 +108,11 @@ exports[`periodical checking of updates given updater is enabled and configurati If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap b/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap index b779a2e1bf..395d8d8f23 100644 --- a/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap +++ b/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap @@ -108,11 +108,11 @@ exports[`selection of update stability when started renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap b/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap index 6a2c87922c..c75e266d38 100644 --- a/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap +++ b/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap @@ -108,11 +108,11 @@ exports[`opening catalog entity details panel renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap b/packages/core/src/features/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap index 90c495e196..fa60ea4f32 100644 --- a/packages/core/src/features/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap +++ b/packages/core/src/features/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap @@ -199,11 +199,11 @@ exports[`Command Pallet: keyboard shortcut tests when on linux renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -595,11 +595,11 @@ exports[`Command Pallet: keyboard shortcut tests when on linux when pressing ESC If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -991,11 +991,11 @@ exports[`Command Pallet: keyboard shortcut tests when on linux when pressing SHI If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1531,11 +1531,11 @@ exports[`Command Pallet: keyboard shortcut tests when on linux when pressing SHI If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -1836,11 +1836,11 @@ exports[`Command Pallet: keyboard shortcut tests when on macOS renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -2141,11 +2141,11 @@ exports[`Command Pallet: keyboard shortcut tests when on macOS when pressing ESC If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -2446,11 +2446,11 @@ exports[`Command Pallet: keyboard shortcut tests when on macOS when pressing SHI If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -2847,11 +2847,11 @@ exports[`Command Pallet: keyboard shortcut tests when on macOS when pressing SHI If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

diff --git a/packages/core/src/features/entity-settings/__snapshots__/showing-settings-for-correct-entity.test.tsx.snap b/packages/core/src/features/entity-settings/__snapshots__/showing-settings-for-correct-entity.test.tsx.snap index b97e718a57..35adb5359b 100644 --- a/packages/core/src/features/entity-settings/__snapshots__/showing-settings-for-correct-entity.test.tsx.snap +++ b/packages/core/src/features/entity-settings/__snapshots__/showing-settings-for-correct-entity.test.tsx.snap @@ -108,11 +108,11 @@ exports[`Showing correct entity settings renders 1`] = ` If you have any questions or feedback, please join our - Lens Community slack channel + Lens Forums .

@@ -894,7 +894,40 @@ exports[`Showing correct entity settings when navigating to non-local cluster en > Proxy -
+
+
+
+ HTTP Proxy + +
+
+ +
+
+ + HTTP Proxy server. Used for communicating with Kubernetes API. + +
+