Differences between revisions 78 and 89 (spanning 11 versions)
Revision 78 as of 2016-09-07 14:43:23
Size: 6519
Editor: chapoton
Comment:
Revision 89 as of 2017-02-02 17:24:53
Size: 0
Editor: mrennekamp
Comment: move to [[buildbot]]
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
{{{
┌─┬──────┐
│░│ ⊙ ʘ │ SageMath patchbot
│░│ │
│░│ ──── │
╘═╧══════╛
}}}
== Installing the patchbot ==

It is safer to run the patchbot in an unused sage install.

||<style="width: 99%; text-align: center;background-color: #FFCCCC;">WARNING: Install mode has changed a lot with patchbot ≥ 2.6.0||

These are the new (EXPERIMENTAL) instructions.

||<#FFFF66>① Install the patchbot using '''pip install --user git+https://github.com/sagemath/[email protected]'''||

Dependencies: shell commands '''git'''; '''tar'''; '''wget'''

||<#98FF98> Please register [[buildbot/owners|here]] if you run a patchbot. It is required to know whom to contact.||

You can instead use the --owner option.


== Running the patchbot ==

This will only work (maybe) after trac ticket #20736 (https://trac.sagemath.org/ticket/20736). So you need to be on a branch of this ticket.

||<#FFFF66>② Run the patchbot using '''sage -patchbot'''||

or ''alternatively'' (working right now)

||<#FFFF66>② Run the patchbot using '''python -m sage_patchbot.patchbot --sage-root=XXXX'''||

It will run forever, as long as it finds a ticket to work on. Tickets are only considered if their authors are trusted.

It may help to run sage once yourself before launching the patchbot.

You can let the patchbot choose the tickets it will run on.

You can run a specific ticket by using '''sage -patchbot --ticket=N''' where N is a ticket number such as 12345.

Several other options are available, see '''sage -patchbot --help'''

'''--skip-base''' will skip the check that the base sage installation is sane.

'''--plugin-only''' will only build (sage and the doc) and run the plugins but not the tests (much quicker but less useful).

'''--safe-only''' will only test branches that only change files inside the directory "src/sage" (this is the case by default).

== Configuration ==

By default, the patchbot should run without needing to tune its configuration. You can use a specific configuration file in the json format and run the patchbot with
{{{
sage -patchbot --config=fullpath/config_file.json
}}}
The json format mostly looks like a python dictionary. Here is an example of a valid configuration file
{{{
    {"bonus": {"niceguy": 200, "needs_work": -20},
     "use_ccache": false,
     "safe_only": true,
     "skip_base": true,
     "time_of_day": "22-7",
     "parallelism": 8
    }
}}}
Note that the booleans must be written with no capital first letter.

The config will be read again between every run, hence it allows live configuration of the patchbot.

The list of configurable entities are:

|| option || type || default || description ||
|| ''time_of_day'' || string || "0-0" || (example "0-0" or "22-7") an interval of time during which the patchbot is active ||
|| ''bonus'' || dictionary || ''see below'' || some bonus to influence the order in which tickets are tested (see below) ||
|| ''extra_trusted_authors'' || list || empty || a list of logins or full names who will be considered as trusted ||
|| ''safe_only'' || boolean || true || whether to only test "safe" tickets modifying only src/sage or src/doc ||
|| ''skip_base'' || boolean || false || whether to run testlong on the base before testing tickets ||
|| ''parallelism'' || integer || 3 || the number of threads to execute when compiling or testing ||
|| ''idle'' || integer || 300 || seconds to wait when network is not working or there are no tickets available ||
|| ''timeout'' || integer || 10800 || ||
|| ''base_branch'' || string || develop || the name of the git branch to synchronized with the develop branch on trac ||
|| ''plugins'' || list of strings || ''see below'' || the plugins to use ||

=== bonus ===

There are two kinds of bonus, the one related to tickets:

 * ''logins'' (counted x2 if author and x1 if participant)
 * ''component'' (e.g. "linear algebra", "combinatorics", ...)
 * ''status'' (e.g. "needs_review", "positive_review", ...)
 * ''priority'' (e.g "blocker", "critical", ...)

and the one related to other bot reports:

 * ''behind'': weight the number of commits behind master
          (and count for -1 if the commit is not locally available)
 * ''applies'': whether previous bots succeeded when merging the branch with the current beta
 * ''unique'' : give less chance for already seen tickets

The defaults are
{{{
 bonus = {
     "blocker" : 100,
     "critical" : 60,
     "major" : 10,
     "minor" : 0,
     "needs_review" : 1000,
     "positive_review": 500,
     "needs_info" : 0,
     "needs_work" : 0
     "unique" : 40,
     "applies" : 20,
     "behind" : 1
    }
}}}
But you could add
{{{
 bonus = {
     "vbraun": 10,
     "inconito": -5,
     "linear programming": 200,
     "finance": -200
     "14382": 100,
     "15777": 100
     }
}}}

== Looking at patchbot activities ==

Remotely, you can have a look at the last tickets tested by patchbots here:

    http://patchbot.sagemath.org/ticket/0/

On your machine, the patchbot writes a summary of its activities in $SAGE_ROOT/logs/patchbot/history.txt

== using an ipython session ==

You can try the patchbot inside a ipython session, as follows.

First, in the sage directory, create a branch "patchbot/base" by
{{{
git checkout develop -b patchbot/base
}}}
then
{{{
cd sage-patchbot/
}}}
launch ipython and (for patchbot version ≥ 2.6.2)
{{{
from sage_patchbot.patchbot import Patchbot

opt = {'sage_root': /home/platon/sage/', 'owner': 'Sophocle'}

P = Patchbot(opt)

P.test_a_ticket(14974)
}}}

The argument dictionary must contain at least (patchbot version ≥ 2.6.2):
{{{
{'sage_root': path to the sage local repository}
}}}