[[contributing]]
== Contributing

Whether you want to fix a bug, implement a feature, add an improvement, or add APIs, the following sections will 
guide you on the process. After committing your code, check out the link:https://www.elastic.co/community/contributor[Elastic Contributor Program] where you can earn points and rewards for your contributions.

Read <<development-getting-started>> to get your environment up and running, then read <<development-best-practices>>.

* <<development-tests>>
* <<development-github>>
* <<interpreting-ci-failures>>
* <<ci-metrics>>
* <<development-documentation>>
* <<development-pull-request>>
* <<kibana-issue-reporting>>
* <<signing-contributor-agreement>>
* <<kibana-localization>>
* <<kibana-release-notes-process>>
* <<kibana-linting>>

[discrete]
[[signing-contributor-agreement]]
=== Signing the contributor license agreement

Please make sure you have signed the [Contributor License Agreement](http://www.elastic.co/contributor-agreement/). We are not asking you to assign copyright to us, but to give us the right to distribute your code without restriction. We ask this of all contributors in order to assure our users of the origin and continuing existence of the code. You only need to sign the CLA once.

[discrete]
[[kibana-localization]]
=== Localization

Read <<kibana-localization-best-practices>> for details on our localization practices.

Note that we cannot support accepting contributions to the translations from any source other than the translators we have engaged in doing the work.
We are yet to develop a proper process to accept any contributed translations. We certainly appreciate that people care enough about the localization effort to want to help improve the quality. We aim to build out a more comprehensive localization process for the future and will notify you once Kibana supports external contributions. Still, for the time being, we cannot incorporate suggestions.

[discrete]
[[kibana-release-notes-process]]
=== Release Notes Process

Part of this process only applies to maintainers, since it requires
access to GitHub labels.

{kib} publishes https://www.elastic.co/guide/en/kibana/current/release-notes.html[Release Notes] for major and minor releases. 
The Release Notes summarize what the PRs accomplish in language that is meaningful to users.
 To generate the Release Notes, the team runs a script against this repo to collect the merged PRs against the release.

[discrete]
==== Create the Release Notes text

The text that appears in the Release Notes is pulled directly from your PR title, or a single paragraph of text that you specify in the PR description.

To use a single paragraph of text, enter a `Release note:` or `## Release note` header in the PR description ("dev docs" works too), followed by your text. For example, refer to this https://github.com/elastic/kibana/pull/65796[PR] that uses the `## Release note` header.

When you create the Release Notes text, use the following best practices:

* Use active voice. 
* Use sentence case.
* When you create a PR that adds a feature, start with `Adds`.
* When you create a PR that improves an existing feature, start with `Improves`. 
* When you create a PR that fixes existing functionality, start with `Fixes`.
* When you create a PR that deprecates functionality, start with `Deprecates`.

[discrete]
==== Add your labels

To make sure that your PR is included in the Release Notes, add the right label.

[arabic]
. Label the PR with the targeted version (ex: `v7.3.0`).
. Label the PR with the appropriate GitHub labels:
  * `release_note:feature` — New user-facing features, significant enhancements to features, and significant bug fixes (in rare cases).
  * `release_note:enhancement` — Minor UI changes and enhancements.
  * `release_note:fix` — Fixes for bugs that existed in the previous release. 
  * `release_note:deprecation` — Deprecates functionality that existed in previous releases.
  * `release_note:breaking` — Breaking changes that weren't present in previous releases.
  * `release_note:skip` — Changes that should not appear in the Release Notes. For example, docs, build, and test fixes, or unreleased issues that are only in `main`.


include::development-github.asciidoc[leveloffset=+1]

include::development-tests.asciidoc[leveloffset=+1]

include::interpreting-ci-failures.asciidoc[leveloffset=+1]

include::development-ci-metrics.asciidoc[leveloffset=+1]

include::development-documentation.asciidoc[leveloffset=+1]

include::development-pull-request.asciidoc[leveloffset=+1]

include::kibana-issue-reporting.asciidoc[leveloffset=+1]

include::pr-review.asciidoc[leveloffset=+1]

include::linting.asciidoc[leveloffset=+1]
