Commit graph

15 commits

Author SHA1 Message Date
Spencer
afb09ccf8a
Transpile packages on demand, validate all TS projects (#146212)
## 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:** [`64e93e5`
(#146212)](64e93e5806)
When I merged main into my PR it included a change which removed the
`@kbn/core-injected-metadata-browser` package. After resolving the
conflicts I missed a few tsconfig files which included references to the
now removed package. The TS Project Linter identified that these
references were removed from the code and pushed a change to the PR to
remove them from the tsconfig.json files.

## No bazel? Does that mean no packages??
Nope! We're still doing packages but we're pretty sure now that we won't
be using Bazel to accomplish the 'distributed caching' and 'change-based
tasks' portions of the packages project.

This PR actually makes packages much easier to work with and will be
followed up with the bundling benefits described by the original
packages RFC. Then we'll work on documentation and advocacy for using
packages for any and all new code.

We're pretty confident that implementing distributed caching and
change-based tasks will be necessary in the future, but because of
recent improvements in the repo we think we can live without them for
**at least** a year.

## Wait, there are still BUILD.bazel files in the repo
Yes, there are still three webpack bundles which are built by Bazel: the
`@kbn/ui-shared-deps-npm` DLL, `@kbn/ui-shared-deps-src` externals, and
the `@kbn/monaco` workers. These three webpack bundles are still created
during bootstrap and remotely cached using bazel. The next phase of this
project is to figure out how to get the package bundling features
described in the RFC with the current optimizer, and we expect these
bundles to go away then. Until then any package that is used in those
three bundles still needs to have a BUILD.bazel file so that they can be
referenced by the remaining webpack builds.

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2022-12-22 19:00:29 -06:00
Tiago Costa
9f3c4c1609
chore(NA): move Bazel --progress_report_interval from common to build option (#144703) 2022-11-07 15:17:02 +00:00
Tiago Costa
73f1878983
chore(NA): include progress on Bazel tasks (#144275)
* chore(NA): include progress on Bazel tasks

* docs(NA): include docs on changed logic

* chore(NA): removes warning about no progress when building types for typechecking

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2022-11-01 01:03:52 +00:00
Tiago Costa
4eb8ab8d1a
chore(NA): upgrade bazel into v5 (#125332)
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2022-02-11 20:45:36 +00:00
Brian Seeders
e39faea65d
[bazel] Setup remote cache settings on bootstrap (#121445) 2022-01-18 14:56:16 -05:00
Tiago Costa
27f5ff326d
chore(NA): moves disk_cache and repository_cache bazel flags from common to specific commands (#118037) 2021-11-09 18:24:43 +00:00
Tyler Smalley
6dbb314f76
[bazel] Set cache for build, not common (#117163)
These settings are not valid outside build, and cause commands like shutdown to fail.

Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
2021-11-02 18:02:05 +00:00
Tyler Smalley
ab16b485cd
[ci] Disable Bazel cache on CI (#115428)
This is a short-term solution to reduce our hit count in Buildkite due to the increase in bootstraps so we can move forward with enabling Buildkite across all PRs.
2021-10-19 22:12:31 +01:00
Tiago Costa
2b236b7fa6
chore(NA): enable exports_directories_only on rules nodejs to improve performance (#104180)
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-07-02 00:14:40 +01:00
Tiago Costa
e3f5249c88
chore(NA): @kbn/pm new commands to support development on Bazel packages (#96465)
* chore(NA): add warnings both to run and watch commands about Bazel built packages

* chore(NA): add new commands to build and watch bazel packages

* docs(NA): add documentation about how to deal with bazel packages

* chore(NA): addressed majority of the feedback received except for improved error logging

* chore(NA): disable ibazel info notification.

* chore(NA): remove iBazel notification

* chore(NA): remove iBazel notification - kbn pm dist

* chore(NA): move show_results option to kbn-pm only

* chore(NA): patch build bazel command to include packages target list

* chore(NA): add pretty logging for elastic-datemath

* chore(NA): remove double error output from commands ran with Bazel

* fix(NA): include simple error message to preserve subprocess failure state

* docs(NA): missing docs about how to independentely watch non bazel packages

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-04-12 20:24:19 -04:00
Tiago Costa
f424b9cbb2
chore(NA): moving @elastic/datemath into bazel (#94665)
* chore(NA): majority of the changes needed to build elastic-datemath with bazel

* chore(NA): add missing bits on elastic-datemath package

* chore(NA): add missing build and watch scripts

* chore(NA): remove build scripts for elastic datemah

* chore(NA): remove typo from build baze production projects logs

* chore(NA): force install on CI

* chore(NA): introduce custom preserve symlinks resolver for jest

* chore(NA): update jest integration snapshot

* chore(NA): fix build for bazel packages

* chore(NA): correctly copy bazel built packages into final distributable build

* chore(NA): update kbn pm dist

* chore(NA): experimental new logic to handle bazel yarn rule rerun using yarn-integrity file

* chore(NA): update snapshots

* refact(NA): ensure yarn integrity exists into two methods

* chore(NA): fix ts error

* chore(NA): update snapshots

* chore(NA): update elastic-datemath build file to include ts_project rule

* chore(NA): update basic optimization test snapshots

* chore(NA): merge and solve conflicts cherry-pick from #96066

* chore(NA): update package.json and yarn.lock file

* chore(NA): update bazel/bin into bazel-bin on kbn-pm build bazel packages

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-04-01 22:51:32 +01:00
Tiago Costa
7c689a5b5b
chore(NA): stop grouping bazel out symlink folders (#96066) 2021-04-01 14:16:14 -05:00
Tiago Costa
86f1684076
chore(NA): manage npm dependencies within bazel (#92864)
* chore(NA): full WORKSPACE.bazel logic plus manage yarn dependencies with Bazel

* chore(NA): update BUILD.bazel files comments on root and packages

* chore(NA): add workspace file with useful data

* chore(NA): install deps through bazel

* chore(NA): update workspace file

* chore(NA): update into last rules nodejs

* chore(NA): ensure bazel always run yarn install

* chore(NA): support offline mode

* chore(NA): remove elastic-datemath

* chore(NA): restore bazel 4.0.0

* chore(NA): update kbn pm dist

* chore(NA): introduce force-install command

* docs(NA): update docs with new yarn kbn bootstrap flags

* chore(NA): use path.resolve on kbn bootstrap integrity check verification

* chore(NA): update .yarnrc

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): change cli argument typo

* chore(NA): fix spacing on kbn pm cli

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Tyler Smalley <tylersmalley@me.com>
2021-03-03 12:37:20 -05:00
Tiago Costa
a0d5d5614d
chore(NA): introduce new yarn kbn reset command to support bazel workflow (#89597)
* chore(NA): introduce new yarn kbn destroy command to support bazel workflow

* chore(NA): update wording for new kbn pm changes

* chore(NA): update .bazelrc.common

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): update .bazelrc

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): update packages/kbn-pm/src/commands/clean.ts

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): update packages/kbn-pm/src/commands/destroy.ts

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): update packages/kbn-pm/src/commands/clean.ts

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): update packages/kbn-pm/src/commands/destroy.ts

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): rename destroy command into reset

* chore(NA): update packages/kbn-pm/src/commands/clean.ts

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): restore old behaviour on kbn clean

* chore(NA): update reset command to delete bazel caches on disk

* chore(NA): update packages/kbn-pm/src/commands/clean.ts

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): update prefix to match bazel defined one for cache settings

* chore(NA): update kbn pm dist file

* chore(NA): update kbn pm dist

* chore(NA): update gitignore

* chore(NA): add new ignore files after changed bazel aggregated folder

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Tyler Smalley <tylersmalley@me.com>
2021-02-03 22:02:34 +00:00
Tiago Costa
ecf7dd4628
chore(NA): add ignore and rc files for bazel (#89524)
* chore(NA): add bazel related ignore rules

* chore(NA): add bazelrc files setup

* chore(NA): reword on bazelrc comment

* chore(NA): update .eslintignore

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

* chore(NA): rename .bazelrc into .bazelrc-ci

* chore(NA): update .gitignore

Co-authored-by: Tyler Smalley <tylersmalley@me.com>

Co-authored-by: Tyler Smalley <tylersmalley@me.com>
2021-01-28 14:26:01 +00:00