|
| 1 | +# nf-core/proteinfold: Contributing Guidelines |
| 2 | + |
| 3 | +Hi there! |
| 4 | +Many thanks for taking an interest in improving nf-core/proteinfold. |
| 5 | + |
| 6 | +We try to manage the required tasks for nf-core/proteinfold using GitHub issues, you probably came to this page when creating one. |
| 7 | +Please use the pre-filled template to save time. |
| 8 | + |
| 9 | +However, don't be put off by this template - other more general issues and suggestions are welcome! |
| 10 | +Contributions to the code are even more welcome ;) |
| 11 | + |
| 12 | +> If you need help using or modifying nf-core/proteinfold then the best place to ask is on the nf-core Slack [#proteinfold](https://nfcore.slack.com/channels/proteinfold) channel ([join our Slack here](https://nf-co.re/join/slack)). |
| 13 | +
|
| 14 | +## Contribution workflow |
| 15 | + |
| 16 | +If you'd like to write some code for nf-core/proteinfold, the standard workflow is as follows: |
| 17 | + |
| 18 | +1. Check that there isn't already an issue about your idea in the [nf-core/proteinfold issues](https://github.com/nf-core/proteinfold/issues) to avoid duplicating work |
| 19 | + * If there isn't one already, please create one so that others know you're working on this |
| 20 | +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/proteinfold repository](https://github.com/nf-core/proteinfold) to your GitHub account |
| 21 | +3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) |
| 22 | +4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). |
| 23 | +5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged |
| 24 | + |
| 25 | +If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). |
| 26 | + |
| 27 | +## Tests |
| 28 | + |
| 29 | +When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. |
| 30 | +Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. |
| 31 | + |
| 32 | +There are typically two types of tests that run: |
| 33 | + |
| 34 | +### Lint tests |
| 35 | + |
| 36 | +`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. |
| 37 | +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint <pipeline-directory>` command. |
| 38 | + |
| 39 | +If any failures or warnings are encountered, please follow the listed URL for more documentation. |
| 40 | + |
| 41 | +### Pipeline tests |
| 42 | + |
| 43 | +Each `nf-core` pipeline should be set up with a minimal set of test-data. |
| 44 | +`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. |
| 45 | +If there are any failures then the automated tests fail. |
| 46 | +These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. |
| 47 | + |
| 48 | +## Patch |
| 49 | + |
| 50 | +:warning: Only in the unlikely and regretful event of a release happening with a bug. |
| 51 | + |
| 52 | +* On your own fork, make a new branch `patch` based on `upstream/master`. |
| 53 | +* Fix the bug, and bump version (X.Y.Z+1). |
| 54 | +* A PR should be made on `master` from patch to directly this particular bug. |
| 55 | + |
| 56 | +## Getting help |
| 57 | + |
| 58 | +For further information/help, please consult the [nf-core/proteinfold documentation](https://nf-co.re/proteinfold/usage) and don't hesitate to get in touch on the nf-core Slack [#proteinfold](https://nfcore.slack.com/channels/proteinfold) channel ([join our Slack here](https://nf-co.re/join/slack)). |
| 59 | + |
| 60 | +## Pipeline contribution conventions |
| 61 | + |
| 62 | +To make the nf-core/proteinfold code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. |
| 63 | + |
| 64 | +### Adding a new step |
| 65 | + |
| 66 | +If you wish to contribute a new step, please use the following coding standards: |
| 67 | + |
| 68 | +1. Define the corresponding input channel into your new process from the expected previous process channel |
| 69 | +2. Write the process block (see below). |
| 70 | +3. Define the output channel if needed (see below). |
| 71 | +4. Add any new parameters to `nextflow.config` with a default (see below). |
| 72 | +5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). |
| 73 | +6. Add sanity checks and validation for all relevant parameters. |
| 74 | +7. Perform local tests to validate that the new code works as expected. |
| 75 | +8. If applicable, add a new test command in `.github/workflow/ci.yml`. |
| 76 | +9. Update MultiQC config `assets/multiqc_config.yaml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. |
| 77 | +10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. |
| 78 | + |
| 79 | +### Default values |
| 80 | + |
| 81 | +Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. |
| 82 | + |
| 83 | +Once there, use `nf-core schema build` to add to `nextflow_schema.json`. |
| 84 | + |
| 85 | +### Default processes resource requirements |
| 86 | + |
| 87 | +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. |
| 88 | + |
| 89 | +The process resources can be passed on to the tool dynamically within the process with the `${task.cpu}` and `${task.memory}` variables in the `script:` block. |
| 90 | + |
| 91 | +### Naming schemes |
| 92 | + |
| 93 | +Please use the following naming schemes, to make it easy to understand what is going where. |
| 94 | + |
| 95 | +* initial process channel: `ch_output_from_<process>` |
| 96 | +* intermediate and terminal channels: `ch_<previousprocess>_for_<nextprocess>` |
| 97 | + |
| 98 | +### Nextflow version bumping |
| 99 | + |
| 100 | +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` |
| 101 | + |
| 102 | +### Images and figures |
| 103 | + |
| 104 | +For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). |
0 commit comments