Developer Documentation#
We welcome any contributions and collaboration on our development efforts, which are hosted on GitHub. Below are the different ways you can contribute and the steps to get involved.
Contributing Code or Documentation#
New to contributing code on GitHub? We recommend reviewing the AstroPy
developer
documentation
to get familiar with the workflow. The most important first step is to get
comfortable with the git version control system and the GitHub platform.
Additionally, we highly recommend making many small commits with clear commit
messages (following the Conventional Commit structure described below), as this makes it easier to
review and understand your changes.
Setting Up Your Development Environment#
1. Clone the Repository:#
Clone the repository to your local machine using the shell command
git clone git clone https://github.com/HWO-Yield-Visualizations/yieldplotlib.git
Next, navigate to the repository directory and create a new branch:
cd yieldplotlib
git checkout -b BRANCHNAME
Replace BRANCHNAME with a descriptive name for your contribution.
2. Create an Isolated Development Environment:#
Python development typically uses virtual environments to isolate
dependencies for different projects, ensuring that each project has its own
specific package versions without conflicts. Set up an isolated environment
using venv, virtualenv, uv, conda, or a similar tool. We recommend venv
or conda if you are unfamiliar with this process which can be used as follows:
venv #
python3 -m venv .venv
source .venv/bin/activate
That creates a new “virtual environment” in the .venv directory and
activates it. Now when you run python commands it will not be from your
system level python installation, but from the one in the .venv
directory. To deactivate the environment, run deactivate from your shell.
Next if using a pip based environment, which venv and virtualenv are,
install the developer dependencies as follows:
python -m pip install -U pip
python -m pip install -U -e ".[dev]"
conda #
conda create -n ypl
conda activate ypl
Here we have named our environment ypl, but you can theoretically name it
whatever you like.
That creates a new “virtual environment” in the conda/envs directory and
activates it. Now when you run python commands it will not be from your
system level python installation, but from the one in the envs/bin
directory. To deactivate the environment, run deactivate from your shell.
Now install the developer dependencies as follows:
conda install pip
python -m pip install -U -e
Note: If you would like to run the pytests or build the docs, the
dependencies for those features are optional and should be installed by running
the previous command but adding .[docs] or .[test].
3. Install pre-commit hooks#
We use pre-commit hooks to automatically format code and check for common errors before you commit changes. To install these hooks, run the following commands:
pip install pre-commit
pre-commit install --hook-type commit-msg
This will automatically run the hooks before each commit. If any of the hooks
fail, the commit will be aborted and it will tell you what needs to be
changed. It may fix the error itself, in which case you will see a line - files were modified by this hook. You can also run the hooks manually with
pre-commit run --all-files.
Making Contributions#
Our project is structured like a typical Python project, with the module root
in the src/yieldplotlib directory to prevent import issues and enforce a
clear separation between the source code and other files such as configuration,
documentation, and tests. Here are some key areas to help you get started:
Conventional Commits and Semantic Versioning#
TL;DR#
When making a commit (or pull request!) use a message that follows the
structure of type(scope): message. For example,
feat(plotting): add new feature Xfix(plotting): fix bug Ydocs(tutorials): update documentation for Ztest: add test for Wchore: update CI/CD configurationstyle(plotting): format code with ruffrefactor(plotting): refactor code for readability
In the command line, this would look like:
git add src/yieldplotlib/file_with_feat_X.py
git commit -m "feat(plotting): add new feature X"
type#
The type is required and should be one of the following:
feat: A new featurefix: A bug fixdocs: Documentation changestest: Adding or updating testschore: Changes to the build process or auxiliary toolsstyle: Changes that do not affect the meaning of the code (white-space, formatting, etc)refactor: A code change that neither fixes a bug nor adds a featureperf: A code change that improves performanceci: Changes to our CI/CD configurationbuild: Changes that affect the build system or external dependencies
(scope)#
The (scope) is optional, but should be used when the commit message is
unclear without it.
All commits must be “atomic” and thus able to be described by a singular type
and scope with few (rare) exceptions.
Breaking changes#
If you’re making a change that is incompatible with the current version (e.g.
removing a feature, changing a function call, etc), you should also include an
exclamation point at the end of the commit message, like so: feat(plotting)!: add new feature X to indicate that this is a breaking change, which will
trigger a major version bump in the next release.
Why?#
This convention allows us to quickly understand the contents of a commit and automatically generate
The version number for the package based on semantic versioning
The changelog for the package based on the commit messages
The release notes for the package based on the commit messages
A new distributable version of the package that is pushed to PyPI
A new release of the package to GitHub
Semantic Versioning#
We use semantic versioning to manage releases. This
means that the version number of the package is incremented based on the
type of changes made. The version number is generated by
release-please and our
build backend Hatch creates a _version.py file
to store the version number. You never need to manually edit the version
number.
The version number is structured as MAJOR.MINOR.PATCH. An example of
this is 1.2.3, where 1 is the major version, 2 is the minor version,
and 3 is the patch version.
Misc#
If you’re unsure about the type of commit, use chore as a catch-all
and we can help you decide the correct type.
Tutorials#
Tutorials are written in Jupyter Notebooks. Tutorial files are located
in the docs/tutorials directory as .ipynb files. To edit these files
and run them using your virtual environment, you’ll need to add the kernel
to Jupyter. To do so, run the following commands:
source .venv/bin/activate # Activate your virtual environment
pip install jupyter
pip install ipykernel
python -m ipykernel install --user --name=venv --display-name="yieldploltlib" # Add the kernel to the Jupyter server
jupyter-notebook # Start the Jupyter Notebook server
When contributing a new tutorial, follow the format of existing ones and
add a link to the tutorial in the docs/index.md file so that it is
included in the documentation site.
Testing Your Contributions#
When adding a new feature or fixing a bug, include at least one test to verify the behavior of your code. Before submitting a pull request, run all unit tests with the following command:
python -m pytest -v tests
We appreciate your contributions and look forward to collaborating with you!