• Stars
    star
    135
  • Rank 269,297 (Top 6 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created over 3 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿงฐ OpenSearch / OpenSearch-Dashboards Build Systems

OpenSearch Build

python groovy manifests codecov

Releasing OpenSearch

Please refer to the release process document for detailed information on how to release the OpenSearch and OpenSearch Dashboards software.

Releases and Versions

The OpenSearch project releases as versioned distributions of OpenSearch, OpenSearch Dashboards, and the OpenSearch plugins. It follows semantic versioning. Software, such as Data Prepper, clients, and the Logstash output plugin, are versioned independently of the OpenSearch Project. They also may have independent releases from the main project distributions. The OpenSearch Project may also release software under alpha, beta, release candidate, and generally available labels. The definition of when to use these labels is derived from the Wikipedia page on Software release lifecycle. Below is the definition of when to use each label.

Release labels:

  • Alpha - The code is released with instructions to build. Built distributions of the software may not be available. Some features many not be complete. Additional testing and developement work is planned. Distributions will be postfixed with -alphaX where "X" is the number of the alpha version (e.g., "2.0-alpha1").
  • Beta - Built distributions of the software are available. All features are completed. Additional testing and developement work is planned. Distributions will be postfixed with -betaX where "X" is the number of the beta version (e.g., "2.0.0-beta1").
  • Release Candidate - Built distributions of the software are available. All features are completed. Code is tested and minimal validation remains. At this stage the software is potentially stable and will release unless signficant bugs emerge. Distributions will be postfixed with -rcX where "X" is the number of the release candidate version (e.g., "2.0.0-rc1").
  • Generally Available - Built distributions of the software are available. All features are completed and documented. All testing is completed. Distributions for generally available versions are not postfixed with an additional label (e.g., "2.0.0").

Onboarding a New Plugin

Plugin owners can follow the Onboarding Process to onboard their plugins to the release process.

Building and Testing an OpenSearch Distribution

The distribution workflow builds a complete OpenSearch and OpenSearch Dashboards distribution from source. You can currently build 1.0, 1.1, 1.1-SNAPSHOT and 1.2 versions. This system performs a top-down build of all components required for a specific OpenSearch and OpenSearch Dashboards release, then assembles a distribution. The input to the system is a manifest that defines the order in which components should be built. All manifests for our current releases are here.

Building from Source

./build.sh manifests/1.3.0/opensearch-1.3.0.yml 

This builds OpenSearch 1.3.0 from source, placing the output into ./builds/opensearch.

See build workflow for more information.

Assembling a Distribution

./assemble.sh builds/opensearch/manifest.yml

The assembling step takes output from the build step, installs plugins, and assembles a full distribition into the dist folder.

See assemble workflow for more information.

Building Patches

A patch release contains output from previous versions mixed with new source code. Manifests can mix such references. See opensearch-1.3.1.yml for an example.

OpenSearch is often released with changes in opensearch-min, and no changes to plugins other than a version bump. This can be performed by a solo Engineer following a cookbook. See also opensearch-build#1375 which aims to automate incrementing versions for the next development iteration.

Min Snapshots

Snapshots for OpenSearch core/min can be downloaded and used in CI's, local development, etc using below links:

Linux:

https://artifacts.opensearch.org/snapshots/core/opensearch/<version>-SNAPSHOT/opensearch-min-<version>-SNAPSHOT-linux-x64-latest.tar.gz

Macos:

https://artifacts.opensearch.org/snapshots/core/opensearch/<version>-SNAPSHOT/opensearch-min-<version>-SNAPSHOT-darwin-x64-latest.tar.gz

Windows:

https://artifacts.opensearch.org/snapshots/core/opensearch/<version>-SNAPSHOT/opensearch-min-<version>-SNAPSHOT-windows-x64-latest.zip

CI/CD Environment

We build, assemble, and test our artifacts on docker containers. We provide docker files in docker/ci folder, and images on staging docker hub repositories. All Jenkins pipelines can be found in jenkins. Jenkins itself is in the process of being made public and its CDK open-sourced.

See jenkins and docker for more information.

Build Numbers

The distribution url and the build output manifest include a Jenkins auto-incremented build number. For example, the manifest from OpenSearch build 5905 contains the following.

build:
  name: OpenSearch
  version: 2.2.0
  platform: linux
  architecture: x64
  distribution: rpm
  id: '5905'

Latest Distribution Url

Use the latest keyword in the URL to obtain the latest build for a given version. For example https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.2.0/latest/linux/x64/rpm/dist/opensearch/manifest.yml redirects to build 5905 at the time of writing this.

The latest keyword is resolved to a specific build number by checking an index.json file. This file has contents such as this.

{"latest":"5905"}

The file is updated when a distribution build job is completed for the given product and version (or is created when such distribution job succeeds for the first time). Since one distribution build job consists of multiple stages for different combinations of distribution type, platform and architecture, the index.json is only modified once all stages succeed. With this said, the latest url only works when the distribution build job succeeds at least once for the given product and version.

The resolution logic is implemented in the CloudFront url rewriter. The TTL (time to live) is set to 5 mins which means that the latest url may need up to 5 mins to get new contents after index.json is updated.

All the artifacts accessible through the regular distribution url can be accessed by the latest url. This includes both OpenSearch Core, OpenSearch Dashboards Core and their plugins.

For example, you can download the latest .tar.gz distribution build of OpenSearch 2.2.0 directly at https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.2.0/latest/linux/x64/tar/dist/opensearch/opensearch-2.2.0-linux-x64.tar.gz, without having to first download and parse the complete build manifest.

For plugin artifacts, you can also use the latest keyword to get the latest plugin artifacts with a known version. E.g. in order to get performance-analyzer x64 tarball artifacts for 2.1.0, you can obtain it with link https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.1.0/latest/linux/x64/tar/builds/opensearch/plugins/opensearch-performance-analyzer-2.1.0.0.zip, which will redirect you to https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.1.0/5757/linux/x64/tar/builds/opensearch/plugins/opensearch-performance-analyzer-2.1.0.0.zip.

For bundled artifacts, here are some examples for LINUX and Windows:

  • Linux Tar: https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.4.0/latest/linux/x64/tar/dist/opensearch/opensearch-2.4.0-linux-x64.tar.gz
  • Windows Zip: https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/2.4.0/latest/windows/x64/zip/dist/opensearch/opensearch-2.4.0-windows-x64.zip

Testing the Distribution

Tests the OpenSearch distribution, including integration, backwards-compatibility and performance tests.

./test.sh <test-type> <test-manifest-path> <path>

See src/test_workflow for more information.

Checking Release Notes

Workflow to check if the release notes exists or not and shows the latest commit for OpenSearch and Dashboard distributions.

To run:

./release_notes.sh check manifests/2.2.0/opensearch-2.2.0.yml --date 2022-07-26

See src/release_notes_workflow for more information.

Signing Artifacts

For all types of signing within OpenSearch project we use opensearch-signer-client (in progress of being open-sourced) which is a wrapper around internal signing system and is only available for authenticated users. The input requires a path to the build manifest or directory containing all the artifacts or a single artifact.

Usage:

./sign.sh builds/opensearch/manifest.yml

The tool currently supports following platforms for signing.

PGP

Anything can be signed using PGP signing eg: tarball, any type of file, etc. A .sig file will be returned containing the signature. OpenSearch and OpenSearch dashboards distributions, components such as data prepper, etc as well as maven artifacts are signed using PGP signing. See this page for how to verify signatures.

Windows

Windows signing can be used to sign windows executables such as .msi, .msp, .msm, .cab, .dll, .exe, .appx, .appxbundle, .msix, .msixbundle, .sys, .vxd, .ps1, .psm1, and any PE file that is supported by Signtool.exe. Various windows artifacts such as SQL OBDC, opensearch-cli, etc are signed using this method. Windows code signing uses EV (Extended Validated) code signing certificates.

Types of signing/Details Digest Cipher Key Size
PGP SHA1 AES-128 2048
Windows SHA256 RSA
RPM SHA512 RSA 4096

Signing RPM artifacts

RPM artifacts are signed via a legacy shell script which uses a macros template. See this commit for more information and this issue to add RPM artifact signing functionality to the above signing system. Currently we are only signing OpenSearch and OpenSearch dashboards RPM distributions using this method.

See src/sign_workflow for more information.

Making a Release

Releasing for Linux and Windows

The Linux / Windows release is managed by a team at Amazon following this release template (e.g. opensearch-build#2649).

Releasing for FreeBSD

The FreeBSD ports and packages for OpenSearch are managed by a community OpenSearch Team at FreeBSD. When a new release is rolled out, this team will update the port and commit it to the FreeBSD ports tree. Anybody is welcome to help the team by providing patches for upgrading the ports following the FreeBSD Porter's Handbook instructions.

Releasing for MacOS

At this moment there's no official MacOS distribution. However, this project does support building and assembling OpenSearch for MacOS. See opensearch-build#37 and #38 for more details.

Utilities

Checking Out Source

The checkout workflow checks out source code for a given manifest for further examination.

./checkout.sh manifests/1.3.0/opensearch-1.3.0.yml

See src/checkout_workflow for more information.

Cross-Platform Builds

You can perform cross-platform builds. For example, build and assemble a Windows distribution on MacOS.

export JAVA_HOME=$(/usr/libexec/java_home) # required by OpenSearch install-plugin during assemble
./build.sh manifests/1.3.0/opensearch-1.3.0.yml --snapshot --platform windows
./assemble.sh builds/opensearch/manifest.yml

This will produce dist/opensearch-1.3.0-SNAPSHOT-windows-x64.zip on Linux and MacOS.

Sanity Checking the Bundle

This workflow runs sanity checks on every component present in the bundle, executed as part of the manifests workflow in this repository. It ensures that the component GitHub repositories are correct and versions in those components match the OpenSearch version.

The following example sanity-checks components in the the OpenSearch 1.3.0 manifest.

./ci.sh manifests/1.3.0/opensearch-1.3.0.yml --snapshot

See src/ci_workflow for more information.

Auto-Generating Manifests

The manifests workflow reacts to version increments in OpenSearch and its components by extracting Gradle properties from project branches. When a new version is found, a new input manifest is added to manifests, and a pull request is opened (e.g. opensearch-build#491).

Show information about existing manifests.

./manifests.sh list

Check for updates and create any new manifests.

./manifests.sh update

See src/manifests_workflow for more information.

Deploying Infrastructure

Storage and access roles for the OpenSearch release process are codified in a CDK project.

Contributing

See developer guide and how to contribute to this project.

Getting Help

If you find a bug, or have a feature request, please don't hesitate to open an issue in this repository.

For more information, see project website and documentation. If you need help and are unsure where to open an issue, try forums.

Code of Conduct

This project has adopted the Amazon Open Source Code of Conduct. For more information see the Code of Conduct FAQ, or contact [email protected] with any additional questions or comments.

Security

If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our vulnerability reporting page. Please do not create a public GitHub issue.

License

This project is licensed under the Apache v2.0 License.

Copyright OpenSearch Contributors. See NOTICE for details.

More Repositories

1

OpenSearch

๐Ÿ”Ž Open source distributed and RESTful search engine.
Java
9,725
star
2

OpenSearch-Dashboards

๐Ÿ“Š Open source visualization dashboards for OpenSearch.
TypeScript
1,682
star
3

opensearch-k8s-operator

OpenSearch Kubernetes Operator
Go
375
star
4

opensearch-py

Python Client for OpenSearch
Python
321
star
5

data-prepper

Data Prepper is a component of the OpenSearch project that accepts, filters, transforms, enriches, and routes data at scale.
Java
259
star
6

security

๐Ÿ” Secure your cluster with TLS, numerous authentication backends, data masking, audit logging as well as role-based access control on indices, documents, and fields
Java
193
star
7

opensearch-go

Go Client for OpenSearch
Go
190
star
8

opensearch-js

Node.js Client for OpenSearch
JavaScript
185
star
9

helm-charts

โ˜ธ๏ธ A community repository for Helm Charts of OpenSearch Project.
Smarty
171
star
10

k-NN

๐Ÿ†• Find the k-nearest neighbors (k-NN) for your vector data
Java
154
star
11

sql

Query your data using familiar SQL or intuitive Piped Processing Language (PPL)
Java
118
star
12

spring-data-opensearch

Java
116
star
13

opensearch-java

Java Client for OpenSearch
Java
113
star
14

opensearch-benchmark

OpenSearch Benchmark - a community driven, open source project to run performance tests for OpenSearch
Python
108
star
15

logstash-output-opensearch

A Logstash plugin that sends event data to a OpenSearch clusters and stores as an index.
Ruby
106
star
16

opensearch-net

OpenSearch .NET Client
C#
103
star
17

opensearch-php

Official PHP Client for OpenSearch
PHP
94
star
18

ml-commons

ml-commons provides a set of common machine learning algorithms, e.g. k-means, or linear regression, to help developers build ML related features within OpenSearch.
Java
93
star
19

opensearch-ruby

Ruby Client for OpenSearch
Ruby
93
star
20

ansible-playbook

๐Ÿค– A community repository for Ansible Playbook of OpenSearch Project.
83
star
21

terraform-provider-opensearch

Go
73
star
22

security-analytics

Security Analytics enables users for detecting security threats on their security event log data. It will also allow them to modify/tailor the pre-packaged solution.
Java
72
star
23

security-dashboards-plugin

๐Ÿ” Manage your internal users, roles, access control, and audit logs from OpenSearch Dashboards
TypeScript
71
star
24

documentation-website

The documentation for OpenSearch, OpenSearch Dashboards, and their associated plugins.
HTML
66
star
25

anomaly-detection

Identify atypical data and receive automatic notifications
Java
65
star
26

neural-search

Plugin that adds dense neural retrieval into the OpenSearch ecosytem
Java
62
star
27

alerting

๐Ÿ“Ÿ Get notified when your data meets certain conditions by setting up monitors, alerts, and notifications
Kotlin
60
star
28

opensearch-rs

OpenSearch Rust Client
Rust
58
star
29

index-management

๐Ÿ—ƒ Automate periodic data operations, such as deleting indices at a certain age or performing a rollover at a certain size
Kotlin
53
star
30

observability

Visualize and explore your logs, traces and metrics data in OpenSearch Dashboards
Kotlin
52
star
31

opensearch-plugins

For all things OpenSearch plugins. You want to install, or develop a plugin? You've come to the right place.
49
star
32

cross-cluster-replication

Synchronize your data across multiple clusters for lower latencies and higher availability
Kotlin
48
star
33

opensearch-devops

๐Ÿ˜„ We welcome all the community members to help develop third party tools/automations/workflows for OpenSearch/OpenSearch-Dashboards.
TypeScript
45
star
34

opensearch-cli

A full-featured command line interface (CLI) for OpenSearch.
Go
43
star
35

project-website

The source to opensearch.org
HTML
41
star
36

opensearch-dsl-py

High level Python client for OpenSearch (deprecated, moved to opensearch-py)
Python
40
star
37

opensearch-migrations

Migrate, upgrade, compare, and replicate OpenSearch clusters with ease.
Java
37
star
38

performance-analyzer

๐Ÿ“ˆ Get detailed performance metrics from your cluster independently of the Java Virtual Machine (JVM)
Java
36
star
39

oui

OpenSearch UI Framework
TypeScript
36
star
40

geospatial

Future home of Geospatial features for OpenSearch
Java
33
star
41

flow-framework

OpenSearch plugin that enables builders to innovate AI apps on OpenSearch
Java
32
star
42

opensearch-py-ml

Python
32
star
43

opensearch-api-specification

API specification for OpenSearch
TypeScript
30
star
44

.github

Provides templates and resources for other OpenSearch project repositories.
30
star
45

opensearch-hadoop

Java
29
star
46

anomaly-detection-dashboards-plugin

Manage your detectors and identify atypical data in OpenSearch Dashboards
TypeScript
29
star
47

opensearch-sdk-java

OpenSearch SDK to build and run extensions
Java
28
star
48

performance-analyzer-rca

The Performance Analyzer RCA is a framework that builds on the Performance Analyzer engine to support root cause analysis (RCA) of performance and reliability problems for OpenSearch instances.
Java
28
star
49

asynchronous-search

โ–ถ๏ธ Run queries in the background and retrieve partial results along the way
Java
28
star
50

reporting

Export and automate PNG, PDF, and CSV reports in OpenSearch Dashboards
Kotlin
28
star
51

alerting-dashboards-plugin

๐Ÿ“Ÿ Manage your monitors, alerts and notifications in OpenSearch Dashboards
JavaScript
26
star
52

notifications

Notifications plugin for OpenSearch enables other plugins to send notifications via Email, Slack, Amazon Chime, Custom web-hook etc channels
Kotlin
25
star
53

opensearch-plugin-template-java

Template repo for creating OpenSearch plugins
Java
23
star
54

search-processor

Search Request Processor: pipeline for transformation of queries and results inline with a search request.
Java
22
star
55

job-scheduler

Run periodic jobs on the cluster from your plugin
Java
21
star
56

common-utils

Offers a library of utilities for building Java-based OpenSearch plugins
Kotlin
20
star
57

opensearch-testcontainers

Java
19
star
58

opensearch-spark

Spark Accelerator framework ; It enables secondary indices to remote data stores.
Scala
19
star
59

opensearch-benchmark-workloads

Official workloads used by OpenSearch Benchmark (OSB)
Python
18
star
60

dashboards-search-relevance

Tools to help search relevance engineers and business users tune search results for their OpenSearch applications.
TypeScript
18
star
61

opensearch-catalog

The OpenSearch Catalog is designed to make it easier for developers and community to contribute, search and install artifacts like plugins, visualization dashboards, ingestion to visualization content packs (data pipeline configurations, normalization, ingestion, dashboards).
HTML
18
star
62

dashboards-assistant

Dashboard assistant is a way for users on OpenSearch Dashboards to interact with an assistant through chat or the different OSD pages
TypeScript
17
star
63

piped-processing-language

Query your data using an intuitive Piped Processing Language (PPL)
17
star
64

dashboards-maps

๐ŸŒ User interface for the backend geospatial plugin which can be integrated with OpenSearch Dashboards and a home for all other map related features.
TypeScript
17
star
65

user-behavior-insights

User Behavior Insights plugin for OpenSearch
Java
17
star
66

index-management-dashboards-plugin

๐Ÿ—ƒ Manage policies and jobs and automate periodic data operations in OpenSearch Dashboards
TypeScript
16
star
67

opensearch-cluster-cdk

TypeScript
15
star
68

dashboards-observability

Visualize and explore your logs, traces and metrics data in OpenSearch Dashboards
TypeScript
15
star
69

perftop

๐Ÿ“ˆ PerfTop: A client for the OpenSearch Performance Analyzer
JavaScript
15
star
70

opensearch-ci

Enables continuous integration across OpenSearch, OpenSearch Dashboards, and plugins.
TypeScript
15
star
71

sql-jdbc

This is the driver for JDBC connectivity to a cluster running with OpenSearch SQL support.
Java
14
star
72

dashboards-anywhere

Cloud native infrastructure for the OpenSearch Dashboards service.
Python
13
star
73

dashboards-visualizations

Visualize the start, end, and duration of unique events in a sequence in OpenSearch Dashboards
TypeScript
12
star
74

opensearch-dashboards-functional-test

Maintains functional tests for OpenSearch Dashboards and Dashboards plugins
JavaScript
12
star
75

security-analytics-dashboards-plugin

Front end (UI) plugin to support security-analytics
TypeScript
10
star
76

opensearch-sdk-py

OpenSearch Extensions SDK for Python.
Python
10
star
77

dashboards-notifications

The Notifications plugin provides a central location for all of your notifications from OpenSearch plugins. You can use either OpenSearch Dashboards or the REST API to configure notifications. Dashboards offers a more organized way of selecting a channel type and selecting which OpenSearch plugin sources you want to use.
TypeScript
10
star
78

dashboards-reporting

HTML
9
star
79

logstash-input-opensearch

Ruby
9
star
80

dashboards-flow-framework

A UI designer for constructing AI applications with OpenSearch
TypeScript
9
star
81

opensearch-clients

For all things about OpenSearch clients.
9
star
82

dashboards-notebooks

Combine code snippets, live visualizations, and narrative text into rich reports in OpenSearch Dashboards
8
star
83

docker-images

Shell
8
star
84

sql-odbc

OpenSearchODBC is a read-only ODBC driver for Windows and Mac for connecting to OpenSearch SQL support.
C++
7
star
85

opensearch-oci-object-storage

OpenSearch Repository Plugin For Oci Object Storage
Java
7
star
86

ml-commons-dashboards

User interface for the ml-commons plugin which can be integrated with OpenSearch Dashboards and a health dashboard for machine learning models.
TypeScript
7
star
87

query-insights

Query Insights plugin offers frameworks and APIs for analyzing and optimizing query performance in OpenSearch.
Java
7
star
88

dashboards-query-workbench

The OpenSearch Dashboards Query Workbench enables you to query your OpenSearch data using either SQL or PPL
TypeScript
7
star
89

maps

Maps resources for OpenSearch
TypeScript
7
star
90

simple-schema

The purpose of this Plugin is to enhance open-search engine with user-domain schema by using GraphQL.
Java
6
star
91

custom-codecs

OpenSearch custom lucene codecs for providing different on-disk index encoding (e.g., compression).
Java
6
star
92

opensearch-build-libraries

Groovy
6
star
93

skills

Java
6
star
94

dashboards-desktop

HTML
5
star
95

ux

Public repository for OpenSearch UX. Tracks issues, epics and workstreams related to improving the user experience, usability and accessibility of OpenSearch core, dashboards and related plugins.
5
star
96

reporting-cli

JavaScript
4
star
97

project-meta

Tools to make it easy to manage processes across the opensearch-project org.
Shell
4
star
98

sql-cli

The SQL CLI component in OpenSearch is a stand-alone Python application for query
Python
4
star
99

project-tools

OpenSearch project/org tools.
Ruby
4
star
100

performance-analyzer-commons

Java
4
star