Contribuie

Contributions to Jami are always welcome and are much appreciated. There are many ways to contribute to Jami, including:

  • Reporting bugs and issues,

  • Contributing code,

  • Helping package and maintain Jami for a GNU/Linux distribution or other operating system,

  • Contributing to the Jami documentation.

Citește mai jos pentru a afla cum să începi să contribui la Jami!

Raportarea defecțiunilor

Please see the Bug report guide for step-by-step instructions on how to report any issue you may encounter with Jami.

Contribuirea la cod

To start contributing to Jami, look at the good first issues at: https://git.jami.net/groups/savoirfairelinux/-/issues/?sort=created_date&state=opened&label_name[]=good first issue .

Contact the developers directly by adding a comment on the ticket. This will enable the developers to guide you through the process.

A push with a patch to https://review.jami.net will be required to integrate the code to Jami.

Vezi și

For more information on how to push a patch, please refer to the Working with Gerrit guide.

Instrucțiuni privind trimiterea mesajelor

When submitting a patch to Jami, please follow the following guidelines for the commit messages:

  1. The first line should include the component or scope of the change, followed by a short summary of the change in the imperative mood (e.g., „add new function”, „fix bug”, „update documentation”).

  2. Subiectul poate folosi majuscule pentru componenta sau scopul modificării, însă restul titlului trebuie să fie scris cu minuscule.

  3. Al doilea rînd trebuie să fie gol.

  4. Al treilea rînd ar trebui să fie începutul unei descrieri mai lungi a modificării în propoziții complete, dacă este necesar.

  5. 50/72: Primul rînd nu trebuie să aibă mai mult de 50 de caractere (în mod ideal), iar restul mesajului trebuie să aibă 72 de caractere pe rînd. Acest lucru poate fi configurat în programul de redactare a textului.

  6. If the change is related to a specific issue in the Jami GitLab, include the issue number in the commit message. For example: GitLab: #123. If the change is related to multiple issues, list them all. If the change is related to an issue that is not part of the project, use a link to the issue instead.

Model pentru un mesaj GitLab:

<Component/Scope>: <short Summary (imperative, max 50 characters)>

<Detailed description (in present tense) of what was changed and why
it was necessary, wrapped at 72 characters per line to maintain
readability. Include any important details that help others understand
the context of the change. Use this space to explain complex changes
or provide background information.>

