# Welcome to the Contributing Guide for Sprout

**For any questions, participate in our [Community Discussions](https://github.com/go-sprout/sprout/discussions).**

Thank you for your interest in contributing to Sprout! ✨

Make sure to read our [Code of Conduct](./CODE_OF_CONDUCT.md) to ensure our community remains welcoming and respectful.

This guide outlines the contribution workflow from opening an issue, creating a PR, to the review and merge process.

Utilize the table of contents icon at the top left corner of this document to quickly navigate to specific sections of the guide.

## Contributing to Sprout

Your contributions are appreciated! We aim to make the contribution process straightforward and transparent, whether you are:
- Reporting a bug
- Discussing the current code
- Submitting a fix
- Proposing new features
- Interested in becoming a maintainer

## New Contributor Guide

For a project overview, please read the [README](README.md). Here are some helpful resources for first-time contributors:

- [Setting Up Git](https://docs.github.com/en/get-started/quickstart/set-up-git)
- [Understanding GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow)
- [Collaborating with Pull Requests](https://docs.github.com/en/github/collaborating-with-pull-requests)
- [Writing Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)

## Getting Started

Contributing to Sprout is meant to be straightforward and rewarding. You can contribute in various ways, including providing feedback or implementing new features. Every contribution is valuable to our project.

## Types of Contributions

### Issues

#### Creating a New Issue

If you notice a problem or have an enhancement idea, check if there's an existing issue first. If not, open a new issue using a suitable [issue template](https://github.com/go-sprout/sprout/issues/new/choose).

#### Resolving an Issue

Browse our [open issues](https://github.com/go-sprout/sprout/issues) to find something that interests you. Use `labels` to filter issues, especially the [good first issue](https://github.com/go-sprout/sprout/labels/good%20first%20issue) label if you're looking for an easier start.

We encourage you to pick an issue and open a pull request with your solution.

### Making Changes

#### Making Changes Using Codespaces

For details on using Codespaces to work on projects, refer to the [GitHub Codespaces documentation](https://github.com/github/docs/blob/main/contributing/codespace.md).

#### Making Changes Locally

1. [Install Docker](https://docs.docker.com/get-docker/).
2. [Download VSCode](https://code.visualstudio.com/download).
3. [Install the Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
4. Fork the repository and clone your fork.
5. Open your fork in VSCode and initiate the devcontainer with the function `Remote-Containers: Open Folder in Container...`.

> Note: Initialization might take a few minutes as the devcontainer sets up your environment.

6. Create a branch and start your changes!

For comprehensive guidance on using devcontainers, refer to [Developing inside a Container](https://code.visualstudio.com/docs/remote/containers).

### Committing Your Updates

Commit your updates after you're satisfied with the changes. Follow the [Conventional Commits guidelines](https://www.conventionalcommits.org/en/v1.0.0/) for structuring effective commit messages. A linter is available to help maintain consistent commit quality.

Before submitting, review your changes to expedite the review process.

### Pull Request

Once you complete your changes, open a pull request (PR):

- Use the PR template to provide context about your changes and why they are needed.
- [Link your PR to the related issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
- Allow [maintainer edits on your PR](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork).

After submitting, our team will review your contributions and possibly request further changes. Apply feedback directly through GitHub's UI or make adjustments in your branch as necessary.

### Your PR is Merged!

Congratulations 🎉 and thank you for contributing to Sprout!

Once merged, your contributions will be part of the [Sprout GitHub repository](https://github.com/go-sprout/sprout) and you will be credited as a contributor in the release notes and on the contributors page.

Welcome to the Sprout community! 🌱
