From 6852388145b5b58101b5ea273fa50d411f6afd09 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Wed, 24 Jun 2020 08:59:11 +0300 Subject: [PATCH] linter Signed-off-by: Jari Kolehmainen --- .azure-pipelines.yml | 2 + .eslintrc.js | 82 ++++ Makefile | 3 + package.json | 7 +- src/common/system-ca.ts | 11 +- src/common/utils/app-version.ts | 4 + src/main/kube-auth-proxy.ts | 5 +- src/main/kubectl.ts | 9 +- src/main/lens-binary.ts | 9 +- src/main/menu.ts | 12 +- src/renderer/_vue/App.vue | 8 +- .../_vue/components/MainMenu/MainMenu.vue | 92 ++--- src/renderer/api/index.ts | 8 +- src/renderer/api/kube-api.ts | 44 +-- src/renderer/api/terminal-api.ts | 3 +- .../+network-endpoints/endpoint-details.tsx | 2 +- .../endpoint-subset-list.tsx | 78 ++-- .../service-details-endpoint.tsx | 34 +- .../+workloads-pods/pod-container-env.tsx | 16 +- .../+workloads-pods/pod-details.tsx | 28 +- .../components/+workloads/workloads.tsx | 2 +- .../components/ace-editor/ace-editor.tsx | 8 +- src/renderer/components/app.tsx | 2 +- src/renderer/components/dock/terminal.ts | 6 +- src/renderer/components/input/input.tsx | 6 +- src/renderer/i18n.ts | 4 +- src/renderer/theme.store.ts | 4 +- yarn.lock | 357 +++++++++++++++++- 28 files changed, 642 insertions(+), 204 deletions(-) create mode 100644 .eslintrc.js diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index 3416024a14..74cde42f85 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -119,6 +119,8 @@ jobs: condition: eq(variables.CACHE_RESTORED, 'true') - script: make install-deps displayName: Install dependencies + - script: make lint + displayName: Lint - script: make test displayName: Run tests - bash: | diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..864626a72a --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,82 @@ +module.exports = { + overrides: [ + { + files: [ + "src/renderer/**/*.js", + "build/**/*.js", + "src/renderer/**/*.vue" + ], + extends: [ + 'eslint:recommended', + 'plugin:vue/recommended' + ], + env: { + node: true + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + rules: { + "indent": ["error", 2], + "no-unused-vars": "off", + "vue/order-in-components": "off", + "vue/attributes-order": "off", + "vue/max-attributes-per-line": "off" + } + }, + { + files: [ + "build/*.ts", + "src/**/*.ts", + "spec/**/*.ts" + ], + parser: "@typescript-eslint/parser", + extends: [ + 'plugin:@typescript-eslint/recommended', + ], + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + rules: { + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-empty-interface": "off", + "indent": ["error", 2] + }, + }, + { + files: [ + "src/renderer/**/*.tsx", + ], + parser: "@typescript-eslint/parser", + extends: [ + 'plugin:@typescript-eslint/recommended', + ], + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + jsx: true, + }, + rules: { + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/interface-name-prefix": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-empty-interface": "off", + "indent": ["error", 2] + }, + } + ] +}; diff --git a/Makefile b/Makefile index 5341642275..8a2cab3d51 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,9 @@ compile-dev: dev: install-deps compile-dev yarn dev # run electron and watch files +lint: + yarn lint + test: yarn test diff --git a/package.json b/package.json index 1aca672e80..19731b2d9a 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "i18n:compile": "lingui compile", "download-bins": "concurrently yarn:download:*", "download:kubectl": "yarn run ts-node build/download_kubectl.ts", - "download:helm": "yarn run ts-node build/download_helm.ts" + "download:helm": "yarn run ts-node build/download_helm.ts", + "lint": "eslint $@ --ext js,ts,tsx,vue --max-warnings=0 src/" }, "config": { "bundledKubectlVersion": "1.17.4", @@ -241,6 +242,8 @@ "@types/webpack": "^4.41.17", "@types/webpack-dev-server": "^3.11.0", "@types/webpack-node-externals": "^1.7.1", + "@typescript-eslint/eslint-plugin": "^3.4.0", + "@typescript-eslint/parser": "^3.4.0", "ace-builds": "^1.4.11", "ansi_up": "^4.0.4", "babel-core": "^7.0.0-beta.3", @@ -259,6 +262,8 @@ "electron": "^6.1.12", "electron-builder": "^22.7.0", "electron-notarize": "^0.3.0", + "eslint": "^7.3.1", + "eslint-plugin-vue": "^6.2.2", "file-loader": "^6.0.0", "flex.box": "^3.4.4", "fork-ts-checker-webpack-plugin": "^5.0.0", diff --git a/src/common/system-ca.ts b/src/common/system-ca.ts index df21d5be87..957f374785 100644 --- a/src/common/system-ca.ts +++ b/src/common/system-ca.ts @@ -1,9 +1,14 @@ import { isMac, isWindows } from "./vars"; +import winca from "win-ca" +import macca from "mac-ca" +import logger from "../main/logger" if (isMac) { - // fixme: mac-ca import error - // require("mac-ca"); + for (const crt of macca.all()) { + const attributes = crt.issuer?.attributes?.map((a: any) => `${a.name}=${a.value}`) + logger.debug("Using host CA: " + attributes.join(",")) + } } if (isWindows) { - require("win-ca").inject("+") // see: https://github.com/ukoloff/win-ca#caveats + winca.inject("+") // see: https://github.com/ukoloff/win-ca#caveats } diff --git a/src/common/utils/app-version.ts b/src/common/utils/app-version.ts index 0f3808125c..0ed2742983 100644 --- a/src/common/utils/app-version.ts +++ b/src/common/utils/app-version.ts @@ -3,3 +3,7 @@ import packageInfo from "../../../package.json" export function getAppVersion(): string { return packageInfo.version; } + +export function getBundledKubectlVersion(): string { + return packageInfo.config.bundledKubectlVersion; +} diff --git a/src/main/kube-auth-proxy.ts b/src/main/kube-auth-proxy.ts index 51ac06db85..53569ac002 100644 --- a/src/main/kube-auth-proxy.ts +++ b/src/main/kube-auth-proxy.ts @@ -41,7 +41,6 @@ export class KubeAuthProxy { } } }) - configWatcher.on("error", () => {}) const clusterUrl = url.parse(this.cluster.apiUrl) let args = [ "proxy", @@ -57,7 +56,9 @@ export class KubeAuthProxy { }) this.proxyProcess.on("exit", (code) => { logger.error(`proxy ${this.cluster.contextName} exited with code ${code}`) - this.sendIpcLogMessage( `proxy exited with code ${code}`, "stderr").catch((_) => {}) + this.sendIpcLogMessage( `proxy exited with code ${code}`, "stderr").catch((err: Error) => { + logger.debug("failed to send IPC log message: " + err.message) + }) this.proxyProcess = null configWatcher.close() }) diff --git a/src/main/kubectl.ts b/src/main/kubectl.ts index 3547a21000..33ffbdc5ce 100644 --- a/src/main/kubectl.ts +++ b/src/main/kubectl.ts @@ -9,8 +9,9 @@ import { globalRequestOpts } from "../common/request" import * as lockFile from "proper-lockfile" import { helmCli } from "./helm-cli" import { userStore } from "../common/user-store" +import { getBundledKubectlVersion} from "../common/utils/app-version" -const bundledVersion = require("../../package.json").config.bundledKubectlVersion +const bundledVersion = getBundledKubectlVersion() const kubectlMap: Map = new Map([ ["1.7", "1.8.15"], ["1.8", "1.9.10"], @@ -194,16 +195,16 @@ export class Kubectl { const file = fs.createWriteStream(this.path) stream.on("complete", () => { logger.debug("kubectl binary download finished") - file.end(() => {}) + file.end() }) stream.on("error", (error) => { logger.error(error) - fs.unlink(this.path, () => {}) + fs.unlink(this.path, null) reject(error) }) file.on("close", () => { logger.debug("kubectl binary download closed") - fs.chmod(this.path, 0o755, () => {}) + fs.chmod(this.path, 0o755, null) resolve() }) stream.pipe(file) diff --git a/src/main/lens-binary.ts b/src/main/lens-binary.ts index b79c00d2c2..beeeda3704 100644 --- a/src/main/lens-binary.ts +++ b/src/main/lens-binary.ts @@ -159,21 +159,18 @@ export class LensBinary { stream.on("complete", () => { logger.info(`Download of ${this.originalBinaryName} finished`) - file.end(() => { - }) + file.end() }) stream.on("error", (error) => { logger.error(error) - fs.unlink(binaryPath, () => { - }) + fs.unlink(binaryPath, null) throw(error) }) return new Promise((resolve, reject) => { file.on("close", () => { logger.debug(`${this.originalBinaryName} binary download closed`) - if (!this.tarPath) fs.chmod(binaryPath, 0o755, () => { - }) + if (!this.tarPath) fs.chmod(binaryPath, 0o755, null) resolve() }) stream.pipe(file) diff --git a/src/main/menu.ts b/src/main/menu.ts index a6dad9d54d..e670ab5955 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -78,11 +78,11 @@ export default function initMenu(opts: MenuOptions, promiseIpc: any) { label: 'Add Cluster...', click: opts.addClusterHook, }, - { - label: 'Cluster Settings', - click: opts.clusterSettingsHook, - enabled: false - } + { + label: 'Cluster Settings', + click: opts.clusterSettingsHook, + enabled: false + } ] } } @@ -215,4 +215,4 @@ export default function initMenu(opts: MenuOptions, promiseIpc: any) { promiseIpc.on("disableClusterSettingsMenuItem", () => { setClusterSettingsEnabled(false) }); -}; +} diff --git a/src/renderer/_vue/App.vue b/src/renderer/_vue/App.vue index d4ded76902..c8544fe3fe 100644 --- a/src/renderer/_vue/App.vue +++ b/src/renderer/_vue/App.vue @@ -1,12 +1,12 @@ diff --git a/src/renderer/_vue/components/MainMenu/MainMenu.vue b/src/renderer/_vue/components/MainMenu/MainMenu.vue index 74676d68cd..5ab9391e05 100644 --- a/src/renderer/_vue/components/MainMenu/MainMenu.vue +++ b/src/renderer/_vue/components/MainMenu/MainMenu.vue @@ -6,7 +6,7 @@ :cluster="cluster" /> - +

This is the quick launch menu. @@ -19,57 +19,57 @@