Contributing
============

Contributions are welcome, and they are greatly appreciated! Every little bit
helps, and credit will always be given.

You can contribute in many ways:

Types of Contributions
######################

Report Bugs
***********

Report bugs at https://github.com/data-exp-lab/yt_xarray/issues

If you are reporting a bug, please include:

* Your operating system name and version.
* Any details about your local setup that might be helpful in troubleshooting.
* Detailed steps to reproduce the bug.

Fix Bugs
********

Look through the GitHub issues for bugs. Anything tagged with "bug" and "help
wanted" is open to whoever wants to implement it.

Implement Features
******************

Look through the GitHub issues for features. Anything tagged with "enhancement"
and "help wanted" is open to whoever wants to implement it.

Write Documentation
*******************

yt_xarray could always use more documentation, whether as part of the
official yt_xarray docs, in docstrings, or even on the web in blog posts,
articles, and such.

Submit Feedback
***************
The best way to send feedback is to file an issue at https://github.com/data-exp-lab/yt_xarray/issues

If you are proposing a feature:

* Explain in detail how it would work.
* Keep the scope as narrow as possible, to make it easier to implement.
* Remember that this is a volunteer-driven project, and that contributions
  are welcome :)

Get Started!
############

Ready to contribute? Here's how to set up `yt_xarray` for local development.

1. Fork the `yt_xarray` repo on GitHub.
2. Clone your fork locally::


    $ git clone git@github.com:your_name_here/yt_xarray.git


3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development::

    $ mkvirtualenv yt_xarray
    $ cd yt_xarray/
    $ python -m pip install -e .
    $ python -m pip install -r requirements_dev.txt

4. (optional) Setup pre-commit::

    $ pre-commit install

5. Create a branch for local development::


    $ git checkout -b name-of-your-bugfix-or-feature

Now you can make your changes locally.

6. When you're done making changes, check that your changes pass the
   tests::


    $ pytest

7. Commit your changes and push your branch to GitHub::


    $ git add .
    $ git commit -m "Your detailed description of your changes."

If you've installed pre-commit, then pre-commit will run your changes through
some style checks. It will try to fix files if needed. If it finds errors, you
will need to re-add those files (after fixing it if pre-commit could not do so
automatically) and then commit again.

Now your branch is ready to push::

    $ git push origin name-of-your-bugfix-or-feature

8. Submit a pull request through the GitHub website.

Pull Request Guidelines
#######################

Before you submit a pull request, check that it meets these guidelines:

1. The pull request should include tests.
2. If the pull request adds functionality, the docs should be updated. Put
   your new functionality into a function with a docstring.
3. The pull request should pass all automated tests.

Tips
####

To run a subset of tests::

    $ pytest tests.test_yt_xarray


Deploying
#########

A reminder for the maintainers on how to deploy.

First, make sure that:

* all your changes are committed (including an entry in HISTORY.md).
* the version in `yt_xarray/__init__.py` matches the version you are releasing.

Then, double check your `main` branch mactches upstream (assuming that `git remote -v` lists
`git@github.com:data-exp-lab/yt_xarray.git` as the upstream repo)::

    $ git fetch --all
    $ git checkout main
    $ git rebase upstream/main

And then create a tag for your new release. For example, if you are releasing
version `1.1.2`::


    $ git tav v1.1.2

Now push that tag to the upstream repo::

    $ git push upstream v1.1.2

This will trigger a number of automated Github actions that include an
automated push to PyPI (if tests pass) and the creation of a draft release
on Github. Wait for the push to PyPI to finish then go edit the draft release
that should be visible at https://github.com/data-exp-lab/yt_xarray/releases and
hit publish after editing release notes.
