From 7a76de1ef947d7706d4ef4e99b5f131536b22673 Mon Sep 17 00:00:00 2001 From: Tyler Ohlsen Date: Tue, 5 Sep 2023 12:21:56 -0700 Subject: [PATCH] Add lint script, workflow, and pre-commit hook Signed-off-by: Tyler Ohlsen --- ...s-workflow.yml => draft-release-notes.yml} | 0 ...link-check-workflow.yml => link-check.yml} | 0 .github/workflows/lint.yml | 47 ++++++ .gitignore | 3 +- common/constants.ts | 1 + package.json | 17 ++- public/app.tsx | 7 +- public/render_app.tsx | 2 +- yarn.lock | 142 ++++++++++++++++++ 9 files changed, 210 insertions(+), 9 deletions(-) rename .github/workflows/{draft-release-notes-workflow.yml => draft-release-notes.yml} (100%) rename .github/workflows/{link-check-workflow.yml => link-check.yml} (100%) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/draft-release-notes-workflow.yml b/.github/workflows/draft-release-notes.yml similarity index 100% rename from .github/workflows/draft-release-notes-workflow.yml rename to .github/workflows/draft-release-notes.yml diff --git a/.github/workflows/link-check-workflow.yml b/.github/workflows/link-check.yml similarity index 100% rename from .github/workflows/link-check-workflow.yml rename to .github/workflows/link-check.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..64481e35 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,47 @@ +name: Linting workflow +on: + push: + branches: + - "*" + pull_request: + branches: + - "*" +env: + OPENSEARCH_DASHBOARDS_VERSION: 'main' +jobs: + run-lint: + name: Run lint script + if: github.repository == 'opensearch-project/opensearch-ai-flow-dashboards' + steps: + - name: Checkout OpenSearch Dashboards + uses: actions/checkout@v2 + with: + repository: opensearch-project/OpenSearch-Dashboards + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + path: OpenSearch-Dashboards + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version-file: './OpenSearch-Dashboards/.nvmrc' + registry-url: 'https://registry.npmjs.org' + - name: Install Yarn + # Need to use bash to avoid having a windows/linux specific step + shell: bash + run: | + YARN_VERSION=$(node -p "require('./OpenSearch-Dashboards/package.json').engines.yarn") + echo "Installing yarn@$YARN_VERSION" + npm i -g yarn@$YARN_VERSION + - run: node -v + - run: yarn -v + - name: Checkout plugin + uses: actions/checkout@v2 + with: + path: OpenSearch-Dashboards/plugins/opensearch-ai-flow-dashboards + - name: Bootstrap the plugin + run: | + cd OpenSearch-Dashboards/plugins/opensearch-ai-flow-dashboards + yarn osd bootstrap + - name: Run lint script + run: | + cd OpenSearch-Dashboards/plugins/opensearch-ai-flow-dashboards + yarn lint:es common/* public/* server/* diff --git a/.gitignore b/.gitignore index 00ab76a4..7511a09c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ coverage offline-module-cache/v2/* offline-module-cache/v1/* target -._.DS_Store \ No newline at end of file +._.DS_Store +.eslintcache \ No newline at end of file diff --git a/common/constants.ts b/common/constants.ts index 3cc13ee1..ad2fff73 100644 --- a/common/constants.ts +++ b/common/constants.ts @@ -2,6 +2,7 @@ * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ + export const PLUGIN_ID = 'aiFlowDashboards'; export const BASE_NODE_API_PATH = '/api/ai_flow'; diff --git a/package.json b/package.json index ae6192bd..43ef7116 100644 --- a/package.json +++ b/package.json @@ -8,21 +8,30 @@ "plugin_name": "aiFlowDashboards", "plugin_zip_name": "ai-flow-dashboards" }, - "private": true, "scripts": { "plugin-helpers": "../../scripts/use_node ../../scripts/plugin_helpers", "osd": "../../scripts/use_node ../../scripts/osd", - "opensearch": "node ../../scripts/opensearch", - "lint": "node ../../scripts/eslint .", + "opensearch": "../../scripts/use_node ../../scripts/opensearch", + "lint:es": "../../scripts/use_node ../../scripts/eslint", + "lint:es:precommit": "yarn lint:es common/* public/* server/*", "build": "yarn plugin-helpers build && echo Renaming artifact to $npm_package_config_plugin_zip_name-$npm_package_config_plugin_version.zip && mv ./build/$npm_package_config_plugin_name*.zip ./build/$npm_package_config_plugin_zip_name-$npm_package_config_plugin_version.zip" }, + "repository": { + "type": "git", + "url": "https://github.com/opensearch-project/opensearch-ai-flow-dashboards.git" + }, + "pre-commit": [ + "lint:es:precommit" + ], "lint-staged": { "*.{ts,tsx,js,jsx,json,css,md}": [ "prettier --write", "git add" ] }, - "devDependencies": {}, "dependencies": {}, + "devDependencies": { + "pre-commit": "^1.2.2" + }, "resolutions": {} } diff --git a/public/app.tsx b/public/app.tsx index 4ad21a9e..2e46c62a 100644 --- a/public/app.tsx +++ b/public/app.tsx @@ -12,6 +12,7 @@ import { Navigation, APP_PATH } from './utils'; import { Overview, UseCases, Workflows } from './pages'; import { CoreServicesConsumer } from './core_services'; +// eslint-disable-next-line @typescript-eslint/no-empty-interface interface Props extends RouteComponentProps {} export const AiFlowDashboardsApp = (props: Props) => { @@ -58,16 +59,16 @@ export const AiFlowDashboardsApp = (props: Props) => { } + render={(routeProps: RouteComponentProps) => } /> } + render={(routeProps: RouteComponentProps) => } /> {/* Defaulting to Overview page */} } + render={(routeProps: RouteComponentProps) => } /> diff --git a/public/render_app.tsx b/public/render_app.tsx index bd80668d..da187cd2 100644 --- a/public/render_app.tsx +++ b/public/render_app.tsx @@ -22,7 +22,7 @@ export const renderApp = ( )} - > + /> , element ); diff --git a/yarn.lock b/yarn.lock index fb57ccd1..dc3c9a99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,3 +2,145 @@ # yarn lockfile v1 +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +concat-stream@^1.4.7: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +os-shim@^0.1.2: + version "0.1.3" + resolved "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz" + integrity sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A== + +pre-commit@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" + integrity sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA== + dependencies: + cross-spawn "^5.0.1" + spawn-sync "^1.0.15" + which "1.2.x" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +spawn-sync@^1.0.15: + version "1.0.15" + resolved "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz" + integrity sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw== + dependencies: + concat-stream "^1.4.7" + os-shim "^0.1.2" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +which@1.2.x, which@^1.2.9: + version "1.2.14" + resolved "https://registry.npmjs.org/which/-/which-1.2.14.tgz" + integrity sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw== + dependencies: + isexe "^2.0.0" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==