Commit Graph

323 Commits

Author SHA1 Message Date
Christophe Monniez
4b0eac3b21 [FIX] runbot: compute repository url 2018-03-12 17:43:24 +01:00
Christophe Monniez
889df07bf6 [FIX] runbot: remove bad indentation 2018-03-12 16:59:35 +01:00
Christophe Monniez
bd715451a9 [FIX] runbot: allow webhooks to work 2018-03-12 15:39:44 +01:00
Christophe Monniez
21c31b4c3c [REF] runbot, runbot_cla: upgrade to Odoo 11.0
The previous code of runbot and runbot_cla was made for Odoo API version
8.0. This commit makes it work with Odoo API 11.0 and Python 3.

Also, the present refactoring splits the code into multiple files to
make it easier to read (I hope).

The main change due to Python 3 is the job locking mechanism:
Since PEP-446 file descriptors are non-inheritable by default.
A new method (os.set_inheritable) was introduced to explicitely make
fd inheritable. Also, the close_fds parameter of the subprocess.Popen
method is now True by default.

Finally, PEP-3151 changed the exception raised by fcntl.flock from IOError to OSError
(and IOError became an alias of OSError).

As a consequence of all that, the runbot locking mechanism to check if a
job is finished was not working in python3.
2018-03-12 14:36:33 +01:00
Christophe Simonis
c340e18506 [FIX] runbot: force lowercase build dest (used as dbname prefix) 2018-02-07 16:00:28 +01:00
Christophe Monniez
966e12ee71 [FIX] runbot: add dependency on base_setup
To install properly, Runbot needs to find base.menu_config which is
defined in base_setup res_config_view.
2017-11-20 11:14:54 +01:00
Christophe Simonis
0c3c8a0b75 [FIX] runbot: init method may not exists on parent class 2017-11-14 16:58:56 +01:00
Christophe Simonis
cdf4cd8287 [IMP] runbot: allow to rebuild deathrow builds 2017-09-28 15:06:47 +02:00
Christophe Simonis
c322a10ccc [IMP] runbot: guess future result of testing build 2017-09-21 18:24:44 +02:00
Christophe Simonis
03da1e9339 [IMP] runbot: automatically link logs to build
The linked build is extracted from dbname via a trigger on new row
creation.

This improve rendering of build page.

A migration script is added to link existing logging entries to
corresponding build and remove invalid ones.
Note that this migration script can take a long time.
2017-09-21 17:44:32 +02:00
Christophe Simonis
eb267ffa44 [FIX] runbot: correct redirect url 2017-09-18 13:41:08 +02:00
Christophe Simonis
e265607b3f [FIX] runbot: correct logging in method _ask_kill 2017-09-18 13:35:43 +02:00
Christophe Simonis
54f3cb9488 [FIX] runbot: force integer build ids in routes 2017-09-18 13:27:27 +02:00
Denis Vermylen
fb1e1dfd53 [IMP] runbot: add kill button (+ deathrow state)
Allow logged users to kill builds that are pending or testing.

The kill button solves the following problem:

When you have a community and enterprise branch with pull request.
The enterprise PR gets fetched before the branch by runbot, so it
builds with the community master branch instead of the corresponding
community branch. As the branch shares the same HEAD as the PR,
so no other build is done for the branch.

Previously you had to wait the build to finish building, then rebuild it
from the branch, taking twice the time necessary. Now you'll be able to
kill & rebuild it just after pushing the branch.

