Skip to content

Commit

Permalink
Merge main changes to Feature-Anywhere branch (#4295)
Browse files Browse the repository at this point in the history
* Fix header icon (#3910) (#3915)

* fixes header change
* Update src/core/public/chrome/ui/header/header_help_menu.tsx
* fixes snapshots



---------



(cherry picked from commit 3cca088)

Signed-off-by: Ashwin P Chandran <[email protected]>
Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Josh Romero <[email protected]>

* Add server side private IP blocking for data source endpoints validation (#3912)

Signed-off-by: Kristen Tian <[email protected]>

* Docs (Jest): Update jest documentation links (#3931)

Signed-off-by: Josh Romero <[email protected]>

* Revert "[CCI] Replace jquery usage in console plugin with native methods (#3733)" (#3929)

This reverts commit ffe4556.

* [BUG][Dashboard listing] push to history if dashboard otherwise nav (#3922)

History push will just to the current route. However, dashboardsProvider
was implemented with the expectation that it was a different app.

So when a plugin registered it was attempting to navigate to
`app/dashboard#/app/{url}`

Add tests and extra data test subject.

Signed-off-by: Kawika Avilla <[email protected]>

* remove jquery console release note for #3929 revert (#3930)

Signed-off-by: Josh Romero <[email protected]>
Co-authored-by: Ashwin P Chandran <[email protected]>

* [CCI] Update js-yaml to v4.0.5 (#3770)

* Update js-yaml to 4.0.5 (#3659)
* Update CHANGELOG.md (#3659)

Co-authored-by: Sergey Myssak <[email protected]>
Signed-off-by: Andrey Myssak <[email protected]>

---------

Signed-off-by: Andrey Myssak <[email protected]>
Signed-off-by: Josh Romero <[email protected]>
Co-authored-by: Sergey Myssak <[email protected]>
Co-authored-by: Josh Romero <[email protected]>

* Update README.md (#3788)

* Update README.md

Signed-off-by: Melissa Vagi <[email protected]>

* Update README.md

Co-authored-by: Miki <[email protected]>

---------

Signed-off-by: Melissa Vagi <[email protected]>
Co-authored-by: Miki <[email protected]>
Co-authored-by: Miki <[email protected]>

* Bump yaml to 2.2.2 (#3947)

Signed-off-by: Manasvini B Suryanarayana <[email protected]>
Co-authored-by: Sean Neumann <[email protected]>

* Bump `joi` to v14 to avoid the possibility of prototype poisoning in a nested dependency (#3952)

Signed-off-by: Miki <[email protected]>

* [Doc] Add communication guide (#3837)

* docs(COMMUNICATION): Add communication guide

with info on slack, forum, and developer office hours
link from README, CONTRIBUTING, DEVELOPER_GUIDE

Signed-off-by: Josh Romero <[email protected]>

---------

Signed-off-by: Josh Romero <[email protected]>

* Temporarily hardcode chromedriver to 112.0.0 to enable all ftr tests (#3976)

The latest version of chromedriver is 112.0.1 which does not support
node 14. This PR hardcodes chromedriver to 112.0.0 temporarily. Pls
revert it once we bump to node 18.

Issue Resolved
#3975

Signed-off-by: ananzh <[email protected]>

* Fix wording and duplicate code in embeddable example plugin (#3911)

* Fix wording and duplicate code in embeddable example plugin

Signed-off-by: abbyhu2000 <[email protected]>

* Fix some wording in the embeddable readme

Signed-off-by: abbyhu2000 <[email protected]>

---------

Signed-off-by: abbyhu2000 <[email protected]>

* [CI] setup Chrome and utilize binary path (#3997)

Within the CI, the virtual runner that we are utilizing has Chrome
installed already. The version of Chrome is installed periodically.

The most recent version of Chrome requires updates to dependencies
that drop support for Node 14.

This downloads chrome in the CI and then checks the chromedriver
from the environment variable `TEST_BROWSER_BINARY_PATH`.

Signed-off-by: Kawika Avilla <[email protected]>

* [Dashboards listing] fix listing limit (#4021)

Initial page size was passed to the search function instead
of the listing limit causing the max amount received to be
significantly less than the previously implementation.

Saved objects per page is `20` by default and the listing
limit per page is `1000` by default.

Issue:
#4017

Signed-off-by: Kawika Avilla <[email protected]>

* [CCI] Fix EUI/OUI type errors (#3798)

* Update find_test_subject imports for tests

Signed-off-by: Alexei Karikov <[email protected]>

* Update to available imports for findTestSubject

Signed-off-by: Alexei Karikov <[email protected]>

* Fix available import for Query and custom icon

Signed-off-by: Alexei Karikov <[email protected]>

* Add changelog entry

Signed-off-by: Alexei Karikov <[email protected]>

* Add ts-ignore

Signed-off-by: Alexei Karikov <[email protected]>

---------

Signed-off-by: Alexei Karikov <[email protected]>
Co-authored-by: Qingyang(Abby) Hu <[email protected]>

* Fix bottom bar visibility using create portal (#3336) (#3978)

Signed-off-by: Sergey Myssak <[email protected]>
Co-authored-by: Andrey Myssak <[email protected]>

* Adds threshold to code coverage changes for project (#4040)

* Fixes code coverage workflow failures for the project test due to inderect flakey changes

Signed-off-by: Ashwin P Chandran <[email protected]>

* Adds changelog

Signed-off-by: Ashwin P Chandran <[email protected]>

---------

Signed-off-by: Ashwin P Chandran <[email protected]>

* Updates PR template for screenshots and test instructions (#4042)

Signed-off-by: Ashwin P Chandran <[email protected]>

* Replace re2 with RegExp in timeline and add unit tests (#3908)

Remove re2 usage and replace it with JavaScript built-in
RegExp object. Also add more unit tests to make sure that
using RegExp has same expressions as using re2 library.

Issue Resolve
#3901

Signed-off-by: Anan Zhuang <[email protected]>

* [Console] [CCI] Remove unused ul element and its custom styling. (#3993)

* remove unused ul element

Signed-off-by: Sirazh Gabdullin <[email protected]>

* Update CHANGELOG.md

Signed-off-by: Sirazh Gabdullin <[email protected]>

---------

Signed-off-by: Sirazh Gabdullin <[email protected]>

* Add 1.3.10 release note (#4060) (#4063)

* Add release note for 1.3.10



* Address comments and add one CVE PR



---------


(cherry picked from commit 4371587)

Signed-off-by: abbyhu2000 <[email protected]>
Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* [Multiple Datasource] Support Amazon OpenSearch Serverless (#3957)

* [Multiple Datasource]Support Amazon OpenSearch Serverless in SigV4
* remove experimental text in yml
* Refactor create data source form for authentication

Signed-off-by: Su <[email protected]>

* Remove Sass from `tile_map` plugin (#4110)

* Remove Sass from tile_map plugin

Signed-off-by: Matt Provost <[email protected]>

* Update changelog

Signed-off-by: Matt Provost <[email protected]>

---------

Signed-off-by: Matt Provost <[email protected]>

* Design for New Saved Object Service Interface for Custom Repository (#3954)

* Adds design document for new saved object service interface for custom repository

Signed-off-by: Bandini Bhopi <[email protected]>

* enhance grouping for context menu options (#3924)

* enhance grouping for context menu options
* build panels tests and more comments

Signed-off-by: David Sinclair <[email protected]>

---------

Signed-off-by: David Sinclair <[email protected]>
Signed-off-by: David Sinclair <[email protected]>
Signed-off-by: Josh Romero <[email protected]>
Co-authored-by: Josh Romero <[email protected]>

* Adding Tao and Zilong to MAINTAINERS (#4137)

* Adding Tao and Zilong to MAINTAINERS

Signed-off-by: Yan Zeng <[email protected]>

* [MD]Update data-test-subj for functional tests & fix bug in edit flow (#4126)

Signed-off-by: Su <[email protected]>

* Add support for Node.js >=14.20.1 <19 (#4071)

* Bump Node.js requirements to 18

Signed-off-by: Miki <[email protected]>

* Replace `lmdb-store` with `lmdb`

Signed-off-by: Miki <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* Bump `elastic-apm-node` to the latest minor

Signed-off-by: Miki <[email protected]>

* Replace webpack and plugins with a patched version that uses xxhash64
* Use `xxhash64` as the hashing algorithm of webpack
* Upgrade `globby`
* Remove `fibers`

Signed-off-by: Miki <[email protected]>

* Replace `fs.rmdir` with `fs.rm` in cross-platform tests

Signed-off-by: Miki <[email protected]>

* Increase listener limit

Signed-off-by: Miki <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* Add promise-stripping serializer

Signed-off-by: Miki <[email protected]>

* Bump heap for CI

Signed-off-by: Miki <[email protected]>

* Correct use of fs/promises in @osd/pm

Signed-off-by: Miki <[email protected]>

* Use fs/promise in plugin post-install cleanup

Signed-off-by: Miki <[email protected]>

* Set the test server's host to `0.0.0.0`

Signed-off-by: Miki <[email protected]>

* Sync `.node-version` file

Signed-off-by: Miki <[email protected]>

* Support both `isPrimary`, for Node 18, and `isMaster`, for Node 14

Signed-off-by: Miki <[email protected]>

* Add types when using `isDeepStrictEqual`

Signed-off-by: Miki <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* Add names to `SchemaError` to log more specific errors

Signed-off-by: Miki <[email protected]>

* Fix failing vega visualization tests outside the CI

Signed-off-by: Miki <[email protected]>

* Fix snapshot of errors thrown for undefined accessors

Signed-off-by: Miki <[email protected]>

* Fix flakiness of log_rotator

Signed-off-by: Miki <[email protected]>

* Fix asynchronous `fs` usafe in plugin discover

Signed-off-by: Miki <[email protected]>

* Fix mocks in @osd/optimizer

Signed-off-by: Miki <[email protected]>

* Fix memory leaks caused by setting states on unloaded components

Signed-off-by: Miki <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* Bump Node in Dockerfile

Signed-off-by: Miki <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* Remove the response `close` event as an indicator of the requesting finishing

#3601 (comment)

Signed-off-by: Miki <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* [BWC] Timeout after 3 mins of waiting for OSD to be running in tests

Signed-off-by: Miki <[email protected]>

* Make build use the same node version that tests are run against

Signed-off-by: Miki <[email protected]>

* Make Node resolve DNS by IPv4 first
* This is helpful to resolve `locahost` to `127.0.0.1`

Signed-off-by: Miki <[email protected]>

* Standardize patterns used by plugin discovery
* Enhance absolute path serialization on  Windows

Signed-off-by: Miki <[email protected]>

* Mock fetch in SenseEditor tests

Signed-off-by: Miki <[email protected]>

* Restore node-sass usage to fix build performance

* `sass-loader@10` is the last version that supports webpack@4
* `sass` is extremely slow when using the legacy API (`render`) and to use the "Modern API" (`compileStringAsync`), `sass-loader@13` would be needed.
* The performance of `sass@10` is made acceptable only with `fibers` but that is deprecated and doesn't work on Node 18

Signed-off-by: Anan Zhuang <[email protected]>
Signed-off-by: Miki <[email protected]>

* Revert "[CI] setup Chrome and utilize binary path (#3997)"

This reverts commit 0188d05

Signed-off-by: Miki <[email protected]>

* Prevent fast-fail while running functional test in CI

Signed-off-by: Miki <[email protected]>

* Revert "Temporarily hardcode chromedriver to 112.0.0 to enable all ftr tests (#3976)"

This reverts commit 5ea0cbe.

Signed-off-by: Miki <[email protected]>

* Save Cypress results artifacts during CI

Signed-off-by: Miki <[email protected]>

* Add missing required dependency on `set-value`

* Also force all to ^4.1.0 due to a vulnerability fixed in 3.1.0.

Signed-off-by: Miki <[email protected]>

* Prevent multiple calls to bootstrap's shutdown

Signed-off-by: Miki <[email protected]>

* Use Node 18.16.0 in distributions

* Bump jest-canvas-mock to fix failing tests
* Extend Node engines versions

Signed-off-by: Miki <[email protected]>

* Normalize test snapshots across Node 14, 16, and 18

Signed-off-by: Miki <[email protected]>

* Update CHANGELOG for Node.js >=14.20.1 <19 support

Signed-off-by: Miki <[email protected]>

---------

Signed-off-by: Miki <[email protected]>
Signed-off-by: Miki <[email protected]>
Signed-off-by: Anan Zhuang <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>

* Remove timeline application  (#3971)

* Remove timeline application

In this PR, we made the following changes:
First of all, clean out some advanced settings specific to timeline
application and tests.
* Remove timelion:default_rows: This setting defines the default
number of rows that a new Timelion sheet should have.
* Remove timelion:default_rows: This setting defines the default
number of columns that a new Timelion sheet should have.
* Remove timelion:showTutorial.

Second, remove src/plugin/timeline completely and modify timeline vis.
Third, remove all the functional tests related to timeline application.

Issue resolve
#3519
#3593

Signed-off-by: ananzh <[email protected]>

---------

Signed-off-by: Anan Zhuang <[email protected]>
Signed-off-by: ananzh <[email protected]>

* Use `exec` in the CLI shell scripts to prevent new process creation (#3955)

Signed-off-by: Miki <[email protected]>

* chore (lychee): Add company.net to exclusion list (#4171)

Signed-off-by: Josh Romero <[email protected]>

* Bundle Node 14 as a fallback for operating systems that cannot run Node 18 (#4151)

Signed-off-by: ananzh <[email protected]>
Signed-off-by: Miki <[email protected]>

* Refactor authentication description message (#4179)

resolves #4173

Signed-off-by: Su <[email protected]>

* [CI] skip checksum verification for cypress tests (#4188)

Snapshot checksum verification caused failure in test runs:
#4187

Skipping the verification to enable the tests run as the snapshot
of OpenSearch should not impact the tests.

Issue:
n/a

Signed-off-by: Kawika Avilla <[email protected]>

* Adds plugin manifest config to define OpenSearch plugin dependency and verifies if it is installed (#3116)

Resolves Issue -#2799

Signed-off-by: Manasvini B Suryanarayana <[email protected]>

* [Table Visualization] Remove custom styling for text-align:center in favor of OUI utility class. (#4164)

* remove custom styling in favor of oui utility class

Signed-off-by: Sirazh Gabdullin <[email protected]>

* Update CHANGELOG.md

Signed-off-by: Sirazh Gabdullin <[email protected]>

---------

Signed-off-by: Sirazh Gabdullin <[email protected]>

* Add new MAINTAINERS to CODEOWNERS file (#4199)

* Add new code owners

Signed-off-by: Tao Liu <[email protected]>

* modify changelog.md

Signed-off-by: Tao Liu <[email protected]>

---------

Signed-off-by: Tao Liu <[email protected]>

* Add 2.8.0 release notes (#4204)

* Add 2.8.0 release notes

Co-authored-by: Josh Romero <[email protected]>
Signed-off-by: Kawika Avilla <[email protected]>

* Chore(CHANGELOG): Update with 2.7, 2.8 releases (#3890)

* Chore(CHANGELOG): Update with 2.7 release
* align changelog with 2.8 release notes
* update 2.8 release notes
* add 1.3.10 release notes to changelog

---------

Signed-off-by: Josh Romero <[email protected]>

* [Saved Object Service] Adds Repository Factory Provider (#4149)

* Adds Repository Factory Provider

Signed-off-by: Bandini Bhopi <[email protected]>

* add category option for context menus (#4144)

* enhance grouping for context menu options

Signed-off-by: David Sinclair <[email protected]>

* change log

Signed-off-by: David Sinclair <[email protected]>

* remove type export

Signed-off-by: David Sinclair <[email protected]>

* revert border and prevent destroy options

Signed-off-by: David Sinclair <[email protected]>

* update comments for building panels

Signed-off-by: David Sinclair <[email protected]>

* build panels tests and more comments

Signed-off-by: David Sinclair <[email protected]>

* add category option for context menus

Signed-off-by: David Sinclair <[email protected]>

* changelog

Signed-off-by: David Sinclair <[email protected]>

* add order to groups

Signed-off-by: David Sinclair <[email protected]>

* documentation, shorter copyrighty, minor cleanup

Signed-off-by: David Sinclair <[email protected]>

* changelog

Signed-off-by: David Sinclair <[email protected]>

---------

Signed-off-by: David Sinclair <[email protected]>
Signed-off-by: David Sinclair <[email protected]>
Signed-off-by: Ashish Agrawal <[email protected]>
Co-authored-by: Ashish Agrawal <[email protected]>

* [CCI] Add bluebird replaces for src/plugins/saved_objects (#4026)

* Add bluebird replaces for src/plugins/saved_objects
* Add changelog entry

---------

Signed-off-by: Alexei Karikov <[email protected]>

* Validate and correct change log after 2.8 release (#4275)

Signed-off-by: Su <[email protected]>

---------

Signed-off-by: Ashwin P Chandran <[email protected]>
Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Signed-off-by: Kristen Tian <[email protected]>
Signed-off-by: Josh Romero <[email protected]>
Signed-off-by: Kawika Avilla <[email protected]>
Signed-off-by: Andrey Myssak <[email protected]>
Signed-off-by: Melissa Vagi <[email protected]>
Signed-off-by: Manasvini B Suryanarayana <[email protected]>
Signed-off-by: Miki <[email protected]>
Signed-off-by: ananzh <[email protected]>
Signed-off-by: abbyhu2000 <[email protected]>
Signed-off-by: Alexei Karikov <[email protected]>
Signed-off-by: Sergey Myssak <[email protected]>
Signed-off-by: Anan Zhuang <[email protected]>
Signed-off-by: Sirazh Gabdullin <[email protected]>
Signed-off-by: Su <[email protected]>
Signed-off-by: Matt Provost <[email protected]>
Signed-off-by: Bandini Bhopi <[email protected]>
Signed-off-by: David Sinclair <[email protected]>
Signed-off-by: David Sinclair <[email protected]>
Signed-off-by: Yan Zeng <[email protected]>
Signed-off-by: Miki <[email protected]>
Signed-off-by: Tao Liu <[email protected]>
Signed-off-by: Ashish Agrawal <[email protected]>
Signed-off-by: Ashish Agrawal <[email protected]>
Co-authored-by: opensearch-trigger-bot[bot] <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Josh Romero <[email protected]>
Co-authored-by: Kristen Tian <[email protected]>
Co-authored-by: Kawika Avilla <[email protected]>
Co-authored-by: Ashwin P Chandran <[email protected]>
Co-authored-by: Andrey Myssak <[email protected]>
Co-authored-by: Sergey Myssak <[email protected]>
Co-authored-by: Melissa Vagi <[email protected]>
Co-authored-by: Miki <[email protected]>
Co-authored-by: Miki <[email protected]>
Co-authored-by: Manasvini B Suryanarayana <[email protected]>
Co-authored-by: Sean Neumann <[email protected]>
Co-authored-by: Anan Zhuang <[email protected]>
Co-authored-by: Qingyang(Abby) Hu <[email protected]>
Co-authored-by: Alexei Karikov <[email protected]>
Co-authored-by: Andrey Myssak <[email protected]>
Co-authored-by: Sirazh Gabdullin <[email protected]>
Co-authored-by: Zhongnan Su <[email protected]>
Co-authored-by: Matt Provost <[email protected]>
Co-authored-by: Bandini <[email protected]>
Co-authored-by: David Sinclair <[email protected]>
Co-authored-by: Yan Zeng <[email protected]>
Co-authored-by: Tao Liu <[email protected]>
  • Loading branch information
1 parent 83e2ff9 commit 2362c35
Show file tree
Hide file tree
Showing 31 changed files with 1,223 additions and 261 deletions.
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -1 +1 @@
* @ananzh @kavilla @seanneumann @AMoo-Miki @ashwin-pc @joshuarrrr @abbyhu2000 @zengyan-amazon @kristenTian @zhongnansu @manasvinibs
* @ananzh @kavilla @seanneumann @AMoo-Miki @ashwin-pc @joshuarrrr @abbyhu2000 @zengyan-amazon @kristenTian @zhongnansu @manasvinibs @ZilongX @Flyingliuhub
7 changes: 5 additions & 2 deletions .github/workflows/cypress_workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ env:
START_CMD: 'node ../scripts/opensearch_dashboards --dev --no-base-path --no-watch'
OPENSEARCH_SNAPSHOT_CMD: 'node ../scripts/opensearch snapshot'
SPEC: 'cypress/integration/core-opensearch-dashboards/opensearch-dashboards/**/*.js,'
CYPRESS_ENV: 'env CYPRESS_VISBUILDER_ENABLED=true CYPRESS_DATASOURCE_MANAGEMENT_ENABLED=false'
CYPRESS_BROWSER: 'chromium'
CYPRESS_VISBUILDER_ENABLED: true
CYPRESS_DATASOURCE_MANAGEMENT_ENABLED: false
OSD_SNAPSHOT_SKIP_VERIFY_CHECKSUM: true

jobs:
cypress-tests:
Expand Down Expand Up @@ -76,7 +79,7 @@ jobs:
working-directory: ${{ env.FTR_PATH }}
start: ${{ env.OPENSEARCH_SNAPSHOT_CMD }}, ${{ env.START_CMD }}
wait-on: 'http://localhost:9200, http://localhost:5601'
command: ${{ env.CYPRESS_ENV }} yarn cypress:run-without-security --browser chromium --spec ${{ env.SPEC }}
command: yarn cypress:run-without-security --browser ${{ env.CYPRESS_BROWSER }} --spec ${{ env.SPEC }}

# Screenshots are only captured on failure, will change this once we do visual regression tests
- uses: actions/upload-artifact@v3
Expand Down
742 changes: 521 additions & 221 deletions CHANGELOG.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { PanelViewWithSharingLong } from './panel_view_with_sharing_long';
import { PanelEdit } from './panel_edit';
import { PanelEditWithDrilldowns } from './panel_edit_with_drilldowns';
import { PanelEditWithDrilldownsAndContextActions } from './panel_edit_with_drilldowns_and_context_actions';
import { PanelGroupOptionsAndContextActions } from './panel_group_options_and_context_actions';

export const ContextMenuExamples: React.FC = () => {
return (
Expand All @@ -59,7 +60,6 @@ export const ContextMenuExamples: React.FC = () => {
<PanelViewWithSharingLong />
</EuiFlexItem>
</EuiFlexGroup>

<EuiFlexGroup>
<EuiFlexItem>
<PanelEdit />
Expand All @@ -71,6 +71,11 @@ export const ContextMenuExamples: React.FC = () => {
<PanelEditWithDrilldownsAndContextActions />
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexGroup>
<EuiFlexItem>
<PanelGroupOptionsAndContextActions />
</EuiFlexItem>
</EuiFlexGroup>
</EuiText>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import * as React from 'react';
import { EuiButton, EuiContextMenu, EuiPopover } from '@elastic/eui';
import useAsync from 'react-use/lib/useAsync';
import { buildContextMenuForActions, Action } from '../../../../src/plugins/ui_actions/public';
import { sampleAction } from './util';

export const PanelGroupOptionsAndContextActions: React.FC = () => {
const [open, setOpen] = React.useState(false);

const context = {};
const trigger: any = 'TEST_TRIGGER';
const drilldownGrouping: Action['grouping'] = [
{
id: 'drilldowns',
getDisplayName: () => 'Uncategorized group',
getIconType: () => 'popout',
order: 20,
},
];
const exampleGroup: Action['grouping'] = [
{
id: 'example',
getDisplayName: () => 'Example group',
getIconType: () => 'cloudStormy',
order: 20,
category: 'visAug',
},
];
const alertingGroup: Action['grouping'] = [
{
id: 'alerting',
getDisplayName: () => 'Alerting',
getIconType: () => 'cloudStormy',
order: 20,
category: 'visAug',
},
];
const anomaliesGroup: Action['grouping'] = [
{
id: 'anomalies',
getDisplayName: () => 'Anomalies',
getIconType: () => 'cloudStormy',
order: 30,
category: 'visAug',
},
];
const actions = [
sampleAction('test-1', 100, 'Edit visualization', 'pencil'),
sampleAction('test-2', 99, 'Clone panel', 'partial'),

sampleAction('test-9', 10, 'Create drilldown', 'plusInCircle', drilldownGrouping),
sampleAction('test-10', 9, 'Manage drilldowns', 'list', drilldownGrouping),

sampleAction('test-11', 10, 'Example action', 'dashboardApp', exampleGroup),
sampleAction('test-11', 10, 'Alertin action 1', 'dashboardApp', alertingGroup),
sampleAction('test-12', 9, 'Alertin action 2', 'dashboardApp', alertingGroup),
sampleAction('test-13', 8, 'Anomalies 1', 'cloudStormy', anomaliesGroup),
sampleAction('test-14', 7, 'Anomalies 2', 'link', anomaliesGroup),
];

const panels = useAsync(() =>
buildContextMenuForActions({
actions: actions.map((action) => ({ action, context, trigger })),
})
);

return (
<EuiPopover
button={<EuiButton onClick={() => setOpen((x) => !x)}>Grouping with categories</EuiButton>}
isOpen={open}
panelPaddingSize="none"
anchorPosition="downLeft"
closePopover={() => setOpen(false)}
>
<EuiContextMenu initialPanelId={'mainMenu'} panels={panels.value} />
</EuiPopover>
);
};
4 changes: 1 addition & 3 deletions release-notes/opensearch-dashboards.release-notes-1.3.10.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,13 @@

### 🐛 Bug Fixes

- [TSVB] Fix the link to "serial differencing aggregation" documentation ([#3503](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3503))

### 📝 Documentation

- Update jest documentation links ([#3939](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3939))

### 🛠 Maintenance

- Add threshold to code coverage changes for project ([#4050](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4050))
- Temporarily hardcode chromedriver to 112.0.0 to enable all ftr tests ([#4039]())
- Temporarily hardcode chromedriver to 112.0.0 to enable all ftr tests ([#4039](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4039))
- Update MAINTAINERS.md and CODEOWNERS ([#3938](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3938))
- Add opensearch-dashboards-docker-dev to .gitignore ([#3781](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3781))
35 changes: 35 additions & 0 deletions release-notes/opensearch-dashboards.release-notes-2.8.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## Version 2.8.0 Release Notes

### Deprecations

- Remove timeline application ([#3971](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3971))

### 🛡 Security

- [CVE-2023-2251] Bump `yaml` to `2.2.2` ([#3947](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3947))

### 📈 Features/Enhancements

- [Multiple Datasource] Support Amazon OpenSearch Serverless ([#3957](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3957))
- Add support for Node.js >=14.20.1 <19 ([#4071](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4071))
- Bundle Node.js 14 as a fallback for operating systems that cannot run Node.js 18 ([#4151](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4151))
- Enhance grouping for context menus ([#3924](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3924))

### 🐛 Bug Fixes

- [BUG] Fix bottom bar visibility using createPortal ([#3978](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3978))
- [Dashboards Listing] Fix listing limit to utilize `savedObjects:listingLimit` instead of `savedObjects:perPage` ([#4021](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4021))

### 🚞 Infrastructure

- Install chrome driver for functional tests from path set by environment variable `TEST_BROWSER_BINARY_PATH`([#3997](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3997))
- Add threshold to code coverage config to prevent workflow failures ([#4040](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4040))
- [CI] Skip checksum verification on OpenSearch snapshot for cypress tests ([#4188](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4188))

### 🛠 Maintenance

- Use `exec` in the CLI shell scripts to prevent new process creation ([#3955](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3955))

## 🎉 Welcome

Thank you to all the first-time contributors who made this release possible: @sikhote, @SergeyMyssak!
1 change: 1 addition & 0 deletions src/core/public/plugins/plugins_service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ function createManifest(
version: 'some-version',
configPath: ['path'],
requiredPlugins: required,
requiredOpenSearchPlugins: optional,
optionalPlugins: optional,
requiredBundles: [],
};
Expand Down
1 change: 1 addition & 0 deletions src/core/server/legacy/legacy_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ export class LegacyService implements CoreService {
addClientWrapper: setupDeps.core.savedObjects.addClientWrapper,
registerType: setupDeps.core.savedObjects.registerType,
getImportExportObjectLimit: setupDeps.core.savedObjects.getImportExportObjectLimit,
setRepositoryFactoryProvider: setupDeps.core.savedObjects.setRepositoryFactoryProvider,
},
status: {
isStatusPageAnonymous: setupDeps.core.status.isStatusPageAnonymous,
Expand Down
79 changes: 79 additions & 0 deletions src/core/server/plugins/discovery/plugin_manifest_parser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,79 @@ test('return error when manifest contains unrecognized properties', async () =>
});
});

describe('requiredOpenSearchPlugins', () => {
test('return error when plugin `requiredOpenSearchPlugins` is a string and not an array of string', async () => {
mockReadFilePromise.mockResolvedValue(
Buffer.from(
JSON.stringify({
id: 'id1',
version: '7.0.0',
server: true,
requiredOpenSearchPlugins: 'abc',
})
)
);

await expect(parseManifest(pluginPath, packageInfo, logger)).rejects.toMatchObject({
message: `The "requiredOpenSearchPlugins" in plugin manifest for "id1" should be an array of strings. (invalid-manifest, ${pluginManifestPath})`,
type: PluginDiscoveryErrorType.InvalidManifest,
path: pluginManifestPath,
});
});

test('return error when `requiredOpenSearchPlugins` is not a string', async () => {
mockReadFilePromise.mockResolvedValue(
Buffer.from(JSON.stringify({ id: 'id2', version: '7.0.0', requiredOpenSearchPlugins: 2 }))
);

await expect(parseManifest(pluginPath, packageInfo, logger)).rejects.toMatchObject({
message: `The "requiredOpenSearchPlugins" in plugin manifest for "id2" should be an array of strings. (invalid-manifest, ${pluginManifestPath})`,
type: PluginDiscoveryErrorType.InvalidManifest,
path: pluginManifestPath,
});
});

test('return error when plugin requiredOpenSearchPlugins is an array that contains non-string values', async () => {
mockReadFilePromise.mockResolvedValue(
Buffer.from(
JSON.stringify({ id: 'id3', version: '7.0.0', requiredOpenSearchPlugins: ['plugin1', 2] })
)
);

await expect(parseManifest(pluginPath, packageInfo, logger)).rejects.toMatchObject({
message: `The "requiredOpenSearchPlugins" in plugin manifest for "id3" should be an array of strings. (invalid-manifest, ${pluginManifestPath})`,
type: PluginDiscoveryErrorType.InvalidManifest,
path: pluginManifestPath,
});
});

test('Happy path when plugin `requiredOpenSearchPlugins` is an array of string', async () => {
mockReadFilePromise.mockResolvedValue(
Buffer.from(
JSON.stringify({
id: 'id1',
version: '7.0.0',
server: true,
requiredOpenSearchPlugins: ['plugin1', 'plugin2'],
})
)
);

await expect(parseManifest(pluginPath, packageInfo, logger)).resolves.toEqual({
id: 'id1',
configPath: 'id_1',
version: '7.0.0',
opensearchDashboardsVersion: '7.0.0',
optionalPlugins: [],
requiredPlugins: [],
requiredOpenSearchPlugins: ['plugin1', 'plugin2'],
requiredBundles: [],
server: true,
ui: false,
});
});
});

describe('configPath', () => {
test('falls back to plugin id if not specified', async () => {
mockReadFilePromise.mockResolvedValue(
Expand Down Expand Up @@ -301,6 +374,7 @@ test('set defaults for all missing optional fields', async () => {
opensearchDashboardsVersion: '7.0.0',
optionalPlugins: [],
requiredPlugins: [],
requiredOpenSearchPlugins: [],
requiredBundles: [],
server: true,
ui: false,
Expand All @@ -317,6 +391,7 @@ test('return all set optional fields as they are in manifest', async () => {
opensearchDashboardsVersion: '7.0.0',
requiredPlugins: ['some-required-plugin', 'some-required-plugin-2'],
optionalPlugins: ['some-optional-plugin'],
requiredOpenSearchPlugins: ['test-opensearch-plugin-1', 'test-opensearch-plugin-2'],
ui: true,
})
)
Expand All @@ -330,6 +405,7 @@ test('return all set optional fields as they are in manifest', async () => {
optionalPlugins: ['some-optional-plugin'],
requiredBundles: [],
requiredPlugins: ['some-required-plugin', 'some-required-plugin-2'],
requiredOpenSearchPlugins: ['test-opensearch-plugin-1', 'test-opensearch-plugin-2'],
server: false,
ui: true,
});
Expand All @@ -344,6 +420,7 @@ test('return manifest when plugin expected OpenSearch Dashboards version matches
version: 'some-version',
opensearchDashboardsVersion: '7.0.0-alpha2',
requiredPlugins: ['some-required-plugin'],
requiredOpenSearchPlugins: [],
server: true,
})
)
Expand All @@ -356,6 +433,7 @@ test('return manifest when plugin expected OpenSearch Dashboards version matches
opensearchDashboardsVersion: '7.0.0-alpha2',
optionalPlugins: [],
requiredPlugins: ['some-required-plugin'],
requiredOpenSearchPlugins: [],
requiredBundles: [],
server: true,
ui: false,
Expand Down Expand Up @@ -383,6 +461,7 @@ test('return manifest when plugin expected OpenSearch Dashboards version is `ope
opensearchDashboardsVersion: 'opensearchDashboards',
optionalPlugins: [],
requiredPlugins: ['some-required-plugin'],
requiredOpenSearchPlugins: [],
requiredBundles: [],
server: true,
ui: true,
Expand Down
26 changes: 26 additions & 0 deletions src/core/server/plugins/discovery/plugin_manifest_parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ const KNOWN_MANIFEST_FIELDS = (() => {
version: true,
configPath: true,
requiredPlugins: true,
requiredOpenSearchPlugins: true,
optionalPlugins: true,
ui: true,
server: true,
Expand Down Expand Up @@ -156,6 +157,28 @@ export async function parseManifest(
);
}

if (
manifest.requiredOpenSearchPlugins !== undefined &&
(!Array.isArray(manifest.requiredOpenSearchPlugins) ||
!manifest.requiredOpenSearchPlugins.every((plugin) => typeof plugin === 'string'))
) {
throw PluginDiscoveryError.invalidManifest(
manifestPath,
new Error(
`The "requiredOpenSearchPlugins" in plugin manifest for "${manifest.id}" should be an array of strings.`
)
);
}

if (
Array.isArray(manifest.requiredOpenSearchPlugins) &&
manifest.requiredOpenSearchPlugins.length > 0
) {
log.info(
`Plugin ${manifest.id} has a dependency on following OpenSearch plugin(s): "${manifest.requiredOpenSearchPlugins}".`
);
}

const expectedOpenSearchDashboardsVersion =
typeof manifest.opensearchDashboardsVersion === 'string' && manifest.opensearchDashboardsVersion
? manifest.opensearchDashboardsVersion
Expand Down Expand Up @@ -198,6 +221,9 @@ export async function parseManifest(
opensearchDashboardsVersion: expectedOpenSearchDashboardsVersion,
configPath: manifest.configPath || snakeCase(manifest.id),
requiredPlugins: Array.isArray(manifest.requiredPlugins) ? manifest.requiredPlugins : [],
requiredOpenSearchPlugins: Array.isArray(manifest.requiredOpenSearchPlugins)
? manifest.requiredOpenSearchPlugins
: [],
optionalPlugins: Array.isArray(manifest.optionalPlugins) ? manifest.optionalPlugins : [],
requiredBundles: Array.isArray(manifest.requiredBundles) ? manifest.requiredBundles : [],
ui: includesUiPlugin,
Expand Down
Loading

0 comments on commit 2362c35

Please sign in to comment.