Contributing
Introduction
Purpose
This document describes how to contribute to the Dissolve project.
Scope
This overview provides essential information for those wishing to contribute to Dissolve, covering processes and workflows for light-touch contributions from end-users through to more in-depth development.
Basics
Contributions to Dissolve are welcome, and can come in many forms - the ability to write code is not a prerequisite! For instance, you could:
- Fix typos, grammar, or inconsistencies in the documentation, or add to sections that are missing content or could be improved.
- Test it by attempting to reproduce results obtained previously with EPSR.
- Break it somehow, and submit a bug report describing the problem and how you created it.
- Document an example use-case (most likely a system you’re interested in) and submit it for inclusion.
- Fix something in the code, or add a missing feature (see the current list of issues).
- Open a new feature request issue describing something you’d like to see added, and why.
- Create a new module to extend Dissolve’s functionality.
Most of these require at least an account on GitHub, so if you want to contribute the first step is to register and go to the Dissolve repository.
Contributing to Documentation
Making changes to the documentation is one of the easiest routes to contributing. While a GitHub account is still required, the documentation can be edited directly in the Dissolve repository on the GitHub website. The repository will automatically be forked and a pull request made on your behalf once you’ve finished editing the file, which will then go to the developers for review before the changes are incorporated into the main repository.
More details can be found in this GitHub guide.
Contributing to the Codebase
Contributing code to Dissolve as an interested third party is relatively straightforward. Dissolve is version controlled with git and hosted on GitHub at https://www.github.com/disorderedmaterials/dissolve. Dissolve adopts a simple branching model for development, with develop
being the main branch of the repository, and versioned releases branching off from that. Any additions or fixes to the code should be made through a suitable pull request from your own forked repository.
1) Register on GitHub
Register an account on GitHub if you don’t already have one.
2) Fork Dissolve
Go to the Dissolve repository and hit the Fork button at the top-right. This will give you your own copy of the Dissolve code as it currently stands. GitHub will take you to your own copy of Dissolve once the fork is completed, which you can should then clone / download on to your own machine.
3) Experiment / Fix / Break / Play
You can freely experiment with the source code without fear of breaking the actual version, as all the changes you make are isolated to your repository until such time as you choose to submit a pull request and
4) Contribution Primer for a Small Fix
Firstly, clone your repository to your local machine if you haven’t already:
bob@linux:~> git clone https://github.com/YOUR_GITHUB_USER_NAME/dissolve.git ./dissolve
Cloning into './dissolve'...
remote: Enumerating objects: 240, done.
remote: Counting objects: 100% (240/240), done.
remote: Compressing objects: 100% (131/131), done.
remote: Total 32706 (delta 139), reused 188 (delta 102), pack-reused 32466
Receiving objects: 100% (32706/32706), 146.78 MiB | 4.70 MiB/s, done.
Resolving deltas: 100% (27682/27682), done.
Checking out files: 100% (2309/2309), done.
bob@linux:~> cd dissolve
bob@linux:~> git submodule update --init --recursive
bob@linux:~> ls
AUTHORS changeversion commit dissolve.kdev4 extra NEWS tests
autogen.sh cmake configure.ac docs INSTALL README
ChangeLog CMakeLists.txt COPYING examples Makefile.am src
bob@linux:~> git status
On branch develop
Your branch is up to date with 'origin/develop'.
nothing to commit, working tree clean
The output of git status
tells you which branch you are currently on (develop
) and the state of your branch relative to that on the server. Since you haven’t yet made any changes, your working tree is ‘clean’.
Next, we’ll make a small change and fix a typo which I’ve just found. In src/classes/configuration.h
there was a mis-spelling of ‘specified’ (‘specifeid’):
bob@linux:~> vi src/classes/configuration.h # Fix the typo
bob@linux:~> git status
On branch develop
Your branch is up to date with 'origin/develop'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/classes/configuration.h
no changes added to commit (use "git add" and/or "git commit -a")
bob@linux:~> git diff
diff --git a/src/classes/configuration.h b/src/classes/configuration.h
index 6c9ff564..2a17f1d3 100644
--- a/src/classes/configuration.h
+++ b/src/classes/configuration.h
@@ -113,7 +113,7 @@ class Configuration : public ListItem<Configuration>, public ObjectStore<Configu
SpeciesInfo* usedSpeciesInfo(Species* sp);
// Return list of SpeciesInfo for the Configuration
List<SpeciesInfo>& usedSpecies();
- // Return if the specifeid Species is present in the usedSpecies list
+ // Return if the specified Species is present in the usedSpecies list
bool hasUsedSpecies(Species* sp);
// Return total relative population of Species used by this Configuration
double totalRelative() const;
git status
will tell you which files have been changed since the last commit, and whether they are ready to commit. The git diff
command gives you a complete list of all the things you have changed, relative to the last commit.
We’ll now prepare this change ready for merging into your repository, as suggested by the output of git status
above. This is known as ‘staging’ and is performed with git add
:
bob@linux:~> git add src/classes/configuration.h
This will stage all changes in the specified files(s). If you want to cherry-pick certain changes within files for staging, use git add --patch <files>
.
Now that our changes have been staged, we can commit them along with a suitable message giving a brief description of the changes. Commit messages should be written such that they make sense when prepended with “This commit will…”, and be short and to the point:
bob@linux:~> git commit -m "Fix typo."
[develop 4bbffa94] Fix typo.
1 file changed, 1 insertion(+), 1 deletion(-)
bob@linux:~> git status
On branch develop
Your branch is ahead of 'origin/develop' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
git status
now tells us that there are no more changes to any other files, but that we are one commit ahead of the repository on the server (the ‘origin’). It is worth stating that all of these changes are still stored only on your local machine - to send them to the server you must ‘push’ them as follows:
bob@linux:~> git push
Counting objects: 5, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 462 bytes | 462.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To https://www.github.com/YOUR_GITHUB_USER_NAME/dissolve.git
218d7884..758678a6 develop -> develop
At this stage, you can create a pull request to ask for those changes to be copied from your repository and merged into the main Dissolve repository. The changes you’ve made will be reviewed by the lead author(s), and may be immediately accepted, commented on, or more changes / corrections may be requested.
Pull Request Conventional Commits
The title of each pull request needs to begin with a tag describing the nature of the commit. These tags, as part of the Conventional Commits framework, enable easier change management. A GitHub action warns when the title of the pull request does not meet the requirements.
The tags that we recognise are:
- feat
- New features that are use visible fix
- Corrections for errors in the code docs
- Changes and corrections to the documentation perf
- Improvements in the performance refactor
- Changes to the code that are not intended to change any behaviour style test
- Updates to the testing framework chore
- Commits that should have no visible impact to the user revert
- Changes that remove other changes build
- Modifications of the build system used to compile and package Dissolve
Collaborators
If you wish to become an official collaborator on Dissolve and want direct access to the main repository, e-mail the lead author Tristan Youngs to discuss.