{% extends "base.html" %} {% block main %}

## Contribute code

Thank you so much for volunteering! Code contributions are the lifeblood of projects like Sketching. This page looks at how to get started in providing code to Sketching itself that is included in the library distribution or in supporting code like CI / CD and testing.

### Background knowledge

There are some basic skills that most code contributors will need to know:

- Python
- Git
- Google Style Guide
- Unit Testing
- Python Type Hints
- Python Packaging

Some contributions may also require knowledge of:

- Basic bash scripting
- HTML and JavaScript
- YAML
- Docker

If you need help getting started, please email us. A maintainer may be available to work with you!

### Open a fork

Please fork the project and make pull requests from your fork to sketching/Sketchingpy. In general, we recommend opening forks on CodeBerg.

### Getting ready to contribute

We recommend checking out your newly made fork and doing the following first:

- Install a dev build.

      pip install .[dev]

- Run unit tests.

      nose2

- Execute code checks like mypy.

      mypy sketching/*.py

All of these actions are described in the README.md. If you are interested in mentorship, please also reach out to hello@sketchingpy.org to see if there are maintainers avialable to help you get started.

### Finding issues

Except for maintainers, contributors are generally only allowed to suggest changes to code (open pull requests) to resolve open issues. You have two options:

- Find an already open issue in need of help: We recommend staying away from things which still have the "Proposal" tag. You may also want to look for issues with the "Beginner Friendly" tag!
- Open an issue: If there isn't an issue open for what you want to do, make an issue first (see above) to describe what you want to do.

When you have some code ready, see below for opening a pull request.

### Pull request

Whenever you have something ready to share, open a [pull request](https://codeberg.org/sketching/Sketchingpy/pulls) with the "draft" tag included. Removing draft lets the maintainers know that you have code ready to merge. Before removing the "draft" tag please ensure the following:

- Unit tests pass
- Pyflakes passes
- Pycodestyle passes
- Mypy passes
- The contribution adheres as best as possible to the development standards listed in the README.md

Note that CI / CD may run automated checks for your contribution.

### Related materials

- Code of Conduct
- Contribution Guidelines and Agreement
- Governance
- README

{% endblock %}