|
.. _general-contribution-guideline: |
|
|
|
General Guideline |
|
================== |
|
|
|
Thank you for considering contributing to S3PRL, we really appreciate it. |
|
|
|
However, due to the increasing difficulty of maintenance, please understand that **we might not accept the new feature**. |
|
|
|
Hence, **before submitting the implemented pull request**, |
|
please **submit your feature request** to the Github issue page so we can discuss about whether we want it and how to achieve it. |
|
|
|
.. warning:: |
|
|
|
If we did not go through this discussion, the pull request will not be dealt with and will be directly closed. |
|
|
|
|
|
Discuss |
|
----------- |
|
|
|
`Submit your feature request <https://github.com/s3prl/s3prl/issues/new?assignees=&labels=&template=feature_request.md&title=>`_ |
|
on our Github Issue page to propose features and changes. |
|
|
|
Please wait for our response and do not move on to the following steps before we have a consensus on what is going to be changed. |
|
|
|
Setup |
|
----------- |
|
|
|
Clone the repository to **S3PRL_ROOT** and install the package |
|
|
|
.. code-block:: bash |
|
|
|
S3PRL_ROOT="/home/leo/d/s3prl" |
|
git clone https://github.com/s3prl/s3prl.git ${S3PRL_ROOT} |
|
cd ${S3PRL_ROOT} |
|
|
|
pip install -e ".[dev]" |
|
# This installs the dependencies for the full functionality of S3PRL in the editable mode, |
|
# including the dependencies for development like testing and building doc |
|
|
|
|
|
Tests |
|
---------- |
|
|
|
Add unit tests to **${S3PRL_ROOT}/test/** to test your own new modules |
|
|
|
Verify you pass all the tests |
|
|
|
.. code-block:: bash |
|
|
|
cd ${S3PRL_ROOT} |
|
pytest |
|
|
|
|
|
Documentation |
|
------------- |
|
|
|
Make sure you write the documentation on the modules' docstring |
|
|
|
Build the documentation and make sure it looks correct |
|
|
|
.. code-block:: bash |
|
|
|
cd ${S3PRL_ROOT}/docs |
|
|
|
# build |
|
./rebuild_docs.sh |
|
|
|
# launch http server |
|
python3 -m http.server -d build/html/ |
|
|
|
# You can then use a browser to access the doc webpage on: YOUR_IP_OR_LOCALHOST:8000 |
|
|
|
Coding-style check |
|
------------------ |
|
|
|
Stage your changes |
|
|
|
.. code-block:: bash |
|
|
|
git add "YOUR_CHANGED_OR_ADDED_FILES_ONLY" |
|
|
|
.. warning:: |
|
|
|
Please do not use **git add .** to add all the files under your repository. |
|
If there are files not ignored by git (specified in **.gitignore**), like |
|
temporary experiment result files, they will all be added into git version |
|
control, which will mess out our repository. |
|
|
|
.. note:: |
|
|
|
In our **.gitignore**, there are lots of ignored files especially for *.yaml* |
|
and *.sh* files. If the config files or the shell scripts are important, please |
|
remember to add them forcely, for example :code::`git add -f asr.yaml` |
|
|
|
Run **pre-commit** to apply the standardized coding-style on **YOUR_CHANGED_OR_ADDED_FILES_ONLY** |
|
|
|
.. code-block:: bash |
|
|
|
pre-commit run |
|
|
|
If the results show there are files modified by **pre-commit**, you need to re-stage |
|
these files following the previous step. |
|
|
|
|
|
Commit / Push |
|
------------- |
|
|
|
Commit and push the changes |
|
|
|
.. code-block:: bash |
|
|
|
git commit -m "YOUR_COMMIT_MESSAGE" |
|
git push origin "YOUR_BRANCH" |
|
|
|
|
|
(Optional) Test against multiple environments |
|
--------------------------------------------- |
|
|
|
We leverage **tox** to simulate multiple envs, see the `tox configuration <https://github.com/s3prl/s3prl/blob/main/tox.ini>`_ for more information. |
|
Tox helps automate the pipeline of creating different virtual envs, installing differnet dependencies of S3PRL, running different testing commands. |
|
Our Github Action CI also relies on tox, hence you can debug the CI error locally with tox. |
|
|
|
Before using tox, make sure your cli can launch the following python versions. Usually, this can be achieved via `pyenv <https://github.com/pyenv/pyenv>`_ |
|
|
|
- python3.7 |
|
- python3.8 |
|
- python3.9 |
|
- python3.10 |
|
|
|
List all the available environments. An environment means a pre-defined routine of packaging S3PRL, installing S3PRL, installing specific dependencies, |
|
test specific commands. See `tox configuration <https://github.com/s3prl/s3prl/blob/main/tox.ini>`_ for more information. |
|
|
|
.. code-block:: bash |
|
|
|
tox -l |
|
|
|
Suppose there is an environment named :code:`all_upstream-py38-audio0.12.1`, you can also test against this specific env: |
|
|
|
.. code-block:: bash |
|
|
|
tox -e all_upstream-py38-audio0.12.1 |
|
|
|
Test all environments. This simulate the environments you will meet on the Github Action CI |
|
|
|
.. code-block:: bash |
|
|
|
tox |
|
|
|
|
|
Send a pull request |
|
------------------- |
|
|
|
Verify your codes are in the proper format |
|
|
|
.. code-block:: bash |
|
|
|
./ci/format.sh --check |
|
# If this fails, simply remove --check to do the actual formatting |
|
|
|
Make sure you add test cases and your change pass the tests |
|
|
|
.. code-block:: bash |
|
|
|
pytest |
|
|
|
Send a pull request on GitHub |
|
|