Differences between revisions 1 and 88 (spanning 87 versions)
Revision 1 as of 2013-10-20 13:45:24
Size: 1471
Editor: chapoton
Comment: try to explain how one can use the patchbot
Revision 88 as of 2016-11-18 07:23:06
Size: 6439
Editor: chapoton
Comment: python3 ok
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
There are (at least) two ways to run your own private patchbot. {{{
┌─┬──────┐
│░│ ⊙ ʘ │ SageMath patchbot
│░│ │
│░│ ──── │
╘═╧══════╛
}}}
== Installing the patchbot ==
Line 3: Line 10:
In any case, it is better to have disk space available. It is safer to run the patchbot in an unused sage install.
Line 5: Line 12:
== Run on all tickets == ||<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 instructions.

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

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 ==


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

The patchbot should now run just the same with '''pip3''' and '''python3''' instead. Please report any problem.

The '''--sage-root''' parameter is required.

Your patchbot will run forever, as long as it finds a ticket to work on. Tickets are only considered if their authors are trusted.
Line 9: Line 38:
# Install the patchbot using "sage -i patchbot" You can run a specific ticket by using '''--ticket=N''' where N is a ticket number such as 12345.
Line 11: Line 40:
# Run the patchbot using "sage -patchbot" Several other options are available, see '''--help'''
Line 13: Line 42:
I will run forever, as long as it finds a ticket to work on. Tickets are only considered if their authors are trusted. '''--skip-base''' will skip the check that the base sage installation is sane.
Line 15: Line 44:
== Run on chosen tickets == '''--plugin-only''' will only build (sage and the doc) and run the plugins but not the tests (much quicker but less useful).
Line 17: Line 46:
Here is a proposal on how to use the patchbot only on tickets you want to work on. '''--safe-only''' will only test branches that only change files inside the directory "src/sage" (this is the case by default).
Line 19: Line 48:
Warning: this is for a mercurial setting, not for the new git setting. == Configuration ==
Line 21: Line 50:
# install the latest sage development release (download from http://www.sagemath.org/download-latest.html and make) 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 the option
{{{
--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.
Line 23: Line 66:
# install the latest patchbot (clone from http://github.com/robertwb/sage-patchbot) The config will be read again between every run, hence it allows live configuration of the patchbot.
Line 25: Line 68:
# in a terminal, inside your_sage_home_dir, "./sage -clone 0" The list of configurable entities are:
Line 27: Line 70:
# in a terminal: "cd sage-patchbot/src" then run "ipython" || 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 ||
|| ''sage_root'' || string || || the path to the directory containing the sage installation ||
|| ''plugins'' || list of strings || ''see below'' || the plugins to use ||
Line 29: Line 83:
# in ipython, "from patchbot import Patchbot", then "P = Patchbot('your_sage_home_dir',"http://patchbot.sagemath.org/",None,plugin_only=True)" or "P = Patchbot('your_sage_home_dir',"http://patchbot.sagemath.org/",None)" === bonus ===
Line 31: Line 85:
The first one will only run the plugins (much faster), the second one will run all the tests (much slower). There are two kinds of bonus, the one related to tickets:
Line 33: Line 87:
# Then choose your favorite ticket number N and "P.test_a_ticket(N)"  * ''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", ...)
Line 35: Line 92:
It is important that the sage sources in sage-main are in their initial state when running the patchbot. 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}
}}}

┌─┬──────┐
│░│ ⊙  ʘ │ SageMath patchbot
│░│      │
│░│ ──── │
╘═╧══════╛

Installing the patchbot

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

WARNING: Install mode has changed a lot with patchbot ≥ 2.6.0

These are the new instructions.

① Install the patchbot using pip install --user git+https://github.com/sagemath/sage-patchbot.git

Dependencies: shell commands git; tar; wget

Please register here if you run a patchbot. It is required to know whom to contact.

You can instead use the --owner option.

Running the patchbot

② Run the patchbot using python -m sage_patchbot.patchbot --sage-root=XXXX

The patchbot should now run just the same with pip3 and python3 instead. Please report any problem.

The --sage-root parameter is required.

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

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

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

Several other options are available, see --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 the option

--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

sage_root

string

the path to the directory containing the sage installation

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:

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}