[GitLab: #<issuenumber>] or [Link to issue]

De exemplu:

ConversationView: add a new function

Adds a new function to the ConversationView class that allows
the user to sort conversations by date. This function is necessary
to improve the user experience and make it easier to find specific
conversations.

GitLab: #123

Împachetarea Jami

There are two possible ways to package Jami:

  1. Via our internal process to create packages available on the Snap Store or https://dl.jami.net.

  2. Via the packaging process of your favorite GNU/Linux distribution.

Important

Jami is a quite complex project with a lot of dependencies. This isn’t a quick and easy task and requires maintenance.

Notă

If Jami is packaged using the second option:

  • For official releases, Jami uses certain Qt versions because Qt is a big dependency. This is to ensure that Jami works with the Qt version in use. Every slight change in the Qt version can break Jami or bring some small unwanted changes. For example, 6.2 → 6.4 broke the video pipeline.

  • Jami uses a fork of the pjproject, as ICE over TCP is a requirement that is not planned upstream.

  • libupnp received some patches to ensure that it’s built with the non-blocking API.

  • FFmpeg has some screen sharing patches.

  • Visit daemon/contrib/src to check how dependencies are built.

For internal packaging, everything is located in extras/packaging/gnu-linux. You can follow previous patches to understand your needs. e.g., https://review.jami.net/c/jami-client-qt/+/28036.

Jami has 3 release channels:

  • Internal for testing purposes

  • Nightly/Beta/Edge for public beta

  • Stable for public releases

The internal channel is generally used to test new distributions or when a new Qt version is packaged. Then a nightly is generated once per week, and a stable is generated once per month (if unit tests are green).

Packages are pushed to:

To add a distribution:

  • Add Dockerfile

  • Change Makefile

  • Update packaging script

  • Cross fingers

  • Test the package in a VM

Atenționare

Chromium is a hard part to build. Three common problems encountered are:

  • GCC este prea recent:

    • Generally the fix consist of importing patches from Chromium’s gerrit to fix GCC issues

  • Python este prea recent:

    • În general, soluția constă în utilizarea PyEnv pentru a obține un mediu virtual cu versiunea corectă de Python

  • Dependențe lipsă:

    • În timpul etapei de configurare a Qt, este afișată lista componentelor construite și a dependențelor lipsă. În general, instalarea unui pachet sau actualizarea node.js rezolvă problema

    • Note that if Qt is generated without Chromium, Chromium must be removed from the package in the cache of the build machines to regenerate a new one (/var/cache/jami)

To remove a distribution:

  • If a distribution is EOL OR if there are 2 more recent LTS, the distribution can be removed (e.g., Ubuntu 20, 22, 24—remove Ubuntu 20) by removing related files and checks.

Notă

The next big changes required are:

  • Use CMake instead of autotools for jami-daemon.

  • Use Ubuntu Core 22 (UC22) instead of core20 in snap.

  • Flatpak/AppImage support? This may simplify custom RPM/Debian packaging.

  • Only generate one unified Debian installation file and one unified RPM installation file.

  • Use Jenkinsfile to generate packages for GNU/Linux, macOS, and Windows at the same time if possible.

For internal information (such as how to publish to stores, cf. internal wiki).

Contribuirea la această documentație

Contribuțiile la aceste documente sînt întotdeauna binevenite și apreciate, de la mici corecții pînă la capitole complet noi.

This page will walk through the steps to create a new page or submit a correction. The patch review process is the same as for any other Jami project, so every command will not be explained.

Notă

By contributing to this documentation, you agree to make your contributions available under the fdl, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

You are also promising that you are the author of your changes, or that you copied them from a work in the public domain or a work released under a free license that is compatible with the fdl. DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION.

Vezi și

If you want to help to translate this page, you can join the project and start translating this page on https://explore.transifex.com/savoirfairelinux/.

Dependențe

Git is required to be installed and configured to use your SSH keypair and an account on the Jami Gerrit, where you would send your patches for review. If you need help with this, see the beginning of our patch submission guide (TODO).

To preview changes locally in a web browser, the following are required to be installed:

$ pip install --upgrade sphinx sphinx_rtd_theme myst_parser

To use the auto-build and the auto-refresh feature, also install sphinx-autobuild.

$ pip install --upgrade sphinx-autobuild

Clonarea depozitului

Clonează depozitul și configurează astfel opțiunile de trimitere:

$ git clone "ssh://USERNAME@review.jami.net:29420/jami-docs.git"
$ cd jami-docs
$ git config remote.origin.push HEAD:refs/for/master

You may want to check out a new branch for each contribution/change before you make any change to the files so that you could easily git pull any future changes from upstream into your main local branch:

$ git checkout -b my-example-change

Modificarea unei pagini

Pages are written in Markdown. Click „View page source” at the top of any page to open the raw source of the page and see how it was written.

Go ahead and make your changes to the .md files.

Previzualizarea lucrării tale

De la baza depozitului, execută:

$ make clean && make html

You should now be able to view the documentation in your web browser. The homepage is at _build/html/index.html.

Atenționare

This documentation does not currently build with the latest version of Sphinx. Please see this issue on GitLab for a workaround and updates regarding this problem.

Pentru a crea automat documentația și a reactualiza navigatorul web ori de cîte ori salvezi modificări, execută:

$ make clean && make watch

Keep this running in the background, then navigate to http://127.0.0.1:8000 (not the local .html file).

Salvarea lucrării tale

$ git add source/file/you/edited.md
$ git commit

Refer to the commit message guidelines for how to write a good commit message.

Trimiterea unei modificări

The first time you try to push your changes, Gerrit will complain that you don’t have a Change-Id in your commit, and provide an scp command to install the commit hook. After running the command, you should be able to recommit and push your change:

$ git commit --amend --no-edit
$ git push

Modificarea lucrării tale

A reviewer may ask you to make changes to your patch before merging it. This is no problem! Simply make the changes, git add them, and run git commit --amend to modify the patch.

Notă

The --amend switch, which is required to tell Git to amend/tweak the existing newest commit rather than making a new commit. This is the workflow for updating a proposed change when using Gerrit.

Adăugarea unei pagini

If you decide to add a whole new page to the documentation, you must also add it to the toctree directive of that chapter.

For instance, if you added a new page called hosting-jams-on-aws-guide.md to the Jami user manual in the user folder, you should add it in the toctree directive of user/index.md, without the file extension:

```{toctree}
:maxdepth: 1

bug-report-guide
hosting-jams-on-aws-guide
```