mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
# Backport This will backport the following commits from `main` to `8.x`: - [Add ESLINT constraints to detect inter-group dependencies (#194810)](https://github.com/elastic/kibana/pull/194810) <!--- Backport version: 8.9.8 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Gerard Soldevila","email":"gerard.soldevila@elastic.co"},"sourceCommit":{"committedDate":"2024-10-22T11:34:19Z","message":"Add ESLINT constraints to detect inter-group dependencies (#194810)\n\n## Summary\r\n\r\nAddresses https://github.com/elastic/kibana-team/issues/1175\r\n\r\nAs part of the **Sustainable Kibana Architecture** initiative, this PR\r\nsets the foundation to start classifying plugins in isolated groups,\r\nmatching our current solutions / project types:\r\n\r\n* It adds support for the following fields in the packages' manifests\r\n(kibana.jsonc):\r\n* `group?: 'search' | 'security' | 'observability' | 'platform' |\r\n'common'`\r\n * `visibility?: 'private' | 'shared'`\r\n\r\n* It proposes a folder structure to automatically infer groups:\r\n```javascript\r\n 'src/platform/plugins/shared': {\r\n group: 'platform',\r\n visibility: 'shared',\r\n },\r\n 'src/platform/plugins/internal': {\r\n group: 'platform',\r\n visibility: 'private',\r\n },\r\n 'x-pack/platform/plugins/shared': {\r\n group: 'platform',\r\n visibility: 'shared',\r\n },\r\n 'x-pack/platform/plugins/internal': {\r\n group: 'platform',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/observability/plugins': {\r\n group: 'observability',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/security/plugins': {\r\n group: 'security',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/search/plugins': {\r\n group: 'search',\r\n visibility: 'private',\r\n },\r\n```\r\n\r\n* If a plugin is moved to one of the specific locations above, the group\r\nand visibility in the manifest (if specified) must match those inferred\r\nfrom the path.\r\n* Plugins that are not relocated are considered: `group: 'common',\r\nvisibility: 'shared'` by default. As soon as we specify a custom\r\n`group`, the ESLINT rules will check violations against dependencies /\r\ndependants.\r\n\r\nThe ESLINT rules are pretty simple:\r\n* Plugins can only depend on:\r\n * Plugins in the same group\r\n * OR plugins with `'shared'` visibility\r\n* Plugins in `'observability', 'security', 'search'` groups are\r\nmandatorily `'private'`.\r\n\r\n---------\r\n\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"2a085e103afe8c7bdfb626d0dc683fc8be0e6c05","branchLabelMapping":{"^v9.0.0$":"main","^v8.17.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Team:Core","backport missing","v9.0.0","release_note:feature","backport:prev-minor"],"number":194810,"url":"https://github.com/elastic/kibana/pull/194810","mergeCommit":{"message":"Add ESLINT constraints to detect inter-group dependencies (#194810)\n\n## Summary\r\n\r\nAddresses https://github.com/elastic/kibana-team/issues/1175\r\n\r\nAs part of the **Sustainable Kibana Architecture** initiative, this PR\r\nsets the foundation to start classifying plugins in isolated groups,\r\nmatching our current solutions / project types:\r\n\r\n* It adds support for the following fields in the packages' manifests\r\n(kibana.jsonc):\r\n* `group?: 'search' | 'security' | 'observability' | 'platform' |\r\n'common'`\r\n * `visibility?: 'private' | 'shared'`\r\n\r\n* It proposes a folder structure to automatically infer groups:\r\n```javascript\r\n 'src/platform/plugins/shared': {\r\n group: 'platform',\r\n visibility: 'shared',\r\n },\r\n 'src/platform/plugins/internal': {\r\n group: 'platform',\r\n visibility: 'private',\r\n },\r\n 'x-pack/platform/plugins/shared': {\r\n group: 'platform',\r\n visibility: 'shared',\r\n },\r\n 'x-pack/platform/plugins/internal': {\r\n group: 'platform',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/observability/plugins': {\r\n group: 'observability',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/security/plugins': {\r\n group: 'security',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/search/plugins': {\r\n group: 'search',\r\n visibility: 'private',\r\n },\r\n```\r\n\r\n* If a plugin is moved to one of the specific locations above, the group\r\nand visibility in the manifest (if specified) must match those inferred\r\nfrom the path.\r\n* Plugins that are not relocated are considered: `group: 'common',\r\nvisibility: 'shared'` by default. As soon as we specify a custom\r\n`group`, the ESLINT rules will check violations against dependencies /\r\ndependants.\r\n\r\nThe ESLINT rules are pretty simple:\r\n* Plugins can only depend on:\r\n * Plugins in the same group\r\n * OR plugins with `'shared'` visibility\r\n* Plugins in `'observability', 'security', 'search'` groups are\r\nmandatorily `'private'`.\r\n\r\n---------\r\n\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"2a085e103afe8c7bdfb626d0dc683fc8be0e6c05"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","labelRegex":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/194810","number":194810,"mergeCommit":{"message":"Add ESLINT constraints to detect inter-group dependencies (#194810)\n\n## Summary\r\n\r\nAddresses https://github.com/elastic/kibana-team/issues/1175\r\n\r\nAs part of the **Sustainable Kibana Architecture** initiative, this PR\r\nsets the foundation to start classifying plugins in isolated groups,\r\nmatching our current solutions / project types:\r\n\r\n* It adds support for the following fields in the packages' manifests\r\n(kibana.jsonc):\r\n* `group?: 'search' | 'security' | 'observability' | 'platform' |\r\n'common'`\r\n * `visibility?: 'private' | 'shared'`\r\n\r\n* It proposes a folder structure to automatically infer groups:\r\n```javascript\r\n 'src/platform/plugins/shared': {\r\n group: 'platform',\r\n visibility: 'shared',\r\n },\r\n 'src/platform/plugins/internal': {\r\n group: 'platform',\r\n visibility: 'private',\r\n },\r\n 'x-pack/platform/plugins/shared': {\r\n group: 'platform',\r\n visibility: 'shared',\r\n },\r\n 'x-pack/platform/plugins/internal': {\r\n group: 'platform',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/observability/plugins': {\r\n group: 'observability',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/security/plugins': {\r\n group: 'security',\r\n visibility: 'private',\r\n },\r\n 'x-pack/solutions/search/plugins': {\r\n group: 'search',\r\n visibility: 'private',\r\n },\r\n```\r\n\r\n* If a plugin is moved to one of the specific locations above, the group\r\nand visibility in the manifest (if specified) must match those inferred\r\nfrom the path.\r\n* Plugins that are not relocated are considered: `group: 'common',\r\nvisibility: 'shared'` by default. As soon as we specify a custom\r\n`group`, the ESLINT rules will check violations against dependencies /\r\ndependants.\r\n\r\nThe ESLINT rules are pretty simple:\r\n* Plugins can only depend on:\r\n * Plugins in the same group\r\n * OR plugins with `'shared'` visibility\r\n* Plugins in `'observability', 'security', 'search'` groups are\r\nmandatorily `'private'`.\r\n\r\n---------\r\n\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"2a085e103afe8c7bdfb626d0dc683fc8be0e6c05"}}]}] BACKPORT-->
11 lines
549 B
JavaScript
11 lines
549 B
JavaScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the "Elastic License
|
|
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
|
|
* Public License v 1"; you may not use this file except in compliance with, at
|
|
* your election, the "Elastic License 2.0", the "GNU Affero General Public
|
|
* License v3.0 only", or the "Server Side Public License, v 1".
|
|
*/
|
|
|
|
require('../src/setup_node_env');
|
|
require('@kbn/manifest').runKbnManifestCli();
|