# Contributing

Before contributing to this repository, discuss the changes through an issue or any appropriate mode of communication.

Follow the code of conduct in all interactions with the project.

### Reporting Bugs

Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/).

1. Create an issue and provide the required information in the [issue template](ISSUE_TEMPLATE.md).
2. Describe the problem with the following details:
  - A self-explanatory title.
  - Steps to reproduce the problem. Provide the steps with details such as, what are the steps and how to perform the steps.
  - Examples to demonstrate the steps. Include links to files or reusable snippets that are used in the examples. For providing snippets in an issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
  - Describe the result that you get when you follow the steps and state the issues, if any.
  - Explain the expected result and the reason.
  - Add screenshots for the results of each step.
3. Add the following configuration and environment details:
  - Versions of node and npm that you use. Run the `node --version` and `npm --version` command in the terminal to get the correct version.
  - Name and version of the operating system that you use.
  - Packages installed on your machine. Review your `package.json` file to get the list. Ensure that new packages are installed successfully during the development.
  - Properties that you add to the application. The `ep.config.json` file provides the contents of the file, in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines) or with a link to a [gist](https://gist.github.com/).
  - The keyboard layout. For example, US layout.

### Suggesting Enhancements

This section provides guidelines to submit enhancement suggestions, such as new features or improvements to existing features.

- When you create an enhancement suggestion, populate the [issue template](ISSUE_TEMPLATE.md) and provide the steps to implement the enhancement.
- Review the [How Do I Submit A (Good) Enhancement Suggestion?](#how-do-i-submit-a-good-enhancement-suggestion) section.

#### How Do I Submit Enhancement Suggestions?

Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/).

1. Create an issue and provide the following information:
  - A self-explanatory title.
  - Detailed instructions to implement the enhancement and to understand the enhancement suggestion.
  - Examples to demonstrate the steps. Include links to files or reusable snippets that are used in the examples. For providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
  - Describe the current functionality and the expected functionality with enhancement and provide the reason.
2. Explain the benefits of the enhancement.

### Pull Request Process

You can contribute to this project by creating a pull request in the repository.

1. Fork the repository into your Github account.
2. Clone the fork locally.
3. Create a git branch.
4. Set up the development environment and install the required dependencies. For more information, see [Setting up a Development Environment](README.md#setting-up-a-development-environment).
5. Make the changes and commit the changes to your new branch. Ensure that the code is clear and comprehensible.
6. Run the local tests by following the instruction in the [Running E2E Tests](README.md#running-e2e-tests) section. If you add new features or components that require additional unit tests, ensure that the code is tested and verified with appropriate tests.
7. Create a Pull Request (PR).
8. Incorporate the review comments provided by the repository owner, if any, and get approval.<br/>
The repository owner merges all approved PRs to the repository.

### Elastic Path Code of Conduct

Elastic Path suggests the following code of conduct in all communications. For example:

* Use welcoming and inclusive language
* Respect others viewpoints and experiences
* Accept constructive criticism

The contributors must follow the code of conduct in the project and public spaces
when they represent the project or the community. For example, when you use an official project e-mail address, official social media account, or represent the community at an online or offline event.

### Rights of the Repository Owners

- Define, implement, and assure code of conduct and take action if anyone breaches the standards.
- Remove, edit, or reject comments, commits, code, wiki edits, issues, or other contributions that do not align with the code of conduct.
- Restrict the access of contributors temporarily or permanently when the code of conduct is violated.
- Define and clarify the representation of a project further.


### Attribution

Elastic Path code of conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org/version/1/4) 1.4.
