Deadlock Desktop est un projet dont l'objectif est de permettre à un étudiant de réaliser des exercices deadlock sur son IDE Vscode directement. Pour cela, le répertoire héberge 3 éléments : - **Une extension Vscode** : L'extension est installée sur l'IDE Vscode de l'étudiant et est responsable de l'ouverture de l'exercice dans un [devcontainer](https://code.visualstudio.com/docs/remote/containers). - **Le recorder** : Une application `node` qui va effectuer des sauvegardes du code source de l'étudiant à chaque fois que celui-ci va modifier un fichier ou saisir certaines commandes dans son terminal. - **Une image Docker** : L'image contient des programmes basiques et le recorder qui est lancé au démarrage du conteneur. # Requirements: 1. NodeJS > ^14.X 2. Vscode ou Vscodium 3. Docker ## Setup Afin d'installer les éléments requis pour le développement, vous pouvez lancer le script `./setup.sh`. ## L'image Docker desktop Il s'agit d'une image qui sera utilisé par tous les créateurs d'exercices comme base. Le créateur d'exercice peut ensuite ajouter l'exercice et les dépendances qu'il souhaite pour créer l'image de son exercice. L'image est décrite dans le fichier `Dockerfile.desktop`. ## Recorder : Le recorder permet de sauvegarder régulièrement le code de l'utilisateur. Pour se faire, il écoute les commandes exécutées par l'utilisateur. Si l'une d'entre elles contient `java`, `npm` ou `yarn` alors un snapshot du code est réalisé. Il va également faire un snapshot du code lorsque l'étudiant modifiera les fichiers de l'exercice. ### Build `./build-recorder.sh` ## Construire les plugins Vscode : `./build-plugins.sh` Tous les plugins qui se trouvent dans `deadlock-public` vont être construit en `.vsix` puis placés dans `plugins/` (ex: deadlock-plugins/deadlock-extension). Il est aussi possible d'ajouter directement des plugins `.vsix` en ajoutant le fichier dans `plugins/` Plus d'informations sur l'extension `deadlock-coding` dans ce [README](deadlock-plugins/deadlock-extension/dev/README.md). ## Construire l'image Deadlock Desktop avec le recorder `./build.sh $TAG desktop`