Skip to content
Fher edited this page Mar 6, 2025 · 15 revisions

Contingut original de la wiki amb instruccions i descripció de les comandes: https://github.com/pcottle/learnGitBranching/wiki

Preparar un examen

Els nivells del simulador es configuren fent servir un fitxer JSON, es recomana generar-los des del mateix simulador:

build level
<preparar inici>
define start
<preparar el final>
define goal
define name 
edit dialog
finish
  1. Un cop exportat el fitxer JSON, modificar l'idioma de en_US per es_ES.
  2. Preparar el fitxer del codi font, afegint el JSON generat al fitxer javascript. Exemple:
exports.level = {
  "goalTreeString": "%7B%22branches%22%3A%7B%22main%22%3A [...]",
  "solutionCommand": "git commit;git commit; [...]",
  "startTree": "{\"branches\":{\"main\":{\"target\": [...]",
  "name": {
    "es_ES": "2024-2025 Grup"
  },
  "hint": {
    "es_ES": ""
  }
};

Important: el fitxer JSON que defineix el nivell conté la solució al mateix. Per a evitar que els alumnes puguin preparar-se la solució a l'examen abans de la data establerta:
3. Cal ofuscar el codi font, es recomana la següent eina lliure i gratuïta: https://obfuscator.io/
3.1. Cal modificar només aquests paràmetres de l'ofuscador:
image

3.2. Copiar el codi fon java a ofuscar, substituint el contingut d'algun examen ja existent dins la carpeta src\levels\exams dins el servidor directament. NO PUJAR EL CODI D'UN EXAMEN AL REPOSITORI.
4. Actualitzar el servidor de producció (yarn gulp fastBuild).

NOTA: resulta senzill desofuscar el codi generat (https://obf-io.deobfuscate.io/) i obtenir així la solució a l'exercici, però com que aquest repo és un fork de l'original, GitHub no permet marcar-lo com a privat. La idea és que el codi estigui obfuscat durant l'examen perquè no puguin obtenir la solució fent servir l'inspector d'objectes del navegador, tenint en compte que haurien de tenir l'accés a internet capat per a evitar l'ús d'eines de desofuscació. És per aquest motiu que es demana modificar directament el codi al servidor i no pujar-lo al repositori (el servidor ja té configurat git per a ignorar els canvis que es facin a la carpeta src\levels\exams).

Finalment, compartir l'URL amb els alumnes fent servir el codi de l'examen (el codi sempre és exam_N_, on N és el codi numèric del nivell que assigna automàticament el simulador): http://git-sim/?locale=es_ES&level=exams1.

Desenvolupament

Desplegament dins un contenidor LXC / Incus

Es faran servir d'exemples comandes amb incus, però es pot fer servir lxc indistintament.

A la màquina host

incus launch images:ubuntu/24.04 git-sim
incus exec git-sim -- /bin/bash

Al contenidor

apt install git nodejs npm apache2 nano openssh-server -y
npm install -g yarn gulp-cli
cd /var/www
rm -rf html
git clone https://github.com/ElPuig/learnGitBranching.git html
cd html

echo ".yarn" >> .git/info/exclude
echo "src/levels/exams" >> .git/info/exclude
git update-index --assume-unchanged src/levels/exams/*

yarn install
npx --yes browserslist@latest --update-db
yarn gulp fastBuild

A partir d'aquest punt, obrint un navegador dins l'amfitrió i apuntant a l'adreça IP del contenidor, s'hauria de poder accedir al simulador.

Activar l'accés al contenidor via SSH per a desenvolupar amb Visual Studio Code

A la màquina host

incus exec git-sim -- /bin/bash

Al contenidor

sudo passwd root
sudo nano /etc/ssh/sshd_config

Modificar la línia PermitRootLogin perquè quedi com PermitRootLogin yes.

sudo systemctl restart ssh

Opcional: a la màquina host

Si es vol poder accedir via hostname en comptes de fer servir la IP del contenidor:

  1. Comprovar la IP del contenidor amb la comanda incus list.
  2. Editar el fitxer de hosts amb la comanda nano /etc/hosts.
  3. Afegir una línina del tipus <ip_contenidor> <hostname>. Per exemple: 10.96.236.197 git-sim.
  4. Guardar el fitxer.

Opcional: a la màquina host

Si es vol que es pugui accedir al contenidor via SSH sense que demani password.

  1. Generar les claus, només si no s'ha fet mai: ssh-keygen -t rsa.
  2. Copiar la clau pública al contenidor: ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@git-sim.

Com s'ha creat una nova pestanya per als exàmens

Perquè aparegui una pestanya "exàmens" s'ha fet el següent:

  1. src/js/intl: s'ha afegit una entrada per a traduir el nom de la pestanya (exams-levels-tab).
  2. src/js/views: s'ha afegit una nova entrada a l'array tabs dins el mètode initialize per als examens (exams).
  3. src/levels: s'ha afegit un nou atribut exams a la variable exports.levelSequences.
  4. src/levels/exams: s'ha creat la nova carpeta i s'han afegit nous nivells a dins.