diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..126c83964 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,7 @@ +node_modules +/data +/build +/target +/.eslintrc.js +/cypress.config.js +!.cypress/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 35fde0175..6ba689e33 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -14,7 +14,37 @@ module.exports = { '@elastic/eslint-config-kibana', 'plugin:@elastic/eui/recommended', 'plugin:react-hooks/recommended', + "eslint:recommended", + "plugin:cypress/recommended", + "plugin:import/recommended", + "prettier" ], + env: { + 'cypress/globals': true, + }, + plugins: [ + 'cypress', + ], + rules: { + '@osd/eslint/no-restricted-paths': [ + 'error', + { + basePath: __dirname, + zones: [ + { + target: ['(public|server)/**/*'], + from: ['../../packages/**/*','packages/**/*'], + }, + ], + }, + ], + // Add cypress specific rules here + 'cypress/no-assigning-return-values': 'error', + 'cypress/no-unnecessary-waiting': 'error', + 'cypress/assertion-before-screenshot': 'warn', + 'cypress/no-force': 'warn', + 'cypress/no-async-tests': 'error', + }, overrides: [ { files: ['**/*.{js,ts,tsx}'], @@ -29,4 +59,5 @@ module.exports = { }, }, ], + "ignorePatterns": ["**/*.d.ts"] }; diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..d66abe536 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,61 @@ +name: Lint + +on: [push, pull_request] + +env: + PLUGIN_NAME: dashboards-observability + OPENSEARCH_DASHBOARDS_VERSION: 'main' + +jobs: + build: + name: Lint + runs-on: ubuntu-latest + + steps: + - name: Checkout OpenSearch Dashboards + uses: actions/checkout@v2 + with: + repository: opensearch-project/Opensearch-Dashboards + ref: ${{ env.OPENSEARCH_DASHBOARDS_VERSION }} + path: OpenSearch-Dashboards + + - name: Checkout dashboards observability + uses: actions/checkout@v2 + with: + path: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} + + - name: Get node and yarn versions + working-directory: ${{ env.WORKING_DIR }} + id: versions_step + run: | + echo "::set-output name=node_version::$(cat ./OpenSearch-Dashboards/.nvmrc | cut -d"." -f1)" + echo "::set-output name=yarn_version::$(node -p "(require('./OpenSearch-Dashboards/package.json').engines.yarn).match(/[.0-9]+/)[0]")" + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: ${{ steps.versions_step.outputs.node_version }} + registry-url: 'https://registry.npmjs.org' + + - name: Install correct yarn version for OpenSearch Dashboards + run: | + npm uninstall -g yarn + echo "Installing yarn ${{ steps.versions_step.outputs.yarn_version }}" + npm i -g yarn@${{ steps.versions_step.outputs.yarn_version }} + + - name: Bootstrap the plugin + working-directory: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} + run: + yarn osd bootstrap + + - name: lint code base + working-directory: OpenSearch-Dashboards/plugins/${{ env.PLUGIN_NAME }} + run: | + git fetch origin main + CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB origin/main | grep -E "\.(js|ts|tsx)$") + if [ -n "$CHANGED_FILES" ]; then + echo "Linting changed files..." + yarn lint $CHANGED_FILES + else + echo "No JavaScript/TypeScript files changed." + fi \ No newline at end of file