* [Your First Code Contribution](#your-first-code-contribution)
* [Pull Requests](#pull-requests)
* [Patronizing us](#patronizing)
* [Donating hardware to test](#donating)
* [Providing information](#needed-information)
[Styleguides](#styleguides)
* [Git Commit Messages](#git-commit-messages)
* [Code Styleguide](#code-styleguide)
## Code of Conduct
This project and everyone participating in it is governed by the
[DiscImageChef Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected
to uphold this code. Please report unacceptable behavior to [claunia@claunia.com](mailto:claunia@claunia.com).
## I don't want to read this whole thing I just have a question!!!
> **Note:** Please don't file an issue to ask a question. You'll get faster results by
using the resources below.
You can join our IRC channel on char.freenode.net at channel #DiscImageChef
## What should I know before I get started?
### DiscImageChef and modules
DiscImageChef is a large open source project — it's made up of 18 modules. When you initially consider contributing to DiscImageChef, you might be unsure about which of those modules implements the functionality you want to change or report a bug for. This section should help you with that.
DiscImageChef is intentionally very modular. Here's a list of them:
This module presents a menu driven interface to send commands to devices, as a way to test
the Core module, as those tests cannot be automated. It can be used to debug drive responses.
## How Can I Contribute?
### Reporting Devices
DiscImageChef tries to be as universal as possible. However some devices do not behave in
the expected ways, some media is unknown and needs to be known prior to enabling dumping of it,
etc.
For that reason, DiscImageChef includes the [device-report command](https://github.com/claunia/DiscImageChef/wiki/Reporting-physical-device-capabilities).
Using this command will guide you thru a series of questions about the device, and if it
contains removable media, for you to insert the different media you have, and create a report
of its abilities. The report will automatically be sent to our server and saved on your computer.
Please note that we do not store any personal information and when possible remove the drive
serial numbers from the report.
If you have a drive attached to a computer that you cannot run the full DiscImageChef on it
but can compile a C89 application, you can use [DiscImageChef.Device.Report](https://github.com/claunia/DiscImageChef/tree/master/DiscImageChef.Device.Report).
In this case the report will only be created locally and you should attach it to a bug report.
### Reporting Bugs
This section guides you through submitting a bug report for DiscImageChef. Following these guidelines
helps maintainers and the community understand your report :pencil:, reproduce the
behavior :computer: :computer:, and find related reports :mag_right:.
Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you
might find out that you don't need to create one. When you are creating a bug report, please
[include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out
[the required template](ISSUE_TEMPLATE.md), the information it asks for helps us resolve
issues faster.
> **Note:** If you find a **Closed** issue that seems like it is the same thing that you're
experiencing, open a new issue and include a link to the original issue in the body of your
new one.
#### Before Submitting A Bug Report
* **Check the [wiki](https://github.com/claunia/DiscImageChef/wiki)** for a list of common
questions and problems.
* **Determine [which module the problem should be reported in](#discimagechef-and-modules)**.
* **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aclaunia)**
to see if the problem has already been reported. If it has **and the issue is still open**,
add a comment to the existing issue instead of opening a new one.
#### How Do I Submit A (Good) Bug Report?
Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). After
you've determined [which module](#discimagechef-and-modules) your bug is related to,
create an issue on that repository and provide the following information by filling in
[the template](ISSUE_TEMPLATE.md).
Explain the problem and include additional details to help maintainers reproduce the problem:
* **Use a clear and descriptive title** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in as many details as possible.
For example, start by explaining how you started DiscImageChef, e.g. which command exactly
you used in the terminal. Also note that some device commands requires you to have
administrative privileges, be in a specific group, or be the root user, so try it again with
escalated privileges.
* **Provide specific examples to demonstrate the steps**. Include links to media images,
reports of the devices, or the output of using [DiscImageChef.Tests.Devices](https://github.com/claunia/DiscImageChef/tree/master/DiscImageChef.Tests.Devices).
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
* **Explain which behavior you expected to see instead and why.**
* **Include a copy of the output in the terminal** enabling both verbose, using the `-v`
command line parameter, and debug, using the `-d` command line parameter, outputs.
* **If you're reporting that DiscImageChef crashed**, try doing the same with the debug
version and include a crash report with a stack trace. Include the crash report in the issue
in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a