From 58f88286b5338b7dc56ccb9cc5322d55b65348ce Mon Sep 17 00:00:00 2001 From: Rajvaibhav Rahane Date: Tue, 18 Feb 2025 15:27:16 -0800 Subject: [PATCH 1/3] Add Initial Repo Maintenance Files. Signed-off-by: Rajvaibhav Rahane --- ADMINS.md | 61 ++++++++++++++ CODE_OF_CONDUCT.md | 24 ++++++ CONTRIBUTING.md | 178 +++++++++++++++++++++++++++++++++++++++ FEATURES.md | 16 ++++ LICENSE.txt | 201 ++++++++++++++++++++++++++++++++++++++++++++ MAINTAINERS.md | 25 ++++++ NOTICE.txt | 2 + ONBOARDING.md | 90 ++++++++++++++++++++ OpenSearch.svg | 1 + README.md | 54 +++++++++++- RESPONSIBILITIES.md | 167 ++++++++++++++++++++++++++++++++++++ SECURITY.md | 91 ++++++++++++++++++++ TRIAGING.md | 77 +++++++++++++++++ profile/README.md | 34 ++++++++ profile/banner.jpg | Bin 0 -> 141210 bytes 15 files changed, 1020 insertions(+), 1 deletion(-) create mode 100644 ADMINS.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 FEATURES.md create mode 100644 LICENSE.txt create mode 100644 MAINTAINERS.md create mode 100644 NOTICE.txt create mode 100644 ONBOARDING.md create mode 100644 OpenSearch.svg create mode 100644 RESPONSIBILITIES.md create mode 100644 SECURITY.md create mode 100644 TRIAGING.md create mode 100644 profile/README.md create mode 100644 profile/banner.jpg diff --git a/ADMINS.md b/ADMINS.md new file mode 100644 index 0000000..c0f73b0 --- /dev/null +++ b/ADMINS.md @@ -0,0 +1,61 @@ +- [Overview](#overview) +- [Current Admins](#current-admins) +- [Admin Permissions](#admin-permissions) + - [Prioritize Security](#prioritize-security) + - [Enforce Code of Conduct](#enforce-code-of-conduct) + - [Add/Remove Maintainers](#addremove-maintainers) + - [Adopt Organizational Practices](#adopt-organizational-practices) +- [New Repos](#new-repos) + +## Overview + +This document explains who the admins are (see below), what they do in opensearch-project, and how they should be doing it. These individuals are members of an "admin" GitHub team that is given Admin-level permissions to every repository in opensearch-project organization. These are individuals that worked on creating the OpenSearch fork, and those that currently support the organization-wide infrastructure, such as the public [CI/CD](https://build.ci.opensearch.org/). + +If you're interested in becoming a maintainer, see [MAINTAINERS](MAINTAINERS.md). If you're interested in contributing, see [CONTRIBUTING](CONTRIBUTING.md). + +## Current Admins + +| Admin | GitHub ID | Affiliation | +| ------------------------ | --------------------------------------------------------- | ----------- | +| Navneet Verma | [navneet1v](https://github.com/navneet1v ) | Amazon | +| Rajvaibhav Rahane | [Rajrahane](https://github.com/Rajrahane) | Amazon | +| Vamshi Vijay Nakkirtha | [vamshin](https://github.com/vamshin) | Amazon | +| Yigit Kiran | [yigithub](https://github.com/yigithub) | Amazon | +| Jay Deng | [jed326](https://github.com/jed326) | Amazon | +| Rohan Chitale | [rchitale7](https://github.com/rchitale7) | Amazon | +| Owen Halpert | [owenhalpert](https://github.com/owenhalpert) | Amazon | +| Neetika Singhal | [neetikasinghal](https://github.com/neetikasinghal) | Amazon | + +## Admin Permissions + +Admins have [admin-level permissions on a repository](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-permission-levels-for-an-organization). Use those privileges to serve the community and protect the repository as follows. + +### Prioritize Security + +Security is your number one priority. Manage security keys and safeguard access to the repository. + +Note that this repository is monitored and supported 24/7 by Amazon Security, see [Reporting a Vulnerability](SECURITY.md) for details. + +### Enforce Code of Conduct + +Act on [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) violations by revoking access, and blocking malicious actors. + +### Add/Remove Maintainers + +Perform administrative tasks, such as [adding](RESPONSIBILITIES.md#adding-a-new-maintainer) and [removing maintainers](RESPONSIBILITIES.md#removing-a-maintainer). + +Please note that maintainers typically do not have admin-level permissions in their repos in this organization. Admin-level permissions allow for sensitive and destructive actions, such as managing security, or deleting a repository. Therefore, admin access in opensearch-project was designed to be deliberately centralized in ways that requires that two people to make any one sensitive change. If you need to perform an admin function, such as adding or removing a maintainer, please [follow the maintainer nomination process](RESPONSIBILITIES.md#becoming-a-maintainer), then ask to effect permissions by tagging `@admin` in your pull request, or the [#maintainers channel on the public Slack](https://opensearch.slack.com/archives/C05L60S4UBT). One of the above-mentioned admins will make this change for you. + +### Adopt Organizational Practices + +Adopt organizational practices documented in this repo, work in the open, and collaborate with other admins by opening issues before making process changes. Prefer consistency, and avoid diverging from practices in the opensearch-project organization. + +## New Repos + +There are currently two ways new repositories may appear in the opensearch-project organization: creating a new repo and adopting, or moving a repo from outside of the organization into it. The process is the same. + +The AWS Open Source Program Office (OSPO) currently owns and manages the opensearch-project organization, and has permissions to create a new repo. This will change shortly following the [formation of the OpenSearch Software Foundation](https://foundation.opensearch.org/). While the admins above have admin-level permissions, they do not have permissions to create new repositories or move repositories into the organization. + +All new repositories inside opensearch-project follow the [security response process](SECURITY.md), and therefore require an Amazon team to be engaged when necessary. If you wish to create a repository in this organization, or move a repository into opensearch-project, please contact one of the above-mentioned admins via the [#maintainers channel on the public Slack](https://opensearch.slack.com/archives/C05L60S4UBT). + +While the opensearch-project organization has adopted [opensearch-plugin-template-java](https://github.com/opensearch-project/opensearch-plugin-template-java), or [opensearch-project/opensearch-learning-to-rank-base](https://github.com/opensearch-project/opensearch-learning-to-rank-base) in the past, we generally encourage you to start and run with your open-source project outside of the organization, and only consider making it part of it when you wish to include your already very popular component or tool in the "official" distribution. To request moving a repo into this organization, please open a proposal in your repo, have repo maintainers confirm they wish to move, and engage admins via the [#admin-requests channel on the public Slack](https://opensearch.slack.com/archives/C051CKVFB2A). \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..c511573 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,24 @@ + +This code of conduct applies to all spaces provided by the OpenSource project including in code, documentation, issue trackers, mailing lists, chat channels, wikis, blogs, social media, events, conferences, meetings, and any other communication channels used by the project. + +**Our open source communities endeavor to:** + +* Be Inclusive: We are committed to being a community where everyone can join and contribute. This means using inclusive and welcoming language. +* Be Welcoming: We are committed to maintaining a safe space for everyone to be able to contribute. +* Be Respectful: We are committed to encouraging differing viewpoints, accepting constructive criticism and work collaboratively towards decisions that help the project grow. Disrespectful and unacceptable behavior will not be tolerated. +* Be Collaborative: We are committed to supporting what is best for our community and users. When we build anything for the benefit of the project, we should document the work we do and communicate to others on how this affects their work. + +**Our Responsibility. As contributors, members, or bystanders we each individually have the responsibility to behave professionally and respectfully at all times. Disrespectful and unacceptable behaviors include, but are not limited to:** + +* The use of violent threats, abusive, discriminatory, or derogatory language; +* Offensive comments related to gender, gender identity and expression, sexual orientation, disability, mental illness, race, political or religious affiliation; +* Posting of sexually explicit or violent content; +* The use of sexualized language and unwelcome sexual attention or advances; +* Public or private harassment of any kind; +* Publishing private information, such as physical or electronic address, without permission; +* Other conduct which could reasonably be considered inappropriate in a professional setting; +* Advocating for or encouraging any of the above behaviors. + +**Enforcement and Reporting Code of Conduct Issues:** + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported. [Contact us](mailto:conduct@opensearch.foundation). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e193543 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,178 @@ +- [Contributing to OpenSearch](#contributing-to-opensearch) +- [First Things First](#first-things-first) +- [Ways to Contribute](#ways-to-contribute) + - [Bug Reports](#bug-reports) + - [Feature Requests \& Proposals](#feature-requests--proposals) + - [Documentation Changes](#documentation-changes) + - [Contributing Code](#contributing-code) +- [Developer Certificate of Origin](#developer-certificate-of-origin) + - [Troubleshooting Failed DCO Checks](#troubleshooting-failed-dco-checks) +- [License Headers](#license-headers) + - [Java](#java) + - [Python, Ruby, Shell](#python-ruby-shell) +- [Review Process](#review-process) +- [Using Feature Branches](#using-feature-branches) +- [Experimental Features](#experimental-features) + +## Contributing to OpenSearch + +OpenSearch, a member of non-profit Linux Foundation, is a community project that is built and maintained by people just like **you**. We're glad you're interested in helping out. There are several different ways you can do it, but before we talk about that, let's talk about how to get started. + +## First Things First + +1. **When in doubt, open an issue** - For almost any type of contribution, the first step is opening an issue. Even if you think you already know what the solution is, writing down a description of the problem you're trying to solve will help everyone get context when they review your pull request. If it's truly a trivial change (e.g. spelling error), you can skip this step -- but as the subject says, when it doubt, [open an issue](https://github.com/opensearch-project/.github/issues). + +2. **Only submit your own work** (or work you have sufficient rights to submit) - Please make sure that any code or documentation you submit is your work or you have the rights to submit. We respect the intellectual property rights of others, and as part of contributing, we'll ask you to sign your contribution with a "Developer Certificate of Origin" (DCO) that states you have the rights to submit this work and you understand we'll use your contribution. There's more information about this topic in the [DCO section](#developer-certificate-of-origin). + +3. When you're ready to start, we have [a step-by-step onboarding guide](ONBOARDING.md) to help you get oriented. + +## Ways to Contribute + +### Bug Reports + +Ugh! Bugs! + +A bug is when software behaves in a way that you didn't expect and the developer didn't intend. To help us understand what's going on, we first want to make sure you're working from the latest version. + +Once you've confirmed that the bug still exists in the latest version, you'll want to check to make sure it's not something we already know about on the [open issues GitHub page](https://github.com/opensearch-project/.github/issues). + +If you've upgraded to the latest version and you can't find it in our open issues list, then you'll need to tell us how to reproduce it Provide as much information as you can. You may think that the problem lies with your query, when actually it depends on how your data is indexed. The easier it is for us to recreate your problem, the faster it is likely to be fixed. + +### Feature Requests & Proposals + +If you've thought of a way that OpenSearch could be better, we want to hear about it. We track `feature requests` ([examples](https://github.com/search?q=org%3Aopensearch-project+%22Is+your+feature+request+related+to+a+problem%3F%22&type=Issues)) using GitHub, so please feel free to open an issue which describes the feature you would like to see, why you need it, and how it should work. If you would like contribute code toward building it, you might consider a `feature proposal` ([examples](https://github.com/search?q=org%3Aopensearch-project+%22How+did+you+come+up+with+this+proposal%3F%22&type=Issues)) instead. A feature proposal is the first step to helping the community better understand what you are planning to contribute, why it should be built, and collaborate on ensuring you have all the data points you need for implementation. + +### Documentation Changes + +There are two types of documentation in OpenSearch: developer documentation, which describes how OpenSearch is designed internally, and user documentation, which describes how to use OpenSearch. + +Developer documentation is maintained in the repository to which it pertains. The workflow for contributing developer documentation is the same as the one for contributing code. + +User documentation is maintained in the [documentation-website](https://github.com/opensearch-project/documentation-website/) repo. You can find the rendered documentation at [opensearch.org/docs](https://opensearch.org/docs). To learn how to contribute user documentation, see the [contribution guidelines](https://github.com/opensearch-project/documentation-website/blob/main/CONTRIBUTING.md). + +### Contributing Code + +As with other types of contributions, the first step is to [open an issue on GitHub](https://github.com/opensearch-project/.github/issues/new/choose). Opening an issue before you make changes makes sure that someone else isn't already working on that particular problem. It also lets us all work together to find the right approach before you spend a bunch of time on a PR. So again, when in doubt, open an issue. + +## Developer Certificate of Origin + +OpenSearch is an open source product released under the Apache 2.0 license (see either [the Apache site](https://www.apache.org/licenses/LICENSE-2.0) or the [LICENSE.txt file](LICENSE.txt)). The Apache 2.0 license allows you to freely use, modify, distribute, and sell your own products that include Apache 2.0 licensed software. + +We respect intellectual property rights of others and we want to make sure all incoming contributions are correctly attributed and licensed. A Developer Certificate of Origin (DCO) is a lightweight mechanism to do that. + +The DCO is a declaration attached to every contribution made by every developer. That representation is important for legal purposes and was the community-developed outcome after a [$1 billion lawsuit by SCO against IBM](https://en.wikipedia.org/wiki/SCO%E2%80%93Linux_disputes). The representation is designed to prevent issues but also keep the burden on contributors low. It has proven very adaptable to other projects, is built into git itself (and now also GitHub), and is in use by thousands of projects to avoid more burdensome requirements to contribute (such as a CLA). + +In the commit message of the contribution, the developer simply adds a `Signed-off-by` statement and thereby agrees to the DCO, which you can find below or at [DeveloperCertificate.org](http://developercertificate.org/). + +``` +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the + best of my knowledge, is covered under an appropriate open + source license and I have the right under that license to + submit that work with modifications, whether created in whole + or in part by me, under the same open source license (unless + I am permitted to submit under a different license), as + Indicated in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including + all personal information I submit with it, including my + sign-off) is maintained indefinitely and may be redistributed + consistent with this project or the open source license(s) + involved. + ``` + +We require that every contribution to OpenSearch is signed with a Developer Certificate of Origin. + +DCO checks are enabled via a [DCO workflow app](https://github.com/apps/dco) across the entire opensearch-project organization, and your PR will fail CI without it. + +Additionally, we kindly ask you to use your real name. A real name does not require a legal name, nor a birth name, nor any name that appears on an official ID (e.g. a passport). Your real name is the name you convey to people in the community for them to use to identify you as you. The key concern is that your identification is sufficient enough to contact you if an issue were to arise in the future about your contribution. Thus, your real name should not be an anonymous id or false name that misrepresents who you are. + +Each commit must include a DCO which looks like this, which includes a real name and a valid email address where you can receive emails: + +``` +Signed-off-by: Jane Smith +``` + +You may type this line on your own when writing your commit messages. However, if your `user.name` and `user.email` are set in your `git config`, you can use `-s` or `--signoff` to add the `Signed-off-by` line to the end of the commit message automatically. + +Forgot to add DCO to a commit? Amend it with `git commit --amend -s`. + +### Troubleshooting Failed DCO Checks + +The DCO workflow app requires signatures on every commit that's part of a PR. + +If you've already signed all your commits and your PR still fails the DCO check, it's likely because the email address you signed the commit with doesn't match the one on your GitHub account. + +To fix: + +1. Go to [your GitHub email settings](https://github.com/settings/emails) and uncheck "Keep my email address private". +2. Following the [GitHub documentation](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address#setting-your-commit-email-address-in-git), set your commit email address to your primary GitHub email address. + +## License Headers + +New files in your code contributions should contain the following license header. If you are modifying existing files with license headers, or including new files that already have license headers, do not remove or modify them without guidance. + +### Java + +``` +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + * +*/ +``` + +### Python, Ruby, Shell +``` +# Copyright OpenSearch Contributors +# SPDX-License-Identifier: Apache-2.0 +# +# The OpenSearch Contributors require contributions made to +# this file be licensed under the Apache-2.0 license or a +# compatible open source license. +``` + +## Review Process + +We deeply appreciate everyone who takes the time to make a contribution. We will review all contributions as quickly as possible. As a reminder, [opening an issue](https://github.com/opensearch-project/.github/issues/new/choose) discussing your change before you make it is the best way to smooth the PR process. This will prevent a rejection because someone else is already working on the problem, or because the solution is incompatible with the architectural direction. + +During the PR process, expect that there will be some back-and-forth. Please try to respond to comments in a timely fashion, and if you don't wish to continue with the PR, let us know. If a PR takes too many iterations for its complexity or size, we may reject it. Additionally, if you stop responding we may close the PR as abandoned. In either case, if you feel this was done in error, please add a comment on the PR. + +If we accept the PR, a [maintainer](MAINTAINERS.md) will merge your change and usually take care of backporting it to appropriate branches ourselves. + +If we reject the PR, we will close the pull request with a comment explaining why. This decision isn't always final: if you feel we have misunderstood your intended change or otherwise think that we should reconsider then please continue the conversation with a comment on the PR and we'll do our best to address any further points you raise. + +## Using Feature Branches + +Our recommended approach for development is doing frequent small PR merges to main. This lets us catch integration issues earlier, makes it easier to review your PRs and makes your development visible to everyone. It's okay if it's not the complete feature, as long as the PR won’t break a build or any existing functionality. + +But sometimes it may be useful to create a feature branch. This allows you work on long-running disruptive features in isolation. The reason we don't recommend it is because it still requires maintainer access to merge changes, and the overhead of rebasing is high. If you do want to use a feature branch: + +1. Treat feature branch PR's the same as PR's to `main`. CI should run on all PR's, no incomplete work should be merged, tests are necessary, etc. + a. This maintains the code quality going into each feature making the integration to main PR's much easier and quicker. + b. More visibility during development since it gives reviewers the necessary time to review each PR. +2. Please use Feature specific labels: This helps identify feature related issues and PR's. + +All the safeguard here are not rules but guidelines and should be adopted by each repository based on their specific requirements. This is to ensure that feature branch development is less likely to have code quality issues and massive merge to main PR's. + +For contributors looking to add a new feature that would require the creation of a feature branch, the process begins by opening an issue in the repo with the feature proposal. Depending on the nature of the feature, the maintainers of the project can decide to create a feature branch and use this model. + +## Experimental Features + +Experimental releases are used to gather early feedback on features. Features should only be marked experimental if there is a high likelihood that API or experience will change. We strongly advise people to avoid using experimental features in production as there is no guarantee the API or experience won't change before release. It is best to avoid experimental feature releases unless it is necessary. Our goal is to have all experimental features into production or removed within 2 minor releases. We generally use [Feature Flags](https://github.com/opensearch-project/OpenSearch/blob/main/DEVELOPER_GUIDE.md#experimental-development) to isolate experimental features in backend code. \ No newline at end of file diff --git a/FEATURES.md b/FEATURES.md new file mode 100644 index 0000000..ab2bc2a --- /dev/null +++ b/FEATURES.md @@ -0,0 +1,16 @@ +# Proposing Features + +A feature request or proposal is an issue opened on a repo in opensearch-project that states an end-user problem, and proposes a solution in the form of a feature. It should meet the following criteria. + +- Contains a real use-case or describes a problem. +- Is a good fit with existing features and the overall direction of the repo and project. +- Is distinct from existing features. +- Is atomic. + +The primary goal of a feature request is to brainstorm the solutions with the community early. The feature proposal should be opened in the idea stage, or as soon as a problem has been encountered. A technical or an implementation design is not required, but it's recommended to include ideas of possible approaches if you have any. Feature requests are usually labelled as `enhancement` or `feature`, depending on the repo, and often use the [recommended template](.github/ISSUE_TEMPLATE/FEATURE_REQUEST_TEMPLATE.md). + +Repo maintainers regularly [triage](TRIAGING.md) new feature requests to determine whether they are valid. There should be no expectation that anyone will pickup the feature request and work on it, including the person who opened it. + +Most features can be elevated to the project [roadmap](https://github.com/orgs/opensearch-project/projects/1) by tagging them with a "roadmap" label and a target version number. See [maintaining the project roadmap](RESPONSIBILITIES.md#manage-roadmap) for more information. + +Finally, features should be given time before appreciable work begins, allowing for community to voice opinions. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 0000000..febb9cf --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,25 @@ +- [Overview](#overview) +- [Current Maintainers](#current-maintainers) +- [Emeritus](#emeritus) + +## Overview + +This document contains a list of maintainers in this repo. See [opensearch-project/.github/RESPONSIBILITIES.md](https://github.com/opensearch-project/.github/blob/main/RESPONSIBILITIES.md#maintainer-responsibilities) that explains what the role of maintainer means, what maintainers do in this and other repos, and how they should be doing it. If you're interested in contributing, and becoming a maintainer, see [CONTRIBUTING](CONTRIBUTING.md). + +## Current Maintainers + +| Maintainer | GitHub ID | Affiliation | +| ------------------------ | --------------------------------------------------------- | ----------- | +| Navneet Verma | [navneet1v](https://github.com/navneet1v ) | Amazon | +| Rajvaibhav Rahane | [Rajrahane](https://github.com/Rajrahane) | Amazon | +| Vamshi Vijay Nakkirtha | [vamshin](https://github.com/vamshin) | Amazon | +| Yigit Kiran | [yigithub](https://github.com/yigithub) | Amazon | +| Jay Deng | [jed326](https://github.com/jed326) | Amazon | +| Rohan Chitale | [rchitale7](https://github.com/rchitale7) | Amazon | +| Owen Halpert | [owenhalpert](https://github.com/owenhalpert) | Amazon | +| Neetika Singhal | [neetikasinghal](https://github.com/neetikasinghal) | Amazon | + +## Emeritus + +| Maintainer | GitHub ID | Affiliation | +| ------------------------ | --------------------------------------------------------- | ----------- | \ No newline at end of file diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000..46ffe3b --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,2 @@ +OpenSearch (https://opensearch.org/) +Copyright OpenSearch Contributors \ No newline at end of file diff --git a/ONBOARDING.md b/ONBOARDING.md new file mode 100644 index 0000000..a42c6df --- /dev/null +++ b/ONBOARDING.md @@ -0,0 +1,90 @@ +- [Getting Started as an OpenSearch Project Contributor](#getting-started-as-an-opensearch-project-contributor) + - [Introduction](#introduction) + - [Who is this for?](#who-is-this-for) + - [What will this guide help you do?](#what-will-this-guide-help-you-do) + - [Key Concepts](#key-concepts) + - [About the OpenSearch Project](#about-the-opensearch-project) + - [How We Work](#how-we-work) + - [Contributor Expectations](#contributor-expectations) + - [Resources and Links](#resources-and-links) + - [Set Up Accounts and Access](#set-up-accounts-and-access) + - [GitHub Account](#github-account) + - [OpenSearch Forum and Slack Accounts](#opensearch-forum-and-slack-accounts) + +# Getting Started as an OpenSearch Project Contributor + +## Introduction + +### Who is this for? + +Anyone who's interested in contributing code (features, fixes, documentation) to one of the OpenSearch Project open-source repositories for the first time. + +### What will this guide help you do? + +1. Understand the key concepts of the OpenSearch Project and how to find additional resources. +2. Set up the accounts you'll need to contribute. + +## Key Concepts + +### About the OpenSearch Project + +- **Read (3 min) [the project homepage](https://opensearch.org/)** to get a sense of what the OpenSearch software does and how it's used. +- **Read (4 min) "[About OpenSearch](https://opensearch.org/about.html)"** to understand the primary project components and development principles. +- Optional - Read founding documents to understand the project history + - Read (2 min) "[Linux Foundation Announces OpenSearch Software Foundation](https://www.linuxfoundation.org/press/linux-foundation-announces-opensearch-software-foundation-to-foster-open-collaboration-in-search-and-analytics) from September, 2024. + - Read (8 min) "[Introducing OpenSearch](https://aws.amazon.com/blogs/opensource/introducing-opensearch/)" from April, 2021. + - Read (6 min) "[Stepping up for a truly open source Elasticsearch](https://aws.amazon.com/blogs/opensource/stepping-up-for-a-truly-open-source-elasticsearch/)" from January, 2021. + +### How We Work + +We model our way of working on "[the Apache Way](https://apache.org/theapacheway)" (optional - read 4 min). Specifically, we've borrowed and adapted: + +- *Community Over Code:* A healthy community is a higher priority than good code. Strong communities can always rectify problems with their code, whereas an unhealthy community will likely struggle to maintain a codebase in a sustainable manner. +- *Earned Authority:* All individuals are given the opportunity to participate, but their influence is based on publicly earned merit – what they contribute to the community. Merit lies with the individual, does not expire, is not influenced by employment status or employer, and is non-transferable (merit earned in one project cannot be applied to another). +- *Open Communications:* All communications related to code and decision-making should be publicly accessible to ensure asynchronous collaboration, as necessitated by a globally-distributed community. +- *Community of Peers:* Individuals participate, not organizations. Roles are equal irrespective of title, votes hold equal weight, and contributions are made on a voluntary basis (even if paid to work on code). +- *Progress over Perfection:* Struggling with a test failure? Can't quite figure out why that data structure isn't doing what you expect? Feeling defeated by the complexities of that massively distributed compute engine? The community idea exists to help each other through difficult problems. So fail early, commit often, ask for help, and don't be afraid. + +### Contributor Expectations + +Contributors are subject to a code of conduct, and it's essential that all contributions are original work. + +- **Read (6 min) [the OpenSearch Code of Conduct](https://opensearch.org/codeofconduct.html)**. +- **Read (6 min) [the OpenSearch CONTRIBUTING Guide](https://github.com/opensearch-project/.github/blob/main/CONTRIBUTING.md)**. Please make sure you understand the implications of the [Developer Certificate of Origin](https://github.com/opensearch-project/.github/blob/main/CONTRIBUTING.md#developer-certificate-of-origin). + +### Resources and Links + +There are more than 100 [GitHub repositories](https://github.com/orgs/opensearch-project/repositories?q=&type=public&language=&sort=) that are part of the OpenSearch project. Explore the list to get a sense of the project breadth and scope. + +- The [roadmap](https://github.com/orgs/opensearch-project/projects/220) provides a single place to keep track of upcoming releases and current projects. + +Looking for answers? While [the forum](https://forum.opensearch.org/) and [Slack](https://opensearch.org/slack.html) are always a good option, it's worth checking these first. + +- [Frequently Asked Questions](https://opensearch.org/faq). +- [User Documentation](https://opensearch.org/docs/latest/). +- Developer Documentation + - Start with `DEVELOPER_GUIDE.md` in the repository you'll be working in (see [OpenSearch](https://github.com/opensearch-project/OpenSearch/blob/main/DEVELOPER_GUIDE.md) or [OpenSearch Dashboards](https://github.com/opensearch-project/OpenSearch-Dashboards/blob/main/DEVELOPER_GUIDE.md) guides). + - Most repositories have many other documentation files. To find them, search for Markdown files (`*.md` - [example](https://github.com/search?q=repo%3Aopensearch-project%2FOpenSearch-Dashboards+language%3AMarkdown&type=code&l=Markdown)), either on GitHub or in your editor. + +## Set Up Accounts and Access + +### GitHub Account + +To create issues, leave comments, or submit pull requests, you'll need a GitHub account. Already have a GitHub account? Great! If not, it's quick to get started. (We've summarized the most important steps for the OpenSearch project here, but for more complete information, see the [GitHub documentation](https://docs.github.com/en/get-started/onboarding/getting-started-with-your-github-account).) + +1. **Do (2 min) Sign up for an account** by navigating to https://github.com/ and following the prompts ([source](https://docs.github.com/en/get-started/onboarding/getting-started-with-your-github-account#1-creating-an-account)). +2. **Do (4 min) [Verify your email address](https://docs.github.com/en/get-started/signing-up-for-github/verifying-your-email-address)**. +3. Recommended - Do (20 min) Set up GitHub to connect with SSH + 1. [Check for existing SSH key](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys). + 2. [Generate new SSH key](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent). + 3. [Add a new SSH key](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account). + 4. [Test your SSH connection](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection). +4. Recommended - Do (8 min) [Configure 2-factor authentication](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication). +5. Optional - Read (5 min) If you're new to using GitHub or git, we recommend reviewing "[Using GitHub's tools and processes](https://docs.github.com/en/get-started/onboarding/getting-started-with-your-github-account#part-2-using-githubs-tools-and-processes)". + +### OpenSearch Forum and Slack Accounts + +There are multiple ways to [connect with the OpenSearch community](https://opensearch.org/connect.html), [the forum](https://forum.opensearch.org/) and [Slack](https://www.opensearch.org/slack.html) are the best places to start. + +- **Do (2 min)** [create an OpenSearch forum](https://forum.opensearch.org/) account. +- **Do (2 min)** [create an OpenSearch Slack](https://www.opensearch.org/slack.html) account. \ No newline at end of file diff --git a/OpenSearch.svg b/OpenSearch.svg new file mode 100644 index 0000000..bd4ae0f --- /dev/null +++ b/OpenSearch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/README.md b/README.md index 7581699..f882d26 100644 --- a/README.md +++ b/README.md @@ -1 +1,53 @@ -# remote-vector-index-builder- \ No newline at end of file +![OpenSearch logo](OpenSearch.svg) +# Remote Vector Index Builder + +- [Welcome!](#welcome) +- [Project Resources](#project-resources) +- [Project Style Guidelines](#project-style-guidelines) +- [Code of Conduct](#code-of-conduct) +- [License](#license) +- [Copyright](#copyright) + +## Welcome! + +**OpenSearch Project** is [a community-driven, open source fork](https://aws.amazon.com/blogs/opensource/introducing-opensearch/) of [Elasticsearch](https://en.wikipedia.org/wiki/Elasticsearch) and [Kibana](https://en.wikipedia.org/wiki/Kibana) licensed under the [Apache v2.0 License](LICENSE.txt). + +OpenSearch is supported by [The OpenSearch Software Foundation](https://foundation.opensearch.org/), a project of [The Linux Foundation](https://www.linuxfoundation.org/). You can read the launch announcement [here](https://www.linuxfoundation.org/press/linux-foundation-announces-opensearch-software-foundation-to-foster-open-collaboration-in-search-and-analytics) and learn more about joining the foundation [here](https://foundation.opensearch.org/). + +For more information, see [opensearch.org](https://opensearch.org/). + +## Project Resources + +* [Project Website](https://opensearch.org/) +* [OpenSearch Software Foundation](https://foundation.opensearch.org/) +* [Downloads](https://opensearch.org/downloads.html) +* [Documentation](https://opensearch.org/docs/latest/) +* Need help? Try [Forums](https://forum.opensearch.org/) +* Talk to other developers? [Slack](https://opensearch.org/slack.html) +* [Communications](https://github.com/opensearch-project/community/blob/main/COMMUNICATIONS.md) +* [Project Principles](https://opensearch.org/about.html#principles-for-development) +* [Contributing to OpenSearch](CONTRIBUTING.md) +* [Proposing Features](FEATURES.md) +* [Onboarding Guide](ONBOARDING.md) +* [Maintainer Responsibilities](RESPONSIBILITIES.md) +* [Release Management](RELEASING.md) +* [Organization Admins](ADMINS.md) +* [Repo Maintainers](MAINTAINERS.md) +* [Issue Triage](TRIAGING.md) +* [Security](SECURITY.md) + +## Project Style Guidelines + +The [OpenSearch Project style guidelines](https://github.com/opensearch-project/documentation-website/blob/main/STYLE_GUIDE.md) and [OpenSearch terms](https://github.com/opensearch-project/documentation-website/blob/main/TERMS.md) documents provide style standards and terminology to be observed when creating OpenSearch Project content. + +## Code of Conduct + +This project has adopted the [Amazon Open Source Code of Conduct](CODE_OF_CONDUCT.md). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq), or contact [conduct@opensearch.foundation](mailto:conduct@opensearch.foundation) with any additional questions or comments. + +## License + +This project is licensed under the [Apache v2.0 License](LICENSE.txt). + +## Copyright + +Copyright OpenSearch Contributors. See [NOTICE](NOTICE.txt) for details. \ No newline at end of file diff --git a/RESPONSIBILITIES.md b/RESPONSIBILITIES.md new file mode 100644 index 0000000..6c2e657 --- /dev/null +++ b/RESPONSIBILITIES.md @@ -0,0 +1,167 @@ +- [Overview](#overview) +- [Current Maintainers](#current-maintainers) +- [Maintainer Responsibilities](#maintainer-responsibilities) + - [Uphold Code of Conduct](#uphold-code-of-conduct) + - [Prioritize Security](#prioritize-security) + - [Review Pull Requests](#review-pull-requests) + - [Merging a Pull Request](#merging-a-pull-request) + - [Triage Open Issues](#triage-open-issues) + - [Automatically Label Issues](#automatically-label-issues) + - [Be Responsive](#be-responsive) + - [Maintain Overall Health of the Repo](#maintain-overall-health-of-the-repo) + - [Keep Dependencies up to Date](#keep-dependencies-up-to-date) + - [Manage Roadmap](#manage-roadmap) + - [Add Continuous Integration Checks](#add-continuous-integration-checks) + - [Use SemVer](#use-semver) + - [Release Frequently](#release-frequently) + - [Promote Other Maintainers](#promote-other-maintainers) + - [Describe the Repo](#describe-the-repo) +- [Becoming a Maintainer](#becoming-a-maintainer) + - [Nomination](#nomination) + - [Interest](#interest) + - [Addition](#addition) +- [Removing a Maintainer](#removing-a-maintainer) + - [Moving On](#moving-on) + - [Inactivity](#inactivity) + - [Negative Impact on the Project](#negative-impact-on-the-project) + +## Overview + +This document explains who maintainers are, what they do in various repos of opensearch-project, and how they should be doing it. If you're interested in contributing, see [CONTRIBUTING](CONTRIBUTING.md). + +## Current Maintainers + +Each repo contains a [MAINTAINERS.md](MAINTAINERS.md) file that lists current maintainers, and points to this document. + +## Maintainer Responsibilities + +Maintainers are active and visible members of the community, and have [maintain-level permissions on a repository](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-permission-levels-for-an-organization). Use those privileges to serve the community and evolve code as follows. + +### Uphold Code of Conduct + +Model the behavior set forward by the [Code of Conduct](CODE_OF_CONDUCT.md) and raise any violations to other maintainers and [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md). + +### Prioritize Security + +Security is your number one priority. Maintainer's Github keys must be password protected securely and any reported security vulnerabilities are addressed before features or bugs. + +Note that this repository is monitored and OpenSearch Security Team, see [Reporting a Vulnerability](SECURITY.md) for details. + +### Review Pull Requests + +It's our responsibility to ensure the content and code in pull requests are correct and of high quality before they are merged. Here are some best practices: + +- Leverage the issue triaging process to review pull requests and assign them to maintainers for review. +- In cases of uncertainty on how to proceed, search for related issues and reference the pull request to find additional collaborators. +- When providing feedback on pull requests, make sure your feedback is actionable to guide the pull request towards a conclusion. +- If a pull request is valuable but isn't gaining traction, consider reaching out to fulfill the necessary requirements. This way, the pull request can be merged, even if the work is done by several individuals. +- Lastly, strive for progress, not perfection. + +### Merging a Pull Request + +It is important that commit messages are helpful in understanding the reasons for a given commit and maintain good commit hygiene by only keeping the relevant information. + +Most repositories in [opensearch-project](https://github.com/opensearch-project) are configured to require commits to be squashed into a single commit when merging pull requests. If the pull request contains multiple commits then messages from all commits will be appended into a single message, which usually requires editing to produce a high quality commit message. When merging pull requests, edit commit messages by following these steps as much as possible: + +- The commit subject should be concise (ideally within 50 characters) and clearly convey what is being merged. +- The commit body should include the details (if any, and possibly within 72 characters) about the commit, typically inline with the PR description. +- The commit body should include the 'Signed-off-by:*' for all committers involved in the change and thereby indicating that all code contributors agree to the [DCO](https://github.com/opensearch-project/.github/blob/main/CONTRIBUTING.md#developer-certificate-of-origin). +- There need to be a matching 'Signed-Off-By:' line for the `This commit will be authored by *` email address otherwise backport DCO checks will fail. + +### Triage Open Issues + +Manage labels, review issues regularly, and triage by labelling them. + +All repositories in this organization have a standard set of labels, including `bug`, `documentation`, `duplicate`, `enhancement`, `good first issue`, `help wanted`, `blocker`, `invalid`, `question`, `wontfix`, and `untriaged`, along with release labels, such as `v1.0.0`, `v1.1.0`, `v2.0.0`, `patch`, and `backport`. + +Use labels to target an issue or a PR for a given release, add `help wanted` to good issues for new community members, and `blocker` for issues that scare you or need immediate attention. Request for more information from a submitter if an issue is not clear. Create new labels as needed by the project. + +See [TRIAGING](TRIAGING.md) for more information on how to attend triage meetings. + +#### Automatically Label Issues + +There are many tools available in GitHub for controlling labels on issues and pull requests. Use standard issue templates in the [./.github/ISSUE_TEMPLATE](./.github/ISSUE_TEMPLATE) directory to apply appropriate labels such as `bug` and `untriaged`. Repositories can choose to use GitHub actions such as [add-untriaged.yml](./.github/workflows/add-untriaged.yml) to apply labels automatically. + +### Be Responsive + +Respond to enhancement requests, and forum posts. Allocate time to reviewing and commenting on issues and conversations as they come in. + +### Maintain Overall Health of the Repo + +Keep the `main` branch at production quality at all times. Backport features as needed. Cut release branches and tags to enable future patches. + +#### Keep Dependencies up to Date + +Maintaining up-to-date dependencies on third party projects reduces the risk of security vulnerabilities. The Open Source Security Foundation (OpenSSF) [recommends](https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool) either [dependabot](https://docs.github.com/en/code-security/dependabot) or [renovatebot](https://docs.renovatebot.com/). Both of these applications generate Pull Requests for dependency version updates. + - Renovate is integrated as part of the Remediate app in [Mend for Github](https://github.com/apps/mend-for-github-com), which is enabled on all opensearch-project repositories. It can be enabled in the `.whitesource` configuration file as described in the [Mend Remediate and Renovate](https://docs.mend.io/bundle/integrations/page/mend_remediate_and_renovate.html#Integration-with-Mend-Renovate) documentation. The [Merge Confidence](https://docs.renovatebot.com/merge-confidence/) feature can be configured to provide maintainers more information on the age, adoption rate, and percent test passing rate of other repositories. Mend maintains a "Dependency Dashboard" Issue in the repository with centralized information on pending version update PRs. + - Dependabot is integrated with GitHub and can be enabled by adding a [`dependabot.yml`](https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates) file to the repo. Dependabot does not have any centralized management dashboard, so maintainers may use tags or other PR filters to track pending updates. + +### Manage Roadmap + +Ensure the repo highlights features that should be elevated to the project roadmap. Be clear about the feature’s status, priority, target version, and whether or not it should be elevated to the roadmap. Any feature that you want highlighted on the OpenSearch Roadmap should be tagged with "roadmap". The OpenSearch [project-meta maintainers](https://github.com/opensearch-project/project-meta/blob/main/MAINTAINERS.md) will highlight features tagged "roadmap" on the project wide [OpenSearch Roadmap](https://github.com/orgs/opensearch-project/projects/1). + +### Add Continuous Integration Checks + +Add integration checks that validate pull requests and pushes to ease the burden on Pull Request reviewers. + +### Use SemVer + +Use and enforce [semantic versioning](https://semver.org/) and do not let breaking changes be made outside of major releases. + +### Release Frequently + +Make frequent project releases to the community. + +### Promote Other Maintainers + +Assist, add, and remove [MAINTAINERS](MAINTAINERS.md). Exercise good judgement, and propose high quality contributors to become co-maintainers. See [Becoming a Maintainer](#becoming-a-maintainer) for more information. + +### Describe the Repo + +Make sure the repo has a well-written, accurate, and complete description. See [opensearch-project/.github#38](https://github.com/opensearch-project/.github/issues/38) for some helpful tips to describe your repo. + +## Becoming a Maintainer + +You can become a maintainer by actively [contributing](CONTRIBUTING.md) to any project, and being nominated by an existing maintainer. + +### Nomination + +Any current maintainer starts a private e-mail thread (until we have a better mechanism, e-mail addresses can usually be found via MAINTAINERS.md + DCO) with all other maintainers on that repository to discuss nomination using the template below. In order to be approved, at least three positive (+1) maintainer votes are necessary, and no vetoes (-1). In rare cases when there are fewer than three maintainers, the positive (+1) votes from all maintainers are required. Any disagreements can be escalated to the [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md). + +The nomination should clearly identify the person with their real name and a link to their GitHub profile, and the rationale for the nomination, with concrete example contributions. + +### Interest + +Upon receiving at least three positive (+1) maintainer votes, and no vetoes (-1), from existing maintainers after a one week period, the nominating maintainer asks the nominee whether they might be interested in becoming a maintainer on the repository via private e-mail message. + +> This is great work! Based on your valuable contribution and ongoing engagement with the project, the current maintainers invite you to become a co-maintainer for this project. Please respond and let us know if you accept the invitation to become maintainer. + +Individuals accept the nomination by replying, or commenting, for example _"Thank you! I would love to."_ + +### Addition + +Upon receiving three positive (+1) maintainer votes, and no vetoes (-1), from other maintainers, and after having privately confirmed interest with the nominee, the maintainer opens a pull request adding the proposed co-maintainer to MAINTAINERS.md. The pull request is approved and merged. + +> _Content from the above nomination._ +> +> The maintainers have voted and agreed to this nomination. + +The [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) adjusts the new maintainer’s permissions accordingly, and merges the pull request. + +## Removing a Maintainer + +Removing a maintainer is a disruptive action that the community of maintainers should not undertake lightly. There are several reasons a maintainer will be removed from the project, such as violating the [code of conduct](https://github.com/opensearch-project/.github/blob/main/CODE_OF_CONDUCT.md), or taking other actions that negatively impact the project. + +### Moving On + +There are plenty of reasons that might cause someone to want to take a step back or even a hiatus from a project. Existing maintainers can choose to leave the project at any time, with or without reason, by making a pull request to move themselves to the "Emeritus" section of MAINTAINERS.md, and asking an [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) to remove their permissions. + +### Inactivity + +Maintainer status never expires. If a maintainer becomes inactive for a time (usually several months), or a maintainer can confirm that they are no longer involved with the project for any reason, the [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) may make a pull request to move them to the "Emeritus" section of the MAINTAINERS.md, remove them from CODEOWNERS, and upon merging the pull request, revoke the maintainer level access. Any past maintainer can be reinstated via another pull request, and have their permissions restored by the [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) at any time upon request. + +If the repo is left without any maintainers, either by maintainer inactivity or moving on, the repo is considered unmaintained. The [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) will seek out new maintainers and note the maintenance status in the repo README file. + +### Negative Impact on the Project + +Actions that negatively impact the project will be handled by the [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md), in coordination with other maintainers, in balance with the urgency of the issue. Examples would be [Code of Conduct](CODE_OF_CONDUCT.md) violations, deliberate harmful or malicious actions, and security risks. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e738a85 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,91 @@ +# Security Issue Response Process + +## Introduction + +Security issues happen as part of the normal lifecycle of software development of OpenSearch. This document describes the process for reporting these issues, responding to these issues, and ensuring we treat them not only with the appropriate priority but also with respect for the discoverers, software providers and their users, and the OpenSearch community in general. + +If you discover a potential security issue in this project we ask that you notify the OpenSearch Security Team via email to security@opensearch.org. Please do **not** create a public GitHub issue. + +*Giving credit where credit is due, this policy is heavily influenced by the [Xen Project’s security response process](https://xenproject.org/developers/security-policy/), that was put to the test during the [embargo period for XSA-108 back in 2014](https://xenproject.org/2014/10/22/xen-project-security-policy-improvements-get-involved/) and improved its clarity around managing the pre-disclosure list and the deployment of fixes during embargo. We are standing on the shoulders of these battle-tested giants.* + +## Security Response Team (SRT) + +The OpenSearch Security Response Team (SRT) is comprised of a subset of the project’s maintainers responsible for looking after the project’s security, including the security issue response process outlined below. New SRT members are nominated by current SRT members. + +SRT will address reported issues on a best effort basis, prioritizing them based on several factors, including severity. + +### Current Members + +| Security Response Team | GitHub Alias | Affiliation | +| ------------------------ | ----------------------------------------------------------- | ----------- | +| Kunal Khatua | [kkhatua](https://github.com/kkhatua) | Amazon | +| Daniel (dB.) Doubrovkine | [dblock](https://github.com/dblock) | Amazon | +| Varun Lodaya | [varun-lodaya](https://github.com/varun-lodaya) | Amazon | +| Prabhat Chathurvedi | [prabhat-chaturvedi](https://github.com/prabhat-chaturvedi) | Amazon | +| Craig Perkins | [cwperks](https://github.com/cwperks) | Amazon | +| Nils Bandener | [nibix](https://github.com/nibix) | Eliatra | +| Andrew Redko | [reta](https://github.com/reta) | Aiven | +| Andrey Pleskach | [willyborankin](https://github.com/willyborankin) | Aiven | +| Ryan Liang | [RyanL1997](https://github.com/RyanL1997) | Amazon | + +## Process + +Anyone finding an issue that is already publicly disclosed (for example, a CVE in one of the project’s dependencies) should feel free to create an issue and discuss openly on GitHub. The process below is only intended for issues that have not been publicly disclosed yet. + +1. We request that instead of opening a GitHub issue, it is reported via email at security@opensearch.org. Please include a description of the issue, and any other information that could help in the reproduction and creation of a fix (version numbers, configuration values, reproduction steps...) +2. The OpenSearch Security Team will negotiate the conditions for an embargo period and a disclosure timeline with the discoverer (see [Embargo Schedule](#embargo-schedule)). +3. After the vulnerability is confirmed, if no CVE number is already reserved, the OpenSearch Security Team will reserve one, and communicate it to the discoverer and all parties in the pre-disclosure list (see [Pre-disclosure list](#pre-disclosure-list)). +4. As soon as our advisory is available, we will send it, including patches, to members of the pre-disclosure list. In the event that we do not have a patch available 2 working weeks before the disclosure date, we aim to send an advisory that reflects the current state of knowledge to the pre-disclosure list. An updated advisory will be published as soon as available. At this stage, the advisory will be clearly marked with the embargo date. +5. On the day the embargo is lifted, we will publish the advisory and release the new versions containing the fix. +6. If new information and/or better fixes become available, new advisory versions will be released. + +During an embargo period, the OpenSearch Security Team may be required to make potentially controversial decisions in private, since they cannot confer with the community without breaking the embargo. The team will attempt to make such decisions following the guidance of this document and, where necessary, their own best judgement. Following the embargo period, on a best effort basis, the Security Team will disclose any such decisions, including the reasoning behind them, in the interests of transparency and to help provide guidance should a similar decision be required in the future. + +## Embargo Schedule + +Embargo periods will be negotiated on a case-by-case basis depending on the severity of the issue and availability of the fix, where a general starting point is to release an advisory to the pre-disclosure list within 2 weeks of the initial notification, and publicly releasing the advisory within 4 weeks of the advisory pre-release. + +When a discoverer reports a problem to us and requests longer delays than we would consider ideal, we will honor such a request if reasonable. If a discoverer wants an accelerated disclosure compared to what we would prefer, we naturally do not have the power to insist that a discoverer waits for us to be ready and will honor the date specified by the discoverer. +Naturally, if a vulnerability is being exploited in the wild, we will make immediately public release of the patch(es.) + +## Pre-disclosure List + +We maintain a pre-disclosure list of contributors, vendors and operators of OpenSearch for two main reasons: + +1. To apply the fixes to large user populations requiring a significant amount of work post-disclosure +2. To privately collaborate with those who can help write and test the fixes so we can release them as soon as possible and with high confidence in their quality + +If there is an embargo, the pre-disclosure list will receive copies of the advisory and patches, with a clearly marked embargo date, as soon as they are available. The pre-disclosure list will also receive copies of public advisories when they are first issued or updated. + +We expect list members to maintain the confidentiality of the vulnerability up to the embargo date. Specifically, prior to the embargo date, pre-disclosure list members should not make available, even to their own customers and partners: + +* The OpenSearch advisory +* Their own advisory +* The impact, scope, set of vulnerable systems or the nature of the vulnerability +* Revision control commits which are a fix for the problem +* Patched software (even in binary form) + +Without prior consultation with the OpenSearch Security Team, list members may make available to their users only: + +* The existence of an issue +* The assigned OpenSearch advisory number +* The planned disclosure date + +List members may, if (and only if) the OpenSearch Security Team grants permission, deploy fixed versions during the embargo. Permission for deployment, and any restrictions, will be stated in the embargoed advisory text. Where the list member is a service provider who intends to take disruptive action such as rebooting as part of deploying a fix: the list member’s communications to its users about the service disruption may mention that the disruption is to correct a security issue, and relate it to the public information about the issue (as listed above). This applies whether the deployment occurs during the embargo (with permission–see above) or is planned for after the end of the embargo. + +Pre-disclosure list members are allowed to share fixes to embargoed issues, analysis, etc., with the OpenSearch Security Team and security teams of other list members. Technical measures must be taken to prevent non-list-member organizations, or unauthorized staff in list-member organizations, from obtaining the embargoed materials. + +## Pre-disclosure list application process + +Organizations who meet the criteria above (i.e. significant work needed post-disclosure to remediate the issue and/or ability to help create or test the potential fixes) should contact the OpenSearch Security Team via email at security@opensearch.org if they wish to be added to the pre-disclosure list. In the email, you must include: + +* The name of your organization +* How you’re using OpenSearch +* A description of why you fit the criteria (number of users, amount of work needed to remediate, ability to collaborate on fixes...) +* Information about your handling of security problems + * Your invitation to members of the public, who discover security problems with your products/services, to report them in confidence to you + * Specifically, the contact information (email addresses or other contact instructions) which such a member of the public should use +* A statement to the effect that you have read this policy and agree to abide by the terms for inclusion in the list, specifically the requirements to regarding confidentiality during an embargo period +* The email(s) you wish added to the pre-disclosure list + +The OpenSearch Security Team will review your application and get back to you with their decision. \ No newline at end of file diff --git a/TRIAGING.md b/TRIAGING.md new file mode 100644 index 0000000..572f22a --- /dev/null +++ b/TRIAGING.md @@ -0,0 +1,77 @@ +## Issue Triage + +When a new issue is opened in a repo in the opensearch-project GitHub org it is automatically labeled as `untriaged`. The maintainers of many active OpenSearch Project repos facilitate [weekly triage meetings](https://www.meetup.com/opensearch/events/) that are open to all, and attendance is encouraged for anyone who hopes to contribute, discuss a new or existing issue, or learn more about the project. Some examples include [core](https://github.com/opensearch-project/OpenSearch/blob/main/TRIAGING.md) and [security triage](https://github.com/opensearch-project/security/blob/main/TRIAGING.md). In addition, a "catch all" weekly triage meeting is held to quickly review untriaged issues in less active repos and ensure that no new issue is left unattended. + +### What is the purpose of triage meetings? + +The purpose of the triage meetings is to ensure every issue created in the opensearch-project GitHub org receives a response, and no security-related issue remains unattended. Many issues receive immediate engagement and do not need to be triaged. Triage meetings ensure that every issue is filed in the most appropriate repo and contains enough information to be actionable. Triage meetings do not seek to resolve or close all issues, as follow-up discussion and eventual resolution will happen on the issue itself. + +### Which triage meeting should I attend? + +You should attend the meeting for the repo where your issue was opened, or the "catch all" triage if your issue has not seen much traction for an extended period of time. + +### Do I need to attend for my issue to be addressed/triaged? + +Attendance is always welcome, but requesters are not required to attend triage meetings in order for their issue to be addressed. + +### What happens if my issue does not get covered this time? + +During each meeting we seek to address all new issues. However, should we run out of time before your issue is discussed, you are always welcome to attend the next meeting or to follow up on the issue post itself. + +### How do I join triage? + +Meetings are hosted regularly and can be joined via the links posted on the [OpenSearch Meetup Group](https://www.meetup.com/opensearch/events/) list of events. The events are typically titled `Development Backlog & Triage Meeting`. + +After joining the virtual meeting, you can enable your video/voice to join the discussion. If you do not have a webcam or microphone available, you can still join in via the text chat. + +If you have an issue you'd like to bring forth please consider getting a link to the issue so it can be presented to everyone in the meeting. + +### Is there an agenda for each week? + +Meetings are typically 60 minutes and structured as follows: + +1. Initial Gathering: As we gather, feel free to turn on video and engage in informal and open-to-all conversation. After a bit a volunteer will share their screen and proceed with the agenda. +2. Announcements: If there are any announcements to be made they will happen at the start of the meeting. +3. Review of New Issues: The meetings always start with reviewing all untriaged issues. For example, the "catch all" meeting reviews [untriaged issues](https://github.com/search?q=label%3Auntriaged+is%3Aopen++org%3Aopensearch-project&type=issues&ref=advsearch&s=created&o=asc), oldest first. +4. Untriaged Items: Review any issues that might have had the `untriaged` label removed, but require additional triage discussion. +5. Pull Request Discussion: Review the status of outstanding pull requests if there's time. +6. Open Discussion: Allow for members of the meeting to surface any topics without issues filed or pull request created. + +There is no specific ordering within each category. + +### How does an issue get "triaged"? + +1. Attendees of triage meetings copy-paste links to their GitHub accounts into chat. +2. A volunteer that runs a triage meeting prepares a label such as `[[Triage](https://github.com/opensearch-project/.github/blob/main/TRIAGING.md) [1](...) [2](...)]` where the `[1](...)`, `[2](...)`, ... tags are links to GitHub accounts of the attendees. +3. The `untriaged` label is removed from every issue being reviewed. +4. The issue gets a comment using the above-mentioned label and any other comments as needed. + +### Do I need to have already contributed to the project to attend a triage meeting? + +No, all are welcome and encouraged to attend. Attending the Backlog & Triage meetings is a great way for a new contributor to learn about the project as well as explore different avenues of contribution. + +### What if I have an issue that is almost a duplicate, should I open a new one to be triaged? + +You can always open an issue including one that you think may be a duplicate. However, in cases where you believe there is an important distinction to be made between an existing issue and your newly created one, you are encouraged to attend the triage meeting to explain. + +### What if I have follow-up questions on an issue? + +If you have an existing issue you would like to discuss, you can always comment on the issue itself. Alternatively, you are welcome to come to the triage meeting to discuss. + +### Is this where I should bring up potential security vulnerabilities? + +No. Due to the sensitive nature of security vulnerabilities, please report all potential vulnerabilities directly by following the steps outlined in [SECURITY.md](https://github.com/opensearch-project/.github/blob/main/SECURITY.md). Do not create security issues on GitHub. + +### What does an issue comment that says `[Catch All Triage - [1](...), [2](...)]` mean? + +This means the issue was flagged as untriaged for more than 2 weeks during "catch all" triage. The GitHub profiles of the community members attending are linked as `[1]`, `[2]`, etc. The issue was quickly reviewed for validity and urgency, the "untriaged" label was removed, and this comment was added. + +If you are a community member contributing to a repo that received this comment, please step up to establish a regular triage and avoid seeing the issue in the "catch all" one. + +### Who should I contact if I have further questions? + +We recommend using the [forum](https://forum.opensearch.org/) or [public Slack](https://opensearch.org/slack.html). + +### Code of Conduct + +All hosts and participants involved in Triage are expected to follow the [OpenSearch Project Code of Conduct](CODE_OF_CONDUCT.md). \ No newline at end of file diff --git a/profile/README.md b/profile/README.md new file mode 100644 index 0000000..7836a56 --- /dev/null +++ b/profile/README.md @@ -0,0 +1,34 @@ +![OpenSearch logo and name on top of a dark blue background with a slight honeycomb pattern](https://raw.githubusercontent.com/opensearch-project/.github/main/profile/banner.jpg) + +OpenSearch Project is a community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data. Developers build with OpenSearch for use cases such as application search, log analytics, data observability, data ingestion, and more. + +OpenSearch is supported by [The OpenSearch Software Foundation](https://foundation.opensearch.org/), a project of [The Linux Foundation](https://www.linuxfoundation.org/). You can read the launch announcement [here](https://www.linuxfoundation.org/press/linux-foundation-announces-opensearch-software-foundation-to-foster-open-collaboration-in-search-and-analytics) and learn more about joining the foundation [here](https://foundation.opensearch.org/). + +## Using + +Download and try [OpenSearch](https://opensearch.org/docs/latest/opensearch/install/docker/) 🔎 or use the demo [OpenSearch Dashboards](https://playground.opensearch.org/auth/anonymous) 🖥. Integrate your application using one of many [client libraries](https://opensearch.org/docs/latest/clients/) 📚. + +## Contributing ✍️ + +We are built 🧱 by the community for the community. There are many ways to contribute. + +- 📖 Read our [step-by-step onboarding guide](../ONBOARDING.md) to help you get oriented and prepared to contribute. +- 👀 Check out a project's [contributing guide](../CONTRIBUTING.md) to learn how to contribute code. +- ✍️ Write [a blog post](https://github.com/opensearch-project/project-website). +- 📘 Help author [documentation](https://github.com/opensearch-project/documentation-website). + +## Get Involved in our Community! + +There are several places where our community meets. Make sure to check them out! + +- 📝 [Forum](https://forum.opensearch.org/) +- 💬 [Slack](https://opensearch.org/slack.html) +- 🗣️ [User Groups & Triage meetings](https://www.meetup.com/pro/opensearchproject/) +- ▶️ [YouTube](https://www.youtube.com/c/OpenSearchProject) +- 🧑‍💼 [LinkedIn](https://www.linkedin.com/company/opensearch-project/) +- 🐘 [Mastodon](https://fosstodon.org/@OpenSearchProject) +- 🐤 [Twitter](https://twitter.com/OpenSearchProj) + +---- + +This project has adopted the [OpenSearch Software Foundation Code of Conduct](https://github.com/opensearch-project/.github/blob/main/CODE_OF_CONDUCT.md). Copyright OpenSearch Contributors. See [NOTICE](https://github.com/opensearch-project/.github/blob/main/NOTICE.txt) for details. OpenSearch is a registered trademark of The Linux Foundation. diff --git a/profile/banner.jpg b/profile/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bac19f97522e93568e2cd050617898afd14e6d1d GIT binary patch literal 141210 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

n7XrGHIF1Rw5b26 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 Date: Tue, 18 Feb 2025 15:42:48 -0800 Subject: [PATCH 2/3] add github templates, workflows, codeowners Signed-off-by: Rajvaibhav Rahane --- .github/CODEOWNERS | 2 + .github/ISSUE_TEMPLATE/BUG_TEMPLATE.md | 24 +++++++++ .../FEATURE_REQUEST_TEMPLATE.md | 18 +++++++ .../GITHUB_REQUEST_TEMPLATE.yaml | 51 +++++++++++++++++++ .github/ISSUE_TEMPLATE/PROPOSAL_TEMPLATE.md | 40 +++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 10 ++++ .github/PULL_REQUEST_TEMPLATE.md | 8 +++ .github/workflows/add-untriaged.yml | 19 +++++++ .github/workflows/link-checker.yml | 17 +++++++ .lycheeignore | 1 + 10 files changed, 190 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/ISSUE_TEMPLATE/BUG_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/FEATURE_REQUEST_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/GITHUB_REQUEST_TEMPLATE.yaml create mode 100644 .github/ISSUE_TEMPLATE/PROPOSAL_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/add-untriaged.yml create mode 100644 .github/workflows/link-checker.yml create mode 100644 .lycheeignore diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..528bc2f --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# This should match the owning team set up in https://github.com/orgs/opensearch-project/teams +* @Rajrahane @navneet1v @yigithub @vamshin @jed326 @rchitale7 @owenhalpert @neetikasinghal diff --git a/.github/ISSUE_TEMPLATE/BUG_TEMPLATE.md b/.github/ISSUE_TEMPLATE/BUG_TEMPLATE.md new file mode 100644 index 0000000..55a660b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_TEMPLATE.md @@ -0,0 +1,24 @@ +--- +name: 🐛 Bug Report +about: Create a report to help us improve +title: '[BUG]' +labels: 'bug, untriaged' +assignees: '' +--- +### What is the bug? +_A clear and concise description of the bug._ + +### How can one reproduce the bug? +_Steps to reproduce the behavior._ + +### What is the expected behavior? +_A clear and concise description of what you expected to happen._ + +### What is your host/environment? +_Operating system, version._ + +### Do you have any screenshots? +_If applicable, add screenshots to help explain your problem._ + +### Do you have any additional context? +_Add any other context about the problem._ diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_TEMPLATE.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..df7215d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_TEMPLATE.md @@ -0,0 +1,18 @@ +--- +name: 🎆 Feature Request +about: Request a feature in this project +title: '[FEATURE]' +labels: 'enhancement, untriaged' +assignees: '' +--- +### Is your feature request related to a problem? +_A clear and concise description of what the problem is, e.g. I'm always frustrated when [...]._ + +### What solution would you like? +_A clear and concise description of what you want to happen._ + +### What alternatives have you considered? +_A clear and concise description of any alternative solutions or features you've considered._ + +### Do you have any additional context? +_Add any other context or screenshots about the feature request here._ diff --git a/.github/ISSUE_TEMPLATE/GITHUB_REQUEST_TEMPLATE.yaml b/.github/ISSUE_TEMPLATE/GITHUB_REQUEST_TEMPLATE.yaml new file mode 100644 index 0000000..0e662cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/GITHUB_REQUEST_TEMPLATE.yaml @@ -0,0 +1,51 @@ +--- +name: '⚙️ GitHub Request' +description: 'Request an update to permissions/management/settings on the opensearch-project GitHub organization or its repositories.' +title: '[GitHub Request]' +labels: ['github-request'] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to submit this GitHub Request! Please note that the estimated time for the request to be resolved is 7-10 days from the time of the request. + - type: dropdown + attributes: + description: 'Provide request type.' + label: 'What is the type of request?' + multiple: false + options: + - # Empty first option to force selection. + - User Permission + - Organization Membership + - Repository Management + - Settings Update + - Secret Update + - GitHub Action + - Other + validations: + required: true + - type: textarea + attributes: + description: 'Describe the actions you are requesting (e.g., GitHub Actions in the take too long to allocate runners). If this is about a repository, please contact the corresponding maintainers before raising the issue.' + label: 'Details of the request' + validations: + required: true + - type: textarea + attributes: + description: 'Provide reasons for your request. For example, if you request to add a new maintainer to a repository, confirm that you have followed the steps in the [Becoming a Maintainer](https://github.com/opensearch-project/.github/blob/main/RESPONSIBILITIES.md#becoming-a-maintainer) guide, and provide the required materials and votes.' + label: 'Additional information to support your request' + validations: + required: true + - type: textarea + attributes: + description: 'Provide the timeline of your request. Requests typically require 7-10 business days to process. Specify your request timeline and whether or not it is an urgent request.' + label: 'When does this request need to be completed?' + validations: + required: true + - type: textarea + attributes: + label: 'Notes' + value: | + Track the progress of your request here: https://github.com/orgs/opensearch-project/projects/208/views/33. + Member of @opensearch-project/admin will take a look at the request soon. + Thanks! diff --git a/.github/ISSUE_TEMPLATE/PROPOSAL_TEMPLATE.md b/.github/ISSUE_TEMPLATE/PROPOSAL_TEMPLATE.md new file mode 100644 index 0000000..5853405 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/PROPOSAL_TEMPLATE.md @@ -0,0 +1,40 @@ +--- +name: 💭 Proposal +about: Suggest an idea for a specific feature you wish to propose to the community for comment +title: '[PROPOSAL]' +labels: proposal +assignees: '' +--- +## What/Why +### What are you proposing? +_In a few sentences, describe the feature and its core capabilities._ + +### What users have asked for this feature? +_Highlight any research, proposals, requests or anecdotes that signal this is the right thing to build. Include links to GitHub Issues, Forums, Stack Overflow, Twitter, etc._ + +### What problems are you trying to solve? +_Summarize the core use cases and user problems and needs you are trying to solve. Describe the most important user needs, pain points and jobs as expressed by the user asks above. Template: When \ , a \ wants to \, so they can \ (e.g. When **searching by postal code**, **a buyer** wants to **be required to enter a valid code** so they **don’t waste time searching for a clearly invalid postal code.**)._ + +### What is the developer experience going to be? +_Does this have a REST API? If so, please describe the API and any impact it may have to existing APIs. In a brief summary (not a spec), highlight what new REST APIs or changes to REST APIs are planned. as well as any other API, CLI or Configuration changes that are planned as part of this feature._ + +#### Are there any security considerations? +_Describe whether the feature has any security considerations or impact. What is the security model of the new APIs? Features should be integrated into the OpenSearch security suite and so if they are not, we should highlight the reasons here._ + +#### Are there any breaking changes to the API +_If this feature will require breaking changes to any APIs, outline what those will be and why they are needed. What is the path to minimizing impact? (e.g. add new API and deprecate the old one)._ + +### What is the user experience going to be? +_Describe the feature requirements and or user stories. You may include low-fidelity sketches, wireframes, APIs stubs, or other examples of how a user would use the feature via CLI, OpenSearch Dashboards, REST API, etc. Using a bulleted list or simple diagrams to outline features is okay. If this is net new functionality, call this out as well._ + +#### Are there breaking changes to the User Experience? +_Will this change the existing user experience? Will this be a breaking change from a user flow or user experience perspective?_ + +### Why should it be built? Any reason not to? +_Describe the value that this feature will bring to the OpenSearch community, as well as what impact it has if it isn't built, or new risks if it is. Highlight opportunities for additional research._ + +### What will it take to execute? +_Describe what it will take to build this feature. Are there any assumptions you may be making that could limit scope or add limitations? Are there performance, cost, or technical constraints that may impact the user experience? Does this feature depend on other feature work? What additional risks are there?_ + +### Any remaining open questions? +_What are known enhancements to this feature? Any enhancements that may be out of scope but that we will want to track long term? List any other open questions that may need to be answered before proceeding with an implementation._ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..826b2f0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,10 @@ +contact_links: + - name: 💬 OpenSearch Community Slack Workspace + url: https://opensearch.org/slack.html + about: Chat with community members and maintainers here. + - name: 🤷 OpenSearch Community Forum + url: https://forum.opensearch.org/ + about: Ask and answer OpenSearch usage questions here. + - name: 🔐 Report a Security Issue + url: https://github.com/opensearch-project/.github/blob/main/SECURITY.md + about: Please e-mail security@opensearch.org. Do not create a public GitHub issue. \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..59bfd18 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +### Description +_Describe what this change achieves._ + +### Issues Resolved +_List any issues this PR will resolve, e.g. Closes [...]._ + +By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. +For more information on following Developer Certificate of Origin and signing off your commits, please check [here](https://github.com/opensearch-project/OpenSearch/blob/main/CONTRIBUTING.md#developer-certificate-of-origin). \ No newline at end of file diff --git a/.github/workflows/add-untriaged.yml b/.github/workflows/add-untriaged.yml new file mode 100644 index 0000000..c6a64fd --- /dev/null +++ b/.github/workflows/add-untriaged.yml @@ -0,0 +1,19 @@ +name: Apply 'untriaged' label during issue lifecycle + +on: + issues: + types: [opened, reopened, transferred] + +jobs: + apply-label: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['untriaged'] + }) \ No newline at end of file diff --git a/.github/workflows/link-checker.yml b/.github/workflows/link-checker.yml new file mode 100644 index 0000000..a8190a8 --- /dev/null +++ b/.github/workflows/link-checker.yml @@ -0,0 +1,17 @@ +name: Link Checker +on: [push, pull_request] + +jobs: + linkchecker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Lychee Link Checker + id: lychee + uses: lycheeverse/lychee-action@master + with: + args: --accept=200,403,429 "./**/*.md" "./**/*.txt" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Fail on Error + run: exit ${{ steps.lychee.outputs.exit_code }} \ No newline at end of file diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 0000000..6f90455 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1 @@ +https://playground.opensearch.org/* \ No newline at end of file From 3ef516ab6bc8a1d8a7cafe6cd24790197e00129a Mon Sep 17 00:00:00 2001 From: Rajvaibhav Rahane Date: Wed, 19 Feb 2025 12:45:51 -0800 Subject: [PATCH 3/3] Add RELEASING.md and .codecov.yml Signed-off-by: Rajvaibhav Rahane --- .codecov.yml | 15 +++++++++++++++ RELEASING.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .codecov.yml create mode 100644 RELEASING.md diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 0000000..d55c39d --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,15 @@ +codecov: + require_ci_to_pass: yes + +coverage: + precision: 2 + round: down + range: "70...100" + status: + project: + default: + target: 80% # the required coverage value + threshold: 2% # the leniency in hitting the target + +ignore: + - '**/tests/*.py' \ No newline at end of file diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..2473d05 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,43 @@ +- [Overview](#overview) +- [Branching](#branching) + - [Single Repo Artifacts Branching](#single-repo-artifacts-branching) + - [Feature Branches](#feature-branches) +- [Versioning](#versioning) + - [Version Numbers](#version-numbers) + - [Remote-Vector-Index-Build-Service Version Numbers](#remote-vector-index-build-service-version-numbers) +- [Tagging](#tagging) +- [Release Labels](#release-labels) + +## Overview + +This document explains the release strategy for artifacts in the remote-vector-index-service-worker. + +## Branching + +Projects create a new branch when they need to start working on 2 separate versions of the product, with the `main` branch being the furthermost release. + +### Single Repo Artifacts Branching + +For the initial first release, remote-vector-index-build-service follows a simpler branching model with the next release always living on `main` and no patch branches. + +### Feature Branches + +Do not creating branches in the upstream repo, use your fork, for the exception of long lasting feature branches that require active collaboration from multiple developers. Name feature branches `feature/`. Once the work is merged to `main`, please make sure to delete the feature branch. + +## Versioning + +All distributions in this organization [follow SemVer](https://opensearch.org/blog/technical-post/2021/08/what-is-semver/). A user-facing breaking change can only be made in a major release. Any regression that breaks SemVer is considered a high severity bug. + +### Version Numbers + +#### Remote-Vector-Index-Build-Service Version Numbers + +The build number of the service is 3-digit `major.minor.patch` (e.g. `1.9.0`) + +### Tagging + +Create tags after a release that match the version number, `major.minor.patch`, without a `v` prefix. + +### Release Labels + +Repositories create consistent release labels, such as `v1.0.0`, `v1.1.0` and `v2.0.0`. Use release labels to target an issue or a PR for a given release. See [MAINTAINERS](MAINTAINERS.md#triage-open-issues) for more information on triaging issues. \ No newline at end of file