Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 0 additions & 22 deletions .github/CONTRIBUTING.md
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want a link to this location? I recall github showing a link to this file when someone opens up a PR for the first time.

Or put another way, can you check to see if having a file here does something special? I don't want to maintain two copies which is why a system link might be best

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file was deleted.

79 changes: 79 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Contributing to OpenFE

We welcome fixes and code contributions to **openfe** and the [larger OpenFE ecosystem](https://github.com/OpenFreeEnergy).
Note that any contributions made must be made under a MIT license.

Please read our [code of conduct](Code_of_Conduct.md) to understand the standards you must adhere to.

## Installing a Development Environment

### Installing openfe for development

``` bash
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opportunity to push for micromamba here

mamba env create -f environment.yml
mamba activate openfe_env
python -m pip install -e --no-deps .
```

### Multi-project development
It's common to need to develop *openfe** in tandem with another OpenFE Ecosystem package.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It's common to need to develop *openfe** in tandem with another OpenFE Ecosystem package.
It's common to need to develop *openfe** in tandem with another OpenFE Ecosystem package.

Just a nit, equal empty spaces everywhere.

For example, you may want to add some feature to **gufe**, and make sure that its functionality works as intended with **openfe**.

To build dev versions of both packages locally, follow the above instructions for installing **openfe** for development, then (using **gufe** as an example):

``` bash
mamba activate openfe_env # if not already activated
git clone git@github.com:OpenFreeEnergy/gufe.git
cd gufe/
pip install -e .
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
pip install -e .
pip install -e --no-deps .

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is technically incorrect. It would be pip install -e . --no-deps

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😱 the worst kind of incorrect! I make this mistake all the time and want to guide others on how to troubleshoot the mistake

```

To make sure the CI tests run properly on your PR, in `openfe/env.yaml` and `openfe/docs/env.yaml`, pin **gufe** to your dev working branch

```yaml
...

- pip:
- git+https://github.com/OpenFreeEnergy/gufe@feat/your-dev-branch
```
Once tests pass, the PR is approved, and you're ready to merge:
1. merge in the **gufe** PR
2. switch `openfe/env.yaml` and `openfe/docs/env.yaml` back to `gufe@main`, then re-run CI.

## Contribution Guidelines

### Use semantic branch names
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<3

- Start branch names with one of the following "types", followed by a short description or issue number.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a rather opiniated take on how we should work going forward and I think this needs discussion amongst the team - I, at least in the short term, am not likely to follow this, frankly there's just too much to think about all the time.

- `feat/`: new user-facing feature
- `fix/`: bugfixes
- `docs/`: changes to documentation only
- `refactor/`: refactoring that does not change behavior
- `ci/`: changes to CI workflows

<!-- - PR titles should be essentially a changelog entry. TODO: make this clearer, maybe examples -->

### CI, linting, style guide
- CI tests, docs, etc, will run on every PR that has `main` or a branch that begins with `feat/` as a target.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why just feat? Surely if I want to fix something going into another branch, I would like to run CI on it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for if it targets feat/*
So like if you make a PR that targets main, CI will run.
If you have a branch called new_feature that targets main in a PR, CI will run.
If you have a branch called new_feature_sub_pr that targets new_feature in a PR, CI will not run.
This is because we have "PRs that target main" listed as the trigger for our CI yaml.
We can add feat/* as a trigger so that if you have a branch called feat/new_feature and then a sub-pr that targets the feat/new_feature branch for a PR, CI will then run.

RE: this guide for branch names, I view this as a guide/reference but not like a "I desk reject PRs that don't follow this convention".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same principle applies, there are plenty of fixes where I PR into them. It just seems really odd to isolate one specific sub-type of PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RE: this guide for branch names, I view this as a guide/reference but not like a "I desk reject PRs that don't follow this convention".

The thing is that we can't have two sets of rules for how we work. If we don't engage ourselves to using that system, then we can't tell others that they should be using it.

- Add a news item for any user-facing changes.
- Rebase or merge, we don't care, but keep your branch up to date with `main`.
- Always "squash and merge" to keep the git log readable.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Always "squash and merge" to keep the git log readable.
- Always "squash and merge" when merging pull requests into main or a feature branch to keep the git log readable. This also makes it easier to use the `git bisect` tool.

- Use [numpy docstrings](https://numpydoc.readthedocs.io/en/latest/format.html)
- We encourage but do not require [type hints](https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should require it - anywhere that doesn't currently have type hints either exists in vendored code or is old stuff we didn't get around to adding type hints to.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 to require it (maybe we need to make a few PRs and play with mypy settings but we should start linting/testing for it)

- Every PR should have tests that cover changes. You will see the coverage report in CI.
- Any pins to versions in `environment.yaml` etc. need to have a comment explaining the purpose of the pin and/or a link to the related issue.

<!-- TODO: add info about pre-commit comment -->
<!-- TODO: using `precommit` locally: pyproject.toml -->


### Review process
- In general, push PRs early so that work is visible, but leave a PR in draft-mode until you want it to be reviewed by the team. Once it's marked as "ready for review," the OpenFE team will assign a reviewer.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the idea is to leave things in draft mode, then I don't think we should be disabling CI for those.


### Larger contributions (multi-PR contributions)
- [Open an issue](https://github.com/OpenFreeEnergy/openfe/issues) describing the feature you want to contribute and get feedback from the OpenFE team. Use sub-issues to break down larger, more complex projects.
- You are encouraged to add sub issues throughout the development process.
- Try to aim for 1 PR per issue!
- You may want to request that maintainers create a designated branch for large features that require multiple PRs. This way, the `feat/` branch can be the target of several smaller PRs.
- Break your work into smaller issue/PR pairs that target `feat/my-new-feature`, and ask for frequent reviews.

<!-- TODO: ai use disclosure -->
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[![Logo](https://img.shields.io/badge/OSMF-OpenFreeEnergy-%23002f4a)](https://openfree.energy/)
[![Logo](https://img.shields.io/badge/OMSF-OpenFreeEnergy-8A2283)](https://openfree.energy/)
[![build](https://github.com/OpenFreeEnergy/openfe/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/OpenFreeEnergy/openfe/actions/workflows/ci.yaml)
[![coverage](https://codecov.io/gh/OpenFreeEnergy/openfe/branch/main/graph/badge.svg)](https://codecov.io/gh/OpenFreeEnergy/openfe)
[![documentation](https://readthedocs.org/projects/openfe/badge/?version=stable)](https://docs.openfree.energy/en/stable/?badge=stable)
Expand All @@ -7,8 +7,7 @@

# `openfe` - A Python package for executing alchemical free energy calculations.

The `openfe` package is the flagship project of [Open Free Energy](https://openfree.energy),
a pre competitive consortium aiming to provide robust, permissively licensed open source tools for molecular simulation in the drug discovery field.
The `openfe` package is the flagship project of [Open Free Energy](https://openfree.energy), a pre competitive consortium aiming to provide robust, permissively licensed open source tools for molecular simulation in the drug discovery field.

Using `openfe` you can easily plan and execute alchemical free energy calculations.

Expand All @@ -24,7 +23,10 @@ This library is made available under the [MIT](https://opensource.org/licenses/M

### Latest release

The latest release of `openfe` can be installed via `mamba`, `docker`, or a `single file installer`. See [our installation instructions](https://docs.openfree.energy/en/stable/installation.html) for more details.
The latest release of `openfe` can be installed via `mamba`, `docker`, or a `single file installer`.

See [our installation instructions](https://docs.openfree.energy/en/stable/installation.html) for more details.

Dependencies can be installed via conda through:

### Development version
Expand All @@ -35,6 +37,7 @@ First install the package dependencies using `mamba`:

```bash
mamba env create -f environment.yml
mamba activate openfe_env
```

The openfe library can then be installed via:
Expand All @@ -43,6 +46,17 @@ The openfe library can then be installed via:
python -m pip install --no-deps .
```

## Issues

If you think you have encountered a software issue, please raise this on the [Issues tab](https://github.com/OpenFreeEnergy/openfe/issues) in Github.
In general, the more details you can provide the better.
We recommend reading section 3.3 of [this article](https://livecomsjournal.org/index.php/livecoms/article/view/v3i1e1473) to understand the problem solving process.


## Discussions

If you have general questions about using OpenFE (i.e. not bugs or feature requests), reach out on the ["Discussions" tab above](https://github.com/OpenFreeEnergy/openfe/discussions) to start a conversation!

## Authors

The OpenFE development team.
Expand Down