Open gpascualg opened 8 years ago
Bones noticies! Ja tenim Travis funcionant. Faig una explcicació de nou de com funciona i que avalua:
Travis es una eina per comprobar la continuous integration d'un projecte, és a dir que els nous canvis no trenquin el funcionament actual del projecte. Això ho fa de forma 100% automàtica i transparent a l'usuari quan aquest fa un commit.
Que el joc executi sense problemes: s'executa el joc durant 15 segons. Sense problemes vol dir que no hi hagi cap excepció. Es fa de dues formes diferents:
i. Jugant com a MEN ii. Jugant com a ELVES
S'executen tests unitaris. Per ara són els següents:
i. Cap entitat pot acabar després dels 15 segons amb una coordenada Y negativa ii. El nombre d'entitats del player al final han de ser 2 (STRONHOLD + HERO)
Per ara el player no realitza cap acció, es manté inmòbil, pero la idea es simular clicks, arrossegaments, selecció i multiselecció en un punt no molt llunyà.
S'aniran afegint més tests unitaris, com ara proves de colisions, proves d'animators, proves de confidència de la IA, proves de gestió de recursos, proves d'estrés...
En primer lloc, no s'ha de confondre Travis amb una eina per mirar si el nostre codi/models funcionen o no. Això s'ha de fer abans de fer el commit, de forma local i quant més depurat millor.
Travis serveix per detectar errors que passin per alt durant aquest test en local i, sobretot, per comprobar que després d'una integració tot segueix funcionant com abans (ie. Test unitaris, execució).
A més ha d'ajudar a realitzar integracions més netes, es podrà saber amb un cop d'ull si una branca passa els tests de Travis i per tant si és integrable o no. Com també manté un històric de totes les compilacions anterior, facilita trobar bugs mirant quin és l'últim commit que passa els tests.
A part de l'evident manca de tests, se n'haurien de fer més, ara mateix el temps de compilació i testeig dura uns 30 minuts (5 per descarregar i instalar Unity 5.1, 25 per compilar, 1 per testejar).
Que tardi 30 minuts és quelcom temporal i és degut a la gran quantitat de textures i materials i, sobretot, a que no es guardi d'un compilat a l'altre. Ho solucionaré en breus, fent servir un servidor a mode de cache pels arxius aquests de compilat.
Travis limita les compilacions concurrents en funció de la càrrega global que té en aquell moment. Per tant, si en el lapse de 30 mins que triga en compilar actualment algú fa un commit, aquest commit quedarà en una cua i s'executarà tan pont punt Travis consideri que pot.
Si feu un commit per error, o en feu un altre després, per favor aneu a Travis (link abaix) i canceleu la compilació del commit antic! Així evitem fer cues inacables de commits que realment no volem.
devel
, perquè ja té el merge de la branca devel-travis_ci
. Allí trobareu una versió estable de la integració amb Travis. Probablement un git rebase devel
estant a la vostre branca serà més que suficient.devel-travis_ci
. Aquí és on continuaré treballant amb la integració de Travis, afegint tests unitaris i d'altres. És possible que en algún moment aquesta branca no passi els tests, per exemple perquè afegeixi algún test unitari que no passi correctament. Per això, recomano la primera alternativa.UnitTests
Realment és molt sencill, tot i que vull fer uns canvis i per això de moment ho deixo en blanc i ho explicaré més tard en un altre comentari.
Us animo a que us feu tests unitaris propis, així si mai hi ha una integració podreu saber si el vostre codi/model segueix fent el que hauria de fer ;)
Si algú vol evitar que un commit passi per Travis (a risc seu si després no se'n fa un altre per saber si compila o no) pot afegir [ci skip]
en el missatge del commit.
Pot ser convenient en cas de saber que farem més d'un commit seguit i solament volem que es compili l'últim d'aquests.
Bueno, per ara està bastant estable i s'ha millorat força el temps de compilació, que ronda els 10-15 minuts. Encara es podria forçar més i fer-l'ho més ràpid, però això si de cas és algo que podem comentar el pròxim dimecres.
Ara són uns 8 minuts de descarregar Unity i les carpetes de cache (que es podria reduir a 3-5, però ja en un futur) i instalar Unity. Més 5-10 de compilar i executar.
Dit això, els UnitTest
també han canviat un pel i ara és més fàcil fer-los, així que tot animant-vos a que feu els vostres propis tests unitaris, explico que s'ha de fer:
UnitTest
sPer començar, tots els tests unitaris aniran en la carpeta Assets/Scripts/Utils/UnitTests
. Podeu fer servir el TestEntityYCoord.cs
com a exemple.
Bàsicament, un test unitaria és simplement una classe que hereda de la classe abstracte UnitTest
i que es situa en el namespace Utils.UnitTests
.
La classe, que pot tenir qualsevol nom, ha de sobrecarregar:
name
, que serveix per depurar simplement. Hauria de ser descriptiu i indicar de que va el test.run
, que conté la lògica del UnitTest
.En cas de trobar un error o excepció, es pot cridar al mètode LogError
per fer-l'ho constar. Aquest, permet passar dos paràmetres, titol i descripció de l'error, en aquest ordre.
Alternativament, també seria vàlid llençar una excepció, que seria automàticament recollida pel sistema de testeig.
I ja està, no cal fer res més. La classe ja es detectarà automàticament sense necessitat de la nostra interacció.
Me n'oblidava, el cache no s'actualitza sempre! Ara mateix està en el commit, aproximadament, 0dc2f7fc01747856edd2bae607e4deb8e8f10ead. Per tant, el temps de compilació es de uns 10-15 minuts en cas de que no es mofiqui cap asset (assets sense incloure scripts, referent a textures i materials principalment) respecte aquest commit.
Si entre aquest commit i el que compila Travis hi ha algun asset modificat, Unity l'ha de reimportar, incrementant pertant lleugerament (de 20ms a 40000ms) el temps per a cada modificat.
Bàsicament, el servidor que fa servir de caché és un meu propi, i actualitzar a cada commit el caché seria massa càrrega. Per tant, solament s'actualitza quan el commit es fa específic a la branca devel-travis_cache
. Si algú creu que realment s'ha d'actualitzar el caché, per exemple perquè la compilació està un altre cop a l'ordre de 30+ minuts, que faci un merge de la seva branca a devel-travis_cache
.
Ara bé, demano comprensió i que no s'abusi d'això, que sinó se'm colapsa i no puc accedir-hi. D'altra banda, tranquils que el bandwidth és ilimitat, tant de pujada com de baixada. De quan en quan aniré fent jo merges perquè s'actualitzi de totes formes ;)
I ara sí, això es tot crec :sweat_smile:
UnitTest
sDe moment encara no està pujat, i ja que en breus farem la integració a master, amb la intenció de no trencar-ho tot a l'últim moment, faré el merge el dimecres passada la demo.
Canvis importants: Els tests poden correr en qualsevol fase del joc (menu principal, menu de races, pre-game, in-game, post-game, killing). Per tal de fer això s'ha de sobrecarregar la propietat RunAt
.
S'afegeixen nous tests:
Les classes marcades amb * no són noves, solament canvia la fase
A més ara els tests es poden mantenir executats en el temps (no ho han de fer tot en un sol Run
). La classe TestRightClickMoveUnit
n'és un bon exemple.
La simulació de clicks es fa a través de la classe UserInput
. Per evitar fer public
mètodes que no ho haurien de ser, s'abusa de Reflection
. Pels tests crec que és acceptable, però en general són males costums, perjudiquen la performance greument.
Això es tot!
Trec la referència del milestone, ja que Travis ja funciona, però no tanco la issue per futures referències a nous UnitTest
s.
Travis ara avisa quan un commit no compila mitjançant un comentari a la issue: https://github.com/eloipuertas/ES2015A/issues/193
A més anomena a qui a fet el commit (si té ben configurat el user.name quan fa el commit) i per tant rep un mail :+1:
Perfecte! Es molt practic aixo!
Bones a tots,
Amb la intenció d'ajudar una mica en les integracions, hem cregut bona idea ajudar-nos del servei Travis CI. De forma totalment transparent a l'usuari (nosaltres) a cada
commit
que es puja a GitHub es fa, automàticament, unbuild
del projecte perWindows
,Linux
iOSX
.Solament si tots 3 builds són satisfactoris,
Travis
dirà que el projecte passa la compilació. Això no afecta al commit en sí, aquest hi serà sí o sí a GitHub.Limitiacions
push
de forma local en Unity.Objectius
Principalment facilitar les integracions i que no s'allarguin més del compte. Si una branca/commit no compila a la deadline d'integració, es pot evitar introduir mils de problemes en la integració.
Això serà molt més útil un cop Travis sigui capaç de comprobar que l'execució sigui correcta.
Conclusió
Això està pendent de que @eloipuertas ho activi en el seu Travis. En principi un cop activat començarà a funcionar per cada commit, independentment de la branca.
Si no funcionés, feu un toc per aquí i ho reviso.
Qualsevol pregunta o suggerència serà benvinguda!
Acceptance Criteria
Estimated time effort: 4h