Conception - Gestionnaire de packages

Voici le détail de la Conception du Projet 2017 : Gestionnaire de package.

Page d'accueil du projet

= Équipe =
 * Rémi Gattaz
 * Germain Lecorps (Chef de Projet)
 * Thibaut Nouguier
 * Régis Ramel (Scrum Master)

= Conception =

Schéma de la structure de l'application
Nous avons tout d'abord réalisé une première version du schéma de la structure de l'application. Cette représentation est abstraite, cela nous a permit de définir les principaux composants de l'application.

Nous avons ensuite précisé cette représentation en isolant la partie construction des packages (Builder) et en détaillant les fonctionnalités de chaque composants.

Ensemble des fonctionnalités BackEnd à implémenter
Technologies envisagées : NodeJS (Gestion de CLI, API Rest), MySQL (Base de données/Repo), Shell (Build des packages)
 * Lister les packages présents sur le repository
 * Création d'un package en traitant l'archive (tar, zip, ...) déposée par un utilisateur
 * Ajouter/Supprimer des packages
 * Gérer les accès au repository : (Administrateur)
 * étudiant : une clé par année
 * professeur : sur demande
 * Rendre le repository disponible (permettre son ajout dans sources.list)
 * Détecter les mises à jour de packages automatiquement

API offerte par le contrôleur
Le contrôleur offre une API avec les appels suivants :

Ensemble des fonctionnalités FrontEnd à implémenter

 * Visualisation des packages disponibles
 * Filtrage sur la visualisation des packages (Mots-Clés, Filière, Matière)
 * Connexion utilisateur
 * Dépôt d'une archive pour la création d'un package par un utilisateur authentifié
 * Visualisation des tickets :
 * ticket de création de package
 * ticket de mise à jour d'un package
 * Suppression d'un ticket de création d'un package / ticket de mise à jour d'un package par le créateur ou un administrateur
 * Visualisation des logs pour les build de packages (Administrateur)

Technologies envisagées : HTML5, CSS3, AngularJS

Choix des langages
Pour la gestion du dépôt des demandes de packages, nous avons choisi Javascript avec l'utilisation de micro-services qui vont permettre une gestion de CLI et de l'API. Pour la construction du package Debian, nous avons choisi d'utiliser le langage Shell, car cette construction va consister en une succession de commandes Unix.

Choix des technologies pour le Repository
Plusieurs solutions ont été considérées :
 * Reprepro
 * Aptly
 * mini-dak

Finalement, notre choix s'est porté sur Aptly. Ce choix s'est fait principalement car ce dépôt offre une API permettant de le manipuler.

Pour simplifier la phase de développement, un container docker contenant un repository sera créé. Pour le déploiement, l'utilisation d'un serveur sera toutefois préféré.