## Dearest Reviewers 👋 I've been working on this branch with @mistic and @tylersmalley and we're really confident in these changes. Additionally, this changes code in nearly every package in the repo so we don't plan to wait for reviews to get in before merging this. If you'd like to have a concern addressed, please feel free to leave a review, but assuming that nobody raises a blocker in the next 24 hours we plan to merge this EOD pacific tomorrow, 12/22. We'll be paying close attention to any issues this causes after merging and work on getting those fixed ASAP. 🚀 --- The operations team is not confident that we'll have the time to achieve what we originally set out to accomplish by moving to Bazel with the time and resources we have available. We have also bought ourselves some headroom with improvements to babel-register, optimizer caching, and typescript project structure. In order to make sure we deliver packages as quickly as possible (many teams really want them), with a usable and familiar developer experience, this PR removes Bazel for building packages in favor of using the same JIT transpilation we use for plugins. Additionally, packages now use `kbn_references` (again, just copying the dx from plugins to packages). Because of the complex relationships between packages/plugins and in order to prepare ourselves for automatic dependency detection tools we plan to use in the future, this PR also introduces a "TS Project Linter" which will validate that every tsconfig.json file meets a few requirements: 1. the chain of base config files extended by each config includes `tsconfig.base.json` and not `tsconfig.json` 1. the `include` config is used, and not `files` 2. the `exclude` config includes `target/**/*` 3. the `outDir` compiler option is specified as `target/types` 1. none of these compiler options are specified: `declaration`, `declarationMap`, `emitDeclarationOnly`, `skipLibCheck`, `target`, `paths` 4. all references to other packages/plugins use their pkg id, ie: ```js // valid { "kbn_references": ["@kbn/core"] } // not valid { "kbn_references": [{ "path": "../../../src/core/tsconfig.json" }] } ``` 5. only packages/plugins which are imported somewhere in the ts code are listed in `kbn_references` This linter is not only validating all of the tsconfig.json files, but it also will fix these config files to deal with just about any violation that can be produced. Just run `node scripts/ts_project_linter --fix` locally to apply these fixes, or let CI take care of automatically fixing things and pushing the changes to your PR. > **Example:** [` |
||
---|---|---|
.. | ||
src | ||
template | ||
index.ts | ||
jest.config.js | ||
jest.integration.config.js | ||
kibana.jsonc | ||
package.json | ||
README.md | ||
tsconfig.json |
Kibana Plugin Generator
This package can be used to generate a Kibana plugin from the Kibana repo.
Setup
Before you can use this plugin generator you must setup your Kibana development environment. If you can successfully run yarn kbn bootstrap
then you are ready to generate plugins!
Compatibility
The plugin generator became a part of the Kibana project as of Kibana 6.3. If you are targeting versions before Kibana 6.3 then use the Kibana plugin sao template.
If you are targeting Kibana 6.3 or greater then checkout the corresponding Kibana branch and run the plugin generator.
Quick Start
To target the current development version of Kibana just use the default master
branch.
node scripts/generate_plugin --name my_plugin_name -y
# generates a plugin in `plugins/my_plugin_name`
To target 6.8, use the 6.8
branch.
git checkout 6.x
yarn kbn bootstrap # always bootstrap when switching branches
node scripts/generate_plugin --name my_plugin_name -y
# generates a plugin for Kibana 6.8 in `../kibana-extra/my_plugin_name`
The generate script supports a few flags; run it with the --help
flag to learn more.
node scripts/generate_plugin --help
Updating
Since the Plugin Generator is now a part of the Kibana repo, when you update your local checkout of the Kibana repository and bootstrap
everything should be up to date!
NOTE: These commands should be run from the Kibana repo, and
upstream
is our convention for the git remote that references https://github.com/elastic/kibana.git, unless you added this remote you might need to useorigin
.
git pull upstream master
yarn kbn bootstrap
Plugin Development Scripts
Generated plugins receive a handful of scripts that can be used during development. Those scripts are detailed in the README.md file in each newly generated plugin, and expose the scripts provided by the Kibana plugin helpers, but here is a quick reference in case you need it:
NOTE: The following scripts should be run from the generated plugin.
-
yarn kbn bootstrap
Install dependencies and crosslink Kibana and all projects/plugins.
IMPORTANT: Use this script instead of
yarn
to install dependencies when switching branches, and re-run it whenever your dependencies change. -
yarn build
Build a distributable archive of your plugin.
To start kibana run the following command from Kibana root.
-
yarn start
Start kibana and it will automatically include this plugin. You can pass any arguments that you would normally send to
bin/kibana
yarn start --elasticsearch.hosts http://localhost:9220
For more information about any of these commands run yarn ${task} --help
. For a full list of tasks run yarn run
or take a look in the package.json
file.