diff --git a/README.md b/README.md index f2f46b3..3700dc4 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,17 @@ package_check/package_check.sh APP_ynh fail_download_source=0 port_already_use=1 (XXXX) final_path_already_use=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 ``` ### `;; Nom du test` Nom du scénario de test qui sera effectué. @@ -117,6 +128,21 @@ Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à Le numéro de port doit alors être noté entre parenthèse, il servira au test de port. - `final_path_already_use`: *Non implémenté pour le moment...* +### `;;; Levels` +Permet de choisir comment [chaque niveau](https://forum.yunohost.org/t/redaction-de-regles-pour-passer-une-app-en-officielle/2256/26) est déterminé. +Chaque niveau fixé à *auto* sera déterminé par le script. Il est également possible de fixer le niveau à *1* ou à *0* pour respectivement le valider ou l'invalider. +Il est à noter que les niveaux 4, 8, 9 et 10 ne peuvent être fixés à *auto* car ils ne peuvent être testés par le script et nécessitent une vérification manuelle. Il est toutefois possible de les fixer à *na* pour indiquer que le niveau n'est pas applicable (par exemple pour le niveau 4 quand une app ne propose pas de SSO LDAP). Un niveau *na* sera tout simplement ignoré dans le calcul du niveau final. +- Niveau 1 : L'application s'installe et se désinstalle correctement. -- Peut être vérifié par package_check +- Niveau 2 : L'application s'installe et se désinstalle dans toutes les configurations communes. -- Peut être vérifié par package_check +- Niveau 3 : L'application supporte l'upgrade depuis une ancienne version du package. -- Peut être vérifié par package_check +- Niveau 4 : L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement +- Niveau 5 : Aucune erreur dans package_linter. -- Peut être vérifié par package_check +- Niveau 6 : L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. -- Peut être vérifié par package_check +- Niveau 7 : Aucune erreur dans package check. -- Peut être vérifié par package_check +- Niveau 8 : L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement +- Niveau 9 : L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement +- Niveau 10 : L'application est jugée parfaite. -- Doit être vérifié manuellement + --- Le script `package_check.sh` accepte 6 arguments en plus du package à tester. - `--bash-mode`: Rend le script autonome. Aucune intervention de l'utilisateur ne sera nécessaire. diff --git a/check_process b/check_process index 353c504..421c303 100644 --- a/check_process +++ b/check_process @@ -27,3 +27,14 @@ fail_download_source=0 port_already_use=1 (66) final_path_already_use=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 diff --git a/package_check.sh b/package_check.sh index 7d8380a..a9cc1d4 100755 --- a/package_check.sh +++ b/package_check.sh @@ -231,7 +231,89 @@ fi +# Cette fonctionne détermine le niveau final de l'application, en prenant en compte d'éventuels forçages +APP_LEVEL () { + level=0 # Initialise le niveau final à 0 + # Niveau 1: L'application ne s'installe pas ou ne fonctionne pas après installation. + if [ "${level[1]}" == "auto" ] || [ "${level[1]}" -eq 2 ]; then + if [ "$GLOBAL_CHECK_SETUP" -eq 1 ] && [ "$GLOBAL_CHECK_REMOVE" -eq 1 ] + then level[1]=2 ; else level[1]=0 ; fi + fi + + # Niveau 2: L'application s'installe et se désinstalle dans toutes les configurations communes. + if [ "${level[2]}" == "auto" ] || [ "${level[2]}" -eq 2 ]; then + if [ "$GLOBAL_CHECK_SUB_DIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PRIVATE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PUBLIC" -ne -1 ] && \ + [ "$GLOBAL_CHECK_MULTI_INSTANCE" -ne -1 ] + then level[2]=2 ; else level[2]=0 ; fi + fi + + # Niveau 3: L'application supporte l'upgrade depuis une ancienne version du package. + if [ "${level[3]}" == "auto" ] || [ "${level[3]}" == "2" ]; then + if [ "$GLOBAL_CHECK_UPGRADE" -eq 1 ] || ( [ "${level[3]}" == "2" ] && [ "$GLOBAL_CHECK_UPGRADE" -ne -1 ] ) + then level[3]=2 ; else level[3]=0 ; fi + fi + + # Niveau 4: L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement + + # Niveau 5: Aucune erreur dans package_linter. + if [ "${level[5]}" == "auto" ] || [ "${level[5]}" == "2" ]; then + if [ "$GLOBAL_LINTER" -eq 1 ] || ( [ "${level[5]}" == "2" ] && [ "$GLOBAL_LINTER" -ne -1 ] ) + then level[5]=2 ; else level[5]=0 ; fi + fi + + # Niveau 6: L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. + if [ "${level[6]}" == "auto" ] || [ "${level[6]}" == "2" ]; then + if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ] && [ "$GLOBAL_CHECK_RESTORE" -eq 1 ] || ( [ "${level[6]}" == "2" ] && [ "$GLOBAL_CHECK_BACKUP" -ne -1 ] && [ "$GLOBAL_CHECK_RESTORE" -ne -1 ] ) + then level[6]=2 ; else level[6]=0 ; fi + fi + + # Niveau 7: Aucune erreur dans package check. + if [ "${level[7]}" == "auto" ] || [ "${level[7]}" == "2" ]; then + if [ "$GLOBAL_CHECK_SETUP" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_SUB_DIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_UPGRADE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PRIVATE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PUBLIC" -ne -1 ] && \ + [ "$GLOBAL_CHECK_MULTI_INSTANCE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_ADMIN" -ne -1 ] && \ + [ "$GLOBAL_CHECK_DOMAIN" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PATH" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PORT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_BACKUP" -ne -1 ] && \ + [ "$GLOBAL_CHECK_RESTORE" -ne -1 ] + then level[7]=2 ; else level[7]=0 ; fi + fi + + # Niveau 8: L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement + + # Niveau 9: L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement + + # Niveau 10: L'application est jugée parfaite. -- Doit être vérifié manuellement + + # Calcule le niveau final + for i in {1..10}; do + if [ "${level[i]}" == "auto" ]; then + level[i]=0 # Si des niveaux sont encore à auto, c'est une erreur de syntaxe dans le check_process, ils sont fixé à 0. + elif [ "${level[i]}" == "na" ]; then + continue # Si le niveau est "non applicable" (na), il est ignoré dans le niveau final + elif [ "${level[i]}" -ge 1 ]; then + level=$i # Si le niveau est validé, il est pris en compte dans le niveau final + else + break # Dans les autres cas (niveau ni validé, ni ignoré), la boucle est stoppée. Le niveau final est donc le niveau précédemment validé + fi + done +} + TEST_RESULTS () { + APP_LEVEL ECHO_FORMAT "\n\nPackage linter: " if [ "$GLOBAL_LINTER" -eq 1 ]; then ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" @@ -439,6 +521,20 @@ TEST_RESULTS () { fi ECHO_FORMAT "$note/20 $smiley\n" "$color_note" "$typo_note" ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/21\n\n" "white" "bold" + + # Affiche le niveau final + ECHO_FORMAT "Niveau de l'application: $level\n" "white" "bold" + for i in {1..10} + do + ECHO_FORMAT "\t Niveau $i: " + if [ "${level[i]}" == "na" ]; then + ECHO_FORMAT "N/A\n" + elif [ "${level[i]}" -ge 1 ]; then + ECHO_FORMAT "1\n" "white" "bold" + else + ECHO_FORMAT "0\n" + fi + done } INIT_VAR() { @@ -499,7 +595,21 @@ INIT_VAR() { final_path_already_use=0 } +INIT_LEVEL() { + level[1]="auto" # L'application s'installe et se désinstalle correctement. -- Peut être vérifié par package_check + level[2]="auto" # L'application s'installe et se désinstalle dans toutes les configurations communes. -- Peut être vérifié par package_check + level[3]="auto" # L'application supporte l'upgrade depuis une ancienne version du package. -- Peut être vérifié par package_check + level[4]=0 # L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement + level[5]="auto" # Aucune erreur dans package_linter. -- Peut être vérifié par package_check + level[6]="auto" # L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. -- Peut être vérifié par package_check + level[7]="auto" # Aucune erreur dans package check. -- Peut être vérifié par package_check + level[8]=0 # L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement + level[9]=0 # L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement + level[10]=0 # L'application est jugée parfaite. -- Doit être vérifié manuellement +} + INIT_VAR +INIT_LEVEL echo -n "" > "$COMPLETE_LOG" # Initialise le fichier de log echo -n "" > "$RESULT" # Initialise le fichier des résulats d'analyse if [ "$no_lxc" -eq 0 ]; then @@ -510,6 +620,23 @@ if [ "$check_file" -eq 1 ] then # Si le fichier check_process est trouvé ## Parsing du fichier check_process de manière séquentielle. echo "Parsing du fichier check_process" + IN_LEVELS=0 + while read <&4 LIGNE + do # Parse les indications de niveaux d'app avant de parser les tests + LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne + if [ "${LIGNE:0:1}" == "#" ]; then + continue # Ligne de commentaire, ignorée. + fi + if echo "$LIGNE" | grep -q "^;;; Levels"; then # Définition des variables de niveaux + IN_LEVELS=1 + fi + if [ "$IN_LEVELS" -eq 1 ] + then + if echo "$LIGNE" | grep -q "Level "; then # Définition d'un niveau + level[$(echo "$LIGNE" | cut -d '=' -f1 | cut -d ' ' -f2)]=$(echo "$LIGNE" | cut -d '=' -f2) + fi + fi + done 4< "$APP_CHECK/check_process" while read <&4 LIGNE do LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne @@ -520,7 +647,7 @@ then # Si le fichier check_process est trouvé if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove auto_remove=$(echo "$LIGNE" | cut -d '=' -f2) fi - if echo "$LIGNE" | grep -q "^;;"; then # Début d'un scénario de test + if echo "$LIGNE" | grep -q "^;;" && ! echo "$LIGNE" | grep -q "^;;;"; then # Début d'un scénario de test if [ "$IN_PROCESS" -eq 1 ]; then # Un scénario est déjà en cours. Donc on a atteind la fin du scénario. TESTING_PROCESS TEST_RESULTS @@ -533,6 +660,7 @@ then # Si le fichier check_process est trouvé IN_PROCESS=1 MANIFEST=0 CHECKS=0 + IN_LEVELS=0 fi if [ "$IN_PROCESS" -eq 1 ] then # Analyse des arguments du scenario de test diff --git a/sub_scripts/testing_process.sh b/sub_scripts/testing_process.sh index de2f8bc..0b59b13 100644 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -306,7 +306,7 @@ CHECK_SETUP_NO_URL () { note=$((note+1)) fi GLOBAL_CHECK_SETUP=1 # Installation réussie - GLOBAL_CHECK_SUB_DIR=1 + GLOBAL_CHECK_ROOT=1 else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then @@ -327,7 +327,8 @@ CHECK_SETUP_NO_URL () { if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 0 ]; then note=$((note+1)) fi - GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression réussie + GLOBAL_CHECK_REMOVE=1 # Suppression réussie + GLOBAL_CHECK_REMOVE_ROOT=1 else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then