toolbox/CONTRIBUTING.md

178 lines
8.1 KiB
Markdown
Raw Normal View History

![Toolbox logo](data/logo/toolbox-logo-landscape.svg)
# Contributing to Toolbox
Thank you for wanting to contribute to Toolbox! We greatly appreciate your
interest!
# Table of contents
- [Contributing to Toolbox](#contributing-to-toolbox)
- [Table of contents](#table-of-contents)
- [Reporting Bugs](#reporting-bugs)
- [Before Submiting a Bug Report](#before-submiting-a-bug-report)
- [Writing a Bug Report](#writing-a-bug-report)
- [Making Suggestions](#making-suggestions)
- [Before Submitting a Suggestion](#before-submitting-a-suggestion)
- [Writing a Suggestion](#writing-a-suggestion)
- [First Contribution](#first-contribution)
- [Pull Requests](#pull-requests)
- [Creating a Pull Request](#creating-a-pull-request)
- [After Creating a Pull Request](#after-creating-a-pull-request)
- [Little Style Guide](#little-style-guide)
# Reporting Bugs
## Before Submiting a Bug Report
- Check if your issue is already reported in our [bug tracker](https://github.com/containers/toolbox/issues)
- If the issue is already reported and is marked as **OPEN**, comment on it
and if possible and needed, share info about the issue just as if you were
submiting a new issue
- If the issue is marked as **CLOSED**, check if your version of Toolbox is
up-to-date or if there are some steps, described in the closed issue, that
you should follow. If you are still experiencing the issue, please file a
new issue
- See our [documentation](https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/)
if there are some steps that could help you solve your issue
- Sometimes a bug is not reported in our bug tracker but instead people ask for
help somewhere else: IRC ([Freenode](https://freenode.net) - #silverblue,
#containers, #fedora, #fedora-devel,..), [Fedora forum](https://discussion.fedoraproject.org/tag/toolbox),
or somewhere else. In such cases we'd like you to still report the bug and
share with us any info that could be gathered from those places
## Writing a Bug Report
Writing good bug reports is a nice way to make the job of the maintainers and
other contributors a bit easier.
When writing a bug report:
- **Use a clear and descriptive title**
- **Describe the problem** - Can you reproduce the bug reliably? What first
triggered the problem? Did it start happening after upgrading your system?
- **Provide steps how to reproduce** - It's easier for us to fix a bug if we can
reproduce it.
- **Describe the behavior you received and what you expected** - Sometimes it
may not be clear what the *right* behavior should look like.
- **Provide info about the version of used software** - What version of Toolbox
and Podman do you use?
- **Provide info about your system** - What distribution do you use? Which
desktop environment? Is it a VM or a real machine?
# Making Suggestions
Toolbox is not feature-complete and some of it's functionality is not-there-yet.
We are thankful for all suggestions and ideas but be ready that your suggestion
may be rejected.
## Before Submitting a Suggestion
- Check if your suggestion has not already been made in our [bug tracker](https://github.com/containers/toolbox/issues)
- If it has and is marked as **OPEN**, go ahead and share your own thoughts
about the topic!
- If it has and is marked as **CLOSED**, please read the ticket and depending
on whether the suggestion was accepted or not consider if it is worth
opening a new issue or not.
- Consider if the suggestion is not too out of scope of the project.
## Writing a Suggestion
When writing a suggestion:
- **Use a clear and descriptive title**
- **Describe the idea** - What parts of Toolbox does it affect? Is it a major
functionality or a minor tweak?
- **Provide step-by-step description of the suggested behavior** so that we
will understand.
- **Explain why would this idea be useful** - It sounds good to have a lot of
options but sometimes less is more. See this [article](https://ometer.com/preferences.html).
# First Contribution
Toolbox is written in [Go](https://golang.org) and uses [Meson](https://mesonbuild.com)
as it's buildsystem.
Instructions for building Toolbox from source are in our [README](https://github.com/containers/toolbox/blob/master/README.md).
> You may not need to build the project from source if your contribution is not
> related to the code of Toolbox itself (e.g., documentation, updating CI
> config, playing with image definitions,...).
Here are some ideas of what you could contribute with:
- Check our [bug tracker](https://github.com/containers/toolbox/issues)
and look for tickets marked with labels `good-first-issue` or `help-wanted`.
- Write tests - Go has [tools](https://golang.org/pkg/testing/) for writing tests.
There are also [some](https://github.com/stretchr/testify) [libraries](https://github.com/onsi/ginkgo)
used for creating even more sophisticated tests.
- Play with custom images - Toolbox currently officially works with Fedora-based
images. Ultimately there should be a wide variety of supported distro images.
You can help with testing other people's image definitions or creating your
own. **Beware**, maintainers still don't have a clear idea of how the image
infrustructure should look like.
- Write documentation - Some functions in Toolbox's code don't have comments and
it's not very clear what they do. Toolbox has it's [documentation](https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/)
hosted by Fedora. It's not very large and could use some attention.
- Hack on the code and share the result - Seriously! Sometimes random ideas are
the best.
Toolbox currently does not have an infrastructure for translations. You can help
us to set it up!
# Pull Requests
All pull requests are welcome! Features, bug fixes, fixing of typos, tests,
documentation, code comments and much more.
## Creating a Pull Request
- Document well your changes - This applies to the description of your PR and to
your commit messages.
- If possible add additional test cases - If there are no tests for the part of
code you're contributing to, consider opening another PR if you want to
implement it yourself or file an issue so that somebody else can pick it up.
- Update documentation to reflect your changes - Manual pages can be found in
directory `doc`. If your changes affect Toolbox's [documentation](https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/),
consider creating a PR there (but to save yourself time, you can do it
after your changes are accepted), too.
## After Creating a Pull Request
It may take the us some time to review your changes and sometimes even longer to
actually merge them. Please, don't interpret this as an act of not appreciating
your efforts! We really appreciate them! Sometimes we may be stuck in different
parts of our lives.
If it takes us a very long time to even respond to your Pull Request, you can
try to @ping us, request a review or try to reach to us on IRC ([Freenode](https://freenode.net/);
#silverblue, #containers, #fedora-devel,..) or [Fedora Forum](https://discussion.fedoraproject.org).
Toolbox has a simple CI (Continuos Integration) setup for running system tests (
can be found under directory `test/system`). Their goal is to check if your
changes don't affect adversely Toolbox's functionality. Sometimes these tests
mail fail with a false-positive. If you are not sure about the outcome of the
tests, reach out to the maintainers!
Toolbox's CI system is [Zuul](https://zuul-ci.org/) hosted at [softwarefactory](https://softwarefactory-project.io/).
# Little Style Guide
Toolbox is written in [Go](https://golang.org) and uses its default set of tools
including `gofmt` and `golint`.
Here are some good materials to learn from about the way how to write nice and
idiomatic code in Go:
- [A Tour of Go](https://tour.golang.org/welcome)
- [How To Write Go Code](https://golang.org/doc/code.html)
- [Effective Go](https://golang.org/doc/effective_go.html)
Overall, the [Go Blog](https://blog.golang.org/) is a good place to learn more
about Go.
If you are using Visual Studio Code, there are [plugins](https://marketplace.visualstudio.com/items?itemName=golang.Go)
that include all this functionality and throw a warning if you're doing
something wrong.