Buildbot
Buildbot è uno strumento di continuous integration che automatizza l’esecuzione dei test di un progetto software, ad ogni modifica del codice sorgente.
L’OpenERP buildbot configurator è inoltre un configuratore di buildbot che integra la OpenERP buildout recipe e permette quindi di testare automaticamente delle istanze di OpenERP configurate con buildout, che possono essere generiche o specifiche dei clienti.
Il vantaggio principale di buildbot rispetto a runbot, consiste nel fatto che buildbot permette di testare una configurazione specifica (intesa come una determinata revisione del codice, eventualmente con patch, più un determinato insieme di moduli) e non necessariamente tutti i moduli disponibili nel codice (come fa runbot).
I test per le localizzazioni
Veniamo al nostro esempio: buildbot per le localizzazioni italiana e svizzera.
All’indirizzo http://buildbot.openerp.agilebg.com è possibile trovare l’istanza buildbot pubblica di AgileBG. Cliccando su Builders vengono elencate tutte le istanze di OpenERP configurate, con lo stato della loro ultima build.
Prendendo ad esempio la build 7 dell’istanza OpenERP 7 + moduli italiani notiamo diverse sezioni.
La sezione ‘Steps and Logfiles’ contiene tutti gli step eseguiti dalla build. A partire dall’aggiornamento del codice fino alla creazione del database per i test e l’esecuzione dei test stessi.
Lo step 13, l’unico rosso, è quello che controlla il risultato dei test. Per capire nel dettaglio il motivo del fallimento bisogna però aprire l’output dello step 12. Qui possiamo trovare tre errori:
ValueError: res_partner_c2c not found when processing /home/buildslave/public/openerp/openerp-italia-postgresql-9_1/build/parts/italian-addons-7.0/l10n_it_fiscalcode/test/fiscalcode.yml.
This Yaml file appears to depend on missing data. This often happens for
tests that belong to a module's test suite and depend on each other.File "/home/buildslave/public/openerp/openerp-italia-postgresql-9_1/build/parts/italian-addons-7.0/account_invoice_sequential_dates/invoice.py", line 44, in action_number
_('Cannot create invoice! Post the invoice with a greater date'))
except_orm: (u'Date Inconsistency', u'Cannot create invoice! Post the invoice with a greater date')File "/home/buildslave/public/openerp/openerp-italia-postgresql-9_1/build/parts/server-7.0/openerp/tools/yaml_import.py", line 501, in _eval_field
raise KeyError("Object '%s' does not contain field '%s'" % (model, field_name))
KeyError: "Object '' does not contain field 'address_contact_id'"
Relativamente ad esempio all’errore 1, ho aperto il bug 1295071. Rilasciando la relativa patch, buildbot si è accorto della modifica e ha lanciato la build 15 (vedi la sezione All Changes). Quello specifico errore non si presenta più, mentre sono ancora presenti gli altri due (relativamente all’errore 3: bug 1295743).
Per ottenere una build verde bisognerà attendere che i problemi rilevati dai test vengano risolti.
Sono però verdi i test dei moduli di localizzazione svizzera: prendiamo ad esempio la build 7 dell’istanza openerp-swiss-7-ocb-postgresql-9.1. Qui possiamo vedere che lo step 13 riporta “No failure detected”.
Configurazioni specifiche
AgileBG utilizza buildout + buildbot per ogni installazione dei propri clienti: mantenere i test “verdi” ci permette di garantire la maggiore stabilità possibile per ogni sistema.
Proprio grazie al fatto che buildbot permette di testare una configurazione specifica, avere l’istanza openerp-italia-7-ocb-postgresql-9.1 rossa non significa che i clienti che usano il branch italiano debbano avere i test rossi: avrebbero i test rossi solo se nella loro configurazione venissero installati i moduli i cui test falliscono.
Update ottobre 2014
Dopo il passaggio a GitHub, i test vengono ora eseguiti automaticamente da travis. Ogni progetto dell’OCA ha il suo ambiente di test su travis. Quindi prendendo ad esempio il progetto italiano, potete trovare lo stato dei branch all’indirizzo https://travis-ci.org/OCA/l10n-italy/branches