Also having a kill button is globally a nice to have feature.
2017-09-18 12:43:02 +02:00
Denis Vermylen
a3d30e9d3c [IMP] runbot: keep search query upon rebuild 2017-09-18 12:43:02 +02:00
Christophe Simonis
ba77916247 [IMP] runbot: index logging entries per build 2017-09-06 11:53:36 +02:00
Christophe Simonis
2ad4274157 [FIX] runbot: respect shebang 2017-09-05 16:43:14 +02:00
Дмитро Катюха
9ad2164d99 runbot: res_config, replace tabs with spaces 2017-08-09 17:32:40 +02:00
Дмитро Катюха
4c5f5105cd runbot: fixed mistake in nginx config templatew 2017-08-09 17:32:40 +02:00
Christophe Simonis
ca8bc51180 [IMP] runbot: more color in build page 2017-07-12 16:30:08 +02:00
Christophe Simonis
81ce2354f6 [FIX] runbot: more verbose logs 2017-07-12 12:26:20 +02:00
Christophe Simonis
26b3820b9e [IMP] runbot: nginx config: specify error log 2017-06-30 12:01:38 +02:00
Christophe Simonis
f22ca0d212 [FIX] runbot: escape server name in nginx config 2017-06-30 12:00:19 +02:00
Christophe Simonis
3339d20520 [FIX] runbot: limit rebuild to runbot users 2017-06-16 14:22:27 +02:00
Ludovic Laffineur lla
301f747634 [ADD] runbot: add coverage link in the build button 2017-06-15 14:44:49 +02:00
Christophe Simonis
447a19882e [FIX] runbot: log who initiate rebuilds 2017-06-15 14:37:32 +02:00
Denis Ledoux
1d69f1e368 [FIX] runbot: more accurate search for duplicates
In a repository with dependencies
e.g. `odoo-dev/enterprise` depending on `odoo-dev/odoo`
consider a build as a duplicate of another if
 - The HEAD is identical (as before)
 - AND the branches used for the depending repositories are the same

e.g.
 - pushing `master-staging-dle` to `odoo-dev/enterprise`,
 - with as HEAD the same HEAD than `master`,
 - but for which a branch `master-staging-dle` exists in `odoo-dev/odoo`
 - a duplicate would be a build having as HEAD the HEAD of master
   AND the `odoo-dev` branch `master-staging-dle`

Before, it would have used the latest build of the `master` branch,
as the HEAD was the same, despite the fact it didn't use the branch
`master-staging-dle` of `odoo-dev/odoo`
2017-05-18 17:07:35 +02:00
Olivier Dony
8dfee8af40 [FIX] runbot: stop forcing git gc --auto during updates
The `git gc --auto` command often fails and requires an explicit
execution of `git gc --prune=all`. When it happens, it crashes the
update, failing the cron execution.

Executing `git gc prune` every time would be very slow and dispruptive
during the cron's critical sections.

As the initial goal was to avoid triggering the automatic GC during the
next update/pull command, we prefer to adopt the global strategy of
disabling the auto GC globally with:

  git config --global gc.auto 0

And to configure a system cron job to periodically GC/prune all
repositories, to get the performance benefit.
Due to locking issues, that cronjob should be scheduled outside peak
build hours.

Example bash script for the system cron:

```
   #!/bin/bash
   set -e
   base_repo_dir='/path/to/runbot/static/repo'

   for repo in $base_repo_dir/*
   do
       if [[ -d $repo ]];then
           git --git-dir="$repo" gc --prune=all
       fi
   done
```
2017-05-16 11:00:01 +02:00
Christophe Simonis
a5b88ff0ab [FIX] runbot: failing to update a repo should not stop others 2017-05-05 11:38:08 +02:00
Olivier Dony
99c200afcb [FIX] runbot: recover from failed job method call
Catch exceptions occurring within job methods, to avoid
stalling the runbot by repeatedly trying to call it -
and crashing every time.

Mark the build as failed immediately and skip it.
2017-05-02 14:32:13 +02:00
Olivier Dony
1d46bf9ff5 [FIX] runbot: stop wasting a cycle for coverage check
Build jobs that return a -2 PID are considered immediately done and the
next job is started without waiting for a cron cycle.
2017-05-02 13:25:42 +02:00
Olivier Dony
63b997a4ed [FIX] runbot: make checkout safer wrt addons layout
Avoid errors/crash when the server/addons directory in the build branch
contains symlinks.

Exhibited by e.g. odoo/odoo#16720
2017-05-02 13:07:02 +02:00
Christophe Simonis
f889f2095c [IMP] runbot: let nginx serve static files 2017-04-27 16:43:48 +02:00
Olivier Dony
d66047230b [FIX] runbot*: make most methods private
Most of the non-CRUD methods of runbot models should be private, as
there is no need to access them via RPC.

WARNING: This change is backwards compatible with existing
installations and existing runbot databases, but will most
likely BREAK all third-party extensions, due to the renamed
methods.

Fortunately the runbot module is not ruled by Odoo's "stable policy" ;-)

