Diff of /CONTRIBUTING.md [000000] .. [422372]

Switch to unified view

a b/CONTRIBUTING.md
1
# Contributing to EEGLAB
2
3
There are several ways in which you can contribute to the ongoing development of EEGLAB:
4
5
## Bug reporting
6
7
1. Please search on both the [EEGLAB discussion list archive](https://sccn.ucsd.edu/pipermail/eeglablist/)
8
   (to search the list Google "eeglablist your question")
9
   and the [GitHub issue list](https://github.com/sccn/eeglab/issues)
10
   to see if anybody else has lodged a similar observation.
11
12
3. How confident are you that the behavior you have observed is in fact a
13
   genuine bug, and not a misunderstanding?
14
15
   -  *Confident*: Please [open a new GitHub issue](https://github.com/sccn/eeglab/issues/new);
16
      select the "bug report" issue template to get started.
17
18
   -  *Not so confident*: That's fine! Consider instead creating a new topic
19
      on the [EEGLAB discussion list](https://eeglab.org/others/EEGLAB_mailing_lists.html);
20
      others can then comment on your observation and determine the
21
      appropriate level of escalation.
22
23
## Requesting a new feature
24
25
Please search the [GitHub issue list](https://github.com/sccn/eeglab/issues)
26
to see if anybody else has made a comparable request:
27
28
   -  If a corresponding issue already exists, please add a comment to that
29
      issue to escalate the request. Additionally, describe any
30
      aspect of that feature not yet described in the existing issue.
31
32
   -  If no such listing exists, then you are welcome to create a [new
33
      issue](https://github.com/sccn/eeglab/issues/new) outlining the
34
      request. Be sure to select the "feature request" option to get started
35
      with writing the issue.
36
37
## Asking questions
38
39
General questions regarding EEGLAB download, usage, or any other
40
aspect that is not specific to the EEGLAB *code*, should be directed to
41
the [EEGLAB discussion list](https://eeglab.org/others/EEGLAB_mailing_lists.html). Also check
42
the [online documentation](https://eeglab.org/).
43
44
## Making direct contributions
45
46
Thanks for your interest in making direct contributions to EEGLAB!
47
We are excited to expand the breadth of researchers involved in improving
48
and expanding this software, and to ensure that all who make such
49
contributions receive appropriate acknowledgment through Git.
50
51
The instructions below give a short overview of how to go about generating a
52
proposed change to EEGLAB. A more detailed tutorial on using Git and contributing
53
to the code (or website) is presented as [online tutorial](https://eeglab.org/tutorials/contribute/)
54
on the EEGLAB website.
55
56
1. You will need to create a *fork* of the [EEGLAB repository](https://github.com/sccn/eeglab)
57
   into your GitHub account, where unlike the main EEGLAB repository,
58
   you will have full write access to make the requisite changes.
59
60
2. Create a Git branch that is named appropriately according to the
61
   modifications that are being made. The existing code branch on which
62
   this new derived branch should be based depends on the nature of the
63
   proposed change (described later below).
64
65
3. Generate one or more Git commits that apply your proposed changes to
66
   the repository:
67
68
   -  Individual commits should ideally have a clear singular purpose,
69
      and not incorporate multiple unrelated changes. If your proposed
70
      changes involve multiple disparate components, consider breaking
71
      those changes up into individual commits.
72
73
      Conversely, if multiple code changes are logically grouped with /
74
      linked to one another, these should ideally be integrated into a
75
      single commit.
76
77
   -  Commits should contain an appropriate message that adequately
78
      describes the change encapsulated within.
79
80
      If the change demands a longer description, then the commit message
81
      should be broken into a synopsis (less than 80 characters) and message
82
      body, separated by two newline characters (as this enables GitHub to
83
      parse them appropriately).
84
85
      This can be achieved at the command-line as follows:
86
87
      `$ git commit -m $'Commit synopsis\n\nHere is a much longer and wordier description of my proposed changes that doesn\'t fit into 80 characters.\nI can even spread the message body across multiple lines.'`
88
89
      (Note also the escape character "`\`" necessary for including an
90
      apostrophe in the message text)
91
92
   -  Where relevant, commit messages can also contain references to
93
      GitHub issues or pull requests (type the "`#`" character followed
94
      by the issue / PR number), and/or other individual commits (copy
95
      and paste the first 8-10 characters of the commit hash).
96
97
   -  If multiple persons have contributed to the proposed changes, it is
98
      possible to modify individual Git commits to have [multiple
99
      authors](https://help.github.com/en/articles/creating-a-commit-with-multiple-authors),
100
      to ensure that all contributors receive appropriate acknowledgement.
101
102
   As a general rule: Git commits and commit messages should be constructed
103
   in such a way that, at some time in the future, when one is navigating
104
   through the contribution history, the evolution of the code is as clear
105
   as possible.
106
107
4. Identify the appropriate classification of the change that you propose
108
   to make, and read the relevant instructions there:
109
110
   -  "[**Fix**](#fix)": If the current code behaviour is
111
      *clearly incorrect*.
112
113
   -  "[**Enhancement**](#enhancement)": If the proposed change improves the *performance* or extends the *functionality* of a particular command or process.
114
115
   -  "[**Documentation**](#documentation)": If you made some changes to the function description in the help section of the function.
116
117
5. Check that your modified code does not prevent EEGLAB from
118
   passing existing tests, wherever possible (all test files are in the EEGLAB test directory).
119
120
6. For code contributions, if possible, a unit test or reproducibility
121
   test should be added. This not only demonstrates the behavior of the
122
   proposed code, but will also preclude future regression of the behavior
123
   of that code.
124
125
1. Once completed, a Pull Request should be generated that merges the
126
   corresponding branch in your forked version of the EEGLAB repository
127
   into the appropriate target branch of the main EEGLAB repository
128
   itself:
129
130
   -  If your intended changes are complete, and you consider them ready
131
      to be reviewed by an EEGLAB team member and merged imminently,
132
      then create a standard Pull Request.
133
134
   -  If your changes are ongoing, and you are seeking feedback from the
135
      EEGLAB developers before completing them, then also create a standard pull
136
      request. When you modify your code, the pull request will automatically
137
      be updated.
138
139
#### Fix
140
141
1. If there does not already exist a [GitHub issue](https://github.com/sccn/eeglab/issues)
142
   describing the bug, consider reporting the bug as a standalone issue
143
   prior to progressing further; that way developers can confirm the issue,
144
   and possibly provide guidance if you intend to resolve the issue yourself.
145
   Later, the Pull Request incorporating the necessary changes should then
146
   reference the listed issue (simply add somewhere in the description
147
   section the "`#`" character followed by the issue number).
148
149
2. Bug fixes are merged directly to `master`; as such, modifications to the
150
   code should be made in a branch that is derived from `master`, and the
151
   corresponding Pull Request should select `master` as the target branch
152
   for code merging.
153
154
3. A unit test or reproducibility test should ideally be added: such a
155
   test should fail when executed using the current `master` code, but pass
156
   when executed with the proposed changes.
157
158
#### Enhancement
159
160
1. New features, as well as any code changes that extend the functionality of
161
   EEGLAB, are merged to the `develop` branch, which contains
162
   all resolved changes since the most recent tag update. As such, any
163
   proposed changes that fall under this classification should be made
164
   in a branch that is based off of the `develop` branch, and the corresponding
165
   Pull Request should select `develop` as the target branch for code merging.
166
167
#### Documentation
168
169
If you want to contribute to the documentation on the EEGLAB website, please refer to the website's [Github repository](https://github.com/sccn/sccn.github.io).
170
171
#### Coding conventions
172
173
Please follow the [MATLAB style guidelines](https://www.mathworks.com/matlabcentral/fileexchange/46056-matlab-style-guidelines-2-0) for guidelines on contributing to the EEGLAB code base.
174
175
Non-exhaustive summary of coding guidelines:
176
177
* 2 space indents; indent using spaces and not tabs
178
* No spaces between function name and opening parenthesis of argument list
179
* One space after the comma that separates function arguments
180
* Vertically align code with spaces in case it improves readability
181
182
#### References
183
184
This document is based on the excellent CONTRIBUTING.md document from the [MRTRIX repository](https://github.com/MRtrix3/mrtrix3/), and adjusted accordingly.