=============
Hacking Guake
=============

Contributing
============

First, be sure to use a verion of Python 3 where GTK and GObjects works in your system.
For instance, under Ubuntu 17.04, PyGtk and ``python3-gi`` does not work well if the default
python 3 interpreter is forced to Python 3.6.

+-------------------+----------------------------+-----------------------------+
| Operating System  | Recommended Python version | Notes                       |
+===================+============================+=============================+
| Ubuntu 14.04 LTS  | Python 3.4 (UNTESTED)      |                             |
+-------------------+----------------------------+-----------------------------+
| Ubuntu 16.04 LTS  | Python 3.5 (TESTED)        |                             |
+-------------------+----------------------------+-----------------------------+
| Ubuntu 17.04      | Python 3.5 (TESTED)        |                             |
+-------------------+----------------------------+-----------------------------+
| Ubuntu 17.10      | Python 3.6 (TESTED)        | Quick Open disabled (#1230) |
+-------------------+----------------------------+-----------------------------+

Validate your code
------------------

We are strict on code styling, with pep8 and pylint running automatically in travis in
order to reject badly shaped patches. Please use the following command to validate all
python files:

.. code-block:: bash

    $ make style  # fix the style of python files
    $ make check  # static code analysis
    $ make test   # unit test campaign
    $ make dists  # make distribution packages

Update translation
==================

Update all translation files:

.. code-block:: bash

    $ make update-po

Install the translations files:

.. code-block:: bash

    $ sudo make install-locale

Then use your favorite po editor, such as ``poedit``.

Start Guake with a different locale (locales should be installed):

.. code-block:: bash

    $ LC_ALL=fr_FR.UTF8 make run


Update NEWS
-----------

Update the `NEWS` file using the followng command:

.. code-block:: bash

    make release-note-news


The ``ChangeLog`` files is not maintained but instead automatically generated by PBR when
building the distribution packages.

Same goes for the `ChangeLog` file.

Versionning
-----------

Versioning is automatically done using git tags. When a semver tag is pushed, a new version
is automatically created by PBR.

PBR also has some magic to generate the version automatically from ``sem-ver`` tag found in the
commit message. See the ``Makefile``'s ``tag-pbr`` target.

Travis build
------------

Travis automatically check pull requests are compiling and check for code style.

Status of the master branch: https://travis-ci.org/Guake/guake.png?branch=master

The Travis job also pushes new release of Guake to Pypi.