Reported by @nilshamerlinck - thanks!
2017-04-27 14:54:39 +02:00
Olivier Dony
e1ecb49f89 [FIX] runbot: use proper manager visibility
The token is not meant to be used by anyone except runbot managers.

Reported by @nilshamerlinck - thanks!
2017-04-27 14:54:39 +02:00
Christophe Simonis
3b1145b4ab [IMP] runbot: ignore pad modules 2017-03-10 11:56:23 +01:00
Christophe Simonis
f242db17b3 [FIX] runbot: only kill builds on same host 2017-03-10 11:51:27 +01:00
Nicolas Seinlet
12691bdbcd Private method for quick connect URL, to allow an easy override 2017-02-21 15:18:20 +01:00
Christophe Simonis
33584cea10 [FIX] runbot: when running via coverage, skip sys.executable in command line 2017-02-09 17:03:39 +01:00
Christophe Simonis
9282b10034 [FIX] runbot: respect repo sequence in dashboard 2017-02-08 13:53:53 +01:00
Christophe Simonis
efd049da1d [FIX] runbot: index repo sequence 2017-02-08 13:30:18 +01:00
Christophe Simonis
0fa8bbe620 [ADD] runbot: add support for running coverage when testing. 2017-01-24 14:14:20 +01:00
Christophe Simonis
e29c25c7dc [IMP] runbot: add sequence field on repo model 2017-01-24 14:06:34 +01:00
Nicolas Seinlet
65e86b564e [IMP] Clean old, unused and not deleted runbot builds databases 2017-01-10 16:42:24 +01:00
Christophe Simonis
b04488f22f [IMP] runbot: handle new binary for 10.0 2016-09-29 14:33:15 +02:00
Olivier Dony
48e652436e [IMP] runbot: support v10-style manifest naming convention 2016-09-02 19:23:02 +02:00
Julien Legros
10c3e87579 [IMP] runbot: optimize new branch detection 2016-09-02 13:05:22 +02:00
Christophe Simonis
a835d1e800 [IMP] runbot: add link to original build for duplicate builds 2016-09-02 13:02:56 +02:00
Christophe Simonis
287c466637 [FIX] runbot: hide bad link to github for messages from runbot itself 2016-09-02 13:02:11 +02:00
Christophe Simonis
b46980ab91 [FIX] runbot: export git tree at current time
When doing a `git archive`, all the files in the tar archive are set to
the commit date. Ignore this date during extraction.

Having the files with dates in future will make some tests about assets
to fail. These tests force the asset regeneration by `touch`ing one
js/css file. If other bundle files are still older that the one we touch,
the asset is not regenerated and the test fail.
2016-09-01 12:36:36 +02:00
Alexandre Fayolle
920c3edcee [FIX] runbot: avoid 404 errors in fast_launch url for odoo >= 9
Closes https://github.com/odoo/odoo-extra/pull/104
2016-07-27 17:49:29 +02:00
Christophe Simonis
97001fbf72 [FIX] runbot: remove useless commit()
This commit() is the root cause of the famous false-positive error
`_check_module_names invalid module names, ignored: False`.

