1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

more configuration tweaks

This commit is contained in:
Roman 2020-06-13 06:53:47 +03:00
parent 9aa815bc14
commit ec7b8661d9
12 changed files with 198 additions and 183 deletions

View File

@ -3,15 +3,16 @@
"productName": "Lens", "productName": "Lens",
"description": "Lens - The Kubernetes IDE", "description": "Lens - The Kubernetes IDE",
"version": "3.5.0-beta.1", "version": "3.5.0-beta.1",
"main": "src/main", "main": "dist/main.js",
"scripts": { "scripts": {
"dev": "DEBUG=true concurrently yarn:dev:*", "dev": "yarn compile:dll && concurrently yarn:dev:* && yarn dev-run",
"dev:main": "webpack-cli --watch --cache --config webpack.main.ts", "dev-run": "electron .",
"dev:render": "webpack-cli --watch --cache --config webpack.renderer.ts", "dev:main": "DEBUG=true webpack --watch --config webpack.main.ts",
"compile": "concurrently 'yarn download-bins' 'yarn i18n:compile' 'yarn make-dll' && concurrently yarn:compile:*", "dev:renderer": "DEBUG=true webpack --watch --config webpack.renderer.ts",
"compile": "concurrently 'yarn download-bins' 'yarn i18n:compile' 'yarn compile:dll' && concurrently yarn:compile:*",
"compile:main": "webpack -p --progress --config webpack.main.ts", "compile:main": "webpack -p --progress --config webpack.main.ts",
"compile:renderer": "webpack -p --progress --config webpack.renderer.ts", "compile:renderer": "webpack -p --progress --config webpack.renderer.ts",
"make-dll": "webpack --config webpack.dll.ts", "compile:dll": "webpack --config webpack.dll.ts",
"build:linux": "yarn compile && electron-builder --linux --dir -c.productName=LensDev", "build:linux": "yarn compile && electron-builder --linux --dir -c.productName=LensDev",
"build:mac": "yarn compile && electron-builder --mac --dir -c.productName=LensDev", "build:mac": "yarn compile && electron-builder --mac --dir -c.productName=LensDev",
"build:win": "yarn compile && electron-builder --win --dir -c.productName=LensDev", "build:win": "yarn compile && electron-builder --win --dir -c.productName=LensDev",
@ -20,7 +21,7 @@
"dist": "yarn compile && electron-builder -p onTag", "dist": "yarn compile && electron-builder -p onTag",
"dist:win": "yarn compile && electron-builder -p onTag --x64 --ia32", "dist:win": "yarn compile && electron-builder -p onTag --x64 --ia32",
"dist:dir": "yarn dist --dir -c.compression=store -c.mac.identity=null", "dist:dir": "yarn dist --dir -c.compression=store -c.mac.identity=null",
"postinstall": "patch-package && concurrently 'electron-builder install-app-deps' 'yarn make-dll'", "postinstall": "patch-package && concurrently 'electron-builder install-app-deps' 'yarn compile:dll'",
"i18n:extract": "lingui extract", "i18n:extract": "lingui extract",
"i18n:compile": "lingui compile", "i18n:compile": "lingui compile",
"download-bins": "concurrently yarn:download:*", "download-bins": "concurrently yarn:download:*",
@ -183,7 +184,6 @@
"request-promise-native": "^1.0.8", "request-promise-native": "^1.0.8",
"semver": "^7.3.2", "semver": "^7.3.2",
"shell-env": "^3.0.0", "shell-env": "^3.0.0",
"ssl-root-cas": "^1.3.1",
"tar": "^6.0.2", "tar": "^6.0.2",
"tcp-port-used": "^1.0.1", "tcp-port-used": "^1.0.1",
"tempy": "^0.5.0", "tempy": "^0.5.0",

View File

@ -1,7 +1,8 @@
import "mac-ca" import { isMac, isWindows } from "./vars";
import winca from "win-ca/api"
import { isWindows } from "./vars";
if (isWindows) { if (isMac) {
winca.inject("+") // see: https://github.com/ukoloff/win-ca#caveats // require("mac-ca"); // fixme: crashes
}
if (isWindows) {
require("win-ca").inject("+") // see: https://github.com/ukoloff/win-ca#caveats
} }

View File

@ -1,134 +1,22 @@
// Main process // Main process
import "../common/system-ca" import "../common/system-ca"
import "../common/prometheus-providers" import { app, BrowserWindow } from "electron"
import { app, dialog, protocol } from "electron"
import { PromiseIpc } from "electron-promise-ipc"
import path from "path"
import { format as formatUrl } from "url"
import logger from "./logger"
import initMenu from "./menu"
import * as proxy from "./proxy"
import { WindowManager } from "./window-manager";
import { clusterStore } from "../common/cluster-store"
import { tracker } from "./tracker"
import { ClusterManager } from "./cluster-manager";
import AppUpdater from "./app-updater"
import { shellSync } from "./shell-sync"
import { getFreePort } from "./port"
import { mangleProxyEnv } from "./proxy-env"
import { findMainWebContents } from "./webcontents"
import { registerStaticProtocol } from "../common/register-static";
import { isDevelopment, isMac } from "../common/vars";
mangleProxyEnv() console.log('MAIN', process.resourcesPath)
if (app.commandLine.getSwitchValue("proxy-server") !== "") {
process.env.HTTPS_PROXY = app.commandLine.getSwitchValue("proxy-server")
}
const promiseIpc = new PromiseIpc({ timeout: 2000 })
let windowManager: WindowManager = null; app.whenReady().then(function start() {
let clusterManager: ClusterManager = null; console.log('APP READY')
const vmURL = isDevelopment ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}` : formatUrl({
pathname: path.join(__dirname, "index.html"),
protocol: "file",
slashes: true,
})
async function main() { var window = new BrowserWindow({
await shellSync() width: 600,
height: 500,
webPreferences: {
devTools: true,
nodeIntegration: true,
}
});
const updater = new AppUpdater() window.loadFile("index.html");
updater.start(); window.show();
});
tracker.event("app", "start");
registerStaticProtocol();
protocol.registerFileProtocol('store', (request, callback) => {
const url = request.url.substr(8)
callback(path.normalize(`${app.getPath("userData")}/${url}`))
}, (error) => {
if (error) console.error('Failed to register protocol')
})
let port: number = null
// find free port
try {
port = await getFreePort()
} catch (error) {
logger.error(error)
await dialog.showErrorBox("Lens Error", "Could not find a free port for the cluster proxy")
app.quit();
}
// create cluster manager
clusterManager = new ClusterManager(clusterStore.getAllClusterObjects(), port)
// run proxy
try {
proxy.listen(port, clusterManager)
} catch (error) {
logger.error(`Could not start proxy (127.0.0:${port}): ${error.message}`)
await dialog.showErrorBox("Lens Error", `Could not start proxy (127.0.0:${port}): ${error.message || "unknown error"}`)
app.quit();
}
// boot windowmanager
windowManager = new WindowManager();
windowManager.showMain(vmURL)
initMenu({
logoutHook: async () => {
// IPC send needs webContents as we're sending it to renderer
promiseIpc.send('logout', findMainWebContents(), {}).then((data: any) => {
logger.debug("logout IPC sent");
})
},
showPreferencesHook: async () => {
// IPC send needs webContents as we're sending it to renderer
promiseIpc.send('navigate', findMainWebContents(), { name: 'preferences-page' }).then((data: any) => {
logger.debug("navigate: preferences IPC sent");
})
},
addClusterHook: async () => {
promiseIpc.send('navigate', findMainWebContents(), { name: "add-cluster-page" }).then((data: any) => {
logger.debug("navigate: add-cluster-page IPC sent");
})
},
showWhatsNewHook: async () => {
promiseIpc.send('navigate', findMainWebContents(), { name: "whats-new-page" }).then((data: any) => {
logger.debug("navigate: whats-new-page IPC sent");
})
},
clusterSettingsHook: async () => {
promiseIpc.send('navigate', findMainWebContents(), { name: "cluster-settings-page" }).then((data: any) => {
logger.debug("navigate: cluster-settings-page IPC sent");
})
},
}, promiseIpc)
}
app.on("ready", main)
app.on('window-all-closed', function () {
// On OS X it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (!isMac) {
app.quit();
}
else {
windowManager = null
if (clusterManager) clusterManager.stop()
}
})
app.on("activate", () => {
if (!windowManager) {
logger.debug("activate main window")
windowManager = new WindowManager(false)
windowManager.showMain(vmURL)
}
})
app.on("will-quit", async (event) => {
event.preventDefault(); // To allow mixpanel sending to be executed
if (clusterManager) clusterManager.stop()
app.exit(0);
})

134
src/main/index_backup.ts Normal file
View File

@ -0,0 +1,134 @@
// Main process
import "../common/system-ca"
import "../common/prometheus-providers"
import { app, dialog, protocol } from "electron"
import { PromiseIpc } from "electron-promise-ipc"
import path from "path"
import { format as formatUrl } from "url"
import logger from "./logger"
import initMenu from "./menu"
import * as proxy from "./proxy"
import { WindowManager } from "./window-manager";
import { clusterStore } from "../common/cluster-store"
import { tracker } from "./tracker"
import { ClusterManager } from "./cluster-manager";
import AppUpdater from "./app-updater"
import { shellSync } from "./shell-sync"
import { getFreePort } from "./port"
import { mangleProxyEnv } from "./proxy-env"
import { findMainWebContents } from "./webcontents"
import { registerStaticProtocol } from "../common/register-static";
import { isDevelopment, isMac } from "../common/vars";
mangleProxyEnv()
if (app.commandLine.getSwitchValue("proxy-server") !== "") {
process.env.HTTPS_PROXY = app.commandLine.getSwitchValue("proxy-server")
}
const promiseIpc = new PromiseIpc({ timeout: 2000 })
let windowManager: WindowManager = null;
let clusterManager: ClusterManager = null;
const vmURL = isDevelopment ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}` : formatUrl({
pathname: path.join(__dirname, "index.html"),
protocol: "file",
slashes: true,
})
async function main() {
await shellSync()
const updater = new AppUpdater()
updater.start();
tracker.event("app", "start");
registerStaticProtocol();
protocol.registerFileProtocol('store', (request, callback) => {
const url = request.url.substr(8)
callback(path.normalize(`${app.getPath("userData")}/${url}`))
}, (error) => {
if (error) console.error('Failed to register protocol')
})
let port: number = null
// find free port
try {
port = await getFreePort()
} catch (error) {
logger.error(error)
await dialog.showErrorBox("Lens Error", "Could not find a free port for the cluster proxy")
app.quit();
}
// create cluster manager
clusterManager = new ClusterManager(clusterStore.getAllClusterObjects(), port)
// run proxy
try {
proxy.listen(port, clusterManager)
} catch (error) {
logger.error(`Could not start proxy (127.0.0:${port}): ${error.message}`)
await dialog.showErrorBox("Lens Error", `Could not start proxy (127.0.0:${port}): ${error.message || "unknown error"}`)
app.quit();
}
// boot windowmanager
windowManager = new WindowManager();
windowManager.showMain(vmURL)
initMenu({
logoutHook: async () => {
// IPC send needs webContents as we're sending it to renderer
promiseIpc.send('logout', findMainWebContents(), {}).then((data: any) => {
logger.debug("logout IPC sent");
})
},
showPreferencesHook: async () => {
// IPC send needs webContents as we're sending it to renderer
promiseIpc.send('navigate', findMainWebContents(), { name: 'preferences-page' }).then((data: any) => {
logger.debug("navigate: preferences IPC sent");
})
},
addClusterHook: async () => {
promiseIpc.send('navigate', findMainWebContents(), { name: "add-cluster-page" }).then((data: any) => {
logger.debug("navigate: add-cluster-page IPC sent");
})
},
showWhatsNewHook: async () => {
promiseIpc.send('navigate', findMainWebContents(), { name: "whats-new-page" }).then((data: any) => {
logger.debug("navigate: whats-new-page IPC sent");
})
},
clusterSettingsHook: async () => {
promiseIpc.send('navigate', findMainWebContents(), { name: "cluster-settings-page" }).then((data: any) => {
logger.debug("navigate: cluster-settings-page IPC sent");
})
},
}, promiseIpc)
}
app.on("ready", main)
app.on('window-all-closed', function () {
// On OS X it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (!isMac) {
app.quit();
}
else {
windowManager = null
if (clusterManager) clusterManager.stop()
}
})
app.on("activate", () => {
if (!windowManager) {
logger.debug("activate main window")
windowManager = new WindowManager(false)
windowManager.showMain(vmURL)
}
})
app.on("will-quit", async (event) => {
event.preventDefault(); // To allow mixpanel sending to be executed
if (clusterManager) clusterManager.stop()
app.exit(0);
})

20
src/renderer/index.html Executable file
View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lens - The Kubernetes IDE</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
<div id="app"></div>
<div id="app_vue"></div>
<script src="dll.js"></script>
</body>
</html>

View File

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lens - The Kubernetes IDE</title>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
</head>
<body>
<div id="app"></div>
<div id="app_vue"></div>
</body>
</html>

View File

@ -7,7 +7,7 @@
"module": "CommonJS", "module": "CommonJS",
"lib": ["ESNext", "DOM", "DOM.Iterable"], "lib": ["ESNext", "DOM", "DOM.Iterable"],
"moduleResolution": "Node", "moduleResolution": "Node",
"sourceMap": false, "sourceMap": true,
"strict": false, "strict": false,
"noImplicitAny": true, "noImplicitAny": true,
"noUnusedLocals": false, "noUnusedLocals": false,

4
types/mocks.d.ts vendored
View File

@ -1,5 +1,3 @@
declare module "electron-promise-ipc" declare module "electron-promise-ipc"
declare module "fix-path"
declare module "mac-ca" declare module "mac-ca"
declare module "win-ca/*" declare module "win-ca"
declare module "ssl-root-cas"

View File

@ -2,8 +2,8 @@ import path from "path";
import webpack from "webpack"; import webpack from "webpack";
import { isDevelopment, outDir } from "./src/common/vars"; import { isDevelopment, outDir } from "./src/common/vars";
export const libName = "dll" export const fileName = "dll"
export const manifestPath = path.resolve(outDir, `${libName}.manifest.json`); export const manifestPath = path.resolve(outDir, `${fileName}.manifest.json`);
export const externalPackages = [ export const externalPackages = [
"react", "react-dom", "react", "react-dom",
@ -16,15 +16,15 @@ export default function (): webpack.Configuration {
mode: isDevelopment ? "development" : "production", mode: isDevelopment ? "development" : "production",
cache: isDevelopment, cache: isDevelopment,
entry: { entry: {
[libName]: externalPackages [fileName]: externalPackages
}, },
output: { output: {
library: libName, library: fileName,
libraryTarget: "commonjs" libraryTarget: "commonjs2"
}, },
plugins: [ plugins: [
new webpack.DllPlugin({ new webpack.DllPlugin({
name: libName, name: fileName,
path: manifestPath, path: manifestPath,
}) })
], ],

View File

@ -1,11 +1,12 @@
import path from "path"; import path from "path";
import webpack from "webpack"; import webpack from "webpack";
import { isProduction, mainDir, outDir } from "./src/common/vars"; import { isDevelopment, isProduction, mainDir, outDir } from "./src/common/vars";
export default function (): webpack.Configuration { export default function (): webpack.Configuration {
return { return {
target: "electron-main", target: "electron-main",
mode: isProduction ? "production" : "development", mode: isProduction ? "production" : "development",
cache: isDevelopment,
entry: { entry: {
main: path.resolve(mainDir, "index.ts"), main: path.resolve(mainDir, "index.ts"),
}, },

View File

@ -4,26 +4,25 @@ import HtmlWebpackPlugin from "html-webpack-plugin";
import MiniCssExtractPlugin from "mini-css-extract-plugin"; import MiniCssExtractPlugin from "mini-css-extract-plugin";
import TerserWebpackPlugin from "terser-webpack-plugin"; import TerserWebpackPlugin from "terser-webpack-plugin";
import { isDevelopment, isProduction, outDir, rendererDir } from "./src/common/vars"; import { isDevelopment, isProduction, outDir, rendererDir } from "./src/common/vars";
import { manifestPath, externalPackages } from "./webpack.dll"; import { externalPackages, manifestPath } from "./webpack.dll";
export default function (): webpack.Configuration { export default function (): webpack.Configuration {
const tsConfigFile = path.resolve("./tsconfig.json"); const htmlTemplate = path.resolve(rendererDir, "index.html");
const htmlTemplate = path.resolve(rendererDir, "template.html");
const sassCommonVars = path.resolve(rendererDir, "components/vars.scss"); const sassCommonVars = path.resolve(rendererDir, "components/vars.scss");
const tsConfigFile = path.resolve("tsconfig.json");
return { return {
target: "electron-renderer", target: "electron-renderer",
mode: isProduction ? "production" : "development", mode: isProduction ? "production" : "development",
devtool: isProduction ? "source-map" : "cheap-eval-source-map", devtool: isProduction ? "source-map" : "cheap-module-eval-source-map",
cache: isDevelopment,
externals: externalPackages, externals: externalPackages,
cache: isDevelopment,
entry: { entry: {
renderer: path.resolve(rendererDir, "index.tsx"), renderer: path.resolve(rendererDir, "index.tsx"),
// renderer_vue: path.resolve(rendererDir, "_vue/index.js"), // renderer_vue: path.resolve(rendererDir, "_vue/index.js"),
}, },
output: { output: {
path: outDir, path: outDir,
publicPath: '/',
filename: '[name].js', filename: '[name].js',
chunkFilename: 'chunks/[name].js', chunkFilename: 'chunks/[name].js',
}, },

View File

@ -942,11 +942,6 @@
exec-sh "^0.3.2" exec-sh "^0.3.2"
minimist "^1.2.0" minimist "^1.2.0"
"@coolaj86/urequest@^1.3.6":
version "1.3.7"
resolved "https://registry.yarnpkg.com/@coolaj86/urequest/-/urequest-1.3.7.tgz#66a1d66378dd6534e9c8e68948bf09acf32bab77"
integrity sha512-PPrVYra9aWvZjSCKl/x1pJ9ZpXda1652oJrPBYy5rQumJJMkmTBN3ux+sK2xAUwVvv2wnewDlaQaHLxLwSHnIA==
"@develar/schema-utils@~2.6.5": "@develar/schema-utils@~2.6.5":
version "2.6.5" version "2.6.5"
resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
@ -10102,13 +10097,6 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2" safer-buffer "^2.0.2"
tweetnacl "~0.14.0" tweetnacl "~0.14.0"
ssl-root-cas@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/ssl-root-cas/-/ssl-root-cas-1.3.1.tgz#6b0566f7de4f0e6be99fbd93dbfbe5c7ab33b949"
integrity sha512-KR8J210Wfvjh+iNE9jcQEgbG0VG2713PHreItx6aNCPnkFO8XChz1cJ4iuCGeBj0+8wukLmgHgJqX+O5kRjPkQ==
dependencies:
"@coolaj86/urequest" "^1.3.6"
ssri@^6.0.1: ssri@^6.0.1:
version "6.0.1" version "6.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"