====== GitHub Classroom Autograde ======
GitHub Classroom Autograde ens permet testejar els repositoris pujats a una tramesa de GitHub Classroom.
Aquest article és per a professors que vulguin testejar automàticament les trameses dels alumnes.
\\
===== Crear compte i inscriure alumnes =====
Primer de tot t'has de donar d'alta de [[https://education.github.com|Github Education i Github Classroom]].
Després podràs [[https://docs.github.com/en/education/manage-coursework-with-github-classroom/teach-with-github-classroom/manage-classrooms|crear una Github classroom]].
Finalment, pots [[https://docs.github.com/en/education/manage-coursework-with-github-classroom/teach-with-github-classroom/connect-a-learning-management-system-to-github-classroom|connectar els alumnes del teu Moodle amb Github Classroom]].
\\
===== Python Django =====
Per crear un //autograde// per a un projecte amb Django cal crear un test amb:
* Setup command:cp .env.example .env ; sudo -H pip3 install -r requirements.txt ; cp .env.example .env || : ; python3 manage.py migrate
* Run command (diversos exemples):
* Per córrer els tests de Django (Firefox en mode //headless//):MOZ_HEADLESS=1 python3 manage.py test
* Per testejar que el servidor es pot posar en marxa i serveix URLs:$(python3 manage.py runserver & sleep 5 ; killall python3) & sleep 2 ; curl localhost:8000/admin/login/
==== Amb Docker ====
Si hem dockeritzat l'app (veure [[Django docker]]) podem posar directament el ''Run command'' sense ''Setup command'' (''docker'' ja està instal·lat a l'entorn de test de Github Actions):
* Run command:docker-compose up -d --build ; sleep 5 ; curl localhost:8000/polls/
Per tal que l'autograde surti bé cal advertir els alumnes de que res compleixi:
* El projecte Django ha d'estar a l'arrel i no en una subcarpeta (l'arxiu ''manage.py'' ha d'estar a l'arrel).
* Cal posar un arxiu ''.env.example'' amb les variables d'entorn necessàries per poder fer una migració (es recomana utilitzar ''DATABASE_URL=sqlite:%%///%%db.sqlite3'').
* Cal crear algun test a ''test.py'' (veure [[Django test]]).
\\
===== Java Gradle / Android Studio =====
En principi, posar en marxa els tests per a un projecte Java Gradle hauria de ser tan senzill com fer ''gradle test''. Però si es tracta d'un projecte amb Android Studio no ho és tant, ja que necessita les SDK tools de Android i una versió concreta de Gradle.
Aquí tenim una pista de com configurar el //workflow// de Github Actions: https://github.com/android-actions/setup-android
Per posar el test en marxa, cal deixar buida la casella **Setup command**.
I posar aquesta línia de test a la casella **Run command**:
ANDROID_SDK_ROOT=/usr/local/lib/android/sdk ./gradlew test
\\
===== Afegint MySQL als autotest =====
Si volem disposar d'una BD per als tests, caldrà fer diversos ajustos.
Al Marketplace de Github tenim de la possibilitat d'[[https://github.com/marketplace/actions/setup-mysql|activar una BD MySQL en el Github Actions]], i que es podrà emprar als tests.
La solució implica [[https://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization|crear un starter workflow]] personalitzat dins la nostra organització, que activi la MySQL.
Per crear aquest starter workflow caldrà crear un repositori anomenat ''.github'' dins la nostra //Github Organization// i dins la carpeta ''workflow_templates''.
\\
===== Tests amb PHP i MySQL =====
Tens un repositori de plantilla a:
https://github.com/AWS2/php-mysql-world-test-template
Serveix per testejar els exercicis indicats a l'article [[PHP MySQL]].
També podeu aprofondir en la confecció de tests a [[PHP test]].
Per posar-ho en marxa et caldrà:
- Entrar a Github Classroom
- Crear roaster amb alumnes
- Crear nou //Assignment//.
- Utilitzar el repo template indicat més amunt com a plantilla.
- Afegir tests a **Add Autograding Tests**, en concret tenim 4 de preparats (les puntuacions son un exemple):
- Title Test (1 punt)
- Filter Test (3 punts)
- Join Test (2 punts)
- Add City Test (3 punts)
- Per posar a punt cadascun d'ells et caldrà anar aAdd Test -> Run Command
- Test Name: text lliure, per exemple "test del títol".
- Setup Command: sudo .scripts/init.sh
- Run Command: vendor/bin/phpunit .tests/TitleTest.php
- Ull amb el script final ''post-test.sh'': és imprescindible ja que apaga els serveis. Si no ho posem, el contenidor que fa el test de Github Actions no es tancarà mai (acabarà fent //timeout//).
- Puntuació: assignem els punts segons la dificultat del què calgui fer a l'alumne per superar el test (indicat més amunt per a aquest exemple).
- Al finalitzar es crearà un enllaç d'invitació per a l'//Assignment//.
- Testeja el repo tu mateix per veure si tot està bé. Et pots afegir tu mateix al //roster// de la classe i fer l'exercici com un alumne mes, sense enviar-los l'enllaç d'invitació.
- Envia l'enllaç d'invitació als teus alumnes. Aquest els crearà un repo privat a la organització on podran anar pujant el codi a ''src'' i aniran veient els tests que superen i la seva puntuació.
\\
===== Tests amb Cordova i NodeJS =====
Autograding test:
- Setup command:sudo apt update ; sudo apt install -y nodejs ; sudo npm install -g cordova ; cordova platform add browser ; sudo snap remove firefox ; sudo apt install software-properties-common -y ; sudo add-apt-repository -y ppa:mozillateam/ppa ; sudo apt install firefox-esr
- Run command:cd .test ; npm install ; node 01-login-ok.js
\\
===== Tests amb Flask =====
Autograding test:
- Setup command:sudo -H pip3 install -r requirements.txt ; sudo snap remove firefox ; sudo apt install software-properties-common -y ; sudo add-apt-repository -y ppa:mozillateam/ppa ; sudo apt install firefox-esr
- Run command:pytest --driver firefox .test/test_home.py