The first step (pull code) is a long one. if a push-hook request
happen during this step, the current transaction wont be able to be
commited (the list of module to test is written on the build). Due to
this early commit(), the build is left in an intermediate state with
the module list unpopulated (=False).
2016-07-26 18:28:24 +02:00
Christophe Simonis
40e502ecd5 [FIX] runbot: track and log prefix match of closest branch 2016-04-27 16:09:04 +02:00
Christophe Simonis
fd8e7f269b [FIX] runbot: check if branch exists when matching 2016-04-04 19:24:02 +02:00
Christophe Simonis
f7b2a40f43 [FIX] runbot: favor sticky branches during matching 2016-02-23 11:48:18 +01:00
Olivier Dony
d9c9642675 [FIX] runbot: workaround for nginx bug leaving orphan worker, blocking port 2016-02-12 15:24:32 +01:00
Christophe Simonis
72bfc504cc [IMP] runbot: hide stopped hosts from dashboard page 2016-02-09 14:48:38 +01:00
Christophe Simonis
f77c52119e [IMP] runbot: log matching closest branches 2016-02-09 14:38:38 +01:00
Christophe Simonis
7e9ddee6ea [IMP] runbot: cleanup builds after 7 days.
By cleaning job only after 7 days, we ensure we keep logs of killed
jobs (or jobs that doesn't even start) for easier debuging.
2016-02-09 14:11:49 +01:00
Jeremy Kersten
5ef0b2ee6d [FIX] runbot: avoid traceback when build_ids was empty (eg: filter by search) or not declared.
equivalent to max(build_ids, default=0) in python 3
2016-01-27 17:29:09 +01:00
Jeremy Kersten
fccd90f755 [IMP] runbot: keep search when we switch of repo from shorcut at top right 2016-01-26 16:59:45 +01:00
Olivier Dony
93dd0f5ee0 [FIX] runbot: do not use remote cursor for dropping local dbs
To find out the list of manually created dbs,
rev. 4d94f45 used the cursor that is connected to the
master `runbot` database, which may reside on a different
cluster/host.

- Add a helper to run commands on the local PG cluster
instead ("postgres" database).
- Modify other commands for local cluster (create/drop db)
to use the same cursor. Rename those methods to _local_*
to better indicate their local effect.
2016-01-18 18:47:17 +01:00
Olivier Dony
be34ac72c9 [FIX] runbot: reduce serialization failures (TransactionRollbackError)
Both the cron and the tests themselves need to write to the builds,
which triggers the update of the `repo_id` field, as it is a stored
related.
2016-01-18 18:09:05 +01:00
Olivier Dony
431a3f6d5b [IMP] runbot: do not display hosts with no recent builds (considered stopped) 2016-01-18 18:09:05 +01:00
Joren Van Onder
fa68c54477 [IMP] runbot: blacklist a couple of POS related modules
- pos_blackbox_be: because it makes the POS unuseable without a blackbox
- pos_cache: because it's too confusing for runbot users, everytime they
             update a product they have to also update the cache, but
             most people don't realise that.
2015-12-10 09:26:59 +01:00
Moises Lopez
7a842e5e45 [FIX] runbot: Fix csrf error in rebuild method
Runbot is intended to be run on a 8.0 instance but if runs on a 9.0, CSRF needs
to be disabled. Will not break on 8.0 code.

Closes #84
2015-10-22 12:20:37 +02:00
moylop260
3b5669bd01 [FIX] runbot: Fix no such file FETCH_HEAD
Closes #80
2015-10-09 14:47:43 +02:00
Olivier Dony
d1cff975be [IMP] runbot: exclude l10n_ modules unless explicit
As of Odoo 9 the first l10n module installed will automatically
install its chart of account on the main company, so installing
the first one (l10n_ae) is surprising/strange.

Branches that want to build l10n_* modules should list
them explicitly in the "modules to install" field (modules).

In addition, having demo data to set the country of the
main company will automatically installe the relevant
l10n module if it exists. This is the default in Odoo 9
with l10n_us.
2015-10-09 14:41:46 +02:00
Olivier Dony
19f6c36156 [IMP] runbot: detect and warn for builds where server branch cannot be properly determined
More useful recently for enterprise builds where an
appropriate server branch is always required
2015-09-23 16:06:35 +02:00
Olivier Dony
42ae78f647 [FIX] runbot: typo, branch is a dict from search_read() 2015-09-11 12:24:21 +02:00
Odoo Online
d40460d9f1 [IMP] runbot: ir.cron frequency from 0.016 Hz to 0.1 Hz
Monkey patch ir.cron to increase frequency to 0.1 Hz.

In a setup with 6 workers every worker should have the lock every minute.
2015-09-09 01:16:37 +02:00
Odoo Online
44771039ce [FIX] runbot: repo hook 2015-09-09 00:35:45 +02:00
Antony Lesuisse
b9c2a1f9e1 [IMP] runbot add github hook support 2015-09-08 17:04:30 +02:00
Olivier Dony
544bbe5a10 [FIX] runbot: typo s/local/repo 2015-08-24 10:40:13 +02:00
Christophe Simonis
abce301ed1 [IMP] runbot: search of closest branch
When searching the closest branch, search through all duplicated
repositories.
2015-08-21 14:48:21 +02:00
Christophe Simonis
bab6221882 [IMP] runbot: drop all db with build prefix on cleanup 2015-08-19 19:36:49 +02:00
Christophe Simonis
b15a66dd16 [FIX] runbot: keep logs for killed builds 2015-08-19 19:16:36 +02:00
Christophe Simonis
b8d06e7fa0 [IMP] runbot: add links to sticky-dashboard 2015-08-05 16:57:50 +02:00
Christophe Simonis
238d6c6fab [IMP] runbot: move job_timeout field to branch 2015-08-05 16:26:50 +02:00
Christophe Simonis
8b5e0263bd [IMP] runbot: better sticky-dashboard view 2015-08-04 18:23:50 +02:00
Christophe Simonis
aeada94df9 [ADD] runbot: sticky-dashboard page 2015-08-04 15:23:09 +02:00
Christophe Simonis
9ebc8d6447 [IMP] runbot: timeout per repo 2015-08-03 18:07:19 +02:00
Christophe Simonis
231e456e3b [FIX] runbot: ensure every arguments is a string when spawning processes 2015-07-31 16:48:40 +02:00
Christophe Simonis
edf5712fb3 [FIX] runbot: better handling of github API errors 2015-07-31 16:47:12 +02:00
Christophe Simonis
491151d251 [FIX] runbot: install explictly set modules, even if they are blacklisted 2015-07-24 19:18:08 +02:00
Christophe Simonis
2e01744b0d [IMP] runbot: better search of closest branch.
Can now search for matching PR
2015-07-15 16:57:56 +02:00
Olivier Dony
2e2c7f0c21 [IMP] runbot: ignore missing modules in list of modules to install
This allows configuring an explicit list of modules to install
on a repository without having orange builds (with warnings)
whenever a branch does not have one of these modules for some
reason.
2015-07-14 14:50:37 +02:00
Christophe Simonis
6486cf49be [FIX] runbot: better search of closest_branch for saas branches 2015-07-13 17:20:01 +02:00
Olivier Dony
df1d0f81b3 [FIX] runbot: proper join of modules from {build,branch,repo} 2015-07-13 10:20:20 +02:00
Christophe Simonis
97ad5e7746 [FIX] runbot: '' is not a valid module name 2015-07-13 10:15:27 +02:00
Olivier Dony
0bea276f48 [IMP] runbot: support finer-grained selection of modules to test 2015-07-10 20:01:32 +02:00
Olivier Dony
d12b1914d0 [FIX] runbot: /runbot/badge route should work also for private repositories
This lets us use them in README files
on GitHub, which uses an image proxy
that does not have access to private
repositories.

This is an acceptable disclosure of
information about private repos.
2015-07-10 20:00:21 +02:00
Christophe Simonis
ed3d82be51 [FIX] runbot: do not install hw_* and theme_* modules 2015-06-18 18:24:35 +02:00
ged-odoo
c3e2a6f72d [FIX] runbot: overwrite duplicate addons
The web addon is supposed to be duplicate, and needs to be installed
(in the enterprise version) over the community edition.

A better fix would be to keep the folder and use the --addons-path key
to start the server with the correct addon, but this is an urgent
change.

closes #69
2015-06-17 13:02:43 +02:00
Nicolas Seinlet
d7edc2b0d5 [IMP] runbot: deprecate unused fields
testing and running in repository are not used anymore since they are now
two ir.config_parameter:
- runbot.workers
- runbot.running_max
2015-05-21 10:50:58 +02:00
Martin Trigaux
b98568709f [FIX] runbot: find build to be skipped
search should be made on runbot.build and not runbot.repo object
2015-05-05 13:06:02 +02:00
Christophe Simonis
ff404a4334 [FIX] runbot: ensure logs dir exists 2015-04-30 18:19:54 +02:00
Martin Trigaux
4fb0b2c735 [IMP] runbot: better scheduler
pushing new commits on your branch should not make you loose rank in schuler
build order is based on sequence which is the id of the build, take lowest
2015-04-28 15:21:21 +02:00
Sandy
78d5cad296 [FIX] runbot: don't link to logs if build was skipped
When a build is skipped, `build.host` is `False`.
The proposed link is then just `http://rubot/static/build/...` which is invalid.
As there is no logs anyway, hide the buttons.
2015-04-28 13:43:21 +02:00
Sandy Carter
15870dcc7e [FIX] runbot: remove trailing '.git' in repo base
The base field is used to compose URL (e.g. "https://%s/pulls" % repo.base).
The URL given by github can contains trailing '.git' so this should be removed.
2015-04-28 13:28:22 +02:00