2016-11-30 06:56:42 +01:00
|
|
|
## Contributing to the YunoHost core
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2016-11-30 06:56:42 +01:00
|
|
|
You wish to add a new feature in the YunoHost core, but don't know how to
|
|
|
|
proceed? This guide takes you through the various steps of the development and
|
2016-11-24 02:37:05 +01:00
|
|
|
contribution process.
|
|
|
|
|
2016-11-27 04:57:00 +01:00
|
|
|
If you're looking for stuff to implement or fix, the bug-tracker is
|
2018-06-05 16:02:47 +02:00
|
|
|
[here](https://github.com/YunoHost/issues/issues) !
|
2016-11-24 22:23:50 +01:00
|
|
|
|
2019-10-14 17:44:26 +02:00
|
|
|
**Come say hi to us in the [dev chatroom](/chat_rooms)** !
|
2016-11-27 04:57:00 +01:00
|
|
|
|
|
|
|
### Setting up a development environment
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
- **Use [ynh-dev](https://github.com/YunoHost/ynh-dev)** (see the README) to
|
|
|
|
setup a development environment - locally in a virtual machine, or on a VPS.
|
2016-11-30 06:56:42 +01:00
|
|
|
This will setup a working YunoHost instance, using directly the git repositories
|
2016-11-27 04:57:00 +01:00
|
|
|
(with symlinks). That way, you will be able to edit files, test your changes in real
|
|
|
|
time, commit stuff and push/pull directly from your development environment.
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2016-11-27 04:57:00 +01:00
|
|
|
- **Implement and test your feature**. Depending on what you want to develop, you
|
2016-11-24 02:37:05 +01:00
|
|
|
will want to :
|
2019-10-14 17:44:26 +02:00
|
|
|
- **Python/CLI core** : work in `/ynh-dev/yunohost/`
|
|
|
|
- **Web administration interface** : work in `/ynh-dev/yunohost-admin/`
|
2016-11-30 06:56:42 +01:00
|
|
|
- You can also work on the other projects on which YunoHost is built
|
2016-11-27 04:57:00 +01:00
|
|
|
(SSOwat, moulinette) in similar ways
|
|
|
|
|
2016-11-30 06:56:42 +01:00
|
|
|
### Working on the YunoHost Python/CLI core
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2019-10-14 17:44:26 +02:00
|
|
|
- Work in `/ynh-dev/yunohost/`.
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2019-10-14 17:44:26 +02:00
|
|
|
- Run `cd /ynh_dev/ && ./ynh-dev use-git yunohost`.
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
- The actionsmap file (`data/actionsmap/yunohost.yml`) defines the various
|
|
|
|
categories, actions and arguments of the yunohost CLI. Define how you want
|
|
|
|
users to use your feature, and add/edit the corresponding categories, actions
|
|
|
|
and arguments. For example in `yunohost domain add some.domain.tld`, the
|
|
|
|
category is `domain`, the action is `add`, and `some.domain.tld` is an
|
|
|
|
argument.
|
|
|
|
|
|
|
|
- Moulinette will automatically map commands in the actionsmap to python
|
|
|
|
functions (and their arguments) located in `src/yunohost/`. For example, typing
|
|
|
|
`yunohost domain add some.domain.tld` will call the function
|
|
|
|
`domain_add(domainName)` in `domain.py`, with the argument `domainName` equal
|
|
|
|
to `"some.domain.tld"`.
|
|
|
|
|
2016-11-27 04:57:00 +01:00
|
|
|
##### Helpers / coding style
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2019-10-14 17:44:26 +02:00
|
|
|
- To handle exceptions, you should raise some `YunohostError()`
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
- To help with internationalizing the messages, use `m18n.n('some-message-id')`
|
|
|
|
and put your string in `locales/en.json`. You can also put arguments and use
|
|
|
|
them in the string with `{{some-argument:s}}`. Don't edit other locales files,
|
2016-11-27 04:57:00 +01:00
|
|
|
this will be done using [weblate](https://translate.yunohost.org/) !
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2016-11-30 06:56:42 +01:00
|
|
|
- YunoHost tries to follow the [pep8](http://pep8.org/) coding style. Tools
|
2016-11-24 02:37:05 +01:00
|
|
|
exist to automatically check conformity.
|
|
|
|
|
|
|
|
- Name of "private" functions should start with a `_`
|
|
|
|
|
2016-11-30 06:56:42 +01:00
|
|
|
### Working on the YunoHost web administration interface
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2019-10-14 17:44:26 +02:00
|
|
|
- Work in `/ynh-dev/yunohost-admin/src/`.
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2019-10-14 17:44:26 +02:00
|
|
|
- Run `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. It launches gulp, such as each
|
2016-11-24 22:23:50 +01:00
|
|
|
time you modify sources, it recompiles the code and you can use it by
|
|
|
|
refreshing (Ctrl+F5) your web administration. To stop the command, just do Ctrl+C.
|
|
|
|
|
2016-11-30 06:56:42 +01:00
|
|
|
- The web interface uses the API to interact with YunoHost. The API
|
2016-11-24 02:37:05 +01:00
|
|
|
commands/requests are also defined via the actionsmap. For instance, accessing
|
|
|
|
the page ```https://domain.tld/yunohost/api/users``` corresponds to a `GET
|
2016-11-30 06:56:42 +01:00
|
|
|
/users` requests on the YunoHost API. It is mapped to the function
|
2016-11-24 02:37:05 +01:00
|
|
|
`user_list()`. Accessing the URL should display the json returned by this
|
|
|
|
function. 'GET' requests are typically meant to ask information to the server.
|
|
|
|
'POST' requests are meant to ask the server to edit/change some information,
|
|
|
|
or to execute some actions.
|
|
|
|
|
|
|
|
- `js/yunohost/controllers` contains the javascript parts,
|
|
|
|
and define which requests to make to the API when loading a specific page of
|
|
|
|
the interface, and how to process the data to generate the page, using
|
|
|
|
templates.
|
|
|
|
|
|
|
|
- `views` contains the various templates for the pages of the interface. In the
|
|
|
|
template, data coming from the javascript part can be used with the syntax
|
|
|
|
`{{some-variable}}`, which will be replaced when building/accessing the page.
|
|
|
|
It is also possible to have conditions using the
|
|
|
|
[handlebars.js](http://handlebarsjs.com) syntax : ```{{#if
|
2016-11-27 04:57:00 +01:00
|
|
|
some-variable}}<p>Some conditional HTML code here !</p>{{/if}}```
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
- For internationalized strings, use `y18n.t('some-string-code')` in the
|
|
|
|
javascript, or `{{t 'some-string-code'}}` in the HTML template, and put your
|
2016-11-27 04:57:00 +01:00
|
|
|
string in `locales/en.json`. Don't edit other locales files,
|
|
|
|
this will be done using [weblate](https://translate.yunohost.org/) !
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2016-11-27 04:57:00 +01:00
|
|
|
##### Don't forget
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
- Each time you edit the actionsmap, you should restart the yunohost-api :
|
|
|
|
```service yunohost-api restart```
|
|
|
|
(You'll need to retype your admin password in the web interface)
|
|
|
|
|
2016-11-24 22:23:50 +01:00
|
|
|
- You might need to force-clear the cache of your browser sometimes to refresh
|
|
|
|
the javascript and/or html (so each time you edit something in `js` or `views`).
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
|
2016-11-30 06:56:42 +01:00
|
|
|
### Your feature is ready and you want it to be integrated in YunoHost
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2016-11-24 22:23:50 +01:00
|
|
|
- Fork the relevant repo on Github, and commit stuff to a new branch. We recommend
|
|
|
|
to name the branch with the following convention :
|
2019-10-14 17:44:26 +02:00
|
|
|
- For an enhancement or new feature : `enh-ISSUENUMBER-name-of-feature`
|
|
|
|
- For a bugfix `fix-ISSUENUMBER-description-of-fix`
|
|
|
|
- `ISSUENUMBER` is optional and is the id of a corresponding ticket on the bug tracker.
|
2016-11-24 02:37:05 +01:00
|
|
|
|
2016-11-27 04:57:00 +01:00
|
|
|
- Once you're ready, open a Pull Request (PR) on Github. Please include `[fix]` or
|
|
|
|
`[enh]` at the beginning of the title of your PR.
|
2016-11-24 02:37:05 +01:00
|
|
|
|
|
|
|
- After reviewing, testing and validation by other contributors, your branch
|
2019-10-14 17:44:26 +02:00
|
|
|
should be merged in `unstable` !
|